]> granicus.if.org Git - sudo/commitdiff
Instead of setprogname(), add initprogname() which gets the program
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 2 Dec 2013 02:12:21 +0000 (19:12 -0700)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 2 Dec 2013 02:12:21 +0000 (19:12 -0700)
name for getprogname() using /proc or pstat() if possible.

21 files changed:
MANIFEST
common/Makefile.in
common/progname.c [new file with mode: 0644]
compat/Makefile.in
compat/getprogname.c [deleted file]
configure
configure.ac
include/missing.h
mkdep.pl
plugins/sample/sample_plugin.c
plugins/sudoers/policy.c
plugins/sudoers/regress/check_symbols/check_symbols.c
plugins/sudoers/regress/iolog_path/check_iolog_path.c
plugins/sudoers/regress/logging/check_wrap.c
plugins/sudoers/regress/parser/check_addr.c
plugins/sudoers/sudoreplay.c
plugins/sudoers/testsudoers.c
plugins/sudoers/visudo.c
src/parse_args.c
src/regress/ttyname/check_ttyname.c
src/sudo.c

index 72de7a00d3547ebc4609a28e7816543af1c741a6..193a9868c799f64276ac187312c6d856e3bd29eb 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -21,6 +21,7 @@ common/fileops.c
 common/fmt_string.c
 common/gidlist.c
 common/lbuf.c
+common/progname.c
 common/regress/sudo_conf/conf_test.c
 common/regress/sudo_conf/test1.in
 common/regress/sudo_conf/test1.out.ok
@@ -69,7 +70,6 @@ compat/getgrouplist.c
 compat/getline.c
 compat/getopt.h
 compat/getopt_long.c
-compat/getprogname.c
 compat/glob.c
 compat/glob.h
 compat/isblank.c
index 578c90bd56f64bc4d004c77662d7f511191697d0..3314fd1eba44f4672c19e5d4be29af6fcf7c8d92 100644 (file)
@@ -67,9 +67,9 @@ DEFS = @OSDEFS@ -D_PATH_SUDO_CONF=\"$(sysconfdir)/sudo.conf\"
 SHELL = @SHELL@
 
 LTOBJS = alloc.lo atobool.lo atoid.lo event.lo fatal.lo fileops.lo \
-        fmt_string.lo gidlist.lo lbuf.lo secure_path.lo setgroups.lo \
-        sudo_conf.lo sudo_debug.lo sudo_dso.lo sudo_printf.lo term.lo \
-        ttysize.lo @COMMON_OBJS@
+        fmt_string.lo gidlist.lo lbuf.lo progname.lo secure_path.lo \
+        setgroups.lo sudo_conf.lo sudo_debug.lo sudo_dso.lo sudo_printf.lo \
+        term.lo ttysize.lo @COMMON_OBJS@
 
 PARSELN_TEST_OBJS = parseln_test.lo locale_stub.lo
 
@@ -228,6 +228,8 @@ parseln_test.lo: $(srcdir)/regress/sudo_parseln/parseln_test.c \
                  $(incdir)/fileops.h $(incdir)/missing.h \
                  $(top_builddir)/config.h $(top_srcdir)/compat/stdbool.h
        $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/sudo_parseln/parseln_test.c
+progname.lo: $(srcdir)/progname.c $(incdir)/missing.h $(top_builddir)/config.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/progname.c
 secure_path.lo: $(srcdir)/secure_path.c $(incdir)/missing.h \
                 $(incdir)/secure_path.h $(incdir)/sudo_debug.h \
                 $(top_builddir)/config.h
diff --git a/common/progname.c b/common/progname.c
new file mode 100644 (file)
index 0000000..59655c4
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2013 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <config.h>
+
+/* Large files not supported by procfs.h */
+#if defined(HAVE_PROCFS_H) || defined(HAVE_SYS_PROCFS_H)
+# undef _FILE_OFFSET_BITS
+# undef _LARGE_FILES
+#endif
+
+#include <sys/types.h>
+#ifdef HAVE_PSTAT_GETPROC
+# include <sys/param.h>
+# include <sys/pstat.h>
+#endif
+#if defined(HAVE_PROCFS_H)
+# include <procfs.h>
+#elif defined(HAVE_SYS_PROCFS_H)
+# include <sys/procfs.h>
+#endif
+
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif /* STDC_HEADERS */
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif /* HAVE_STRING_H */
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif /* HAVE_STRINGS_H */
+#include <errno.h>
+#include <fcntl.h>
+
+#include "missing.h"
+
+#if defined(HAVE_GETPROGNAME) || defined(HAVE___PROGNAME)
+
+/* STUB */
+void
+initprogname(const char *name)
+{
+    return;
+}
+
+#else
+
+static const char *progname = "";
+
+void
+initprogname(const char *name)
+{
+    const char *base;
+#ifdef HAVE_PSTAT_GETPROC
+    static char ucomm[PST_UCOMMLEN];
+    struct pst_status pstat;
+    int rc;
+
+    /*
+     * Determine the progname from pst_ucomm in struct pst_status.
+     * We may get EOVERFLOW if the whole thing doesn't fit but that is OK.
+     */
+    rc = pstat_getproc(&pstat, sizeof(pstat), (size_t)0, (int)getpid());
+    if (rc != -1 || errno == EOVERFLOW) {
+        strlcpy(ucomm, pstat.pst_ucomm, sizeof(ucomm));
+       progname = ucomm;
+       return;
+    }
+#elif defined(HAVE_PROCFS_H) || defined(HAVE_SYS_PROCFS_H)
+    /* XXX - configure check for psinfo.pr_fname */
+    static char ucomm[PRFNSZ];
+    struct psinfo psinfo;
+    char path[PATH_MAX];
+    ssize_t nread;
+    int fd;
+
+    /* Try to determine the tty from pr_ttydev in /proc/pid/psinfo. */
+    snprintf(path, sizeof(path), "/proc/%u/psinfo", (unsigned int)getpid());
+    if ((fd = open(path, O_RDONLY, 0)) != -1) {
+       nread = read(fd, &psinfo, sizeof(psinfo));
+       close(fd);
+       if (nread == (ssize_t)sizeof(psinfo)) {
+           strlcpy(ucomm, psinfo.pr_fname, sizeof(ucomm));
+           progname = ucomm;
+           return;
+       }
+    }
+#endif /* HAVE_PSTAT_GETPROC */
+
+    if ((base = strrchr(name, '/')) != NULL) {
+       base++;
+    } else {
+       base = name;
+    }
+    progname = base;
+}
+
+const char *
+getprogname(void)
+{
+    return progname;
+}
+
+#endif /* !HAVE_GETPROGNAME && !HAVE___PROGNAME */
index 30716ff6f27b682ec722b89592e8d60d82959252..ef11f307e91e4de204b3fc1b7cd14e366b7fca91 100644 (file)
@@ -185,9 +185,6 @@ getline.lo: $(srcdir)/getline.c $(incdir)/missing.h $(top_builddir)/config.h
 getopt_long.lo: $(srcdir)/getopt_long.c $(incdir)/fatal.h $(incdir)/missing.h \
                 $(top_builddir)/config.h $(top_srcdir)/compat/getopt.h
        $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getopt_long.c
-getprogname.lo: $(srcdir)/getprogname.c $(incdir)/missing.h \
-                $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getprogname.c
 glob.lo: $(srcdir)/glob.c $(incdir)/missing.h $(top_builddir)/config.h \
          $(top_srcdir)/compat/charclass.h $(top_srcdir)/compat/glob.h
        $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/glob.c
diff --git a/compat/getprogname.c b/compat/getprogname.c
deleted file mode 100644 (file)
index 6fa876d..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2010, 2013 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <config.h>
-
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <string.h>
-
-#include "missing.h"
-
-static const char *progname = "sudo";
-
-void
-setprogname(const char *name)
-{
-    const char *base;
-
-    if ((base = strrchr(name, '/')) != NULL) {
-       base++;
-    } else {
-       base = name;
-    }
-    if (strcmp(progname, base) != 0)
-       progname = base;
-}
-
-const char *
-getprogname(void)
-{
-    return progname;
-}
-#endif /* !HAVE_GETPROGNAME !HAVE___PROGNAME */
index e67dfa91ab7c832af58db01cc39edcda185a5ee7..13c656a4a0750f8bd13a47c04c9361ce61bbd98d 100755 (executable)
--- a/configure
+++ b/configure
     if test "$sudo_cv___progname" = "yes"; then
        $as_echo "#define HAVE___PROGNAME 1" >>confdefs.h
 
-    else
-       case " $LIBOBJS " in
-  *" getprogname.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS getprogname.$ac_objext"
- ;;
-esac
-
     fi
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv___progname" >&5
 $as_echo "$sudo_cv___progname" >&6; }
index 2721b98b0dbf0da734c9ab5c6c9ca78ec83ff6b0..f972209e1bf17ac61bb37b7686173419eac91a6b 100644 (file)
@@ -2559,8 +2559,6 @@ AC_CHECK_FUNCS(getprogname, , [
     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *__progname; (void)puts(__progname);]])], [sudo_cv___progname=yes], [sudo_cv___progname=no])])
     if test "$sudo_cv___progname" = "yes"; then
        AC_DEFINE(HAVE___PROGNAME)
-    else
-       AC_LIBOBJ(getprogname)
     fi
     AC_MSG_RESULT($sudo_cv___progname)
 ])
index b2cc05e1a9645b2c20a9061ed2e9fcb0e794c7d2..0c89f5e5af9289ed2df6046f2e333559be280dfe 100644 (file)
@@ -282,7 +282,6 @@ extern const char *__progname;
 #  define getprogname()                (__progname)
 # else
 const char *getprogname(void);
-void setprogname(const char *);
 # endif /* HAVE___PROGNAME */
 #endif /* !HAVE_GETPROGNAME */
 
@@ -447,5 +446,6 @@ char *strsignal(int);
 #ifndef HAVE_SIG2STR
 int sig2str(int, char *);
 #endif
+void initprogname(const char *);
 
 #endif /* _SUDO_MISSING_H */
index 91a2d9bb939dbff2e69f5b4bac3dad66900a2045..6b108f7836e5a998b5f77fea8d24bb7431d93d0d 100755 (executable)
--- a/mkdep.pl
+++ b/mkdep.pl
@@ -70,7 +70,7 @@ sub mkdep {
     $makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo sssd.lo:;
     # XXX - fill in AUTH_OBJS from contents of the auth dir instead
     $makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:;
-    $makefile =~ s:\@LTLIBOBJS\@:closefrom.lo fnmatch.lo getaddrinfo.lo getcwd.lo getgrouplist.lo getline.lo getprogname.lo getopt_long.lo glob.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo pw_dup.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo utimes.lo globtest.o fnm_test.o:;
+    $makefile =~ s:\@LTLIBOBJS\@:closefrom.lo fnmatch.lo getaddrinfo.lo getcwd.lo getgrouplist.lo getline.lo getopt_long.lo glob.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo pw_dup.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo utimes.lo globtest.o fnm_test.o:;
 
     # Parse OBJS lines
     my %objs;
index faa4ea6baee0642c5270f5d1fb958d6213c0bffe..f1d6392e7d45e6976c3f572481e58b18e7c3a976 100644 (file)
@@ -138,11 +138,9 @@ policy_open(unsigned int version, sudo_conv_t conversation,
        if (strncmp(*ui, "runas_group=", sizeof("runas_group=") - 1) == 0) {
            runas_group = *ui + sizeof("runas_group=") - 1;
        }
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
        if (strncmp(*ui, "progname=", sizeof("progname=") - 1) == 0) {
-           setprogname(*ui + sizeof("progname=") - 1);
+           initprogname(*ui + sizeof("progname=") - 1);
        }
-#endif
        /* Check to see if sudo was called as sudoedit or with -e flag. */
        if (strncmp(*ui, "sudoedit=", sizeof("sudoedit=") - 1) == 0) {
            if (strcasecmp(*ui + sizeof("sudoedit=") - 1, "true") == 0)
index d724307fb47d8aa4d7b29f9cb906369f0ddd654e..6c9286ede25246e8b5eb65837aabbe7a51de59e2 100644 (file)
@@ -253,12 +253,10 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group)
            continue;
        }
 #endif /* HAVE_BSD_AUTH_H */
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
        if (MATCHES(*cur, "progname=")) {
-           setprogname(*cur + sizeof("progname=") - 1);
+           initprogname(*cur + sizeof("progname=") - 1);
            continue;
        }
-#endif
        if (MATCHES(*cur, "network_addrs=")) {
            interfaces_string = *cur + sizeof("network_addrs=") - 1;
            set_interfaces(interfaces_string);
index 034b04813f366ba1b78df295571c2c388fee42ea..2a18200ab112757d3b507361fe90c9183af73217 100644 (file)
@@ -51,7 +51,7 @@ __dso_public int main(int argc, char *argv[]);
 static void
 usage(void)
 {
-    fprintf(stderr, "usage: load_symbols plugin.so symbols_file\n");
+    fprintf(stderr, "usage: %s plugin.so symbols_file\n", getprogname());
     exit(1);
 }
 
@@ -65,9 +65,7 @@ main(int argc, char *argv[])
     FILE *fp;
     int ntests = 0, errors = 0;
 
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    setprogname(argc > 0 ? argv[0] : "check_symbols");
-#endif
+    initprogname(argc > 0 ? argv[0] : "check_symbols");
 
     if (argc != 3)
        usage();
index f3c07622e55d8155dd39c6260de5bbaad0e3ade5..12fb81ee74c69a3aa4b44a807876fd0835d4be89 100644 (file)
@@ -55,7 +55,7 @@ __dso_public int main(int argc, char *argv[]);
 static void
 usage(void)
 {
-    fprintf(stderr, "usage: check_iolog_path datafile\n");
+    fprintf(stderr, "usage: %s datafile\n", getprogname());
     exit(1);
 }
 
@@ -106,9 +106,7 @@ main(int argc, char *argv[])
     int errors = 0;
     int tests = 0;
 
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    setprogname(argc > 0 ? argv[0] : "check_iolog_path");
-#endif
+    initprogname(argc > 0 ? argv[0] : "check_iolog_path");
 
     if (argc != 2)
        usage();
index bc25868eb08fccee8d1b974d99887502eea0ae02..3d5a8195e34141764c8f6e2a73400619c5543d92 100644 (file)
@@ -49,7 +49,7 @@ __dso_public int main(int argc, char *argv[]);
 static void
 usage(void)
 {
-    fprintf(stderr, "usage: check_wrap inputfile\n");
+    fprintf(stderr, "usage: %s inputfile\n", getprogname());
     exit(1);
 }
 
@@ -61,9 +61,7 @@ main(int argc, char *argv[])
     char *cp, *dash, *line, lines[2][2048];
     int which = 0;
 
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    setprogname(argc > 0 ? argv[0] : "check_wrap");
-#endif
+    initprogname(argc > 0 ? argv[0] : "check_wrap");
 
     if (argc != 2)
        usage();
index 46a5920d72ee2bdb2c8a98b897f6453585cae813..86576a2da04ed570c3b6db1cb88bef0c5843f9ee 100644 (file)
@@ -79,7 +79,7 @@ check_addr(char *input)
 static void
 usage(void)
 {
-    fprintf(stderr, "usage: check_addr datafile\n");
+    fprintf(stderr, "usage: %s datafile\n", getprogname());
     exit(1);
 }
 
@@ -91,9 +91,7 @@ main(int argc, char *argv[])
     size_t len;
     FILE *fp;
 
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    setprogname(argc > 0 ? argv[0] : "check_addr");
-#endif
+    initprogname(argc > 0 ? argv[0] : "check_addr");
 
     if (argc != 2)
        usage();
index 31e94f251c075fd1d7408b28ef91bb110aada84c..27eaf55c315007c3a5d182b97f51caa84be8ed2a 100644 (file)
@@ -243,10 +243,7 @@ main(int argc, char *argv[])
     }  
 #endif
 
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    setprogname(argc > 0 ? argv[0] : "sudoreplay");
-#endif
-
+    initprogname(argc > 0 ? argv[0] : "sudoreplay");
     sudoers_setlocale(SUDOERS_LOCALE_USER, NULL);
     decimal = localeconv()->decimal_point;
     bindtextdomain("sudoers", LOCALEDIR); /* XXX - should have sudoreplay domain */
index 67ce2490b9f59174646a94b5d7af80a2469c7f0b..c83659b2834c4428a6d3f6f01f71c9c8c1993ec5 100644 (file)
@@ -138,9 +138,7 @@ main(int argc, char *argv[])
     sudoersdebug = 1;
 #endif
 
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    setprogname(argc > 0 ? argv[0] : "testsudoers");
-#endif
+    initprogname(argc > 0 ? argv[0] : "testsudoers");
 
     sudoers_setlocale(SUDOERS_LOCALE_USER, NULL);
     bindtextdomain("sudoers", LOCALEDIR); /* XXX - should have own domain */
index f10b0eba39dbe9dc78cde4c6c0a681124fccb40d..6cb1c08ae216768cd15358b453e75b18fb26242b 100644 (file)
@@ -166,10 +166,7 @@ main(int argc, char *argv[])
     }
 #endif
 
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    setprogname(argc > 0 ? argv[0] : "visudo");
-#endif
-
+    initprogname(argc > 0 ? argv[0] : "visudo");
     sudoers_setlocale(SUDOERS_LOCALE_USER, NULL);
     bindtextdomain("sudoers", LOCALEDIR); /* XXX - should have visudo domain */
     textdomain("sudoers");
index 54bc5376d9bfd446333eca81ccd970bd102e5867..61d4647d94e8ace3fd9104e7bbb8aeb2992f7c01 100644 (file)
@@ -185,7 +185,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
 
     env_add = emalloc2(env_size, sizeof(char *));
 
-    /* Pass progname to plugin so it can call setprogname() */
+    /* Pass progname to plugin so it can call initprogname() */
     sudo_settings[ARG_PROGNAME].value = getprogname();
 
     /* First, check to see if we were invoked as "sudoedit". */
index be381dd4dcf32342a194f65878946fae50f72377..f807f4a0bb47eab3d0aa7d18b32a27e00530bac3 100644 (file)
@@ -52,9 +52,7 @@ main(int argc, char *argv[])
     char *tty_libc, *tty_sudo;
     int rval = 0;
 
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    setprogname(argc > 0 ? argv[0] : "check_ttyname");
-#endif
+    initprogname(argc > 0 ? argv[0] : "check_ttyname");
 
     /* Lookup tty name via libc. */
     if ((tty_libc = ttyname(STDIN_FILENO)) == NULL &&
index ffa1baff83d21b789c3ff8a35c45fd91ff1b43b9..075b414a32aa12ad42c6593021805ee657c1c9e1 100644 (file)
@@ -299,10 +299,7 @@ main(int argc, char *argv[], char *envp[])
 int
 os_init_common(int argc, char *argv[], char *envp[])
 {
-#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
-    if (argc > 0)
-       setprogname(argv[0]);
-#endif
+    initprogname(argc > 0 ? argv[0] : "sudo");
 #ifdef STATIC_SUDOERS_PLUGIN
     preload_static_symbols();
 #endif