From d9a352632038181cb35585184c726cd42db17f2c Mon Sep 17 00:00:00 2001
From: "Todd C. Miller" <Todd.Miller@courtesan.com>
Date: Wed, 8 Sep 2010 09:47:00 -0400
Subject: [PATCH] Solaris BSM audit return EINVAL when auditing is not enabled,
 whereas OpenBSM returns ENOSYS.

---
 plugins/sudoers/bsm_audit.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/plugins/sudoers/bsm_audit.c b/plugins/sudoers/bsm_audit.c
index 2b16f0510..787786fd3 100644
--- a/plugins/sudoers/bsm_audit.c
+++ b/plugins/sudoers/bsm_audit.c
@@ -32,6 +32,16 @@
 
 #include "bsm_audit.h"
 
+/*
+ * Solaris auditon() returns EINVAL if BSM audit not configured.
+ * OpenBSM returns ENOSYS for unimplemented options.
+ */
+#ifdef __sun__
+# define AUDIT_NOT_CONFIGURED	EINVAL
+#else
+# define AUDIT_NOT_CONFIGURED	ENOSYS
+#endif
+
 void log_error(int flags, const char *fmt, ...) __attribute__((__noreturn__));
 
 static int
@@ -72,7 +82,7 @@ bsm_audit_success(char **exec_args)
 	 * If we are not auditing, don't cut an audit record; just return.
 	 */
 	if (auditon(A_GETCOND, (caddr_t)&au_cond, sizeof(long)) < 0) {
-		if (errno == ENOSYS)
+		if (errno == AUDIT_NOT_CONFIGURED)
 			return;
 		log_error(0, "Could not determine audit condition");
 	}
@@ -133,7 +143,7 @@ bsm_audit_failure(char **exec_args, char const *const fmt, va_list ap)
 	 * If we are not auditing, don't cut an audit record; just return.
 	 */
 	if (auditon(A_GETCOND, &au_cond, sizeof(long)) < 0) {
-		if (errno == ENOSYS)
+		if (errno == AUDIT_NOT_CONFIGURED)
 			return;
 		log_error(0, "Could not determine audit condition");
 	}
-- 
2.40.0