* @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.
*
PolkitSubject *caller,
PolkitSubject *subject,
PolkitIdentity *user_for_subject,
+ gboolean subject_is_local,
+ gboolean subject_is_active,
const gchar *action_id,
PolkitDetails *details)
{
caller,
subject,
user_for_subject,
+ subject_is_local,
+ subject_is_active,
action_id,
details);
}
AuthenticationAgentCallback callback,
gpointer user_data)
{
+ PolkitBackendInteractiveAuthorityPrivate *priv = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_GET_PRIVATE (authority);
AuthenticationSession *session;
gchar *cookie;
GList *l;
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
{
#include <polkit/polkitprivate.h>
+#ifdef HAVE_LIBSYSTEMD_LOGIN
#include <systemd/sd-login.h>
+#endif /* HAVE_LIBSYSTEMD_LOGIN */
#include <jsapi.h>
PolkitSubject *caller,
PolkitSubject *subject,
PolkitIdentity *user_for_subject,
+ gboolean subject_is_local,
+ gboolean subject_is_active,
const gchar *action_id,
PolkitDetails *details);
subject_to_jsval (PolkitBackendJsAuthority *authority,
PolkitSubject *subject,
PolkitIdentity *user_for_subject,
+ gboolean subject_is_local,
+ gboolean subject_is_active,
jsval *out_jsval,
GError **error)
{
struct passwd *passwd;
char *seat_str = NULL;
char *session_str = NULL;
- gboolean is_local = FALSE;
- gboolean is_active = FALSE;
src = "new Subject();";
g_assert_not_reached ();
}
+#ifdef HAVE_LIBSYSTEMD_LOGIN
if (sd_pid_get_session (pid, &session_str) == 0)
{
if (sd_session_get_seat (session_str, &seat_str) == 0)
- is_local = TRUE;
- if (sd_session_is_active (session_str))
- is_active = TRUE;
+ {
+ /* do nothing */
+ }
}
+#endif /* HAVE_LIBSYSTEMD_LOGIN */
g_assert (POLKIT_IS_UNIX_USER (user_for_subject));
uid = polkit_unix_user_get_uid (POLKIT_UNIX_USER (user_for_subject));
set_property_strv (authority, obj, "groups", (const gchar* const *) groups->pdata, groups->len);
set_property_str (authority, obj, "seat", seat_str);
set_property_str (authority, obj, "session", session_str);
- set_property_bool (authority, obj, "local", is_local);
- set_property_bool (authority, obj, "active", is_active);
+ set_property_bool (authority, obj, "local", subject_is_local);
+ set_property_bool (authority, obj, "active", subject_is_active);
ret = TRUE;
PolkitSubject *caller,
PolkitSubject *subject,
PolkitIdentity *user_for_subject,
+ gboolean subject_is_local,
+ gboolean subject_is_active,
const gchar *action_id,
PolkitDetails *details)
{
goto out;
}
- if (!subject_to_jsval (authority, subject, user_for_subject, &argv[1], &error))
+ if (!subject_to_jsval (authority,
+ subject,
+ user_for_subject,
+ subject_is_local,
+ subject_is_active,
+ &argv[1],
+ &error))
{
polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
"Error converting subject to JS object: %s",
goto out;
}
- if (!subject_to_jsval (authority, subject, user_for_subject, &argv[1], &error))
+ if (!subject_to_jsval (authority,
+ subject,
+ user_for_subject,
+ subject_is_local,
+ subject_is_active,
+ &argv[1],
+ &error))
{
polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
"Error converting subject to JS object: %s",