Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Nov 2014 08:00:23 +0000 (UTC)
From:      John Marino <marino@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r373533 - in head/net-mgmt/ccnet: . files
Message-ID:  <201411280800.sAS80NaV057132@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marino
Date: Fri Nov 28 08:00:23 2014
New Revision: 373533
URL: https://svnweb.freebsd.org/changeset/ports/373533
QAT: https://qat.redports.org/buildarchive/r373533/

Log:
  net-mgmt/ccnet: rework to avoid use of /proc
  
  PR:		195023
  Submitted by:	maintainer

Modified:
  head/net-mgmt/ccnet/Makefile
  head/net-mgmt/ccnet/files/patch-lib_Makefile.am
  head/net-mgmt/ccnet/files/patch-lib_utils.c

Modified: head/net-mgmt/ccnet/Makefile
==============================================================================
--- head/net-mgmt/ccnet/Makefile	Fri Nov 28 07:38:20 2014	(r373532)
+++ head/net-mgmt/ccnet/Makefile	Fri Nov 28 08:00:23 2014	(r373533)
@@ -2,7 +2,7 @@
 
 PORTNAME=	ccnet
 PORTVERSION=	3.1.4
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	net-mgmt devel
 
 MAINTAINER=	yan_jingfeng@yahoo.com

Modified: head/net-mgmt/ccnet/files/patch-lib_Makefile.am
==============================================================================
--- head/net-mgmt/ccnet/files/patch-lib_Makefile.am	Fri Nov 28 07:38:20 2014	(r373532)
+++ head/net-mgmt/ccnet/files/patch-lib_Makefile.am	Fri Nov 28 08:00:23 2014	(r373533)
@@ -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
  

Modified: head/net-mgmt/ccnet/files/patch-lib_utils.c
==============================================================================
--- head/net-mgmt/ccnet/files/patch-lib_utils.c	Fri Nov 28 07:38:20 2014	(r373532)
+++ head/net-mgmt/ccnet/files/patch-lib_utils.c	Fri Nov 28 08:00:23 2014	(r373533)
@@ -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)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201411280800.sAS80NaV057132>