Call check_parent_access() on readdir.
authorJeremy Allison <jra@samba.org>
Mon, 31 Oct 2011 19:38:20 +0000 (12:38 -0700)
committerJeremy Allison <jra@samba.org>
Tue, 1 Nov 2011 23:38:14 +0000 (16:38 -0700)
source3/smbd/dir.c

index cc7488681049c5465f00c16bbbd33164bbc78294..18c5935fdba02285e40e091a5d1231243fcbff90 100644 (file)
@@ -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 {