[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Oct 6 04:15:02 UTC 2016


The branch, master has been updated
       via  f6f6263 torture/ioctl: test compression responses when unsupported
       via  7a10002 smbd/ioctl: match WS2016 ReFS get compression behaviour
       via  fb155a9 s3-rpcclient: Fix initializing rpcclient
       via  5148d3f s3-param: Add comment to call lp_load_global() after popt processing
       via  c7bcbd1 s3-utils: Fix loading smb.conf in smbcquotas
       via  fdf8471 s3-libnet: Pass enum value names to dcerpc_samr_SetUserInfo2()
       via  0e173d8 s4-libnet: Use SetUserInfo2 to set the account flags
      from  d02909f s3: lib: messaging. Add function comments I needed to understand this code.

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


- Log -----------------------------------------------------------------
commit f6f6263f1f03db965b64b5d7858e44ab5ffb0aeb
Author: David Disseldorp <ddiss at samba.org>
Date:   Tue Oct 4 01:15:20 2016 +0200

    torture/ioctl: test compression responses when unsupported
    
    Confirm that Samba matches Windows Server 2016 ReFS behaviour here.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=12144
    
    Reported-by: Nick Barrett
    Signed-off-by: David Disseldorp <ddiss at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Oct  6 06:14:34 CEST 2016 on sn-devel-144

commit 7a1000222877cdbc8967122b9de29021a42f4c8a
Author: David Disseldorp <ddiss at samba.org>
Date:   Tue Oct 4 01:09:37 2016 +0200

    smbd/ioctl: match WS2016 ReFS get compression behaviour
    
    ReFS doesn't support compression, but responds to get-compression FSCTLs
    with a successful COMPRESSION_FORMAT_NONE response. set-compression
    results in NT_STATUS_NOT_SUPPORTED.
    
    This commit modifies Samba to match the ReFS behaviour, when run atop
    a VFS that doesn't expose compression support.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=12144
    
    Reported-by: Nick Barrett
    Signed-off-by: David Disseldorp <ddiss at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit fb155a946d995de2c518d22bdb44f3d7f0b8dca3
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Oct 5 08:39:20 2016 +0200

    s3-rpcclient: Fix initializing rpcclient
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 5148d3f4fa57ed040285ba38523e5fda7d6e3520
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Oct 5 08:33:03 2016 +0200

    s3-param: Add comment to call lp_load_global() after popt processing
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c7bcbd166d23b6ebcc2d968b76b0640b9a9beebb
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Oct 5 08:22:54 2016 +0200

    s3-utils: Fix loading smb.conf in smbcquotas
    
    Pair-Programmed-With: Uri Simchoni <uri at samba.org>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Signed-off-by: Uri Simchoni <uri at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit fdf84713781b8ca9ec8fcbd7ca82f49713908f57
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Oct 4 18:14:50 2016 +0200

    s3-libnet: Pass enum value names to dcerpc_samr_SetUserInfo2()
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 0e173d8327890b93f44b358d8387b973174efe97
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Oct 4 18:09:54 2016 +0200

    s4-libnet: Use SetUserInfo2 to set the account flags
    
    [MS-WKST] states that SetUserInfo2 should be used to set the account
    flags. We already call this a few lines down to set the password.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 selftest/knownfail                |  1 +
 source3/libnet/libnet_join.c      | 14 ++++----
 source3/param/loadparm.c          |  3 ++
 source3/rpcclient/rpcclient.c     | 26 ++++++++++----
 source3/smbd/smb2_ioctl_filesys.c | 29 ++++++++-------
 source3/utils/smbcquotas.c        | 15 ++++++--
 source4/torture/smb2/ioctl.c      | 76 +++++++++++++++++++++++++++++++++++++++
 7 files changed, 135 insertions(+), 29 deletions(-)


Changeset truncated at 500 lines:

diff --git a/selftest/knownfail b/selftest/knownfail
index 076880f..976761b 100644
--- a/selftest/knownfail
+++ b/selftest/knownfail
@@ -173,6 +173,7 @@
 ^samba3.smb2.replay.replay3
 ^samba3.smb2.replay.replay4
 ^samba3.smb2.lock.*replay
+^samba4.smb2.ioctl.compress_notsup.*\(ad_dc_ntvfs\)
 ^samba3.raw.session.*reauth2 # maybe fix this?
 ^samba3.rpc.lsa.secrets.seal # This gives NT_STATUS_LOCAL_USER_SESSION_KEY
 ^samba3.rpc.samr.passwords.badpwdcount.samr.badPwdCount\(nt4_dc\) # We fail this test currently
diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c
index 86130ca..3ac7f39 100644
--- a/source3/libnet/libnet_join.c
+++ b/source3/libnet/libnet_join.c
@@ -1413,11 +1413,11 @@ static NTSTATUS libnet_join_joindomain_rpc(TALLOC_CTX *mem_ctx,
 	ZERO_STRUCT(user_info.info16);
 	user_info.info16.acct_flags = acct_flags;
 
-	status = dcerpc_samr_SetUserInfo(b, mem_ctx,
-					 &user_pol,
-					 16,
-					 &user_info,
-					 &result);
+	status = dcerpc_samr_SetUserInfo2(b, mem_ctx,
+					  &user_pol,
+					  UserControlInformation,
+					  &user_info,
+					  &result);
 	if (!NT_STATUS_IS_OK(status)) {
 		dcerpc_samr_DeleteUser(b, mem_ctx,
 				       &user_pol,
@@ -1459,7 +1459,7 @@ static NTSTATUS libnet_join_joindomain_rpc(TALLOC_CTX *mem_ctx,
 
 	status = dcerpc_samr_SetUserInfo2(b, mem_ctx,
 					  &user_pol,
-					  26,
+					  UserInternal5InformationNew,
 					  &user_info,
 					  &result);
 
@@ -1476,7 +1476,7 @@ static NTSTATUS libnet_join_joindomain_rpc(TALLOC_CTX *mem_ctx,
 
 		status = dcerpc_samr_SetUserInfo2(b, mem_ctx,
 						  &user_pol,
-						  24,
+						  UserInternal5Information,
 						  &user_info,
 						  &result);
 	}
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index f282651..9306444 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -3903,6 +3903,9 @@ bool lp_load_initial_only(const char *pszFname)
 
 /**
  * most common lp_load wrapper, loading only the globals
+ *
+ * If this is used in a daemon or client utility it should be called
+ * after processing popt.
  */
 bool lp_load_global(const char *file_name)
 {
diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c
index 74ae708..3f7a8b7 100644
--- a/source3/rpcclient/rpcclient.c
+++ b/source3/rpcclient/rpcclient.c
@@ -905,6 +905,7 @@ out_free:
 	char *user, *domain, *q;
 	const char *host;
 	int signing_state = SMB_SIGNING_IPC_DEFAULT;
+	bool ok;
 
 	/* make sure the vars that get altered (4th field) are in
 	   a fixed location or certain compilers complain */
@@ -976,21 +977,32 @@ out_free:
 	poptFreeContext(pc);
 	popt_burn_cmdline_password(argc, argv);
 
-	if (!init_names()) {
+	/* Load smb.conf file */
+
+	ok = lp_load_global(get_dyn_CONFIGFILE());
+	if (!ok) {
+		fprintf(stderr,
+			"Can't load %s - run testparm to debug it\n",
+			get_dyn_CONFIGFILE());
 		result = 1;
 		goto done;
 	}
 
-	/* Load smb.conf file */
-
-	if (!lp_load_global(get_dyn_CONFIGFILE()))
-		fprintf(stderr, "Can't load %s\n", get_dyn_CONFIGFILE());
+	rpcclient_msg_ctx = messaging_init(talloc_autofree_context(),
+			samba_tevent_context_init(talloc_autofree_context()));
+	if (rpcclient_msg_ctx == NULL) {
+		fprintf(stderr, "Could not init messaging context\n");
+		result = 1;
+		goto done;
+	}
 
 	/* We must load interfaces after we load the smb.conf */
 	load_interfaces();
 
-	rpcclient_msg_ctx = messaging_init(talloc_autofree_context(),
-			samba_tevent_context_init(talloc_autofree_context()));
+	if (!init_names()) {
+		result = 1;
+		goto done;
+	}
 
 	/*
 	 * Get password
diff --git a/source3/smbd/smb2_ioctl_filesys.c b/source3/smbd/smb2_ioctl_filesys.c
index 6e4a785..55ce3f2 100644
--- a/source3/smbd/smb2_ioctl_filesys.c
+++ b/source3/smbd/smb2_ioctl_filesys.c
@@ -48,19 +48,24 @@ static NTSTATUS fsctl_get_cmprn(TALLOC_CTX *mem_ctx,
 
 	/* Windows doesn't check for SEC_FILE_READ_ATTRIBUTE permission here */
 
-	if ((fsp->conn->fs_capabilities & FILE_FILE_COMPRESSION) == 0) {
-		DEBUG(4, ("FS does not advertise compression support\n"));
-		return NT_STATUS_NOT_SUPPORTED;
-	}
-
 	ZERO_STRUCT(cmpr_state);
-	status = SMB_VFS_GET_COMPRESSION(fsp->conn,
-					 mem_ctx,
-					 fsp,
-					 NULL,
-					 &cmpr_state.format);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	if (fsp->conn->fs_capabilities & FILE_FILE_COMPRESSION) {
+		status = SMB_VFS_GET_COMPRESSION(fsp->conn,
+						 mem_ctx,
+						 fsp,
+						 NULL,
+						 &cmpr_state.format);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
+		}
+	} else {
+		/*
+		 * bso#12144: The underlying filesystem doesn't support
+		 * compression, so we should respond with "not-compressed"
+		 * (like WS2016 ReFS) instead of STATUS_NOT_SUPPORTED or
+		 * NT_STATUS_INVALID_DEVICE_REQUEST.
+		 */
+		cmpr_state.format = COMPRESSION_FORMAT_NONE;
 	}
 
 	ndr_ret = ndr_push_struct_blob(&output, mem_ctx,
diff --git a/source3/utils/smbcquotas.c b/source3/utils/smbcquotas.c
index 06ecea1..8ba3cc5 100644
--- a/source3/utils/smbcquotas.c
+++ b/source3/utils/smbcquotas.c
@@ -582,6 +582,7 @@ int main(int argc, char *argv[])
 	static bool test_args = False;
 	struct cli_state *cli;
 	bool fix_user = False;
+	bool ok;
 	SMB_NTQUOTA_STRUCT qt;
 	TALLOC_CTX *frame = talloc_stackframe();
 	poptContext pc;
@@ -617,9 +618,6 @@ FSQFLAGS:QUOTA_ENABLED/DENY_DISK/LOG_SOFTLIMIT/LOG_HARD_LIMIT", "SETSTRING" },
 
 	fault_setup();
 
-	lp_load_global(get_dyn_CONFIGFILE());
-	load_interfaces();
-
 	smbcquotas_auth_info = user_auth_info_init(frame);
 	if (smbcquotas_auth_info == NULL) {
 		exit(1);
@@ -714,6 +712,17 @@ FSQFLAGS:QUOTA_ENABLED/DENY_DISK/LOG_SOFTLIMIT/LOG_HARD_LIMIT", "SETSTRING" },
 	poptFreeContext(pc);
 	popt_burn_cmdline_password(argc, argv);
 
+	ok = lp_load_global(get_dyn_CONFIGFILE());
+	if (!ok) {
+		DBG_ERR("ERROR: Loading config file %s - "
+			"run testparm to debug it\n",
+			get_dyn_CONFIGFILE());
+		exit(EXIT_PARSE_ERROR);
+	}
+
+	/* We must load interfaces after we load the smb.conf */
+	load_interfaces();
+
 	string_replace(path, '/', '\\');
 
 	server = SMB_STRDUP(path+2);
diff --git a/source4/torture/smb2/ioctl.c b/source4/torture/smb2/ioctl.c
index 2baf7b6..01cc150 100644
--- a/source4/torture/smb2/ioctl.c
+++ b/source4/torture/smb2/ioctl.c
@@ -2543,6 +2543,78 @@ static bool test_ioctl_compress_perms(struct torture_context *torture,
 	return true;
 }
 
+static bool test_ioctl_compress_notsup_get(struct torture_context *torture,
+					   struct smb2_tree *tree)
+{
+	struct smb2_handle fh;
+	NTSTATUS status;
+	TALLOC_CTX *tmp_ctx = talloc_new(tree);
+	bool ok;
+	uint16_t compression_fmt;
+
+	ok = test_setup_create_fill(torture, tree, tmp_ctx,
+				    FNAME, &fh, 0, SEC_RIGHTS_FILE_ALL,
+				    FILE_ATTRIBUTE_NORMAL);
+	torture_assert(torture, ok, "setup compression file");
+
+	/* skip if the server DOES support compression */
+	status = test_ioctl_compress_fs_supported(torture, tree, tmp_ctx, &fh,
+						  &ok);
+	torture_assert_ntstatus_ok(torture, status, "SMB2_GETINFO_FS");
+	if (ok) {
+		smb2_util_close(tree, fh);
+		torture_skip(torture, "FS compression supported\n");
+	}
+
+	/*
+	 * Despite not supporting compression, we should get a successful
+	 * response indicating that the file is uncompressed - like WS2016.
+	 */
+	status = test_ioctl_compress_get(torture, tmp_ctx, tree, fh,
+					 &compression_fmt);
+	torture_assert_ntstatus_ok(torture, status, "FSCTL_GET_COMPRESSION");
+
+	torture_assert(torture, (compression_fmt == COMPRESSION_FORMAT_NONE),
+		       "initial compression state not NONE");
+
+	smb2_util_close(tree, fh);
+	talloc_free(tmp_ctx);
+	return true;
+}
+
+static bool test_ioctl_compress_notsup_set(struct torture_context *torture,
+					   struct smb2_tree *tree)
+{
+	struct smb2_handle fh;
+	NTSTATUS status;
+	TALLOC_CTX *tmp_ctx = talloc_new(tree);
+	bool ok;
+
+	ok = test_setup_create_fill(torture, tree, tmp_ctx,
+				    FNAME, &fh, 0, SEC_RIGHTS_FILE_ALL,
+				    FILE_ATTRIBUTE_NORMAL);
+	torture_assert(torture, ok, "setup compression file");
+
+	/* skip if the server DOES support compression */
+	status = test_ioctl_compress_fs_supported(torture, tree, tmp_ctx, &fh,
+						  &ok);
+	torture_assert_ntstatus_ok(torture, status, "SMB2_GETINFO_FS");
+	if (ok) {
+		smb2_util_close(tree, fh);
+		torture_skip(torture, "FS compression supported\n");
+	}
+
+	status = test_ioctl_compress_set(torture, tmp_ctx, tree, fh,
+					 COMPRESSION_FORMAT_DEFAULT);
+	torture_assert_ntstatus_equal(torture, status,
+				      NT_STATUS_NOT_SUPPORTED,
+				      "FSCTL_GET_COMPRESSION");
+
+	smb2_util_close(tree, fh);
+	talloc_free(tmp_ctx);
+	return true;
+}
+
 /*
    basic testing of the SMB2 FSCTL_QUERY_NETWORK_INTERFACE_INFO ioctl
 */
@@ -6169,6 +6241,10 @@ struct torture_suite *torture_smb2_ioctl_init(void)
 				     test_ioctl_compress_set_file_attr);
 	torture_suite_add_1smb2_test(suite, "compress_perms",
 				     test_ioctl_compress_perms);
+	torture_suite_add_1smb2_test(suite, "compress_notsup_get",
+				     test_ioctl_compress_notsup_get);
+	torture_suite_add_1smb2_test(suite, "compress_notsup_set",
+				     test_ioctl_compress_notsup_set);
 	torture_suite_add_1smb2_test(suite, "network_interface_info",
 				     test_ioctl_network_interface_info);
 	torture_suite_add_1smb2_test(suite, "sparse_file_flag",


-- 
Samba Shared Repository



More information about the samba-cvs mailing list