directory recursion problem

Robin.SOPER at tfeeuk.co.uk Robin.SOPER at tfeeuk.co.uk
Fri Apr 11 15:00:25 GMT 2003


Thanks for the prompt response.

At the risk of seeming like a complete idiot how do I  apply the patch 
below to update my msdfs.c ?

Thanks &Regards

Robin Soper
TotalFinaElf Exploration UK PLC
Crawpeel Road,  Altens,
Aberdeen
AB12 3FG

Tel (01224) 297290





Shirish Kalele <kalele at veritas.com>
10/04/2003 20:44

 
        To:     John P Janosik <jpjanosi at us.ibm.com>
        cc:     Robin.SOPER at tfeeuk.co.uk, <samba-technical at lists.samba.org>
        Subject:        Re: directory recursion problem


John,

You're right. It seems the behaviour Robin is seeing is because the
redirector directly makes deep referral requests when its cached referral
expires. Since your patch fixes deep referrals, it should also fix Robin's
problem.

I'm going to apply this slightly optimized form of your patch to 2.2, 3.0
and HEAD. This should fix both problems.

Thanks,
Shirish

Index: msdfs/msdfs.c
===================================================================
RCS file: /data/cvs/samba/source/msdfs/msdfs.c,v
retrieving revision 1.10.4.30
diff -u -r1.10.4.30 msdfs.c
--- msdfs/msdfs.c                24 Feb 2003 19:35:31 -0000 1.10.4.30
+++ msdfs/msdfs.c                10 Apr 2003 19:34:10 -0000
@@ -218,6 +218,7 @@

                 char *p;
                 fstring reqpath;
+                pstring consumedbuf;

                 if (!dp || !conn) {
                                 DEBUG(1,("resolve_dfs_path: NULL 
dfs_path* or NULL connection_struct*!\n"));
@@ -250,10 +251,13 @@
                                 }
                 }

-                /* also redirect if the parent directory is a dfs link */
+                pstrcpy(consumedbuf, dfspath);
+                trim_string(consumedbuf, NULL, "\\");
+
+                /* redirect if any component in the path is a link */
                 fstrcpy(reqpath, dp->reqpath);
                 p = strrchr(reqpath, '/');
-                if (p) {
+                while (p) {
                                 *p = '\0';
                                 fstrcpy(localpath, conn->connectpath);
                                 fstrcat(localpath, "/");
@@ -268,18 +272,16 @@
                                                 */
                                                 if (consumedcntp) {
                                                                 char *q;
-                                                                pstring 
buf;
- pstrcpy(buf, dfspath);
- trim_string(buf, NULL, "\\");
-                                                                q = 
strrchr(buf, '\\');
+                                                                q = 
strrchr(consumedbuf, '\\');
                                                                 if (q)
  *q = '\0';
- *consumedcntp = strlen(buf);
+ *consumedcntp = strlen(consumedbuf);
                                                                 DEBUG(10, 
("resolve_dfs_path: Path consumed: %d\n", *consumedcntp));
                                                 }

                                                 return True;
                                 }
+                                p = strrchr(reqpath, '/');
                 }

                 return False;
@@ -606,8 +608,7 @@
                 /* Trim pathname sent by client so it begins with only 
one backslash.
                    Two backslashes confuse some dfs clients
                  */
-                while (strlen(pathnamep) > 1 && pathnamep[0] == '\\'
-                       && pathnamep[1] == '\\')
+                while (pathnamep[0] == '\\' && pathnamep[1] == '\\')
                                 pathnamep++;

                 pstrcpy(buf, pathnamep);



On Thu, 10 Apr 2003, John P Janosik wrote:

>
>
>
>
>Shirish -
>
>I agree that Robin's problem is different than the one I posted.  We were
>seeing both problems last summer but after I applied the patch the 
problem
>Robin reported went away on our clients(both Win2k and XP).  I never took
>the time to look into the cause of the directory recursion problem 
because
>it went away.
>
>Thanks,
>
>John Janosik
>
>
>
>
>                      "Shirish Kalele"
>                      <kalele at veritas.c        To: 
<Robin.SOPER at tfeeuk.co.uk>, John P Janosik/Rochester/IBM at IBMUS
>                      om>                      cc: 
<samba-technical at lists.samba.org>
>                                               Subject:  Re: directory 
recursion problem
>                      04/10/2003 12:58
>                      PM
>
>
>
>
>
>
>John,
>
>Apologies for not getting back to you on this, but at the time, I thought
>this was an expensive way to fix what seemed like a corner case and was
>wondering how it could be fixed better. And it must have slipped through.
>I'll make sure to fix it in cvs this time.
>
>I don't think Robin's problem is the same as yours. The last time I'd
>investigated the directory recursion problem he reports, afaicr, I could
>reproduce it with a Windows 2000 based DFS as well, and I concluded the
>problem actually is with the client (probably the Explorer.exe program).
>I'll try and confirm this.
>
>- Shirish
>
>----- Original Message -----
>From: "John P Janosik" <jpjanosi at us.ibm.com>
>To: <Robin.SOPER at tfeeuk.co.uk>
>Cc: <samba-technical at lists.samba.org>
>Sent: Thursday, April 10, 2003 9:47 AM
>Subject: Re: directory recursion problem
>
>
>>
>>
>>
>>
>> Robin -
>>
>> We were having the same problem along with a problem running binaries 
via
>a
>> UNC instead of a mapped drive if the binaries were more than two levels
>> down a tree when the first level was a DFS referral.  I made the
>following
>> patch to Samba to fix the second problem, but we never saw the 
directory
>> recursion problem again after this.  Shirish Kalele said he would take 
a
>> look at applying the patch or something similar, but I never heard back
>and
>> never saw the patch get applied.  Here is a link to my post about the
>> problem:
>> http://lists.samba.org/pipermail/samba-technical/2002-August/038903.html.
>>
>> [rchfs2:root samba-2.2.5]# diff -urN
>> source/msdfs/msdfs.c.origsource/msdfs/msdfs.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:
>Pathconsumed:
>> %d\n", *consumedcntp));
>>                         }
>>                         return True;
>> -               }
>> +              }
>> +              p = strrchr(reqpath, '/');
>>         }
>>         return False;
>>
>>
>> Date: Thu, 10 Apr 2003 09:52:22 +0100
>> From: Robin.SOPER at tfeeuk.co.uk
>> To: samba-technical at samba.org
>> Subject: directory recursion problem
>> Message-ID: 
<OF902C93F9.3D996294-ON80256D04.0030B9D0 at uk.ad.ep.corp.local>
>> Content-Type: text/plain; charset="us-ascii"
>> MIME-Version: 1.0
>> Precedence: list
>> Message: 29
>>
>> Hi,
>>
>> Hopefully you can help me with this one.  I am using Samba 2.2.6 on two
>> Solaris servers . The PC users all see all the shares as being on one
>> system and it implements MSDFS to redirect any shares that are 
physically
>> located on another system to the samba server on that system.  We have
>> been using this config successfully for a good while now, but recently
>> it's been getting more and more use and we are experiencing an
>> intermittent problem - sometimes when the users look in a directory
>> (windows explorer) they see a directory within it with the same, when
>they
>> open that they see a directory within it with the same name etc etc. 
i.e.
>> a kind of recursive directory thing. Meanwhile other users will be 
using
>> the samba shares with no problem. Restarting the PC seems to fix the
>> problem - which maybe seems to suggest it's client related?   However I
>am
>> uncertain whether the problem lies with the WindowsNT4 clients (having 
a
>> problem with DFS maybe) or with the samba server .
>>
>> Can you advise/help?
>>
>> Thanks in advance
>>
>>
>> Robin Soper
>> TotalFinaElf Exploration UK PLC
>> Crawpeel Road,  Altens,
>> Aberdeen
>> AB12 3FG
>>
>> Tel (01224) 297290
>>
>>
>> John Janosik
>>
>
>
>

 

 

 





More information about the samba-technical mailing list