]> granicus.if.org Git - sudo/commitdiff
Kill POSIX_SIGNALS define and old signal support now that we emulate POSIX ones
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 8 Dec 2001 19:44:30 +0000 (19:44 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 8 Dec 2001 19:44:30 +0000 (19:44 +0000)
Also be sure to correctly initialize struct sigaction.

config.h.in
configure.in
logging.c
sudo.c
visudo.c

index dfaf211a2fa90fd04eb7ae36629a376d50c6d252..a7f14b59eb69217dd0cb953e5292b65981d5c66c 100644 (file)
 /* Define if you want to use execv() instead of execvp().  */
 #undef USE_EXECV
 
-/* Define if you have POSIX signals.  */
-#undef HAVE_SIGACTION
-#ifdef HAVE_SIGACTION
-#  define POSIX_SIGNALS
-#endif /* HAVE_SIGACTION */
-
 /* Define if you have tzset(3).  */
 #undef HAVE_TZSET
 
index 2d0433e28ae8d6a5655f1a3c500aa82a3d7ff1c1..50db957e62503cd8fb0342e7f22b1381a5a1ca97 100644 (file)
@@ -1550,7 +1550,7 @@ esac
 dnl
 dnl Function checks
 dnl
-AC_CHECK_FUNCS(strchr strrchr memchr memcpy memset sysconf sigaction tzset \
+AC_CHECK_FUNCS(strchr strrchr memchr memcpy memset sysconf tzset \
               seteuid setegid strftime setrlimit initgroups fstat)
 if test -z "$BROKEN_SETREUID"; then
     AC_CHECK_FUNCS(setreuid)
@@ -1570,7 +1570,7 @@ AC_CHECK_FUNCS(innetgr _innetgr, AC_CHECK_FUNCS(getdomainname) [break])
 AC_CHECK_FUNCS(lsearch, , [AC_CHECK_LIB(compat, lsearch, AC_CHECK_HEADER(search.h, AC_DEFINE(HAVE_LSEARCH) [LIBS="${LIBS} -lcompat"], AC_LIBOBJ(lsearch)), AC_LIBOBJ(lsearch))])
 AC_CHECK_FUNCS(utime, SUDO_FUNC_UTIME_POSIX, AC_LIBOBJ(utime))
 SUDO_FUNC_FNMATCH(AC_DEFINE(HAVE_FNMATCH), AC_LIBOBJ(fnmatch))
-AC_REPLACE_FUNCS(strerror strcasecmp)
+AC_REPLACE_FUNCS(strerror strcasecmp sigaction)
 AC_CHECK_FUNCS(snprintf vsnprintf asprintf vasprintf, , [NEED_SNPRINTF=1])
 dnl
 dnl If NEED_SNPRINTF is set, add snprintf.c to LIBOBJS
index 5d58699eea653a42f049893b9844bbae53c4bd31..c84b61e7d4c91f1a7a57e85071b0a674cc49abdd 100644 (file)
--- a/logging.c
+++ b/logging.c
@@ -432,23 +432,15 @@ send_mail(line)
     FILE *mail;
     char *p;
     int pfd[2], pid, status;
-#ifdef POSIX_SIGNALS
     sigset_t set, oset;
-#else
-    int omask;
-#endif /* POSIX_SIGNALS */
 
     /* Just return if mailer is disabled. */
     if (!def_str(I_MAILERPATH) || !def_str(I_MAILTO))
        return;
 
-#ifdef POSIX_SIGNALS
     (void) sigemptyset(&set);
     (void) sigaddset(&set, SIGCHLD);
     (void) sigprocmask(SIG_BLOCK, &set, &oset);
-#else
-    omask = sigblock(sigmask(SIGCHLD));
-#endif /* POSIX_SIGNALS */
 
     if (pipe(pfd) == -1) {
        (void) fprintf(stderr, "%s: cannot open pipe: %s\n",
@@ -534,11 +526,7 @@ send_mail(line)
 #ifdef sudo_waitpid
     (void) sudo_waitpid(pid, &status, WNOHANG);
 #endif
-#ifdef POSIX_SIGNALS
     (void) sigprocmask(SIG_SETMASK, &oset, NULL);
-#else
-    (void) sigsetmask(omask);
-#endif /* POSIX_SIGNALS */
 }
 
 /*
@@ -584,9 +572,6 @@ reapchild(sig)
 #else
     (void) wait(&status);
 #endif
-#ifndef POSIX_SIGNALS
-    (void) signal(SIGCHLD, reapchild);
-#endif /* POSIX_SIGNALS */
     errno = serrno;
 }
 
diff --git a/sudo.c b/sudo.c
index 5728316a5cebf25bb92f29d493ea370518f935fb..b0099dc18b3aa2a37c1af5f07b0328f417cf6a84 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -146,11 +146,7 @@ main(argc, argv, envp)
     int cmnd_status;
     int sudo_mode;
     int pwflag;
-#ifdef POSIX_SIGNALS
     sigset_t set, oset;
-#else
-    int omask;
-#endif /* POSIX_SIGNALS */
     extern int printmatches;
     extern char **environ;
 
@@ -177,15 +173,11 @@ main(argc, argv, envp)
      * Block signals so the user cannot interrupt us at some point and
      * avoid the logging.
      */
-#ifdef POSIX_SIGNALS
     (void) sigemptyset(&set);
     (void) sigaddset(&set, SIGINT);
     (void) sigaddset(&set, SIGQUIT);
     (void) sigaddset(&set, SIGTSTP);
     (void) sigprocmask(SIG_BLOCK, &set, &oset);
-#else
-    omask = sigblock(sigmask(SIGINT)|sigmask(SIGQUIT)|sigmask(SIGTSTP));
-#endif /* POSIX_SIGNALS */
 
     /*
      * Setup signal handlers, turn off core dumps, and close open files.
@@ -344,11 +336,7 @@ main(argc, argv, envp)
        endpwent();
 
        /* Reset signal mask before we exec. */
-#ifdef POSIX_SIGNALS
        (void) sigprocmask(SIG_SETMASK, &oset, NULL);
-#else
-       (void) sigsetmask(omask);
-#endif /* POSIX_SIGNALS */
 
        /* Override user's umask if configured to do so. */
        if (def_ival(I_UMASK) != 0777)
@@ -809,9 +797,7 @@ initial_setup()
 #ifdef HAVE_SETRLIMIT
     struct rlimit rl;
 #endif
-#ifdef POSIX_SIGNALS
-    struct sigaction sa;
-#endif
+    sigaction_t sa;
 
 #if defined(RLIMIT_CORE) && !defined(SUDO_DEVEL)
     /*
@@ -841,13 +827,10 @@ initial_setup()
        (void) close(fd);
 
     /* Catch children as they die... */
-#ifdef POSIX_SIGNALS
-    (void) memset((VOID *)&sa, 0, sizeof(sa));
+    sigemptyset(&sa.sa_mask);
+    sa.sa_flags = SA_RESTART;
     sa.sa_handler = reapchild;
     (void) sigaction(SIGCHLD, &sa, NULL);
-#else
-    (void) signal(SIGCHLD, reapchild);
-#endif /* POSIX_SIGNALS */
 
     /* Set set_perms pointer to the correct function */
 #if defined(_SC_SAVED_IDS) && defined(_SC_VERSION)
index 6f3e7035a406b3556f236fee3042f004ca9d8c07..ff36c6caf869842540b9c69a3e0b4020aa3f162d 100644 (file)
--- a/visudo.c
+++ b/visudo.c
@@ -568,28 +568,18 @@ whatnow()
 static void
 setup_signals()
 {
-#ifdef POSIX_SIGNALS
-       struct sigaction action;                /* POSIX signal structure */
-#endif /* POSIX_SIGNALS */
+       sigaction_t sa;
 
        /*
         * Setup signal handlers to cleanup nicely.
         */
-#ifdef POSIX_SIGNALS
-       (void) memset((VOID *)&action, 0, sizeof(action));
-       sigemptyset(&action.sa_mask);
-       action.sa_flags = 0;
-       action.sa_handler = Exit;
-       (void) sigaction(SIGTERM, &action, NULL);
-       (void) sigaction(SIGHUP, &action, NULL);
-       (void) sigaction(SIGINT, &action, NULL);
-       (void) sigaction(SIGQUIT, &action, NULL);
-#else
-       (void) signal(SIGTERM, Exit);
-       (void) signal(SIGHUP, Exit);
-       (void) signal(SIGINT, Exit);
-       (void) signal(SIGQUIT, Exit);
-#endif /* POSIX_SIGNALS */
+       sigemptyset(&sa.sa_mask);
+       sa.sa_flags = SA_RESTART;
+       sa.sa_handler = Exit;
+       (void) sigaction(SIGTERM, &sa, NULL);
+       (void) sigaction(SIGHUP, &sa, NULL);
+       (void) sigaction(SIGINT, &sa, NULL);
+       (void) sigaction(SIGQUIT, &sa, NULL);
 }
 
 static int
@@ -599,15 +589,11 @@ run_command(path, argv)
 {
     int status;
     pid_t pid;
-#ifndef POSIX_SIGNALS
-    int omask = sigblock(sigmask(SIGCHLD));
-#else
     sigset_t set, oset;
 
     (void) sigemptyset(&set);
     (void) sigaddset(&set, SIGCHLD);
     (void) sigprocmask(SIG_BLOCK, &set, &oset);
-#endif /* POSIX_SIGNALS */
 
     switch (pid = fork()) {
        case -1:
@@ -616,11 +602,7 @@ run_command(path, argv)
            Exit(-1);
            break;      /* NOTREACHED */
        case 0:
-#ifdef POSIX_SIGNALS
            (void) sigprocmask(SIG_SETMASK, &oset, NULL);
-#else
-           (void) sigsetmask(omask);
-#endif /* POSIX_SIGNALS */
            execv(path, argv);
            (void) fprintf(stderr,
                "%s: unable to run %s: %s\n", Argv[0], path, strerror(errno));
@@ -634,11 +616,7 @@ run_command(path, argv)
     pid = wait(&status);
 #endif
 
-#ifdef POSIX_SIGNALS
     (void) sigprocmask(SIG_SETMASK, &oset, NULL);
-#else
-    (void) sigsetmask(omask);
-#endif /* POSIX_SIGNALS */
 
     /* XXX - should use WEXITSTATUS() */
     return(pid == -1 ? -1 : (status >> 8));