From 2fc7038ca45e704e1bd9d283106ede1f3a240211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Sun, 14 Apr 2013 14:36:05 +0000 Subject: [PATCH] Always restore errno before returning from openpam_log(). git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@681 185d5e19-27fe-0310-9dcf-9bff6b9f3609 --- lib/libpam/openpam_log.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/libpam/openpam_log.c b/lib/libpam/openpam_log.c index 7ab1716..e0e9ed5 100644 --- a/lib/libpam/openpam_log.c +++ b/lib/libpam/openpam_log.c @@ -69,6 +69,7 @@ openpam_log(int level, const char *fmt, ...) { va_list ap; int priority; + int serrno; switch (level) { case PAM_LOG_LIBDEBUG: @@ -88,9 +89,11 @@ openpam_log(int level, const char *fmt, ...) priority = LOG_ERR; break; } + serrno = errno; va_start(ap, fmt); vsyslog(priority, fmt, ap); va_end(ap); + errno = serrno; } #else @@ -121,8 +124,8 @@ _openpam_log(int level, const char *func, const char *fmt, ...) priority = LOG_ERR; break; } - va_start(ap, fmt); serrno = errno; + va_start(ap, fmt); if (asprintf(&format, "in %s(): %s", func, fmt) > 0) { errno = serrno; vsyslog(priority, format, ap); @@ -132,6 +135,7 @@ _openpam_log(int level, const char *func, const char *fmt, ...) vsyslog(priority, fmt, ap); } va_end(ap); + errno = serrno; } #endif