From: Todd C. Miller Date: Fri, 30 Mar 2012 13:36:30 +0000 (-0400) Subject: Add execvpe(), exect(), posix_spawn() and posix_spawnp() wrappers X-Git-Tag: SUDO_1_8_5~1^2~92 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ceea5cb7ba03fee45dbd1de1b23b02fc6b2a0e4;p=sudo Add execvpe(), exect(), posix_spawn() and posix_spawnp() wrappers to sudo_noexec.c. --- diff --git a/config.h.in b/config.h.in index 0ce4afc5b..7be0d1a9d 100644 --- a/config.h.in +++ b/config.h.in @@ -475,6 +475,9 @@ /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF +/* Define to 1 if you have the header file. */ +#undef HAVE_SPAWN_H + /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H diff --git a/configure b/configure index 21e2647ad..083d2cb97 100755 --- a/configure +++ b/configure @@ -15235,7 +15235,7 @@ $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h fi -for ac_header in malloc.h paths.h utime.h netgroup.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h +for ac_header in malloc.h netgroup.h paths.h spawn.h utime.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" diff --git a/configure.in b/configure.in index a5f28c377..58f771097 100644 --- a/configure.in +++ b/configure.in @@ -2006,7 +2006,7 @@ AC_HEADER_STDC AC_HEADER_DIRENT AC_HEADER_TIME AC_HEADER_STDBOOL -AC_CHECK_HEADERS(malloc.h paths.h utime.h netgroup.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h) +AC_CHECK_HEADERS(malloc.h netgroup.h paths.h spawn.h utime.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h) dnl dnl Check for large file support. HP-UX 11.23 has a broken sys/type.h dnl when large files support is enabled so work around it. diff --git a/src/sudo_noexec.c b/src/sudo_noexec.c index 4e05720de..af1915f03 100644 --- a/src/sudo_noexec.c +++ b/src/sudo_noexec.c @@ -20,6 +20,9 @@ #include #include +#ifdef HAVE_SPAWN_H +#include +#endif #include "missing.h" @@ -47,6 +50,11 @@ int \ fn(t1 a1, t2 a2, t3 a3) \ DUMMY_BODY +#define DUMMY6(fn, t1, t2, t3, t4, t5, t6) \ +int \ +fn(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) \ +DUMMY_BODY + #define DUMMY_VA(fn, t1, t2) \ int \ fn(t1 a1, t2 a2, ...) \ @@ -61,6 +69,9 @@ DUMMY_VA(__execle, const char *, const char *) DUMMY_VA(execlp, const char *, const char *) DUMMY_VA(_execlp, const char *, const char *) DUMMY_VA(__execlp, const char *, const char *) +DUMMY3(exect, const char *, char * const *, char * const *) +DUMMY3(_exect, const char *, char * const *, char * const *) +DUMMY3(__exect, const char *, char * const *, char * const *) DUMMY2(execv, const char *, char * const *) DUMMY2(_execv, const char *, char * const *) DUMMY2(__execv, const char *, char * const *) @@ -73,6 +84,17 @@ DUMMY3(__execvP, const char *, const char *, char * const *) DUMMY3(execve, const char *, char * const *, char * const *) DUMMY3(_execve, const char *, char * const *, char * const *) DUMMY3(__execve, const char *, char * const *, char * const *) +DUMMY3(execvpe, const char *, char * const *, char * const *) +DUMMY3(_execvpe, const char *, char * const *, char * const *) +DUMMY3(__execvpe, const char *, char * const *, char * const *) DUMMY3(fexecve, int , char * const *, char * const *) DUMMY3(_fexecve, int , char * const *, char * const *) DUMMY3(__fexecve, int , char * const *, char * const *) +#ifdef HAVE_SPAWN_H +DUMMY6(posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) +DUMMY6(_posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) +DUMMY6(__posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) +DUMMY6(posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) +DUMMY6(_posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) +DUMMY6(__posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) +#endif /* HAVE_SPAWN_H */