summaryrefslogtreecommitdiff
path: root/src/polkitbackend/polkitbackendinteractiveauthority.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/polkitbackend/polkitbackendinteractiveauthority.c')
-rw-r--r--src/polkitbackend/polkitbackendinteractiveauthority.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c
index 86e7134..1d4a555 100644
--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
+++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
@@ -1270,6 +1270,8 @@ check_authorization_sync (PolkitBackendAuthority *authority,
* @caller: The subject that is inquiring whether @subject is authorized.
* @subject: The subject we are about to authenticate for.
* @user_for_subject: The user of the subject we are about to authenticate for.
+ * @subject_is_local: %TRUE if the session for @subject is local.
+ * @subject_is_active: %TRUE if the session for @subject is active.
* @action_id: The action we are about to authenticate for.
* @details: Details about the action.
*
@@ -1285,6 +1287,8 @@ polkit_backend_interactive_authority_get_admin_identities (PolkitBackendInteract
PolkitSubject *caller,
PolkitSubject *subject,
PolkitIdentity *user_for_subject,
+ gboolean subject_is_local,
+ gboolean subject_is_active,
const gchar *action_id,
PolkitDetails *details)
{
@@ -1303,6 +1307,8 @@ polkit_backend_interactive_authority_get_admin_identities (PolkitBackendInteract
caller,
subject,
user_for_subject,
+ subject_is_local,
+ subject_is_active,
action_id,
details);
}
@@ -2168,6 +2174,7 @@ authentication_agent_initiate_challenge (AuthenticationAgent *agent,
AuthenticationAgentCallback callback,
gpointer user_data)
{
+ PolkitBackendInteractiveAuthorityPrivate *priv = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_GET_PRIVATE (authority);
AuthenticationSession *session;
gchar *cookie;
GList *l;
@@ -2199,12 +2206,28 @@ authentication_agent_initiate_challenge (AuthenticationAgent *agent,
if (implicit_authorization == POLKIT_IMPLICIT_AUTHORIZATION_ADMINISTRATOR_AUTHENTICATION_REQUIRED ||
implicit_authorization == POLKIT_IMPLICIT_AUTHORIZATION_ADMINISTRATOR_AUTHENTICATION_REQUIRED_RETAINED)
{
+ gboolean is_local = FALSE;
+ gboolean is_active = FALSE;
+ PolkitSubject *session_for_subject = NULL;
+
+ session_for_subject = polkit_backend_session_monitor_get_session_for_subject (priv->session_monitor,
+ subject,
+ NULL);
+ if (session_for_subject != NULL)
+ {
+ is_local = polkit_backend_session_monitor_is_session_local (priv->session_monitor, session_for_subject);
+ is_active = polkit_backend_session_monitor_is_session_active (priv->session_monitor, session_for_subject);
+ }
+
identities = polkit_backend_interactive_authority_get_admin_identities (authority,
caller,
subject,
user_of_subject,
+ is_local,
+ is_active,
action_id,
details);
+ g_clear_object (&session_for_subject);
}
else
{