Possible formatting bug in ssh-agent.1 man page

Ingo Schwarze schwarze at usta.de
Wed Sep 28 07:10:35 AEST 2016


Hi,

Glenn Golden wrote on Mon, Sep 26, 2016 at 02:55:08PM -0600:

> Version info: OpenSSH_7.3p1, OpenSSL 1.0.2i  22 Sep 2016, Arch linux
> 
> The ssh-agent.1 man page seems to have an indentation oddity, at least, as
> formatted with recent Arch linux manpage toolset. Here's what appears in
> the formatted output just after the description of the the "-t" option:
> 
>      ---------- Begin formatted output -------------------------------------
>        -t life
>               Set a default value for the maximum lifetime of identities added
>               to  the agent.  The lifetime may be specified in seconds or in a
>               time format specified in sshd_config(5).  A  lifetime  specified
>               for  an  identity with ssh-add(1) overrides this value.  Without
>               this option the default maximum lifetime is forever.
> 
>               If a command line is given, this is executed as a subprocess  of
>               the agent.  When the command dies, so does the agent.
> 
>               The  idea  is that the agent is run in the user's local PC, lap
>                       .
>                       .
>                       .
>      ------------ End formatted output -------------------------------------
> 
> Seems to me like all the paragraphs after the one immediately
> below "-t life" (starting with "If a command line..." and thereafter)
> are meant to be outdented to the main indentation level so that they
> do not appear be associated with the description of the -t option.

Glenn sent some additional information to me in private.

It turned out the problem is caused by a bug in the script mdoc2man.awk.
The bug is not platform-specific.  With the information Glenn
provided, i can easily reproduce the problem from git master on
OpenBSD-current if i use

  $ ./configure --with-mantype=man

The problem is that the awk script neglects terminating top level
lists, resulting in bogus indentation unless the indentation gets
cancelled for some other reason like .SH.


The following patch fixes the problem.

It improves the following manuals when using --with-mantype=man:

 sftp-server(8) after -u umask
 ssh-add(1)     after FILES ~/.ssh/id_rsa
 ssh-agent(1)   after -t life
 ssh_config(5)  after 3. system-wide configuration file (.../ssh_config)
 sshd(8)        after X11-forwarding

The patch also inserts a few needless .PP before .SH, but that does
no harm.  mdoc2man.awk is a terrible hack and not a proper parser
in the first place, so we shouldn't expect beauty in its output.
If the output is correct and portable, that's good enough.  At some
point, we should replace mdoc2man.awk with mandoc -Tman anyway.
The last time i tried, there was still some work to do, so that
won't be instantaneous.

So, for now, i think the following patch should be committed to
git master.

Yours,
  Ingo


diff --git a/mdoc2man.awk b/mdoc2man.awk
index 80e8d5f..cf210ba 100644
--- a/mdoc2man.awk
+++ b/mdoc2man.awk
@@ -321,6 +321,8 @@ function add(str) {
       w=nwords
     } else if(match(words[w],"^El$")) {
       optlist=oldoptlist
+      if(!optlist)
+	add(".PP")
     } else if(match(words[w],"^Bk$")) {
       if(match(words[w+1],"-words")) {
 	w++


More information about the openssh-unix-dev mailing list