summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorShirish Kalele <kalele@samba.org>2002-12-27 20:08:35 +0000
committerShirish Kalele <kalele@samba.org>2002-12-27 20:08:35 +0000
commit8701eb8db2ba534f5666c1b1187200d143f0c3bc (patch)
treecd9f241630617406419b3f7e29b34c1e927632ca /source3
parentdab0251509ce9bc4eadf49c3def4822a56efdc70 (diff)
downloadsamba-8701eb8db2ba534f5666c1b1187200d143f0c3bc.tar.gz
samba-8701eb8db2ba534f5666c1b1187200d143f0c3bc.tar.bz2
samba-8701eb8db2ba534f5666c1b1187200d143f0c3bc.zip
Add msdfs proxy functionality; a CIFS share can directly be a stand-in for
another share, and when clients connect to the first share, they will be redirected to the proxied share. (This used to be commit 514f548b183b73e1970989d47fb9e6a87e440748)
Diffstat (limited to 'source3')
-rw-r--r--source3/msdfs/msdfs.c22
-rw-r--r--source3/param/loadparm.c4
2 files changed, 25 insertions, 1 deletions
diff --git a/source3/msdfs/msdfs.c b/source3/msdfs/msdfs.c
index 3e66c1c10c..ef7a472011 100644
--- a/source3/msdfs/msdfs.c
+++ b/source3/msdfs/msdfs.c
@@ -381,6 +381,26 @@ BOOL get_referred_path(char *pathname, struct junction_map* jn,
return False;
}
+ if (*lp_msdfs_proxy(snum) != '\0') {
+ struct referral* ref;
+ jn->referral_count = 1;
+ if ((ref = (struct referral*) malloc(sizeof(struct referral)))
+ == NULL) {
+ DEBUG(0, ("malloc failed for referral\n"));
+ return False;
+ }
+
+ pstrcpy(ref->alternate_path, lp_msdfs_proxy(snum));
+ if (dp.reqpath[0] != '\0')
+ pstrcat(ref->alternate_path, dp.reqpath);
+ ref->proximity = 0;
+ ref->ttl = REFERRAL_TTL;
+ jn->referral_list = ref;
+ if (consumedcntp)
+ *consumedcntp = strlen(pathname);
+ return True;
+ }
+
/* If not remote & not a self referral, return False */
if (!resolve_dfs_path(pathname, &dp, conn, False,
&jn->referral_list, &jn->referral_count,
@@ -630,7 +650,7 @@ int setup_dfs_referral(char* pathname, int max_referral_level, char** ppdata)
dbgtext(".\n");
}
}
-
+
/* create the referral depeding on version */
DEBUG(10,("max_referral_level :%d\n",max_referral_level));
if(max_referral_level<2 || max_referral_level>3)
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 42de1c62bf..ba6e3f9e47 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -317,6 +317,7 @@ typedef struct
char *szVfsObjectFile;
char *szVfsOptions;
char *szVfsPath;
+ char *szMSDfsProxy;
int iMinPrintSpace;
int iMaxPrintJobs;
int iWriteCacheSize;
@@ -435,6 +436,7 @@ static service sDefault = {
NULL, /* vfs object */
NULL, /* vfs options */
NULL, /* vfs path */
+ NULL, /* szMSDfsProxy */
0, /* iMinPrintSpace */
1000, /* iMaxPrintJobs */
0, /* iWriteCacheSize */
@@ -1075,6 +1077,7 @@ static struct parm_struct parm_table[] = {
{"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE},
+ {"msdfs proxy", P_STRING, P_LOCAL, &sDefault.szMSDfsProxy, NULL, NULL, FLAG_SHARE},
{"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"Winbind options", P_SEP, P_SEPARATOR},
@@ -1721,6 +1724,7 @@ FN_LOCAL_STRING(lp_fstype, fstype)
FN_LOCAL_STRING(lp_vfsobj, szVfsObjectFile)
FN_LOCAL_STRING(lp_vfs_options, szVfsOptions)
FN_LOCAL_STRING(lp_vfs_path, szVfsPath)
+FN_LOCAL_STRING(lp_msdfs_proxy, szMSDfsProxy)
static FN_LOCAL_STRING(lp_volume, volume)
FN_LOCAL_STRING(lp_mangled_map, szMangledMap)
FN_LOCAL_STRING(lp_veto_files, szVetoFiles)