[PATCH] OpenSSH 2.1.1pl3 (portable), readconf.c and strsep(3)

Ralf S. Engelschall rse at engelschall.com
Thu Jul 13 18:26:01 EST 2000

The latest changes (replacing strtok with strsep) in OpenSSH's readconf.c
broke many ~/.ssh/config files. Actually those which uses more than one
whitespace character to separate keyword and value.

For instance my ~/.ssh/config file reads:

| BatchMode             no
| Compression           yes
| CompressionLevel      3
| FallBackToRsh         no
| UsePrivilegedPort     no
| ForwardX11            no
| KeepAlive             yes
| StrictHostKeyChecking no
| ...

And now I got errors like this:

| /u/rse/.ssh/config line 1: Missing yes/no argument.

The problem is that strsep(1) explicitly supports empty fields (= the field
between two whitespace characters) and so doesn't automatically handle config
files as above. Old config files with the "key = value" syntax are also
broken, because " = " are in OpenSSH's current parsing three whitespace

I solved the problem by skipping additional whitespace characters between the
keyword and the value with the following patch (against readconf.c from
OpenSSH 2.1.1pl3):

--- readconf.c.orig Wed Jul 12 01:45:27 2000
+++ readconf.c  Thu Jul 13 10:11:36 2000
@@ -248,6 +248,7 @@
    /* Get the keyword. (Each line is supposed to begin with a keyword). */
    keyword = strsep(&s, WHITESPACE);
+   s += strspn(s, WHITESPACE);
    opcode = parse_token(keyword, filename, linenum);
    switch (opcode) {

This made all of our ~/.ssh/config files working again.

                                       Ralf S. Engelschall
                                       rse at engelschall.com

More information about the openssh-unix-dev mailing list