diff options
author | Ondrej Holy <oholy@redhat.com> | 2016-11-15 13:50:58 +0100 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2016-11-16 11:43:49 +0100 |
commit | a59d84f90bf863a21e793b936c3923452055085e (patch) | |
tree | 91e5711bc5b761762aaa7327521efe03e6990def /daemon | |
parent | eadddde1a35f60595193e0d373e99e8cafb45090 (diff) | |
download | gvfs-a59d84f90bf863a21e793b936c3923452055085e.tar.gz |
smbbrowse: Fix IPv6 handling
IPv6 server includes brackets in GMountSpec, smbclient doesn't. Commit
4012d70 fixed IPv6 handling for SMB backend. Share and use the modified
create_smb_uri() function in order to fix the IPv6 handling.
https://bugzilla.gnome.org/show_bug.cgi?id=604116
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/Makefile.am | 3 | ||||
-rw-r--r-- | daemon/gvfsbackendsmb.c | 9 | ||||
-rw-r--r-- | daemon/gvfsbackendsmbbrowse.c | 37 |
3 files changed, 20 insertions, 29 deletions
diff --git a/daemon/Makefile.am b/daemon/Makefile.am index 963a721f..e458e5c3 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -263,7 +263,7 @@ gvfsd_localtest_CPPFLAGS = \ gvfsd_localtest_LDADD = $(libraries) gvfsd_smb_SOURCES = \ - gvfsbackendsmb.c gvfsbackendsmb.h \ + gvfsbackendsmb.c gvfsbackendsmb.h gvfsbackendsmbprivate.h \ daemon-main.c daemon-main.h \ daemon-main-generic.c @@ -278,6 +278,7 @@ gvfsd_smb_LDADD = $(SAMBA_LIBS) $(libraries) gvfsd_smb_browse_SOURCES = \ gvfsbackendsmbbrowse.c gvfsbackendsmbbrowse.h \ + gvfsbackendsmb.c gvfsbackendsmb.h gvfsbackendsmbprivate.h \ daemon-main.c daemon-main.h \ daemon-main-generic.c diff --git a/daemon/gvfsbackendsmb.c b/daemon/gvfsbackendsmb.c index 7fbdbaad..a5a4773d 100644 --- a/daemon/gvfsbackendsmb.c +++ b/daemon/gvfsbackendsmb.c @@ -360,6 +360,8 @@ create_smb_uri_string (const char *server, GString *uri; uri = g_string_new ("smb://"); + if (server == NULL) + return uri; /* IPv6 server includes brackets in GMountSpec, smbclient doesn't */ if (server[0] == '[') @@ -373,7 +375,10 @@ create_smb_uri_string (const char *server, if (port != -1) g_string_append_printf (uri, ":%d", port); g_string_append_c (uri, '/'); - g_string_append_encoded (uri, share, NULL); + + if (share != NULL) + g_string_append_encoded (uri, share, NULL); + if (path != NULL) { if (*path != '/') @@ -388,7 +393,7 @@ create_smb_uri_string (const char *server, return uri; } -static char * +char * create_smb_uri (const char *server, int port, const char *share, diff --git a/daemon/gvfsbackendsmbbrowse.c b/daemon/gvfsbackendsmbbrowse.c index ea2b7d86..fc554ebe 100644 --- a/daemon/gvfsbackendsmbbrowse.c +++ b/daemon/gvfsbackendsmbbrowse.c @@ -44,6 +44,7 @@ #include "gvfsdaemonprotocol.h" #include "gvfskeyring.h" #include "gmounttracker.h" +#include "gvfsbackendsmbprivate.h" #include <libsmbclient.h> @@ -589,7 +590,7 @@ g_string_append_encoded (GString *string, static gboolean update_cache (GVfsBackendSmbBrowse *backend, SMBCFILE *supplied_dir) { - GString *uri; + char *uri; char dirents[1024*4]; struct smbc_dirent *dirp; GList *entries; @@ -610,22 +611,14 @@ update_cache (GVfsBackendSmbBrowse *backend, SMBCFILE *supplied_dir) g_debug ("update_cache - updating...\n"); /* Update Cache */ - uri = g_string_new ("smb://"); - - if (backend->server) - { - g_string_append_encoded (uri, backend->server, NULL, NULL); - if (backend->port != -1) - g_string_append_printf (uri, ":%d", backend->port); - g_string_append_c (uri, '/'); - } smbc_opendir = smbc_getFunctionOpendir (backend->smb_context); smbc_getdents = smbc_getFunctionGetdents (backend->smb_context); smbc_closedir = smbc_getFunctionClosedir (backend->smb_context); - dir = supplied_dir ? supplied_dir : smbc_opendir (backend->smb_context, uri->str); - g_string_free (uri, TRUE); + uri = create_smb_uri (backend->server, backend->port, NULL, NULL); + dir = supplied_dir ? supplied_dir : smbc_opendir (backend->smb_context, uri); + g_free (uri); if (dir == NULL) { entry_errno = errno; @@ -840,7 +833,7 @@ do_mount (GVfsBackend *backend, char *icon; char *symbolic_icon; gchar *port_str; - GString *uri; + char *uri; gboolean res; GMountSpec *browse_mount_spec; smbc_opendir_fn smbc_opendir; @@ -952,17 +945,9 @@ do_mount (GVfsBackend *backend, smbc_opendir = smbc_getFunctionOpendir (smb_context); smbc_closedir = smbc_getFunctionClosedir (smb_context); - uri = g_string_new ("smb://"); + uri = create_smb_uri (op_backend->server, op_backend->port, NULL, NULL); - if (op_backend->server) - { - g_string_append_encoded (uri, op_backend->server, NULL, NULL); - if (op_backend->port != -1) - g_string_append_printf (uri, ":%d", op_backend->port); - g_string_append_c (uri, '/'); - } - - g_debug ("do_mount - URI = %s\n", uri->str); + g_debug ("do_mount - URI = %s\n", uri); do { @@ -971,10 +956,10 @@ do_mount (GVfsBackend *backend, g_debug ("do_mount - try #%d \n", op_backend->mount_try); - dir = smbc_opendir (smb_context, uri->str); + dir = smbc_opendir (smb_context, uri); g_debug ("do_mount - [%s; %d] dir = %p, cancelled = %d, errno = [%d] '%s' \n", - uri->str, op_backend->mount_try, dir, op_backend->mount_cancelled, + uri, op_backend->mount_try, dir, op_backend->mount_cancelled, errno, g_strerror (errno)); if (dir == NULL && @@ -1012,7 +997,7 @@ do_mount (GVfsBackend *backend, } while (op_backend->mount_try_again); - g_string_free (uri, TRUE); + g_free (uri); op_backend->mount_source = NULL; |