pkgsrc-WIP-changes archive

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

polkit: Fix build on SunOS



Module Name:	pkgsrc-wip
Committed By:	youri <youri%NetBSD.org@localhost>
Pushed By:	youri
Date:		Fri Apr 22 13:54:42 2016 +0200
Changeset:	7e07e2ada33ed27986ed4a783db2bcdabadb73db

Modified Files:
	polkit/distinfo
	polkit/patches/patch-src_polkit_polkitunixprocess.c
	polkit/patches/patch-src_polkitbackend_polkitbackendjsauthority.c
Added Files:
	polkit/patches/patch-src_programs_pkexec.c
	polkit/patches/patch-test_mocklib_src_netdb.c
Removed Files:
	polkit/patches/patch-test_mocklibc_src_netdb.c

Log Message:
polkit: Fix build on SunOS

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=7e07e2ada33ed27986ed4a783db2bcdabadb73db

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 polkit/distinfo                                    |   7 +-
 .../patches/patch-src_polkit_polkitunixprocess.c   | 131 +++++++++++++++++----
 ...ch-src_polkitbackend_polkitbackendjsauthority.c |  58 ++++++++-
 polkit/patches/patch-src_programs_pkexec.c         |  24 ++++
 polkit/patches/patch-test_mocklib_src_netdb.c      |  30 +++++
 polkit/patches/patch-test_mocklibc_src_netdb.c     |  22 ----
 6 files changed, 225 insertions(+), 47 deletions(-)

diffs:
diff --git a/polkit/distinfo b/polkit/distinfo
index 5ff7c45..389e540 100644
--- a/polkit/distinfo
+++ b/polkit/distinfo
@@ -4,11 +4,12 @@ SHA1 (polkit-0.113.tar.gz) = ef855c2d04184dceb38e0940dc7bec9cc3da415c
 RMD160 (polkit-0.113.tar.gz) = 661b0a678f7c770c213404db3af604935fdb25bc
 SHA512 (polkit-0.113.tar.gz) = ab177c89a20eeb2978ddbe28afb205d3619f9c5defe833eb68a85e71a0f2c905367f1295cbbfb85da5eafdd661bce474d5d84aca9195cd425a18c9b4170eb5f9
 Size (polkit-0.113.tar.gz) = 1448865 bytes
-SHA1 (patch-src_polkit_polkitunixprocess.c) = 347ce2b4093a126eedb5dd2168d70cf636a30236
+SHA1 (patch-src_polkit_polkitunixprocess.c) = 214541bcb012892b4fc2416897424bce8ed95518
 SHA1 (patch-src_polkitbackend_polkitbackendinteractiveauthority.c) = d8b7cbcd0db26969bc4b83c32a731ae920c2e87b
-SHA1 (patch-src_polkitbackend_polkitbackendjsauthority.c) = fec046c7776d81bee5641868e5ab790cb00d07ec
+SHA1 (patch-src_polkitbackend_polkitbackendjsauthority.c) = 88ed2d42208743db4013399e9ece4cf24a3eaf62
 SHA1 (patch-src_polkitbackend_polkitd.c) = a567b31131f63f92f8e2967c3aabfa7f3d41f627
+SHA1 (patch-src_programs_pkexec.c) = 2c1191d5e5246b62d7bfac144ad2f23eb122efec
 SHA1 (patch-src_programs_pkttyagent.c) = 72a1c3750e6b496b981eb5479201946da80b6d15
+SHA1 (patch-test_mocklib_src_netdb.c) = 7d378cd31577c63a336bad4714ac30f87b892e6f
 SHA1 (patch-test_mocklibc_src_grp.c) = 1ad61ca043e0586ded84c3157d0271a1e3af2b9e
-SHA1 (patch-test_mocklibc_src_netdb.c) = f1b36025b8f574b68b46f20e269c520a82934e9f
 SHA1 (patch-test_mocklibc_src_pwd.c) = 8f2b35cb90f96a115f7621a8751b9e64cba0a106
diff --git a/polkit/patches/patch-src_polkit_polkitunixprocess.c b/polkit/patches/patch-src_polkit_polkitunixprocess.c
index aa8b436..6c52bb6 100644
--- a/polkit/patches/patch-src_polkit_polkitunixprocess.c
+++ b/polkit/patches/patch-src_polkit_polkitunixprocess.c
@@ -1,10 +1,11 @@
 $NetBSD: patch-src_polkit_polkitunixprocess.c,v 1.3 2015/04/02 14:55:36 bsiegert Exp $
 
 * NetBSD support
+* SunOS support
 
---- src/polkit/polkitunixprocess.c.orig	2014-01-14 22:42:25.000000000 +0000
+--- src/polkit/polkitunixprocess.c.orig 2014-01-14 22:42:25.000000000 +0000
 +++ src/polkit/polkitunixprocess.c
-@@ -29,6 +29,10 @@
+@@ -29,10 +29,19 @@
  #include <sys/sysctl.h>
  #include <sys/user.h>
  #endif
@@ -15,20 +16,59 @@ $NetBSD: patch-src_polkit_polkitunixprocess.c,v 1.3 2015/04/02 14:55:36 bsiegert
  #include <stdlib.h>
  #include <string.h>
  #include <errno.h>
-@@ -89,6 +93,9 @@ static gint _polkit_unix_process_get_own
+ #include <stdio.h>
++#include <fcntl.h>
++
++#ifdef HAVE_SOLARIS
++#include <procfs.h>
++#endif
+
+ #include "polkitunixprocess.h"
+ #include "polkitsubject.h"
+@@ -80,7 +89,7 @@ enum
+
+ static void subject_iface_init (PolkitSubjectIface *subject_iface);
+
+-static guint64 get_start_time_for_pid (gint    pid,
++static guint64 get_start_time_for_pid (pid_t    pid,
+                                        GError **error);
+
+ static gint _polkit_unix_process_get_owner (PolkitUnixProcess  *process,
+@@ -89,6 +98,9 @@ static gint _polkit_unix_process_get_own
  #ifdef HAVE_FREEBSD
  static gboolean get_kinfo_proc (gint pid, struct kinfo_proc *p);
  #endif
 +#if defined(__NetBSD__)
 +static gboolean get_kinfo_proc (gint pid, struct kinfo_proc2 *p);
 +#endif
- 
+
  G_DEFINE_TYPE_WITH_CODE (PolkitUnixProcess, polkit_unix_process, G_TYPE_OBJECT,
                           G_IMPLEMENT_INTERFACE (POLKIT_TYPE_SUBJECT, subject_iface_init)
-@@ -554,12 +561,38 @@ get_kinfo_proc (pid_t pid, struct kinfo_
+@@ -514,17 +526,17 @@ subject_iface_init (PolkitSubjectIface *
+
+ #ifdef HAVE_SOLARIS
+ static int
+-get_pid_psinfo (pid_t pid, struct psinfo *ps)
++get_pid_psinfo (pid_t pid, psinfo_t *ps)
+ {
+   char pname[32];
+   int  procfd;
+
+-  (void) snprintf(pname, sizeof(pname), "/proc/%d/psinfo", pid);
++  (void) snprintf(pname, sizeof(pname), "/proc/%lu/psinfo", pid);
+   if ((procfd = open(pname, O_RDONLY)) == -1)
+     {
+       return -1;
+     }
+-  if (read(procfd, ps, sizeof(struct psinfo)) < 0)
++  if (read(procfd, ps, sizeof(psinfo_t)) < 0)
+     {
+       (void) close(procfd);
+       return -1;
+@@ -554,12 +566,38 @@ get_kinfo_proc (pid_t pid, struct kinfo_
  }
  #endif
- 
+
 +#ifdef __NetBSD__
 +static gboolean
 +get_kinfo_proc (pid_t pid, struct kinfo_proc2 *p)
@@ -65,14 +105,36 @@ $NetBSD: patch-src_polkit_polkitunixprocess.c,v 1.3 2015/04/02 14:55:36 bsiegert
    gchar *filename;
    gchar *contents;
    size_t length;
-@@ -631,6 +664,26 @@ get_start_time_for_pid (pid_t    pid,
+@@ -571,7 +609,7 @@ get_start_time_for_pid (pid_t    pid,
+   start_time = 0;
+   contents = NULL;
+
+-  filename = g_strdup_printf ("/proc/%d/stat", pid);
++  filename = g_strdup_printf ("/proc/%lu/stat", pid);
+
+   if (!g_file_get_contents (filename, &contents, &length, error))
+     goto out;
+@@ -631,8 +669,8 @@ get_start_time_for_pid (pid_t    pid,
   out:
    g_free (filename);
    g_free (contents);
+-#else
+-  struct kinfo_proc p;
 +#elif defined(__NetBSD__)
 +  struct kinfo_proc2 p;
+
+   start_time = 0;
+
+@@ -647,9 +685,43 @@ get_start_time_for_pid (pid_t    pid,
+       goto out;
+     }
+
++  start_time = (guint64) p.p_ustart_sec;
++
++out:
 +
-+  start_time = 0;
++#elif HAVE_FREEBSD
++  struct kinfo_proc p;
 +
 +  if (! get_kinfo_proc (pid, &p))
 +    {
@@ -85,40 +147,69 @@ $NetBSD: patch-src_polkit_polkitunixprocess.c,v 1.3 2015/04/02 14:55:36 bsiegert
 +      goto out;
 +    }
 +
-+  start_time = (guint64) p.p_ustart_sec;
-+
+   start_time = (guint64) p.ki_start.tv_sec;
+
+ out:
++#elif HAVE_SOLARIS
++  psinfo_t p;
++  if (!get_pid_psinfo (pid, &p))
++    {
++      g_set_error (error,
++                   POLKIT_ERROR,
++                   POLKIT_ERROR_FAILED,
++                   "Error obtaining start time for %d (%s)",
++                   (gint) pid,
++                   g_strerror (errno));
++      goto out;
++    }
++  start_time = (guint64) p.pr_start.tv_sec;
 +out:
-+
- #else
-   struct kinfo_proc p;
- 
-@@ -664,6 +717,8 @@ _polkit_unix_process_get_owner (PolkitUn
++#else
++#warning Your system is not supported
+ #endif
+
+   return start_time;
+@@ -664,6 +736,10 @@ _polkit_unix_process_get_owner (PolkitUn
    gchar **lines;
  #ifdef HAVE_FREEBSD
    struct kinfo_proc p;
 +#elif defined(__NetBSD__)
 +  struct kinfo_proc2 p;
++#elif HAVE_SOLARIS
++       psinfo_t p;
  #else
    gchar filename[64];
    guint n;
-@@ -676,7 +731,7 @@ _polkit_unix_process_get_owner (PolkitUn
+@@ -676,7 +752,7 @@ _polkit_unix_process_get_owner (PolkitUn
    lines = NULL;
    contents = NULL;
- 
+
 -#ifdef HAVE_FREEBSD
 +#if defined(HAVE_FREEBSD) || defined(__NetBSD__)
    if (get_kinfo_proc (process->pid, &p) == 0)
      {
        g_set_error (error,
-@@ -688,7 +743,11 @@ _polkit_unix_process_get_owner (PolkitUn
+@@ -688,7 +764,23 @@ _polkit_unix_process_get_owner (PolkitUn
        goto out;
      }
- 
+
 +#ifdef __NetBSD__
 +  result = p.p_uid;
 +#else
    result = p.ki_uid;
 +#endif
++#elif HAVE_SOLARIS
++  if (!get_pid_psinfo (process->pid, &p))
++    {
++      g_set_error (error,
++                   POLKIT_ERROR,
++                   POLKIT_ERROR_FAILED,
++                   "get_pid_psinfo() failed for pid %d: %s",
++                   process->pid,
++                   g_strerror (errno));
++      goto out;
++    }
++  result = p.pr_uid;
  #else
- 
+
    /* see 'man proc' for layout of the status file
diff --git a/polkit/patches/patch-src_polkitbackend_polkitbackendjsauthority.c b/polkit/patches/patch-src_polkitbackend_polkitbackendjsauthority.c
index 648cacb..8a95a56 100644
--- a/polkit/patches/patch-src_polkitbackend_polkitbackendjsauthority.c
+++ b/polkit/patches/patch-src_polkitbackend_polkitbackendjsauthority.c
@@ -3,8 +3,9 @@ $NetBSD: patch-src_polkitbackend_polkitbackendjsauthority.c,v 1.3 2015/04/02 14:
 * for *BSD netgroup functions
 * for no SIGPOLL
 * Fix a memory leak
+* Add getgrouplist for SunOS
 
---- src/polkitbackend/polkitbackendjsauthority.c.orig	2015-06-19 20:39:58.000000000 +0000
+--- src/polkitbackend/polkitbackendjsauthority.c.orig   2015-06-19 20:39:58.000000000 +0000
 +++ src/polkitbackend/polkitbackendjsauthority.c
 @@ -24,7 +24,12 @@
  #include <errno.h>
@@ -49,5 +50,58 @@ $NetBSD: patch-src_polkitbackend_polkitbackendjsauthority.c,v 1.3 2015/04/02 14:
    char *netgroup;
 +#endif
    JSBool is_in_netgroup = JS_FALSE;
- 
+
    if (!JS_ConvertArguments (cx, argc, JS_ARGV (cx, vp), "SS", &user_str, &netgroup_str))
+@@ -1913,3 +1923,52 @@ utils_spawn_finish (GAsyncResult   *res,
+  out:
+   return ret;
+ }
++
++#ifdef __sun__
++#include <string.h>
++int
++getgrouplist(const char *uname, gid_t agroup, gid_t *groups, int *grpcnt)
++{
++    const struct group *grp;
++    int i, maxgroups, ngroups, ret;
++
++    ret = 0;
++    ngroups = 0;
++    maxgroups = *grpcnt;
++    /*
++     * When installing primary group, duplicate it;
++     * the first element of groups is the effective gid
++     * and will be overwritten when a setgid file is executed.
++     */
++    groups ? groups[ngroups++] = agroup : ngroups++;
++    if (maxgroups > 1)
++        groups ? groups[ngroups++] = agroup : ngroups++;
++    /*
++     * Scan the group file to find additional groups.
++     */
++    setgrent();
++    while ((grp = getgrent()) != NULL) {
++        if (groups) {
++            for (i = 0; i < ngroups; i++) {
++                if (grp->gr_gid == groups[i])
++                    goto skip;
++            }
++        }
++        for (i = 0; grp->gr_mem[i]; i++) {
++            if (!strcmp(grp->gr_mem[i], uname)) {
++                if (ngroups >= maxgroups) {
++                    ret = -1;
++                    break;
++                }
++                groups ? groups[ngroups++] = grp->gr_gid : ngroups++;
++                break;
++            }
++        }
++skip:
++        ;
++    }
++    endgrent();
++    *grpcnt = ngroups;
++    return (ret);
++}
++#endif
diff --git a/polkit/patches/patch-src_programs_pkexec.c b/polkit/patches/patch-src_programs_pkexec.c
new file mode 100644
index 0000000..df34034
--- /dev/null
+++ b/polkit/patches/patch-src_programs_pkexec.c
@@ -0,0 +1,24 @@
+$NetBSD$
+
+Avoid conflict with SunOS function.
+
+--- src/programs/pkexec.c.orig  2015-06-18 20:20:50.000000000 +0000
++++ src/programs/pkexec.c
+@@ -247,7 +247,7 @@ set_close_on_exec (gint     fd,
+ }
+
+ static gboolean
+-fdwalk (FdCallback callback,
++gfdwalk (FdCallback callback,
+         gpointer   user_data)
+ {
+   gint fd;
+@@ -922,7 +922,7 @@ main (int argc, char *argv[])
+     }
+
+   /* set close_on_exec on all file descriptors except stdin, stdout, stderr */
+-  if (!fdwalk (set_close_on_exec, GINT_TO_POINTER (3)))
++  if (!gfdwalk (set_close_on_exec, GINT_TO_POINTER (3)))
+     {
+       g_printerr ("Error setting close-on-exec for file desriptors\n");
+       goto out;
diff --git a/polkit/patches/patch-test_mocklib_src_netdb.c b/polkit/patches/patch-test_mocklib_src_netdb.c
new file mode 100644
index 0000000..59ce215
--- /dev/null
+++ b/polkit/patches/patch-test_mocklib_src_netdb.c
@@ -0,0 +1,30 @@
+$NetBSD$
+
+Darwin has setnetgrent.
+SunOS has endnetgrent.
+
+--- test/mocklibc/src/netdb.c.orig      2014-01-14 22:42:25.000000000 +0000
++++ test/mocklibc/src/netdb.c
+@@ -36,6 +36,7 @@ static struct netgroup_iter global_iter;
+
+ // REMEMBER: 1 means success, 0 means failure for netgroup methods
+
++#ifndef __APPLE__
+ int setnetgrent(const char *netgroup) {
+   if (!global_netgroup_head)
+     global_netgroup_head = netgroup_parse_all();
+@@ -50,11 +51,14 @@ int setnetgrent(const char *netgroup) {
+   netgroup_iter_init(&global_iter, group);
+   return 1;
+ }
++#endif
+
++#ifndef __sun__
+ void endnetgrent(void) {
+   netgroup_free_all(global_netgroup_head);
+   global_netgroup_head = NULL;
+ }
++#endif
+
+ int getnetgrent(char **host, char **user, char **domain) {
+   if (!global_netgroup_head)
diff --git a/polkit/patches/patch-test_mocklibc_src_netdb.c b/polkit/patches/patch-test_mocklibc_src_netdb.c
deleted file mode 100644
index 592fd54..0000000
--- a/polkit/patches/patch-test_mocklibc_src_netdb.c
+++ /dev/null
@@ -1,22 +0,0 @@
-$NetBSD$
-
-Darwin has setnetgrent.
-
---- test/mocklibc/src/netdb.c.orig	2014-01-14 22:42:25.000000000 +0000
-+++ test/mocklibc/src/netdb.c
-@@ -36,6 +36,7 @@ static struct netgroup_iter global_iter;
- 
- // REMEMBER: 1 means success, 0 means failure for netgroup methods
- 
-+#ifndef __APPLE__
- int setnetgrent(const char *netgroup) {
-   if (!global_netgroup_head)
-     global_netgroup_head = netgroup_parse_all();
-@@ -50,6 +51,7 @@ int setnetgrent(const char *netgroup) {
-   netgroup_iter_init(&global_iter, group);
-   return 1;
- }
-+#endif
- 
- void endnetgrent(void) {
-   netgroup_free_all(global_netgroup_head);


Home | Main Index | Thread Index | Old Index