]> granicus.if.org Git - sudo/commitdiff
Add a test for the 4-argument au_close() function found in Solaris
authorTodd C. Miller <Todd.Miller@sudo.ws>
Mon, 27 Aug 2018 19:50:23 +0000 (13:50 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Mon, 27 Aug 2018 19:50:23 +0000 (13:50 -0600)
11 instead of assuming it is present if __sun is defined.  Fixes a
compilation error on OpenIndiana and older Solaris versions.

config.h.in
configure
configure.ac
m4/sudo.m4
plugins/sudoers/bsm_audit.c

index 920e8411857edb7d4caab6f062fb57b72cfe5364..fd99abdaac7480077149a0a1f84aa00fd14b8ceb 100644 (file)
 /* Define to 1 if you have the `auth_challenge' function. */
 #undef HAVE_AUTH_CHALLENGE
 
+/* Define to 1 if the `au_close' functions takes 4 arguments like Solaris 11.
+   */
+#undef HAVE_AU_CLOSE_SOLARIS11
+
 /* Define to 1 if you have the `bigcrypt' function. */
 #undef HAVE_BIGCRYPT
 
index e78bf5f53b82d885876204a0b36b9eeb1631252e..8d213c66a227d02657a2e44724c7daa0abf08fcb 100755 (executable)
--- a/configure
+++ b/configure
@@ -24601,6 +24601,46 @@ done
     fi
 fi
 
+if test X"$with_bsm_audit" = X"yes"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether au_close() takes 4 arguments" >&5
+$as_echo_n "checking whether au_close() takes 4 arguments... " >&6; }
+if ${sudo_cv_func_au_close_solaris11+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+#include <bsm/audit.h>
+#include <bsm/libbsm.h>
+#include <bsm/audit_uevents.h>
+
+int au_close(int d, int keep, au_event_t event, au_emod_t emod) {return 0;}
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  sudo_cv_func_au_close_solaris11=yes
+else
+  sudo_cv_func_au_close_solaris11=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_func_au_close_solaris11" >&5
+$as_echo "$sudo_cv_func_au_close_solaris11" >&6; }
+  if test $sudo_cv_func_au_close_solaris11 = yes; then
+
+$as_echo "#define HAVE_AU_CLOSE_SOLARIS11 1" >>confdefs.h
+
+  fi
+
+fi
+
 if test X"$enable_poll" = X""; then
     for ac_func in ppoll poll
 do :
index 0b303fcccb7720ef922de598349686d0f7506c40..c8b3bfd461e5d69a64c2b93b692697d143606791 100644 (file)
@@ -3774,6 +3774,13 @@ if test ${with_passwd-'no'} != "no"; then
     fi
 fi
 
+dnl
+dnl Solaris 11 added a 4th argument to the au_close() function
+dnl
+if test X"$with_bsm_audit" = X"yes"; then
+    SUDO_FUNC_AU_CLOSE_SOLARIS11
+fi
+
 dnl
 dnl Choose event subsystem backend: poll or select
 dnl
index 6eda7d87a131f641d2bfdf5ee82a9a1f31679040..df89660264cf65babf4748229daae9badbec1aae 100644 (file)
@@ -265,6 +265,26 @@ int putenv(const char *string) {return 0;}], [])],
   fi
 ])
 
+dnl
+dnl check whether au_close() takes 3 or 4 arguments
+dnl
+AC_DEFUN([SUDO_FUNC_AU_CLOSE_SOLARIS11],
+[AC_CACHE_CHECK([whether au_close() takes 4 arguments],
+sudo_cv_func_au_close_solaris11,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
+#include <bsm/audit.h>
+#include <bsm/libbsm.h>
+#include <bsm/audit_uevents.h>
+
+int au_close(int d, int keep, au_event_t event, au_emod_t emod) {return 0;}], [])],
+    [sudo_cv_func_au_close_solaris11=yes],
+    [sudo_cv_func_au_close_solaris11=no])
+  ])
+  if test $sudo_cv_func_au_close_solaris11 = yes; then
+    AC_DEFINE(HAVE_AU_CLOSE_SOLARIS11, 1, [Define to 1 if the `au_close' functions takes 4 arguments like Solaris 11.])
+  fi
+])
+
 dnl
 dnl Check if the data argument for the sha2 functions is void * or u_char *
 dnl
index 80e4b2b1e0eecbe365ab1f3edb96cade0cb2c424..eaf92991ec095530d8c65ab43b63da0c5805ad13 100644 (file)
@@ -174,7 +174,7 @@ bsm_audit_success(char *exec_args[])
                debug_return_int(-1);
        }
        au_write(aufd, tok);
-#ifdef __sun
+#ifdef HAVE_AU_CLOSE_SOLARIS11
        if (au_close(aufd, 1, sudo_audit_event, 0) == -1)
 #else
        if (au_close(aufd, 1, sudo_audit_event) == -1)
@@ -265,7 +265,7 @@ bsm_audit_failure(char *exec_args[], char const *const fmt, va_list ap)
                debug_return_int(-1);
        }
        au_write(aufd, tok);
-#ifdef __sun
+#ifdef HAVE_AU_CLOSE_SOLARIS11
        if (au_close(aufd, 1, sudo_audit_event, PAD_FAILURE) == -1)
 #else
        if (au_close(aufd, 1, sudo_audit_event) == -1)