]> granicus.if.org Git - sudo/commitdiff
Prefer KERN_PROC2 over KERN_PROC. Fixes compilation on some versions
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 23 May 2012 15:23:31 +0000 (11:23 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 23 May 2012 15:23:31 +0000 (11:23 -0400)
of OpenBSD versions that have KERN_PROC2 but not KERN_PROC.

--HG--
branch : 1.7

config.h.in
configure
configure.in
ttyname.c

index 667a7fa55c826ba020c866d2e6a98fae577f67e4..e3d38cb164f8587ce4819ebaf8ca4f73de3ec7b8 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 a05f8b74e451572c79bae6e1ec0c52a28ff84f77..f8332105aff9d03aa0b0f738673c617b80d8d0da 100755 (executable)
--- a/configure
+++ b/configure
@@ -16328,15 +16328,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
 
 
@@ -16354,6 +16354,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 1745afa8527f21b6e6f4f263e69fb84365b01d2c..89ea2dea218ca6577bceeb78081085e439909f6d 100644 (file)
@@ -2048,11 +2048,15 @@ fi
 
 AC_CHECK_FUNCS(getutxid getutid, [break])
 
-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 68a1e38bda638cf358e2b733e8cf2986277916d5..557842a8e3281f181707f1560bc390999735597e 100644 (file)
--- a/ttyname.c
+++ b/ttyname.c
@@ -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()
 {
     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;
 
@@ -86,7 +97,7 @@ get_process_ttyname()
      */
     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);
@@ -146,7 +157,7 @@ get_process_ttyname()
        /* No tty for child, check the parent via /proc. */
        ppid = getppid();
        for (i = STDIN_FILENO; i < STDERR_FILENO && tty == NULL; i++) {
-           snprintf(path, sizeof(path), "/proc/%d/fd/%d", ppid, i);
+           snprintf(path, sizeof(path), "/proc/%d/fd/%d", (int)ppid, i);
            fd = open(path, O_RDONLY|O_NOCTTY, 0);
            if (fd != -1) {
                tty = ttyname(fd);