[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Fri Jul 14 00:44:03 UTC 2017


The branch, master has been updated
       via  a4c3ee6 s3:smbclient: Allow last dos attribute to be cleared
      from  df0db9d vfs_fruit: don't use MS NFS ACEs with Windows clients

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


- Log -----------------------------------------------------------------
commit a4c3ee6767d768365a47bfda32a26cb7994b3787
Author: Steve French <smfrench at gmail.com>
Date:   Thu Jul 13 13:57:53 2017 -0500

    s3:smbclient: Allow last dos attribute to be cleared
    
    With the upgrade to SMB3.1.1 from cifs for smbclient,
    setmode no longer works when removing attributes,
    if the resultant attribute is 0 it is skipped
    (unlike for the old cifs setpathinfo).
    
    When clearing the final attribute, pass in ATTRIBUTE_NORMAL
    instead of zero.
    
    This also removes a redundant cli_setatr call
    when clearing attributes (cli_setatr was being called
    twice).
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=12899
    
    Signed-off-by: Steve French <sfrench at samba.org>
    Reviewed-by: Anne Marie Merritt <annemarie.merritt at primarydata.com>
    Reviewed-by: Richard Sharpe <realrichardsharpe at gmail.com>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Fri Jul 14 02:43:47 CEST 2017 on sn-devel-144

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

Summary of changes:
 source3/client/client.c | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/client/client.c b/source3/client/client.c
index d8c96e6..aa8d949 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -4961,11 +4961,21 @@ int set_remote_attr(const char *filename, uint16_t new_attr, int mode)
 	}
 
 	if (mode == ATTR_SET) {
+		if (new_attr == old_attr) {
+			d_printf("attributes unchanged, cli_setatr skipped\n");
+			return 0;
+		}
 		new_attr |= old_attr;
 	} else {
 		new_attr = old_attr & ~new_attr;
 	}
-
+	/*
+	 * if we are clearing attributes - can't pass 0 in
+	 * since that means "skip this field. See MS-FSCC section 2.6
+	 */
+	if (new_attr == 0) {
+		new_attr = FILE_ATTRIBUTE_NORMAL;
+	}
 	status = cli_setatr(cli, filename, new_attr, 0);
 	if (!NT_STATUS_IS_OK(status)) {
 		d_printf("cli_setatr failed: %s\n", nt_errstr(status));
@@ -4990,6 +5000,8 @@ int cmd_setmode(void)
 	int mode = ATTR_SET;
 	int err = 0;
 	bool ok;
+	bool set = false;
+	bool unset = false;
 	TALLOC_CTX *ctx = talloc_new(NULL);
 	if (ctx == NULL) {
 		return 1;
@@ -5017,9 +5029,11 @@ int cmd_setmode(void)
 		while (*s) {
 			switch (*s++) {
 			case '+':
+				set = true;
 				mode = ATTR_SET;
 				break;
 			case '-':
+				unset = true;
 				mode = ATTR_UNSET;
 				break;
 			case 'r':
@@ -5051,8 +5065,12 @@ int cmd_setmode(void)
 	DEBUG(2, ("perm set %d %d\n", attr[ATTR_SET], attr[ATTR_UNSET]));
 
 	/* ignore return value: server might not store DOS attributes */
-	set_remote_attr(fname, attr[ATTR_SET], ATTR_SET);
-	set_remote_attr(fname, attr[ATTR_UNSET], ATTR_UNSET);
+	if (set) {
+		set_remote_attr(fname, attr[ATTR_SET], ATTR_SET);
+	}
+	if (unset) {
+		set_remote_attr(fname, attr[ATTR_UNSET], ATTR_UNSET);
+	}
 out:
 	talloc_free(ctx);
 	return err;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list