diff options
author | David Zeuthen <davidz@redhat.com> | 2012-04-12 13:54:27 -0400 |
---|---|---|
committer | David Zeuthen <davidz@redhat.com> | 2012-04-12 14:00:26 -0400 |
commit | 2dd284eb425535445f0be6e9dd7d45e8ccd3ffa6 (patch) | |
tree | 2df3f5169bde212bb49890e3b145fef3f927f1bd /src/programs | |
parent | bda0fc1de3361fc6f377d041ce2088118048fdf7 (diff) | |
download | polkit-2dd284eb425535445f0be6e9dd7d45e8ccd3ffa6.tar.gz |
Make it possible to influence agent registration with an a{sv} parameter
Additionally, add a "fallback" option. Also add support in this in the
pkttyagent(1) program.
This slightly breaks libpolkit-backend API by adding a GVariant* param
to one of the class vfuncs... but that API is already declared
unstable so that's fine.
Signed-off-by: David Zeuthen <davidz@redhat.com>
Diffstat (limited to 'src/programs')
-rw-r--r-- | src/programs/pkttyagent.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/programs/pkttyagent.c b/src/programs/pkttyagent.c index 1c170f4..488ca8b 100644 --- a/src/programs/pkttyagent.c +++ b/src/programs/pkttyagent.c @@ -52,15 +52,18 @@ main (int argc, char *argv[]) { gboolean opt_show_help = FALSE; gboolean opt_show_version = FALSE; + gboolean opt_fallback = FALSE; PolkitAuthority *authority = NULL; PolkitSubject *subject = NULL; gpointer local_agent_handle = NULL; PolkitAgentListener *listener = NULL; + GVariant *options = NULL; GError *error; GMainLoop *loop = NULL; guint n; guint ret = 126; gint notify_fd = -1; + GVariantBuilder builder; g_type_init (); @@ -74,6 +77,10 @@ main (int argc, char *argv[]) { opt_show_version = TRUE; } + else if (g_strcmp0 (argv[n], "--fallback") == 0) + { + opt_fallback = TRUE; + } else if (g_strcmp0 (argv[n], "--notify-fd") == 0) { n++; @@ -180,6 +187,13 @@ main (int argc, char *argv[]) goto out; } + if (opt_fallback) + { + g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT); + g_variant_builder_add (&builder, "{sv}", "fallback", g_variant_new_boolean (TRUE)); + options = g_variant_builder_end (&builder); + } + error = NULL; /* this will fail if we can't find a controlling terminal */ listener = polkit_agent_text_listener_new (NULL, &error); @@ -191,12 +205,14 @@ main (int argc, char *argv[]) ret = 127; goto out; } - local_agent_handle = polkit_agent_listener_register (listener, - POLKIT_AGENT_REGISTER_FLAGS_RUN_IN_THREAD, - subject, - NULL, /* object_path */ - NULL, /* GCancellable */ - &error); + local_agent_handle = polkit_agent_listener_register_with_options (listener, + POLKIT_AGENT_REGISTER_FLAGS_RUN_IN_THREAD, + subject, + NULL, /* object_path */ + options, + NULL, /* GCancellable */ + &error); + options = NULL; /* consumed */ g_object_unref (listener); if (local_agent_handle == NULL) { @@ -225,6 +241,9 @@ main (int argc, char *argv[]) if (local_agent_handle != NULL) polkit_agent_listener_unregister (local_agent_handle); + if (options != NULL) + g_variant_unref (options); + if (subject != NULL) g_object_unref (subject); |