Package: libgksu
Severity: wishlist
Tags: patch
User: [EMAIL PROTECTED]
Usertags: origin-ubuntu hardy ubuntu-patch
Hi,
attached is a patch that makes the buffer in gksu-run-helper grow
dynamically. This is a problem for very long commands, see LP #173757
for a example command that fails
(https://bugs.edge.launchpad.net/ubuntu/+source/libgksu/+bug/173757).
Cheers,
Michael
=== modified file 'libgksu/gksu-run-helper.c'
--- libgksu/gksu-run-helper.c 2008-06-10 14:14:50 +0000
+++ libgksu/gksu-run-helper.c 2008-06-11 12:25:55 +0000
@@ -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);
-
- bzero (buffer, 255);
- fgets (buffer, 255, stdin);
- strip (buffer);
-
- sn_id = g_strdup_printf ("%s", buffer + 10);
+ xauth_display = g_strdup_printf ("%s", s->str + 10);
+
+ s = g_string_truncate(s,0);
+ read_gstring_from_stdin(s);
+
+ 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;
}
}