--- a/patches/gnome-desktop-03-trusted-extensions.diff Wed Sep 19 19:40:54 2007 +0000
+++ b/patches/gnome-desktop-03-trusted-extensions.diff Wed Sep 19 21:44:48 2007 +0000
@@ -1,6 +1,6 @@
-diff -urN gnome-desktop-2.20.0/configure.in ../SUNWgnome-panel-2.20.0.hacked/gnome-desktop-2.20.0/configure.in
---- gnome-desktop-2.20.0/configure.in 2006-12-04 17:22:29.361309000 +0000
-+++ ../SUNWgnome-panel-2.20.0.hacked/gnome-desktop-2.20.0/configure.in 2006-12-04 18:48:47.899545000 +0000
+diff -urN -x '*~' -x '*.rej*' gnome-desktop.orig/configure.in gnome-desktop.new/configure.in
+--- gnome-desktop.orig/configure.in 2007-09-19 21:47:26.581190000 +0100
++++ gnome-desktop.new/configure.in 2007-09-19 21:47:50.176721000 +0100
@@ -113,6 +113,23 @@
PKG_CHECK_MODULES(GNOME_DESKTOP, libxml-2.0 >= $LIBXML_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gconf-2.0 >= $GCONF_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED $STARTUP_NOTIFICATION_PACKAGE)
@@ -25,11 +25,10 @@
PKG_CHECK_MODULES(GNOME_ABOUT, libxml-2.0 >= $LIBXML_REQUIRED gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libgnomecanvas-2.0 >= $LIBGNOMECANVAS_REQUIRED)
dnl gnome-doc-utils stuff
-XXX
-diff -urN gnome-desktop-2.17.2/libgnome-desktop/Makefile.am ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/libgnome-desktop/Makefile.am
---- gnome-desktop-2.17.2/libgnome-desktop/Makefile.am 2006-06-04 11:53:09.000000000 +0000
-+++ ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/libgnome-desktop/Makefile.am 2006-12-04 16:31:30.993343000 +0000
-@@ -19,6 +19,7 @@
+diff -urN -x '*~' -x '*.rej*' gnome-desktop.orig/libgnome-desktop/Makefile.am gnome-desktop.new/libgnome-desktop/Makefile.am
+--- gnome-desktop.orig/libgnome-desktop/Makefile.am 2007-09-19 21:47:26.559771000 +0100
++++ gnome-desktop.new/libgnome-desktop/Makefile.am 2007-09-19 21:47:50.177122000 +0100
+@@ -17,6 +17,7 @@
libgnome_desktop_2_la_SOURCES = \
gnome-desktop-item.c \
@@ -37,9 +36,9 @@
gnome-ditem-edit.c \
gnome-hint.c
-diff -urN gnome-desktop-2.17.5/libgnome-desktop/gnome-desktop-item.c ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.5/libgnome-desktop/gnome-desktop-item.c
---- gnome-desktop-2.17.5/libgnome-desktop/gnome-desktop-item.c 2006-08-05 11:59:08.000000000 +0000
-+++ ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.5/libgnome-desktop/gnome-desktop-item.c 2006-12-04 16:31:30.995647000 +0000
+diff -urN -x '*~' -x '*.rej*' gnome-desktop.orig/libgnome-desktop/gnome-desktop-item.c gnome-desktop.new/libgnome-desktop/gnome-desktop-item.c
+--- gnome-desktop.orig/libgnome-desktop/gnome-desktop-item.c 2007-09-19 21:47:26.560600000 +0100
++++ gnome-desktop.new/libgnome-desktop/gnome-desktop-item.c 2007-09-19 21:49:03.527373000 +0100
@@ -44,6 +44,7 @@
#include <libgnome/gnome-url.h>
#include <locale.h>
@@ -56,7 +55,7 @@
struct _GnomeDesktopItem {
int refcount;
-@@ -1747,6 +1749,7 @@
+@@ -1755,6 +1757,7 @@
char *new_exec, *uris, *temp;
char *exec_locale;
int launched = 0;
@@ -64,13 +63,14 @@
#ifdef HAVE_STARTUP_NOTIFICATION
SnLauncherContext *sn_context;
SnDisplay *sn_display;
-@@ -1948,7 +1950,14 @@
+@@ -1953,7 +1956,15 @@
#endif
- if ( ! g_spawn_async (working_dir,
+
+ if (gnome_desktop_tsol_is_multi_label_session () &&
++ gnome_desktop_tsol_user_is_workstation_owner () &&
+ getzoneid () == 0) {
+ command = g_strdup_printf ("%d:%s", gdk_screen_get_number (screen), g_strjoinv (" ", real_argv));
+ gnome_desktop_tsol_proxy_app_launch (command);
@@ -80,7 +80,7 @@
real_argv,
envp,
(do_not_reap_child ? G_SPAWN_DO_NOT_REAP_CHILD : 0) | G_SPAWN_SEARCH_PATH /* flags */,
-@@ -1953,11 +1962,12 @@
+@@ -1961,11 +1972,12 @@
NULL, /* child_setup_func_data */
&ret /* child_pid */,
error)) {
@@ -98,10 +98,10 @@
}
launched ++;
-diff -urN gnome-desktop-2.17.2/libgnome-desktop/gnome-desktop-tsol-extensions.c ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/libgnome-desktop/gnome-desktop-tsol-extensions.c
---- gnome-desktop-2.17.2/libgnome-desktop/gnome-desktop-tsol-extensions.c 1970-01-01 00:00:00.000000000 +0000
-+++ ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/libgnome-desktop/gnome-desktop-tsol-extensions.c 2006-12-04 18:15:48.015045000 +0000
-@@ -0,0 +1,77 @@
+diff -urN -x '*~' -x '*.rej*' gnome-desktop.orig/libgnome-desktop/gnome-desktop-tsol-extensions.c gnome-desktop.new/libgnome-desktop/gnome-desktop-tsol-extensions.c
+--- gnome-desktop.orig/libgnome-desktop/gnome-desktop-tsol-extensions.c 1970-01-01 01:00:00.000000000 +0100
++++ gnome-desktop.new/libgnome-desktop/gnome-desktop-tsol-extensions.c 2007-09-19 22:17:22.377451000 +0100
+@@ -0,0 +1,116 @@
+/*
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
@@ -114,10 +114,49 @@
+#include <stdlib.h>
+#include <strings.h>
+#include <user_attr.h>
++#include <sys/types.h>
++#include <unistd.h>
++#include <dlfcn.h>
++#include <link.h>
+
+#define ATOM "_LABEL_EXEC_COMMAND"
+
-+gboolean gnome_desktop_tsol_is_clearance_admin_high (void)
++typedef Status (*xtsol_XTSOLgetWorkstationOwner) (Display *xpdy, uid_t *uidp);
++
++gboolean
++gnome_desktop_tsol_user_is_workstation_owner (void)
++{
++ uid_t uid;
++ gpointer handle;
++ Display *xdpy;
++ static int ret = -1;
++ xtsol_XTSOLgetWorkstationOwner libxtsol_XTSOLgetWorkstationOwner= NULL;
++
++ if (ret == -1) {
++ if (!(handle = dlopen ("/usr/lib/libXtsol.so.1", RTLD_LAZY)) ||
++ !(libxtsol_XTSOLgetWorkstationOwner =
++ (xtsol_XTSOLgetWorkstationOwner) dlsym (handle,
++ "XTSOLgetWorkstationOwner"))) {
++ ret = 0;
++ return FALSE;
++ }
++
++ xdpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
++
++ libxtsol_XTSOLgetWorkstationOwner (xdpy, &uid);
++
++ if (uid == getuid ()) {
++ ret = 1;
++ } else {
++ ret = 0;
++ }
++ }
++
++ return ret ? TRUE : FALSE;
++}
++
++gboolean
++gnome_desktop_tsol_is_clearance_admin_high (void)
+{
+ userattr_t *uattr;
+ char *value = NULL;
@@ -179,19 +218,19 @@
+ gdk_error_trap_pop ();
+}
+
-diff -urN gnome-desktop-2.17.2/libgnome-desktop/libgnome/Makefile.am ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/libgnome-desktop/libgnome/Makefile.am
---- gnome-desktop-2.17.2/libgnome-desktop/libgnome/Makefile.am 2004-02-18 12:50:36.000000000 +0000
-+++ ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/libgnome-desktop/libgnome/Makefile.am 2006-12-04 16:31:30.996995000 +0000
+diff -urN -x '*~' -x '*.rej*' gnome-desktop.orig/libgnome-desktop/libgnome/Makefile.am gnome-desktop.new/libgnome-desktop/libgnome/Makefile.am
+--- gnome-desktop.orig/libgnome-desktop/libgnome/Makefile.am 2007-09-19 21:47:26.561386000 +0100
++++ gnome-desktop.new/libgnome-desktop/libgnome/Makefile.am 2007-09-19 21:47:50.179634000 +0100
@@ -1,3 +1,4 @@
libgnome_desktopdir = $(includedir)/gnome-desktop-2.0/libgnome
libgnome_desktop_HEADERS = \
- gnome-desktop-item.h
+ gnome-desktop-item.h \
+ gnome-desktop-tsol-extensions.h
-diff -urN gnome-desktop-2.17.2/libgnome-desktop/libgnome/gnome-desktop-tsol-extensions.h ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/libgnome-desktop/libgnome/gnome-desktop-tsol-extensions.h
---- gnome-desktop-2.17.2/libgnome-desktop/libgnome/gnome-desktop-tsol-extensions.h 1970-01-01 00:00:00.000000000 +0000
-+++ ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/libgnome-desktop/libgnome/gnome-desktop-tsol-extensions.h 2006-12-04 17:16:51.316273000 +0000
-@@ -0,0 +1,9 @@
+diff -urN -x '*~' -x '*.rej*' gnome-desktop.orig/libgnome-desktop/libgnome/gnome-desktop-tsol-extensions.h gnome-desktop.new/libgnome-desktop/libgnome/gnome-desktop-tsol-extensions.h
+--- gnome-desktop.orig/libgnome-desktop/libgnome/gnome-desktop-tsol-extensions.h 1970-01-01 01:00:00.000000000 +0100
++++ gnome-desktop.new/libgnome-desktop/libgnome/gnome-desktop-tsol-extensions.h 2007-09-19 21:54:08.669028000 +0100
+@@ -0,0 +1,10 @@
+/*
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
@@ -200,4 +239,5 @@
+gboolean gnome_desktop_tsol_is_clearance_admin_high (void);
+gboolean gnome_desktop_tsol_is_multi_label_session (void);
+void gnome_desktop_tsol_proxy_app_launch (char *command);
++gboolean gnome_desktop_tsol_user_is_workstation_owner (void);
+