net-mgmt/ccnet: rework to avoid use of /proc
PR: 195023 Submitted by: maintainer
This commit is contained in:
parent
c5a1552a53
commit
657c0847fd
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=373533
@ -2,7 +2,7 @@
|
||||
|
||||
PORTNAME= ccnet
|
||||
PORTVERSION= 3.1.4
|
||||
PORTREVISION= 1
|
||||
PORTREVISION= 2
|
||||
CATEGORIES= net-mgmt devel
|
||||
|
||||
MAINTAINER= yan_jingfeng@yahoo.com
|
||||
|
@ -1,5 +1,5 @@
|
||||
--- lib/Makefile.am.orig 2014-07-31 06:20:28.000000000 -0400
|
||||
+++ lib/Makefile.am 2014-09-02 13:48:35.659991963 -0400
|
||||
--- lib/Makefile.am.orig 2014-11-11 10:10:39.971972968 -0500
|
||||
+++ lib/Makefile.am 2014-11-11 10:37:36.712929368 -0500
|
||||
@@ -19,7 +19,6 @@
|
||||
peer-common.h \
|
||||
string-util.h \
|
||||
@ -8,7 +8,14 @@
|
||||
rpc-common.h \
|
||||
net.h \
|
||||
utils.h \
|
||||
@@ -66,6 +65,8 @@
|
||||
@@ -60,12 +59,14 @@
|
||||
|
||||
libccnetd_la_LDFLAGS = -no-undefined
|
||||
libccnetd_la_LIBADD = @GLIB2_LIBS@ @GOBJECT_LIBS@ @SSL_LIBS@ @LIB_GDI32@ \
|
||||
- -lsqlite3 -levent @LIB_WS32@ @LIB_UUID@ \
|
||||
+ -lsqlite3 -levent @LIB_WS32@ @LIB_UUID@ -lkvm \
|
||||
@LIB_SHELL32@ @LIB_PSAPI@ @SEARPC_LIBS@
|
||||
|
||||
|
||||
ccnet_object_define = ccnetobj.vala
|
||||
|
||||
|
@ -1,56 +1,187 @@
|
||||
--- lib/utils.c.orig 2014-06-10 04:41:45.000000000 -0400
|
||||
+++ lib/utils.c 2014-07-28 14:32:24.000000000 -0400
|
||||
@@ -41,6 +41,10 @@
|
||||
#include <glib/gstdio.h>
|
||||
#include <searpc-utils.h>
|
||||
--- lib/utils.c.orig 2014-07-31 06:20:28.000000000 -0400
|
||||
+++ lib/utils.c 2014-11-21 23:06:33.789257323 -0500
|
||||
@@ -43,6 +43,16 @@
|
||||
|
||||
+#ifdef __FreeBSD__
|
||||
#include <event2/util.h>
|
||||
|
||||
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
+#include <netinet/in.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <kvm.h>
|
||||
+#include <paths.h>
|
||||
+#include <sys/param.h>
|
||||
+#include <sys/sysctl.h>
|
||||
+#include <sys/user.h>
|
||||
+#endif
|
||||
+
|
||||
extern int inet_pton(int af, const char *src, void *dst);
|
||||
|
||||
|
||||
@@ -1463,14 +1467,19 @@
|
||||
@@ -1465,14 +1475,19 @@
|
||||
}
|
||||
#endif /* ifdef WIN32 */
|
||||
|
||||
-#ifdef __linux__
|
||||
+#if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
/* read the link of /proc/123/exe and compare with `process_name' */
|
||||
static int
|
||||
find_process_in_dirent(struct dirent *dir, const char *process_name)
|
||||
-find_process_in_dirent(struct dirent *dir, const char *process_name)
|
||||
+find_process_in_dirent_procfs(struct dirent *dir, const char *process_name)
|
||||
{
|
||||
char path[512];
|
||||
/* fisrst construct a path like /proc/123/exe */
|
||||
+#if defined(__linux__)
|
||||
if (sprintf (path, "/proc/%s/exe", dir->d_name) < 0) {
|
||||
+#endif
|
||||
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
+#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
|
||||
+ if (sprintf (path, "/proc/%s/file", dir->d_name) < 0) {
|
||||
+#else
|
||||
+ if (1) {
|
||||
+#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1528,6 +1537,22 @@
|
||||
@@ -1496,7 +1511,8 @@
|
||||
}
|
||||
|
||||
/* read the /proc fs to determine whether some process is running */
|
||||
-gboolean process_is_running (const char *process_name)
|
||||
+static gboolean
|
||||
+process_is_running_procfs (const char *process_name)
|
||||
{
|
||||
DIR *proc_dir = opendir("/proc");
|
||||
if (!proc_dir) {
|
||||
@@ -1510,7 +1526,7 @@
|
||||
/* /proc/[1-9][0-9]* */
|
||||
if (first > '9' || first < '1')
|
||||
continue;
|
||||
- int pid = find_process_in_dirent(subdir, process_name);
|
||||
+ int pid = find_process_in_dirent_procfs(subdir, process_name);
|
||||
if (pid > 0) {
|
||||
closedir(proc_dir);
|
||||
return TRUE;
|
||||
@@ -1520,6 +1536,18 @@
|
||||
closedir(proc_dir);
|
||||
return FALSE;
|
||||
}
|
||||
+
|
||||
+#ifdef __linux__
|
||||
+static int
|
||||
+find_process_in_dirent(struct dirent *dir, const char *process_name)
|
||||
+{
|
||||
+ return find_process_in_dirent_procfs(dir, process_name);
|
||||
+}
|
||||
+
|
||||
+gboolean
|
||||
+process_is_running (const char *process_name) {
|
||||
+ return process_is_running_procfs(process_name);
|
||||
+}
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
@@ -1530,6 +1558,108 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
+/*
|
||||
+ * Finally, we should not enforce to use /proc
|
||||
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
+gboolean process_is_running (const char *process_name)
|
||||
+{
|
||||
+ //TODO
|
||||
+ return FALSE;
|
||||
+#if defined(__FreeBSD__)
|
||||
+#define PSKIP(kp) ((kp)->ki_pid == mypid || \
|
||||
+ (!kthreads && ((kp)->ki_flag & P_KTHREAD) != 0))
|
||||
+#define KVM_OPENFILES(exec, coref, buf) \
|
||||
+ kvm_openfiles(exec, coref, NULL, O_RDONLY, buf)
|
||||
+#define KVM_GETPROCS(kd, plist, nproc) \
|
||||
+ kvm_getprocs(kd, KERN_PROC_PROC, 0, &nproc)
|
||||
+
|
||||
+#elif defined(__DragonFly__)
|
||||
+#define PSKIP(kp) ((kp)->kp_pid == mypid || \
|
||||
+ (!kthreads && ((kp)->kp_flags & P_KTHREADP) != 0))
|
||||
+#define KVM_OPENFILES(exec, coref, buf) \
|
||||
+ kvm_openfiles(exec, coref, NULL, O_RDONLY, buf)
|
||||
+#define KVM_GETPROCS(kd, plist, nproc) \
|
||||
+ kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc)
|
||||
+
|
||||
+#elif defined(__NetBSD__)
|
||||
+#define PSKIP(kp) ((kp)->kp_pid == mypid || \
|
||||
+ ((kp)->p_flag & P_SYSTEM) != 0)
|
||||
+#define KVM_OPENFILES(exec, coref, buf) \
|
||||
+ kvm_openfiles(exec, coref, NULL, KVM_NO_FILES, buf)
|
||||
+#define KVM_GETPROCS(kd, plist, nproc) \
|
||||
+ kvm_getprocs(kd, KERN_PROC_ALL, 0, sizeof(*plist), &nproc)
|
||||
+
|
||||
+#elif defined(__OpenBSD__)
|
||||
+#define PSKIP(kp) ((kp)->kp_pid == mypid || \
|
||||
+ ((kp)->p_flag & (P_SYSTEM | P_THREAD)) != 0)
|
||||
+#define KVM_OPENFILES(exec, coref, buf) \
|
||||
+ kvm_openfiles(exec, coref, NULL, KVM_NO_FILES, buf)
|
||||
+#define KVM_GETPROCS(kd, plist, nproc) \
|
||||
+ kvm_getprocs(kd, KERN_PROC_ALL, 0, sizeof(*plist), &nproc)
|
||||
+
|
||||
+#else
|
||||
+#define PSKIP(kp) 0
|
||||
+#define KVM_OPENFILES(exec, coref, buf) 0
|
||||
+#define KVM_GETPROCS(kd, plist, nproc) 0
|
||||
+#endif
|
||||
+
|
||||
+#define WITH_PROC_FS g_file_test("/proc/curproc", G_FILE_TEST_EXISTS)
|
||||
+
|
||||
+static int
|
||||
+count_running_process_kvm(const char *process_name) {
|
||||
+
|
||||
+ static kvm_t *kd;
|
||||
+ static struct kinfo_proc *plist;
|
||||
+ static int nproc;
|
||||
+ static pid_t mypid;
|
||||
+ static int kthreads;
|
||||
+
|
||||
+ char buf[_POSIX2_LINE_MAX];
|
||||
+ const char * execf, *coref;
|
||||
+ char **pargv;
|
||||
+ int i, selected_nproc;
|
||||
+ struct kinfo_proc *kp;
|
||||
+
|
||||
+ selected_nproc = 0;
|
||||
+ execf = NULL;
|
||||
+ coref = _PATH_DEVNULL;
|
||||
+
|
||||
+ mypid = getpid();
|
||||
+ kd = KVM_OPENFILES(execf, coref, buf);
|
||||
+ if (kd == NULL) {
|
||||
+ fprintf(stderr, "Error: Cannot open kernel files (%s)", buf);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ plist = KVM_GETPROCS(kd, plist, nproc);
|
||||
+ if (plist == NULL) {
|
||||
+ fprintf(stderr, "Error: Cannot get process list (%s)", kvm_geterr(kd));
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ for(i = 0, kp = plist; i < nproc; i++, kp++) {
|
||||
+ if (PSKIP(kp)) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ if ((pargv = kvm_getargv(kd, kp, 0)) != NULL) {
|
||||
+ if (strstr(pargv[0], process_name) != NULL) {
|
||||
+ selected_nproc += 1;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ kvm_close(kd);
|
||||
+ kvm_close(kd);
|
||||
+
|
||||
+ return selected_nproc;
|
||||
+}
|
||||
+
|
||||
+int count_process(const char *process_name)
|
||||
+{
|
||||
+ return 0;
|
||||
+gboolean
|
||||
+process_is_running(const char * process_name) {
|
||||
+ if (WITH_PROC_FS) {
|
||||
+ return process_is_running_procfs(process_name);
|
||||
+ }
|
||||
+ if (count_running_process_kvm(process_name) > 0) {
|
||||
+ return TRUE;
|
||||
+ } else {
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
+*/
|
||||
+
|
||||
char*
|
||||
ccnet_object_type_from_id (const char *object_id)
|
||||
|
Loading…
Reference in New Issue
Block a user