static void pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data) { AuthCall *call = user_data; GError *error = NULL; gboolean is_authorized, is_challenge; nm_auth_manager_polkit_authority_check_authorization_finish (NM_AUTH_MANAGER (object), result, &is_authorized, &is_challenge, &error); /* If the call is already canceled do nothing */ if (!call->cancellable) { nm_log_dbg (LOGD_CORE, "callback already cancelled"); g_clear_error (&error); auth_call_free (call); return; } if (error) { nm_log_warn (LOGD_CORE, "error requesting auth for %s: %s", call->permission, error->message); if (!call->chain->error) { call->chain->error = error; error = NULL; } else g_clear_error (&error); } else { guint call_result = NM_AUTH_CALL_RESULT_UNKNOWN; if (is_authorized) { /* Caller has the permission */ call_result = NM_AUTH_CALL_RESULT_YES; } else if (is_challenge) { /* Caller could authenticate to get the permission */ call_result = NM_AUTH_CALL_RESULT_AUTH; } else call_result = NM_AUTH_CALL_RESULT_NO; nm_auth_chain_set_data (call->chain, call->permission, GUINT_TO_POINTER (call_result), NULL); } auth_call_complete (call); }
static void pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data) { AuthCall *call = user_data; PolkitAuthorizationResult *pk_result; GError *error = NULL; pk_result = polkit_authority_check_authorization_finish ((PolkitAuthority *) object, result, &error); /* If the call is already canceled do nothing */ if (!call->cancellable) { g_clear_error (&error); g_clear_object (&pk_result); auth_call_free (call); return; } if (error) { if (!call->chain->error) call->chain->error = g_error_copy (error); nm_log_warn (LOGD_CORE, "error requesting auth for %s: (%d) %s", call->permission, error->code, error->message); g_clear_error (&error); } else { guint call_result = NM_AUTH_CALL_RESULT_UNKNOWN; if (polkit_authorization_result_get_is_authorized (pk_result)) { /* Caller has the permission */ call_result = NM_AUTH_CALL_RESULT_YES; } else if (polkit_authorization_result_get_is_challenge (pk_result)) { /* Caller could authenticate to get the permission */ call_result = NM_AUTH_CALL_RESULT_AUTH; } else call_result = NM_AUTH_CALL_RESULT_NO; nm_auth_chain_set_data (call->chain, call->permission, GUINT_TO_POINTER (call_result), NULL); g_object_unref (pk_result); } auth_call_complete (call); }