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 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;