Index: smbd/reply.c =================================================================== --- smbd/reply.c (revision 7612) +++ smbd/reply.c (working copy) @@ -3768,7 +3768,7 @@ struct smb_Dir *dir_hnd = OpenDir(conn, directory); if(dir_hnd != NULL) { - long dirpos = TellDir(dir_hnd); + long dirpos = 0; while ((dname = ReadDirName(dir_hnd,&dirpos))) { if((strcmp(dname, ".") == 0) || (strcmp(dname, "..")==0)) continue; @@ -3781,7 +3781,7 @@ } if(all_veto_files) { - SeekDir(dir_hnd,dirpos); + RewindDir(dir_hnd); while ((dname = ReadDirName(dir_hnd,&dirpos))) { pstring fullname; Index: smbd/dir.c =================================================================== --- smbd/dir.c (revision 7612) +++ smbd/dir.c (working copy) @@ -1111,13 +1111,29 @@ } /******************************************************************* + Rewind to the start. +********************************************************************/ + +void RewindDir(struct smb_Dir *dirp, long *poffset) +{ + SMB_VFS_REWINDDIR(dirp->conn, dirp->dir); + dirp->file_number = 0; + dirp->offset = 0; + *poffset = 0; +} + +/******************************************************************* Seek a dir. ********************************************************************/ void SeekDir(struct smb_Dir *dirp, long offset) { if (offset != dirp->offset) { - SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset); + if (offset == 0) { + RewindDir(dirp, &offset); + } else { + SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset); + } dirp->offset = offset; } }