--- source/param/loadparm.c Wed Oct 9 21:17:05 2002 +++ source/param/loadparm.c Mon Oct 14 16:33:08 2002 @@ -386,6 +386,8 @@ BOOL bInheritPerms; BOOL bInheritACLS; BOOL bMSDfsRoot; + BOOL bMSDfsProxy; + char *bMSDfsLinkName; BOOL bUseClientDriver; BOOL bDefaultDevmode; BOOL bNTAclSupport; @@ -508,6 +510,8 @@ False, /* bInheritPerms */ False, /* bInheritACLS */ False, /* bMSDfsRoot */ + False, /* bMSDfsProxy */ + NULL, /* bMSDfsLinkName */ False, /* bUseClientDriver */ False, /* bDefaultDevmode */ True, /* bNTAclSupport */ @@ -1079,6 +1083,8 @@ {"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE}, + {"msdfs proxy", P_BOOL, P_LOCAL, &sDefault.bMSDfsProxy, NULL, NULL, FLAG_SHARE}, + {"msdfs link name", P_STRING, P_LOCAL, &sDefault.bMSDfsLinkName, NULL, NULL, FLAG_SHARE}, {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Winbind options", P_SEP, P_SEPARATOR}, @@ -1730,6 +1736,8 @@ FN_LOCAL_STRING(lp_veto_oplocks, szVetoOplockFiles) FN_LOCAL_STRING(lp_driverlocation, szPrinterDriverLocation) FN_LOCAL_BOOL(lp_msdfs_root, bMSDfsRoot) +FN_LOCAL_BOOL(lp_msdfs_proxy, bMSDfsProxy) +FN_LOCAL_STRING(lp_msdfs_link_name, bMSDfsLinkName) FN_LOCAL_BOOL(lp_autoloaded, autoloaded) FN_LOCAL_BOOL(lp_preexec_close, bPreexecClose) FN_LOCAL_BOOL(lp_rootpreexec_close, bRootpreexecClose) --- source/msdfs/msdfs.c Tue Jul 2 08:34:24 2002 +++ source/msdfs/msdfs.c Mon Oct 14 16:49:57 2002 @@ -600,12 +600,38 @@ int reply_size = 0; char *pathnamep = pathname; + struct connection_struct conns; + struct connection_struct* conn = &conns; + int snum; + pstring conn_path; + struct dfs_path dpi; + + struct junction_map junction2; + parse_dfs_path(pathname, &dpi); + pstrcpy(junction2.service_name, dpi.servicename); + snum = lp_servicenumber(junction2.service_name); + create_conn_struct(conn, snum, conn_path); + + ZERO_STRUCT(junction); /* get the junction entry */ if (!pathnamep) return -1; + if (lp_msdfs_proxy(SNUM(conn))) { + DEBUG(10,("running in proxy mode\n")); + pstrcpy(pathnamep, "\\"); + pstrcat(pathnamep, dpi.hostname); + pstrcat(pathnamep, "\\"); + pstrcat(pathnamep, dpi.servicename); + pstrcat(pathnamep, "\\"); + pstrcat(pathnamep, (char *) lp_msdfs_link_name(SNUM(conn))); + } else { + DEBUG(10,("running in normal mode\n")); + } + + /* Trim pathname sent by client so it begins with only one backslash. Two backslashes confuse some dfs clients */ @@ -631,6 +657,17 @@ } } + if ( lp_msdfs_proxy(SNUM(conn)) ) { + DEBUG(10,("running in proxy mode\n")); + pstrcpy ( pathnamep, "\\" ); + pstrcat ( pathnamep, dpi.hostname); + pstrcat ( pathnamep, "\\" ); + pstrcat ( pathnamep, dpi.servicename); + } else { + DEBUG(10,("running in normal mode\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)