Commit 76792acc authored by David Zeuthen's avatar David Zeuthen

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.pngSigned-off-by: default avatarDavid Zeuthen <davidz@redhat.com>
parent f646c328
......@@ -596,6 +596,19 @@ Identifier for the action that <parameter>subject</parameter> is attempting to d
<para>
Details describing the action. Keys starting with <literal>polkit.</literal> are reserved for internal use and cannot be used.
</para>
<para>
Known keys include <literal>polkit.message</literal> and
<literal>polkit.message.gettext-domain</literal> 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.
</para>
<para>
If non-empty, then the request will fail with
<link linkend="eggdbus-constant-Error.org.freedesktop.PolicyKit1.Error.Failed">org.freedesktop.PolicyKit1.Error.Failed</link>
unless the process doing the check itsef is sufficiently authorized (e.g. running as uid 0).
</para>
</listitem>
</varlistentry>
<varlistentry>
......
......@@ -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 <literal>polkit.message</literal>
* and <literal>polkit.message.gettext-domain</literal> 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 *
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment