summaryrefslogtreecommitdiff
path: root/src/programs/pkttyagent.c
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2012-04-12 13:54:27 -0400
committerDavid Zeuthen <davidz@redhat.com>2012-04-12 14:00:26 -0400
commit2dd284eb425535445f0be6e9dd7d45e8ccd3ffa6 (patch)
tree2df3f5169bde212bb49890e3b145fef3f927f1bd /src/programs/pkttyagent.c
parentbda0fc1de3361fc6f377d041ce2088118048fdf7 (diff)
downloadpolkit-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/pkttyagent.c')
-rw-r--r--src/programs/pkttyagent.c31
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);