gvfs r1312 - in trunk: . daemon
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: gvfs r1312 - in trunk: . daemon
- Date: Wed, 20 Feb 2008 14:09:57 +0000 (GMT)
Author: alexl
Date: Wed Feb 20 14:09:56 2008
New Revision: 1312
URL: http://svn.gnome.org/viewvc/gvfs?rev=1312&view=rev
Log:
2008-02-20 Alexander Larsson <alexl redhat com>
* daemon/Makefile.am:
* daemon/gvfsbackendsmb.c:
* daemon/gvfsbackendsmbbrowse.c:
If gconf availible, initialize default workgroup
from gconf.
Handle X-GNOME-DEFAULT-WORKGROUP special case
to list the current workgroup
Modified:
trunk/ChangeLog
trunk/daemon/Makefile.am
trunk/daemon/gvfsbackendsmb.c
trunk/daemon/gvfsbackendsmbbrowse.c
Modified: trunk/daemon/Makefile.am
==============================================================================
--- trunk/daemon/Makefile.am (original)
+++ trunk/daemon/Makefile.am Wed Feb 20 14:09:56 2008
@@ -152,9 +152,10 @@
-DBACKEND_HEADER=gvfsbackendsmb.h \
-DDEFAULT_BACKEND_TYPE=smb-share \
-DMAX_JOB_THREADS=1 \
+ $(GCONF_CFLAGS) \
-DBACKEND_TYPES='"smb-share", G_VFS_TYPE_BACKEND_SMB,'
-gvfsd_smb_LDADD = $(SAMBA_LIBS) $(libraries)
+gvfsd_smb_LDADD = $(SAMBA_LIBS) $(GCONF_LIBS) $(libraries)
gvfsd_smb_browse_SOURCES = \
gvfsbackendsmbbrowse.c gvfsbackendsmbbrowse.h \
@@ -165,9 +166,10 @@
-DBACKEND_HEADER=gvfsbackendsmbbrowse.h \
-DMOUNTABLE_DBUS_NAME=org.gtk.vfs.mountpoint.smb_browse \
-DMAX_JOB_THREADS=1 \
+ $(GCONF_CFLAGS) \
-DBACKEND_TYPES='"smb-network", G_VFS_TYPE_BACKEND_SMB_BROWSE,"smb-server", G_VFS_TYPE_BACKEND_SMB_BROWSE,'
-gvfsd_smb_browse_LDADD = $(SAMBA_LIBS) $(libraries)
+gvfsd_smb_browse_LDADD = $(SAMBA_LIBS) $(GCONF_LIBS) $(libraries)
gvfsd_ftp_SOURCES = \
gvfsbackendftp.c gvfsbackendftp.h \
Modified: trunk/daemon/gvfsbackendsmb.c
==============================================================================
--- trunk/daemon/gvfsbackendsmb.c (original)
+++ trunk/daemon/gvfsbackendsmb.c Wed Feb 20 14:09:56 2008
@@ -48,6 +48,13 @@
#include "gvfsjobenumerate.h"
#include "gvfsdaemonprotocol.h"
+#ifdef HAVE_GCONF
+#include <gconf/gconf-client.h>
+#endif
+
+/* We load a default workgroup from gconf */
+#define PATH_GCONF_GNOME_VFS_SMB_WORKGROUP "/system/smb/workgroup"
+
#include <libsmbclient.h>
struct _GVfsBackendSmb
@@ -77,6 +84,8 @@
SMBCSRV *cached_server;
};
+static char *default_workgroup = NULL;
+
G_DEFINE_TYPE (GVfsBackendSmb, g_vfs_backend_smb, G_VFS_TYPE_BACKEND)
static void
@@ -442,6 +451,11 @@
smb_context->callbacks.get_cached_srv_fn = get_cached_server;
smb_context->callbacks.remove_cached_srv_fn = remove_cached_server;
smb_context->callbacks.purge_cached_fn = purge_cached;
+
+ /* libsmbclient frees this on it's own, so make sure
+ * to use simple system malloc */
+ if (default_workgroup != NULL)
+ smb_context->workgroup = strdup (default_workgroup);
smb_context->flags = 0;
@@ -1746,6 +1760,9 @@
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
+#ifdef HAVE_GCONF
+ GConfClient *gclient;
+#endif
gobject_class->finalize = g_vfs_backend_smb_finalize;
@@ -1769,4 +1786,23 @@
backend_class->make_directory = do_make_directory;
backend_class->move = do_move;
backend_class->try_query_settable_attributes = try_query_settable_attributes;
+
+#ifdef HAVE_GCONF
+ gclient = gconf_client_get_default ();
+ if (gclient)
+ {
+ char *workgroup;
+
+ workgroup = gconf_client_get_string (gclient,
+ PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL);
+
+ if (workgroup && workgroup[0])
+ default_workgroup = workgroup;
+ else
+ g_free (workgroup);
+
+ g_object_unref (gclient);
+ }
+#endif
+
}
Modified: trunk/daemon/gvfsbackendsmbbrowse.c
==============================================================================
--- trunk/daemon/gvfsbackendsmbbrowse.c (original)
+++ trunk/daemon/gvfsbackendsmbbrowse.c Wed Feb 20 14:09:56 2008
@@ -44,6 +44,16 @@
#include "gmounttracker.h"
#include <libsmbclient.h>
+#ifdef HAVE_GCONF
+#include <gconf/gconf-client.h>
+#endif
+
+/* We load a default workgroup from gconf */
+#define PATH_GCONF_GNOME_VFS_SMB_WORKGROUP "/system/smb/workgroup"
+
+/* The magic "default workgroup" hostname */
+#define DEFAULT_WORKGROUP_NAME "X-GNOME-DEFAULT-WORKGROUP"
+
typedef struct {
unsigned int smbc_type;
char *name;
@@ -59,6 +69,7 @@
char *user;
char *domain;
char *server;
+ char *mounted_server; /* server or DEFAULT_WORKGROUP_NAME */
SMBCCTX *smb_context;
GMutex *entries_lock;
@@ -67,6 +78,8 @@
int entry_errno;
};
+static char *default_workgroup = NULL;
+
static GHashTable *server_cache = NULL;
static GMountTracker *mount_tracker = NULL;
@@ -187,6 +200,7 @@
g_free (backend->user);
g_free (backend->domain);
+ g_free (backend->mounted_server);
g_free (backend->server);
g_mutex_free (backend->entries_lock);
@@ -426,8 +440,6 @@
g_string_append_c (uri, '/');
}
- g_print ("update_cache: %s\n", uri->str);
-
dir = backend->smb_context->opendir (backend->smb_context, uri->str);
g_string_free (uri, TRUE);
if (dir == NULL)
@@ -447,8 +459,6 @@
{
unsigned int dirlen;
- g_print ("type: %u, name: %s\n", dirp->smbc_type, dirp->name);
-
if (dirp->smbc_type != SMBC_IPC_SHARE &&
dirp->smbc_type != SMBC_COMMS_SHARE &&
dirp->smbc_type != SMBC_PRINTER_SHARE &&
@@ -458,8 +468,6 @@
BrowseEntry *entry = g_new (BrowseEntry, 1);
gboolean valid_utf8;
- g_print ("added %s to cache\n", dirp->name);
-
entry->smbc_type = dirp->smbc_type;
entry->name = g_strdup (dirp->name);
entry->name_utf8 = smb_name_to_utf8 (dirp->name, &valid_utf8);
@@ -621,8 +629,6 @@
char *icon;
GMountSpec *browse_mount_spec;
- g_print ("do_mount\n");
-
smb_context = smbc_new_context ();
if (smb_context == NULL)
{
@@ -643,6 +649,11 @@
smb_context->callbacks.get_cached_srv_fn = get_cached_server;
smb_context->callbacks.remove_cached_srv_fn = remove_cached_server;
smb_context->callbacks.purge_cached_fn = purge_cached;
+
+ /* libsmbclient frees this on it's own, so make sure
+ * to use simple system malloc */
+ if (default_workgroup != NULL)
+ smb_context->workgroup = strdup (default_workgroup);
smb_context->flags = 0;
@@ -670,6 +681,13 @@
op_backend->smb_context = smb_context;
+ /* Convert DEFAULT_WORKGROUP_NAME to real domain */
+ if (op_backend->mounted_server != NULL &&
+ g_ascii_strcasecmp (op_backend->mounted_server, DEFAULT_WORKGROUP_NAME) == 0)
+ op_backend->server = g_strdup (smb_context->workgroup);
+ else
+ op_backend->server = g_strdup (op_backend->mounted_server);
+
icon = NULL;
if (op_backend->server == NULL)
{
@@ -683,7 +701,7 @@
availible on a server (%s is the name of the server) */
display_name = g_strdup_printf (_("Windows shares on %s"), op_backend->server);
browse_mount_spec = g_mount_spec_new ("smb-server");
- g_mount_spec_set (browse_mount_spec, "server", op_backend->server);
+ g_mount_spec_set (browse_mount_spec, "server", op_backend->mounted_server);
icon = "network-server";
}
@@ -701,7 +719,6 @@
g_mount_spec_unref (browse_mount_spec);
g_vfs_job_succeeded (G_VFS_JOB (job));
- g_print ("finished mount\n");
}
static gboolean
@@ -715,8 +732,6 @@
const char *server;
const char *user, *domain;
- g_print ("try_mount\n");
-
if (strcmp (g_mount_spec_get_type (mount_spec), "smb-network") == 0)
server = NULL;
else
@@ -733,7 +748,7 @@
user = g_mount_spec_get (mount_spec, "user");
domain = g_mount_spec_get (mount_spec, "domain");
-
+
if (is_automount &&
((user != NULL) || (domain != NULL)))
{
@@ -745,7 +760,7 @@
op_backend->user = g_strdup (user);
op_backend->domain = g_strdup (domain);
- op_backend->server = g_strdup (server);
+ op_backend->mounted_server = g_strdup (server);
return FALSE;
}
@@ -1158,6 +1173,9 @@
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
+#ifdef HAVE_GCONF
+ GConfClient *gclient;
+#endif
gobject_class->finalize = g_vfs_backend_smb_browse_finalize;
@@ -1174,4 +1192,23 @@
backend_class->try_query_info = try_query_info;
backend_class->enumerate = do_enumerate;
backend_class->try_enumerate = try_enumerate;
+
+#ifdef HAVE_GCONF
+ gclient = gconf_client_get_default ();
+ if (gclient)
+ {
+ char *workgroup;
+
+ workgroup = gconf_client_get_string (gclient,
+ PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL);
+
+ if (workgroup && workgroup[0])
+ default_workgroup = workgroup;
+ else
+ g_free (workgroup);
+
+ g_object_unref (gclient);
+ }
+#endif
+
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]