Hi John, Yes, the msdfs code only tries the entire path and the path one level up when asked for a dfs referral. There didn't seem to be a case where the redirector ever jumped straight to a path without resolving each component first (which would result in a correct referral). But it looks like it does.. I'll try and reproduce this here, take a look at the patch and apply it or a variant to 2_2 and HEAD.
Thanks, Shirish ----- Original Message ----- From: "John P Janosik" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, August 21, 2002 8:34 AM Subject: Problem with msdfs with Samba 2.2.5 and 3.0 alpha19 > Hello, > > I think we have found a problem with Samba's msdfs support. When we try to > directly access a directory for the first time via a msdfs link from a > Windows XP or 2000 client the Samba server does not return the referral if > the link is more than two levels back in the path. Here is an example: > > Win2000 server with a Dfs root \\rchn20dc\home, link technet points to a > Samba server: > C:\>dir \\rchn20dc\home\technet\tn0208\technet > Volume in drive \\rchn20dc\home has no label. > Volume Serial Number is 5406-067F > > Directory of \\rchn20dc\home\technet\tn0208\technet > > 08/06/2002 02:37 PM <DIR> . > . > . > 07/31/2002 07:00 PM 11,291,797 TN0208.TOC > 5 File(s) 643,464,418 bytes > 2 Dir(s) 233,144,582,144 bytes free > > > Samba 2.2.5 or 3.0 alpha19 msdfs root with same link: > C:\>dir \\rchfs\pub\technet\tn0208\technet > Volume in drive \\rchfs\pub is pub > Volume Serial Number is 0514-0112 > > Directory of \\rchfs\pub\technet\tn0208 > > 08/06/2002 02:34 PM <DIR> . > . > . > 08/06/2002 02:37 PM <DIR> TECHNET > 20 File(s) 6,407,854 bytes > 4 Dir(s) 233,144,582,144 bytes free > > After looking at the ethereal traces to a Samba 2.2.5, Samba 3.0 alpha19, > and Win2k server I see that Win2k returns the referral for \\rcn20dc\pub > when sent a get_dfs_referral for \rchn20dc\home\technet\tn0208\technet. > The Samba servers do not. The XP client then sends a second > get_dfs_referral to the Samba server, this time leaving off the last > directory in the path and then displays the directory one level back from > what was asked for. I have tried the same test from a Windows 2000 client > and the dir command to the Samba server just fails, it does not send the > second get_dfs_referral. > > I made the following change to work around the problem. Can anyone tell > me if this is OK: > [rchfs2:root samba-2.2.5]# diff -urN source/msdfs/msdfs.c.orig > source/msdfs/msdf > s.c > --- source/msdfs/msdfs.c.orig Tue Jun 18 20:13:44 2002 > +++ source/msdfs/msdfs.c Wed Aug 21 10:20:20 2002 > @@ -215,7 +215,7 @@ > BOOL* self_referralp, int* consumedcntp) > { > fstring localpath; > - > + int levels; > char *p; > fstring reqpath; > > @@ -253,7 +253,7 @@ > /* also redirect if the parent directory is a dfs link */ > fstrcpy(reqpath, dp->reqpath); > p = strrchr(reqpath, '/'); > - if (p) { > + for(levels=1; p; levels++) { > *p = '\0'; > fstrcpy(localpath, conn->connectpath); > fstrcat(localpath, "/"); > @@ -267,19 +267,23 @@ > the path consumed > */ > if (consumedcntp) { > - char *q; > - pstring buf; > + char *q; > + pstring buf; > + int j; > safe_strcpy(buf, dfspath, sizeof(buf)); > trim_string(buf, NULL, "\\"); > - q = strrchr(buf, '\\'); > - if (q) > - *q = '\0'; > + for(j=0; j<levels; j++) { > + q = strrchr(buf, '\\'); > + if (q) > + *q = '\0'; > + } > *consumedcntp = strlen(buf); > DEBUG(10, ("resolve_dfs_path: Path > consumed: %d\ > n", *consumedcntp)); > } > > return True; > - } > + } > + p = strrchr(reqpath, '/'); > } > > return False; > > Thanks, > > John Janosik > [EMAIL PROTECTED] >