mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 00:14:32 +09:00
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:
@@ -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, ...) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user