]> granicus.if.org Git - sudo/commitdiff
Solaris uses sysinfo(SI_SRPC_DOMAIN) instead of getdomainname() to
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 3 Feb 2015 14:33:24 +0000 (07:33 -0700)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 3 Feb 2015 14:33:24 +0000 (07:33 -0700)
get the host's NIS domain.

config.h.in
configure
configure.ac
plugins/sudoers/match.c

index 50280146d1bdb0bc6c97623ef18aa5a4e3b95ed6..c3479ffa8cda9a336bc075e8f59e6816aeaff929 100644 (file)
 /* Define to 1 if you have the `sysctl' function. */
 #undef HAVE_SYSCTL
 
+/* Define to 1 if you have the `sysinfo' function. */
+#undef HAVE_SYSINFO
+
 /* Define to 1 if you have the <sys/bsdtypes.h> header file. */
 #undef HAVE_SYS_BSDTYPES_H
 
 /* Define to 1 if you have the <sys/sysmacros.h> header file. */
 #undef HAVE_SYS_SYSMACROS_H
 
+/* Define to 1 if you have the <sys/systeminfo.h> header file. */
+#undef HAVE_SYS_SYSTEMINFO_H
+
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
index 8b9ad558e5ec9f7c2b08143916b50e26ba346ddb..c94b6ca38fb0ff6f5a272427bb6d58cfc4418cef 100755 (executable)
--- a/configure
+++ b/configure
@@ -18653,7 +18653,11 @@ if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
- for ac_func in getdomainname
+ break
+fi
+done
+
+for ac_func in getdomainname
 do :
   ac_fn_c_check_func "$LINENO" "getdomainname" "ac_cv_func_getdomainname"
 if test "x$ac_cv_func_getdomainname" = xyes; then :
@@ -18661,9 +18665,31 @@ if test "x$ac_cv_func_getdomainname" = xyes; then :
 #define HAVE_GETDOMAINNAME 1
 _ACEOF
 
+else
+
+    for ac_func in sysinfo
+do :
+  ac_fn_c_check_func "$LINENO" "sysinfo" "ac_cv_func_sysinfo"
+if test "x$ac_cv_func_sysinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYSINFO 1
+_ACEOF
+ for ac_header in sys/systeminfo.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/systeminfo.h" "ac_cv_header_sys_systeminfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_systeminfo_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_SYSTEMINFO_H 1
+_ACEOF
+
 fi
+
 done
- break
+
+fi
+done
+
+
 fi
 done
 
index 6561ca6a87b87fdc2fdb9894c19694e0f0586f73..9231065b01bc4923f826fd2d8ebdb61aa61eb7c4 100644 (file)
@@ -2452,7 +2452,10 @@ if test X"$with_interfaces" != X"no"; then
     AC_CHECK_FUNCS([getifaddrs], [AC_CHECK_FUNCS([freeifaddrs])])
 fi
 AC_CHECK_FUNCS([lockf flock], [break])
-AC_CHECK_FUNCS([innetgr _innetgr], [AC_CHECK_FUNCS([getdomainname]) [break]])
+AC_CHECK_FUNCS([innetgr _innetgr], [break])
+AC_CHECK_FUNCS([getdomainname], [], [
+    AC_CHECK_FUNCS([sysinfo], [AC_CHECK_HEADERS([sys/systeminfo.h])])
+])
 AC_CHECK_FUNCS([utimes], [
     AC_CHECK_FUNCS([futimes futimesat], [break])
 ], [
index 03c9293027d17e2ced926a52a79b294d28a00e5f..59b1bfbbe0c4ea5bfc67a16077b879fd74ae989e 100644 (file)
@@ -25,6 +25,9 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#ifdef HAVE_SYS_SYSTEMINFO_H
+# include <sys/systeminfo.h>
+#endif
 #include <stdio.h>
 #ifdef STDC_HEADERS
 # include <stdlib.h>
@@ -912,12 +915,20 @@ const char *
 sudo_getdomainname(void)
 {
     char *domain = NULL;
-#ifdef HAVE_GETDOMAINNAME
+#if defined(HAVE_GETDOMAINNAME) || defined(SI_SRPC_DOMAIN)
     static char buf[HOST_NAME_MAX + 1];
     static bool initialized;
 
     if (!initialized) {
-       if (getdomainname(buf, sizeof(buf)) == 0 && buf[0] != '\0') {
+       int rval;
+
+# ifdef SI_SRPC_DOMAIN
+       buf[0] = '\0';
+       rval = sysinfo(SI_SRPC_DOMAIN, buf, sizeof(buf));
+# else
+       rval = getdomainname(buf, sizeof(buf));
+# endif
+       if (rval != -1 && buf[0] != '\0') {
            char *cp;
 
            domain = buf;
@@ -931,7 +942,7 @@ sudo_getdomainname(void)
        }
        initialized = true;
     }
-#endif /* HAVE_GETDOMAINNAME */
+#endif /* HAVE_GETDOMAINNAME || SI_SRPC_DOMAIN */
     return domain;
 }