From 6efff0882a712424eeee0d7644b213127b3eded6 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Mon, 20 Aug 2007 19:59:10 -0400 Subject: [PATCH] make polkit-grant(1) work with feature --- tools/polkit-grant.c | 53 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/tools/polkit-grant.c b/tools/polkit-grant.c index 24a2ca7..43e7005 100644 --- a/tools/polkit-grant.c +++ b/tools/polkit-grant.c @@ -71,7 +71,7 @@ conversation_type (PolKitGrant *polkit_grant, PolKitResult auth_type, void *user case POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH: case POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH_KEEP_SESSION: case POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH_KEEP_ALWAYS: - printf ("Authentication as admin is required.\n"); + printf ("Authentication as an administrative user is required.\n"); break; case POLKIT_RESULT_ONLY_VIA_SELF_AUTH: @@ -87,6 +87,25 @@ conversation_type (PolKitGrant *polkit_grant, PolKitResult auth_type, void *user } static char * +conversation_select_admin_user (PolKitGrant *polkit_grant, char **admin_users, void *user_data) +{ + int n; + char *user; + char *lineptr = NULL; + size_t linelen = 0; + + printf ("The following users qualify as administrative users:\n"); + for (n = 0; admin_users[n] != NULL; n++) { + printf ("%s\n", admin_users[n]); + } + printf ("Select user: "); + getline (&lineptr, &linelen, stdin); + user = strdup (lineptr); + free (lineptr); + return user; +} + +static char * conversation_pam_prompt_echo_off (PolKitGrant *polkit_grant, const char *request, void *user_data) { char *lineptr = NULL; @@ -113,6 +132,7 @@ conversation_pam_prompt_echo_off (PolKitGrant *polkit_grant, const char *request result = strdup (lineptr); free (lineptr); + printf ("\n"); return result; } @@ -126,6 +146,7 @@ conversation_pam_prompt_echo_on (PolKitGrant *polkit_grant, const char *request, getline (&lineptr, &linelen, stdin); result = strdup (lineptr); free (lineptr); + printf ("\n"); return result; } @@ -346,6 +367,8 @@ main (int argc, char *argv[]) goto error; } + printf ("Attempting to gain the privilege for %s.\n", action_id); + ud.loop = g_main_loop_new (NULL, TRUE); dbus_error_init (&error); @@ -377,17 +400,18 @@ main (int argc, char *argv[]) polkit_grant = polkit_grant_new (); polkit_grant_set_functions (polkit_grant, - add_io_watch, - add_child_watch, - remove_watch, - conversation_type, - conversation_pam_prompt_echo_off, - conversation_pam_prompt_echo_on, - conversation_pam_error_msg, - conversation_pam_text_info, - conversation_override_grant_type, - conversation_done, - &ud); + add_io_watch, + add_child_watch, + remove_watch, + conversation_type, + conversation_select_admin_user, + conversation_pam_prompt_echo_off, + conversation_pam_prompt_echo_on, + conversation_pam_error_msg, + conversation_pam_text_info, + conversation_override_grant_type, + conversation_done, + &ud); if (!polkit_grant_initiate_auth (polkit_grant, action, @@ -399,7 +423,10 @@ main (int argc, char *argv[]) g_main_loop_run (ud.loop); polkit_grant_unref (polkit_grant); - printf ("Privilege grant done.. result=%d\n", ud.gained_privilege); + if (ud.gained_privilege) + printf ("Successfully gained the privilege for %s.\n", action_id); + else + printf ("Failed to gain the privilege for %s.\n", action_id); ret = ud.gained_privilege ? 0 : 1; -- 2.7.4