[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Jul 1 18:06:06 MDT 2015


The branch, master has been updated
       via  ddc4c67 librpc: prevent invalid NULL pointer derref in dcerpc_binding_get_auth_info().
       via  20075e6 s3:vfs: copy_chunk buffer size
       via  4e28dd1 selftest: Plan samba3.blackbox.preserve_case testcase
       via  f72be14 tests: Add test_preserve_case.sh
       via  451dc38 selftest: Add setup_fileserver()
       via  2b644e3 s3:libsmb: fix resolve_ads return if there were no answers
      from  86cff1d tevent: add and use debug class for tevent

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


- Log -----------------------------------------------------------------
commit ddc4c6767a98bb087bb435ed3a4591e75637b1e8
Author: Günther Deschner <gd at samba.org>
Date:   Wed Jul 1 17:14:10 2015 +0200

    librpc: prevent invalid NULL pointer derref in dcerpc_binding_get_auth_info().
    
    Guenther
    
    Signed-off-by: Günther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Jul  2 02:05:38 CEST 2015 on sn-devel-104

commit 20075e6b3082939fbd5d7ca4f327d29d62c33c87
Author: Ralph Boehme <slow at samba.org>
Date:   Wed Jul 1 17:57:36 2015 +0200

    s3:vfs: copy_chunk buffer size
    
    Use a dynamically allocated copy_chunk buffer size with an upper bound
    of 8 MB for now.
    
    The previous size of 64 KB has proven to really hurt performance,
    especially with "strict locking = yes".
    
    The SMB2 protocol level maximum allowed copy_chunk size is 1 MB, that's
    what will be used as buffer size in the typical case.
    
    With the AAPL copyfile extension the requested copy_chunk size is the
    size whole file, which would then make use of a larger buffer up to the
    limit of 8 MB.
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4e28dd16c528e3bf3cfa0a4ecfdee9188f02ec49
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Jul 1 14:09:32 2015 +0200

    selftest: Plan samba3.blackbox.preserve_case testcase
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit f72be14315b9e2574980127b7c0f9fdcbea10d37
Author: Andreas Schneider <asn at samba.org>
Date:   Fri May 15 10:05:26 2015 +0200

    tests: Add test_preserve_case.sh
    
    Test for: https://bugzilla.samba.org/show_bug.cgi?id=10650
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 451dc3889ef530174f80177d5e8b84c6a8b8e777
Author: Robin Hack <rhack at redhat.com>
Date:   Fri May 15 09:43:29 2015 +0200

    selftest: Add setup_fileserver()
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    Signed-off-by: Robin Hack <rhack at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 2b644e3d5dcbc286468764cd48b6b7044463d5df
Author: Michael Adam <obnox at samba.org>
Date:   Tue Jun 30 16:51:43 2015 +0200

    s3:libsmb: fix resolve_ads return if there were no answers
    
    Signed-off-by: Michael Adam <obnox at samba.org>
    Reviewed-by: "Stefan (metze) Metzmacher" <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 librpc/rpc/binding.c                       |  4 +-
 selftest/target/Samba.pm                   |  1 +
 selftest/target/Samba3.pm                  | 96 +++++++++++++++++++++++++++++-
 source3/libsmb/namequery.c                 |  7 +++
 source3/modules/vfs_default.c              | 10 +++-
 source3/script/tests/test_preserve_case.sh | 78 ++++++++++++++++++++++++
 source3/selftest/tests.py                  |  2 +
 7 files changed, 193 insertions(+), 5 deletions(-)
 create mode 100755 source3/script/tests/test_preserve_case.sh


Changeset truncated at 500 lines:

diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c
index 37e0c4f..f131d00 100644
--- a/librpc/rpc/binding.c
+++ b/librpc/rpc/binding.c
@@ -596,11 +596,11 @@ _PUBLIC_ void dcerpc_binding_get_auth_info(const struct dcerpc_binding *b,
 		auth_level = DCERPC_AUTH_LEVEL_NONE;
 	}
 
-	if (_auth_type == NULL) {
+	if (_auth_type != NULL) {
 		*_auth_type = auth_type;
 	}
 
-	if (_auth_level == NULL) {
+	if (_auth_level != NULL) {
 		*_auth_level = auth_level;
 	}
 }
diff --git a/selftest/target/Samba.pm b/selftest/target/Samba.pm
index 4949086..e128fd3 100644
--- a/selftest/target/Samba.pm
+++ b/selftest/target/Samba.pm
@@ -177,6 +177,7 @@ sub get_interface($)
     $interfaces{"chgdcpass"} = 32;
     $interfaces{"promotedvdc"} = 33;
     $interfaces{"rfc2307member"} = 34;
+    $interfaces{"fileserver"} = 35;
 
     # update lib/socket_wrapper/socket_wrapper.c
     #  #define MAX_WRAPPED_INTERFACES 32
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index a380e7a..03c78f2 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -178,6 +178,8 @@ sub setup_env($$$)
 		return $self->setup_nt4_dc_schannel("$path/nt4_dc_schannel");
 	} elsif ($envname eq "simpleserver") {
 		return $self->setup_simpleserver("$path/simpleserver");
+	} elsif ($envname eq "fileserver") {
+		return $self->setup_fileserver("$path/fileserver");
 	} elsif ($envname eq "maptoguest") {
 		return $self->setup_maptoguest("$path/maptoguest");
 	} elsif ($envname eq "ktest") {
@@ -526,7 +528,7 @@ sub setup_simpleserver($$)
 {
 	my ($self, $path) = @_;
 
-	print "PROVISIONING server with security=share...";
+	print "PROVISIONING simple server...";
 
 	my $prefix_abs = abs_path($path);
 
@@ -557,6 +559,98 @@ sub setup_simpleserver($$)
 	return $vars;
 }
 
+sub setup_fileserver($$)
+{
+	my ($self, $path) = @_;
+	my $prefix_abs = abs_path($path);
+
+	print "PROVISIONING file server ...\n";
+
+	my @dirs = ();
+
+	mkdir($prefix_abs, 0777);
+
+	my $share_dir="$prefix_abs/share";
+
+	# Create share directory structure
+	my $lower_case_share_dir="$share_dir/lower-case";
+	push(@dirs, $lower_case_share_dir);
+
+	my $lower_case_share_dir_30000="$share_dir/lower-case-30000";
+	push(@dirs, $lower_case_share_dir_30000);
+
+	my $fileserver_options = "
+[lowercase]
+	path = $lower_case_share_dir
+	comment = smb username is [%U]
+	case sensitive = True
+	default case = lower
+	preserve case = no
+	short preserve case = no
+[lowercase-30000]
+	path = $lower_case_share_dir_30000
+	comment = smb username is [%U]
+	case sensitive = True
+	default case = lower
+	preserve case = no
+	short preserve case = no
+	";
+
+	my $vars = $self->provision($path,
+				    "FILESERVER",
+				    "fileserver_secret",
+				    $fileserver_options,
+				    undef,
+				    undef,
+				    1);
+
+	$vars or return undef;
+
+	if (not $self->check_or_start($vars, "yes", "no", "yes")) {
+	       return undef;
+	}
+
+	$self->{vars}->{fileserver} = $vars;
+
+	mkdir($_, 0777) foreach(@dirs);
+
+	## Create case sensitive lower case share dir
+	foreach my $file ('a'..'z') {
+		my $full_path = $lower_case_share_dir . '/' . $file;
+		open my $fh, '>', $full_path;
+		# Add some content to file
+		print $fh $full_path;
+		close $fh;
+	}
+
+	for (my $file = 1; $file < 51; ++$file) {
+		my $full_path = $lower_case_share_dir . '/' . $file;
+		open my $fh, '>', $full_path;
+		# Add some content to file
+		print $fh $full_path;
+		close $fh;
+	}
+
+	# Create content for 30000 share
+	foreach my $file ('a'..'z') {
+		my $full_path = $lower_case_share_dir_30000 . '/' . $file;
+		open my $fh, '>', $full_path;
+		# Add some content to file
+		print $fh $full_path;
+		close $fh;
+	}
+
+	for (my $file = 1; $file < 30001; ++$file) {
+		my $full_path = $lower_case_share_dir_30000 . '/' . $file;
+		open my $fh, '>', $full_path;
+		# Add some content to file
+		print $fh $full_path;
+		close $fh;
+	}
+
+	return $vars;
+}
+
 sub setup_ktest($$$)
 {
 	my ($self, $prefix) = @_;
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c
index 5e48474..7eb5dff 100644
--- a/source3/libsmb/namequery.c
+++ b/source3/libsmb/namequery.c
@@ -2478,6 +2478,13 @@ static NTSTATUS resolve_ads(const char *name,
 		return status;
 	}
 
+	if (numdcs == 0) {
+		*return_iplist = NULL;
+		*return_count = 0;
+		talloc_destroy(ctx);
+		return NT_STATUS_OK;
+	}
+
 	for (i=0;i<numdcs;i++) {
 		if (!dcs[i].ss_s) {
 			numaddrs += 1;
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 9b434a0..6982634 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -1395,7 +1395,7 @@ static NTSTATUS vfswrap_fsctl(struct vfs_handle_struct *handle,
 
 struct vfs_cc_state {
 	off_t copied;
-	uint8_t buf[65536];
+	uint8_t *buf;
 };
 
 static struct tevent_req *vfswrap_copy_chunk_send(struct vfs_handle_struct *handle,
@@ -1419,6 +1419,12 @@ static struct tevent_req *vfswrap_copy_chunk_send(struct vfs_handle_struct *hand
 		return NULL;
 	}
 
+	vfs_cc_state->buf = talloc_array(vfs_cc_state, uint8_t,
+					 MIN(num, 8*1024*1024));
+	if (tevent_req_nomem(vfs_cc_state->buf, req)) {
+		return tevent_req_post(req, ev);
+	}
+
 	status = vfs_stat_fsp(src_fsp);
 	if (tevent_req_nterror(req, status)) {
 		return tevent_req_post(req, ev);
@@ -1444,7 +1450,7 @@ static struct tevent_req *vfswrap_copy_chunk_send(struct vfs_handle_struct *hand
 		struct lock_struct lck;
 		int saved_errno;
 
-		off_t this_num = MIN(sizeof(vfs_cc_state->buf),
+		off_t this_num = MIN(talloc_array_length(vfs_cc_state->buf),
 				     num - vfs_cc_state->copied);
 
 		if (src_fsp->op == NULL) {
diff --git a/source3/script/tests/test_preserve_case.sh b/source3/script/tests/test_preserve_case.sh
new file mode 100755
index 0000000..2e49b0c
--- /dev/null
+++ b/source3/script/tests/test_preserve_case.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# Blackbox test for share with preserve case options
+#
+# https://bugzilla.samba.org/show_bug.cgi?id=10650
+
+if [ $# -lt 6 ]; then
+cat <<EOF
+Usage: test_preserve_case.sh SERVER DOMAIN USERNAME PASSWORD PREFIX SMBCLIENT
+EOF
+exit 1;
+fi
+
+SERVER=$1
+DOMAIN=$2
+USERNAME=$3
+PASSWORD=$4
+PREFIX=$5
+smbclient=$6
+shift 6
+failed=0
+
+incdir=`dirname $0`/../../../testprogs/blackbox
+. $incdir/subunit.sh
+
+test_smbclient() {
+	name="$1"
+	share="$2"
+	cmd="$3"
+	shift
+	shift
+	subunit_start_test "$name"
+	output=$($VALGRIND $smbclient //$SERVER/$share -c "$cmd" $@ 2>&1)
+	status=$?
+	if [ x$status = x0 ]; then
+		subunit_pass_test "$name"
+	else
+		echo "$output" | subunit_fail_test "$name"
+	fi
+	return $status
+}
+
+PROTOCOL_LIST="NT1 SMB2 SMB3"
+SHARE="lowercase"
+
+for PROTOCOL in $PROTOCOL_LIST; do
+	test_smbclient "Test lowercase ls 1 ($PROTOCOL)" $SHARE "ls 1" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	test_smbclient "Test lowercase get 1 ($PROTOCOL)" $SHARE "get 1 LOCAL_1" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	rm -f LOCAL_1
+
+	test_smbclient "Test lowercase ls A ($PROTOCOL)"  $SHARE "ls A" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	test_smbclient "Test lowercase get A ($PROTOCOL)" $SHARE "get A LOCAL_A" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	rm -f LOCAL_A
+
+	test_smbclient "Test lowercase ls z ($PROTOCOL)"  $SHARE "ls z" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	test_smbclient "Test lowercase get z ($PROTOCOL)" $SHARE "get z LOCAL_Z" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	rm -f LOCAL_Z
+done
+
+SHARE="lowercase-30000"
+
+for PROTOCOL in $PROTOCOL_LIST; do
+	test_smbclient "Test lowercase ls 25839 ($PROTOCOL)" $SHARE "ls 25839" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+
+	test_smbclient "Test lowercase ls 1 ($PROTOCOL)" $SHARE "ls 1" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	test_smbclient "Test lowercase get 1 ($PROTOCOL)" $SHARE "get 1 LOCAL_1" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	rm -f LOCAL_1
+
+	test_smbclient "Test lowercase ls A ($PROTOCOL)"  $SHARE "ls A" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	test_smbclient "Test lowercase get A ($PROTOCOL)" $SHARE "get A LOCAL_A" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	rm -f LOCAL_A
+
+	test_smbclient "Test lowercase ls z ($PROTOCOL)"  $SHARE "ls z" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	test_smbclient "Test lowercase get z ($PROTOCOL)" $SHARE "get z LOCAL_Z" -U$USERNAME%$PASSWORD -m$PROTOCOL || failed=`expr $failed + 1`
+	rm -f LOCAL_Z
+done
+
+exit $failed
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index 1e5bc71..1f6174c 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -174,6 +174,8 @@ for env in ["nt4_dc"]:
     # encrypted
     plantestsuite("samba3.blackbox.smbclient_s3.crypt (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient3, wbinfo, net, configuration, "-e"])
 
+for env in ["fileserver"]:
+    plantestsuite("samba3.blackbox.preserve_case (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_preserve_case.sh"), '$SERVER', '$DOMAIN', '$USERNAME', '$PASSWORD', '$PREFIX', smbclient3])
 
     #
     # tar command tests


-- 
Samba Shared Repository


More information about the samba-cvs mailing list