summaryrefslogtreecommitdiff
path: root/user/polkit/0001-make-netgroup-support-optional.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/polkit/0001-make-netgroup-support-optional.patch')
-rw-r--r--user/polkit/0001-make-netgroup-support-optional.patch480
1 files changed, 480 insertions, 0 deletions
diff --git a/user/polkit/0001-make-netgroup-support-optional.patch b/user/polkit/0001-make-netgroup-support-optional.patch
new file mode 100644
index 000000000..1a7716c45
--- /dev/null
+++ b/user/polkit/0001-make-netgroup-support-optional.patch
@@ -0,0 +1,480 @@
+From aafb9fd0e79775146186ee1d7ffef1f76cdbc1bb Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Wed, 11 Jul 2018 04:54:26 -0500
+Subject: [PATCH] make netgroup support optional
+
+On at least Linux/musl and Linux/uclibc, netgroup support is not
+available. PolKit fails to compile on these systems for that reason.
+
+This change makes netgroup support conditional on the presence of the
+setnetgrent(3) function which is required for the support to work. If
+that function is not available on the system, an error will be returned
+to the administrator if unix-netgroup: is specified in configuration.
+
+Fixes bug 50145.
+---
+ 0001-make-netgroup-support-optional.patch | 226 ++++++++++++++++++
+ configure.ac | 2 +-
+ src/polkit/polkitidentity.c | 16 ++
+ src/polkit/polkitunixnetgroup.c | 3 +
+ .../polkitbackendinteractiveauthority.c | 14 +-
+ .../polkitbackendjsauthority.cpp | 2 +
+ test/polkit/polkitidentitytest.c | 9 +-
+ test/polkit/polkitunixnetgrouptest.c | 3 +
+ .../test-polkitbackendjsauthority.c | 2 +
+ 9 files changed, 269 insertions(+), 8 deletions(-)
+ create mode 100644 0001-make-netgroup-support-optional.patch
+
+diff --git a/0001-make-netgroup-support-optional.patch b/0001-make-netgroup-support-optional.patch
+new file mode 100644
+index 0000000..dedc5f7
+--- /dev/null
++++ b/0001-make-netgroup-support-optional.patch
+@@ -0,0 +1,226 @@
++From 73eada88dd344333cc1d1f9c5c35413fcee1dd67 Mon Sep 17 00:00:00 2001
++From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
++Date: Wed, 11 Jul 2018 04:54:26 -0500
++Subject: [PATCH] make netgroup support optional
++
++On at least Linux/musl and Linux/uclibc, netgroup support is not
++available. PolKit fails to compile on these systems for that reason.
++
++This change makes netgroup support conditional on the presence of the
++setnetgrent(3) function which is required for the support to work. If
++that function is not available on the system, an error will be returned
++to the administrator if unix-netgroup: is specified in configuration.
++
++Fixes bug 50145.
++---
++ configure.ac | 2 +-
++ src/polkit/polkitidentity.c | 16 ++++++++++++++++
++ src/polkit/polkitunixnetgroup.c | 3 +++
++ .../polkitbackendinteractiveauthority.c | 14 ++++++++------
++ src/polkitbackend/polkitbackendjsauthority.cpp | 2 ++
++ test/polkit/polkitidentitytest.c | 9 ++++++++-
++ test/polkit/polkitunixnetgrouptest.c | 3 +++
++ 7 files changed, 41 insertions(+), 8 deletions(-)
++
++diff --git a/configure.ac b/configure.ac
++index bfa87dd..cb86ac7 100644
++--- a/configure.ac
+++++ b/configure.ac
++@@ -99,7 +99,7 @@ AC_CHECK_LIB(expat,XML_ParserCreate,[EXPAT_LIBS="-lexpat"],
++ [AC_MSG_ERROR([Can't find expat library. Please install expat.])])
++ AC_SUBST(EXPAT_LIBS)
++
++-AC_CHECK_FUNCS(clearenv fdatasync)
+++AC_CHECK_FUNCS(clearenv fdatasync setnetgrent)
++
++ if test "x$GCC" = "xyes"; then
++ LDFLAGS="-Wl,--as-needed $LDFLAGS"
++diff --git a/src/polkit/polkitidentity.c b/src/polkit/polkitidentity.c
++index 3aa1f7f..10e9c17 100644
++--- a/src/polkit/polkitidentity.c
+++++ b/src/polkit/polkitidentity.c
++@@ -182,7 +182,15 @@ polkit_identity_from_string (const gchar *str,
++ }
++ else if (g_str_has_prefix (str, "unix-netgroup:"))
++ {
+++#ifndef HAVE_SETNETGRENT
+++ g_set_error (error,
+++ POLKIT_ERROR,
+++ POLKIT_ERROR_FAILED,
+++ "Netgroups are not available on this machine ('%s')",
+++ str);
+++#else
++ identity = polkit_unix_netgroup_new (str + sizeof "unix-netgroup:" - 1);
+++#endif
++ }
++
++ if (identity == NULL && (error != NULL && *error == NULL))
++@@ -344,6 +352,13 @@ polkit_identity_new_for_gvariant (GVariant *variant,
++ GVariant *v;
++ const char *name;
++
+++#ifndef HAVE_SETNETGRENT
+++ g_set_error (error,
+++ POLKIT_ERROR,
+++ POLKIT_ERROR_FAILED,
+++ "Netgroups are not available on this machine");
+++ goto out;
+++#else
++ v = lookup_asv (details_gvariant, "name", G_VARIANT_TYPE_STRING, error);
++ if (v == NULL)
++ {
++@@ -353,6 +368,7 @@ polkit_identity_new_for_gvariant (GVariant *variant,
++ name = g_variant_get_string (v, NULL);
++ ret = polkit_unix_netgroup_new (name);
++ g_variant_unref (v);
+++#endif
++ }
++ else
++ {
++diff --git a/src/polkit/polkitunixnetgroup.c b/src/polkit/polkitunixnetgroup.c
++index 8a2b369..83f8d4a 100644
++--- a/src/polkit/polkitunixnetgroup.c
+++++ b/src/polkit/polkitunixnetgroup.c
++@@ -194,6 +194,9 @@ polkit_unix_netgroup_set_name (PolkitUnixNetgroup *group,
++ PolkitIdentity *
++ polkit_unix_netgroup_new (const gchar *name)
++ {
+++#ifndef HAVE_SETNETGRENT
+++ g_assert_not_reached();
+++#endif
++ g_return_val_if_fail (name != NULL, NULL);
++ return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_NETGROUP,
++ "name", name,
++diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c
++index cb6fdab..ab47a98 100644
++--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
+++++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
++@@ -2233,25 +2233,26 @@ get_users_in_net_group (PolkitIdentity *group,
++ GList *ret;
++
++ ret = NULL;
+++#ifdef HAVE_SETNETGRENT
++ name = polkit_unix_netgroup_get_name (POLKIT_UNIX_NETGROUP (group));
++
++-#ifdef HAVE_SETNETGRENT_RETURN
+++# ifdef HAVE_SETNETGRENT_RETURN
++ if (setnetgrent (name) == 0)
++ {
++ g_warning ("Error looking up net group with name %s: %s", name, g_strerror (errno));
++ goto out;
++ }
++-#else
+++# else
++ setnetgrent (name);
++-#endif
+++# endif /* HAVE_SETNETGRENT_RETURN */
++
++ for (;;)
++ {
++-#if defined(HAVE_NETBSD) || defined(HAVE_OPENBSD)
+++# if defined(HAVE_NETBSD) || defined(HAVE_OPENBSD)
++ const char *hostname, *username, *domainname;
++-#else
+++# else
++ char *hostname, *username, *domainname;
++-#endif
+++# endif /* defined(HAVE_NETBSD) || defined(HAVE_OPENBSD) */
++ PolkitIdentity *user;
++ GError *error = NULL;
++
++@@ -2282,6 +2283,7 @@ get_users_in_net_group (PolkitIdentity *group,
++
++ out:
++ endnetgrent ();
+++#endif /* HAVE_SETNETGRENT */
++ return ret;
++ }
++
++diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp
++index 517f3c6..45b0378 100644
++--- a/src/polkitbackend/polkitbackendjsauthority.cpp
+++++ b/src/polkitbackend/polkitbackendjsauthority.cpp
++@@ -1499,6 +1499,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
++
++ JS::CallArgs args = JS::CallArgsFromVp (argc, vp);
++
+++#ifdef HAVE_SETNETGRENT
++ user = JS_EncodeString (cx, args[0].toString());
++ netgroup = JS_EncodeString (cx, args[1].toString());
++
++@@ -1512,6 +1513,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
++
++ JS_free (cx, netgroup);
++ JS_free (cx, user);
+++#endif
++
++ ret = true;
++
++diff --git a/test/polkit/polkitidentitytest.c b/test/polkit/polkitidentitytest.c
++index e91967b..e829aaa 100644
++--- a/test/polkit/polkitidentitytest.c
+++++ b/test/polkit/polkitidentitytest.c
++@@ -19,6 +19,7 @@
++ * Author: Nikki VonHollen <vonhollen@google.com>
++ */
++
+++#include "config.h"
++ #include "glib.h"
++ #include <polkit/polkit.h>
++ #include <polkit/polkitprivate.h>
++@@ -145,11 +146,15 @@ struct ComparisonTestData comparison_test_data [] = {
++ {"unix-group:root", "unix-group:jane", FALSE},
++ {"unix-group:jane", "unix-group:jane", TRUE},
++
+++#ifdef HAVE_SETNETGRENT
++ {"unix-netgroup:foo", "unix-netgroup:foo", TRUE},
++ {"unix-netgroup:foo", "unix-netgroup:bar", FALSE},
+++#endif
++
++ {"unix-user:root", "unix-group:root", FALSE},
+++#ifdef HAVE_SETNETGRENT
++ {"unix-user:jane", "unix-netgroup:foo", FALSE},
+++#endif
++
++ {NULL},
++ };
++@@ -181,11 +186,13 @@ main (int argc, char *argv[])
++ g_test_add_data_func ("/PolkitIdentity/group_string_2", "unix-group:jane", test_string);
++ g_test_add_data_func ("/PolkitIdentity/group_string_3", "unix-group:users", test_string);
++
+++#ifdef HAVE_SETNETGRENT
++ g_test_add_data_func ("/PolkitIdentity/netgroup_string", "unix-netgroup:foo", test_string);
+++ g_test_add_data_func ("/PolkitIdentity/netgroup_gvariant", "unix-netgroup:foo", test_gvariant);
+++#endif
++
++ g_test_add_data_func ("/PolkitIdentity/user_gvariant", "unix-user:root", test_gvariant);
++ g_test_add_data_func ("/PolkitIdentity/group_gvariant", "unix-group:root", test_gvariant);
++- g_test_add_data_func ("/PolkitIdentity/netgroup_gvariant", "unix-netgroup:foo", test_gvariant);
++
++ add_comparison_tests ();
++
++diff --git a/test/polkit/polkitunixnetgrouptest.c b/test/polkit/polkitunixnetgrouptest.c
++index 3701ba1..e3352eb 100644
++--- a/test/polkit/polkitunixnetgrouptest.c
+++++ b/test/polkit/polkitunixnetgrouptest.c
++@@ -19,6 +19,7 @@
++ * Author: Nikki VonHollen <vonhollen@google.com>
++ */
++
+++#include "config.h"
++ #include "glib.h"
++ #include <polkit/polkit.h>
++ #include <string.h>
++@@ -69,7 +70,9 @@ int
++ main (int argc, char *argv[])
++ {
++ g_test_init (&argc, &argv, NULL);
+++#ifdef HAVE_SETNETGRENT
++ g_test_add_func ("/PolkitUnixNetgroup/new", test_new);
++ g_test_add_func ("/PolkitUnixNetgroup/set_name", test_set_name);
+++#endif
++ return g_test_run ();
++ }
++--
++2.17.1
++
+diff --git a/configure.ac b/configure.ac
+index bfa87dd..cb86ac7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -99,7 +99,7 @@ AC_CHECK_LIB(expat,XML_ParserCreate,[EXPAT_LIBS="-lexpat"],
+ [AC_MSG_ERROR([Can't find expat library. Please install expat.])])
+ AC_SUBST(EXPAT_LIBS)
+
+-AC_CHECK_FUNCS(clearenv fdatasync)
++AC_CHECK_FUNCS(clearenv fdatasync setnetgrent)
+
+ if test "x$GCC" = "xyes"; then
+ LDFLAGS="-Wl,--as-needed $LDFLAGS"
+diff --git a/src/polkit/polkitidentity.c b/src/polkit/polkitidentity.c
+index 3aa1f7f..10e9c17 100644
+--- a/src/polkit/polkitidentity.c
++++ b/src/polkit/polkitidentity.c
+@@ -182,7 +182,15 @@ polkit_identity_from_string (const gchar *str,
+ }
+ else if (g_str_has_prefix (str, "unix-netgroup:"))
+ {
++#ifndef HAVE_SETNETGRENT
++ g_set_error (error,
++ POLKIT_ERROR,
++ POLKIT_ERROR_FAILED,
++ "Netgroups are not available on this machine ('%s')",
++ str);
++#else
+ identity = polkit_unix_netgroup_new (str + sizeof "unix-netgroup:" - 1);
++#endif
+ }
+
+ if (identity == NULL && (error != NULL && *error == NULL))
+@@ -344,6 +352,13 @@ polkit_identity_new_for_gvariant (GVariant *variant,
+ GVariant *v;
+ const char *name;
+
++#ifndef HAVE_SETNETGRENT
++ g_set_error (error,
++ POLKIT_ERROR,
++ POLKIT_ERROR_FAILED,
++ "Netgroups are not available on this machine");
++ goto out;
++#else
+ v = lookup_asv (details_gvariant, "name", G_VARIANT_TYPE_STRING, error);
+ if (v == NULL)
+ {
+@@ -353,6 +368,7 @@ polkit_identity_new_for_gvariant (GVariant *variant,
+ name = g_variant_get_string (v, NULL);
+ ret = polkit_unix_netgroup_new (name);
+ g_variant_unref (v);
++#endif
+ }
+ else
+ {
+diff --git a/src/polkit/polkitunixnetgroup.c b/src/polkit/polkitunixnetgroup.c
+index 8a2b369..83f8d4a 100644
+--- a/src/polkit/polkitunixnetgroup.c
++++ b/src/polkit/polkitunixnetgroup.c
+@@ -194,6 +194,9 @@ polkit_unix_netgroup_set_name (PolkitUnixNetgroup *group,
+ PolkitIdentity *
+ polkit_unix_netgroup_new (const gchar *name)
+ {
++#ifndef HAVE_SETNETGRENT
++ g_assert_not_reached();
++#endif
+ g_return_val_if_fail (name != NULL, NULL);
+ return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_NETGROUP,
+ "name", name,
+diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c
+index cb6fdab..ab47a98 100644
+--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
++++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
+@@ -2233,25 +2233,26 @@ get_users_in_net_group (PolkitIdentity *group,
+ GList *ret;
+
+ ret = NULL;
++#ifdef HAVE_SETNETGRENT
+ name = polkit_unix_netgroup_get_name (POLKIT_UNIX_NETGROUP (group));
+
+-#ifdef HAVE_SETNETGRENT_RETURN
++# ifdef HAVE_SETNETGRENT_RETURN
+ if (setnetgrent (name) == 0)
+ {
+ g_warning ("Error looking up net group with name %s: %s", name, g_strerror (errno));
+ goto out;
+ }
+-#else
++# else
+ setnetgrent (name);
+-#endif
++# endif /* HAVE_SETNETGRENT_RETURN */
+
+ for (;;)
+ {
+-#if defined(HAVE_NETBSD) || defined(HAVE_OPENBSD)
++# if defined(HAVE_NETBSD) || defined(HAVE_OPENBSD)
+ const char *hostname, *username, *domainname;
+-#else
++# else
+ char *hostname, *username, *domainname;
+-#endif
++# endif /* defined(HAVE_NETBSD) || defined(HAVE_OPENBSD) */
+ PolkitIdentity *user;
+ GError *error = NULL;
+
+@@ -2282,6 +2283,7 @@ get_users_in_net_group (PolkitIdentity *group,
+
+ out:
+ endnetgrent ();
++#endif /* HAVE_SETNETGRENT */
+ return ret;
+ }
+
+diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp
+index 517f3c6..45b0378 100644
+--- a/src/polkitbackend/polkitbackendjsauthority.cpp
++++ b/src/polkitbackend/polkitbackendjsauthority.cpp
+@@ -1499,6 +1499,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
+
+ JS::CallArgs args = JS::CallArgsFromVp (argc, vp);
+
++#ifdef HAVE_SETNETGRENT
+ user = JS_EncodeString (cx, args[0].toString());
+ netgroup = JS_EncodeString (cx, args[1].toString());
+
+@@ -1512,6 +1513,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
+
+ JS_free (cx, netgroup);
+ JS_free (cx, user);
++#endif
+
+ ret = true;
+
+diff --git a/test/polkit/polkitidentitytest.c b/test/polkit/polkitidentitytest.c
+index e91967b..e829aaa 100644
+--- a/test/polkit/polkitidentitytest.c
++++ b/test/polkit/polkitidentitytest.c
+@@ -19,6 +19,7 @@
+ * Author: Nikki VonHollen <vonhollen@google.com>
+ */
+
++#include "config.h"
+ #include "glib.h"
+ #include <polkit/polkit.h>
+ #include <polkit/polkitprivate.h>
+@@ -145,11 +146,15 @@ struct ComparisonTestData comparison_test_data [] = {
+ {"unix-group:root", "unix-group:jane", FALSE},
+ {"unix-group:jane", "unix-group:jane", TRUE},
+
++#ifdef HAVE_SETNETGRENT
+ {"unix-netgroup:foo", "unix-netgroup:foo", TRUE},
+ {"unix-netgroup:foo", "unix-netgroup:bar", FALSE},
++#endif
+
+ {"unix-user:root", "unix-group:root", FALSE},
++#ifdef HAVE_SETNETGRENT
+ {"unix-user:jane", "unix-netgroup:foo", FALSE},
++#endif
+
+ {NULL},
+ };
+@@ -181,11 +186,13 @@ main (int argc, char *argv[])
+ g_test_add_data_func ("/PolkitIdentity/group_string_2", "unix-group:jane", test_string);
+ g_test_add_data_func ("/PolkitIdentity/group_string_3", "unix-group:users", test_string);
+
++#ifdef HAVE_SETNETGRENT
+ g_test_add_data_func ("/PolkitIdentity/netgroup_string", "unix-netgroup:foo", test_string);
++ g_test_add_data_func ("/PolkitIdentity/netgroup_gvariant", "unix-netgroup:foo", test_gvariant);
++#endif
+
+ g_test_add_data_func ("/PolkitIdentity/user_gvariant", "unix-user:root", test_gvariant);
+ g_test_add_data_func ("/PolkitIdentity/group_gvariant", "unix-group:root", test_gvariant);
+- g_test_add_data_func ("/PolkitIdentity/netgroup_gvariant", "unix-netgroup:foo", test_gvariant);
+
+ add_comparison_tests ();
+
+diff --git a/test/polkit/polkitunixnetgrouptest.c b/test/polkit/polkitunixnetgrouptest.c
+index 3701ba1..e3352eb 100644
+--- a/test/polkit/polkitunixnetgrouptest.c
++++ b/test/polkit/polkitunixnetgrouptest.c
+@@ -19,6 +19,7 @@
+ * Author: Nikki VonHollen <vonhollen@google.com>
+ */
+
++#include "config.h"
+ #include "glib.h"
+ #include <polkit/polkit.h>
+ #include <string.h>
+@@ -69,7 +70,9 @@ int
+ main (int argc, char *argv[])
+ {
+ g_test_init (&argc, &argv, NULL);
++#ifdef HAVE_SETNETGRENT
+ g_test_add_func ("/PolkitUnixNetgroup/new", test_new);
+ g_test_add_func ("/PolkitUnixNetgroup/set_name", test_set_name);
++#endif
+ return g_test_run ();
+ }
+diff --git a/test/polkitbackend/test-polkitbackendjsauthority.c b/test/polkitbackend/test-polkitbackendjsauthority.c
+index b484a26..01e4907 100644
+--- a/test/polkitbackend/test-polkitbackendjsauthority.c
++++ b/test/polkitbackend/test-polkitbackendjsauthority.c
+@@ -137,12 +137,14 @@ test_get_admin_identities (void)
+ "unix-group:users"
+ }
+ },
++#ifdef HAVE_SETNETGRENT
+ {
+ "net.company.action3",
+ {
+ "unix-netgroup:foo"
+ }
+ },
++#endif
+ };
+ guint n;
+
+--
+2.17.1
+