[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Wed Jul 24 08:58:02 UTC 2019


The branch, master has been updated
       via  4db886db066 s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
       via  3d95064ceba s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
       via  a5b876f3dbd s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
       via  ec072f1a971 s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
       via  cc4ac86b950 s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
       via  8ad519c4089 s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
       via  8e65157edf4 s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
       via  79eae9e38ac s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
       via  eb5fa8ac846 s3: smbd: Use a separate simple destructor for the OpenDir() codepath.
       via  d1441089722 s3: smbd: Move the setting of the destructor of struct smb_Dir * up two levels.
       via  41c94b8b1f0 s3: smbd: OpenDir() is merely a wrapper around open_dir_safely().
      from  9d2fd082498 netcmd: Better error message for backup with no RID pool

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 4db886db066c53386aaa16a415c081bd50193af9
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:55:58 2019 -0700

    s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
    
    Fixes SearchDir(). No logic changes.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Wed Jul 24 08:57:05 UTC 2019 on sn-devel-184

commit 3d95064ceba82a43f6edd5c4b250a22461986480
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:53:40 2019 -0700

    s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
    
    Fixes TellDir(). No logic changes.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit a5b876f3dbdd2dc17407ec08340b5d192b374098
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:52:41 2019 -0700

    s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
    
    Fixes RewindDir(). No logic changes.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit ec072f1a971faba9c140bae0f7792e5fc154189f
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:51:07 2019 -0700

    s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
    
    Fixes ReadDirName(). No logic changes.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit cc4ac86b950f443b4dd23ca997d872549c80a484
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:47:31 2019 -0700

    s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
    
    Fixes OpenDir_fsp(). No logic changes.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 8ad519c4089df71a9fc9191cead68e4eabf844f1
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:44:56 2019 -0700

    s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
    
    Fixes OpenDir_internal(). No logic changes.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 8e65157edf4fe5a9e7c4abdd6c0f2a8d5b8c43b2
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:42:45 2019 -0700

    s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
    
    Fixes DirCacheAdd(). No logic changes.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 79eae9e38ac2ef967671b43fc2eb76d8b195eee8
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:40:04 2019 -0700

    s3: smbd: Naming consistency. Change all uses of struct smb_Dir * variables to be dir_hnd.
    
    Fixes smb_Dir_destructor(). No logic changes.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit eb5fa8ac8465e621c95da1f03b68da8aae73f6b0
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:31:46 2019 -0700

    s3: smbd: Use a separate simple destructor for the OpenDir() codepath.
    
    This will help greatly in understanding the code changes later.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit d1441089722b7985df417494f6542e6560e99330
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 09:11:25 2019 -0700

    s3: smbd: Move the setting of the destructor of struct smb_Dir * up two levels.
    
    Previously, open_dir_safely() called OpenDir_internal() which
    set the destructor.
    
    Move setting the destructor into the callers of open_dir_safely()
    as this will allow us to have different destructors for handle-based
    calls.
    
    The reason this is important is that I have a follow up patchset
    that depends on this which makes all client directory enumerations
    handle-based, calling OpenDir_fsp() only, and so the destructor there
    will take care of the fsp back pointer.
    
    Trying to keep a common destructor for handle-based and non-handle
    based calls broke my brain when trying to separate the handle-based
    calls from the non-handle based ones in my later patchset.
    
    NB. The change in OpenDir_fsp() isn't a logic change as instead
    of doing an early return from a function that sets the destructor,
    we now fallthrough to setting the destructor then return, which
    is identical.
    
    Eventually the whole codepath using the fallback for non-handle
    opens inside dptr_create() will go away and this simplifies the
    code immensely. Some short term pain for long-term gain :-).
    
    Added doxygen documentation as requested.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 41c94b8b1f0ba312711b5b6c2ba2f27c696b445b
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 17 08:56:49 2019 -0700

    s3: smbd: OpenDir() is merely a wrapper around open_dir_safely().
    
    Preparatory work.
    
    Separate these out internal to source3/smbd/dir.c so I can
    give the internal and external uses separate destructor functions
    to allow all client requested directory enumeration to move to handle
    based functions.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/dir.c   | 235 +++++++++++++++++++++++++++++++++------------------
 source3/smbd/proto.h |   4 +-
 2 files changed, 154 insertions(+), 85 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index 2c59cb898ec..7a845e9a2d0 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -83,7 +83,14 @@ static struct smb_Dir *OpenDir_fsp(TALLOC_CTX *mem_ctx, connection_struct *conn,
 			const char *mask,
 			uint32_t attr);
 
-static void DirCacheAdd(struct smb_Dir *dirp, const char *name, long offset);
+static void DirCacheAdd(struct smb_Dir *dir_hnd, const char *name, long offset);
+
+static struct smb_Dir *open_dir_safely(TALLOC_CTX *ctx,
+					connection_struct *conn,
+					const struct smb_filename *smb_dname,
+					const char *wcard,
+					uint32_t attr);
+static int smb_Dir_destructor(struct smb_Dir *dir_hnd);
 
 #define INVALID_DPTR_KEY (-3)
 
@@ -334,7 +341,11 @@ static struct smb_Dir *open_dir_with_privilege(connection_struct *conn,
 		goto out;
 	}
 
-	dir_hnd = OpenDir(NULL, conn, smb_fname_cwd, wcard, attr);
+	dir_hnd = open_dir_safely(NULL, conn, smb_fname_cwd, wcard, attr);
+
+	if (dir_hnd != NULL) {
+		talloc_set_destructor(dir_hnd, smb_Dir_destructor);
+	}
 
   out:
 
@@ -431,12 +442,18 @@ NTSTATUS dptr_create(connection_struct *conn,
 						wcard,
 						attr);
 		} else {
-			dir_hnd = OpenDir(NULL,
+			dir_hnd = open_dir_safely(NULL,
 					conn,
 					smb_dname_cp,
 					wcard,
 					attr);
+			if (dir_hnd != NULL) {
+				talloc_set_destructor(dir_hnd,
+					smb_Dir_destructor);
+			}
 		}
+
+
 		TALLOC_FREE(smb_dname_cp);
 	}
 
@@ -1495,22 +1512,23 @@ bool is_visible_file(connection_struct *conn, const char *dir_path,
 	return ret;
 }
 
-static int smb_Dir_destructor(struct smb_Dir *dirp)
+static int smb_Dir_destructor(struct smb_Dir *dir_hnd)
 {
-	if (dirp->dir != NULL) {
-		SMB_VFS_CLOSEDIR(dirp->conn,dirp->dir);
-		if (dirp->fsp != NULL) {
+	if (dir_hnd->dir != NULL) {
+		SMB_VFS_CLOSEDIR(dir_hnd->conn, dir_hnd->dir);
+		if (dir_hnd->fsp != NULL) {
 			/*
 			 * The SMB_VFS_CLOSEDIR above
 			 * closes the underlying fd inside
 			 * dirp->fsp.
 			 */
-			dirp->fsp->fh->fd = -1;
-			if (dirp->fsp->dptr != NULL) {
-				SMB_ASSERT(dirp->fsp->dptr->dir_hnd == dirp);
-				dirp->fsp->dptr->dir_hnd = NULL;
+			dir_hnd->fsp->fh->fd = -1;
+			if (dir_hnd->fsp->dptr != NULL) {
+				SMB_ASSERT(dir_hnd->fsp->dptr->dir_hnd ==
+					dir_hnd);
+				dir_hnd->fsp->dptr->dir_hnd = NULL;
 			}
-			dirp->fsp = NULL;
+			dir_hnd->fsp = NULL;
 		}
 	}
 	return 0;
@@ -1526,22 +1544,22 @@ static struct smb_Dir *OpenDir_internal(TALLOC_CTX *mem_ctx,
 			const char *mask,
 			uint32_t attr)
 {
-	struct smb_Dir *dirp = talloc_zero(mem_ctx, struct smb_Dir);
+	struct smb_Dir *dir_hnd = talloc_zero(mem_ctx, struct smb_Dir);
 
-	if (!dirp) {
+	if (!dir_hnd) {
 		return NULL;
 	}
 
-	dirp->dir = SMB_VFS_OPENDIR(conn, smb_dname, mask, attr);
+	dir_hnd->dir = SMB_VFS_OPENDIR(conn, smb_dname, mask, attr);
 
-	if (!dirp->dir) {
+	if (!dir_hnd->dir) {
 		DEBUG(5,("OpenDir: Can't open %s. %s\n",
 			smb_dname->base_name,
 			strerror(errno) ));
 		goto fail;
 	}
 
-	dirp->conn = conn;
+	dir_hnd->conn = conn;
 
 	if (!conn->sconn->using_smb2) {
 		/*
@@ -1550,21 +1568,47 @@ static struct smb_Dir *OpenDir_internal(TALLOC_CTX *mem_ctx,
 		 * position (unless it's told to restart or close-and-reopen the
 		 * listing).
 		 */
-		dirp->name_cache_size = lp_directory_name_cache_size(SNUM(conn));
+		dir_hnd->name_cache_size =
+			lp_directory_name_cache_size(SNUM(conn));
 	}
 
-	talloc_set_destructor(dirp, smb_Dir_destructor);
-
-	return dirp;
+	return dir_hnd;
 
   fail:
-	TALLOC_FREE(dirp);
+	TALLOC_FREE(dir_hnd);
 	return NULL;
 }
 
-/****************************************************************************
- Open a directory handle by pathname, ensuring it's under the share path.
-****************************************************************************/
+/**
+ * @brief Open a directory handle by pathname, ensuring it's under the share path.
+ *
+ * First stores the $cwd, then changes directory to the passed in pathname
+ * uses check_name() to ensure this is under the connection struct share path,
+ * then operates on a pathname of "." to ensure we're in the same place.
+ *
+ * The returned struct smb_Dir * should have a talloc destrctor added to
+ * ensure that when the struct is freed the internal POSIX DIR * pointer
+ * is closed.
+ *
+ * @code
+ *
+ * static int sample_smb_Dir_destructor(struct smb_Dir *dirp)
+ * {
+ *     SMB_VFS_CLOSEDIR(dirp->conn,dirp->dir);
+ * }
+ * ..
+ *     struct smb_Dir *dir_hnd = open_dir_safely(mem_ctx,
+ *                              conn,
+ *                              smb_dname,
+ *                              mask,
+ *                              attr);
+ *      if (dir_hnd == NULL) {
+ *              return NULL;
+ *      }
+ *      talloc_set_destructor(dir_hnd, smb_Dir_destructor);
+ * ..
+ * @endcode
+ */
 
 static struct smb_Dir *open_dir_safely(TALLOC_CTX *ctx,
 					connection_struct *conn,
@@ -1621,6 +1665,7 @@ static struct smb_Dir *open_dir_safely(TALLOC_CTX *ctx,
 	dir_hnd->dir_smb_fname = cp_smb_filename(dir_hnd, smb_dname);
 	if (!dir_hnd->dir_smb_fname) {
 		TALLOC_FREE(dir_hnd);
+		SMB_VFS_CLOSEDIR(conn, dir_hnd->dir);
 		errno = ENOMEM;
 	}
 
@@ -1631,16 +1676,33 @@ static struct smb_Dir *open_dir_safely(TALLOC_CTX *ctx,
 	return dir_hnd;
 }
 
+/*
+ * Simple destructor for OpenDir() use. Don't need to
+ * care about fsp back pointer as we know we have never
+ * set it in the OpenDir() code path.
+ */
+
+static int smb_Dir_OpenDir_destructor(struct smb_Dir *dir_hnd)
+{
+	SMB_VFS_CLOSEDIR(dir_hnd->conn, dir_hnd->dir);
+	return 0;
+}
+
 struct smb_Dir *OpenDir(TALLOC_CTX *mem_ctx, connection_struct *conn,
 			const struct smb_filename *smb_dname,
 			const char *mask,
 			uint32_t attr)
 {
-	return open_dir_safely(mem_ctx,
+	struct smb_Dir *dir_hnd = open_dir_safely(mem_ctx,
 				conn,
 				smb_dname,
 				mask,
 				attr);
+	if (dir_hnd == NULL) {
+		return NULL;
+	}
+	talloc_set_destructor(dir_hnd, smb_Dir_OpenDir_destructor);
+	return dir_hnd;
 }
 
 /*******************************************************************
@@ -1652,9 +1714,9 @@ static struct smb_Dir *OpenDir_fsp(TALLOC_CTX *mem_ctx, connection_struct *conn,
 			const char *mask,
 			uint32_t attr)
 {
-	struct smb_Dir *dirp = talloc_zero(mem_ctx, struct smb_Dir);
+	struct smb_Dir *dir_hnd = talloc_zero(mem_ctx, struct smb_Dir);
 
-	if (!dirp) {
+	if (!dir_hnd) {
 		goto fail;
 	}
 
@@ -1668,7 +1730,7 @@ static struct smb_Dir *OpenDir_fsp(TALLOC_CTX *mem_ctx, connection_struct *conn,
 		goto fail;
 	}
 
-	dirp->conn = conn;
+	dir_hnd->conn = conn;
 
 	if (!conn->sconn->using_smb2) {
 		/*
@@ -1677,44 +1739,49 @@ static struct smb_Dir *OpenDir_fsp(TALLOC_CTX *mem_ctx, connection_struct *conn,
 		 * position (unless it's told to restart or close-and-reopen the
 		 * listing).
 		 */
-		dirp->name_cache_size = lp_directory_name_cache_size(SNUM(conn));
+		dir_hnd->name_cache_size =
+			lp_directory_name_cache_size(SNUM(conn));
 	}
 
-	dirp->dir_smb_fname = cp_smb_filename(dirp, fsp->fsp_name);
-	if (!dirp->dir_smb_fname) {
+	dir_hnd->dir_smb_fname = cp_smb_filename(dir_hnd, fsp->fsp_name);
+	if (!dir_hnd->dir_smb_fname) {
 		errno = ENOMEM;
 		goto fail;
 	}
 
-	dirp->dir = SMB_VFS_FDOPENDIR(fsp, mask, attr);
-	if (dirp->dir != NULL) {
-		dirp->fsp = fsp;
+	dir_hnd->dir = SMB_VFS_FDOPENDIR(fsp, mask, attr);
+	if (dir_hnd->dir != NULL) {
+		dir_hnd->fsp = fsp;
 	} else {
 		DEBUG(10,("OpenDir_fsp: SMB_VFS_FDOPENDIR on %s returned "
 			"NULL (%s)\n",
-			dirp->dir_smb_fname->base_name,
+			dir_hnd->dir_smb_fname->base_name,
 			strerror(errno)));
 		if (errno != ENOSYS) {
 			goto fail;
 		}
 	}
 
-	if (dirp->dir == NULL) {
+	if (dir_hnd->dir == NULL) {
 		/* FDOPENDIR is not supported. Use OPENDIR instead. */
-		TALLOC_FREE(dirp);
-		return open_dir_safely(mem_ctx,
+		TALLOC_FREE(dir_hnd);
+		dir_hnd = open_dir_safely(mem_ctx,
 					conn,
 					fsp->fsp_name,
 					mask,
 					attr);
+		if (dir_hnd == NULL) {
+			errno = ENOMEM;
+			goto fail;
+		}
 	}
 
-	talloc_set_destructor(dirp, smb_Dir_destructor);
+	talloc_set_destructor(dir_hnd, smb_Dir_destructor);
 
-	return dirp;
+	return dir_hnd;
 
   fail:
-	TALLOC_FREE(dirp);
+	TALLOC_FREE(dir_hnd);
 	return NULL;
 }
 
@@ -1725,38 +1792,38 @@ static struct smb_Dir *OpenDir_fsp(TALLOC_CTX *mem_ctx, connection_struct *conn,
  Don't check for veto or invisible files.
 ********************************************************************/
 
-const char *ReadDirName(struct smb_Dir *dirp, long *poffset,
+const char *ReadDirName(struct smb_Dir *dir_hnd, long *poffset,
 			SMB_STRUCT_STAT *sbuf, char **ptalloced)
 {
 	const char *n;
 	char *talloced = NULL;
-	connection_struct *conn = dirp->conn;
+	connection_struct *conn = dir_hnd->conn;
 
 	/* Cheat to allow . and .. to be the first entries returned. */
 	if (((*poffset == START_OF_DIRECTORY_OFFSET) ||
-	     (*poffset == DOT_DOT_DIRECTORY_OFFSET)) && (dirp->file_number < 2))
+	     (*poffset == DOT_DOT_DIRECTORY_OFFSET)) && (dir_hnd->file_number < 2))
 	{
-		if (dirp->file_number == 0) {
+		if (dir_hnd->file_number == 0) {
 			n = ".";
-			*poffset = dirp->offset = START_OF_DIRECTORY_OFFSET;
+			*poffset = dir_hnd->offset = START_OF_DIRECTORY_OFFSET;
 		} else {
 			n = "..";
-			*poffset = dirp->offset = DOT_DOT_DIRECTORY_OFFSET;
+			*poffset = dir_hnd->offset = DOT_DOT_DIRECTORY_OFFSET;
 		}
-		dirp->file_number++;
+		dir_hnd->file_number++;
 		*ptalloced = NULL;
 		return n;
 	}
 
 	if (*poffset == END_OF_DIRECTORY_OFFSET) {
-		*poffset = dirp->offset = END_OF_DIRECTORY_OFFSET;
+		*poffset = dir_hnd->offset = END_OF_DIRECTORY_OFFSET;
 		return NULL;
 	}
 
 	/* A real offset, seek to it. */
-	SeekDir(dirp, *poffset);
+	SeekDir(dir_hnd, *poffset);
 
-	while ((n = vfs_readdirname(conn, dirp->dir, sbuf, &talloced))) {
+	while ((n = vfs_readdirname(conn, dir_hnd->dir, sbuf, &talloced))) {
 		/* Ignore . and .. - we've already returned them. */
 		if (*n == '.') {
 			if ((n[1] == '\0') || (n[1] == '.' && n[2] == '\0')) {
@@ -1764,12 +1831,12 @@ const char *ReadDirName(struct smb_Dir *dirp, long *poffset,
 				continue;
 			}
 		}
-		*poffset = dirp->offset = SMB_VFS_TELLDIR(conn, dirp->dir);
+		*poffset = dir_hnd->offset = SMB_VFS_TELLDIR(conn, dir_hnd->dir);
 		*ptalloced = talloced;
-		dirp->file_number++;
+		dir_hnd->file_number++;
 		return n;
 	}
-	*poffset = dirp->offset = END_OF_DIRECTORY_OFFSET;
+	*poffset = dir_hnd->offset = END_OF_DIRECTORY_OFFSET;
 	*ptalloced = NULL;
 	return NULL;
 }
@@ -1778,11 +1845,11 @@ const char *ReadDirName(struct smb_Dir *dirp, long *poffset,
  Rewind to the start.
 ********************************************************************/
 
-void RewindDir(struct smb_Dir *dirp, long *poffset)
+void RewindDir(struct smb_Dir *dir_hnd, long *poffset)
 {
-	SMB_VFS_REWINDDIR(dirp->conn, dirp->dir);
-	dirp->file_number = 0;
-	dirp->offset = START_OF_DIRECTORY_OFFSET;
+	SMB_VFS_REWINDDIR(dir_hnd->conn, dir_hnd->dir);
+	dir_hnd->file_number = 0;
+	dir_hnd->offset = START_OF_DIRECTORY_OFFSET;
 	*poffset = START_OF_DIRECTORY_OFFSET;
 }
 
@@ -1823,37 +1890,38 @@ void SeekDir(struct smb_Dir *dirp, long offset)
  Tell a dir position.
 ********************************************************************/
 
-long TellDir(struct smb_Dir *dirp)
+long TellDir(struct smb_Dir *dir_hnd)
 {
-	return(dirp->offset);
+	return(dir_hnd->offset);
 }
 
 /*******************************************************************
  Add an entry into the dcache.
 ********************************************************************/
 
-static void DirCacheAdd(struct smb_Dir *dirp, const char *name, long offset)
+static void DirCacheAdd(struct smb_Dir *dir_hnd, const char *name, long offset)
 {
 	struct name_cache_entry *e;
 
-	if (dirp->name_cache_size == 0) {
+	if (dir_hnd->name_cache_size == 0) {
 		return;
 	}
 
-	if (dirp->name_cache == NULL) {
-		dirp->name_cache = talloc_zero_array(
-			dirp, struct name_cache_entry, dirp->name_cache_size);
+	if (dir_hnd->name_cache == NULL) {
+		dir_hnd->name_cache = talloc_zero_array(dir_hnd,
+						struct name_cache_entry,
+						dir_hnd->name_cache_size);
 
-		if (dirp->name_cache == NULL) {
+		if (dir_hnd->name_cache == NULL) {
 			return;
 		}
 	}
 
-	dirp->name_cache_index = (dirp->name_cache_index+1) %
-					dirp->name_cache_size;
-	e = &dirp->name_cache[dirp->name_cache_index];
+	dir_hnd->name_cache_index = (dir_hnd->name_cache_index+1) %
+					dir_hnd->name_cache_size;
+	e = &dir_hnd->name_cache[dir_hnd->name_cache_index];
 	TALLOC_FREE(e->name);
-	e->name = talloc_strdup(dirp, name);
+	e->name = talloc_strdup(dir_hnd, name);
 	e->offset = offset;
 }
 
@@ -1862,38 +1930,39 @@ static void DirCacheAdd(struct smb_Dir *dirp, const char *name, long offset)
  Don't check for veto or invisible files.
 ********************************************************************/
 
-bool SearchDir(struct smb_Dir *dirp, const char *name, long *poffset)
+bool SearchDir(struct smb_Dir *dir_hnd, const char *name, long *poffset)
 {
 	int i;
 	const char *entry = NULL;
 	char *talloced = NULL;
-	connection_struct *conn = dirp->conn;
+	connection_struct *conn = dir_hnd->conn;
 
 	/* Search back in the name cache. */
-	if (dirp->name_cache_size && dirp->name_cache) {
-		for (i = dirp->name_cache_index; i >= 0; i--) {
-			struct name_cache_entry *e = &dirp->name_cache[i];
+	if (dir_hnd->name_cache_size && dir_hnd->name_cache) {
+		for (i = dir_hnd->name_cache_index; i >= 0; i--) {
+			struct name_cache_entry *e = &dir_hnd->name_cache[i];
 			if (e->name && (conn->case_sensitive ? (strcmp(e->name, name) == 0) : strequal(e->name, name))) {
 				*poffset = e->offset;
-				SeekDir(dirp, e->offset);
+				SeekDir(dir_hnd, e->offset);
 				return True;
 			}
 		}
-		for (i = dirp->name_cache_size - 1; i > dirp->name_cache_index; i--) {
-			struct name_cache_entry *e = &dirp->name_cache[i];
+		for (i = dir_hnd->name_cache_size - 1;
+				i > dir_hnd->name_cache_index; i--) {
+			struct name_cache_entry *e = &dir_hnd->name_cache[i];
 			if (e->name && (conn->case_sensitive ? (strcmp(e->name, name) == 0) : strequal(e->name, name))) {
 				*poffset = e->offset;
-				SeekDir(dirp, e->offset);
+				SeekDir(dir_hnd, e->offset);
 				return True;
 			}
 		}
 	}
 
 	/* Not found in the name cache. Rewind directory and start from scratch. */
-	SMB_VFS_REWINDDIR(conn, dirp->dir);
-	dirp->file_number = 0;
+	SMB_VFS_REWINDDIR(conn, dir_hnd->dir);
+	dir_hnd->file_number = 0;
 	*poffset = START_OF_DIRECTORY_OFFSET;
-	while ((entry = ReadDirName(dirp, poffset, NULL, &talloced))) {
+	while ((entry = ReadDirName(dir_hnd, poffset, NULL, &talloced))) {
 		if (conn->case_sensitive ? (strcmp(entry, name) == 0) : strequal(entry, name)) {
 			TALLOC_FREE(talloced);
 			return True;
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 4a47d394686..1bdf1b03760 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -230,9 +230,9 @@ struct smb_Dir *OpenDir(TALLOC_CTX *mem_ctx,
 			const struct smb_filename *smb_fname,
 			const char *mask,
 			uint32_t attr);
-const char *ReadDirName(struct smb_Dir *dirp, long *poffset,
+const char *ReadDirName(struct smb_Dir *dir_hnd, long *poffset,
 			SMB_STRUCT_STAT *sbuf, char **talloced);
-void RewindDir(struct smb_Dir *dirp, long *poffset);
+void RewindDir(struct smb_Dir *dir_hnd, long *poffset);
 void SeekDir(struct smb_Dir *dirp, long offset);
 long TellDir(struct smb_Dir *dirp);
 bool SearchDir(struct smb_Dir *dirp, const char *name, long *poffset);


-- 
Samba Shared Repository



More information about the samba-cvs mailing list