From c79c481486495e231ecc332d744317124ecae463 Mon Sep 17 00:00:00 2001 From: djm Date: Fri, 18 Aug 2006 22:38:23 +0000 Subject: [PATCH] - (djm) Disable sigdie() for platforms that cannot safely syslog inside a signal handler (basically all of them, excepting OpenBSD); ok dtucker@ --- ChangeLog | 3 +++ configure.ac | 2 ++ defines.h | 5 +++++ log.c | 2 ++ 4 files changed, 12 insertions(+) diff --git a/ChangeLog b/ChangeLog index 47da9f6d..ccce575d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -42,6 +42,9 @@ [gss-genr.c ssh-gss.h] constify host argument to match the rest of the GSSAPI functions and unbreak compilation with -Werror + - (djm) Disable sigdie() for platforms that cannot safely syslog inside + a signal handler (basically all of them, excepting OpenBSD); + ok dtucker@ 20060817 - (dtucker) [openbsd-compat/fake-rfc2553.c openbsd-compat/setproctitle.c] diff --git a/configure.ac b/configure.ac index 436a4a5d..85b076e7 100644 --- a/configure.ac +++ b/configure.ac @@ -402,6 +402,8 @@ mips-sony-bsd|mips-sony-newsos4) AC_DEFINE(HAVE_ATTRIBUTE__SENTINEL__, 1, [OpenBSD's gcc has sentinel]) AC_DEFINE(HAVE_ATTRIBUTE__BOUNDED__, 1, [OpenBSD's gcc has bounded]) AC_DEFINE(SSH_TUN_OPENBSD, 1, [Open tunnel devices the OpenBSD way]) + AC_DEFINE(SYSLOG_R_SAFE_IN_SIGHAND, 1, + [syslog_r function is safe to use in in a signal handler]) ;; *-*-solaris*) if test "x$withval" != "xno" ; then diff --git a/defines.h b/defines.h index b69e1b48..5a9755e6 100644 --- a/defines.h +++ b/defines.h @@ -542,6 +542,11 @@ struct winsize { # undef HAVE_UPDWTMPX #endif +#if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) && \ + defined(SYSLOG_R_SAFE_IN_SIGHAND) +# define DO_LOG_SAFE_IN_SIGHAND +#endif + #if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) # define memmove(s1, s2, n) bcopy((s2), (s1), (n)) #endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */ diff --git a/log.c b/log.c index 32db0cb5..0ce4d85f 100644 --- a/log.c +++ b/log.c @@ -142,9 +142,11 @@ sigdie(const char *fmt,...) { va_list args; +#ifdef DO_LOG_SAFE_IN_SIGHAND va_start(args, fmt); do_log(SYSLOG_LEVEL_FATAL, fmt, args); va_end(args); +#endif _exit(1); } -- 2.45.2