From: Todd C. Miller Date: Wed, 23 May 2012 15:23:31 +0000 (-0400) Subject: Prefer KERN_PROC2 over KERN_PROC. Fixes compilation on some versions X-Git-Tag: SUDO_1_7_10~98 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=91335fd34971a0e03fbb2c5451bf2f192fdb8433;p=sudo Prefer KERN_PROC2 over KERN_PROC. Fixes compilation on some versions of OpenBSD versions that have KERN_PROC2 but not KERN_PROC. --HG-- branch : 1.7 --- diff --git a/config.h.in b/config.h.in index 667a7fa55..e3d38cb16 100644 --- a/config.h.in +++ b/config.h.in @@ -522,6 +522,9 @@ /* 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 diff --git a/configure b/configure index a05f8b74e..f8332105a 100755 --- 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 #include " -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 + #include + +" +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 diff --git a/configure.in b/configure.in index 1745afa85..89ea2dea2 100644 --- a/configure.in +++ b/configure.in @@ -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 + #include + ]) + ], [ #include #include ]) diff --git a/ttyname.c b/ttyname.c index 68a1e38bd..557842a8e 100644 --- a/ttyname.c +++ b/ttyname.c @@ -42,7 +42,7 @@ #endif /* HAVE_UNISTD_H */ #include #include -#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 #elif defined(HAVE_STRUCT_KINFO_PROC_KI_TDEV) # include @@ -54,15 +54,26 @@ /* * 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);