r10559: jra's looping directory fix (BUG 3065)
authorGerald Carter <jerry@samba.org>
Tue, 27 Sep 2005 20:44:54 +0000 (20:44 +0000)
committerGerald Carter <jerry@samba.org>
Tue, 27 Sep 2005 20:44:54 +0000 (20:44 +0000)
source/smbd/dir.c

index 02e15d222a9c26c3e10d59d3ec21a8c791422d1e..70a3b81ad69a3ffa50a093908f5bf4cd7b8f2f94 100644 (file)
@@ -1148,8 +1148,23 @@ void RewindDir(struct smb_Dir *dirp, long *poffset)
 void SeekDir(struct smb_Dir *dirp, long offset)
 {
        if (offset != dirp->offset) {
-               if (offset == START_OF_DIRECTORY_OFFSET || offset == DOT_DOT_DIRECTORY_OFFSET) {
+               if (offset == START_OF_DIRECTORY_OFFSET) {
                        RewindDir(dirp, &offset);
+                       /* 
+                        * Ok we should really set the file number here
+                        * to 1 to enable ".." to be returned next. Trouble
+                        * is I'm worried about callers using SeekDir(dirp,0)
+                        * as equivalent to RewindDir(). So leave this alone
+                        * for now.
+                        */
+               } else if  (offset == DOT_DOT_DIRECTORY_OFFSET) {
+                       RewindDir(dirp, &offset);
+                       /*
+                        * Set the file number to 2 - we want to get the first
+                        * real file entry (the one we return after "..")
+                        * on the next ReadDir.
+                        */
+                       dirp->file_number = 2;
                } else if (offset == END_OF_DIRECTORY_OFFSET) {
                        ; /* Don't seek in this case. */
                } else {