summaryrefslogtreecommitdiff
path: root/source3/smbd/dir.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-01-18 06:19:24 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:17:16 -0500
commitfd37f98158161406229b728a7c767121a30e254f (patch)
treebcc2ecea864702f61d56ccb1e2b10f7fa3672cc6 /source3/smbd/dir.c
parenta99840e59ee4bd27fd4f2cf8b465dd0f215ea067 (diff)
downloadsamba-fd37f98158161406229b728a7c767121a30e254f.tar.gz
samba-fd37f98158161406229b728a7c767121a30e254f.tar.bz2
samba-fd37f98158161406229b728a7c767121a30e254f.zip
r20873: Some correctness fixes w.r.t. Samba4 torture BASE-DELETE.
Allow us to correctly refuse to set delete on close on a non-empty directory. There are still some delete-on-close wrinkles to be fixed, but I understand how to do that better now. I'll fix this tomorrow. Jeremy. (This used to be commit 029635885825a5562e7974a6f5675cce3bf1b5dc)
Diffstat (limited to 'source3/smbd/dir.c')
-rw-r--r--source3/smbd/dir.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index 7be5c03f1b..98356882aa 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -383,7 +383,7 @@ static void dptr_close_oldest(BOOL old)
****************************************************************************/
NTSTATUS dptr_create(connection_struct *conn, pstring path, BOOL old_handle, BOOL expect_close,uint16 spid,
- const char *wcard, BOOL wcard_has_wild, uint32 attr, int *dptr_hnd_ret)
+ const char *wcard, BOOL wcard_has_wild, uint32 attr, struct dptr_struct **dptr_ret)
{
struct dptr_struct *dptr = NULL;
struct smb_Dir *dir_hnd;
@@ -392,8 +392,6 @@ NTSTATUS dptr_create(connection_struct *conn, pstring path, BOOL old_handle, BOO
DEBUG(5,("dptr_create dir=%s\n", path));
- *dptr_hnd_ret = -1;
-
if (!wcard) {
return NT_STATUS_INVALID_PARAMETER;
}
@@ -517,9 +515,8 @@ NTSTATUS dptr_create(connection_struct *conn, pstring path, BOOL old_handle, BOO
DEBUG(3,("creating new dirptr %d for path %s, expect_close = %d\n",
dptr->dnum,path,expect_close));
- conn->dirptr = dptr;
+ *dptr_ret = dptr;
- *dptr_hnd_ret = dptr->dnum;
return NT_STATUS_OK;
}
@@ -530,6 +527,7 @@ NTSTATUS dptr_create(connection_struct *conn, pstring path, BOOL old_handle, BOO
int dptr_CloseDir(struct dptr_struct *dptr)
{
+ DLIST_REMOVE(dirptrs, dptr);
return CloseDir(dptr->dir_hnd);
}
@@ -548,6 +546,11 @@ BOOL dptr_has_wild(struct dptr_struct *dptr)
return dptr->has_wild;
}
+int dptr_dnum(struct dptr_struct *dptr)
+{
+ return dptr->dnum;
+}
+
/****************************************************************************
Return the next visible file name, skipping veto'd and invisible files.
****************************************************************************/