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;