pam/pam-0.99.6.2-selinux-audit-context.patch
Tomáš Mráz 33d3c087e3 - pam_selinux: improve context change auditing (#234781)
- pam_namespace: fix parsing config file with unknown users (#234513)
2007-04-13 16:14:38 +00:00

86 lines
3.2 KiB
Diff

--- Linux-PAM-0.99.6.2/modules/pam_selinux/pam_selinux.c.audit-context 2007-04-03 17:51:29.000000000 +0200
+++ Linux-PAM-0.99.6.2/modules/pam_selinux/pam_selinux.c 2007-04-03 18:15:06.000000000 +0200
@@ -88,33 +88,36 @@
security_context_t selected_raw=NULL;
rc = -1;
if (audit_fd < 0) {
- pam_syslog(pamh, LOG_ERR, _("Error connecting to audit system.\n"));
+ if (errno == EINVAL || errno == EPROTONOSUPPORT ||
+ errno == EAFNOSUPPORT)
+ return 0; /* No audit support in kernel */
+ pam_syslog(pamh, LOG_ERR, _("Error connecting to audit system."));
return rc;
}
if (selinux_trans_to_raw_context(default_context, &default_raw) < 0) {
- pam_syslog(pamh, LOG_ERR, _("Error translating default context.\n"));
- goto out;
+ pam_syslog(pamh, LOG_ERR, _("Error translating default context."));
+ default_raw = NULL;
}
if (selinux_trans_to_raw_context(selected_context, &selected_raw) < 0) {
- pam_syslog(pamh, LOG_ERR, _("Error translating selected context.\n"));
- goto out;
+ pam_syslog(pamh, LOG_ERR, _("Error translating selected context."));
+ selected_raw = NULL;
}
if (asprintf(&msg, "pam: default-context=%s selected-context=%s",
- default_context ? default_raw : "?",
- selected_context ? selected_raw : "?") < 0) {
- pam_syslog(pamh, LOG_ERR, ("Error allocating memory.\n"));
+ default_raw ? default_raw : (default_context ? default_context : "?"),
+ selected_raw ? selected_raw : (selected_context ? selected_context : "?")) < 0) {
+ pam_syslog(pamh, LOG_ERR, ("Error allocating memory."));
goto out;
}
if (audit_log_user_message(audit_fd, AUDIT_USER_ROLE_CHANGE,
msg, NULL, NULL, NULL, success) <= 0) {
- pam_syslog(pamh, LOG_ERR, _("Error sending audit message.\n"));
+ pam_syslog(pamh, LOG_ERR, _("Error sending audit message."));
goto out;
}
rc = 0;
out:
free(msg);
freecon(default_raw);
- free(selected_raw);
+ freecon(selected_raw);
close(audit_fd);
#else
pam_syslog(pamh, LOG_NOTICE, "pam: default-context=%s selected-context=%s success %d", default_context, selected_context, success);
@@ -298,14 +301,17 @@
if (mls_enabled && !mls_range_allowed(pamh, puser_context, newcon, debug)) {
pam_syslog(pamh, LOG_NOTICE, "Security context %s is not allowed for %s", puser_context, newcon);
+ send_audit_message(pamh, 0, puser_context, newcon);
+ free(newcon);
goto fail_range;
}
return newcon;
}
- else
+ else {
+ send_audit_message(pamh, 0, puser_context, context_str(new_context));
send_text(pamh,_("Not a valid security context"),debug);
-
+ }
context_free(new_context); /* next time around allocates another */
}
else
@@ -318,6 +324,7 @@
free(type);
_pam_drop(responses);
context_free (new_context);
+ send_audit_message(pamh, 0, puser_context, NULL);
fail_range:
return NULL;
}
@@ -509,7 +516,6 @@
if (select_context && has_tty) {
user_context = config_context(pamh, default_user_context, debug);
if (user_context == NULL) {
- send_audit_message(pamh, 0, default_user_context, default_user_context);
freecon(default_user_context);
pam_syslog(pamh, LOG_ERR, _("Unable to get valid context for %s"),
username);