Author: patrys Date: Sat Sep 26 19:42:06 2009 GMT Module: packages Tag: HEAD ---- Log message: - add missing patch
---- Files affected: packages/gdm: gdm-polkit.patch (1.1 -> 1.2) ---- Diffs: ================================================================ Index: packages/gdm/gdm-polkit.patch diff -u /dev/null packages/gdm/gdm-polkit.patch:1.2 --- /dev/null Sat Sep 26 21:42:06 2009 +++ packages/gdm/gdm-polkit.patch Sat Sep 26 21:42:01 2009 @@ -0,0 +1,318 @@ +From 09153c6825e5b5157fba7600cefabb762d887891 Mon Sep 17 00:00:00 2001 +From: Robert Ancell <[email protected]> +Date: Thu, 6 Aug 2009 15:57:15 +0100 +Subject: [PATCH 1/2] Add PolicyKit support to GDM settings D-Bus interface +Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/395299 +Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=587750 + +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/common/gdm-settings.c gdm-2.27.4.new/common/gdm-settings.c +--- gdm-2.27.4/common/gdm-settings.c 2009-05-19 16:18:12.000000000 +0100 ++++ gdm-2.27.4.new/common/gdm-settings.c 2009-08-07 09:25:34.000000000 +0100 +@@ -36,6 +36,7 @@ + #define DBUS_API_SUBJECT_TO_CHANGE + #include <dbus/dbus-glib.h> + #include <dbus/dbus-glib-lowlevel.h> ++#include <polkit/polkit.h> + + #include "gdm-settings.h" + #include "gdm-settings-glue.h" +@@ -110,6 +111,90 @@ + return res; + } + ++static void ++unlock_auth_cb (PolkitAuthority *authority, ++ GAsyncResult *result, ++ DBusGMethodInvocation *context) ++{ ++ PolkitAuthorizationResult *auth_result; ++ GError *error = NULL; ++ ++ auth_result = polkit_authority_check_authorization_finish (authority, result, &error); ++ ++ if (!auth_result) ++ dbus_g_method_return_error (context, error); ++ else { ++ dbus_g_method_return (context, ++ polkit_authorization_result_get_is_authorized (auth_result)); ++ } ++ ++ if (auth_result) ++ g_object_unref (auth_result); ++ if (error) ++ g_error_free (error); ++} ++ ++gboolean ++gdm_settings_unlock (GdmSettings *settings, ++ DBusGMethodInvocation *context) ++{ ++ polkit_authority_check_authorization (polkit_authority_get (), ++ polkit_system_bus_name_new (dbus_g_method_get_sender (context)), ++ "org.gnome.displaymanager.settings.write", ++ NULL, ++ POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, ++ NULL, ++ (GAsyncReadyCallback) unlock_auth_cb, ++ context); ++} ++ ++typedef struct ++{ ++ GdmSettings *settings; ++ DBusGMethodInvocation *context; ++ gchar *key, *value; ++} SetValueData; ++ ++static void ++set_value_auth_cb (PolkitAuthority *authority, ++ GAsyncResult *result, ++ SetValueData *data) ++{ ++ PolkitAuthorizationResult *auth_result; ++ GError *error = NULL; ++ ++ auth_result = polkit_authority_check_authorization_finish (authority, result, &error); ++ ++ if (!auth_result) ++ dbus_g_method_return_error (data->context, error); ++ else { ++ if (polkit_authorization_result_get_is_authorized (auth_result)) { ++ gboolean result; ++ ++ result = gdm_settings_backend_set_value (data->settings->priv->backend, ++ data->key, ++ data->value, ++ &error); ++ if (result) ++ dbus_g_method_return (data->context); ++ else ++ dbus_g_method_return_error (data->context, error); ++ } ++ else { ++ error = g_error_new (DBUS_GERROR_REMOTE_EXCEPTION, 0, "Not authorized"); ++ dbus_g_method_return_error (data->context, error); ++ } ++ } ++ ++ if (auth_result) ++ g_object_unref (auth_result); ++ if (error) ++ g_error_free (error); ++ g_free (data->key); ++ g_free (data->value); ++ g_free (data); ++} ++ + /* + dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/Settings org.gnome.DisplayManager.Settings.SetValue string:"xdmcp/Enable" string:"false" + */ +@@ -118,26 +203,30 @@ + gdm_settings_set_value (GdmSettings *settings, + const char *key, + const char *value, +- GError **error) ++ DBusGMethodInvocation *context) + { +- GError *local_error; +- gboolean res; +- ++ SetValueData *data; ++ + g_return_val_if_fail (GDM_IS_SETTINGS (settings), FALSE); + g_return_val_if_fail (key != NULL, FALSE); + + g_debug ("Setting value %s", key); +- +- local_error = NULL; +- res = gdm_settings_backend_set_value (settings->priv->backend, +- key, +- value, +- &local_error); +- if (! res) { +- g_propagate_error (error, local_error); +- } +- +- return res; ++ ++ /* Authorize with PolicyKit */ ++ data = g_malloc (sizeof(SetValueData)); ++ data->settings = settings; ++ data->context = context; ++ data->key = g_strdup(key); ++ data->value = g_strdup(value); ++ polkit_authority_check_authorization (polkit_authority_get (), ++ polkit_system_bus_name_new (dbus_g_method_get_sender (context)), ++ "org.gnome.displaymanager.settings.write", ++ NULL, ++ POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, ++ NULL, ++ (GAsyncReadyCallback) set_value_auth_cb, ++ data); ++ return TRUE; + } + + static gboolean +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/common/gdm-settings.h gdm-2.27.4.new/common/gdm-settings.h +--- gdm-2.27.4/common/gdm-settings.h 2009-05-19 16:18:12.000000000 +0100 ++++ gdm-2.27.4.new/common/gdm-settings.h 2009-08-07 09:25:34.000000000 +0100 +@@ -23,6 +23,7 @@ + #define __GDM_SETTINGS_H + + #include <glib-object.h> ++#include <dbus/dbus-glib.h> + + G_BEGIN_DECLS + +@@ -70,10 +71,12 @@ + const char *key, + char **value, + GError **error); ++gboolean gdm_settings_unlock (GdmSettings *settings, ++ DBusGMethodInvocation *context); + gboolean gdm_settings_set_value (GdmSettings *settings, + const char *key, + const char *value, +- GError **error); ++ DBusGMethodInvocation *context); + + G_END_DECLS + +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/common/gdm-settings.xml gdm-2.27.4.new/common/gdm-settings.xml +--- gdm-2.27.4/common/gdm-settings.xml 2009-05-19 16:18:12.000000000 +0100 ++++ gdm-2.27.4.new/common/gdm-settings.xml 2009-08-07 09:25:34.000000000 +0100 +@@ -5,7 +5,12 @@ + <arg name="key" direction="in" type="s"/> + <arg name="value" direction="out" type="s"/> + </method> ++ <method name="Unlock"> ++ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> ++ <arg name="is_unlocked" direction="out" type="b"/> ++ </method> + <method name="SetValue"> ++ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> + <arg name="key" direction="in" type="s"/> + <arg name="value" direction="in" type="s"/> + </method> +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/configure.ac gdm-2.27.4.new/configure.ac +--- gdm-2.27.4/configure.ac 2009-08-07 09:25:33.000000000 +0100 ++++ gdm-2.27.4.new/configure.ac 2009-08-07 09:25:34.000000000 +0100 +@@ -40,6 +40,7 @@ + dnl --------------------------------------------------------------------------- + + DBUS_GLIB_REQUIRED_VERSION=0.74 ++POLKIT_GOBJECT_REQUIRED_VERSION=0.92 + GLIB_REQUIRED_VERSION=2.15.4 + GTK_REQUIRED_VERSION=2.10.0 + PANGO_REQUIRED_VERSION=1.3.0 +@@ -59,6 +60,7 @@ + + PKG_CHECK_MODULES(COMMON, + dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + ) +@@ -67,6 +69,7 @@ + + PKG_CHECK_MODULES(DAEMON, + dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + hal + ) +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/data/gdm.conf.in gdm-2.27.4.new/data/gdm.conf.in +--- gdm-2.27.4/data/gdm.conf.in 2009-07-17 20:38:19.000000000 +0100 ++++ gdm-2.27.4.new/data/gdm.conf.in 2009-08-07 09:25:34.000000000 +0100 +@@ -34,8 +34,6 @@ + <deny send_destination="org.gnome.DisplayManager" + send_interface="org.gnome.DisplayManager.LocalDisplayFactory"/> + <deny send_destination="org.gnome.DisplayManager" +- send_interface="org.gnome.DisplayManager.Settings"/> +- <deny send_destination="org.gnome.DisplayManager" + send_interface="org.gnome.DisplayManager.Slave"/> + <deny send_destination="org.gnome.DisplayManager" + send_interface="org.gnome.DisplayManager.Session"/> +@@ -44,6 +42,10 @@ + <allow send_destination="org.gnome.DisplayManager" + send_interface="org.freedesktop.DBus.Introspectable"/> + ++ <!-- Controlled by PolicyKit --> ++ <allow send_destination="org.gnome.DisplayManager" ++ send_interface="org.gnome.DisplayManager.Settings"/> ++ + <allow send_destination="org.gnome.DisplayManager" + send_interface="org.gnome.DisplayManager.Display" + send_member="GetId"/> +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/data/gdm.policy.in gdm-2.27.4.new/data/gdm.policy.in +--- gdm-2.27.4/data/gdm.policy.in 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.27.4.new/data/gdm.policy.in 2009-08-07 09:25:34.000000000 +0100 +@@ -0,0 +1,18 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<!DOCTYPE policyconfig PUBLIC ++ "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" ++ "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd"> ++<policyconfig> ++ <vendor>The GNOME Project</vendor> ++ <vendor_url>http://www.gnome.org/</vendor_url> ++ <icon_name>gdm</icon_name> ++ ++ <action id="org.gnome.displaymanager.settings.write"> ++ <description>Change login screen configuration</description> ++ <message>Privileges are required to change the login screen configuration.</message> ++ <defaults> ++ <allow_inactive>no</allow_inactive> ++ <allow_active>auth_admin_keep</allow_active> ++ </defaults> ++ </action> ++</policyconfig> +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/data/Makefile.am gdm-2.27.4.new/data/Makefile.am +--- gdm-2.27.4/data/Makefile.am 2009-05-19 16:18:12.000000000 +0100 ++++ gdm-2.27.4.new/data/Makefile.am 2009-08-07 09:25:34.000000000 +0100 +@@ -44,6 +44,8 @@ + schemas_in_files = gdm.schemas.in + schemas_DATA = $(schemas_in_files:.schemas.in=.schemas) + +...@intltool_policy_rule@ ++ + gdm.schemas.in: $(srcdir)/gdm.schemas.in.in + sed -e 's,[...@]gdmprefetchcmd[@],$(GDMPREFETCHCMD),g' \ + -e 's,[...@]gdm_custom_conf[@],$(GDM_CUSTOM_CONF),g' \ +@@ -73,10 +75,17 @@ + -e 's,[...@]sbindir[@],$(sbindir),g' \ + <$(srcdir)/gdm.schemas.in.in >gdm.schemas.in + ++polkitdir = $(datadir)/polkit-1/actions ++polkit_in_files = gdm.policy.in ++polkit_DATA = $(polkit_in_files:.policy.in=.policy) ++check: ++ $(POLKIT_POLICY_FILE_VALIDATE) $(polkit_DATA) ++ + EXTRA_DIST = \ + $(schemas_in_files) \ + $(schemas_DATA) \ + $(dbusconf_in_files) \ ++ $(polkit_in_files) \ + gdm.schemas.in.in \ + gdm.conf-custom.in \ + Xsession.in \ +@@ -99,7 +108,8 @@ + $(NULL) + + DISTCLEANFILES = \ +- $(dbusconf_DATA) \ ++ $(dbusconf_DATA) \ ++ $(polkit_DATA) \ + gdm.schemas \ + $(NULL) + +--- gdm-2.27.4/common/Makefile.am~ 2009-05-19 17:18:12.000000000 +0200 ++++ gdm-2.27.4/common/Makefile.am 2009-08-20 12:17:16.150977333 +0200 +@@ -110,6 +110,7 @@ + $(NULL) + + libgdmcommon_la_LIBADD = \ ++ $(COMMON_LIBS) \ + $(NULL) + + libgdmcommon_la_LDFLAGS = \ ================================================================ ---- CVS-web: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/gdm/gdm-polkit.patch?r1=1.1&r2=1.2&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
