From: Yu Watanabe Date: Fri, 21 Nov 2025 00:11:34 +0000 (+0900) Subject: pam-util: use correct errno X-Git-Tag: v259-rc2~46^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=82f2eb73b19ca239e3f93d90f546660d4532201a;p=thirdparty%2Fsystemd.git pam-util: use correct errno - pam_log_oom() passes ENOMEM rather than -ENOMEM, hence previously pam_log_oom() did not return PAM_BUF_ERR. - We may (mistakenly) pass SYNTHETIC_ERRNO(). Let's gracefully handle that. - Introduce errno_to_pam_error() helper function. --- diff --git a/src/shared/pam-util.c b/src/shared/pam-util.c index 7cc0b5aac7c..711bb227691 100644 --- a/src/shared/pam-util.c +++ b/src/shared/pam-util.c @@ -69,16 +69,21 @@ void pam_log_setup(void) { log_set_target(LOG_TARGET_SYSLOG); } +int errno_to_pam_error(int error) { + return ERRNO_VALUE(error) == ENOMEM ? PAM_BUF_ERR : PAM_SERVICE_ERR; +} + int pam_syslog_errno(pam_handle_t *handle, int level, int error, const char *format, ...) { va_list ap; + error = ERRNO_VALUE(error); LOCAL_ERRNO(error); va_start(ap, format); sym_pam_vsyslog(handle, level, format, ap); va_end(ap); - return error == -ENOMEM ? PAM_BUF_ERR : PAM_SERVICE_ERR; + return errno_to_pam_error(error); } int pam_syslog_pam_error(pam_handle_t *handle, int level, int error, const char *format, ...) { diff --git a/src/shared/pam-util.h b/src/shared/pam-util.h index 204eab04cad..9c5f2f37995 100644 --- a/src/shared/pam-util.h +++ b/src/shared/pam-util.h @@ -31,6 +31,8 @@ int dlopen_libpam(void); void pam_log_setup(void); +int errno_to_pam_error(int error) _const_; + int pam_syslog_errno(pam_handle_t *handle, int level, int error, const char *format, ...) _printf_(4,5); int pam_syslog_pam_error(pam_handle_t *handle, int level, int error, const char *format, ...) _printf_(4,5);