From 741b0a97bbf3e2f7ed3292b9508b39edb00d97c1 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 15 Jun 2005 18:37:34 +0000 Subject: r7617: Fix for bug #2801 - delete veto files was broken with the new large directory code. Jeremy. (This used to be commit f397cc08b5628913af4d7f9c2c6d20c778e5d8ca) --- source3/smbd/dir.c | 18 +++++++++++++++++- source3/smbd/reply.c | 4 ++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index b9c6cf8797..072f396b8c 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -1110,6 +1110,18 @@ const char *ReadDirName(struct smb_Dir *dirp, long *poffset) return NULL; } +/******************************************************************* + 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. ********************************************************************/ @@ -1117,7 +1129,11 @@ const char *ReadDirName(struct smb_Dir *dirp, long *poffset) 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; } } diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index f97bedef9b..c9adbf8fcf 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -3768,7 +3768,7 @@ BOOL rmdir_internals(connection_struct *conn, char *directory) 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 @@ BOOL rmdir_internals(connection_struct *conn, char *directory) } if(all_veto_files) { - SeekDir(dir_hnd,dirpos); + RewindDir(dir_hnd); while ((dname = ReadDirName(dir_hnd,&dirpos))) { pstring fullname; -- cgit