rpms/gnome-screensaver/devel gnome-screensaver-2.16.0-securitytoken.patch, NONE, 1.1 gnome-screensaver.spec, 1.104, 1.105 gnome-screensaver-2.15.6-securitytoken.patch, 1.1, NONE

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Thu Sep 14 06:12:13 UTC 2006


Author: rstrode

Update of /cvs/dist/rpms/gnome-screensaver/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv13941

Modified Files:
	gnome-screensaver.spec 
Added Files:
	gnome-screensaver-2.16.0-securitytoken.patch 
Removed Files:
	gnome-screensaver-2.15.6-securitytoken.patch 
Log Message:
- update security token patch to not poll


gnome-screensaver-2.16.0-securitytoken.patch:
 configure.ac                           |   16 
 src/Makefile.am                        |    1 
 src/cut-n-paste/Makefile.am            |   13 
 src/cut-n-paste/securitytoken.c        |  580 ++++++++++++
 src/cut-n-paste/securitytoken.h        |   91 +
 src/cut-n-paste/securitytokenmonitor.c | 1578 +++++++++++++++++++++++++++++++++
 src/cut-n-paste/securitytokenmonitor.h |   84 +
 src/gs-auth-pam.c                      |    7 
 src/gs-monitor.c                       |  128 ++
 src/gs-window-x11.c                    |    1 
 10 files changed, 2464 insertions(+), 35 deletions(-)

--- NEW FILE gnome-screensaver-2.16.0-securitytoken.patch ---
--- gnome-screensaver-2.16.0/src/gs-monitor.c.securitytoken	2006-08-04 15:36:03.000000000 -0400
+++ gnome-screensaver-2.16.0/src/gs-monitor.c	2006-09-14 02:03:04.000000000 -0400
@@ -41,10 +41,15 @@
 #include "gs-prefs.h"
 #include "gs-debug.h"
 
+#include "securitytokenmonitor.h"
+
 static void     gs_monitor_class_init (GSMonitorClass *klass);
 static void     gs_monitor_init       (GSMonitor      *monitor);
 static void     gs_monitor_finalize   (GObject        *object);
 
+static void     gs_monitor_simulate_user_activity (GSMonitor *monitor);
+static void     gs_monitor_lock_screen (GSMonitor *monitor);
+
 #define GS_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_MONITOR, GSMonitorPrivate))
 
 struct GSMonitorPrivate
@@ -56,6 +61,8 @@
         GSFade         *fade;
         GSGrab         *grab;
 
+	ScSecurityTokenMonitor *security_token_monitor;
+
         guint           release_grab_id;
 };
 
@@ -100,6 +107,29 @@
         gs_listener_emit_auth_request_end (monitor->priv->listener);
 }
 
+static void
+security_token_inserted_cb (ScSecurityTokenMonitor *token_monitor,
+			    ScSecurityToken        *token,
+			    GSMonitor              *monitor)
+{
+	gs_monitor_simulate_user_activity (monitor);
+}
+
+static void
+security_token_removed_cb (ScSecurityTokenMonitor *token_monitor,
+			   ScSecurityToken        *token,
+			   GSMonitor              *monitor)
+{
+	gboolean locking_is_enabled;
+
+	/* FIXME: lame hack
+	 */
+	locking_is_enabled = system ("pkcs11_setup rm_action | grep -q lock") == 0;
+	if (locking_is_enabled &&
+	    sc_security_token_is_login_token (token))
+		gs_monitor_lock_screen (monitor);
+}
+
 static gboolean
 watcher_idle_cb (GSWatcher *watcher,
                  gboolean   is_idle,
@@ -180,37 +210,6 @@
 }
 
 static void
-gs_monitor_lock_screen (GSMonitor *monitor)
-{
-        gboolean res;
-        gboolean locked;
-
-        /* set lock flag before trying to activate screensaver
-           in case something tries to react to the ActiveChanged signal */
-
-        gs_manager_get_lock_active (monitor->priv->manager, &locked);
-        gs_manager_set_lock_active (monitor->priv->manager, TRUE);
-        res = gs_listener_set_active (monitor->priv->listener, TRUE);
-        if (! res) {
-                /* If we've failed then restore lock status */
-                gs_manager_set_lock_active (monitor->priv->manager, locked);
-                gs_debug ("Unable to lock the screen");
-        }
-}
-
-static void
-gs_monitor_simulate_user_activity (GSMonitor *monitor)
-{
-        /* in case the screen isn't blanked reset the
-           idle watcher */
-        gs_watcher_reset (monitor->priv->watcher);
-
-        /* request that the manager unlock -
-           will pop up a dialog if necessary */
-        gs_manager_request_unlock (monitor->priv->manager);
-}
-
-static void
 listener_lock_cb (GSListener *listener,
                   GSMonitor  *monitor)
 {
@@ -390,6 +389,27 @@
 }
 
 static void
+disconnect_security_token_monitor_signals (GSMonitor *monitor)
+{
+        g_signal_handlers_disconnect_by_func (monitor->priv->security_token_monitor,
+					      security_token_removed_cb, monitor);
+
+        g_signal_handlers_disconnect_by_func (monitor->priv->security_token_monitor,
+					      security_token_inserted_cb, monitor);
+}
+
+static void
+connect_security_token_monitor_signals (GSMonitor *monitor)
+{
+	g_signal_connect (monitor->priv->security_token_monitor, 
+			  "security-token-removed",
+			  G_CALLBACK (security_token_removed_cb), monitor);
+	g_signal_connect (monitor->priv->security_token_monitor, 
+			  "security-token-inserted",
+			  G_CALLBACK (security_token_inserted_cb), monitor);
+}
+
+static void
 disconnect_prefs_signals (GSMonitor *monitor)
 {
         g_signal_handlers_disconnect_by_func (monitor->priv->prefs, _gs_monitor_update_from_prefs, monitor);
@@ -423,6 +443,15 @@
         monitor->priv->manager = gs_manager_new ();
         connect_manager_signals (monitor);
 
+	if (g_getenv ("PKCS11_LOGIN_TOKEN_NAME") != NULL) {
+		monitor->priv->security_token_monitor = sc_security_token_monitor_new (NULL);
+		sc_security_token_monitor_start (monitor->priv->security_token_monitor,
+						 NULL);
+		connect_security_token_monitor_signals (monitor);
+	} else {
+		monitor->priv->security_token_monitor = NULL;
+	}
+
         _gs_monitor_update_from_prefs (monitor, monitor->priv->prefs);
 }
 
@@ -438,6 +467,12 @@
 
         g_return_if_fail (monitor->priv != NULL);
 
+	if (monitor->priv->security_token_monitor != NULL) {
+		sc_security_token_monitor_stop (monitor->priv->security_token_monitor);
+		disconnect_security_token_monitor_signals (monitor);
+		g_object_unref (monitor->priv->security_token_monitor);
+	}
+
         disconnect_watcher_signals (monitor);
         disconnect_listener_signals (monitor);
         disconnect_manager_signals (monitor);
@@ -475,3 +510,34 @@
 
         return TRUE;
 }
+
+static void     
+gs_monitor_simulate_user_activity (GSMonitor *monitor)
+{
+        /* in case the screen isn't blanked reset the
+           idle watcher */
+        gs_watcher_reset (monitor->priv->watcher);
+
+        /* request that the manager unlock -
+           will pop up a dialog if necessary */
+        gs_manager_request_unlock (monitor->priv->manager);
+}
+
+static void     
+gs_monitor_lock_screen (GSMonitor *monitor)
+{
+        gboolean res;
+        gboolean locked;
+
+        /* set lock flag before trying to activate screensaver
+           in case something tries to react to the ActiveChanged signal */
+
+        gs_manager_get_lock_active (monitor->priv->manager, &locked);
+        gs_manager_set_lock_active (monitor->priv->manager, TRUE);
+        res = gs_listener_set_active (monitor->priv->listener, TRUE);
+        if (! res) {
+                /* If we've failed then restore lock status */
+                gs_manager_set_lock_active (monitor->priv->manager, locked);
+                gs_debug ("Unable to lock the screen");
+        }
+}
--- gnome-screensaver-2.16.0/src/Makefile.am.securitytoken	2006-08-03 09:53:14.000000000 -0400
+++ gnome-screensaver-2.16.0/src/Makefile.am	2006-09-14 02:03:04.000000000 -0400
@@ -211,6 +211,7 @@
 gnome_screensaver_LDADD =		\
 	$(SAVER_LIBS)			\
 	$(GNOME_SCREENSAVER_LIBS)	\
+	$(top_builddir)/src/cut-n-paste/libsecuritytoken.a \
 	$(NULL)
 
 gnome_screensaver_LDFLAGS = -export-dynamic
--- /dev/null	2006-09-13 20:54:02.327692725 -0400
+++ gnome-screensaver-2.16.0/src/cut-n-paste/securitytokenmonitor.c	2006-09-14 02:03:53.000000000 -0400
[...2237 lines suppressed...]
+
+gchar *sc_security_token_get_name (ScSecurityToken *token);
+gboolean sc_security_token_is_login_token (ScSecurityToken *token);
+
+gboolean sc_security_token_unlock (ScSecurityToken *token,
+				   const gchar     *password);
+
+/* don't under any circumstances call these functions */
+#ifdef SC_SECURITY_TOKEN_ENABLE_INTERNAL_API
+
+ScSecurityToken *_sc_security_token_new (SECMODModule *module,
+					 CK_SLOT_ID slot_id, 
+					 gint slot_series);
+void _sc_security_token_set_state (ScSecurityToken      *token,
+				   ScSecurityTokenState  state);
+#endif 
+
+G_END_DECLS
+#endif				/* SC_SECURITY_TOKEN_H */
--- /dev/null	2006-09-13 20:54:02.327692725 -0400
+++ gnome-screensaver-2.16.0/src/cut-n-paste/securitytokenmonitor.h	2006-09-14 02:03:53.000000000 -0400
@@ -0,0 +1,84 @@
+/* securitytokenmonitor.h - monitor for security token insertion and
+ *                          removal events
+ *
+ * Copyright (C) 2006 Ray Strode
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.  
+ */
+#ifndef SC_SECURITY_TOKEN_MONITOR_H
+#define SC_SECURITY_TOKEN_MONITOR_H
+
+#define SC_SECURITY_TOKEN_ENABLE_INTERNAL_API
+#include "securitytoken.h"
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+#define SC_TYPE_SECURITY_TOKEN_MONITOR            (sc_security_token_monitor_get_type ())
+#define SC_SECURITY_TOKEN_MONITOR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), SC_TYPE_SECURITY_TOKEN_MONITOR, ScSecurityTokenMonitor))
+#define SC_SECURITY_TOKEN_MONITOR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), SC_TYPE_SECURITY_TOKEN_MONITOR, ScSecurityTokenMonitorClass))
+#define SC_IS_SECURITY_TOKEN_MONITOR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SC_TYPE_SECURITY_TOKEN_MONITOR))
+#define SC_IS_SECURITY_TOKEN_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SC_TYPE_SECURITY_TOKEN_MONITOR))
+#define SC_SECURITY_TOKEN_MONITOR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), SC_TYPE_SECURITY_TOKEN_MONITOR, ScSecurityTokenMonitorClass))
+#define SC_SECURITY_TOKEN_MONITOR_ERROR           (sc_security_token_monitor_error_quark ())
+typedef struct _ScSecurityTokenMonitor ScSecurityTokenMonitor;
+typedef struct _ScSecurityTokenMonitorClass ScSecurityTokenMonitorClass;
+typedef struct _ScSecurityTokenMonitorPrivate ScSecurityTokenMonitorPrivate;
+typedef enum _ScSecurityTokenMonitorError ScSecurityTokenMonitorError;
+
+struct _ScSecurityTokenMonitor {
+    GObject parent;
+
+    /*< private > */
+    ScSecurityTokenMonitorPrivate *priv;
+};
+
+struct _ScSecurityTokenMonitorClass {
+    GObjectClass parent_class;
+
+    /* Signals */
+    void (*security_token_inserted) (ScSecurityTokenMonitor *monitor,
+				     ScSecurityToken *token);
+    void (*security_token_removed) (ScSecurityTokenMonitor *monitor,
+				    ScSecurityToken *token);
+    void (*error) (ScSecurityTokenMonitor *monitor, 
+		   GError                 *error);
+};
+
+enum _ScSecurityTokenMonitorError {
+    SC_SECURITY_TOKEN_MONITOR_ERROR_GENERIC = 0,
+    SC_SECURITY_TOKEN_MONITOR_ERROR_WITH_NSS,
+    SC_SECURITY_TOKEN_MONITOR_ERROR_LOADING_DRIVER,
+    SC_SECURITY_TOKEN_MONITOR_ERROR_WATCHING_FOR_EVENTS,
+    SC_SECURITY_TOKEN_MONITOR_ERROR_REPORTING_EVENTS
+};
+
+GType sc_security_token_monitor_get_type (void) G_GNUC_CONST;
+GQuark sc_security_token_monitor_error_quark (void) G_GNUC_CONST;
+
+ScSecurityTokenMonitor *sc_security_token_monitor_new (const gchar *module);
+
+gboolean sc_security_token_monitor_start (ScSecurityTokenMonitor  *monitor, 
+				 	  GError                 **error);
+
+void sc_security_token_monitor_stop (ScSecurityTokenMonitor *monitor);
+
+gchar *sc_security_token_monitor_get_module_path (ScSecurityTokenMonitor *monitor);
+gboolean sc_security_token_monitor_login_token_is_inserted (ScSecurityTokenMonitor *monitor);
+
+G_END_DECLS
+#endif				/* SC_SECURITY_TOKEN_MONITOR_H */
--- gnome-screensaver-2.16.0/src/cut-n-paste/Makefile.am.securitytoken	2005-04-14 15:59:44.000000000 -0400
+++ gnome-screensaver-2.16.0/src/cut-n-paste/Makefile.am	2006-09-14 02:03:04.000000000 -0400
@@ -10,7 +10,18 @@
         Makefile.in
 
 noinst_LIBRARIES =			\
-	libfast-user-switch.a
+	libfast-user-switch.a           \
+	libsecuritytoken.a
+
+libsecuritytoken_a_SOURCES = \
+	securitytoken.h \
+	securitytoken.c \
+	securitytokenmonitor.h \
+	securitytokenmonitor.c
+
+libsecuritytoken_a_CFLAGS = $(SECURITY_TOKEN_CFLAGS) \
+			    -DLIBDIR=\""$(libdir)"\"  \
+			    -DSYSCONFDIR=\""$(sysconfdir)"\"
 
 libfast_user_switch_a_CPPFLAGS =				\
 	-DDATADIR=\""$(datadir)"\"				\
--- gnome-screensaver-2.16.0/src/gs-auth-pam.c.securitytoken	2006-06-08 16:23:40.000000000 -0400
+++ gnome-screensaver-2.16.0/src/gs-auth-pam.c	2006-09-14 02:03:04.000000000 -0400
@@ -207,6 +207,13 @@
                                 reply [replies].resp_retcode = PAM_INCOMPLETE;
                         }
                 }
+
+		/* iterate the glib event loop inbetween processing pam
+		 * messages so that the user interface can be updated
+		 * to reflect changes that are a result of the pam
+		 * messages
+		 */
+		while (g_main_context_iteration (NULL, FALSE));
         }
 
         *resp = reply;
--- gnome-screensaver-2.16.0/src/gs-window-x11.c.securitytoken	2006-08-04 15:20:11.000000000 -0400
+++ gnome-screensaver-2.16.0/src/gs-window-x11.c	2006-09-14 02:03:04.000000000 -0400
@@ -680,6 +680,7 @@
                 "XAUTHLOCALHOSTNAME",
                 "KRB5CCNAME",
                 "KRBTKFILE",
+                "PKCS11_LOGIN_TOKEN_NAME",
                 "LANG",
                 "LANGUAGE",
                 "RUNNING_UNDER_GDM",
--- gnome-screensaver-2.16.0/configure.ac.securitytoken	2006-08-21 19:00:04.000000000 -0400
+++ gnome-screensaver-2.16.0/configure.ac	2006-09-14 02:03:04.000000000 -0400
@@ -43,6 +43,7 @@
 LIBGNOME_MENU_REQUIRED_VERSION=2.11.1
 LIBEXIF_REQUIRED_VERSION=0.6.12
 GLIB_REQUIRED_VERSION=2.7.0
+NSS_REQUIRED_VERSION=3.11.2
 
 AC_CHECK_HEADERS(unistd.h)
 AC_CHECK_HEADERS(crypt.h sys/select.h)
@@ -56,7 +57,8 @@
         gtk+-2.0 >= $GTK_REQUIRED_VERSION
         dbus-glib-1 >= $DBUS_REQUIRED_VERSION
         gconf-2.0 >= $GCONF_REQUIRED_VERSION
-        libgnome-menu >= $LIBGNOME_MENU_REQUIRED_VERSION)
+        libgnome-menu >= $LIBGNOME_MENU_REQUIRED_VERSION
+	nss >= $NSS_REQUIRED_VERSION)
 AC_SUBST(GNOME_SCREENSAVER_CFLAGS)
 AC_SUBST(GNOME_SCREENSAVER_LIBS)
 
@@ -90,8 +92,6 @@
 
 AM_GCONF_SOURCE_2
 
-GNOME_COMPILE_WARNINGS(yes)
-
 # Solaris requires libresolv for daemon()
 case "$host" in
 	*-*-solaris*)
@@ -234,6 +234,16 @@
 AM_CONDITIONAL(HAVE_USER_SWITCHING, test x$enable_user_switching = xyes)
 AC_SUBST(HAVE_USER_SWITCHING)
 
+
+# security token support
+PKG_CHECK_MODULES(SECURITY_TOKEN,
+        gobject-2.0 >= $GLIB_REQUIRED_VERSION
+	nss >= $NSS_REQUIRED_VERSION)
+AC_SUBST(SECURITY_TOKEN_CFLAGS)
+AC_SUBST(SECURITY_TOKEN_LIBS)
+
+
+
 dnl ---------------------------------------------------------------------------
 dnl - Where should we put documentation ?
 dnl ---------------------------------------------------------------------------


Index: gnome-screensaver.spec
===================================================================
RCS file: /cvs/dist/rpms/gnome-screensaver/devel/gnome-screensaver.spec,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -r1.104 -r1.105
--- gnome-screensaver.spec	5 Sep 2006 20:53:36 -0000	1.104
+++ gnome-screensaver.spec	14 Sep 2006 06:12:10 -0000	1.105
@@ -13,14 +13,14 @@
 Summary: GNOME Screensaver
 Name: gnome-screensaver
 Version: 2.16.0
-Release: 2%{?dist} 
+Release: 3%{?dist} 
 License: GPL
 Group: Amusements/Graphics
 Source0: %{name}-%{version}.tar.bz2
 Source1: gnome-screensaver-hide-xscreensaver.menu
 
 Patch1: gnome-screensaver-2.15.4-default-theme.patch
-Patch4: gnome-screensaver-2.15.6-securitytoken.patch
+Patch2: gnome-screensaver-2.16.0-securitytoken.patch
 BuildRoot: %{_tmppath}/%{name}-root
 URL: http://www.gnome.org
 BuildRequires: gtk2-devel => %{gtk2_version}
@@ -61,7 +61,7 @@
 %prep
 %setup -q 
 %patch1 -p1 -b .use-floaters-by-default
-%patch4 -p1 -b .securitytoken
+%patch2 -p1 -b .securitytoken
 
 %build
 autoreconf
@@ -119,6 +119,9 @@
 %{_sysconfdir}/pam.d/*
 
 %changelog
+* Thu Sep 14 2006 Ray Strode <rstrode at redhat.com> - 2.16.0-3.fc6
+- update security token patch to not poll
+
 * Tue Sep 05 2006 Nils Philippsen <nphilipp at redhat.com> - 2.16.0-2.fc6
 - remove xscreensaver migration cruft (preun script and triggers, #204944)
 


--- gnome-screensaver-2.15.6-securitytoken.patch DELETED ---




More information about the fedora-cvs-commits mailing list