[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Fri Nov 21 17:08:03 MST 2014


The branch, master has been updated
       via  927290b vfs_streams_xattr: check stream type
       via  1076e4e vfs_streams_xattr: initialize pointer
       via  1160fcf vfs_streams_xattr: fix check with samba_private_attr_name()
      from  b7f6b09 s4-dns: dlz-bind: Add trailing '.' to all fqdn strings

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


- Log -----------------------------------------------------------------
commit 927290b384bc4f4fd53a1f93d4d27ccc71dd6135
Author: Ralph Boehme <slow at samba.org>
Date:   Fri Nov 21 14:56:08 2014 +0100

    vfs_streams_xattr: check stream type
    
    Only allow access to the stream type "$DATA". vfs_streams_depot does
    this too and it fixes the failing test "smb2.streams.names".
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Sat Nov 22 01:07:54 CET 2014 on sn-devel-104

commit 1076e4e4e2a2b6238116bd860b03a9dcc8a151f8
Author: Ralph Boehme <slow at samba.org>
Date:   Fri Nov 21 14:54:17 2014 +0100

    vfs_streams_xattr: initialize pointer
    
    Intitialize pointer to NULL, otherwise we talloc_free() an unitialized
    pointer in the error code path.
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 1160fcfe3d97644a6bcfa9ee687fd7dfca58e812
Author: Ralph Boehme <slow at samba.org>
Date:   Thu Nov 20 16:33:22 2014 +0100

    vfs_streams_xattr: fix check with samba_private_attr_name()
    
    We want to check with samba_private_attr_name() whether the xattr name
    is a private one, unfortunately it flags xattrs that begin with the
    default streams prefix as private.  By only calling
    samba_private_attr_name() in case the xattr does NOT begin with the
    default prefix, we know that if it returns 'true' it definitely one of
    our internal xattr like "user.DOSATTRIB".
    
    This fixes a bug introduced in 634bcb09a08b927fd79ae0e16aeee2a123605f94
    that denied all access to valid stream xattrs.
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source3/modules/vfs_streams_xattr.c | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c
index 735db2b..f0ab732 100644
--- a/source3/modules/vfs_streams_xattr.c
+++ b/source3/modules/vfs_streams_xattr.c
@@ -114,6 +114,12 @@ static NTSTATUS streams_xattr_get_name(vfs_handle_struct *handle,
 
 	stype = strchr_m(stream_name + 1, ':');
 
+	if (stype) {
+		if (strcasecmp_m(stype, ":$DATA") != 0) {
+			return NT_STATUS_INVALID_PARAMETER;
+		}
+	}
+
 	*xattr_name = talloc_asprintf(ctx, "%s%s",
 				      config->prefix,
 				      stream_name + 1);
@@ -533,7 +539,7 @@ static int streams_xattr_unlink(vfs_handle_struct *handle,
 {
 	NTSTATUS status;
 	int ret = -1;
-	char *xattr_name;
+	char *xattr_name = NULL;
 
 	if (!is_ntfs_stream_smb_fname(smb_fname)) {
 		return SMB_VFS_NEXT_UNLINK(handle, smb_fname);
@@ -687,13 +693,28 @@ static NTSTATUS walk_xattr_streams(vfs_handle_struct *handle, files_struct *fsp,
 	for (i=0; i<num_names; i++) {
 		struct ea_struct ea;
 
+		/*
+		 * We want to check with samba_private_attr_name()
+		 * whether the xattr name is a private one,
+		 * unfortunately it flags xattrs that begin with the
+		 * default streams prefix as private.
+		 *
+		 * By only calling samba_private_attr_name() in case
+		 * the xattr does NOT begin with the default prefix,
+		 * we know that if it returns 'true' it definitely one
+		 * of our internal xattr like "user.DOSATTRIB".
+		 */
+		if (strncasecmp_m(names[i], SAMBA_XATTR_DOSSTREAM_PREFIX,
+				  strlen(SAMBA_XATTR_DOSSTREAM_PREFIX)) != 0) {
+			if (samba_private_attr_name(names[i])) {
+				continue;
+			}
+		}
+
 		if (strncmp(names[i], config->prefix,
 			    config->prefix_len) != 0) {
 			continue;
 		}
-		if (samba_private_attr_name(names[i])) {
-			continue;
-		}
 
 		status = get_ea_value(names, handle->conn, fsp, fname,
 				      names[i], &ea);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list