From: Todd C. Miller Date: Tue, 28 Feb 2012 15:33:16 +0000 (-0500) Subject: Prefer KERN_PROC2 over KERN_PROC. Fixes compilation on some versions X-Git-Tag: SUDO_1_8_5~1^2~183 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=966fa83a9a157d21ba9543f8a629123a95508270;p=sudo Prefer KERN_PROC2 over KERN_PROC. Fixes compilation on some versions of OpenBSD versions that have KERN_PROC2 but not KERN_PROC. --- diff --git a/config.h.in b/config.h.in index 277b018f2..7b1991299 100644 --- a/config.h.in +++ b/config.h.in @@ -505,6 +505,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 513129acd..eaee4872d 100755 --- 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 #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 @@ -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 + #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 56e1b6042..833bf7895 100644 --- a/configure.in +++ b/configure.in @@ -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 + #include + ]) + ], [ #include #include ]) diff --git a/src/ttyname.c b/src/ttyname.c index 1a275da8f..f8baa9716 100644 --- a/src/ttyname.c +++ b/src/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(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);