From bf47e03d16fdf2f9c458a4c82084d80e4a2923a7 Mon Sep 17 00:00:00 2001 From: Jens Granseuer Date: Tue, 19 Feb 2008 20:01:13 +0000 Subject: [PATCH] escape strange hostnames that we want to use as GConf keys (see bug 2008-02-19 Jens Granseuer * main.c: (create_dialog), (save_to_gconf): escape strange hostnames that we want to use as GConf keys (see bug #517259 for a similar issue in gnome-settings-daemon) svn path=/trunk/; revision=8509 --- capplets/display/ChangeLog | 6 ++++++ capplets/display/main.c | 25 +++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/capplets/display/ChangeLog b/capplets/display/ChangeLog index 8c0f71e6c..1d1e477ca 100644 --- a/capplets/display/ChangeLog +++ b/capplets/display/ChangeLog @@ -1,3 +1,9 @@ +2008-02-19 Jens Granseuer + + * main.c: (create_dialog), (save_to_gconf): escape strange hostnames + that we want to use as GConf keys (see bug #517259 for a similar issue + in gnome-settings-daemon) + 2007-10-28 Jens Granseuer * main.c: (display_rotation_from_text), (create_rotate_menu): readd gettext diff --git a/capplets/display/main.c b/capplets/display/main.c index 9195ab11f..337846b43 100644 --- a/capplets/display/main.c +++ b/capplets/display/main.c @@ -588,6 +588,7 @@ create_dialog (struct DisplayInfo *info) char *resolution; char *str; char hostname[HOST_NAME_MAX + 1]; + char *host_escaped; dialog = gtk_dialog_new_with_buttons (_("Screen Resolution Preferences"), NULL, @@ -630,7 +631,10 @@ create_dialog (struct DisplayInfo *info) /* If we previously set the resolution specifically for this hostname, default to it on */ client = gconf_client_get_default (); - key = g_strconcat ("/desktop/gnome/screen/", hostname, "/0/resolution",NULL); + + host_escaped = gconf_escape_key (hostname, -1); + key = g_strconcat ("/desktop/gnome/screen/", host_escaped, "/0/resolution", NULL); + g_free (host_escaped); resolution = gconf_client_get_string (client, key, NULL); g_free (key); g_object_unref (client); @@ -757,15 +761,14 @@ save_to_gconf (struct DisplayInfo *info, gboolean save_computer, gboolean clear_ { GConfClient *client; gboolean res; -#ifdef HOST_NAME_MAX char hostname[HOST_NAME_MAX + 1]; -#else - char hostname[256]; -#endif - char *path, *key, *str; + char *path, *key, *str, *host_escaped; int i; - gethostname (hostname, sizeof (hostname)); + if (gethostname (hostname, sizeof (hostname)) != 0) + return; + + host_escaped = gconf_escape_key (hostname, -1); client = gconf_client_get_default (); @@ -774,11 +777,11 @@ save_to_gconf (struct DisplayInfo *info, gboolean save_computer, gboolean clear_ for (i = 0; i < info->n_screens; i++) { key = g_strdup_printf ("/desktop/gnome/screen/%s/%d/resolution", - hostname, i); + host_escaped, i); gconf_client_unset (client, key, NULL); g_free (key); key = g_strdup_printf ("/desktop/gnome/screen/%s/%d/rate", - hostname, i); + host_escaped, i); gconf_client_unset (client, key, NULL); g_free (key); } @@ -787,13 +790,15 @@ save_to_gconf (struct DisplayInfo *info, gboolean save_computer, gboolean clear_ if (save_computer) { path = g_strconcat ("/desktop/gnome/screen/", - hostname, + host_escaped, "/", NULL); } else path = g_strdup ("/desktop/gnome/screen/default/"); + g_free (host_escaped); + for (i = 0; i < info->n_screens; i++) { struct ScreenInfo *screen_info = &info->screens[i];