220 lines
7.0 KiB
Diff
220 lines
7.0 KiB
Diff
|
diff --git a/configure.ac b/configure.ac
|
||
|
index 4809dc9..d1ea325 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -100,7 +100,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..793f17d 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,14 @@ 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 +369,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 056d9a8..36c2f3d 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 1d91103..366cbdf 100644
|
||
|
--- a/src/polkitbackend/polkitbackendjsauthority.cpp
|
||
|
+++ b/src/polkitbackend/polkitbackendjsauthority.cpp
|
||
|
@@ -1519,6 +1519,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
|
||
|
|
||
|
JS::CallArgs args = JS::CallArgsFromVp (argc, vp);
|
||
|
|
||
|
+#ifdef HAVE_SETNETGRENT
|
||
|
JS::RootedString usrstr (authority->priv->cx);
|
||
|
usrstr = args[0].toString();
|
||
|
user = JS_EncodeStringToUTF8 (cx, usrstr);
|
||
|
@@ -1533,6 +1534,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
|
||
|
{
|
||
|
is_in_netgroup = true;
|
||
|
}
|
||
|
+#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 71aad23..fdd28f3 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;
|
||
|
|