[Goodies-commits] r6702 - in gigolo/trunk: . src

Enrico Troeger enrico at xfce.org
Mon Feb 16 15:48:46 CET 2009


Author: enrico
Date: 2009-02-16 14:48:45 +0000 (Mon, 16 Feb 2009)
New Revision: 6702

Modified:
   gigolo/trunk/ChangeLog
   gigolo/trunk/src/backendgvfs.c
   gigolo/trunk/src/bookmark.c
   gigolo/trunk/src/bookmark.h
   gigolo/trunk/src/bookmarkeditdialog.c
   gigolo/trunk/src/window.c
Log:
Escape the userinfo part of URIs to allow at-signs.

Modified: gigolo/trunk/ChangeLog
===================================================================
--- gigolo/trunk/ChangeLog	2009-02-16 14:08:21 UTC (rev 6701)
+++ gigolo/trunk/ChangeLog	2009-02-16 14:48:45 UTC (rev 6702)
@@ -6,6 +6,9 @@
  * src/window.c:
    Fix a wrong check when checking for existing bookmarks, fixes always
    disabled 'Create Bookmark' menu item.
+ * src/backendgvfs.c, src/bookmark.c, src/bookmark.h,
+   src/bookmarkeditdialog.c, src/window.c:
+   Escape the userinfo part of URIs to allow at-signs.
 
 
 2009-02-13  Enrico Tröger  <enrico(at)xfce(dot)org>

Modified: gigolo/trunk/src/backendgvfs.c
===================================================================
--- gigolo/trunk/src/backendgvfs.c	2009-02-16 14:08:21 UTC (rev 6701)
+++ gigolo/trunk/src/backendgvfs.c	2009-02-16 14:48:45 UTC (rev 6702)
@@ -161,12 +161,14 @@
 	{
 		case GIGOLO_WINDOW_REF_TYPE_MOUNT:
 		{
-			gchar *uri, *name;
+			gchar *uri, *name, *clean_uri;
 
 			gigolo_backend_gvfs_get_name_and_uri_from_mount(ref, &name, &uri);
+			clean_uri = g_uri_unescape_string(uri, G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO);
 			result = g_strdup_printf(
-				_("<b>%s</b>\n\nURI: %s\nConnected: Yes\nService Type: %s"), name, uri, type);
+				_("<b>%s</b>\n\nURI: %s\nConnected: Yes\nService Type: %s"), name, clean_uri, type);
 
+			g_free(clean_uri);
 			g_free(uri);
 			g_free(name);
 			return result;

Modified: gigolo/trunk/src/bookmark.c
===================================================================
--- gigolo/trunk/src/bookmark.c	2009-02-16 14:08:21 UTC (rev 6701)
+++ gigolo/trunk/src/bookmark.c	2009-02-16 14:48:45 UTC (rev 6702)
@@ -258,10 +258,11 @@
 }
 
 
-gchar *gigolo_bookmark_get_uri(GigoloBookmark *bookmark)
+static gchar *gigolo_bookmark_get_uri_real(GigoloBookmark *bookmark, gboolean escaped)
 {
 	GigoloBookmarkPrivate *priv = GIGOLO_BOOKMARK_GET_PRIVATE(bookmark);
 	gchar *result;
+	gchar *user = NULL;
 	gchar *port = NULL;
 
 	g_return_val_if_fail(bookmark != NULL, NULL);
@@ -271,20 +272,39 @@
 		port = g_strdup_printf(":%d", priv->port);
 	}
 
+	/* Escape the userinfo part to allow '@' characters even if RFC3986 doesn't seem to allow them. */
+	if (escaped && NZV(priv->user))
+		user = g_uri_escape_string(priv->user, G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO, FALSE);
+	else
+		user = g_strdup(priv->user);
+
 	result = g_strdup_printf("%s://%s%s%s%s/%s%s",
 		priv->scheme,
-		(NZV(priv->user)) ? priv->user : "",
-		(NZV(priv->user)) ? "@" : "",
+		(NZV(user)) ? user : "",
+		(NZV(user)) ? "@" : "",
 		priv->host,
 		(port) ? port : "",
 		(NZV(priv->share)) ? priv->share : "",
 		(NZV(priv->share)) ? "/" : "");
 
 	g_free(port);
+	g_free(user);
 	return result;
 }
 
 
+gchar *gigolo_bookmark_get_uri(GigoloBookmark *bookmark)
+{
+	return gigolo_bookmark_get_uri_real(bookmark, FALSE);
+}
+
+
+gchar *gigolo_bookmark_get_uri_escaped(GigoloBookmark *bookmark)
+{
+	return gigolo_bookmark_get_uri_real(bookmark, TRUE);
+}
+
+
 void gigolo_bookmark_set_uri(GigoloBookmark *bookmark, const gchar *uri)
 {
 	GigoloBookmarkPrivate *priv;
@@ -427,6 +447,24 @@
 }
 
 
+gchar *gigolo_bookmark_get_user_unescaped(GigoloBookmark *bookmark)
+{
+	gchar *username;
+	GigoloBookmarkPrivate *priv;
+
+	g_return_val_if_fail(bookmark != NULL, NULL);
+
+	priv = GIGOLO_BOOKMARK_GET_PRIVATE(bookmark);
+
+	if (NZV(priv->user))
+		username = g_uri_unescape_string(priv->user, G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO);
+	else
+		username = g_strdup(priv->user);
+
+	return username;
+}
+
+
 const gchar *gigolo_bookmark_get_user(GigoloBookmark *bookmark)
 {
 	g_return_val_if_fail(bookmark != NULL, NULL);

Modified: gigolo/trunk/src/bookmark.h
===================================================================
--- gigolo/trunk/src/bookmark.h	2009-02-16 14:08:21 UTC (rev 6701)
+++ gigolo/trunk/src/bookmark.h	2009-02-16 14:48:45 UTC (rev 6702)
@@ -53,6 +53,7 @@
 void				gigolo_bookmark_clone			(GigoloBookmark *dst, const GigoloBookmark *src);
 
 gchar*				gigolo_bookmark_get_uri			(GigoloBookmark *bookmark);
+gchar*				gigolo_bookmark_get_uri_escaped	(GigoloBookmark *bookmark);
 void				gigolo_bookmark_set_uri			(GigoloBookmark *bookmark, const gchar *uri);
 
 const gchar*		gigolo_bookmark_get_name		(GigoloBookmark *bookmark);
@@ -68,6 +69,7 @@
 void				gigolo_bookmark_set_port		(GigoloBookmark *bookmark, guint port);
 
 const gchar*		gigolo_bookmark_get_user		(GigoloBookmark *bookmark);
+gchar*				gigolo_bookmark_get_user_unescaped(GigoloBookmark *bookmark);
 void				gigolo_bookmark_set_user		(GigoloBookmark *bookmark, const gchar *user);
 
 const gchar*		gigolo_bookmark_get_share		(GigoloBookmark *bookmark);

Modified: gigolo/trunk/src/bookmarkeditdialog.c
===================================================================
--- gigolo/trunk/src/bookmarkeditdialog.c	2009-02-16 14:08:21 UTC (rev 6701)
+++ gigolo/trunk/src/bookmarkeditdialog.c	2009-02-16 14:48:45 UTC (rev 6702)
@@ -339,7 +339,7 @@
 static void init_values(GigoloBookmarkEditDialog *dialog)
 {
 	GigoloBookmarkEditDialogPrivate *priv = GIGOLO_BOOKMARK_EDIT_DIALOG_GET_PRIVATE(dialog);
-	gchar *uri;
+	gchar *uri, *user;
 	const gchar *tmp;
 	guint port;
 	guint idx;
@@ -347,21 +347,21 @@
 	tmp = gigolo_bookmark_get_name(priv->bookmark_init);
 	if (tmp != NULL)
 		gtk_entry_set_text(GTK_ENTRY(priv->name_entry), tmp);
-		tmp = gigolo_bookmark_get_name(priv->bookmark_init);
 	uri = gigolo_bookmark_get_uri(priv->bookmark_init);
 	if (uri != NULL)
 	{
 		gtk_entry_set_text(GTK_ENTRY(priv->uri_entry), uri);
-		tmp = gigolo_bookmark_get_uri(priv->bookmark_init);
 		g_free(uri);
 	}
 	tmp = gigolo_bookmark_get_host(priv->bookmark_init);
 	if (tmp != NULL)
 		gtk_entry_set_text(GTK_ENTRY(priv->server_entry), tmp);
-		tmp = gigolo_bookmark_get_name(priv->bookmark_init);
-	tmp = gigolo_bookmark_get_user(priv->bookmark_init);
-	if (tmp != NULL)
-		gtk_entry_set_text(GTK_ENTRY(priv->user_entry), tmp);
+	user = gigolo_bookmark_get_user_unescaped(priv->bookmark_init);
+	if (user != NULL)
+	{
+		gtk_entry_set_text(GTK_ENTRY(priv->user_entry), user);
+		g_free(user);
+	}
 	tmp = gigolo_bookmark_get_share(priv->bookmark_init);
 	if (tmp != NULL)
 		gtk_entry_set_text(GTK_ENTRY(priv->share_entry), tmp);

Modified: gigolo/trunk/src/window.c
===================================================================
--- gigolo/trunk/src/window.c	2009-02-16 14:08:21 UTC (rev 6701)
+++ gigolo/trunk/src/window.c	2009-02-16 14:48:45 UTC (rev 6702)
@@ -255,7 +255,7 @@
 	for (i = 0; i < bml->len && ! found; i++)
 	{
 		bm = g_ptr_array_index(bml, i);
-		tmp_uri = gigolo_bookmark_get_uri(bm);
+		tmp_uri = gigolo_bookmark_get_uri_escaped(bm);
 		if (gigolo_str_equal(uri, tmp_uri))
 			found = TRUE;
 
@@ -276,7 +276,7 @@
 
 	priv = GIGOLO_WINDOW_GET_PRIVATE(window);
 
-	uri = gigolo_bookmark_get_uri(bookmark);
+	uri = gigolo_bookmark_get_uri_escaped(bookmark);
 
 	if (show_dialog)
 	{




More information about the Goodies-commits mailing list