On 2020/01/23 21:20, Damien Miller wrote: > On Thu, 23 Jan 2020, Damien Miller wrote: > > > On Thu, 23 Jan 2020, Damien Miller wrote: > > > > > What information would you like there? We could put the first N listen > > > addrs in the proctitle if that would help. > > > > Maybe like this: > > > > 63817 ?? S 0:00.05 sshd: [listen] on [0.0.0.0]:22, [::]:22, 0 of > > 10-100 > > antoine@ said this was not sufficient, so please try the following: > > 63817 ?? I 0:00.09 sshd: /usr/sbin/sshd [listener] 0 of 10-100 > startups
That works - etc/rc.d/sshd diff to match as follows: Index: sshd =================================================================== RCS file: /cvs/src/etc/rc.d/sshd,v retrieving revision 1.5 diff -u -p -r1.5 sshd --- sshd 22 Jan 2020 13:14:51 -0000 1.5 +++ sshd 24 Jan 2020 11:59:52 -0000 @@ -6,7 +6,7 @@ daemon="/usr/sbin/sshd" . /etc/rc.d/rc.subr -pexp="sshd: \[listener\].*" +pexp="sshd: ${daemon}${daemon_flags:+ ${daemon_flags}} \[listener\].*" rc_reload() { ${daemon} ${daemon_flags} -t && pkill -HUP -xf "${pexp}" > > diff --git a/sshd.c b/sshd.c > index f6139fe..b7ed0f3 100644 > --- a/sshd.c > +++ b/sshd.c > @@ -240,6 +240,8 @@ void destroy_sensitive_data(void); > void demote_sensitive_data(void); > static void do_ssh2_kex(struct ssh *); > > +static char *listener_proctitle; > + > /* > * Close all listening sockets > */ > @@ -1032,9 +1034,9 @@ server_accept_loop(int *sock_in, int *sock_out, int > *newsock, int *config_s) > */ > for (;;) { > if (ostartups != startups) { > - setproctitle("[listener] %d of %d-%d startups", > - startups, options.max_startups_begin, > - options.max_startups); > + setproctitle("%s [listener] %d of %d-%d startups", > + listener_proctitle, startups, > + options.max_startups_begin, options.max_startups); > ostartups = startups; > } > if (received_sighup) { > @@ -1347,6 +1349,41 @@ accumulate_host_timing_secret(struct sshbuf > *server_cfg, > sshbuf_free(buf); > } > > +static void > +xextendf(char **s, const char *sep, const char *fmt, ...) > + __attribute__((__format__ (printf, 3, 4))) __attribute__((__nonnull__ > (3))); > +static void > +xextendf(char **sp, const char *sep, const char *fmt, ...) > +{ > + va_list ap; > + char *tmp1, *tmp2; > + > + va_start(ap, fmt); > + xvasprintf(&tmp1, fmt, ap); > + va_end(ap); > + > + if (*sp == NULL || **sp == '\0') { > + free(*sp); > + *sp = tmp1; > + return; > + } > + xasprintf(&tmp2, "%s%s%s", *sp, sep, tmp1); > + free(tmp1); > + free(*sp); > + *sp = tmp2; > +} > + > +static char * > +prepare_proctitle(int ac, char **av) > +{ > + char *ret = NULL; > + int i; > + > + for (i = 0; i < ac; i++) > + xextendf(&ret, " ", "%s", av[i]); > + return ret; > +} > + > /* > * Main program for the daemon. > */ > @@ -1774,6 +1811,7 @@ main(int ac, char **av) > rexec_argv[rexec_argc] = "-R"; > rexec_argv[rexec_argc + 1] = NULL; > } > + listener_proctitle = prepare_proctitle(ac, av); > > /* Ensure that umask disallows at least group and world write */ > new_umask = umask(0077) | 0022; >