From 8701eb8db2ba534f5666c1b1187200d143f0c3bc Mon Sep 17 00:00:00 2001 From: Shirish Kalele Date: Fri, 27 Dec 2002 20:08:35 +0000 Subject: 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) --- source3/msdfs/msdfs.c | 22 +++++++++++++++++++++- source3/param/loadparm.c | 4 ++++ 2 files changed, 25 insertions(+), 1 deletion(-) (limited to 'source3') 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) -- cgit