inetd: if argv[0] is not specified, set it to program name
authorMike Frysinger <vapier@gentoo.org>
Mon, 22 Nov 2010 03:57:37 +0000 (04:57 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 22 Nov 2010 03:57:37 +0000 (04:57 +0100)
With inetd.conf files that skip argv[], inetd execs programs with argc==0.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/inetd.c

index ac42c52722cf9421b2912b398e7eeb78ae23345f..fb00c6cd71e8df10d42ba7ee643c5d8078672d96 100644 (file)
@@ -778,6 +778,12 @@ static servtab_t *parse_one_line(void)
        argc = 0;
        while ((arg = token[6+argc]) != NULL && argc < MAXARGV)
                sep->se_argv[argc++] = xstrdup(arg);
+       /* Some inetd.conf files have no argv's, not even argv[0].
+        * Fix them up.
+        * (Technically, programs can be execed with argv[0] = NULL,
+        * but many programs do not like that at all) */
+       if (argc == 0)
+               sep->se_argv[0] = xstrdup(sep->se_program);
 
        /* catch mixups. "<service> stream udp ..." == wtf */
        if (sep->se_socktype == SOCK_STREAM) {