summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2005-06-15 18:37:34 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:57:16 -0500
commit741b0a97bbf3e2f7ed3292b9508b39edb00d97c1 (patch)
tree4d87834f1c6a50e4908f9355eca26fee35f920e4
parentf2f115c2a203c1a7b685ff3795c9e342499c1cc9 (diff)
downloadsamba-741b0a97bbf3e2f7ed3292b9508b39edb00d97c1.tar.gz
samba-741b0a97bbf3e2f7ed3292b9508b39edb00d97c1.tar.bz2
samba-741b0a97bbf3e2f7ed3292b9508b39edb00d97c1.zip
r7617: Fix for bug #2801 - delete veto files was broken with the new
large directory code. Jeremy. (This used to be commit f397cc08b5628913af4d7f9c2c6d20c778e5d8ca)
-rw-r--r--source3/smbd/dir.c18
-rw-r--r--source3/smbd/reply.c4
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
@@ -1111,13 +1111,29 @@ const char *ReadDirName(struct smb_Dir *dirp, long *poffset)
}
/*******************************************************************
+ 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;
}
}
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;