]> granicus.if.org Git - sudo/commitdiff
Prefer KERN_PROC2 over KERN_PROC. Fixes compilation on some versions
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 28 Feb 2012 15:33:16 +0000 (10:33 -0500)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 28 Feb 2012 15:33:16 +0000 (10:33 -0500)
of OpenBSD versions that have KERN_PROC2 but not KERN_PROC.

config.h.in
configure
configure.in
src/ttyname.c

index 277b018f2c8af2f0e974bf830ff8a08adaf993fe..7b1991299f3719abd0aee0668f706ce22f8e9c03 100644 (file)
 /* Define to 1 if the system has the type `struct in6_addr'. */
 #undef HAVE_STRUCT_IN6_ADDR
 
+/* Define to 1 if `p_tdev' is a member of `struct kinfo_proc2'. */
+#undef HAVE_STRUCT_KINFO_PROC2_P_TDEV
+
 /* Define to 1 if `ki_tdev' is a member of `struct kinfo_proc'. */
 #undef HAVE_STRUCT_KINFO_PROC_KI_TDEV
 
index 513129acd0a8fe015a08700cb07bb0955dbcdd47..eaee4872d798d6bd5e8000efd4fc5de052c10fc6 100755 (executable)
--- a/configure
+++ b/configure
@@ -16498,15 +16498,15 @@ _ACEOF
 
 else
 
-       ac_fn_c_check_member "$LINENO" "struct kinfo_proc" "kp_eproc.e_tdev" "ac_cv_member_struct_kinfo_proc_kp_eproc_e_tdev" "
+       ac_fn_c_check_member "$LINENO" "struct kinfo_proc2" "p_tdev" "ac_cv_member_struct_kinfo_proc2_p_tdev" "
            #include <sys/param.h>
            #include <sys/sysctl.h>
 
 "
-if test "x$ac_cv_member_struct_kinfo_proc_kp_eproc_e_tdev" = xyes; then :
+if test "x$ac_cv_member_struct_kinfo_proc2_p_tdev" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV 1
+#define HAVE_STRUCT_KINFO_PROC2_P_TDEV 1
 _ACEOF
 
 
@@ -16524,6 +16524,23 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+else
+
+               ac_fn_c_check_member "$LINENO" "struct kinfo_proc" "kp_eproc.e_tdev" "ac_cv_member_struct_kinfo_proc_kp_eproc_e_tdev" "
+                   #include <sys/param.h>
+                   #include <sys/sysctl.h>
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc_kp_eproc_e_tdev" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV 1
+_ACEOF
+
+
+fi
+
+
 fi
 
 
index 56e1b6042c87e59586959b178527a1b2a59dfab3..833bf78957321b568a0cb317eae7d6d9efb1db4a 100644 (file)
@@ -2142,11 +2142,15 @@ if test "$utmp_style" = "LEGACY"; then
     AC_CHECK_FUNCS(getttyent ttyslot, [break])
 fi
 
-AC_CHECK_FUNCS(sysctl, [AC_CHECK_MEMBERS([struct kinfo_proc.ki_tdev], 
-    [],
+AC_CHECK_FUNCS(sysctl, [AC_CHECK_MEMBERS([struct kinfo_proc.ki_tdev], [],
     [
-       AC_CHECK_MEMBERS([struct kinfo_proc.kp_eproc.e_tdev], [], [
-           AC_CHECK_MEMBERS([struct kinfo_proc.p_tdev], [], [], [
+       AC_CHECK_MEMBERS([struct kinfo_proc2.p_tdev], [], [
+           AC_CHECK_MEMBERS([struct kinfo_proc.p_tdev], [], [
+               AC_CHECK_MEMBERS([struct kinfo_proc.kp_eproc.e_tdev], [], [], [
+                   #include <sys/param.h>
+                   #include <sys/sysctl.h>
+               ])
+           ], [
                #include <sys/param.h>
                #include <sys/sysctl.h>
            ])
index 1a275da8f61f78f7dec9d7f9e855059536e4c6d8..f8baa9716491aceddca0f65cd6039f6e66c5e89b 100644 (file)
@@ -42,7 +42,7 @@
 #endif /* HAVE_UNISTD_H */
 #include <errno.h>
 #include <fcntl.h>
-#if defined(HAVE_STRUCT_KINFO_PROC_P_TDEV) || defined (HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV)
+#if defined(HAVE_STRUCT_KINFO_PROC_P_TDEV) || defined (HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV) || defined(HAVE_STRUCT_KINFO_PROC2_P_TDEV)
 # include <sys/sysctl.h>
 #elif defined(HAVE_STRUCT_KINFO_PROC_KI_TDEV)
 # include <sys/sysctl.h>
 /*
  * How to access the tty device number in struct kinfo_proc.
  */
-#if defined(HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV)
-# define sudo_kp_tdev          kp_eproc.e_tdev
-# define sudo_kp_namelen       4
-#elif defined(HAVE_STRUCT_KINFO_PROC_KI_TDEV)
-# define sudo_kp_tdev          ki_tdev
-# define sudo_kp_namelen       4
+#if defined(HAVE_STRUCT_KINFO_PROC2_P_TDEV)
+# define SUDO_KERN_PROC                KERN_PROC2
+# define sudo_kinfo_proc       kinfo_proc2
+# define sudo_kp_tdev          p_tdev
+# define sudo_kp_namelen       6
 #elif defined(HAVE_STRUCT_KINFO_PROC_P_TDEV)
+# define SUDO_KERN_PROC                KERN_PROC
+# define sudo_kinfo_proc       kinfo_proc
 # define sudo_kp_tdev          p_tdev
 # define sudo_kp_namelen       6
+#elif defined(HAVE_STRUCT_KINFO_PROC_KI_TDEV)
+# define SUDO_KERN_PROC                KERN_PROC
+# define sudo_kinfo_proc       kinfo_proc
+# define sudo_kp_tdev          ki_tdev
+# define sudo_kp_namelen       4
+#elif defined(HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV)
+# define SUDO_KERN_PROC                KERN_PROC
+# define sudo_kinfo_proc       kinfo_proc
+# define sudo_kp_tdev          kp_eproc.e_tdev
+# define sudo_kp_namelen       4
 #endif
 
 #ifdef sudo_kp_tdev
@@ -76,7 +87,7 @@ char *
 get_process_ttyname(void)
 {
     char *tty = NULL;
-    struct kinfo_proc *ki_proc = NULL;
+    struct sudo_kinfo_proc *ki_proc = NULL;
     size_t size = sizeof(*ki_proc);
     int i, mib[6], rc;
     debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL)
@@ -87,7 +98,7 @@ get_process_ttyname(void)
      */
     for (i = 0; tty == NULL && i < 2; i++) {
        mib[0] = CTL_KERN;
-       mib[1] = KERN_PROC;
+       mib[1] = SUDO_KERN_PROC;
        mib[2] = KERN_PROC_PID;
        mib[3] = i ? (int)getppid() : (int)getpid();
        mib[4] = sizeof(*ki_proc);