[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