From 76792accc8c846059b551dfba91ec3cd24d45d71 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Wed, 23 Feb 2011 16:45:59 -0500 Subject: [PATCH] Allow overriding message shown in authentication dialog This is much easier than writing a PolkitBackendActionLookup class and installing an extension. On the downside it requires the caller to be uid 0. Example: http://people.freedesktop.org/~david/polkit-pass-messages.png Signed-off-by: David Zeuthen --- ...book-interface-org.freedesktop.PolicyKit1.Authority.xml | 13 +++++++++++++ src/polkit/polkitauthority.c | 14 ++++++++++++++ src/polkitbackend/polkitbackendinteractiveauthority.c | 9 +++++++++ 3 files changed, 36 insertions(+) diff --git a/docs/polkit/docbook-interface-org.freedesktop.PolicyKit1.Authority.xml b/docs/polkit/docbook-interface-org.freedesktop.PolicyKit1.Authority.xml index b67225e..ee29c4c 100644 --- a/docs/polkit/docbook-interface-org.freedesktop.PolicyKit1.Authority.xml +++ b/docs/polkit/docbook-interface-org.freedesktop.PolicyKit1.Authority.xml @@ -596,6 +596,19 @@ Identifier for the action that subject is attempting to d Details describing the action. Keys starting with polkit. are reserved for internal use and cannot be used. + + Known keys include polkit.message and + polkit.message.gettext-domain that can be + used to override the message shown to the user (the user might + be running an authentication agent in another locale than the + calling process so that's why both the message and gettext + domain is needed. + + + If non-empty, then the request will fail with + org.freedesktop.PolicyKit1.Error.Failed + unless the process doing the check itsef is sufficiently authorized (e.g. running as uid 0). + diff --git a/src/polkit/polkitauthority.c b/src/polkit/polkitauthority.c index cc24e6c..3dc257f 100644 --- a/src/polkit/polkitauthority.c +++ b/src/polkit/polkitauthority.c @@ -869,6 +869,17 @@ check_authorization_cb (GDBusProxy *proxy, * from. You can then call * polkit_authority_check_authorization_finish() to get the result of * the operation. + * + * Known keys in @details include polkit.message + * and polkit.message.gettext-domain that can be + * used to override the message shown to the user (the user might be + * running an authentication agent in another locale than the calling + * process so that's why both the message and gettext domain is + * needed). + * + * If @details is non-empty then the request will fail with + * #POLKIT_ERROR_FAILED unless the process doing the check itsef is + * sufficiently authorized (e.g. running as uid 0). **/ void polkit_authority_check_authorization (PolkitAuthority *authority, @@ -985,6 +996,9 @@ polkit_authority_check_authorization_finish (PolkitAuthority *authority * operation to complete because it involves waiting for the user to * authenticate. * + * See polkit_authority_check_authorization_sync() for how @details is + * handled. + * * Returns: (transfer full): A #PolkitAuthorizationResult or %NULL if @error is set. Free with g_object_unref(). */ PolkitAuthorizationResult * diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c index 59b2fb7..462f334 100644 --- a/src/polkitbackend/polkitbackendinteractiveauthority.c +++ b/src/polkitbackend/polkitbackendinteractiveauthority.c @@ -1743,6 +1743,7 @@ get_localized_data_for_challenge (PolkitBackendInteractiveAuthority *authority, gchar *message; gchar *icon_name; PolkitDetails *localized_details; + const gchar *message_to_use; priv = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_GET_PRIVATE (authority); @@ -1768,6 +1769,14 @@ get_localized_data_for_challenge (PolkitBackendInteractiveAuthority *authority, } g_setenv ("LANG", locale, TRUE); + message_to_use = polkit_details_lookup (details, "polkit.message"); + if (message_to_use != NULL) + { + const gchar *gettext_domain; + gettext_domain = polkit_details_lookup (details, "polkit.message.gettext-domain"); + message = g_strdup (g_dgettext (gettext_domain, message_to_use)); + } + /* call into extension points to get localized auth dialog data - the list is sorted by priority */ action_lookup_list = get_action_lookup_list (); for (l = action_lookup_list; l != NULL; l = l->next) -- 2.7.4