kov changed libgksu/trunk/ChangeLog, libgksu/trunk/libgksu/gksu-run-helper.c

Gustavo Noronha kov at alioth.debian.org
Sat Jun 21 00:23:41 UTC 2008


Mensagem de log: 
	* libgksu/gksu-run-helper.c: accepted patch by Michael Vogt, from
	Ubuntu, to fix very long commands not fitting in the helper's
	statically-sized buffer (Debian bug #486087, launchpad #173757)



-----


Modified: libgksu/trunk/ChangeLog
===================================================================
--- libgksu/trunk/ChangeLog	2008-06-21 00:14:30 UTC (rev 824)
+++ libgksu/trunk/ChangeLog	2008-06-21 00:23:41 UTC (rev 825)
@@ -1,5 +1,9 @@
 2008-06-20  Gustavo Noronha Silva  <kov at debian.org>
 
+	* libgksu/gksu-run-helper.c: accepted patch by Michael Vogt, from
+	Ubuntu, to fix very long commands not fitting in the helper's
+	statically-sized buffer (Debian bug #486087, launchpad #173757)
+
 	* libgksu/libgksu.c (sudo_full): accepted patch by Michael Vogt,
 	from Ubuntu, to fix sudo having problems resolving network
 	addresses breaking gksu (Debian bug #486083, launchpad #237325)

Modified: libgksu/trunk/libgksu/gksu-run-helper.c
===================================================================
--- libgksu/trunk/libgksu/gksu-run-helper.c	2008-06-21 00:14:30 UTC (rev 824)
+++ libgksu/trunk/libgksu/gksu-run-helper.c	2008-06-21 00:23:41 UTC (rev 825)
@@ -63,6 +63,21 @@
 	     dirname, strerror (errno));
 }
 
+void read_gstring_from_stdin(GString *s)
+{
+  gchar buffer[255];
+  char *readp;
+  do
+  {
+     readp = fgets(buffer, sizeof(buffer), stdin);
+     if(readp == NULL)
+	return;
+     strip (buffer);
+     g_string_append(s, buffer);
+  } while (sizeof(buffer)-1 == strlen(readp));
+  return;
+}
+
 int
 main (int argc, char **argv)
 {
@@ -79,8 +94,6 @@
   gchar *xauth_token = NULL;
   gchar *sn_id = NULL;
 
-  gchar buffer[255];
-
   gint return_code;
 
   if (argc < 2)
@@ -101,24 +114,22 @@
   xauth_file = g_strdup_printf ("%s/.Xauthority",
 				xauth_dir);
 
-  fgets (buffer, 255, stdin);
-  strip (buffer);
+  GString *s = g_string_sized_new(255);
+  read_gstring_from_stdin(s);
 
   /* strlen ("gksu-run: ") == 10, see su.c */
-  xauth_display = g_strdup_printf ("%s", buffer + 10);
+  xauth_display = g_strdup_printf ("%s", s->str + 10);
 
-  bzero (buffer, 255);
-  fgets (buffer, 255, stdin);
-  strip (buffer);
+  s = g_string_truncate(s,0);
+  read_gstring_from_stdin(s);
 
-  sn_id = g_strdup_printf ("%s", buffer + 10);
+  sn_id = g_strdup_printf ("%s", s->str + 10);
   setenv("DESKTOP_STARTUP_ID", sn_id, TRUE);
 
-  bzero (buffer, 255);
-  fgets (buffer, 255, stdin);
-  strip (buffer);
+  s = g_string_truncate(s,0);
+  read_gstring_from_stdin(s);
 
-  xauth_token = g_strdup_printf ("%s", buffer + 10);
+  xauth_token = g_strdup_printf ("%s", s->str + 10);
 
   /* a bit more security is always fine */
   {
@@ -161,6 +172,7 @@
     return_code = system (argv[1]);
     
     clean_dir (xauth_dir);
+    g_string_free(s, TRUE);
     return return_code;
   }
 }




More information about the gksu-commits mailing list