summaryrefslogtreecommitdiff
path: root/src/polkit/polkitidentity.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/polkit/polkitidentity.c')
-rw-r--r--src/polkit/polkitidentity.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/polkit/polkitidentity.c b/src/polkit/polkitidentity.c
index 21c326b..dd15b2f 100644
--- a/src/polkit/polkitidentity.c
+++ b/src/polkit/polkitidentity.c
@@ -28,6 +28,7 @@
#include "polkitidentity.h"
#include "polkitunixuser.h"
#include "polkitunixgroup.h"
+#include "polkitunixnetgroup.h"
#include "polkiterror.h"
#include "polkitprivate.h"
@@ -177,6 +178,10 @@ polkit_identity_from_string (const gchar *str,
identity = polkit_unix_group_new_for_name (str + sizeof "unix-group:" - 1,
error);
}
+ else if (g_str_has_prefix (str, "unix-netgroup:"))
+ {
+ identity = polkit_unix_netgroup_new (str + sizeof "unix-netgroup:" - 1);
+ }
if (identity == NULL && (error != NULL && *error == NULL))
{
@@ -214,6 +219,12 @@ polkit_identity_to_gvariant (PolkitIdentity *identity)
g_variant_builder_add (&builder, "{sv}", "gid",
g_variant_new_uint32 (polkit_unix_group_get_gid (POLKIT_UNIX_GROUP (identity))));
}
+ else if (POLKIT_IS_UNIX_NETGROUP (identity))
+ {
+ kind = "unix-netgroup";
+ g_variant_builder_add (&builder, "{sv}", "name",
+ g_variant_new_string (polkit_unix_netgroup_get_name (POLKIT_UNIX_NETGROUP (identity))));
+ }
else
{
g_warning ("Unknown class %s implementing PolkitIdentity", g_type_name (G_TYPE_FROM_INSTANCE (identity)));
@@ -326,6 +337,21 @@ polkit_identity_new_for_gvariant (GVariant *variant,
ret = polkit_unix_group_new (gid);
}
+ else if (g_strcmp0 (kind, "unix-netgroup") == 0)
+ {
+ GVariant *v;
+ const char *name;
+
+ v = lookup_asv (details_gvariant, "name", G_VARIANT_TYPE_STRING, error);
+ if (v == NULL)
+ {
+ g_prefix_error (error, "Error parsing net identity: ");
+ goto out;
+ }
+ name = g_variant_get_string (v, NULL);
+ ret = polkit_unix_netgroup_new (name);
+ g_variant_unref (v);
+ }
else
{
g_set_error (error,