From 96d1967ab05a1be4602f0d7582dd2a7b8e5e8bc9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 14 Jul 2014 09:08:50 -0600 Subject: [PATCH] Avoid passing -no-fast-install to libtool as this results in the build dir being left in the library path of the installed executable. Instead, we remove the "lt-" prefix from the program name in initprogname() so that the regress test output is unaffected by libtool's binary wrapper. --- config.h.in | 3 +++ configure | 10 +++++++++ configure.ac | 2 +- include/missing.h | 18 +++++----------- lib/util/progname.c | 42 ++++++++++++++++++++++++++++++------- lib/util/util.exp | 2 +- plugins/sudoers/Makefile.in | 18 ++++++++-------- 7 files changed, 64 insertions(+), 31 deletions(-) diff --git a/config.h.in b/config.h.in index 7097ffeb3..729afa8fe 100644 --- a/config.h.in +++ b/config.h.in @@ -512,6 +512,9 @@ /* Define to 1 if you have the `setkeycreatecon' function. */ #undef HAVE_SETKEYCREATECON +/* Define to 1 if you have the `setprogname' function. */ +#undef HAVE_SETPROGNAME + /* Define to 1 if you have the `setresuid' function. */ #undef HAVE_SETRESUID diff --git a/configure b/configure index 32e6797df..86728e24b 100755 --- a/configure +++ b/configure @@ -19198,6 +19198,16 @@ if test "x$ac_cv_func_getprogname" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPROGNAME 1 _ACEOF + for ac_func in setprogname +do : + ac_fn_c_check_func "$LINENO" "setprogname" "ac_cv_func_setprogname" +if test "x$ac_cv_func_setprogname" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SETPROGNAME 1 +_ACEOF + +fi +done else diff --git a/configure.ac b/configure.ac index 22d449c63..c69eb531d 100644 --- a/configure.ac +++ b/configure.ac @@ -2658,7 +2658,7 @@ done dnl dnl Check for getprogname() or __progname dnl -AC_CHECK_FUNCS(getprogname, , [ +AC_CHECK_FUNCS(getprogname, [AC_CHECK_FUNCS(setprogname)], [ AC_MSG_CHECKING([for __progname]) AC_CACHE_VAL(sudo_cv___progname, [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *__progname; (void)puts(__progname);]])], [sudo_cv___progname=yes], [sudo_cv___progname=no])]) diff --git a/include/missing.h b/include/missing.h index c5c34021d..2f9638990 100644 --- a/include/missing.h +++ b/include/missing.h @@ -300,19 +300,6 @@ typedef struct sigaction sigaction_t; # define killpg(s) kill(-(s)) #endif -/* - * If we lack getprogname(), emulate with __progname if possible. - * Otherwise, add a prototype for use with our own getprogname.c. - */ -#ifndef HAVE_GETPROGNAME -# ifdef HAVE___PROGNAME -extern const char *__progname; -# define getprogname() (__progname) -# else -__dso_public const char *getprogname(void); -# endif /* HAVE___PROGNAME */ -#endif /* !HAVE_GETPROGNAME */ - /* * Declare errno if errno.h doesn't do it for us. */ @@ -485,5 +472,10 @@ __dso_public int sudo_inet_pton(int af, const char *src, void *dst); # undef inet_pton # define inet_pton(_a, _b, _c) sudo_inet_pton((_a), (_b), (_c)) #endif /* HAVE_INET_PTON */ +#ifndef HAVE_GETPROGNAME +__dso_public const char *sudo_getprogname(void); +# undef getprogname +# define getprogname() sudo_getprogname() +#endif /* HAVE_GETPROGNAME */ #endif /* _SUDO_MISSING_H */ diff --git a/lib/util/progname.c b/lib/util/progname.c index 2fbd27503..9658d8ad1 100644 --- a/lib/util/progname.c +++ b/lib/util/progname.c @@ -54,12 +54,34 @@ #include "missing.h" #include "sudo_util.h" -#if defined(HAVE_GETPROGNAME) || defined(HAVE___PROGNAME) +#if defined(HAVE_GETPROGNAME) -/* STUB */ void initprogname(const char *name) { +# ifdef HAVE_SETPROGNAME + /* Check for libtool prefix and strip it if present. */ + name = getprogname(); + if (name[0] == 'l' && name[1] == 't' && name[2] == '-' && name[3] != '\0') + setprogname(name + 3); +# endif + return; +} + +#elif defined(HAVE___PROGNAME) + +extern const char *__progname; +static const char *progname = ""; + +void +initprogname(const char *name) +{ + /* Check for libtool prefix and strip it if present. */ + if (__progname[0] == 'l' && __progname[1] == 't' && __progname[2] == '-' && + __progname[3] != '\0') + progname = __progname + 3; + else + progname = __progname; return; } @@ -84,7 +106,7 @@ initprogname(const char *name) if (rc != -1 || errno == EOVERFLOW) { strlcpy(ucomm, pstat.pst_ucomm, sizeof(ucomm)); progname = ucomm; - return; + goto done; } #elif defined(HAVE_PROCFS_H) || defined(HAVE_SYS_PROCFS_H) /* XXX - configure check for psinfo.pr_fname */ @@ -102,7 +124,7 @@ initprogname(const char *name) if (nread == (ssize_t)sizeof(psinfo)) { strlcpy(ucomm, psinfo.pr_fname, sizeof(ucomm)); progname = ucomm; - return; + goto done; } } #endif /* HAVE_PSTAT_GETPROC */ @@ -113,12 +135,18 @@ initprogname(const char *name) base = name; } progname = base; + +done: + if (progname[0] == 'l' && progname[1] == 't' && progname[2] == '-' && + progname[3] != '\0') + progname += 3; } +#endif /* !HAVE_GETPROGNAME && !HAVE___PROGNAME */ +#if !defined(HAVE_GETPROGNAME) const char * -getprogname(void) +sudo_getprogname(void) { return progname; } - -#endif /* !HAVE_GETPROGNAME && !HAVE___PROGNAME */ +#endif /* !HAVE_GETPROGNAME */ diff --git a/lib/util/util.exp b/lib/util/util.exp index 646fcf424..7c47a69e1 100644 --- a/lib/util/util.exp +++ b/lib/util/util.exp @@ -23,7 +23,6 @@ aix_prep_user aix_restoreauthdb aix_setauthdb closefrom_fallback -getprogname initprogname isblank sudo_asprintf @@ -102,6 +101,7 @@ sudo_getgrouplist sudo_getline sudo_getopt_long sudo_getopt_long_only +sudo_getprogname sudo_glob sudo_globfree sudo_inet_pton diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 9325f6ee3..4436da94e 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -202,28 +202,28 @@ sudoers.la: $(SUDOERS_OBJS) $(LT_LIBS) libparsesudoers.la @LT_LDDEP@ $(LIBTOOL) @LT_STATIC@ --mode=link $(CC) $(LDFLAGS) $(LT_LDFLAGS) -o $@ $(SUDOERS_OBJS) libparsesudoers.la $(SUDOERS_LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so visudo: libparsesudoers.la $(VISUDO_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(VISUDO_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) libparsesudoers.la $(LIBS) $(VISUDO_LIBS) -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(VISUDO_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) libparsesudoers.la $(LIBS) $(VISUDO_LIBS) sudoreplay: timestr.lo $(REPLAY_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(REPLAY_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) timestr.lo $(LIBS) $(REPLAY_LIBS) -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(REPLAY_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) timestr.lo $(LIBS) $(REPLAY_LIBS) testsudoers: libparsesudoers.la $(TEST_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(TEST_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) libparsesudoers.la $(LIBS) $(TESTSUDOERS_LIBS) -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(TEST_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) libparsesudoers.la $(LIBS) $(TESTSUDOERS_LIBS) check_addr: $(CHECK_ADDR_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_ADDR_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) $(NET_LIBS) -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_ADDR_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) $(NET_LIBS) check_base64: $(CHECK_BASE64_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_BASE64_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_BASE64_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) check_digest: $(CHECK_DIGEST_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_DIGEST_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @LIBMD@ -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_DIGEST_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @LIBMD@ check_fill: $(CHECK_FILL_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_FILL_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_FILL_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) check_iolog_path: $(CHECK_IOLOG_PATH_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_IOLOG_PATH_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_IOLOG_PATH_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) # We need to link check_symbols with -lpthread on HP-UX since LDAP uses threads check_symbols: $(CHECK_SYMBOLS_OBJS) $(LT_LIBS) @@ -232,7 +232,7 @@ check_symbols: $(CHECK_SYMBOLS_OBJS) $(LT_LIBS) fi check_wrap: $(CHECK_WRAP_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_WRAP_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) -no-fast-install + $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_WRAP_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) GENERATED = gram.h gram.c toke.c def_data.c def_data.h getdate.c -- 2.40.0