summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2016-11-15 13:50:58 +0100
committerOndrej Holy <oholy@redhat.com>2016-11-16 11:43:49 +0100
commita59d84f90bf863a21e793b936c3923452055085e (patch)
tree91e5711bc5b761762aaa7327521efe03e6990def /daemon
parenteadddde1a35f60595193e0d373e99e8cafb45090 (diff)
downloadgvfs-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.am3
-rw-r--r--daemon/gvfsbackendsmb.c9
-rw-r--r--daemon/gvfsbackendsmbbrowse.c37
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;