From 783a383e4b19bd8450ac5fb58f8d186661fb7acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Sat, 31 Mar 2012 16:20:13 +0000 Subject: [PATCH] Save errno before calling asprintf(), since asprintf() may touch errno, which will cause syslog() to log the wrong error message if the format string contains %m. git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@537 185d5e19-27fe-0310-9dcf-9bff6b9f3609 --- lib/openpam_log.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/openpam_log.c b/lib/openpam_log.c index d6874e0..9ed9313 100644 --- a/lib/openpam_log.c +++ b/lib/openpam_log.c @@ -39,11 +39,10 @@ # include "config.h" #endif -#include +#include #include #include #include -#include #include #include @@ -101,6 +100,7 @@ _openpam_log(int level, const char *func, const char *fmt, ...) va_list ap; char *format; int priority; + int serrno; switch (level) { case PAM_LOG_DEBUG: @@ -120,10 +120,13 @@ _openpam_log(int level, const char *func, const char *fmt, ...) break; } va_start(ap, fmt); + serrno = errno; if (asprintf(&format, "in %s(): %s", func, fmt) > 0) { + errno = serrno; vsyslog(priority, format, ap); FREE(format); } else { + errno = serrno; vsyslog(priority, fmt, ap); } va_end(ap);