patches/SUNWtgnome-xagent-02-URI-support.diff
author rohinis
Tue, 29 Nov 2011 17:32:55 +0000
branchs11express-2010-11
changeset 22234 c23e64da3e06
parent 17596 d9e24a5b03c1
permissions -rw-r--r--
2011-11-29 Rohini S <[email protected]> * patches/Python26-22-audio.diff: Fixes CVE-2010-1634 * specs/SUNWPython26.spec: Fixes CR 7085446
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17596
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     1
diff -urN xagent.orig/gnome-session/xagent.c xagent.new/gnome-session/xagent.c
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     2
--- xagent.orig/gnome-session/xagent.c	2010-02-18 15:48:09.702503615 +0000
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     3
+++ xagent.new/gnome-session/xagent.c	2010-02-25 11:58:53.341643955 +0000
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     4
@@ -93,25 +93,33 @@
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     5
   exit (2);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     6
 }
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     7
 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     8
-static void
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     9
-parse_exec_string (char *exec, int *screen, char **command)
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    10
-{
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    11
-  gchar **tokens = g_strsplit (exec, ":", 2);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    12
-
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    13
-  if (tokens[0]) {
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    14
-	*screen = atoi (tokens[0]);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    15
-  } else {
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    16
-	*screen = 0;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    17
-  }
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    18
+enum {
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    19
+  PIPE_MESSAGE_PARSE_ERROR = 0,
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    20
+  PIPE_MESSAGE_COMMAND,
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    21
+  PIPE_MESSAGE_URI,
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    22
+};
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    23
 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    24
-  if (tokens[1]) {
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    25
-	*command = g_strdup (tokens[1]);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    26
-  } else {
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    27
-	*command = g_strdup (exec);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    28
-  }
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    29
+static int
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    30
+parse_message_string (char *str, int *screen, char **message)
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    31
+{
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    32
+  gchar *p = NULL;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    33
 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    34
-  g_strfreev (tokens);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    35
+  if (!(p = strchr (str, ':')) || (p == str)) 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    36
+    return PIPE_MESSAGE_PARSE_ERROR;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    37
 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    38
+  if (*(p+1) != '\0') 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    39
+    *message = g_strdup (p+1);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    40
+  else 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    41
+    return PIPE_MESSAGE_PARSE_ERROR;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    42
+
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    43
+  *p = '\0';
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    44
+  *screen = atoi (str); /* defaults to 0 on error */
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    45
+  *p = ':';
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    46
+
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    47
+  if (strncmp (*message, "[URI]", 5) == 0)
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    48
+	return PIPE_MESSAGE_URI;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    49
+  else
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    50
+	return PIPE_MESSAGE_COMMAND;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    51
 }
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    52
 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    53
 static gboolean
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    54
@@ -125,7 +133,8 @@
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    55
   GError *error = NULL;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    56
   GIOStatus status=0;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    57
   int screen_num;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    58
-  gchar *real_cmd;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    59
+  int message_type;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    60
+  gchar *message = NULL;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    61
   GdkDisplay *gdk_dpy;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    62
 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    63
   if (condition & G_IO_ERR) return FALSE;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    64
@@ -139,11 +148,23 @@
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    65
     {
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    66
 	case G_IO_STATUS_NORMAL:
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    67
 	str[pos] = '\0';
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    68
-        parse_exec_string (str, &screen_num, &real_cmd);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    69
         gdk_dpy = gdk_display_get_default ();
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    70
-	gdk_spawn_command_line_on_screen (gdk_display_get_screen (gdk_dpy,
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    71
-                                          screen_num), real_cmd, &error);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    72
-        g_free (real_cmd);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    73
+        message_type = parse_message_string (str, &screen_num, &message);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    74
+	switch (message_type) 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    75
+	  {
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    76
+	    case PIPE_MESSAGE_URI:
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    77
+	      gtk_show_uri (gdk_display_get_screen (gdk_dpy, screen_num), 
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    78
+			message + 5, GDK_CURRENT_TIME, &error);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    79
+	      break;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    80
+	    case PIPE_MESSAGE_COMMAND:
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    81
+	      gdk_spawn_command_line_on_screen (gdk_display_get_screen (gdk_dpy,
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    82
+                                          screen_num), message, &error);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    83
+	      break;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    84
+	    case PIPE_MESSAGE_PARSE_ERROR:
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    85
+	    default:
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    86
+	      break;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    87
+	    }
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    88
+        if (message) g_free (message);
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    89
         return TRUE;
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    90
 	case G_IO_STATUS_AGAIN:
d9e24a5b03c1 2010-02-25 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    91
 	return FALSE;