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.
This commit is contained in:
Yu Watanabe
2025-11-21 09:11:34 +09:00
parent 7582679d0e
commit 82f2eb73b1
2 changed files with 8 additions and 1 deletions

View File

@@ -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, ...) {

View File

@@ -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);