--- a/patches/xscreensaver-06-gtk-lock.diff Thu May 27 05:18:04 2010 +0000
+++ b/patches/xscreensaver-06-gtk-lock.diff Thu May 27 07:20:44 2010 +0000
@@ -262,22 +262,11 @@
$(SAVER_UTIL_OBJS)
test-passwd.o: XScreenSaver_ad.h
-diff --git xscreensaver-5.11/driver/dpms.c xscreensaver-5.11/driver/dpms.c
---- xscreensaver-5.11/driver/dpms.c
-+++ xscreensaver-5.11/driver/dpms.c
-@@ -50,6 +50,7 @@
-
- #include <stdio.h>
- #include <X11/Xlib.h>
-+# include <X11/Intrinsic.h>
-
- #ifdef HAVE_DPMS_EXTENSION /* almost the whole file */
-
diff --git xscreensaver-5.11/driver/lock-Gtk.c xscreensaver-5.11/driver/lock-Gtk.c
new file mode 100644
--- /dev/null
+++ xscreensaver-5.11/driver/lock-Gtk.c
-@@ -0,0 +1,1294 @@
+@@ -0,0 +1,1296 @@
+/* lock-Gtk.c -- a GTK+ password dialog for xscreensaver
+ * xscreensaver, Copyright (c) 1993-1998 Jamie Zawinski <[email protected]>
+ *
@@ -406,10 +395,11 @@
+
+ g_return_val_if_fail (s != NULL, -1);
+
-+ do_write:
-+ len = write (FD_TO_PARENT, s, strlen (s));
-+ if (len < 0 && errno == EINTR)
-+ goto do_write;
++ do
++ {
++ len = write (FD_TO_PARENT, s, strlen (s));
++ }
++ while (len < 0 && errno == EINTR);
+
+ return len;
+}
@@ -1137,10 +1127,11 @@
+ if (cond & G_IO_HUP) /* daemon crashed/exited/was killed */
+ gtk_main_quit();
+
-+ read_line:
-+ status = g_io_channel_read_line (source, &str, NULL, NULL, NULL);
-+ if (status == G_IO_STATUS_AGAIN)
-+ goto read_line;
++ do
++ {
++ status = g_io_channel_read_line (source, &str, NULL, NULL, NULL);
++ }
++ while (status == G_IO_STATUS_AGAIN);
+
+/* debug only
+ if (status == G_IO_STATUS_ERROR)
@@ -1707,7 +1698,7 @@
static void undo_vp_motion (saver_info *si);
static void finished_typing_passwd (saver_info *si, passwd_dialog_data *pw);
static void cleanup_passwd_window (saver_info *si);
-@@ -179,6 +107,425 @@ static void restore_background (saver_info *si);
+@@ -179,6 +107,427 @@ static void restore_background (saver_info *si);
extern void xss_authenticate(saver_info *si, Bool verbose_p);
@@ -1832,10 +1823,11 @@
+ fprintf (stderr, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
+ }
+
-+ write_msg:
-+ len = write (si->pw_data->stdin_fd, nlmsg, strlen (nlmsg));
-+ if (len < 0 && errno == EINTR)
-+ goto write_msg;
++ do
++ {
++ len = write (si->pw_data->stdin_fd, nlmsg, strlen (nlmsg));
++ }
++ while (len < 0 && errno == EINTR);
+
+ free (nlmsg);
+ return (1);
@@ -1848,10 +1840,11 @@
+{
+ int ret;
+
-+ retry:
-+ ret = dup2 (fd1, fd2);
-+ if (ret < 0 && errno == EINTR)
-+ goto retry;
++ do
++ {
++ ret = dup2 (fd1, fd2);
++ }
++ while (ret < 0 && errno == EINTR);
+
+ return ret;
+}
@@ -2133,7 +2126,7 @@
static int
new_passwd_window (saver_info *si)
{
-@@ -413,7 +760,7 @@ new_passwd_window (saver_info *si)
+@@ -413,7 +762,7 @@ new_passwd_window (saver_info *si)
/**
* info_msg and prompt may be NULL.
*/
@@ -2142,7 +2135,7 @@
make_passwd_window (saver_info *si,
const char *info_msg,
const char *prompt,
-@@ -427,6 +774,23 @@ make_passwd_window (saver_info *si,
+@@ -427,6 +776,23 @@ make_passwd_window (saver_info *si,
Dimension max_string_width_px;
saver_screen_info *ssi = &si->screens [mouse_screen (si)];
@@ -2166,7 +2159,7 @@
cleanup_passwd_window (si);
if (! ssi) /* WTF? Trying to prompt while no screens connected? */
-@@ -1033,7 +1397,7 @@ draw_button(Display *dpy,
+@@ -1033,7 +1399,7 @@ draw_button(Display *dpy,
shadow_width, shadow_light, shadow_dark);
}
@@ -2175,7 +2168,7 @@
update_passwd_window (saver_info *si, const char *printed_passwd, float ratio)
{
passwd_dialog_data *pw = si->pw_data;
-@@ -1043,8 +1407,20 @@ update_passwd_window (saver_info *si, const char *printed_passwd, float ratio)
+@@ -1043,8 +1409,20 @@ update_passwd_window (saver_info *si, const char *printed_passwd, float ratio)
XRectangle rects[1];
pw->ratio = ratio;
@@ -2197,7 +2190,7 @@
gc1 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground|GCFont, &gcv);
gcv.foreground = pw->passwd_background;
gc2 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground, &gcv);
-@@ -1052,7 +1428,12 @@ update_passwd_window (saver_info *si, const char *printed_passwd, float ratio)
+@@ -1052,7 +1430,12 @@ update_passwd_window (saver_info *si, const char *printed_passwd, float ratio)
if (printed_passwd)
{
char *s = strdup (printed_passwd);
@@ -2211,7 +2204,7 @@
pw->passwd_string = s;
}
-@@ -1215,9 +1596,15 @@ cleanup_passwd_window (saver_info *si)
+@@ -1215,9 +1598,15 @@ cleanup_passwd_window (saver_info *si)
{
passwd_dialog_data *pw;
@@ -2227,7 +2220,7 @@
if (pw->info_label)
{
mlstring_free(pw->info_label);
-@@ -1231,7 +1618,10 @@ cleanup_passwd_window (saver_info *si)
+@@ -1231,7 +1620,10 @@ cleanup_passwd_window (saver_info *si)
}
memset (pw->typed_passwd, 0, sizeof(pw->typed_passwd));
@@ -2239,7 +2232,7 @@
if (pw->timer)
{
-@@ -1246,20 +1636,38 @@ cleanup_passwd_window (saver_info *si)
+@@ -1246,20 +1638,38 @@ cleanup_passwd_window (saver_info *si)
}
}
@@ -2283,7 +2276,7 @@
if (si->cached_passwd)
{
char *wipe = si->cached_passwd;
-@@ -1271,6 +1679,54 @@ destroy_passwd_window (saver_info *si)
+@@ -1271,6 +1681,54 @@ destroy_passwd_window (saver_info *si)
si->cached_passwd = NULL;
}
@@ -2338,7 +2331,7 @@
move_mouse_grab (si, RootWindowOfScreen (ssi->screen),
ssi->cursor, ssi->number);
-@@ -1363,20 +1819,18 @@ destroy_passwd_window (saver_info *si)
+@@ -1363,20 +1821,18 @@ destroy_passwd_window (saver_info *si)
if (cmap)
XInstallColormap (si->dpy, cmap);
@@ -2369,7 +2362,7 @@
}
-@@ -1580,6 +2034,18 @@ passwd_animate_timer (XtPointer closure, XtIntervalId *id)
+@@ -1580,6 +2036,18 @@ passwd_animate_timer (XtPointer closure, XtIntervalId *id)
if (!pw) return;
@@ -2388,7 +2381,7 @@
pw->ratio -= (1.0 / ((double) si->prefs.passwd_timeout / (double) tick));
if (pw->ratio < 0)
{
-@@ -1588,7 +2054,41 @@ passwd_animate_timer (XtPointer closure, XtIntervalId *id)
+@@ -1588,7 +2056,41 @@ passwd_animate_timer (XtPointer closure, XtIntervalId *id)
si->unlock_state = ul_time;
}
@@ -2430,7 +2423,7 @@
if (si->unlock_state == ul_read)
pw->timer = XtAppAddTimeOut (si->app, tick, passwd_animate_timer,
-@@ -1770,18 +2270,62 @@ handle_passwd_key (saver_info *si, XKeyEvent *event)
+@@ -1770,18 +2272,62 @@ handle_passwd_key (saver_info *si, XKeyEvent *event)
}
@@ -2495,7 +2488,7 @@
if (event.xany.window == si->passwd_dialog && event.xany.type == Expose)
draw_passwd_window (si);
else if (event.xany.type == KeyPress)
-@@ -1797,8 +2341,143 @@ passwd_event_loop (saver_info *si)
+@@ -1797,8 +2343,143 @@ passwd_event_loop (saver_info *si)
if (si->pw_data->login_button_p)
handle_login_button (si, &event);
}
@@ -2640,7 +2633,7 @@
}
switch (si->unlock_state)
-@@ -1822,9 +2501,16 @@ passwd_event_loop (saver_info *si)
+@@ -1822,9 +2503,16 @@ passwd_event_loop (saver_info *si)
if (msg)
{
@@ -2659,7 +2652,7 @@
/* Swallow all pending KeyPress/KeyRelease events. */
{
-@@ -1836,7 +2522,7 @@ passwd_event_loop (saver_info *si)
+@@ -1836,7 +2524,7 @@ passwd_event_loop (saver_info *si)
}
@@ -2668,7 +2661,7 @@
handle_typeahead (saver_info *si)
{
passwd_dialog_data *pw = si->pw_data;
-@@ -1855,7 +2541,13 @@ handle_typeahead (saver_info *si)
+@@ -1855,7 +2543,13 @@ handle_typeahead (saver_info *si)
memset (si->unlock_typeahead, '*', strlen(si->unlock_typeahead));
si->unlock_typeahead[i] = 0;
@@ -2705,7 +2698,7 @@
diff --git xscreensaver-5.11/driver/passwd-pam.c xscreensaver-5.11/driver/passwd-pam.c
--- xscreensaver-5.11/driver/passwd-pam.c
+++ xscreensaver-5.11/driver/passwd-pam.c
-@@ -39,11 +39,17 @@
+@@ -39,10 +39,16 @@
#ifndef NO_LOCKING /* whole file */
#include <stdlib.h>
@@ -2715,15 +2708,13 @@
# include <unistd.h>
#endif
--extern char *blurb(void);
+#ifdef __sun
+# include <deflt.h>
+#endif
+
-+/*extern char *blurb(void);*/
+ extern char *blurb(void);
- #include <stdio.h>
@@ -58,8 +64,16 @@ extern char *blurb(void);
#include <sys/stat.h>
@@ -3248,15 +3239,7 @@
diff --git xscreensaver-5.11/driver/setuid.c xscreensaver-5.11/driver/setuid.c
--- xscreensaver-5.11/driver/setuid.c
+++ xscreensaver-5.11/driver/setuid.c
-@@ -15,6 +15,7 @@
- #endif
-
- #include <X11/Xlib.h> /* not used for much... */
-+#include <X11/Intrinsic.h> /* not used for much... */
-
- /* This file doesn't need the Xt headers, so stub these types out... */
- #undef XtPointer
-@@ -145,7 +146,10 @@ set_ids_by_number (uid_t uid, gid_t gid, char **message_ret)
+@@ -145,7 +145,10 @@ set_ids_by_number (uid_t uid, gid_t gid, char **message_ret)
gid_errno = errno ? errno : -1;
errno = 0;
@@ -3478,15 +3461,7 @@
diff --git xscreensaver-5.11/driver/windows.c xscreensaver-5.11/driver/windows.c
--- xscreensaver-5.11/driver/windows.c
+++ xscreensaver-5.11/driver/windows.c
-@@ -35,6 +35,7 @@
- #include <X11/Xutil.h> /* for XSetClassHint() */
- #include <X11/Xatom.h>
- #include <X11/Xos.h> /* for time() */
-+#include <X11/Intrinsic.h>
- #include <signal.h> /* for the signal names */
- #include <time.h>
- #include <sys/time.h>
-@@ -1212,6 +1213,7 @@ initialize_screensaver_window_1 (saver_screen_info *ssi)
+@@ -1212,6 +1212,7 @@ initialize_screensaver_window_1 (saver_screen_info *ssi)
*/
attrs.event_mask = (KeyPressMask | KeyReleaseMask |
ButtonPressMask | ButtonReleaseMask |
@@ -3494,7 +3469,7 @@
PointerMotionMask);
attrs.backing_store = NotUseful;
-@@ -1483,6 +1485,9 @@ raise_window (saver_info *si,
+@@ -1483,6 +1484,9 @@ raise_window (saver_info *si,
saver_preferences *p = &si->prefs;
int i;
@@ -3504,7 +3479,7 @@
if (si->demoing_p)
inhibit_fade = True;
-@@ -1697,6 +1702,9 @@ unblank_screen (saver_info *si)
+@@ -1697,6 +1701,9 @@ unblank_screen (saver_info *si)
Bool unfade_p = (si->fading_possible_p && p->unfade_p);
int i;
@@ -3767,17 +3742,6 @@
if (si->lock_id) /* we're doing it now, so lose the timeout */
{
XtRemoveTimeOut (si->lock_id);
-diff --git xscreensaver-5.11/driver/xset.c xscreensaver-5.11/driver/xset.c
---- xscreensaver-5.11/driver/xset.c
-+++ xscreensaver-5.11/driver/xset.c
-@@ -19,6 +19,7 @@
- #include <X11/Xutil.h>
- #include <X11/Xatom.h>
- #include <X11/Xos.h>
-+#include <X11/Intrinsic.h>
-
- /* This file doesn't need the Xt headers, so stub these types out... */
- #undef XtPointer
diff --git xscreensaver-5.11/driver/types.h xscreensaver-5.11/driver/types.h
--- xscreensaver-5.11/driver/types.h
+++ xscreensaver-5.11/driver/types.h
--- a/patches/xscreensaver-13-trusted.diff Thu May 27 05:18:04 2010 +0000
+++ b/patches/xscreensaver-13-trusted.diff Thu May 27 07:20:44 2010 +0000
@@ -91,24 +91,16 @@
+#include <user_attr.h>
+
++#include "trusted-utils.h"
+void XTSOLgetWorkstationOwner(Display *, uid_t *);
-+char *getusrattrval(userattr_t *, char *);
-+gboolean tsol_is_multi_label_session (void);
+static gboolean tsol_hack_initialized = False;
+static gboolean tsol_multi_label_session = False;
++extern Display *global_dpy;
+
#ifdef HAVE_GTK2
enum {
COL_ENABLED,
-@@ -153,6 +161,7 @@ static void hack_subproc_environment (Window preview_window_id, Bool debug_p);
- #undef countof
- #define countof(x) (sizeof((x))/sizeof((*x)))
-
-+extern Display *global_dpy;
-
- /* You might think that to read an array of 32-bit quantities out of a
- server-side property, you would pass an array of 32-bit data quantities
-@@ -916,6 +925,9 @@ doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+@@ -916,6 +924,9 @@ doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
" 'export SHELL=\"/dev/null\"; "
" /usr/bin/man xscreensaver || /usr/bin/read foo' &";
@@ -118,7 +110,7 @@
if (system (sun_help_command) < 0)
fprintf (stderr, "%s: fork error\n", blurb());
-@@ -2889,9 +2901,69 @@ populate_prefs_page (state *s)
+@@ -2889,9 +2900,69 @@ populate_prefs_page (state *s)
SENSITIZE ("pwd_spinbutton", p->pwd_p);
SENSITIZE ("pwd_mlabel", p->pwd_p);
@@ -188,7 +180,7 @@
/* DPMS
*/
-@@ -2921,6 +2993,7 @@ populate_prefs_page (state *s)
+@@ -2921,6 +2992,7 @@ populate_prefs_page (state *s)
# undef SENSITIZE
}
@@ -196,7 +188,7 @@
}
-@@ -3006,6 +3079,9 @@ sensitize_menu_items (state *s, Bool force_p)
+@@ -3006,6 +3078,9 @@ sensitize_menu_items (state *s, Bool force_p)
for (i = 0; i < countof(names); i++)
{
@@ -206,7 +198,7 @@
GtkWidget *w = name_to_widget (s, names[i]);
gtk_widget_set_sensitive (GTK_WIDGET(w), running_p);
}
-@@ -4984,7 +5060,7 @@ main (int argc, char **argv)
+@@ -4984,7 +5059,7 @@ main (int argc, char **argv)
applicationShellWidgetClass,
dpy, 0, 0);
@@ -226,7 +218,7 @@
/* AT-enabled */
void write_null(int n);
-@@ -173,7 +174,10 @@ load_unlock_logo_image(void)
+@@ -174,7 +175,10 @@ load_unlock_logo_image(void)
const char *logofile;
struct stat statbuf;
@@ -241,41 +233,26 @@
diff --git xscreensaver-5.11/driver/prefs.c xscreensaver-5.11/driver/prefs.c
--- xscreensaver-5.11/driver/prefs.c
+++ xscreensaver-5.11/driver/prefs.c
-@@ -37,6 +37,7 @@
+@@ -37,6 +37,8 @@
# include "vms-pwd.h"
#endif /* VMS */
++#include "trusted-utils.h"
+#include <user_attr.h>
/* This file doesn't need the Xt headers, so stub these types out... */
#undef XtPointer
-@@ -66,6 +67,7 @@
-
+@@ -67,6 +69,9 @@
#include "prefs.h"
#include "resources.h"
+
+#include "trusted-utils.h"
-
++Display *global_dpy;
++
/* don't use realpath() on fedora system */
#ifdef _FORTIFY_SOURCE
-@@ -77,6 +79,7 @@ extern char *progname;
- extern char *progclass;
- extern const char *blurb (void);
-
-+Display *global_dpy;
-
-
- static void get_screenhacks (Display *, saver_preferences *);
-@@ -1011,6 +1014,9 @@ free_screenhack_list (screenhack **list, int count)
- free (list);
- }
-
-+void XTSOLgetWorkstationOwner(Display *, uid_t *);
-+char *getusrattrval(userattr_t *, char *);
-+int tsol_is_multi_label_session (void);
-
-
- /* Populate `saver_preferences' with the contents of the resource database.
-@@ -1051,7 +1057,10 @@ load_init_file (Display *dpy, saver_preferences *p)
+ #undef HAVE_REALPATH
+@@ -1051,7 +1056,10 @@ load_init_file (Display *dpy, saver_preferences *p)
p->xsync_p = get_boolean_resource (dpy, "synchronous", "Synchronous");
p->verbose_p = get_boolean_resource (dpy, "verbose", "Boolean");
p->timestamp_p = get_boolean_resource (dpy, "timestamp", "Boolean");
@@ -287,7 +264,7 @@
p->fade_p = get_boolean_resource (dpy, "fade", "Boolean");
p->unfade_p = get_boolean_resource (dpy, "unfade", "Boolean");
p->fade_seconds = 1000 * get_seconds_resource (dpy, "fadeSeconds", "Time");
-@@ -1075,6 +1084,27 @@ load_init_file (Display *dpy, saver_preferences *p)
+@@ -1075,6 +1083,27 @@ load_init_file (Display *dpy, saver_preferences *p)
p->lock_timeout = 1000 * get_minutes_resource (dpy, "lockTimeout", "Time");
p->cycle = 1000 * get_minutes_resource (dpy, "cycle", "Time");
p->passwd_timeout = 1000 * get_seconds_resource (dpy, "passwdTimeout", "Time");
@@ -315,18 +292,6 @@
/* *bugid 5077981 pwd timeout */
p->pwd_p = get_boolean_resource (dpy, "passwdTimeoutEnabled", "Boolean");
p->pointer_timeout = 1000 * get_seconds_resource (dpy, "pointerPollTime", "Time");
-diff --git xscreensaver-5.11/driver/types.h xscreensaver-5.11/driver/types.h
---- xscreensaver-5.11/driver/types.h
-+++ xscreensaver-5.11/driver/types.h
-@@ -105,6 +105,8 @@ struct saver_preferences {
- Time initial_delay; /* how long to sleep after launch */
- Time splash_duration; /* how long the splash screen stays up */
- Time timeout; /* how much idle time before activation */
-+ int lock_cmd; /* tsol only - whether to lock or logout */
-+
- Time lock_timeout; /* how long after activation locking starts */
- Time cycle; /* how long each hack should run */
- Time passwd_timeout; /* how much time before pw dialog goes down */
diff --git xscreensaver-5.11/driver/subprocs.c xscreensaver-5.11/driver/subprocs.c
--- xscreensaver-5.11/driver/subprocs.c
+++ xscreensaver-5.11/driver/subprocs.c
@@ -587,6 +552,18 @@
+ LOGOUT_CMD
+};
+#endif /* TRUSTED_XSCREENSAVER_H */
+diff --git xscreensaver-5.11/driver/types.h xscreensaver-5.11/driver/types.h
+--- xscreensaver-5.11/driver/types.h
++++ xscreensaver-5.11/driver/types.h
+@@ -105,6 +105,8 @@ struct saver_preferences {
+ Time initial_delay; /* how long to sleep after launch */
+ Time splash_duration; /* how long the splash screen stays up */
+ Time timeout; /* how much idle time before activation */
++ int lock_cmd; /* tsol only - whether to lock or logout */
++
+ Time lock_timeout; /* how long after activation locking starts */
+ Time cycle; /* how long each hack should run */
+ Time passwd_timeout; /* how much time before pw dialog goes down */
diff --git xscreensaver-5.11/driver/xscreensaver-getimage.c xscreensaver-5.11/driver/xscreensaver-getimage.c
--- xscreensaver-5.11/driver/xscreensaver-getimage.c
+++ xscreensaver-5.11/driver/xscreensaver-getimage.c
@@ -618,15 +595,17 @@
#include <X11/Xlib.h>
#include <locale.h>
-@@ -240,6 +241,7 @@ passwd_dialog_data *ptr_mygtkpwd = &mygtkpwd;
- char *progname = 0;
- char *progclass = 0;
- XrmDatabase db = 0;
+@@ -224,6 +225,9 @@
+ #include "usleep.h"
+ #include "auth.h"
+
++#include "trusted-utils.h"
+extern Display *global_dpy;
-
++
+ saver_info *global_si_kludge = 0; /* I hate C so much... */
- static Atom XA_SCREENSAVER_RESPONSE;
-@@ -1447,6 +1449,9 @@ main (int argc, char **argv)
+ /* Globals */
+@@ -1447,6 +1451,9 @@ main (int argc, char **argv)
struct passwd *spasswd;
int i;
@@ -636,7 +615,7 @@
#ifdef ENABLE_NLS
if (!setlocale (LC_ALL, ""))
fprintf (stderr, "locale not supported by C library\n");
-@@ -1489,6 +1494,7 @@ main (int argc, char **argv)
+@@ -1489,6 +1496,7 @@ main (int argc, char **argv)
# endif /* !NO_LOCKING */
shell = connect_to_server (si, &argc, argv);