aboutsummaryrefslogtreecommitdiff
path: root/net-mgmt/ccnet-server
diff options
context:
space:
mode:
authorThomas Zander <riggs@FreeBSD.org>2016-12-25 14:38:34 +0000
committerThomas Zander <riggs@FreeBSD.org>2016-12-25 14:38:34 +0000
commitbf55d96f5c49ff21bcb4deca28bdf3c909006ff8 (patch)
treed2219db21854df7b2d820a838756640e174550bf /net-mgmt/ccnet-server
parent76b710174241139a596e625db9aff85cde3ddd9e (diff)
downloadports-bf55d96f5c49ff21bcb4deca28bdf3c909006ff8.tar.gz
ports-bf55d96f5c49ff21bcb4deca28bdf3c909006ff8.zip
Notes
Diffstat (limited to 'net-mgmt/ccnet-server')
-rw-r--r--net-mgmt/ccnet-server/Makefile71
-rw-r--r--net-mgmt/ccnet-server/distinfo3
-rw-r--r--net-mgmt/ccnet-server/files/patch-Makefile.am15
-rw-r--r--net-mgmt/ccnet-server/files/patch-configure.ac78
-rw-r--r--net-mgmt/ccnet-server/files/patch-lib_Makefile.am10
-rw-r--r--net-mgmt/ccnet-server/files/patch-lib_net.c14
-rw-r--r--net-mgmt/ccnet-server/files/patch-lib_utils.c194
-rw-r--r--net-mgmt/ccnet-server/files/patch-net_common_getgateway.c11
-rw-r--r--net-mgmt/ccnet-server/pkg-descr7
-rw-r--r--net-mgmt/ccnet-server/pkg-plist82
10 files changed, 485 insertions, 0 deletions
diff --git a/net-mgmt/ccnet-server/Makefile b/net-mgmt/ccnet-server/Makefile
new file mode 100644
index 000000000000..ba2610d1b776
--- /dev/null
+++ b/net-mgmt/ccnet-server/Makefile
@@ -0,0 +1,71 @@
+# $FreeBSD$
+
+PORTNAME= ccnet-server
+PORTVERSION= 6.0.6
+DISTVERSIONPREFIX= v
+DISTVERSIONSUFFIX= -server
+CATEGORIES= net-mgmt devel
+
+MAINTAINER= ultima1252@gmail.com
+COMMENT= Internal communication framework for Seafile server
+
+LICENSE= GPLv3
+LICENSE_FILE= ${WRKSRC}/LICENSE.txt
+
+BUILD_DEPENDS= valac:lang/vala
+LIB_DEPENDS= libsearpc.so:devel/libsearpc \
+ libglib-2.0.so:devel/glib20 \
+ libsqlite3.so:databases/sqlite3 \
+ libzdb.so:databases/libzdb \
+ libuuid.so:misc/e2fsprogs-libuuid \
+ libevent.so:devel/libevent2 \
+ libjansson.so:devel/jansson \
+ libldap.so:net/openldap24-client
+
+CONFLICT= ccnet-[0-9]*
+
+USE_GITHUB= yes
+GH_ACCOUNT= haiwen
+
+USES= autoreconf gettext libtool localbase mysql:client \
+ pathfix pgsql pkgconfig python:-2.7 shebangfix ssl
+USE_LDCONFIG= yes
+SHEBANG_FILES= tools/*.py
+PATHFIX_MAKEFILEIN= Makefile.am
+
+CONFIGURE_ENV= SSL_CFLAGS="${OPENSSLINC}" SSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto"
+GNU_CONFIGURE= yes
+CONFIGURE_ARGS+= --enable-ldap
+INSTALL_TARGET= install-strip
+
+HAIWENDIR= www/haiwen
+SEAFILE_SERVER= ${HAIWENDIR}/seafile-server
+SEABIN= ${SEAFILE_SERVER}/seafile/bin
+SEALIB= ${SEAFILE_SERVER}/seafile/lib
+
+USERS= seafile
+GROUPS= ${USERS}
+
+PLIST_SUB= USERS=${USERS} \
+ GROUPS=${GROUPS} \
+ SEAFILE_SERVER=${SEAFILE_SERVER} \
+ HAIWENDIR=${HAIWENDIR}
+
+.include <bsd.port.options.mk>
+
+.if ${OPSYS} == FreeBSD && ${OSVERSION} < 1000000
+WITH_OPENSSL_PORT= yes
+.endif
+
+post-install:
+ @${MKDIR} ${STAGEDIR}${PREFIX}/${SEABIN} ${STAGEDIR}${PREFIX}/${SEALIB}
+ ${INSTALL_PROGRAM} ${STAGEDIR}${PREFIX}/bin/ccnet-init ${STAGEDIR}${PREFIX}/${SEABIN}
+ ${INSTALL_PROGRAM} ${STAGEDIR}${PREFIX}/bin/ccnet-server ${STAGEDIR}${PREFIX}/${SEABIN}
+ ${RM} ${STAGEDIR}${PREFIX}/bin/ccnet-init \
+ ${STAGEDIR}${PREFIX}/bin/ccnet-server
+ (cd ${STAGEDIR}${PREFIX}/lib && \
+ ${COPYTREE_SHARE} ${PYTHON_VERSION} ${STAGEDIR}${PREFIX}/${SEALIB})
+ @${RM} -rf ${STAGEDIR}${PREFIX}/lib/${PYTHON_VERSION}
+ ${LN} -s ${PREFIX}/${SEABIN}/ccnet-server ${STAGEDIR}${PREFIX}/bin/
+
+.include <bsd.port.mk>
diff --git a/net-mgmt/ccnet-server/distinfo b/net-mgmt/ccnet-server/distinfo
new file mode 100644
index 000000000000..71f586cdcb44
--- /dev/null
+++ b/net-mgmt/ccnet-server/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1481476651
+SHA256 (haiwen-ccnet-server-v6.0.6-server_GH0.tar.gz) = a8bb1cc138d64e535006ae39423ccf1f5e1bdc920a5fbe54769f52d0f5444f02
+SIZE (haiwen-ccnet-server-v6.0.6-server_GH0.tar.gz) = 210290
diff --git a/net-mgmt/ccnet-server/files/patch-Makefile.am b/net-mgmt/ccnet-server/files/patch-Makefile.am
new file mode 100644
index 000000000000..283bf8703c1a
--- /dev/null
+++ b/net-mgmt/ccnet-server/files/patch-Makefile.am
@@ -0,0 +1,15 @@
+--- Makefile.am.orig 2016-10-05 10:33:03 UTC
++++ Makefile.am
+@@ -15,8 +15,12 @@ install-data-local:
+ if MACOS
+ sed -i '' -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
+ else
++if BSD
++ sed -i '' "s|(DESTDIR)|${PREFIX}|g" $(pcfiles)
++else
+ ${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
+ endif
++endif
+
+ dist-hook:
+ git log --format='%H' -1 > $(distdir)/latest_commit
diff --git a/net-mgmt/ccnet-server/files/patch-configure.ac b/net-mgmt/ccnet-server/files/patch-configure.ac
new file mode 100644
index 000000000000..9a44169f9934
--- /dev/null
+++ b/net-mgmt/ccnet-server/files/patch-configure.ac
@@ -0,0 +1,78 @@
+--- configure.ac.orig 2016-10-05 10:33:03 UTC
++++ configure.ac
+@@ -52,8 +52,16 @@ else
+ AC_MSG_RESULT(no)
+ fi
+
++AC_MSG_CHECKING(for BSD)
++if test `uname | grep -e BSD -e DragonFly | wc -l` = "1"; then
++ bbsd=true
++ AC_MSG_RESULT(compile in BSD)
++else
++ AC_MSG_RESULT(no)
++fi
++
+ AC_MSG_CHECKING(for Linux)
+-if test "$bmac" != "true" -a "$bwin32" != "true"; then
++if test "$bmac" != "true" -a "$bwin32" != "true" -a "$bbsd" != "true"; then
+ blinux=true
+ AC_MSG_RESULT(compile in linux)
+ else
+@@ -73,6 +81,7 @@ AM_CONDITIONAL([COMPILE_PYTHON], [test "
+ AM_CONDITIONAL([WIN32], [test "$bwin32" = "true"])
+ AM_CONDITIONAL([MACOS], [test "$bmac" = "true"])
+ AM_CONDITIONAL([LINUX], [test "$blinux" = "true"])
++AM_CONDITIONAL([BSD], [test "$bbsd" = "true"])
+
+
+ # check libraries
+@@ -132,6 +141,7 @@ if test "$bwin32" = true; then
+ LIBS=
+ LIB_RESOLV=
+ LIB_UUID=-lrpcrt4
++ LIB_KVM=
+ LIB_IPHLPAPI=-liphlpapi
+ LIB_SHELL32=-lshell32
+ LIB_PSAPI=-lpsapi
+@@ -144,11 +154,25 @@ elif test "$bmac" = true ; then
+ LIB_INTL=
+ LIB_RESOLV=-lresolv
+ LIB_UUID=
++ LIB_KVM=
+ LIB_IPHLPAPI=
+ LIB_SHELL32=
+ LIB_PSAPI=
+ MSVC_CFLAGS=
+ LIB_DIRWATCH="-framework CoreServices"
++elif test "$bbsd" = true ; then
++ LIB_WS32=
++ LIB_GDI32=
++ LIB_RT=
++ LIB_INTL=
++ LIB_RESOLV=
++ LIB_UUID=-luuid
++ LIB_KVM=-lkvm
++ LIB_IPHLPAPI=
++ LIB_SHELL32=
++ LIB_PSAPI=
++ MSVC_CFLAGS=
++ LIB_DIRWATCH=
+ else
+ LIB_WS32=
+ LIB_GDI32=
+@@ -156,6 +180,7 @@ else
+ LIB_INTL=
+ LIB_RESOLV=-lresolv
+ LIB_UUID=-luuid
++ LIB_KVM=
+ LIB_IPHLPAPI=
+ LIB_SHELL32=
+ LIB_PSAPI=
+@@ -169,6 +194,7 @@ AC_SUBST(LIB_RT)
+ AC_SUBST(LIB_INTL)
+ AC_SUBST(LIB_RESOLV)
+ AC_SUBST(LIB_UUID)
++AC_SUBST(LIB_KVM)
+ AC_SUBST(LIB_IPHLPAPI)
+ AC_SUBST(LIB_SHELL32)
+ AC_SUBST(LIB_PSAPI)
diff --git a/net-mgmt/ccnet-server/files/patch-lib_Makefile.am b/net-mgmt/ccnet-server/files/patch-lib_Makefile.am
new file mode 100644
index 000000000000..7fcd64109bde
--- /dev/null
+++ b/net-mgmt/ccnet-server/files/patch-lib_Makefile.am
@@ -0,0 +1,10 @@
+--- lib/Makefile.am.orig 2016-10-20 15:27:27 UTC
++++ lib/Makefile.am
+@@ -61,6 +61,7 @@ libccnetd_la_SOURCES = utils.c db.c job-
+ libccnetd_la_LDFLAGS = -no-undefined
+ libccnetd_la_LIBADD = @GLIB2_LIBS@ @GOBJECT_LIBS@ @SSL_LIBS@ @LIB_GDI32@ \
+ -lsqlite3 @LIBEVENT_LIBS@ @LIB_WS32@ @LIB_UUID@ \
++ @LIB_KVM@ \
+ @LIB_SHELL32@ @LIB_PSAPI@ @SEARPC_LIBS@
+
+
diff --git a/net-mgmt/ccnet-server/files/patch-lib_net.c b/net-mgmt/ccnet-server/files/patch-lib_net.c
new file mode 100644
index 000000000000..3664419fb2e7
--- /dev/null
+++ b/net-mgmt/ccnet-server/files/patch-lib_net.c
@@ -0,0 +1,14 @@
+--- lib/net.c.orig 2016-10-05 10:33:03 UTC
++++ lib/net.c
+@@ -152,7 +152,11 @@ ccnet_net_bind_tcp (int port, int nonblo
+
+ snprintf (buf, sizeof(buf), "%d", port);
+
++#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
++ if ( (n = getaddrinfo("0.0.0.0", buf, &hints, &res) ) != 0) {
++#else
+ if ( (n = getaddrinfo(NULL, buf, &hints, &res) ) != 0) {
++#endif
+ ccnet_warning ("getaddrinfo fails: %s\n", gai_strerror(n));
+ return -1;
+ }
diff --git a/net-mgmt/ccnet-server/files/patch-lib_utils.c b/net-mgmt/ccnet-server/files/patch-lib_utils.c
new file mode 100644
index 000000000000..3b36b07e4b61
--- /dev/null
+++ b/net-mgmt/ccnet-server/files/patch-lib_utils.c
@@ -0,0 +1,194 @@
+--- lib/utils.c.orig 2016-10-05 10:33:03 UTC
++++ lib/utils.c
+@@ -43,6 +43,16 @@
+
+ #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);
+
+
+@@ -1469,14 +1479,20 @@ get_argv_utf8 (int *argc)
+ }
+ #endif /* ifdef WIN32 */
+
+-#ifdef __linux__
++
+ /* 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_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) {
++#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
++ if (sprintf (path, "/proc/%s/file", dir->d_name) < 0) {
++#else
++ if (1) {
++#endif
+ return -1;
+ }
+
+@@ -1500,7 +1516,8 @@ find_process_in_dirent(struct dirent *di
+ }
+
+ /* 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) {
+@@ -1514,7 +1531,7 @@ gboolean process_is_running (const char
+ /* /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;
+@@ -1524,6 +1541,18 @@ gboolean process_is_running (const char
+ 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__
+@@ -1534,6 +1563,113 @@ gboolean process_is_running (const char
+ }
+ #endif
+
++#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
++#if defined(__FreeBSD__)
++#if __FreeBSD_version < 1100097
++#define PSKIP(kp) ((kp)->ki_pid == mypid || \
++ (!kthreads && ((kp)->ki_flag & P_KTHREAD) != 0))
++#else
++#define PSKIP(kp) ((kp)->ki_pid == mypid || \
++ (!kthreads && ((kp)->ki_flag & P_KPROC) != 0))
++#endif
++#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_SYSTEM) != 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;
++}
++
++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)
+ {
diff --git a/net-mgmt/ccnet-server/files/patch-net_common_getgateway.c b/net-mgmt/ccnet-server/files/patch-net_common_getgateway.c
new file mode 100644
index 000000000000..aeb184a77f43
--- /dev/null
+++ b/net-mgmt/ccnet-server/files/patch-net_common_getgateway.c
@@ -0,0 +1,11 @@
+--- net/common/getgateway.c.orig 2016-10-05 10:33:03 UTC
++++ net/common/getgateway.c
+@@ -34,7 +34,7 @@
+ #undef USE_SYSCTL_NET_ROUTE
+ #endif
+
+-#ifdef BSD
++#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
+ #undef USE_PROC_NET_ROUTE
+ #define USE_SOCKET_ROUTE
+ #undef USE_SYSCTL_NET_ROUTE
diff --git a/net-mgmt/ccnet-server/pkg-descr b/net-mgmt/ccnet-server/pkg-descr
new file mode 100644
index 000000000000..fd0ab0208817
--- /dev/null
+++ b/net-mgmt/ccnet-server/pkg-descr
@@ -0,0 +1,7 @@
+Ccnet is a framework for writing networked applications in C. It provides
+the services of peer identification, connection management, service
+invocation, and message sending. In ccnet network, there are two types of
+nodes, i.e., client and server. Server has the following functions, User
+management, Group management.
+
+WWW: https://github.com/haiwen/ccnet-server
diff --git a/net-mgmt/ccnet-server/pkg-plist b/net-mgmt/ccnet-server/pkg-plist
new file mode 100644
index 000000000000..921e7d30e116
--- /dev/null
+++ b/net-mgmt/ccnet-server/pkg-plist
@@ -0,0 +1,82 @@
+bin/ccnet-server
+include/ccnet.h
+include/ccnet/async-rpc-proc.h
+include/ccnet/ccnet-client.h
+include/ccnet/ccnet-object.h
+include/ccnet/ccnet-session-base.h
+include/ccnet/ccnetrpc-transport.h
+include/ccnet/cevent.h
+include/ccnet/invoke-service-proc.h
+include/ccnet/job-mgr.h
+include/ccnet/message.h
+include/ccnet/mqclient-proc.h
+include/ccnet/option.h
+include/ccnet/packet.h
+include/ccnet/peer.h
+include/ccnet/proc-factory.h
+include/ccnet/processor.h
+include/ccnet/rpcserver-proc.h
+include/ccnet/sendcmd-proc.h
+include/ccnet/status-code.h
+include/ccnet/threaded-rpcserver-proc.h
+include/ccnet/timer.h
+include/ccnet/valid-check.h
+lib/libccnet.a
+lib/libccnet.so
+lib/libccnet.so.0
+lib/libccnet.so.0.0.0
+libdata/pkgconfig/libccnet.pc
+%%SEAFILE_SERVER%%/seafile/bin/ccnet-init
+%%SEAFILE_SERVER%%/seafile/bin/ccnet-server
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/__init__.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/__init__.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/__init__.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/__init__.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/__init__.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/__init__.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/async_client.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/async_client.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/async_client.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/mqclientproc.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/mqclientproc.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/mqclientproc.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/processor.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/processor.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/processor.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/rpcserverproc.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/rpcserverproc.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/rpcserverproc.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/sendcmdproc.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/sendcmdproc.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/sendcmdproc.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/timer.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/timer.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/async/timer.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/client.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/client.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/client.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/errors.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/errors.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/errors.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/message.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/message.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/message.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/packet.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/packet.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/packet.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/pool.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/pool.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/pool.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/rpc.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/rpc.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/rpc.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/status_code.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/status_code.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/status_code.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/sync_client.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/sync_client.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/sync_client.pyo
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/utils.py
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/utils.pyc
+%%SEAFILE_SERVER%%/seafile/%%PYTHON_SITELIBDIR%%/ccnet/utils.pyo
+@dir(%%USERS%%,%%GROUPS%%,755) %%HAIWENDIR%%