From 537dc94b9ed102531411f1d32ffdb97c006f8be6 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 26 Aug 2012 20:12:51 -0400 Subject: [PATCH] Use strsigname() to print signal names in the debug output. If the system has no strsigname(), use our own. --- MANIFEST | 3 + compat/Makefile.in | 21 +++++- compat/mksigname.c | 57 +++++++++++++++ compat/mksigname.h | 175 ++++++++++++++++++++++++++++++++++++++++++++ compat/strsignal.c | 11 +-- compat/strsigname.c | 49 +++++++++++++ config.h.in | 18 +++++ configure | 91 +++++++++++++++++++++++ configure.in | 18 +++++ include/missing.h | 3 + mkdep.pl | 2 +- src/exec.c | 14 ++-- src/exec_pty.c | 17 +++-- 13 files changed, 457 insertions(+), 22 deletions(-) create mode 100644 compat/mksigname.c create mode 100644 compat/mksigname.h create mode 100644 compat/strsigname.c diff --git a/MANIFEST b/MANIFEST index b10036c13..90010b240 100644 --- 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 diff --git a/compat/Makefile.in b/compat/Makefile.in index 797347c04..94efa22c3 100644 --- a/compat/Makefile.in +++ b/compat/Makefile.in @@ -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 index 000000000..b4b4f4d76 --- /dev/null +++ b/compat/mksigname.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2010-2012 Todd C. Miller + * + * 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 + +#include + +#include +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif /* STDC_HEADERS */ +#include + +#include "missing.h" + +int +main(int argc, char *argv[]) +{ + static char *my_sys_signame[NSIG]; + int i; + +#include "compat/mksigname.h" + + printf("#include \n"); + printf("#include \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 index 000000000..9a44bbc44 --- /dev/null +++ b/compat/mksigname.h @@ -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 diff --git a/compat/strsignal.c b/compat/strsignal.c index a13346c10..a07019387 100644 --- a/compat/strsignal.c +++ b/compat/strsignal.c @@ -27,13 +27,13 @@ #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 index 000000000..faf73cdfd --- /dev/null +++ b/compat/strsigname.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2009-2012 Todd C. Miller + * + * 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 + +#include + +#include +#include + +#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"); +} diff --git a/config.h.in b/config.h.in index 49472da5c..a05208ea4 100644 --- a/config.h.in +++ b/config.h.in @@ -91,14 +91,26 @@ 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 header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H @@ -487,6 +499,9 @@ /* Define to 1 if you have the 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 @@ -517,6 +532,9 @@ /* 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 diff --git a/configure b/configure index ccb7fcd86..73867656b 100755 --- a/configure +++ b/configure @@ -18309,6 +18309,97 @@ fi 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 + +" +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 + +" +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 + +" +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 < + ]) + if test "$HAVE_SIGNAME" != "true"; then + AC_LIBOBJ(signame) + fi +]) + dnl dnl nsswitch.conf and its equivalents dnl diff --git a/include/missing.h b/include/missing.h index 238907c18..0d4b779d6 100644 --- a/include/missing.h +++ b/include/missing.h @@ -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 */ diff --git a/mkdep.pl b/mkdep.pl index 77902b997..2a1636381 100755 --- 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; diff --git a/src/exec.c b/src/exec.c index a9fcf8393..ba4d93354 100644 --- a/src/exec.c +++ b/src/exec.c @@ -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; diff --git a/src/exec_pty.c b/src/exec_pty.c index 7f82ed37d..1781cfc82 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -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)); -- 2.40.0