[gvfs/gnome-3-22] smbbrowse: Fix IPv6 handling



commit 85add9300ba9f7e25af1ae6d77696191cb7f7073
Author: Ondrej Holy <oholy redhat com>
Date:   Tue Nov 15 13:50:58 2016 +0100

    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

 daemon/Makefile.am            |    3 ++-
 daemon/gvfsbackendsmb.c       |    9 +++++++--
 daemon/gvfsbackendsmbbrowse.c |   37 +++++++++++--------------------------
 3 files changed, 20 insertions(+), 29 deletions(-)
---
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 24b3921..75dee1c 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 a477669..4ec42fc 100644
--- a/daemon/gvfsbackendsmb.c
+++ b/daemon/gvfsbackendsmb.c
@@ -479,6 +479,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] == '[')
@@ -492,7 +494,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 != '/')
@@ -507,7 +512,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 a811c5e..3d9a6cc 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;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]