diff options
author | Tomas Bzatek <tbzatek@redhat.com> | 2011-03-18 14:27:09 +0100 |
---|---|---|
committer | Tomas Bzatek <tbzatek@redhat.com> | 2011-03-18 14:27:09 +0100 |
commit | c8bbe04f4e2a7d5457f01049abb700c72af702dd (patch) | |
tree | d7b6d76bc3bf8be8d3ef42271b235c4477b244b6 | |
parent | 7791cad5d2517fe31f760325d0dac90eeffd505d (diff) | |
download | gvfs-c8bbe04f4e2a7d5457f01049abb700c72af702dd.tar.gz |
smb: Add support for default location
This is actually a workaround for inacessible root of the share.
By setting default location to a user-specified path Nautilus will
go to this folder by default, leaving errors from inaccessible
root behind.
https://bugzilla.gnome.org/show_bug.cgi?id=586129
-rw-r--r-- | daemon/gvfsbackendsmb.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/daemon/gvfsbackendsmb.c b/daemon/gvfsbackendsmb.c index a2bc097d..92507eba 100644 --- a/daemon/gvfsbackendsmb.c +++ b/daemon/gvfsbackendsmb.c @@ -61,6 +61,7 @@ struct _GVfsBackendSmb char *share; char *user; char *domain; + char *path; char *default_workgroup; SMBCCTX *smb_context; @@ -106,6 +107,7 @@ g_vfs_backend_smb_finalize (GObject *object) g_free (backend->server); g_free (backend->user); g_free (backend->domain); + g_free (backend->path); g_free (backend->default_workgroup); if (G_OBJECT_CLASS (g_vfs_backend_smb_parent_class)->finalize) @@ -565,7 +567,11 @@ do_mount (GVfsBackend *backend, g_vfs_backend_set_mount_spec (backend, smb_mount_spec); g_mount_spec_unref (smb_mount_spec); - uri = create_smb_uri (op_backend->server, op_backend->share, NULL); + /* FIXME: we're stat()-ing user-specified path here, not the root. Ideally we + would like to fallback to root when first mount attempt fails, though + it would be tough to actually say if it was an authentication failure + or the particular path problem. */ + uri = create_smb_uri (op_backend->server, op_backend->share, op_backend->path); /* Samba mount loop */ @@ -622,6 +628,7 @@ do_mount (GVfsBackend *backend, /* Mount was successful */ + g_vfs_backend_set_default_location (backend, op_backend->path); g_vfs_keyring_save_password (op_backend->last_user, op_backend->server, op_backend->last_domain, @@ -643,7 +650,7 @@ try_mount (GVfsBackend *backend, gboolean is_automount) { GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend); - const char *server, *share, *user, *domain; + const char *server, *share, *user, *domain, *path; server = g_mount_spec_get (mount_spec, "server"); share = g_mount_spec_get (mount_spec, "share"); @@ -658,11 +665,13 @@ try_mount (GVfsBackend *backend, user = g_mount_spec_get (mount_spec, "user"); domain = g_mount_spec_get (mount_spec, "domain"); + path = mount_spec->mount_prefix; op_backend->server = g_strdup (server); op_backend->share = g_strdup (share); op_backend->user = g_strdup (user); op_backend->domain = g_strdup (domain); + op_backend->path = g_strdup (path); return FALSE; } |