[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-5024-g6d5bf22

Jeremy Allison jra at samba.org
Wed Feb 25 22:13:16 GMT 2009


The branch, v3-3-test has been updated
       via  6d5bf226e91eaa7405103f2c32b5d5a310fa35eb (commit)
      from  0c8b8f2f3483a585d974ce803357f1d9f39e3c9f (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit 6d5bf226e91eaa7405103f2c32b5d5a310fa35eb
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Feb 25 14:12:31 2009 -0800

    Ensure ACL modules work with POSIX paths.
    Jeremy.

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

Summary of changes:
 source/modules/vfs_acl_tdb.c   |   89 +++++++++++++++++++++++++++++++---------
 source/modules/vfs_acl_xattr.c |   12 ++++-
 2 files changed, 79 insertions(+), 22 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/modules/vfs_acl_tdb.c b/source/modules/vfs_acl_tdb.c
index ec6fb5a..08c782d 100644
--- a/source/modules/vfs_acl_tdb.c
+++ b/source/modules/vfs_acl_tdb.c
@@ -182,20 +182,26 @@ static NTSTATUS get_acl_blob(TALLOC_CTX *ctx,
 	TDB_DATA data;
 	struct file_id id;
 	struct db_context *db;
+	int ret = -1;
 	SMB_STRUCT_STAT sbuf;
 
 	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context,
 		return NT_STATUS_INTERNAL_DB_CORRUPTION);
 
 	if (fsp && fsp->fh->fd != -1) {
-		if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-			return map_nt_error_from_unix(errno);
-		}
+		ret = SMB_VFS_FSTAT(fsp, &sbuf);
 	} else {
-		if (SMB_VFS_STAT(handle->conn, name, &sbuf) == -1) {
-			return map_nt_error_from_unix(errno);
+		if (lp_posix_pathnames()) {
+			ret = SMB_VFS_LSTAT(handle->conn, name, &sbuf);
+		} else {
+			ret = SMB_VFS_STAT(handle->conn, name, &sbuf);
 		}
 	}
+
+	if (ret == -1) {
+		return map_nt_error_from_unix(errno);
+	}
+
 	id = vfs_file_id_from_sbuf(handle->conn, &sbuf);
 
 	push_file_id_16((char *)id_buf, &id);
@@ -265,6 +271,7 @@ static NTSTATUS store_acl_blob_fsp(vfs_handle_struct *handle,
 	TDB_DATA data;
 	struct db_context *db;
 	struct db_record *rec;
+	int ret = -1;
 
 	DEBUG(10,("store_acl_blob_fsp: storing blob length %u on file %s\n",
 			(unsigned int)pblob->length, fsp->fsp_name));
@@ -273,14 +280,19 @@ static NTSTATUS store_acl_blob_fsp(vfs_handle_struct *handle,
 		return NT_STATUS_INTERNAL_DB_CORRUPTION);
 
 	if (fsp->fh->fd != -1) {
-		if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-			return map_nt_error_from_unix(errno);
-		}
+		ret = SMB_VFS_FSTAT(fsp, &sbuf);
 	} else {
-		if (SMB_VFS_STAT(handle->conn, fsp->fsp_name, &sbuf) == -1) {
-			return map_nt_error_from_unix(errno);
+		if (lp_posix_pathnames()) {
+			ret = SMB_VFS_LSTAT(handle->conn, fsp->fsp_name, &sbuf);
+		} else {
+			ret = SMB_VFS_STAT(handle->conn, fsp->fsp_name, &sbuf);
 		}
 	}
+
+	if (ret == -1) {
+		return map_nt_error_from_unix(errno);
+	}
+
 	id = vfs_file_id_from_sbuf(handle->conn, &sbuf);
 
 	push_file_id_16((char *)id_buf, &id);
@@ -310,6 +322,7 @@ static NTSTATUS store_acl_blob_pathname(vfs_handle_struct *handle,
 	SMB_STRUCT_STAT sbuf;
 	struct db_context *db;
 	struct db_record *rec;
+	int ret = -1;
 
 	DEBUG(10,("store_acl_blob_pathname: storing blob "
 			"length %u on file %s\n",
@@ -318,7 +331,13 @@ static NTSTATUS store_acl_blob_pathname(vfs_handle_struct *handle,
 	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context,
 		return NT_STATUS_INTERNAL_DB_CORRUPTION);
 
-	if (SMB_VFS_STAT(handle->conn, fname, &sbuf) == -1) {
+	if (lp_posix_pathnames()) {
+		ret = SMB_VFS_LSTAT(handle->conn, fname, &sbuf);
+	} else {
+		ret = SMB_VFS_STAT(handle->conn, fname, &sbuf);
+	}
+
+	if (ret == -1) {
 		return map_nt_error_from_unix(errno);
 	}
 
@@ -489,7 +508,11 @@ static NTSTATUS inherit_new_acl(vfs_handle_struct *handle,
 		if (fsp && !fsp->is_directory && fsp->fh->fd != -1) {
 			ret = SMB_VFS_FSTAT(fsp, &sbuf);
 		} else {
-			ret = SMB_VFS_STAT(handle->conn,fname, &sbuf);
+			if (lp_posix_pathnames()) {
+				ret = SMB_VFS_LSTAT(handle->conn,fname, &sbuf);
+			} else {
+				ret = SMB_VFS_STAT(handle->conn,fname, &sbuf);
+			}
 		}
 		if (ret == -1) {
 			return map_nt_error_from_unix(errno);
@@ -578,11 +601,17 @@ static int unlink_acl_tdb(vfs_handle_struct *handle, const char *path)
 {
 	SMB_STRUCT_STAT sbuf;
 	struct db_context *db;
-	int ret;
+	int ret = -1;
 
 	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
 
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
+	if (lp_posix_pathnames()) {
+		ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf);
+	} else {
+		ret = SMB_VFS_STAT(handle->conn, path, &sbuf);
+	}
+
+	if (ret == -1) {
 		return -1;
 	}
 
@@ -621,11 +650,17 @@ static int rmdir_acl_tdb(vfs_handle_struct *handle, const char *path)
 
 	SMB_STRUCT_STAT sbuf;
 	struct db_context *db;
-	int ret;
+	int ret = -1;
 
 	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
 
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
+	if (lp_posix_pathnames()) {
+		ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf);
+	} else {
+		ret = SMB_VFS_STAT(handle->conn, path, &sbuf);
+	}
+
+	if (ret == -1) {
 		return -1;
 	}
 
@@ -723,7 +758,11 @@ static NTSTATUS fset_nt_acl_tdb(vfs_handle_struct *handle, files_struct *fsp,
 			return NT_STATUS_OK;
 		}
 		if (fsp->is_directory || fsp->fh->fd == -1) {
-			ret = SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf);
+			if (lp_posix_pathnames()) {
+				ret = SMB_VFS_LSTAT(fsp->conn,fsp->fsp_name, &sbuf);
+			} else {
+				ret = SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf);
+			}
 		} else {
 			ret = SMB_VFS_FSTAT(fsp, &sbuf);
 		}
@@ -808,11 +847,17 @@ static int sys_acl_set_file_tdb(vfs_handle_struct *handle,
 {
 	SMB_STRUCT_STAT sbuf;
 	struct db_context *db;
-	int ret;
+	int ret = -1;
 
 	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
 
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
+	if (lp_posix_pathnames()) {
+		ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf);
+	} else {
+		ret = SMB_VFS_STAT(handle->conn, path, &sbuf);
+	}
+
+	if (ret == -1) {
 		return -1;
 	}
 
@@ -843,7 +888,11 @@ static int sys_acl_set_fd_tdb(vfs_handle_struct *handle,
 	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
 
 	if (fsp->is_directory || fsp->fh->fd == -1) {
-		ret = SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf);
+		if (lp_posix_pathnames()) {
+			ret = SMB_VFS_LSTAT(fsp->conn,fsp->fsp_name, &sbuf);
+		} else {
+			ret = SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf);
+		}
 	} else {
 		ret = SMB_VFS_FSTAT(fsp, &sbuf);
 	}
diff --git a/source/modules/vfs_acl_xattr.c b/source/modules/vfs_acl_xattr.c
index b53913b..d2faf8e 100644
--- a/source/modules/vfs_acl_xattr.c
+++ b/source/modules/vfs_acl_xattr.c
@@ -384,7 +384,11 @@ static NTSTATUS inherit_new_acl(vfs_handle_struct *handle,
 		if (fsp && !fsp->is_directory && fsp->fh->fd != -1) {
 			ret = SMB_VFS_FSTAT(fsp, &sbuf);
 		} else {
-			ret = SMB_VFS_STAT(handle->conn,fname, &sbuf);
+			if (lp_posix_pathnames()) {
+				ret = SMB_VFS_LSTAT(handle->conn,fname, &sbuf);
+			} else {
+				ret = SMB_VFS_STAT(handle->conn,fname, &sbuf);
+			}
 		}
 		if (ret == -1) {
 			return map_nt_error_from_unix(errno);
@@ -562,7 +566,11 @@ static NTSTATUS fset_nt_acl_xattr(vfs_handle_struct *handle, files_struct *fsp,
 			return NT_STATUS_OK;
 		}
 		if (fsp->is_directory || fsp->fh->fd == -1) {
-			ret = SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf);
+			if (lp_posix_pathnames()) {
+				ret = SMB_VFS_LSTAT(fsp->conn,fsp->fsp_name, &sbuf);
+			} else {
+				ret = SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf);
+			}
 		} else {
 			ret = SMB_VFS_FSTAT(fsp, &sbuf);
 		}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list