Revert "s3:smbclient: Allow last dos attribute to be cleared"
authorJeremy Allison <jra@samba.org>
Mon, 17 Jul 2017 17:38:36 +0000 (10:38 -0700)
committerJeremy Allison <jra@samba.org>
Tue, 18 Jul 2017 07:49:17 +0000 (09:49 +0200)
Incorrect fix - this must be fixed inside cli_setatr(), not
the callers.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12899

This reverts commit a4c3ee6767d768365a47bfda32a26cb7994b3787.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Richard Sharpe <realrichardsharpe@gmail.com>
source3/client/client.c

index aa8d949bd0c848393f81b8514edaa234769ef5a0..d8c96e681900af912193da7d9195335f9277cbf1 100644 (file)
@@ -4961,21 +4961,11 @@ 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));
@@ -5000,8 +4990,6 @@ 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;
@@ -5029,11 +5017,9 @@ int cmd_setmode(void)
                while (*s) {
                        switch (*s++) {
                        case '+':
-                               set = true;
                                mode = ATTR_SET;
                                break;
                        case '-':
-                               unset = true;
                                mode = ATTR_UNSET;
                                break;
                        case 'r':
@@ -5065,12 +5051,8 @@ 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 */
-       if (set) {
-               set_remote_attr(fname, attr[ATTR_SET], ATTR_SET);
-       }
-       if (unset) {
-               set_remote_attr(fname, attr[ATTR_UNSET], ATTR_UNSET);
-       }
+       set_remote_attr(fname, attr[ATTR_SET], ATTR_SET);
+       set_remote_attr(fname, attr[ATTR_UNSET], ATTR_UNSET);
 out:
        talloc_free(ctx);
        return err;