patches/gnome-desktop-03-trusted-extensions.diff
author dcarbery
Wed, 10 Jan 2007 12:03:43 +0000
changeset 8949 f7c529163064
parent 8688 36bfc56d6788
child 10169 8dba9a12689b
permissions -rw-r--r--
2007-01-10 Damien Carbery <[email protected]> * patches/gnome-desktop-03-trusted-extensions.diff, patches/gnome-menus-01-quickstart.diff patches/gnome-menus-03-preferences.diff: Rework for new tarballs.

diff -urN gnome-desktop-2.17.2/configure.in ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/configure.in
--- gnome-desktop-2.17.2/configure.in	2006-12-04 17:22:29.361309000 +0000
+++ ../SUNWgnome-panel-2.17.1.hacked/gnome-desktop-2.17.2/configure.in	2006-12-04 18:48:47.899545000 +0000
@@ -110,6 +110,24 @@
 
 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 gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED $STARTUP_NOTIFICATION_PACKAGE)
 
+AC_SUBST(GNOME_DESKTOP_LIBS)
+
+#
+# Solaris Trusted Extensions stuff
+#
+case "$host" in
+*solaris*)
+        AC_CHECK_HEADERS(sys/tsol/label_macro.h,
+                AC_DEFINE(HAVE_TSOL, ,[Building with TSOL support]) found_tsol=yes,)
+        ;;
+*)
+        ;;
+esac
+
+AM_CONDITIONAL(TSOL_DEFINED, test x$found_tsol = xyes)
+if test "x$found_tsol" = "xyes" ; then
+       GNOME_DESKTOP_LIBS="$GNOME_DESKTOP_LIBS -lsecdb"
+fi
 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
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 @@
 
 libgnome_desktop_2_la_SOURCES = \
 	gnome-desktop-item.c	\
+	gnome-desktop-tsol-extensions.c \
 	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
@@ -44,6 +44,7 @@
 #include <libgnome/gnome-url.h>
 #include <locale.h>
 #include <popt.h>
+#include <zone.h>
 
 #include <libgnomevfs/gnome-vfs-uri.h>
 #include <libgnomevfs/gnome-vfs-ops.h>
@@ -61,6 +62,7 @@
 
 #undef GNOME_DISABLE_DEPRECATED
 #include <libgnome/gnome-desktop-item.h>
+#include <libgnome/gnome-desktop-tsol-extensions.h>
 
 struct _GnomeDesktopItem {
 	int refcount;
@@ -1747,6 +1749,7 @@
 	char *new_exec, *uris, *temp;
 	char *exec_locale;
 	int launched = 0;
+	char *command;
 #ifdef HAVE_STARTUP_NOTIFICATION
 	SnLauncherContext *sn_context;
 	SnDisplay *sn_display;
@@ -1948,7 +1950,14 @@
 #endif
 		
 		
-		if ( ! g_spawn_async (working_dir,
+
+		if (gnome_desktop_tsol_is_multi_label_session () &&
+			getzoneid () == 0) {
+			command = g_strdup_printf ("%d:%s", gdk_screen_get_number (screen), g_strjoinv (" ", real_argv));
+			gnome_desktop_tsol_proxy_app_launch (command);
+			g_free (command);
+		} else {
+			if ( ! g_spawn_async (working_dir,
 				      real_argv,
 				      envp,
 				      (do_not_reap_child ? G_SPAWN_DO_NOT_REAP_CHILD : 0) | G_SPAWN_SEARCH_PATH /* flags */,
@@ -1953,11 +1962,12 @@
 				      NULL, /* child_setup_func_data */
 				      &ret /* child_pid */,
 				      error)) {
-			/* The error was set for us,
-			 * we just can't launch this thingie */
-			ret = -1;
-			g_strfreev (real_argv);
-			break;
+				/* The error was set for us,
+			 	* we just can't launch this thingie */
+				ret = -1;
+				g_strfreev (real_argv);
+				break;
+			}
 		}
 		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 @@
+/*
+ * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#include <config.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <X11/Xlib.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <user_attr.h>
+
+#define ATOM "_LABEL_EXEC_COMMAND"
+
+gboolean gnome_desktop_tsol_is_clearance_admin_high (void)
+{
+        userattr_t      *uattr;
+        char            *value = NULL;
+
+        uattr = getuseruid (getuid ());
+
+        if (uattr) {
+                value = kva_match (uattr->attr, USERATTR_CLEARANCE);
+                if (value)
+                        if (strncasecmp ("admin_high", value, 10) == 0 ||
+                            strncasecmp ("ADMIN_HIGH", value, 10) == 0)
+                                return TRUE;
+        }
+        return FALSE;
+}
+
+gboolean
+gnome_desktop_tsol_is_multi_label_session (void)
+{
+	static int trusted = -1;
+
+	if (trusted < 0) {
+		if (getenv ("TRUSTED_SESSION")) {
+			trusted = 1;
+		} else {
+			trusted = 0;
+		}
+	}
+
+	return trusted ? TRUE : FALSE;
+}
+
+void
+gnome_desktop_tsol_proxy_app_launch (char *command)
+{
+	GdkDisplay *dpy;
+	Display *xdpy;
+	Window root;
+	Atom atom, utf8_string;
+
+	if (!command) return;
+
+	dpy = gdk_display_get_default ();
+	xdpy = GDK_DISPLAY_XDISPLAY (dpy);
+
+	utf8_string = XInternAtom (xdpy, "UTF8_STRING", FALSE);
+
+	root = DefaultRootWindow (xdpy);
+
+	atom = XInternAtom (xdpy, ATOM, FALSE);
+
+	gdk_error_trap_push ();
+
+	XChangeProperty (xdpy, root, atom, utf8_string, 8, PropModeReplace,
+			 command, strlen (command));
+
+	XSync (xdpy, False);
+
+	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
@@ -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 @@
+/*
+ * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+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);
+