The branch, master has been updated
       via  e64ab0d s3: vfs: vfs_xattr_tdb - cleanup. Remove unneeded variable 
"path".
       via  6b87710 s3:vfs: Change get_acl_blob() to take a const smb_filename 
* parameter from const char *.
       via  13dae2b s3:smbd: Change refuse_symlink() to take a const 
smb_filename * parameter from const char *.
       via  e7898c6 s3:smbd: Change get_ea_names_from_file() to take a const 
smb_filename * parameter from const char *.
       via  4404cff s3:smbd: Change get_ea_list_from_file_path() to take a 
const smb_filename * parameter from const char *.
       via  641ebf0 s3: smbd: Change canonicalize_ea_name() to take a const 
smb_filename * parameter from const char *.
       via  c3937f5 s3: smbd: Reformatting - remove unneeded const char *fname 
variable.
       via  e800092 s3:vfs: vfs_streams_xattr.c: Change walk_xattr_streams() to 
const struct smb_filename * from const char *.
       via  347d3aa s3:vfs: vfs_streams_xattr.c - Remove duplicate code. This 
is exactly vfs_stat_smb_basename().
       via  b10d3c6 s3: vfs: vfs_solarisacl. refuse_symlink() means we can 
always use STAT here.
       via  f690c1c s3: vfs: vfs_hpuxacl. refuse_symlink() means we can always 
use STAT here.
      from  7b431eb build: mark explicit dependencies on pytalloc-util

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


- Log -----------------------------------------------------------------
commit e64ab0d72a92f5e80e7a115f168b4d24b2fe73f6
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 16:07:20 2016 -0800

    s3: vfs: vfs_xattr_tdb - cleanup. Remove unneeded variable "path".
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>
    
    Autobuild-User(master): Uri Simchoni <[email protected]>
    Autobuild-Date(master): Tue Mar 15 11:45:19 CET 2016 on sn-devel-144

commit 6b877102dbd7d375fdd240904f983e1f2196a100
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 15:50:57 2016 -0800

    s3:vfs: Change get_acl_blob() to take a const smb_filename * parameter from 
const char *.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 13dae2b46ed9a53b7eeed4ce125478b5bbb3e2b5
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 15:38:28 2016 -0800

    s3:smbd: Change refuse_symlink() to take a const smb_filename * parameter 
from const char *.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit e7898c6d6cf433fad031179f60223555602ae48e
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 15:34:58 2016 -0800

    s3:smbd: Change get_ea_names_from_file() to take a const smb_filename * 
parameter from const char *.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 4404cff57ad22fc706b5f3b021bc5842c85b6c96
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 15:30:00 2016 -0800

    s3:smbd: Change get_ea_list_from_file_path() to take a const smb_filename * 
parameter from const char *.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 641ebf05f1b6f9d5e801c4f46ae607ef81b91c18
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 15:25:54 2016 -0800

    s3: smbd: Change canonicalize_ea_name() to take a const smb_filename * 
parameter from const char *.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit c3937f556d090dc5daeb21a363f7f06154678d7a
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 15:23:23 2016 -0800

    s3: smbd: Reformatting - remove unneeded const char *fname variable.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit e8000923aec54903e4b592be2bc4a67d71ee4064
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 15:11:20 2016 -0800

    s3:vfs: vfs_streams_xattr.c: Change walk_xattr_streams() to const struct 
smb_filename * from const char *.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 347d3aaf961774c3d90ac1e9b1ffd56fa6913118
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 15:08:26 2016 -0800

    s3:vfs: vfs_streams_xattr.c - Remove duplicate code. This is exactly 
vfs_stat_smb_basename().
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit b10d3c644002e30ad1c76d21b8bdcb7dc8c0e5f2
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 16:01:31 2016 -0800

    s3: vfs: vfs_solarisacl. refuse_symlink() means we can always use STAT here.
    
    For a posix acl call on a symlink, we've already refused it.
    For a Windows acl mapped call on a symlink, we want to follow
    it.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit f690c1cfc8a53bd8c9b3e7e8fc6122d09ed7aa36
Author: Jeremy Allison <[email protected]>
Date:   Fri Mar 11 14:29:20 2016 -0800

    s3: vfs: vfs_hpuxacl. refuse_symlink() means we can always use STAT here.
    
    For a posix acl call on a symlink, we've already refused it.
    For a Windows acl mapped call on a symlink, we want to follow
    it.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

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

Summary of changes:
 source3/modules/vfs_acl_common.c    |  48 ++++++++---------
 source3/modules/vfs_acl_tdb.c       |   8 +--
 source3/modules/vfs_acl_xattr.c     |   4 +-
 source3/modules/vfs_hpuxacl.c       |  22 ++++----
 source3/modules/vfs_solarisacl.c    |  16 ++++--
 source3/modules/vfs_streams_xattr.c |  54 +++++++++----------
 source3/modules/vfs_xattr_tdb.c     |   5 +-
 source3/smbd/nttrans.c              |   4 +-
 source3/smbd/proto.h                |   9 ++--
 source3/smbd/trans2.c               | 102 +++++++++++++++++++++++++-----------
 10 files changed, 163 insertions(+), 109 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_acl_common.c b/source3/modules/vfs_acl_common.c
index ba93e7b..c8c0650 100644
--- a/source3/modules/vfs_acl_common.c
+++ b/source3/modules/vfs_acl_common.c
@@ -33,7 +33,7 @@ static NTSTATUS create_acl_blob(const struct 
security_descriptor *psd,
 static NTSTATUS get_acl_blob(TALLOC_CTX *ctx,
                        vfs_handle_struct *handle,
                        files_struct *fsp,
-                       const char *name,
+                       const struct smb_filename *smb_fname,
                        DATA_BLOB *pblob);
 
 static NTSTATUS store_acl_blob_fsp(vfs_handle_struct *handle,
@@ -366,7 +366,7 @@ static NTSTATUS 
add_directory_inheritable_components(vfs_handle_struct *handle,
 
 static NTSTATUS get_nt_acl_internal(vfs_handle_struct *handle,
                                    files_struct *fsp,
-                                   const struct smb_filename *smb_fname,
+                                   const struct smb_filename *smb_fname_in,
                                    uint32_t security_info,
                                    TALLOC_CTX *mem_ctx,
                                    struct security_descriptor **ppdesc)
@@ -381,22 +381,22 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
        uint8_t sys_acl_hash_tmp[XATTR_SD_HASH_SIZE];
        struct security_descriptor *psd = NULL;
        struct security_descriptor *pdesc_next = NULL;
-       const char *name = NULL;
+       const struct smb_filename *smb_fname = NULL;
        bool ignore_file_system_acl = lp_parm_bool(SNUM(handle->conn),
                                                ACL_MODULE_NAME,
                                                "ignore system acls",
                                                false);
        TALLOC_CTX *frame = talloc_stackframe();
 
-       if (fsp && smb_fname == NULL) {
-               name = fsp->fsp_name->base_name;
+       if (fsp && smb_fname_in == NULL) {
+               smb_fname = fsp->fsp_name;
        } else {
-               name = smb_fname->base_name;
+               smb_fname = smb_fname_in;
        }
 
-       DEBUG(10, ("get_nt_acl_internal: name=%s\n", name));
+       DEBUG(10, ("get_nt_acl_internal: name=%s\n", smb_fname->base_name));
 
-       status = get_acl_blob(frame, handle, fsp, name, &blob);
+       status = get_acl_blob(frame, handle, fsp, smb_fname, &blob);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(10, ("get_nt_acl_internal: get_acl_blob returned %s\n",
                        nt_errstr(status)));
@@ -440,7 +440,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                DEBUG(10, ("get_nt_acl_internal: ACL blob revision "
                           "mismatch (%u) for file %s\n",
                           (unsigned int)hash_type,
-                          name));
+                          smb_fname->base_name));
                TALLOC_FREE(psd);
                psd = NULL;
                goto out;
@@ -451,7 +451,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                DEBUG(10, ("get_nt_acl_internal: ACL blob hash type "
                           "(%u) unexpected for file %s\n",
                           (unsigned int)hash_type,
-                          name));
+                          smb_fname->base_name));
                TALLOC_FREE(psd);
                psd = NULL;
                goto out;
@@ -474,10 +474,10 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                } else {
                        /* Get the full underlying sd, then hash. */
                        ret = SMB_VFS_NEXT_SYS_ACL_BLOB_GET_FILE(handle,
-                                                                name,
-                                                                frame,
-                                                                
&sys_acl_blob_description,
-                                                                &sys_acl_blob);
+                                                smb_fname->base_name,
+                                                frame,
+                                                &sys_acl_blob_description,
+                                                &sys_acl_blob);
                }
 
                /* If we fail to get the ACL blob (for some reason) then this
@@ -494,7 +494,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                                /* Hash matches, return blob sd. */
                                DEBUG(10, ("get_nt_acl_internal: blob hash "
                                           "matches for file %s\n",
-                                          name ));
+                                          smb_fname->base_name ));
                                goto out;
                        }
                }
@@ -521,7 +521,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(10, ("get_nt_acl_internal: get_next_acl for file 
%s "
                                   "returned %s\n",
-                                  name,
+                                  smb_fname->base_name,
                                   nt_errstr(status)));
                        TALLOC_FREE(frame);
                        return status;
@@ -545,7 +545,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                        /* Hash matches, return blob sd. */
                        DEBUG(10, ("get_nt_acl_internal: blob hash "
                                   "matches for file %s\n",
-                                  name ));
+                                  smb_fname->base_name ));
                        goto out;
                }
 
@@ -553,11 +553,11 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                DEBUG(10, ("get_nt_acl_internal: blob hash "
                           "does not match for file %s - returning "
                           "file system SD mapping.\n",
-                          name ));
+                          smb_fname->base_name ));
 
                if (DEBUGLEVEL >= 10) {
                        DEBUG(10,("get_nt_acl_internal: acl for blob hash for 
%s is:\n",
-                                 name ));
+                                 smb_fname->base_name ));
                        NDR_PRINT_DEBUG(security_descriptor, pdesc_next);
                }
 
@@ -587,7 +587,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(10, ("get_nt_acl_internal: get_next_acl for file 
%s "
                                   "returned %s\n",
-                                  name,
+                                  smb_fname->base_name,
                                   nt_errstr(status)));
                        TALLOC_FREE(frame);
                        return status;
@@ -641,7 +641,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                         * is fully plumbed through the VFS.
                         */
                        int ret = vfs_stat_smb_basename(handle->conn,
-                                               name,
+                                               smb_fname->base_name,
                                                &sbuf);
                        if (ret == -1) {
                                TALLOC_FREE(frame);
@@ -653,7 +653,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                if (ignore_file_system_acl) {
                        TALLOC_FREE(pdesc_next);
                        status = make_default_filesystem_acl(mem_ctx,
-                                               name,
+                                               smb_fname->base_name,
                                                psbuf,
                                                &psd);
                        if (!NT_STATUS_IS_OK(status)) {
@@ -666,7 +666,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
                                                        true)) {
                                status = add_directory_inheritable_components(
                                                        handle,
-                                                       name,
+                                                       smb_fname->base_name,
                                                        psbuf,
                                                        psd);
                                if (!NT_STATUS_IS_OK(status)) {
@@ -701,7 +701,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct 
*handle,
 
        if (DEBUGLEVEL >= 10) {
                DEBUG(10,("get_nt_acl_internal: returning acl for %s is:\n",
-                       name ));
+                       smb_fname->base_name ));
                NDR_PRINT_DEBUG(security_descriptor, psd);
        }
 
diff --git a/source3/modules/vfs_acl_tdb.c b/source3/modules/vfs_acl_tdb.c
index 54edb87..1bc5973 100644
--- a/source3/modules/vfs_acl_tdb.c
+++ b/source3/modules/vfs_acl_tdb.c
@@ -143,7 +143,7 @@ static NTSTATUS acl_tdb_delete(vfs_handle_struct *handle,
 static NTSTATUS get_acl_blob(TALLOC_CTX *ctx,
                        vfs_handle_struct *handle,
                        files_struct *fsp,
-                       const char *name,
+                       const struct smb_filename *smb_fname,
                        DATA_BLOB *pblob)
 {
        uint8_t id_buf[16];
@@ -159,7 +159,9 @@ static NTSTATUS get_acl_blob(TALLOC_CTX *ctx,
                status = vfs_stat_fsp(fsp);
                sbuf = fsp->fsp_name->st;
        } else {
-               int ret = vfs_stat_smb_basename(handle->conn, name, &sbuf);
+               int ret = vfs_stat_smb_basename(handle->conn,
+                               smb_fname->base_name,
+                               &sbuf);
                if (ret == -1) {
                        status = map_nt_error_from_unix(errno);
                }
@@ -186,7 +188,7 @@ static NTSTATUS get_acl_blob(TALLOC_CTX *ctx,
        pblob->length = data.dsize;
 
        DEBUG(10,("get_acl_blob: returned %u bytes from file %s\n",
-               (unsigned int)data.dsize, name ));
+               (unsigned int)data.dsize, smb_fname->base_name ));
 
        if (pblob->length == 0 || pblob->data == NULL) {
                return NT_STATUS_NOT_FOUND;
diff --git a/source3/modules/vfs_acl_xattr.c b/source3/modules/vfs_acl_xattr.c
index 2338798..d311c57 100644
--- a/source3/modules/vfs_acl_xattr.c
+++ b/source3/modules/vfs_acl_xattr.c
@@ -40,7 +40,7 @@
 static NTSTATUS get_acl_blob(TALLOC_CTX *ctx,
                        vfs_handle_struct *handle,
                        files_struct *fsp,
-                       const char *name,
+                       const struct smb_filename *smb_fname,
                        DATA_BLOB *pblob)
 {
        size_t size = 1024;
@@ -64,7 +64,7 @@ static NTSTATUS get_acl_blob(TALLOC_CTX *ctx,
        if (fsp && fsp->fh->fd != -1) {
                sizeret = SMB_VFS_FGETXATTR(fsp, XATTR_NTACL_NAME, val, size);
        } else {
-               sizeret = SMB_VFS_GETXATTR(handle->conn, name,
+               sizeret = SMB_VFS_GETXATTR(handle->conn, smb_fname->base_name,
                                        XATTR_NTACL_NAME, val, size);
        }
        if (sizeret == -1) {
diff --git a/source3/modules/vfs_hpuxacl.c b/source3/modules/vfs_hpuxacl.c
index 1894146..55a6894 100644
--- a/source3/modules/vfs_hpuxacl.c
+++ b/source3/modules/vfs_hpuxacl.c
@@ -249,22 +249,24 @@ int hpuxacl_sys_acl_set_file(vfs_handle_struct *handle,
        }
 
        /*
-        * if the file is a directory, there is extra work to do:
-        * since the hpux acl call stores both the access acl and 
-        * the default acl as provided, we have to get the acl part 
-        * that has _not_ been specified in "type" from the file first 
-        * and concatenate it with the acl provided.
+        * We can directly use SMB_VFS_STAT here, as if this was a
+        * POSIX call on a symlink, we've already refused it.
+        * For a Windows acl mapped call on a symlink, we want to follow
+        * it.
         */
-       if (lp_posix_pathnames()) {
-               ret = SMB_VFS_LSTAT(handle->conn, smb_fname);
-       } else {
-               ret = SMB_VFS_STAT(handle->conn, smb_fname);
-       }
+       ret = SMB_VFS_STAT(handle->conn, smb_fname);
        if (ret != 0) {
                DEBUG(10, ("Error in stat call: %s\n", strerror(errno)));
                goto done;
        }
        if (S_ISDIR(smb_fname->st.st_ex_mode)) {
+               /*
+                * if the file is a directory, there is extra work to do:
+                * since the hpux acl call stores both the access acl and
+                * the default acl as provided, we have to get the acl part
+                * that has _not_ been specified in "type" from the file first
+                * and concatenate it with the acl provided.
+                */
                HPUX_ACL_T other_acl; 
                int other_count;
                SMB_ACL_TYPE_T other_type;
diff --git a/source3/modules/vfs_solarisacl.c b/source3/modules/vfs_solarisacl.c
index cf25abc..b421016 100644
--- a/source3/modules/vfs_solarisacl.c
+++ b/source3/modules/vfs_solarisacl.c
@@ -139,10 +139,12 @@ int solarisacl_sys_acl_set_file(vfs_handle_struct *handle,
                                SMB_ACL_T theacl)
 {
        int ret = -1;
-       struct stat_ex s;
        SOLARIS_ACL_T solaris_acl = NULL;
        int count;
-       
+       struct smb_filename smb_fname = {
+               .base_name = discard_const_p(char, name)
+       };
+
        DEBUG(10, ("solarisacl_sys_acl_set_file called for file '%s'\n",
                   name));
 
@@ -166,12 +168,18 @@ int solarisacl_sys_acl_set_file(vfs_handle_struct *handle,
         * the default acl as provided, we have to get the acl part 
         * that has not been specified in "type" from the file first 
         * and concatenate it with the acl provided.
+        *
+        * We can directly use SMB_VFS_STAT here, as if this was a
+        * POSIX call on a symlink, we've already refused it.
+        * For a Windows acl mapped call on a symlink, we want to follow
+        * it.
         */
-       if (vfs_stat_smb_basename(handle->conn, name, &s) != 0) {
+       ret = SMB_VFS_STAT(conn, &smb_fname);
+       if (ret != 0) {
                DEBUG(10, ("Error in stat call: %s\n", strerror(errno)));
                goto done;
        }
-       if (S_ISDIR(s.st_ex_mode)) {
+       if (S_ISDIR(smb_fname.st.st_ex_mode)) {
                SOLARIS_ACL_T other_acl = NULL;
                int other_count;
                SMB_ACL_TYPE_T other_type;
diff --git a/source3/modules/vfs_streams_xattr.c 
b/source3/modules/vfs_streams_xattr.c
index 3887d9f..0d54734 100644
--- a/source3/modules/vfs_streams_xattr.c
+++ b/source3/modules/vfs_streams_xattr.c
@@ -683,11 +683,12 @@ static int streams_xattr_rename(vfs_handle_struct *handle,
        return ret;
 }
 
-static NTSTATUS walk_xattr_streams(vfs_handle_struct *handle, files_struct 
*fsp,
-                                  const char *fname,
-                                  bool (*fn)(struct ea_struct *ea,
-                                             void *private_data),
-                                  void *private_data)
+static NTSTATUS walk_xattr_streams(vfs_handle_struct *handle,
+                               files_struct *fsp,
+                               const struct smb_filename *smb_fname,
+                               bool (*fn)(struct ea_struct *ea,
+                                       void *private_data),
+                               void *private_data)
 {
        NTSTATUS status;
        char **names;
@@ -697,8 +698,12 @@ static NTSTATUS walk_xattr_streams(vfs_handle_struct 
*handle, files_struct *fsp,
        SMB_VFS_HANDLE_GET_DATA(handle, config, struct streams_xattr_config,
                                return NT_STATUS_UNSUCCESSFUL);
 
-       status = get_ea_names_from_file(talloc_tos(), handle->conn, fsp, fname,
-                                       &names, &num_names);
+       status = get_ea_names_from_file(talloc_tos(),
+                               handle->conn,
+                               fsp,
+                               smb_fname,
+                               &names,
+                               &num_names);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
@@ -729,11 +734,17 @@ static NTSTATUS walk_xattr_streams(vfs_handle_struct 
*handle, files_struct *fsp,
                        continue;
                }
 
-               status = get_ea_value(names, handle->conn, fsp, fname,
-                                     names[i], &ea);
+               status = get_ea_value(names,
+                                       handle->conn,
+                                       fsp,
+                                       smb_fname->base_name,
+                                       names[i],
+                                       &ea);
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(10, ("Could not get ea %s for file %s: %s\n",
-                                  names[i], fname, nt_errstr(status)));
+                               names[i],
+                               smb_fname->base_name,
+                               nt_errstr(status)));
                        continue;
                }
 
@@ -823,23 +834,10 @@ static NTSTATUS 
streams_xattr_streaminfo(vfs_handle_struct *handle,
 
        if ((fsp != NULL) && (fsp->fh->fd != -1)) {
                ret = SMB_VFS_FSTAT(fsp, &sbuf);
-       }
-       else {
-               struct smb_filename *smb_fname_base = NULL;
-               smb_fname_base = synthetic_smb_fname(talloc_tos(),
-                                       smb_fname->base_name,
-                                       NULL,
-                                       NULL);
-               if (smb_fname_base == NULL) {
-                       return NT_STATUS_NO_MEMORY;
-               }
-               if (lp_posix_pathnames()) {
-                       ret = SMB_VFS_LSTAT(handle->conn, smb_fname_base);
-               } else {
-                       ret = SMB_VFS_STAT(handle->conn, smb_fname_base);
-               }
-               sbuf = smb_fname_base->st;
-               TALLOC_FREE(smb_fname_base);
+       } else {
+               ret = vfs_stat_smb_basename(handle->conn,
+                               smb_fname->base_name,
+                               &sbuf);
        }
 
        if (ret == -1) {
@@ -862,7 +860,7 @@ static NTSTATUS streams_xattr_streaminfo(vfs_handle_struct 
*handle,
                 */
                status = NT_STATUS_OK;
        } else {
-               status = walk_xattr_streams(handle, fsp, smb_fname->base_name,
+               status = walk_xattr_streams(handle, fsp, smb_fname,
                                    collect_one_stream, &state);
        }
 
diff --git a/source3/modules/vfs_xattr_tdb.c b/source3/modules/vfs_xattr_tdb.c
index 9bb4dc8..a22192b 100644
--- a/source3/modules/vfs_xattr_tdb.c
+++ b/source3/modules/vfs_xattr_tdb.c
@@ -407,7 +407,6 @@ static int xattr_tdb_rmdir(vfs_handle_struct *handle,
        struct file_id id;
        struct db_context *db;
        int ret;
-       const char *path = smb_fname->base_name;
        TALLOC_CTX *frame = talloc_stackframe();
 
        SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context,
@@ -416,7 +415,9 @@ static int xattr_tdb_rmdir(vfs_handle_struct *handle,
                                        TALLOC_FREE(frame); return -1;
                                });
 
-       if (vfs_stat_smb_basename(handle->conn, path, &sbuf) == -1) {
+       if (vfs_stat_smb_basename(handle->conn,
+                               smb_fname->base_name,
+                               &sbuf) == -1) {
                TALLOC_FREE(frame);
                return -1;
        }
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index b1917fe..0951280 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -694,7 +694,7 @@ void reply_ntcreate_and_X(struct smb_request *req)
 
                /* Do we have any EA's ? */
                status = get_ea_names_from_file(ctx, conn, fsp,
-                               smb_fname->base_name, NULL, &num_names);
+                               smb_fname, NULL, &num_names);
                if (NT_STATUS_IS_OK(status) && num_names) {
                        file_status &= ~NO_EAS;
                }
@@ -1339,7 +1339,7 @@ static void call_nt_transact_create(connection_struct 
*conn,
 
                /* Do we have any EA's ? */
                status = get_ea_names_from_file(ctx, conn, fsp,
-                               smb_fname->base_name, NULL, &num_names);
+                               smb_fname, NULL, &num_names);
                if (NT_STATUS_IS_OK(status) && num_names) {
                        file_status &= ~NO_EAS;
                }
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index f9ae4a3..776e91d 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -1119,9 +1119,12 @@ bool samba_private_attr_name(const char *unix_ea_name);
 NTSTATUS get_ea_value(TALLOC_CTX *mem_ctx, connection_struct *conn,
                      files_struct *fsp, const char *fname,
                      const char *ea_name, struct ea_struct *pea);
-NTSTATUS get_ea_names_from_file(TALLOC_CTX *mem_ctx, connection_struct *conn,
-                               files_struct *fsp, const char *fname,
-                               char ***pnames, size_t *pnum_names);
+NTSTATUS get_ea_names_from_file(TALLOC_CTX *mem_ctx,
+                       connection_struct *conn,
+                       files_struct *fsp,
+                       const struct smb_filename *smb_fname,
+                       char ***pnames,
+                       size_t *pnum_names);
 NTSTATUS set_ea(connection_struct *conn, files_struct *fsp,
                const struct smb_filename *smb_fname, struct ea_list *ea_list);
 struct ea_list *read_ea_list_entry(TALLOC_CTX *ctx, const char *pdata, size_t 
data_size, size_t *pbytes_used);
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index fd363b9..9c77a67 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -60,7 +60,7 @@ static char *store_file_unix_basic_info2(connection_struct 
*conn,
 
 static NTSTATUS refuse_symlink(connection_struct *conn,
                        const files_struct *fsp,
-                       const char *name)
+                       const struct smb_filename *smb_fname)
 {
        SMB_STRUCT_STAT sbuf;
        const SMB_STRUCT_STAT *pst = NULL;
@@ -69,7 +69,7 @@ static NTSTATUS refuse_symlink(connection_struct *conn,
                pst = &fsp->fsp_name->st;
        } else {
                int ret = vfs_stat_smb_basename(conn,
-                               name,
+                               smb_fname->base_name,
                                &sbuf);
                if (ret == -1) {
                        return map_nt_error_from_unix(errno);
@@ -230,9 +230,12 @@ NTSTATUS get_ea_value(TALLOC_CTX *mem_ctx, 
connection_struct *conn,
        return NT_STATUS_OK;
 }
 
-NTSTATUS get_ea_names_from_file(TALLOC_CTX *mem_ctx, connection_struct *conn,
-                               files_struct *fsp, const char *fname,
-                               char ***pnames, size_t *pnum_names)
+NTSTATUS get_ea_names_from_file(TALLOC_CTX *mem_ctx,
+                               connection_struct *conn,
+                               files_struct *fsp,
+                               const struct smb_filename *smb_fname,
+                               char ***pnames,
+                               size_t *pnum_names)
 {


-- 
Samba Shared Repository

Reply via email to