From: Ben Kibbey Date: Sat, 6 Apr 2013 17:02:32 +0000 (-0400) Subject: login.so: OpenBSD fixes. X-Git-Tag: v2.4~4 X-Git-Url: https://repo.or.cz/w/userinfo.git/commitdiff_plain/5192716651921c962e36f66ff96aa4e4ff020486 login.so: OpenBSD fixes. --- diff --git a/src/modules/login.c b/src/modules/login.c index 6909650..4a80394 100644 --- a/src/modules/login.c +++ b/src/modules/login.c @@ -110,7 +110,6 @@ static char *get_pid(uid_t uid, int multi) static int firstrun; static char line[LINE_MAX]; int cnt, i; - pid_t pid = 0; char errbuf[LINE_MAX]; struct kinfo_proc *kp; @@ -122,9 +121,8 @@ static char *get_pid(uid_t uid, int multi) if (!kd) { firstrun = 1; -#ifdef __NetBSD__ - if ((kd = kvm_openfiles(NULL, NULL, NULL, - O_RDONLY, errbuf)) == NULL) { +#if defined(__NetBSD__) || defined (__OpenBSD__) + if ((kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf)) == NULL) { #else if ((kd = kvm_openfiles(_PATH_DEVNULL, _PATH_DEVNULL, _PATH_DEVNULL, O_RDONLY, errbuf)) == NULL) { @@ -134,31 +132,46 @@ static char *get_pid(uid_t uid, int multi) } } +#ifdef __OpenBSD__ + if ((kp = kvm_getprocs(kd, KERN_PROC_UID, uid, sizeof(struct kinfo_proc), + &cnt)) == NULL) { + warnx("kvm_getprocs(): %s", kvm_geterr(kd)); + return "!"; + } +#else if ((kp = kvm_getprocs(kd, KERN_PROC_UID, uid, &cnt)) == NULL) { warnx("kvm_getprocs(): %s", kvm_geterr(kd)); return "!"; } +#endif for (i = 0; i < cnt; i++) { char buf[32]; + pid_t pid = 0; +#ifdef __OpenBSD__ + if ((kp[i].p_eflag & EPROC_SLEADER) && kp[i].p_tdev != -1) + pid = kp[i].p_pid; +#else #if __FreeBSD_version < 500000 - if (kp[i].kp_eproc.e_flag & EPROC_SLEADER && kp[i].kp_eproc.e_tdev != - -1) { + if (kp[i].kp_eproc.e_flag & EPROC_SLEADER && kp[i].kp_eproc.e_tdev + != -1) { pid = kp[i].kp_eproc.e_ppid; /* * pid = kp[i].kp_proc.p_pid; */ - - if (pid == 1) - continue; + } #else if (kp[i].ki_kiflag & KI_SLEADER && kp[i].ki_tdev != -1) { pid = kp[i].ki_pid; -#endif - snprintf(buf, sizeof(buf), "%i%c", pid, multi); - safe_strncat(line, buf, sizeof(line)); } +#endif +#endif + if (!pid || pid == 1) + continue; + + snprintf(buf, sizeof(buf), "%i%c", pid, multi); + safe_strncat(line, buf, sizeof(line)); } if (line[0] == '\0')