On Sun 2010.01.17 at 22:38 -0500, Brad wrote: > I don't use this but someone mentioned it needed an update for KERN_PROC2. > > Please test.
i don't use this either; however, here's an updated diff with the the fifth and sixth levels added. please test. Index: Makefile =================================================================== RCS file: /home/open/anoncvs/cvs/ports/net/zabbix/Makefile,v retrieving revision 1.16 diff -u -p -r1.16 Makefile --- Makefile 15 Jan 2010 09:08:02 -0000 1.16 +++ Makefile 18 Jan 2010 22:04:57 -0000 @@ -7,8 +7,8 @@ COMMENT-web = network and application m VERSION = 1.8 MAJOR = ${VERSION:R} DISTNAME = zabbix-${VERSION} -FULLPKGNAME-main = zabbix-agent-${VERSION}p0 -PKGNAME-server = zabbix-server-${VERSION}p1 +FULLPKGNAME-main = zabbix-agent-${VERSION}p1 +PKGNAME-server = zabbix-server-${VERSION}p2 PKGNAME-web = zabbix-web-${VERSION} CATEGORIES = net Index: patches/patch-src_libs_zbxsysinfo_openbsd_proc_c =================================================================== RCS file: patches/patch-src_libs_zbxsysinfo_openbsd_proc_c diff -N patches/patch-src_libs_zbxsysinfo_openbsd_proc_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_libs_zbxsysinfo_openbsd_proc_c 18 Jan 2010 22:14:35 -0000 @@ -0,0 +1,173 @@ +$OpenBSD$ +--- src/libs/zbxsysinfo/openbsd/proc.c.orig Mon Dec 7 14:43:56 2009 ++++ src/libs/zbxsysinfo/openbsd/proc.c Mon Jan 18 17:10:47 2010 +@@ -43,9 +43,11 @@ static int proc_argv(pid_t pid, char ***argv, size_t * + mib[1] = KERN_PROC_ARGS; + mib[2] = (int)pid; + mib[3] = KERN_PROC_ARGV; ++ mib[4] = sizeof(struct kinfo_proc2); ++ mib[5] = 0; + retry: + sz = *argv_alloc; +- if (0 != sysctl(mib, 4, *argv, &sz, NULL, 0)) { ++ if (0 != sysctl(mib, 6, *argv, &sz, NULL, 0)) { + if (errno == ENOMEM) { + *argv_alloc *= 2; + *argv = zbx_realloc(*argv, *argv_alloc); +@@ -57,7 +59,8 @@ retry: + mib[3] = KERN_PROC_NARGV; + + sz = sizeof(int); +- if (0 != sysctl(mib, 4, argc, &sz, NULL, 0)) ++ mib[5] = (int)(sz / sizeof(struct kinfo_proc2)); ++ if (0 != sysctl(mib, 6, argc, &sz, NULL, 0)) + return FAIL; + + return SUCCEED; +@@ -98,7 +101,7 @@ int PROC_MEMORY(const char *cmd, const char *param + + size_t sz; + +- struct kinfo_proc *proc = NULL; ++ struct kinfo_proc2 *proc = NULL; + struct passwd *usrinfo; + + char **argv = NULL, *args = NULL; +@@ -150,7 +153,7 @@ int PROC_MEMORY(const char *cmd, const char *param + pagesize = getpagesize(); + + mib[0] = CTL_KERN; +- mib[1] = KERN_PROC; ++ mib[1] = KERN_PROC2; + if (NULL != usrinfo) { + mib[2] = KERN_PROC_UID; + mib[3] = usrinfo->pw_uid; +@@ -158,28 +161,31 @@ int PROC_MEMORY(const char *cmd, const char *param + mib[2] = KERN_PROC_ALL; + mib[3] = 0; + } ++ mib[4] = sizeof(struct kinfo_proc2); ++ mib[5] = 0; + + sz = 0; +- if (0 != sysctl(mib, 4, NULL, &sz, NULL, 0)) ++ if (0 != sysctl(mib, 6, NULL, &sz, NULL, 0)) + return SYSINFO_RET_FAIL; + +- proc = (struct kinfo_proc *)zbx_malloc(proc, sz); +- if (0 != sysctl(mib, 4, proc, &sz, NULL, 0)) { ++ proc = (struct kinfo_proc2 *)zbx_malloc(proc, sz); ++ mib[5] = (int)(sz / sizeof(struct kinfo_proc2)); ++ if (0 != sysctl(mib, 6, proc, &sz, NULL, 0)) { + zbx_free(proc); + return SYSINFO_RET_FAIL; + } + +- count = sz / sizeof(struct kinfo_proc); ++ count = sz / sizeof(struct kinfo_proc2); + + for (i = 0; i < count; i++) { + proc_ok = 0; + comm_ok = 0; + +- if (*procname == '\0' || 0 == strcmp(procname, proc[i].kp_proc.p_comm)) ++ if (*procname == '\0' || 0 == strcmp(procname, proc[i].p_comm)) + proc_ok = 1; + + if (*proccomm != '\0') { +- if (SUCCEED == proc_argv(proc[i].kp_proc.p_pid, &argv, &argv_alloc, &argc)) { ++ if (SUCCEED == proc_argv(proc[i].p_pid, &argv, &argv_alloc, &argc)) { + collect_args(argv, argc, &args, &args_alloc); + if (NULL != zbx_regexp_match(args, proccomm, NULL)) + comm_ok = 1; +@@ -188,9 +194,9 @@ int PROC_MEMORY(const char *cmd, const char *param + comm_ok = 1; + + if (proc_ok && comm_ok) { +- value = proc[i].kp_eproc.e_vm.vm_tsize +- + proc[i].kp_eproc.e_vm.vm_dsize +- + proc[i].kp_eproc.e_vm.vm_ssize; ++ value = proc[i].p_vm_tsize ++ + proc[i].p_vm_dsize ++ + proc[i].p_vm_ssize; + value *= pagesize; + + if (0 == proccount++) +@@ -231,7 +237,7 @@ int PROC_NUM(const char *cmd, const char *param, unsig + + size_t sz; + +- struct kinfo_proc *proc = NULL; ++ struct kinfo_proc2 *proc = NULL; + struct passwd *usrinfo; + + char **argv = NULL, *args = NULL; +@@ -281,7 +287,7 @@ int PROC_NUM(const char *cmd, const char *param, unsig + *proccomm = '\0'; + + mib[0] = CTL_KERN; +- mib[1] = KERN_PROC; ++ mib[1] = KERN_PROC2; + if (NULL != usrinfo) { + mib[2] = KERN_PROC_UID; + mib[3] = usrinfo->pw_uid; +@@ -289,39 +295,42 @@ int PROC_NUM(const char *cmd, const char *param, unsig + mib[2] = KERN_PROC_ALL; + mib[3] = 0; + } ++ mib[4] = sizeof(struct kinfo_proc2); ++ mib[5] = 0; + + sz = 0; +- if (0 != sysctl(mib, 4, NULL, &sz, NULL, 0)) ++ if (0 != sysctl(mib, 6, NULL, &sz, NULL, 0)) + return SYSINFO_RET_FAIL; + +- proc = (struct kinfo_proc *)zbx_malloc(proc, sz); +- if (0 != sysctl(mib, 4, proc, &sz, NULL, 0)) { ++ proc = (struct kinfo_proc2 *)zbx_malloc(proc, sz); ++ mib[5] = (int)(sz / sizeof(struct kinfo_proc2)); ++ if (0 != sysctl(mib, 6, proc, &sz, NULL, 0)) { + zbx_free(proc); + return SYSINFO_RET_FAIL; + } + +- count = sz / sizeof(struct kinfo_proc); ++ count = sz / sizeof(struct kinfo_proc2); + + for (i = 0; i < count; i++) { + proc_ok = 0; + stat_ok = 0; + comm_ok = 0; + +- if (*procname == '\0' || 0 == strcmp(procname, proc[i].kp_proc.p_comm)) ++ if (*procname == '\0' || 0 == strcmp(procname, proc[i].p_comm)) + proc_ok = 1; + + if (zbx_proc_stat != ZBX_PROC_STAT_ALL) { + switch (zbx_proc_stat) { + case ZBX_PROC_STAT_RUN: +- if (proc[i].kp_proc.p_stat == SRUN || proc[i].kp_proc.p_stat == SONPROC) ++ if (proc[i].p_stat == SRUN || proc[i].p_stat == SONPROC) + stat_ok = 1; + break; + case ZBX_PROC_STAT_SLEEP: +- if (proc[i].kp_proc.p_stat == SSLEEP) ++ if (proc[i].p_stat == SSLEEP) + stat_ok = 1; + break; + case ZBX_PROC_STAT_ZOMB: +- if (proc[i].kp_proc.p_stat == SZOMB || proc[i].kp_proc.p_stat == SDEAD) ++ if (proc[i].p_stat == SZOMB || proc[i].p_stat == SDEAD) + stat_ok = 1; + break; + } +@@ -329,7 +338,7 @@ int PROC_NUM(const char *cmd, const char *param, unsig + stat_ok = 1; + + if (*proccomm != '\0') { +- if (SUCCEED == proc_argv(proc[i].kp_proc.p_pid, &argv, &argv_alloc, &argc)) { ++ if (SUCCEED == proc_argv(proc[i].p_pid, &argv, &argv_alloc, &argc)) { + collect_args(argv, argc, &args, &args_alloc); + if (zbx_regexp_match(args, proccomm, NULL) != NULL) + comm_ok = 1;