]> granicus.if.org Git - sudo/commitdiff
Use strsigname() to print signal names in the debug output.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 27 Aug 2012 00:12:51 +0000 (20:12 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 27 Aug 2012 00:12:51 +0000 (20:12 -0400)
If the system has no strsigname(), use our own.

13 files changed:
MANIFEST
compat/Makefile.in
compat/mksigname.c [new file with mode: 0644]
compat/mksigname.h [new file with mode: 0644]
compat/strsignal.c
compat/strsigname.c [new file with mode: 0644]
config.h.in
configure
configure.in
include/missing.h
mkdep.pl
src/exec.c
src/exec_pty.c

index b10036c13e193b2ba4a9fb0cbe3b23bff86c1c22..90010b24080c792a25eb7a4dc32d920e6c075e4f 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -41,6 +41,8 @@ compat/isblank.c
 compat/memrchr.c
 compat/mksiglist.c
 compat/mksiglist.h
+compat/mksigname.c
+compat/mksigname.h
 compat/mktemp.c
 compat/nanosleep.c
 compat/pw_dup.c
@@ -55,6 +57,7 @@ compat/stdbool.h
 compat/strlcat.c
 compat/strlcpy.c
 compat/strsignal.c
+compat/strsigname.c
 compat/timespec.h
 compat/utime.h
 compat/utimes.c
index 797347c042be4151b9be657705e3fee68842efe3..94efa22c340a7050de765ea07f24c534dddd6de4 100644 (file)
@@ -85,9 +85,15 @@ libreplace.la: $(LTLIBOBJS)
 siglist.c: mksiglist
        ./mksiglist > $@
 
+signame.c: mksigname
+       ./mksigname > $@
+
 mksiglist: $(srcdir)/mksiglist.c $(srcdir)/mksiglist.h $(incdir)/missing.h $(top_builddir)/config.h
        $(CC) $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/mksiglist.c -o $@
 
+mksigname: $(srcdir)/mksigname.c $(srcdir)/mksigname.h $(incdir)/missing.h $(top_builddir)/config.h
+       $(CC) $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/mksigname.c -o $@
+
 fnm_test: fnm_test.o libreplace.la
        $(LIBTOOL) --mode=link $(CC) -o $@ fnm_test.o libreplace.la
 
@@ -96,7 +102,12 @@ globtest: globtest.o libreplace.la
 
 $(srcdir)/mksiglist.h: $(srcdir)/siglist.in
        @if [ -n "$(DEVEL)" ]; then \
-           awk 'BEGIN {print "/* public domain */\n"} /^    [A-Z]/ {printf("#ifdef SIG%s\n    if (my_sys_siglist[SIG%s] == NULL)\n\tmy_sys_siglist[SIG%s] = \"%s\";\n#endif\n", $$1, $$1, $$1, substr($$0, 13))}' < $(srcdir)/siglist.in > $@; \
+           awk 'BEGIN {print "/* public domain */\n"} /^    [A-Z]/ {printf("#ifdef SIG%s\n    if (sudo_sys_siglist[SIG%s] == NULL)\n\tsudo_sys_siglist[SIG%s] = \"%s\";\n#endif\n", $$1, $$1, $$1, substr($$0, 13))}' < $(srcdir)/siglist.in > $@; \
+       fi
+
+$(srcdir)/mksigname.h: $(srcdir)/siglist.in
+       @if [ -n "$(DEVEL)" ]; then \
+           awk 'BEGIN {print "/* public domain */\n"} /^    [A-Z]/ {printf("#ifdef SIG%s\n    if (sudo_sys_signame[SIG%s] == NULL)\n\tsudo_sys_signame[SIG%s] = \"%s\";\n#endif\n", $$1, $$1, $$1, $$1)}' < $(srcdir)/siglist.in > $@; \
        fi
 
 pre-install:
@@ -134,7 +145,7 @@ check: $(TEST_PROGS)
        fi
 
 clean:
-       -$(LIBTOOL) --mode=clean rm -f $(TEST_PROGS) mksiglist siglist.c *.lo *.o *.la *.a stamp-* core *.core core.*
+       -$(LIBTOOL) --mode=clean rm -f $(TEST_PROGS) mksiglist mksignal siglist.c signame.c *.lo *.o *.la *.a stamp-* core *.core core.*
 
 mostlyclean: clean
 
@@ -183,6 +194,9 @@ memrchr.lo: $(srcdir)/memrchr.c $(top_builddir)/config.h $(incdir)/missing.h
 mksiglist.lo: $(srcdir)/mksiglist.c $(top_builddir)/config.h \
               $(incdir)/missing.h $(top_srcdir)/compat/mksiglist.h
        $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/mksiglist.c
+mksigname.lo: $(srcdir)/mksigname.c $(top_builddir)/config.h \
+              $(incdir)/missing.h $(top_srcdir)/compat/mksigname.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/mksigname.c
 mktemp.lo: $(srcdir)/mktemp.c $(top_builddir)/config.h $(incdir)/missing.h
        $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/mktemp.c
 nanosleep.lo: $(srcdir)/nanosleep.c $(top_builddir)/config.h \
@@ -201,6 +215,9 @@ strlcpy.lo: $(srcdir)/strlcpy.c $(top_builddir)/config.h $(incdir)/missing.h
 strsignal.lo: $(srcdir)/strsignal.c $(top_builddir)/config.h \
               $(incdir)/missing.h $(incdir)/gettext.h
        $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/strsignal.c
+strsigname.lo: $(srcdir)/strsigname.c $(top_builddir)/config.h \
+               $(incdir)/missing.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/strsigname.c
 utimes.lo: $(srcdir)/utimes.c $(top_builddir)/config.h \
            $(top_srcdir)/compat/utime.h $(incdir)/missing.h
        $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/utimes.c
diff --git a/compat/mksigname.c b/compat/mksigname.c
new file mode 100644 (file)
index 0000000..b4b4f4d
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010-2012 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>
+
+#include <sys/types.h>
+
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif /* STDC_HEADERS */
+#include <signal.h>
+
+#include "missing.h"
+
+int
+main(int argc, char *argv[])
+{
+    static char *my_sys_signame[NSIG];
+    int i;
+
+#include "compat/mksigname.h"
+
+    printf("#include <config.h>\n");
+    printf("#include <signal.h>\n");
+    printf("#include \"missing.h\"\n\n");
+    printf("const char *const my_sys_signame[NSIG] = {\n");
+    for (i = 0; i < NSIG; i++) {
+       if (my_sys_signame[i] != NULL) {
+           printf("    \"%s\",\n", my_sys_signame[i]);
+       } else {
+           printf("    \"Signal %d\",\n", i);
+       }
+    }
+    printf("};\n");
+
+    exit(0);
+}
diff --git a/compat/mksigname.h b/compat/mksigname.h
new file mode 100644 (file)
index 0000000..9a44bbc
--- /dev/null
@@ -0,0 +1,175 @@
+/* public domain */
+
+my_sys_signame[0] = "Signal 0";
+#ifdef SIGHUP
+    if (my_sys_signame[SIGHUP] == NULL)
+       my_sys_signame[SIGHUP] = "HUP";
+#endif
+#ifdef SIGINT
+    if (my_sys_signame[SIGINT] == NULL)
+       my_sys_signame[SIGINT] = "INT";
+#endif
+#ifdef SIGQUIT
+    if (my_sys_signame[SIGQUIT] == NULL)
+       my_sys_signame[SIGQUIT] = "QUIT";
+#endif
+#ifdef SIGILL
+    if (my_sys_signame[SIGILL] == NULL)
+       my_sys_signame[SIGILL] = "ILL";
+#endif
+#ifdef SIGTRAP
+    if (my_sys_signame[SIGTRAP] == NULL)
+       my_sys_signame[SIGTRAP] = "TRAP";
+#endif
+#ifdef SIGABRT
+    if (my_sys_signame[SIGABRT] == NULL)
+       my_sys_signame[SIGABRT] = "ABRT";
+#endif
+#ifdef SIGIOT
+    if (my_sys_signame[SIGIOT] == NULL)
+       my_sys_signame[SIGIOT] = "IOT";
+#endif
+#ifdef SIGEMT
+    if (my_sys_signame[SIGEMT] == NULL)
+       my_sys_signame[SIGEMT] = "EMT";
+#endif
+#ifdef SIGFPE
+    if (my_sys_signame[SIGFPE] == NULL)
+       my_sys_signame[SIGFPE] = "FPE";
+#endif
+#ifdef SIGKILL
+    if (my_sys_signame[SIGKILL] == NULL)
+       my_sys_signame[SIGKILL] = "KILL";
+#endif
+#ifdef SIGUNUSED
+    if (my_sys_signame[SIGUNUSED] == NULL)
+       my_sys_signame[SIGUNUSED] = "UNUSED";
+#endif
+#ifdef SIGBUS
+    if (my_sys_signame[SIGBUS] == NULL)
+       my_sys_signame[SIGBUS] = "BUS";
+#endif
+#ifdef SIGSEGV
+    if (my_sys_signame[SIGSEGV] == NULL)
+       my_sys_signame[SIGSEGV] = "SEGV";
+#endif
+#ifdef SIGSYS
+    if (my_sys_signame[SIGSYS] == NULL)
+       my_sys_signame[SIGSYS] = "SYS";
+#endif
+#ifdef SIGPIPE
+    if (my_sys_signame[SIGPIPE] == NULL)
+       my_sys_signame[SIGPIPE] = "PIPE";
+#endif
+#ifdef SIGALRM
+    if (my_sys_signame[SIGALRM] == NULL)
+       my_sys_signame[SIGALRM] = "ALRM";
+#endif
+#ifdef SIGTERM
+    if (my_sys_signame[SIGTERM] == NULL)
+       my_sys_signame[SIGTERM] = "TERM";
+#endif
+#ifdef SIGSTKFLT
+    if (my_sys_signame[SIGSTKFLT] == NULL)
+       my_sys_signame[SIGSTKFLT] = "STKFLT";
+#endif
+#ifdef SIGIO
+    if (my_sys_signame[SIGIO] == NULL)
+       my_sys_signame[SIGIO] = "IO";
+#endif
+#ifdef SIGXCPU
+    if (my_sys_signame[SIGXCPU] == NULL)
+       my_sys_signame[SIGXCPU] = "XCPU";
+#endif
+#ifdef SIGXFSZ
+    if (my_sys_signame[SIGXFSZ] == NULL)
+       my_sys_signame[SIGXFSZ] = "XFSZ";
+#endif
+#ifdef SIGVTALRM
+    if (my_sys_signame[SIGVTALRM] == NULL)
+       my_sys_signame[SIGVTALRM] = "VTALRM";
+#endif
+#ifdef SIGPROF
+    if (my_sys_signame[SIGPROF] == NULL)
+       my_sys_signame[SIGPROF] = "PROF";
+#endif
+#ifdef SIGWINCH
+    if (my_sys_signame[SIGWINCH] == NULL)
+       my_sys_signame[SIGWINCH] = "WINCH";
+#endif
+#ifdef SIGLOST
+    if (my_sys_signame[SIGLOST] == NULL)
+       my_sys_signame[SIGLOST] = "LOST";
+#endif
+#ifdef SIGUSR1
+    if (my_sys_signame[SIGUSR1] == NULL)
+       my_sys_signame[SIGUSR1] = "USR1";
+#endif
+#ifdef SIGUSR2
+    if (my_sys_signame[SIGUSR2] == NULL)
+       my_sys_signame[SIGUSR2] = "USR2";
+#endif
+#ifdef SIGPWR
+    if (my_sys_signame[SIGPWR] == NULL)
+       my_sys_signame[SIGPWR] = "PWR";
+#endif
+#ifdef SIGPOLL
+    if (my_sys_signame[SIGPOLL] == NULL)
+       my_sys_signame[SIGPOLL] = "POLL";
+#endif
+#ifdef SIGSTOP
+    if (my_sys_signame[SIGSTOP] == NULL)
+       my_sys_signame[SIGSTOP] = "STOP";
+#endif
+#ifdef SIGTSTP
+    if (my_sys_signame[SIGTSTP] == NULL)
+       my_sys_signame[SIGTSTP] = "TSTP";
+#endif
+#ifdef SIGCONT
+    if (my_sys_signame[SIGCONT] == NULL)
+       my_sys_signame[SIGCONT] = "CONT";
+#endif
+#ifdef SIGCHLD
+    if (my_sys_signame[SIGCHLD] == NULL)
+       my_sys_signame[SIGCHLD] = "CHLD";
+#endif
+#ifdef SIGCLD
+    if (my_sys_signame[SIGCLD] == NULL)
+       my_sys_signame[SIGCLD] = "CLD";
+#endif
+#ifdef SIGTTIN
+    if (my_sys_signame[SIGTTIN] == NULL)
+       my_sys_signame[SIGTTIN] = "TTIN";
+#endif
+#ifdef SIGTTOU
+    if (my_sys_signame[SIGTTOU] == NULL)
+       my_sys_signame[SIGTTOU] = "TTOU";
+#endif
+#ifdef SIGINFO
+    if (my_sys_signame[SIGINFO] == NULL)
+       my_sys_signame[SIGINFO] = "INFO";
+#endif
+#ifdef SIGURG
+    if (my_sys_signame[SIGURG] == NULL)
+       my_sys_signame[SIGURG] = "URG";
+#endif
+#ifdef SIGWAITING
+    if (my_sys_signame[SIGWAITING] == NULL)
+       my_sys_signame[SIGWAITING] = "WAITING";
+#endif
+#ifdef SIGLWP
+    if (my_sys_signame[SIGLWP] == NULL)
+       my_sys_signame[SIGLWP] = "LWP";
+#endif
+#ifdef SIGFREEZE
+    if (my_sys_signame[SIGFREEZE] == NULL)
+       my_sys_signame[SIGFREEZE] = "FREEZE";
+#endif
+#ifdef SIGTHAW
+    if (my_sys_signame[SIGTHAW] == NULL)
+       my_sys_signame[SIGTHAW] = "THAW";
+#endif
+#ifdef SIGCANCEL
+    if (my_sys_signame[SIGCANCEL] == NULL)
+       my_sys_signame[SIGCANCEL] = "CANCEL";
+#endif
index a13346c1012f102a5517ccdb5a23e4804122bc44..a07019387bc1e0117ffe538b4c1652f6a8964404 100644 (file)
 #include "gettext.h"
 
 #if defined(HAVE_DECL_SYS_SIGLIST) && HAVE_DECL_SYS_SIGLIST == 1
-# define my_sys_siglist        sys_siglist
+# define sudo_sys_siglist      sys_siglist
 #elif defined(HAVE_DECL__SYS_SIGLIST) && HAVE_DECL__SYS_SIGLIST == 1
-# define my_sys_siglist        _sys_siglist
+# define sudo_sys_siglist      _sys_siglist
 #elif defined(HAVE_DECL___SYS_SIGLIST) && HAVE_DECL___SYS_SIGLIST == 1
-# define my_sys_siglist        __sys_siglist
+# define sudo_sys_siglist      __sys_siglist
 #else
-extern const char *const my_sys_siglist[NSIG];
+extern const char *const sudo_sys_siglist[NSIG];
 #endif
 
 /*
@@ -43,6 +43,7 @@ char *
 strsignal(int signo)
 {
     if (signo > 0 && signo < NSIG)
-       return (char *)my_sys_siglist[signo];
+       return (char *)sudo_sys_siglist[signo];
+    /* XXX - should be "Unknown signal: %s" */
     return _("Unknown signal");
 }
diff --git a/compat/strsigname.c b/compat/strsigname.c
new file mode 100644 (file)
index 0000000..faf73cd
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2009-2012 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>
+
+#include <sys/types.h>
+
+#include <stdio.h>
+#include <signal.h>
+
+#include "missing.h"
+
+#define DEFAULT_TEXT_DOMAIN    "sudo"
+#include "gettext.h"
+
+#if defined(HAVE_DECL_SYS_SIGNAME) && HAVE_DECL_SYS_SIGNAME == 1
+# define sudo_sys_signame      sys_signame
+#elif defined(HAVE_DECL__SYS_SIGNAME) && HAVE_DECL__SYS_SIGNAME == 1
+# define sudo_sys_signame      _sys_signame
+#elif defined(HAVE_DECL___SYS_SIGNAME) && HAVE_DECL___SYS_SIGNAME == 1
+# define sudo_sys_signame      __sys_signame
+#else
+extern const char *const sudo_sys_signame[NSIG];
+#endif
+
+/*
+ * Return signal name
+ */
+char *
+strsigname(int signo)
+{
+    if (signo > 0 && signo < NSIG)
+       return (char *)sudo_sys_signame[signo];
+    /* XXX - should be "Unknown signal: %s" */
+    return _("Unknown signal");
+}
index 49472da5c87453b75c69768ee57284388db93fce..a05208ea4160ac53cb79888c78d4d80e3d6b09ee 100644 (file)
    don't. */
 #undef HAVE_DECL_SYS_SIGLIST
 
+/* Define to 1 if you have the declaration of `sys_signame', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SYS_SIGNAME
+
 /* Define to 1 if you have the declaration of `_sys_siglist', and to 0 if you
    don't. */
 #undef HAVE_DECL__SYS_SIGLIST
 
+/* Define to 1 if you have the declaration of `_sys_signame', and to 0 if you
+   don't. */
+#undef HAVE_DECL__SYS_SIGNAME
+
 /* Define to 1 if you have the declaration of `__sys_siglist', and to 0 if you
    don't. */
 #undef HAVE_DECL___SYS_SIGLIST
 
+/* Define to 1 if you have the declaration of `__sys_signame', and to 0 if you
+   don't. */
+#undef HAVE_DECL___SYS_SIGNAME
+
 /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
    */
 #undef HAVE_DIRENT_H
 /* Define to 1 if you have the <spawn.h> header file. */
 #undef HAVE_SPAWN_H
 
+/* Define to 1 to enable SSSD support. */
+#undef HAVE_SSSD
+
 /* Define to 1 if stdbool.h conforms to C99. */
 #undef HAVE_STDBOOL_H
 
 /* Define to 1 if you have the `strsignal' function. */
 #undef HAVE_STRSIGNAL
 
+/* Define to 1 if you have the `strsigname' function. */
+#undef HAVE_STRSIGNAME
+
 /* Define to 1 if `d_type' is a member of `struct dirent'. */
 #undef HAVE_STRUCT_DIRENT_D_TYPE
 
index ccb7fcd86c1e44ffde9143be073858e4fb4acfee..73867656b4060f7bf610678dd6638140b722507e 100755 (executable)
--- a/configure
+++ b/configure
 done
 
 
+for ac_func in strsigname
+do :
+  ac_fn_c_check_func "$LINENO" "strsigname" "ac_cv_func_strsigname"
+if test "x$ac_cv_func_strsigname" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRSIGNAME 1
+_ACEOF
+
+else
+
+    case " $LIBOBJS " in
+  *" strsigname.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strsigname.$ac_objext"
+ ;;
+esac
+
+    HAVE_SIGNAME="false"
+    ac_fn_c_check_decl "$LINENO" "sys_signame" "ac_cv_have_decl_sys_signame" "
+$ac_includes_default
+#include <signal.h>
+
+"
+if test "x$ac_cv_have_decl_sys_signame" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SYS_SIGNAME $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+
+       HAVE_SIGNAME="true"
+       break
+
+fi
+ac_fn_c_check_decl "$LINENO" "_sys_signame" "ac_cv_have_decl__sys_signame" "
+$ac_includes_default
+#include <signal.h>
+
+"
+if test "x$ac_cv_have_decl__sys_signame" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SYS_SIGNAME $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+
+       HAVE_SIGNAME="true"
+       break
+
+fi
+ac_fn_c_check_decl "$LINENO" "__sys_signame" "ac_cv_have_decl___sys_signame" "
+$ac_includes_default
+#include <signal.h>
+
+"
+if test "x$ac_cv_have_decl___sys_signame" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL___SYS_SIGNAME $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+
+       HAVE_SIGNAME="true"
+       break
+
+fi
+
+    if test "$HAVE_SIGNAME" != "true"; then
+       case " $LIBOBJS " in
+  *" signame.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS signame.$ac_objext"
+ ;;
+esac
+
+    fi
+
+fi
+done
+
+
 if test ${with_netsvc-"no"} != "no"; then
     cat >>confdefs.h <<EOF
 #define _PATH_NETSVC_CONF "${with_netsvc-/etc/netsvc.conf}"
index 4418d0898a16a26272125d5e33eb7bbd0592d594..43ec11d4f1dd05e699d1578801b14ac0f0ae0a9f 100644 (file)
@@ -2568,6 +2568,24 @@ AC_INCLUDES_DEFAULT
     fi
 ])
 
+dnl
+dnl Check for strsigname() or sys_signame
+dnl
+AC_CHECK_FUNCS(strsigname, [], [
+    AC_LIBOBJ(strsigname)
+    HAVE_SIGNAME="false"
+    AC_CHECK_DECLS([sys_signame, _sys_signame, __sys_signame], [
+       HAVE_SIGNAME="true"
+       break
+    ], [ ], [
+AC_INCLUDES_DEFAULT
+#include <signal.h>
+    ])
+    if test "$HAVE_SIGNAME" != "true"; then
+       AC_LIBOBJ(signame)
+    fi
+])
+
 dnl
 dnl nsswitch.conf and its equivalents
 dnl
index 238907c18baa0560b5c4a773c5a2e7dffdb4f83a..0d4b779d630f7b37904c23f521bb9eb82fe353ca 100644 (file)
@@ -376,5 +376,8 @@ int unsetenv(const char *);
 #ifndef HAVE_STRSIGNAL
 char *strsignal(int);
 #endif
+#ifndef HAVE_STRSIGNAME
+char *strsigname(int);
+#endif
 
 #endif /* _SUDO_MISSING_H */
index 77902b99748a4574ce80093b863fe9bb6e75d413..2a1636381305283068105961c67816e1de804a92 100755 (executable)
--- a/mkdep.pl
+++ b/mkdep.pl
@@ -55,7 +55,7 @@ sub mkdep {
     $makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo plugin_error.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 dlopen.lo fnmatch.lo getcwd.lo getgrouplist.lo getline.lo getprogname.lo glob.lo isblank.lo memrchr.lo mksiglist.lo mktemp.lo nanosleep.lo pw_dup.lo siglist.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo utimes.lo globtest.o fnm_test.o:;
+    $makefile =~ s:\@LTLIBOBJS\@:closefrom.lo dlopen.lo fnmatch.lo getcwd.lo getgrouplist.lo getline.lo getprogname.lo glob.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo pw_dup.lo siglist.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo strsigname.lo utimes.lo globtest.o fnm_test.o:;
 
     # Parse OBJS lines
     my %objs;
index a9fcf8393e698fdf83d81f375e80ecd746f7f6fb..ba4d933541f967d0e282b0c7090ab222ef36ed78 100644 (file)
@@ -511,7 +511,7 @@ handle_signals(int sv[2], pid_t child, int log_io, struct command_status *cstat)
            cstat->val = errno;
            debug_return_int(-1);
        }
-       sudo_debug_printf(SUDO_DEBUG_DIAG, "received signal %d", signo);
+       sudo_debug_printf(SUDO_DEBUG_DIAG, "received SIG%s", strsigname(signo));
        if (signo == SIGCHLD) {
            /*
             * If logging I/O, child is the intermediate process,
@@ -541,8 +541,8 @@ handle_signals(int sv[2], pid_t child, int log_io, struct command_status *cstat)
                        if (fd != -1)
                            saved_pgrp = tcgetpgrp(fd);
                        if (kill(getpid(), WSTOPSIG(status)) != 0) {
-                           warning("kill(%d, %d)", (int)getpid(),
-                               WSTOPSIG(status));
+                           warning("kill(%d, SIG%s)", (int)getpid(),
+                               strsigname(WSTOPSIG(status)));
                        }
                        if (fd != -1) {
                            if (saved_pgrp != (pid_t)-1)
@@ -566,7 +566,7 @@ handle_signals(int sv[2], pid_t child, int log_io, struct command_status *cstat)
                if (signo == SIGALRM)
                    terminate_command(child, false);
                else if (kill(child, signo) != 0)
-                   warning("kill(%d, %d)", (int)child, signo);
+                   warning("kill(%d, SIG%s)", (int)child, strsigname(signo));
            }
        }
     }
@@ -587,7 +587,8 @@ forward_signals(int sock)
     while (!tq_empty(&sigfwd_list)) {
        sigfwd = tq_first(&sigfwd_list);
        sudo_debug_printf(SUDO_DEBUG_INFO,
-           "sending signal %d to child over backchannel", sigfwd->signo);
+           "sending SIG%s to child over backchannel",
+           strsigname(sigfwd->signo));
        cstat.type = CMD_SIGNO;
        cstat.val = sigfwd->signo;
        do {
@@ -622,7 +623,8 @@ schedule_signal(int signo)
     struct sigforward *sigfwd;
     debug_decl(schedule_signal, SUDO_DEBUG_EXEC)
 
-    sudo_debug_printf(SUDO_DEBUG_DIAG, "forwarding signal %d to child", signo);
+    sudo_debug_printf(SUDO_DEBUG_DIAG, "forwarding SIG%s to child",
+       strsigname(signo));
 
     sigfwd = ecalloc(1, sizeof(*sigfwd));
     sigfwd->prev = sigfwd;
index 7f82ed37d7e65464b5a8f38e285798fd17a4f50d..1781cfc82ca259e9299d13ff00718fc8c97b1cb1 100644 (file)
@@ -378,9 +378,10 @@ suspend_parent(int signo)
        sa.sa_flags = SA_INTERRUPT; /* do not restart syscalls */
        sa.sa_handler = SIG_DFL;
        sigaction(signo, &sa, &osa);
-       sudo_debug_printf(SUDO_DEBUG_INFO, "kill parent %d", signo);
+       sudo_debug_printf(SUDO_DEBUG_INFO, "kill parent SIG%s",
+           strsigname(signo));
        if (killpg(ppgrp, signo) != 0)
-           warning("killpg(%d, %d)", (int)ppgrp, signo);
+           warning("killpg(%d, SIG%s)", (int)ppgrp, strsigname(signo));
 
        /* Check foreground/background status on resume. */
        check_foreground();
@@ -826,8 +827,8 @@ deliver_signal(pid_t pid, int signo, bool from_parent)
     debug_decl(deliver_signal, SUDO_DEBUG_EXEC);
 
     /* Handle signal from parent. */
-    sudo_debug_printf(SUDO_DEBUG_INFO, "received signal %d%s", signo,
-       from_parent ? " from parent" : "");
+    sudo_debug_printf(SUDO_DEBUG_INFO, "received SIG%s%s",
+       strsigname(signo), from_parent ? " from parent" : "");
     switch (signo) {
     case SIGALRM:
        terminate_command(pid, true);
@@ -906,16 +907,16 @@ handle_sigchld(int backchannel, struct command_status *cstat)
            cstat->type = CMD_WSTATUS;
            cstat->val = status;
            if (WIFSTOPPED(status)) {
-               sudo_debug_printf(SUDO_DEBUG_INFO, "command stopped, signal %d",
-                   WSTOPSIG(status));
+               sudo_debug_printf(SUDO_DEBUG_INFO,
+                   "command stopped, SIG%s", strsigname(WSTOPSIG(status)));
                do {
                    cmnd_pgrp = tcgetpgrp(io_fds[SFD_SLAVE]);
                } while (cmnd_pgrp == -1 && errno == EINTR);
                if (send_status(backchannel, cstat) == -1)
                    return alive; /* XXX */
            } else if (WIFSIGNALED(status)) {
-               sudo_debug_printf(SUDO_DEBUG_INFO, "command killed, signal %d",
-                   WTERMSIG(status));
+               sudo_debug_printf(SUDO_DEBUG_INFO,
+                   "command killed, SIG%s", strsigname(WTERMSIG(status)));
            } else {
                sudo_debug_printf(SUDO_DEBUG_INFO, "command exited: %d",
                    WEXITSTATUS(status));