Subject: RE: [Patch 1/3] connect.c: add nonstopssh variant to the sshVariant set.

From: "Randall S. Becker" <[email-masked]>
Date: Fri, 4 Jun 2021 15:29:51 -0400

On May 10, 2021 11:24 AM, I wrote:
>On April 30, 2021 1:32 PM, I wrote:
>>Subject: RE: [Patch 1/3] connect.c: add nonstopssh variant to the sshVariant set.
>>
>>On April 30, 2021 1:17 PM, Elijah Newren wrote:
>>>On Fri, Apr 30, 2021 at 9:38 AM Randall S. Becker
>>><[email-masked]>
>>>wrote:
>>>>
>>>> On April 30, 2021 12:25 PM, Elijah Newren wrote:
>>>> >On Fri, Apr 30, 2021 at 7:58 AM Randall S. Becker
>>>> ><[email-masked]>
>>>> >wrote:
>>>> >>
>>>> >> From ba4beb8ed0dff67ae6b95692d346adce346e2871 Mon Sep 17
>>00:00:00
>>>> >2001
>>>> >> From: "Randall S. Becker" <[email-masked]>
>>>> >> Date: Fri, 30 Apr 2021 09:56:09 -0400
>>>> >> Subject: [Patch 1/3] connect.c: add nonstopssh variant to the
>>>> >> sshVariant
>>set.
>>>> >>
>>>> >> This enhancement allows the NonStop SSH subsystem to be supported
>>>> >> by git without the need of a wrapper script. The command
>>>> >> arguments for the platform SSH client in /G/system/zssh/sshoss
>>>> >> are constructed based on optional supplied environment variables
>>>> >> SSH2_PROCESS_NAME (system defined), SSH_SUPPRESS_QUIET, and
>>>SSH_SUPPRESS_BANNER.
>>>> >
>>>> >Before introducing 3 new special environment variables, I think
>>>> >this commit message should explain why you can't just use
>>>> >
>>>> >GIT_SSH_COMMAND="/G/system/zssh/sshoss -Z -Q -S"
>>>>
>>>> No, it would be GIT_SSH_COMMAND='/G/system/zssh/sshoss -Z -Q -S
>>$ZSSH0'
>>>and that does not work correctly in the current git code base.
>>>
>>>Is the problem that $ZSSH0 may contain spaces, or that $ZSSH0 is
>>>expected to change over time and you don't want to have to re-run
>>>
>>>GIT_SSH_COMMAND="/G/system/zssh/sshoss -Z -Q -S $ZSSH0"
>>>
>>>each time?

I'm looking for a more general solution than what I originally proposed, but still think that we need the variant. With that said: there are multiple command arguments to sshoss that need to be supported and an environment variable for each is obviously not effective. I am thinking that this variant has value. The primary problem is supplying -S $ZSSH0 on the command line causes $ZSSH0 to be resolved as a shell variable. It is not. It is the process name of the SSH stack, which can vary. The current code, if -S $ZSSH0 is supplied, ends up resolving to nothing, so the -S argument eats the URL and the SSH operation fails. The other problem is that sshoss does not support a URL with a port number in it, so that must be resolved explicitly as -p port, but the other variants do not handle this situation, with -S. At the very least, those two parameters (-S, -p) have to be accounted for in the variant, and -Q (suppress local banner) is required or the dialog generally breaks because it com
 es back on stdout and confuses git. What I am considering is a single NONSTOP_SSH_ARGUMENTS environment variable to contain all other options that may be there today or in future, and have the internal code split the arguments up appropriately.

A bit of background on process names. $ZSSH0 is an example. On my system there is $ZSSGT (external subnets) and $ZSSH1 (internal subnets). There is a wide variety of naming, but they all begin with the annoying $ sign. Escaping the $ does not work consistently, I think because there are varying numbers of shells involved given different circumstances that only impacts the NonStop platform - it's not for lack of trying to get around this.

Looking for guidance on this use case - not expecting this for 2.32, obviously. Currently, we are forced to use a wrapper script, which is not ideal. The -p option has to be embedded in the script so using a GitHub, BitBucket, GitLab, etc., supplied URI does not work correctly. Of course, the script could parse out the :port, but URI parsing seems redundant given the variant mechanism.

Thanks,
Randall