pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/sysutils/gamin Port gamin to NetBSD by rewriting the r...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/14edcaa36664
branches:  trunk
changeset: 498709:14edcaa36664
user:      jlam <jlam%pkgsrc.org@localhost>
date:      Tue Aug 30 23:24:33 2005 +0000

description:
Port gamin to NetBSD by rewriting the routines that rely on socket
credentials to understand NetBSD's sockcred.  Bump the PKGREVISION to
1.

diffstat:

 sysutils/gamin/Makefile         |    4 +-
 sysutils/gamin/distinfo         |   12 +-
 sysutils/gamin/patches/patch-aa |    4 +-
 sysutils/gamin/patches/patch-ab |   36 ++++-
 sysutils/gamin/patches/patch-ac |    4 +-
 sysutils/gamin/patches/patch-ad |    4 +-
 sysutils/gamin/patches/patch-ae |  264 ++++++++++++++++++++++++++++++++++++++
 sysutils/gamin/patches/patch-af |  272 ++++++++++++++++++++++++++++++++++++++++
 8 files changed, 584 insertions(+), 16 deletions(-)

diffs (truncated from 676 to 300 lines):

diff -r c41bb1c0f89e -r 14edcaa36664 sysutils/gamin/Makefile
--- a/sysutils/gamin/Makefile   Tue Aug 30 20:46:59 2005 +0000
+++ b/sysutils/gamin/Makefile   Tue Aug 30 23:24:33 2005 +0000
@@ -1,6 +1,7 @@
-# $NetBSD: Makefile,v 1.2 2005/08/10 22:57:24 jlam Exp $
+# $NetBSD: Makefile,v 1.3 2005/08/30 23:24:33 jlam Exp $
 
 DISTNAME=      gamin-0.1.5
+PKGREVISION=   1
 CATEGORIES=    sysutils
 MASTER_SITES=  http://www.gnome.org/~veillard/gamin/sources/
 
@@ -13,6 +14,7 @@
 USE_LIBTOOL=           yes
 USE_TOOLS+=            pkg-config
 GNU_CONFIGURE=         yes
+CONFIGURE_ARGS+=       --enable-debug
 CONFIGURE_ARGS+=       --disable-gtk-doc
 CONFIGURE_ARGS+=       --without-threads
 CONFIGURE_ARGS+=       --with-html-dir=${DOCDIR}
diff -r c41bb1c0f89e -r 14edcaa36664 sysutils/gamin/distinfo
--- a/sysutils/gamin/distinfo   Tue Aug 30 20:46:59 2005 +0000
+++ b/sysutils/gamin/distinfo   Tue Aug 30 23:24:33 2005 +0000
@@ -1,9 +1,11 @@
-$NetBSD: distinfo,v 1.1.1.1 2005/08/10 21:01:51 jlam Exp $
+$NetBSD: distinfo,v 1.2 2005/08/30 23:24:33 jlam Exp $
 
 SHA1 (gamin-0.1.5.tar.gz) = f9f8e4c45c7abb6bb8382bf5d969583f057d1ec3
 RMD160 (gamin-0.1.5.tar.gz) = 757bf10362965f58dd919874a3a35b14627f0c0a
 Size (gamin-0.1.5.tar.gz) = 531603 bytes
-SHA1 (patch-aa) = 8438e9dde835be2662d86b5d58c0b13b6e52df21
-SHA1 (patch-ab) = e504cab3278446837e13484210ab480e2610ebae
-SHA1 (patch-ac) = f1d7c9a3bda033b3f737663995a89490d01332b3
-SHA1 (patch-ad) = d82cd54452dab8e912a69b241b1ea3afc38b690c
+SHA1 (patch-aa) = b4d33eefbed42f889463a58d6f25c2df24970c69
+SHA1 (patch-ab) = 4a282a3b374c3287c2634578b9c701355f0d3455
+SHA1 (patch-ac) = 06f76b4a3354b0621e466484264ac43e92d05c86
+SHA1 (patch-ad) = 37cf3a565c3b028eb58328c6e9d7f57209a1b033
+SHA1 (patch-ae) = 4e81484b9110c70b8776bbfb49d64971eca38cdf
+SHA1 (patch-af) = ed7ba9cfd393f3109c9028cf68e3a5909c95d414
diff -r c41bb1c0f89e -r 14edcaa36664 sysutils/gamin/patches/patch-aa
--- a/sysutils/gamin/patches/patch-aa   Tue Aug 30 20:46:59 2005 +0000
+++ b/sysutils/gamin/patches/patch-aa   Tue Aug 30 23:24:33 2005 +0000
@@ -1,6 +1,6 @@
-$NetBSD: patch-aa,v 1.1.1.1 2005/08/10 21:01:51 jlam Exp $
+$NetBSD: patch-aa,v 1.2 2005/08/30 23:24:33 jlam Exp $
 
---- libgamin/gam_data.c.orig   2005-05-18 14:45:04.000000000 +0000
+--- libgamin/gam_data.c.orig   2005-05-18 10:45:04.000000000 -0400
 +++ libgamin/gam_data.c
 @@ -471,7 +471,7 @@ gamin_data_new(void)
      }
diff -r c41bb1c0f89e -r 14edcaa36664 sysutils/gamin/patches/patch-ab
--- a/sysutils/gamin/patches/patch-ab   Tue Aug 30 20:46:59 2005 +0000
+++ b/sysutils/gamin/patches/patch-ab   Tue Aug 30 23:24:33 2005 +0000
@@ -1,6 +1,6 @@
-$NetBSD: patch-ab,v 1.1.1.1 2005/08/10 21:01:52 jlam Exp $
+$NetBSD: patch-ab,v 1.2 2005/08/30 23:24:33 jlam Exp $
 
---- server/gam_kqueue.c.orig   2005-08-04 08:17:37.000000000 +0000
+--- server/gam_kqueue.c.orig   2005-08-04 04:17:37.000000000 -0400
 +++ server/gam_kqueue.c
 @@ -52,6 +52,7 @@
  #include <string.h>
@@ -10,9 +10,12 @@
  #include <sys/types.h>
  #include <sys/sysctl.h>
  #include <sys/stat.h>
-@@ -327,7 +328,7 @@ gam_kqueue_get_uint_sysctl (const char *
+@@ -325,9 +326,9 @@ gam_kqueue_isdir (const char *pathname, 
+ static gboolean
+ gam_kqueue_get_uint_sysctl (const char *name, unsigned int *value)
  {
-   unsigned int value_len = sizeof(*value);
+-  unsigned int value_len = sizeof(*value);
++  size_t value_len = sizeof(*value);
  
 -  if (sysctlbyname(name, value, &value_len, NULL, 0) < 0)
 +  if (sysctlbyname(name, value, &value_len, (void *)NULL, 0) < 0)
@@ -28,3 +31,28 @@
    
    return TRUE;                        /* keep source */
  }
+@@ -1134,8 +1135,10 @@ gam_kqueue_init (void)
+ 
+   if (! gam_kqueue_get_uint_sysctl("kern.maxfiles", &maxfiles))
+     return FALSE;
++#if defined(KERN_MAXFILESPERPROC)
+   if (! gam_kqueue_get_uint_sysctl("kern.maxfilesperproc", &maxfilesperproc))
+     return FALSE;
++#endif
+ 
+   /*
+    * We make sure to:
+@@ -1144,9 +1147,13 @@ gam_kqueue_init (void)
+    */
+ 
+   maxfiles *= CFG_GLOBAL_FILE_RESERVE_RATIO;
++#if defined(KERN_MAXFILESPERPROC)
+   maxfilesperproc = maxfilesperproc > CFG_SELF_FILE_RESERVE
+     ? maxfilesperproc - CFG_SELF_FILE_RESERVE
+     : 0;
++#else
++  maxfilesperproc = maxfiles;
++#endif
+ 
+   max_open_files = MIN(maxfiles, maxfilesperproc);
+ 
diff -r c41bb1c0f89e -r 14edcaa36664 sysutils/gamin/patches/patch-ac
--- a/sysutils/gamin/patches/patch-ac   Tue Aug 30 20:46:59 2005 +0000
+++ b/sysutils/gamin/patches/patch-ac   Tue Aug 30 23:24:33 2005 +0000
@@ -1,6 +1,6 @@
-$NetBSD: patch-ac,v 1.1.1.1 2005/08/10 21:01:52 jlam Exp $
+$NetBSD: patch-ac,v 1.2 2005/08/30 23:24:33 jlam Exp $
 
---- server/gam_pidname.c.orig  2005-08-01 15:27:19.000000000 +0000
+--- server/gam_pidname.c.orig  2005-08-01 11:27:19.000000000 -0400
 +++ server/gam_pidname.c
 @@ -7,9 +7,9 @@
  
diff -r c41bb1c0f89e -r 14edcaa36664 sysutils/gamin/patches/patch-ad
--- a/sysutils/gamin/patches/patch-ad   Tue Aug 30 20:46:59 2005 +0000
+++ b/sysutils/gamin/patches/patch-ad   Tue Aug 30 23:24:33 2005 +0000
@@ -1,6 +1,6 @@
-$NetBSD: patch-ad,v 1.1.1.1 2005/08/10 21:01:52 jlam Exp $
+$NetBSD: patch-ad,v 1.2 2005/08/30 23:24:33 jlam Exp $
 
---- server/gam_server.c.orig   2005-08-09 18:30:12.000000000 +0000
+--- server/gam_server.c.orig   2005-08-09 14:30:12.000000000 -0400
 +++ server/gam_server.c
 @@ -56,6 +56,21 @@ gboolean (*gam_backend_add_subscription)
  gboolean (*gam_backend_remove_subscription) (GamSubscription *sub);
diff -r c41bb1c0f89e -r 14edcaa36664 sysutils/gamin/patches/patch-ae
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/gamin/patches/patch-ae   Tue Aug 30 23:24:33 2005 +0000
@@ -0,0 +1,264 @@
+$NetBSD: patch-ae,v 1.1 2005/08/30 23:24:33 jlam Exp $
+
+--- libgamin/gam_api.c.orig    2005-08-05 18:31:46.000000000 -0400
++++ libgamin/gam_api.c
+@@ -7,6 +7,7 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <unistd.h>
++#include <sys/param.h>
+ #include <sys/types.h>
+ #include <fcntl.h>
+ #include <errno.h>
+@@ -51,6 +52,20 @@ const char *FamErrlist[] = {
+     NULL
+ };
+ 
++#if defined(SOCKCREDSIZE)
++#define BSDCRED               struct sockcred
++#define CRED_DATASIZE (SOCKCREDSIZE(NGROUPS))
++#define credpid(c,p)  (p)
++#define creduid(c)    (c->sc_euid)
++#define credgid(c)    (c->sc_egid)
++#elif defined(HAVE_CMSGCRED)
++#define BSDCRED               struct cmsgcred
++#define CRED_DATASIZE (sizeof(struct cmsgcred))
++#define credpid(c,p)  (c->cmcred_pid)
++#define creduid(c)    (c->cmcred_euid)
++#define credgid(c)    (c->cmcred_groups[0])
++#endif
++
+ #ifdef GAMIN_DEBUG_API
+ int FAMDebug(FAMConnection *fc, const char *filename, FAMRequest * fr,
+              void *userData);
+@@ -307,12 +322,6 @@ gamin_check_secure_path(const char *path
+       goto cleanup;
+     }
+ #endif
+-    if (st.st_mode & (S_IRWXG|S_IRWXO)) {
+-      gam_error(DEBUG_INFO,
+-                "Socket %s has wrong permissions\n",
+-                path);
+-      goto cleanup;
+-    }
+     /*
+      * Looks good though binding may fail due to an existing server
+      */
+@@ -372,6 +381,18 @@ gamin_connect_unix_socket(const char *pa
+     }
+     strncpy(&addr.sun_path[0], path, (sizeof(addr) - 4) - 1);
+ #endif
++#if defined(BSDCRED) && defined(LOCAL_CREDS)
++    /* Set the socket to receive credentials. */
++    {
++        int on = 1;
++
++        if (setsockopt(fd, 0, LOCAL_CREDS, &on, sizeof(on)) < 0) {
++            gam_error(DEBUG_INFO,
++                      "Unable to setsockopt() LOCAL_CREDS on %d\n", fd);
++            return(-1);
++      }
++    }
++#endif
+ 
+     if (connect(fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+         if (retries == 0) {
+@@ -419,37 +440,35 @@ gamin_connect_unix_socket(const char *pa
+ static int
+ gamin_write_credential_byte(int fd)
+ {
+-    char data[2] = { 0, 0 };
+-    int written;
+-#if defined(HAVE_CMSGCRED) && !defined(LOCAL_CREDS)
+-    struct {
+-          struct cmsghdr hdr;
+-          struct cmsgcred cred;
+-    } cmsg;
+-    struct iovec iov;
+     struct msghdr msg;
++    struct iovec iov;
++    pid_t pid = getpid();
++    int written;
+ 
+-    iov.iov_base = &data[0];
+-    iov.iov_len = 1;
++#if defined(BSDCRED) && !defined(LOCAL_CREDS)
++    struct cmsghdr *cmsg;
++    char cmsgbuf[CMSG_SPACE(CRED_DATASIZE)];
++#endif
+ 
+-    memset (&msg, 0, sizeof (msg));
++    iov.iov_base = &pid;
++    iov.iov_len = sizeof(pid_t);
++
++    memset (&msg, 0, sizeof(msg));
+     msg.msg_iov = &iov;
+     msg.msg_iovlen = 1;
+ 
+-    msg.msg_control = &cmsg;
+-    msg.msg_controllen = sizeof (cmsg);
+-    memset (&cmsg, 0, sizeof (cmsg));
+-    cmsg.hdr.cmsg_len = sizeof (cmsg);
+-    cmsg.hdr.cmsg_level = SOL_SOCKET;
+-    cmsg.hdr.cmsg_type = SCM_CREDS;
++#if defined(BSDCRED) && !defined(LOCAL_CREDS)
++    memset(cmsgbuf, 0, sizeof(cmsgbuf));
++    msg.msg_control = (void *)cmsgbuf;
++    msg.msg_controllen = sizeof(cmsgbuf);
++    cmsg = CMSG_FIRSTHDR(&msg);
++    cmsg->cmsg_len = CMSG_LEN(CRED_DATASIZE);
++    cmsg->cmsg_level = SOL_SOCKET;
++    cmsg->cmsg_type = SCM_CREDS;
+ #endif
+ 
+ retry:
+-#if defined(HAVE_CMSGCRED) && !defined(LOCAL_CREDS)
+     written = sendmsg(fd, &msg, 0);
+-#else
+-    written = write(fd, &data[0], 1);
+-#endif
+     if (written < 0) {
+         if (errno == EINTR)
+             goto retry;
+@@ -457,7 +476,7 @@ retry:
+                   "Failed to write credential bytes to socket %d\n", fd);
+         return (-1);
+     }
+-    if (written != 1) {
++    if (written != iov.iov_len) {
+         gam_error(DEBUG_INFO, "Wrote %d credential bytes to socket %d\n",
+                   written, fd);
+         return (-1);
+@@ -641,43 +660,26 @@ gamin_check_cred(GAMDataPtr conn, int fd
+ {
+     struct msghdr msg;
+     struct iovec iov;
+-    char buf;
+-    pid_t c_pid;
++    pid_t c_pid, pid;
+     uid_t c_uid, s_uid;
+     gid_t c_gid;
+ 
+-#ifdef HAVE_CMSGCRED
+-    struct {
+-          struct cmsghdr hdr;
+-          struct cmsgcred cred;
+-    } cmsg;
+-#endif
+-
+-    s_uid = getuid();
+-
+-#if defined(LOCAL_CREDS) && defined(HAVE_CMSGCRED)
+-    /* Set the socket to receive credentials on the next message */
+-    {
+-        int on = 1;
+-
+-        if (setsockopt(fd, 0, LOCAL_CREDS, &on, sizeof(on)) < 0) {
+-            gam_error(DEBUG_INFO, "Unable to set LOCAL_CREDS socket option\n");
+-            return(-1);
+-        }
+-    }
++#if defined(BSDCRED)
++    struct cmsghdr *cmsg;
++    char cmsgbuf[CMSG_SPACE(CRED_DATASIZE)];
+ #endif



Home | Main Index | Thread Index | Old Index