The branch, master has been updated via e3be771 build: improve comments in tests/oldquotas.c via faf7185 s3:vfs: Change smbacl4_GetFileOwner() to take const struct smb_filename * from const char *. via 377c7b3 s3:smbd:vfs: Change posix_get_nt_acl() from const char * to const struct smb_filename *. via cb70165 s3:smbd:vfs: Change smb_get_nt_acl_nfs4() to take a const struct smb_filename *. via 6d9e7ad s3:smbd: Fix build for vfs_aixacl2.c. via fca72bf s3: smbd: Remove the last lp_posix_pathnames() in the rename path. from b7a050d smbd:smb2: remove an unnecessary !! cast.
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit e3be771f24cb427be298e0d463ebf2f3a7704d15 Author: Uri Simchoni <u...@samba.org> Date: Sun Mar 13 07:17:23 2016 +0200 build: improve comments in tests/oldquotas.c Add comments to #else and #endif Signed-off-by: Uri Simchoni <u...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Tue Mar 15 02:18:15 CET 2016 on sn-devel-144 commit faf7185fe407a973c9ae02cbb5f64f199beff8b0 Author: Jeremy Allison <j...@samba.org> Date: Thu Mar 10 16:17:32 2016 -0800 s3:vfs: Change smbacl4_GetFileOwner() to take const struct smb_filename * from const char *. Preparing to remove vfs_stat_smb_basename() call. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <r...@sernet.de> commit 377c7b311e427a302b27f3512373e881de432081 Author: Jeremy Allison <j...@samba.org> Date: Thu Mar 10 16:05:48 2016 -0800 s3:smbd:vfs: Change posix_get_nt_acl() from const char * to const struct smb_filename *. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <r...@sernet.de> commit cb7016594ae67d8f1c0195cf215a5cf1dd12cd9c Author: Jeremy Allison <j...@samba.org> Date: Thu Mar 10 15:56:51 2016 -0800 s3:smbd:vfs: Change smb_get_nt_acl_nfs4() to take a const struct smb_filename *. Push the struct further down closer to places that use lp_posix_pathname() functions. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <r...@sernet.de> commit 6d9e7ad3de6541b1434b0798a1162816f4967134 Author: Jeremy Allison <j...@samba.org> Date: Thu Mar 10 15:34:58 2016 -0800 s3:smbd: Fix build for vfs_aixacl2.c. Missed conversion of get_nt_acl_fn from const char * to const struct smb_filename *. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <r...@sernet.de> commit fca72bf4f6dc6a3d82d10e4b865472d9819de136 Author: Jeremy Allison <j...@samba.org> Date: Thu Mar 10 15:15:34 2016 -0800 s3: smbd: Remove the last lp_posix_pathnames() in the rename path. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <r...@sernet.de> ----------------------------------------------------------------------- Summary of changes: source3/modules/nfs4_acls.c | 15 ++++++------ source3/modules/nfs4_acls.h | 2 +- source3/modules/vfs_aixacl2.c | 23 ++++++++++++------ source3/modules/vfs_default.c | 2 +- source3/modules/vfs_gpfs.c | 4 ++-- source3/modules/vfs_nfs4acl_xattr.c | 2 +- source3/modules/vfs_zfsacl.c | 2 +- source3/smbd/posix_acls.c | 48 ++++++++++++++++++++++--------------- source3/smbd/proto.h | 9 +++---- source3/smbd/reply.c | 2 +- tests/oldquotas.c | 40 +++++++++++++++---------------- 11 files changed, 85 insertions(+), 64 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/modules/nfs4_acls.c b/source3/modules/nfs4_acls.c index 26a98b7..349b26b 100644 --- a/source3/modules/nfs4_acls.c +++ b/source3/modules/nfs4_acls.c @@ -268,13 +268,13 @@ bool smbacl4_set_controlflags(struct SMB4ACL_T *acl, uint16_t controlflags) } static int smbacl4_GetFileOwner(struct connection_struct *conn, - const char *filename, + const struct smb_filename *smb_fname, SMB_STRUCT_STAT *psbuf) { ZERO_STRUCTP(psbuf); /* Get the stat struct for the owner info. */ - if (vfs_stat_smb_basename(conn, filename, psbuf) != 0) + if (vfs_stat_smb_basename(conn, smb_fname->base_name, psbuf) != 0) { DEBUG(8, ("vfs_stat_smb_basename failed with error %s\n", strerror(errno))); @@ -290,7 +290,7 @@ static int smbacl4_fGetFileOwner(files_struct *fsp, SMB_STRUCT_STAT *psbuf) if (fsp->fh->fd == -1) { return smbacl4_GetFileOwner(fsp->conn, - fsp->fsp_name->base_name, psbuf); + fsp->fsp_name, psbuf); } if (SMB_VFS_FSTAT(fsp, psbuf) != 0) { @@ -557,7 +557,7 @@ NTSTATUS smb_fget_nt_acl_nfs4(files_struct *fsp, } NTSTATUS smb_get_nt_acl_nfs4(struct connection_struct *conn, - const char *name, + const struct smb_filename *smb_fname, uint32_t security_info, TALLOC_CTX *mem_ctx, struct security_descriptor **ppdesc, @@ -566,9 +566,10 @@ NTSTATUS smb_get_nt_acl_nfs4(struct connection_struct *conn, SMB_STRUCT_STAT sbuf; smbacl4_vfs_params params; - DEBUG(10, ("smb_get_nt_acl_nfs4 invoked for %s\n", name)); + DEBUG(10, ("smb_get_nt_acl_nfs4 invoked for %s\n", + smb_fname->base_name)); - if (smbacl4_GetFileOwner(conn, name, &sbuf)) { + if (smbacl4_GetFileOwner(conn, smb_fname, &sbuf)) { return map_nt_error_from_unix(errno); } @@ -967,7 +968,7 @@ NTSTATUS smb_set_nt_acl_nfs4(vfs_handle_struct *handle, files_struct *fsp, fsp_str_dbg(fsp), (unsigned int)newUID, (unsigned int)newGID)); if (smbacl4_GetFileOwner(fsp->conn, - fsp->fsp_name->base_name, + fsp->fsp_name, &sbuf)){ TALLOC_FREE(frame); return map_nt_error_from_unix(errno); diff --git a/source3/modules/nfs4_acls.h b/source3/modules/nfs4_acls.h index e11845e..588e8ea 100644 --- a/source3/modules/nfs4_acls.h +++ b/source3/modules/nfs4_acls.h @@ -136,7 +136,7 @@ NTSTATUS smb_fget_nt_acl_nfs4(files_struct *fsp, struct security_descriptor **ppdesc, struct SMB4ACL_T *theacl); NTSTATUS smb_get_nt_acl_nfs4(connection_struct *conn, - const char *name, + const struct smb_filename *smb_fname, uint32_t security_info, TALLOC_CTX *mem_ctx, struct security_descriptor **ppdesc, struct SMB4ACL_T *theacl); diff --git a/source3/modules/vfs_aixacl2.c b/source3/modules/vfs_aixacl2.c index a70013d..1c9f84b 100644 --- a/source3/modules/vfs_aixacl2.c +++ b/source3/modules/vfs_aixacl2.c @@ -186,7 +186,7 @@ static NTSTATUS aixjfs2_fget_nt_acl(vfs_handle_struct *handle, } static NTSTATUS aixjfs2_get_nt_acl(vfs_handle_struct *handle, - const char *name, + const struct smb_filename *smb_fname, uint32_t security_info, TALLOC_CTX *mem_ctx, struct security_descriptor **ppdesc) @@ -196,19 +196,28 @@ static NTSTATUS aixjfs2_get_nt_acl(vfs_handle_struct *handle, bool retryPosix = False; *ppdesc = NULL; - result = aixjfs2_get_nfs4_acl(mem_ctx, name, &pacl, &retryPosix); + result = aixjfs2_get_nfs4_acl(mem_ctx, + smb_fname->base_name, + &pacl, + &retryPosix); if (retryPosix) { DEBUG(10, ("retrying with posix acl...\n")); - return posix_get_nt_acl(handle->conn, name, security_info, - mem_ctx, ppdesc); + return posix_get_nt_acl(handle->conn, + smb_fname, + security_info, + mem_ctx, + ppdesc); } if (result==False) return NT_STATUS_ACCESS_DENIED; - return smb_get_nt_acl_nfs4(handle->conn, name, security_info, - mem_ctx, ppdesc, - pacl); + return smb_get_nt_acl_nfs4(handle->conn, + smb_fname, + security_info, + mem_ctx, + ppdesc, + pacl); } static int aixjfs2_sys_acl_blob_get_file(vfs_handle_struct *handle, const char *path_p, TALLOC_CTX *mem_ctx, char **blob_description, DATA_BLOB *blob) diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index ee9ddb2..ea7dc2c 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -2344,7 +2344,7 @@ static NTSTATUS vfswrap_get_nt_acl(vfs_handle_struct *handle, START_PROFILE(get_nt_acl); result = posix_get_nt_acl(handle->conn, - smb_fname->base_name, + smb_fname, security_info, mem_ctx, ppdesc); diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index cc17d2a..09e37fa 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -613,7 +613,7 @@ static NTSTATUS gpfsacl_get_nt_acl(vfs_handle_struct *handle, result = gpfs_get_nfs4_acl(frame, smb_fname->base_name, &pacl); if (result == 0) { - status = smb_get_nt_acl_nfs4(handle->conn, smb_fname->base_name, + status = smb_get_nt_acl_nfs4(handle->conn, smb_fname, security_info, mem_ctx, ppdesc, pacl); TALLOC_FREE(frame); @@ -622,7 +622,7 @@ static NTSTATUS gpfsacl_get_nt_acl(vfs_handle_struct *handle, if (result > 0) { DEBUG(10, ("retrying with posix acl...\n")); - status = posix_get_nt_acl(handle->conn, smb_fname->base_name, + status = posix_get_nt_acl(handle->conn, smb_fname, security_info, mem_ctx, ppdesc); TALLOC_FREE(frame); return status; diff --git a/source3/modules/vfs_nfs4acl_xattr.c b/source3/modules/vfs_nfs4acl_xattr.c index c02fd6a..af84b8b 100644 --- a/source3/modules/vfs_nfs4acl_xattr.c +++ b/source3/modules/vfs_nfs4acl_xattr.c @@ -560,7 +560,7 @@ static NTSTATUS nfs4acl_xattr_get_nt_acl(struct vfs_handle_struct *handle, return status; } - status = smb_get_nt_acl_nfs4(handle->conn, name, security_info, + status = smb_get_nt_acl_nfs4(handle->conn, smb_fname, security_info, mem_ctx, ppdesc, pacl); TALLOC_FREE(frame); diff --git a/source3/modules/vfs_zfsacl.c b/source3/modules/vfs_zfsacl.c index 7dc7cec..18f1356 100644 --- a/source3/modules/vfs_zfsacl.c +++ b/source3/modules/vfs_zfsacl.c @@ -233,7 +233,7 @@ static NTSTATUS zfsacl_get_nt_acl(struct vfs_handle_struct *handle, } status = smb_get_nt_acl_nfs4(handle->conn, - smb_fname->base_name, + smb_fname, security_info, mem_ctx, ppdesc, diff --git a/source3/smbd/posix_acls.c b/source3/smbd/posix_acls.c index ac296e2..c4eeb9c 100644 --- a/source3/smbd/posix_acls.c +++ b/source3/smbd/posix_acls.c @@ -3516,7 +3516,7 @@ NTSTATUS posix_fget_nt_acl(struct files_struct *fsp, uint32_t security_info, /* can it happen that fsp_name == NULL ? */ if (fsp->is_directory || fsp->fh->fd == -1) { - status = posix_get_nt_acl(fsp->conn, fsp->fsp_name->base_name, + status = posix_get_nt_acl(fsp->conn, fsp->fsp_name, security_info, mem_ctx, ppdesc); TALLOC_FREE(frame); return status; @@ -3540,31 +3540,36 @@ NTSTATUS posix_fget_nt_acl(struct files_struct *fsp, uint32_t security_info, return status; } -NTSTATUS posix_get_nt_acl(struct connection_struct *conn, const char *name, - uint32_t security_info, - TALLOC_CTX *mem_ctx, - struct security_descriptor **ppdesc) +NTSTATUS posix_get_nt_acl(struct connection_struct *conn, + const struct smb_filename *smb_fname_in, + uint32_t security_info, + TALLOC_CTX *mem_ctx, + struct security_descriptor **ppdesc) { SMB_ACL_T posix_acl = NULL; SMB_ACL_T def_acl = NULL; struct pai_val *pal; - struct smb_filename smb_fname; + struct smb_filename *smb_fname = NULL; int ret; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; *ppdesc = NULL; - DEBUG(10,("posix_get_nt_acl: called for file %s\n", name )); + DEBUG(10,("posix_get_nt_acl: called for file %s\n", + smb_fname_in->base_name )); - ZERO_STRUCT(smb_fname); - smb_fname.base_name = discard_const_p(char, name); + smb_fname = cp_smb_filename(talloc_tos(), smb_fname_in); + if (smb_fname == NULL) { + TALLOC_FREE(frame); + return NT_STATUS_NO_MEMORY; + } /* Get the stat struct for the owner info. */ if (lp_posix_pathnames()) { - ret = SMB_VFS_LSTAT(conn, &smb_fname); + ret = SMB_VFS_LSTAT(conn, smb_fname); } else { - ret = SMB_VFS_STAT(conn, &smb_fname); + ret = SMB_VFS_STAT(conn, smb_fname); } if (ret == -1) { @@ -3573,22 +3578,27 @@ NTSTATUS posix_get_nt_acl(struct connection_struct *conn, const char *name, } /* Get the ACL from the path. */ - posix_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, name, + posix_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, smb_fname->base_name, SMB_ACL_TYPE_ACCESS, frame); /* If it's a directory get the default POSIX ACL. */ - if(S_ISDIR(smb_fname.st.st_ex_mode)) { - def_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, name, + if(S_ISDIR(smb_fname->st.st_ex_mode)) { + def_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, smb_fname->base_name, SMB_ACL_TYPE_DEFAULT, frame); def_acl = free_empty_sys_acl(conn, def_acl); } - pal = load_inherited_info(conn, name); + pal = load_inherited_info(conn, smb_fname->base_name); - status = posix_get_nt_acl_common(conn, name, &smb_fname.st, pal, - posix_acl, def_acl, security_info, - mem_ctx, - ppdesc); + status = posix_get_nt_acl_common(conn, + smb_fname->base_name, + &smb_fname->st, + pal, + posix_acl, + def_acl, + security_info, + mem_ctx, + ppdesc); TALLOC_FREE(frame); return status; } diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index e1ec063..f9ae4a3 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -751,10 +751,11 @@ SMB_ACL_T free_empty_sys_acl(connection_struct *conn, SMB_ACL_T the_acl); NTSTATUS posix_fget_nt_acl(struct files_struct *fsp, uint32_t security_info, TALLOC_CTX *mem_ctx, struct security_descriptor **ppdesc); -NTSTATUS posix_get_nt_acl(struct connection_struct *conn, const char *name, - uint32_t security_info, - TALLOC_CTX *mem_ctx, - struct security_descriptor **ppdesc); +NTSTATUS posix_get_nt_acl(struct connection_struct *conn, + const struct smb_filename *smb_fname_in, + uint32_t security_info, + TALLOC_CTX *mem_ctx, + struct security_descriptor **ppdesc); NTSTATUS try_chown(files_struct *fsp, uid_t uid, gid_t gid); NTSTATUS set_nt_acl(files_struct *fsp, uint32_t security_info_sent, const struct security_descriptor *psd); int get_acl_group_bits( connection_struct *conn, const char *fname, mode_t *mode ); diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index b88c2cf..c18eb38 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -6808,7 +6808,7 @@ NTSTATUS rename_internals_fsp(connection_struct *conn, smb_fname_str_dbg(smb_fname_dst))); if (!fsp->is_directory && - !lp_posix_pathnames() && + !(fsp->posix_flags & FSP_POSIX_FLAGS_PATHNAMES) && (lp_map_archive(SNUM(conn)) || lp_store_dos_attributes(SNUM(conn)))) { /* We must set the archive bit on the newly diff --git a/tests/oldquotas.c b/tests/oldquotas.c index bdb2beb..0aacf23 100644 --- a/tests/oldquotas.c +++ b/tests/oldquotas.c @@ -8,11 +8,11 @@ /* just a quick hack because sysquotas.h is included before linux/quota.h */ #ifdef QUOTABLOCK_SIZE #undef QUOTABLOCK_SIZE -#endif +#endif /* defined(QUOTABLOCK_SIZE) */ #ifdef WITH_QUOTAS -#if defined(VXFS_QUOTA) +#if defined(VXFS_QUOTA) /* Veritas VxFS for Solaris 2 */ bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize, uint64_t *dfree, uint64_t *dsize); @@ -23,16 +23,16 @@ bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize, #include <fcntl.h> #include <sys/param.h> -#if defined(SUNOS5) +#if defined(SUNOS5) /* Solaris */ #include <sys/fs/ufs_quota.h> #include <sys/mnttab.h> #include <sys/mntent.h> -#else /* defined(SUNOS4) */ +#else /* SunOS4 */ #include <ufs/quota.h> #include <mntent.h> -#endif +#endif /* Solaris */ -#if defined(SUNOS5) +#if defined(SUNOS5) /* Solaris */ /**************************************************************************** Allows querying of remote hosts for quotas on NFS mounted shares. @@ -53,7 +53,7 @@ static bool nfs_quotas(char *nfspath, uid_t euser_id, uint64_t *bsize, clnt = clnt_create("host", RQUOTAPROG, RQUOTAVERS, "udp"); return true; } -#endif +#endif /* Solaris */ /**************************************************************************** try to get the disk space from disk quotas (SunOS & Solaris2 version) @@ -64,29 +64,29 @@ bool disk_quotas(const char *path, uint64_t *bsize, uint64_t *dfree, uint64_t *dsize) { int ret; -#if defined(SUNOS5) +#if defined(SUNOS5) /* Solaris */ struct quotctl command; #else /* SunOS4 */ struct mntent *mnt; -#endif -#if defined(SUNOS5) +#endif /* Solaris */ +#if defined(SUNOS5) /* Solaris */ nfs_quotas("", 0, bsize, dfree, dsize); command.op = Q_GETQUOTA; command.uid = 0; command.addr = NULL; ret = ioctl(1, Q_QUOTACTL, &command); -#else +#else /* SunOS4 */ ret = quotactl(Q_GETQUOTA, "", 0, NULL); -#endif +#endif /* Solaris */ -#if defined(SUNOS5) && defined(VXFS_QUOTA) +#if defined(SUNOS5) && defined(VXFS_QUOTA) /* Solaris 2 VxFS */ disk_quotas_vxfs("", path, bsize, dfree, dsize); -#endif +#endif /* Solaris 2 VxFS */ return true; } -#else +#else /* not SunOS / Solaris */ #if AIX /* AIX quota patch from Ole Holm Nielsen <ohnie...@fysik.dtu.dk> */ @@ -99,10 +99,10 @@ bool disk_quotas(const char *path, uint64_t *bsize, uint64_t *dfree, #include <sys/statfs.h> #include <sys/vmount.h> #endif /* AIX 5.3 */ -#else /* !AIX */ +#else /* !AIX - HP-UX */ #include <sys/quota.h> #include <devnm.h> -#endif +#endif /* AIX */ /**************************************************************************** try to get the disk space from disk quotas - default version @@ -124,9 +124,9 @@ bool disk_quotas(const char *path, uint64_t *bsize, uint64_t *dfree, return (true); } -#endif +#endif /* SunOS / Solaris */ -#if defined(VXFS_QUOTA) +#if defined(VXFS_QUOTA) /* Veritas for Solaris 2 */ #if defined(SUNOS5) @@ -155,7 +155,7 @@ bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize, return true; } -#endif /* SUNOS5 || ... */ +#endif /* SUNOS5 */ #endif /* VXFS_QUOTA */ -- Samba Shared Repository