pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/sysutils/whowatch sysutils/whowatch: Fix LP64 and Drag...
details: https://anonhg.NetBSD.org/pkgsrc/rev/f313ea19c393
branches: trunk
changeset: 607327:f313ea19c393
user: marino <marino%pkgsrc.org@localhost>
date: Wed Aug 08 18:37:07 2012 +0000
description:
sysutils/whowatch: Fix LP64 and DragonFly regression
1) The 4th argument of the sysctl function requires type size_t, not int,
which matters for LP64.
2) DragonFly's kinfo structure changed dramatically a few years ago,
breaking this package. Repatched.
3) sysctl can return pid of -1 for pure kernel processes which must be
skipped to avoid a segfault.
diffstat:
sysutils/whowatch/Makefile | 4 +-
sysutils/whowatch/distinfo | 5 +-
sysutils/whowatch/patches/patch-ad | 94 +++++++++++++++++++++++++++--
sysutils/whowatch/patches/patch-proctree.c | 22 +++++++
4 files changed, 114 insertions(+), 11 deletions(-)
diffs (164 lines):
diff -r e04e204bf4d4 -r f313ea19c393 sysutils/whowatch/Makefile
--- a/sysutils/whowatch/Makefile Wed Aug 08 16:35:26 2012 +0000
+++ b/sysutils/whowatch/Makefile Wed Aug 08 18:37:07 2012 +0000
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.14 2010/01/27 20:35:10 joerg Exp $
+# $NetBSD: Makefile,v 1.15 2012/08/08 18:37:07 marino Exp $
#
DISTNAME= whowatch-1.4
-PKGREVISION= 2
+PKGREVISION= 3
CATEGORIES= sysutils
MASTER_SITES= http://wizard.ae.krakow.pl/~mike/download/ \
http://janek.ae.krakow.pl/~suszyckm/download/
diff -r e04e204bf4d4 -r f313ea19c393 sysutils/whowatch/distinfo
--- a/sysutils/whowatch/distinfo Wed Aug 08 16:35:26 2012 +0000
+++ b/sysutils/whowatch/distinfo Wed Aug 08 18:37:07 2012 +0000
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.5 2006/12/13 18:21:36 wiz Exp $
+$NetBSD: distinfo,v 1.6 2012/08/08 18:37:07 marino Exp $
SHA1 (whowatch-1.4.tar.gz) = 0d60c8ddb56b9bf9d2f3e1452832ccb2c862ff0c
RMD160 (whowatch-1.4.tar.gz) = da2ee1d52e2a1d5292713259e66b4e7dd39b8dfd
@@ -6,5 +6,6 @@
SHA1 (patch-aa) = a42dbcd3f9a7138a6ec2e52d34e616e7113b87e2
SHA1 (patch-ab) = f66829eaf7d148df10c2ca064ed81bdedf5c9adc
SHA1 (patch-ac) = 9482d1b1759858a83b1efeaa5fc9dd9ec49043c7
-SHA1 (patch-ad) = cd9a57e6b633927d8373c292a6b6d1ed265fc05c
+SHA1 (patch-ad) = 41a9e710b8bbe427c715da5d82e77bf32a2f7a34
SHA1 (patch-ae) = ebb4f046df6ce950a320216f2d9f5238340a10b1
+SHA1 (patch-proctree.c) = 54bd828dac7f3f6dfd51f869e812e0c5a3a989fd
diff -r e04e204bf4d4 -r f313ea19c393 sysutils/whowatch/patches/patch-ad
--- a/sysutils/whowatch/patches/patch-ad Wed Aug 08 16:35:26 2012 +0000
+++ b/sysutils/whowatch/patches/patch-ad Wed Aug 08 18:37:07 2012 +0000
@@ -1,16 +1,96 @@
-$NetBSD: patch-ad,v 1.1 2006/06/12 16:41:30 joerg Exp $
+$NetBSD: patch-ad,v 1.2 2012/08/08 18:37:07 marino Exp $
+
+Fix LP64 support on FreeBSD/DragonFly (size_t instead of int)
+Add DragonFly support -- kinfo structure is unique on DragonFly
---- procinfo.c.orig 2006-06-12 16:36:48.000000000 +0000
+--- procinfo.c.orig 2000-06-06 18:36:47.000000000 +0000
+++ procinfo.c
-@@ -85,7 +85,11 @@ void get_info(int pid, struct procinfo *
+@@ -65,7 +65,7 @@ void get_info(int pid, struct procinfo *
+ int fill_kinfo(struct kinfo_proc *info, int pid)
+ {
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid };
+- int len = sizeof *info;
++ size_t len = sizeof *info;
+ if(sysctl(mib, 4, info, &len, 0, 0) == -1)
+ return -1;
+ return len?0:-1;
+@@ -83,12 +83,21 @@ void get_info(int pid, struct procinfo *
+ if(fill_kinfo(&info, pid) == -1) return;
+
++#ifdef __DragonFly__
++ p->ppid = info.kp_ppid;
++ p->tpgid = info.kp_tpgid;
++ p->euid = info.kp_svuid;
++ p->stat = info.kp_stat;
++ strncpy(p->exec_file, info.kp_comm, EXEC_FILE);
++ p->cterm = info.kp_tdev;
++#else
p->ppid = info.kp_eproc.e_ppid;
p->tpgid = info.kp_eproc.e_tpgid;
-+#if defined(__DragonFly__)
-+ p->euid = info.kp_eproc.e_ucred.cr_svuid;
-+#else
p->euid = info.kp_eproc.e_pcred.p_svuid;
-+#endif
p->stat = info.kp_proc.p_stat;
strncpy(p->exec_file, info.kp_proc.p_comm, EXEC_FILE);
p->cterm = info.kp_eproc.e_tdev;
++#endif
+ p->exec_file[EXEC_FILE] = '\0';
+ }
+ #endif
+@@ -124,7 +133,8 @@ int get_term(char *tty)
+ int get_login_pid(char *tty)
+ {
+ int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_TTY, 0};
+- int len, t, el, i, pid, cndt = -1, l;
++ size_t len;
++ int t, el, i, pid, cndt = -1, l;
+ struct kinfo_proc *info;
+ struct procinfo p;
+
+@@ -142,6 +152,17 @@ int get_login_pid(char *tty)
+ if(sysctl(mib, 4, info, &len, 0, 0) == -1)
+ return -1;
+ for(i = 0; i < el; i++) {
++#ifdef __DragonFly__
++ if(!(pid = info[i].kp_pid)) continue;
++ get_info(get_ppid(pid), &p);
++ if(p.cterm == -1 || p.cterm != t) {
++ cndt = pid;
++ l = strlen(info[i].kp_comm);
++ if(l > 1 && !strncmp("sh",info[i].kp_comm+l-2,2)) {
++ free(info);
++ return pid;
++ }
++#else
+ if(!(pid = info[i].kp_proc.p_pid)) continue;
+ get_info(get_ppid(pid), &p);
+ if(p.cterm == -1 || p.cterm != t) {
+@@ -157,6 +178,7 @@ int get_login_pid(char *tty)
+ free(info);
+ return pid;
+ }
++#endif
+ }
+ }
+ free(info);
+@@ -169,7 +191,8 @@ int get_login_pid(char *tty)
+ int get_all_info(struct kinfo_proc **info)
+ {
+ int mib[3] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL };
+- int len, el;
++ size_t len;
++ int el;
+
+ if(sysctl(mib, 3, 0, &len, 0, 0) == -1)
+ return 0;
+@@ -239,7 +262,11 @@ char *get_cmdline(int pid)
+ bzero(buf, sizeof buf);
+ if(fill_kinfo(&info, pid) == -1)
+ return "-";
++#ifdef __DragonFly__
++ memcpy(buf, info.kp_comm, sizeof buf - 1);
++#else
+ memcpy(buf, info.kp_proc.p_comm, sizeof buf - 1);
++#endif
+ if(!full_cmd) return buf;
+ #ifdef HAVE_LIBKVM
+ if(!can_use_kvm) return buf;
diff -r e04e204bf4d4 -r f313ea19c393 sysutils/whowatch/patches/patch-proctree.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/whowatch/patches/patch-proctree.c Wed Aug 08 18:37:07 2012 +0000
@@ -0,0 +1,22 @@
+$NetBSD: patch-proctree.c,v 1.1 2012/08/08 18:37:07 marino Exp $
+
+Add DragonFly support (kernel proc can return pid of -1, skip)
+kinfo structure is unique on DragonFly
+
+--- proctree.c.orig 2000-06-06 09:03:28.000000000 +0000
++++ proctree.c
+@@ -170,8 +170,14 @@ int update_tree(void del(void*))
+ #ifdef HAVE_PROCESS_SYSCTL
+ el = get_all_info(&pi);
+ for(i = 0; i < el; i++) {
++#ifdef __DragonFly__
++ if (pi[i].kp_pid == -1) continue;
++ p = validate_proc(pi[i].kp_pid);
++ q = validate_proc(pi[i].kp_ppid);
++#else
+ p = validate_proc(pi[i].kp_proc.p_pid);
+ q = validate_proc(pi[i].kp_eproc.e_ppid);
++#endif
+ #else
+
+ d=opendir(PROCDIR);
Home |
Main Index |
Thread Index |
Old Index