packages: gdm/gdm-polkit.patch - add missing patch

patrys patrys at pld-linux.org
Sat Sep 26 21:42:06 CEST 2009


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 <robert.ancell at ubuntu.com>
+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)
+ 
++ at 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



More information about the pld-cvs-commit mailing list