summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/smbd/dir.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index cc74886810..18c5935fdb 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -427,6 +427,7 @@ NTSTATUS dptr_create(connection_struct *conn, files_struct *fsp,
struct smbd_server_connection *sconn = conn->sconn;
struct dptr_struct *dptr = NULL;
struct smb_Dir *dir_hnd;
+ NTSTATUS status;
if (fsp && fsp->is_directory && fsp->fh->fd != -1) {
path = fsp->fsp_name->base_name;
@@ -443,6 +444,18 @@ NTSTATUS dptr_create(connection_struct *conn, files_struct *fsp,
return NT_STATUS_INVALID_PARAMETER;
}
+ status = check_parent_access(conn,
+ path,
+ SEC_DIR_LIST,
+ NULL);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(5,("dptr_create: parent access check for path "
+ "%s failed with %s\n",
+ path,
+ nt_errstr(status)));
+ return status;
+ }
+
if (fsp) {
dir_hnd = OpenDir_fsp(NULL, conn, fsp, wcard, attr);
} else {