[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Tue Jul 18 12:06:03 UTC 2017
The branch, master has been updated
via 5facd04 s3: smbclient: Add a test for the setmode command.
via f1cc79a s3: libsmb: Reverse sense of 'clear all attributes', ignore attribute change in SMB2 to match SMB1.
via 59f8951 Revert "s3:smbclient: Allow last dos attribute to be cleared"
from 4cced4d s3:client: The smbspool krb5 wrapper needs negotiate for authentication
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 5facd045efe88783ba078c14793d05439bcc5a4b
Author: Jeremy Allison <jra at samba.org>
Date: Fri Jul 14 16:09:50 2017 -0700
s3: smbclient: Add a test for the setmode command.
Tested over SMB1 and SMB2.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12899
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Richard Sharpe <realrichardsharpe at gmail.com>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Tue Jul 18 14:05:18 CEST 2017 on sn-devel-144
commit f1cc79a46d56bda99c392d491d88479cd6427a32
Author: Jeremy Allison <jra at samba.org>
Date: Mon Jul 17 10:37:15 2017 -0700
s3: libsmb: Reverse sense of 'clear all attributes', ignore attribute change in SMB2 to match SMB1.
SMB1 uses attr == 0 to clear all attributes
on a file (end up with FILE_ATTRIBUTE_NORMAL),
and attr == FILE_ATTRIBUTE_NORMAL to mean ignore
request attribute change.
SMB2 uses exactly the reverse. Unfortunately as the
cli_setatr() ABI is exposed inside libsmbclient,
we must make the SMB2 cli_smb2_setatr() call
export the same ABI as the SMB1 cli_setatr()
which calls it. This means reversing the sense
of the requested attr argument if it's zero
or FILE_ATTRIBUTE_NORMAL.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12899
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Richard Sharpe <realrichardsharpe at gmail.com>
commit 59f89515051c1b68f2de6dc76cfcf126c71d1db0
Author: Jeremy Allison <jra at samba.org>
Date: Mon Jul 17 10:38:36 2017 -0700
Revert "s3:smbclient: Allow last dos attribute to be cleared"
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 at samba.org>
Reviewed-by: Richard Sharpe <realrichardsharpe at gmail.com>
-----------------------------------------------------------------------
Summary of changes:
source3/client/client.c | 24 ++-------------
source3/libsmb/cli_smb2_fnum.c | 23 ++++++++++++++
source3/script/tests/test_smbclient_s3.sh | 51 +++++++++++++++++++++++++++++++
3 files changed, 77 insertions(+), 21 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/client/client.c b/source3/client/client.c
index aa8d949..d8c96e6 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -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;
diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c
index 954f3fe..6967555 100644
--- a/source3/libsmb/cli_smb2_fnum.c
+++ b/source3/libsmb/cli_smb2_fnum.c
@@ -1698,6 +1698,29 @@ NTSTATUS cli_smb2_setatr(struct cli_state *cli,
inbuf.length = sizeof(inbuf_store);
data_blob_clear(&inbuf);
+ /*
+ * SMB1 uses attr == 0 to clear all attributes
+ * on a file (end up with FILE_ATTRIBUTE_NORMAL),
+ * and attr == FILE_ATTRIBUTE_NORMAL to mean ignore
+ * request attribute change.
+ *
+ * SMB2 uses exactly the reverse. Unfortunately as the
+ * cli_setatr() ABI is exposed inside libsmbclient,
+ * we must make the SMB2 cli_smb2_setatr() call
+ * export the same ABI as the SMB1 cli_setatr()
+ * which calls it. This means reversing the sense
+ * of the requested attr argument if it's zero
+ * or FILE_ATTRIBUTE_NORMAL.
+ *
+ * See BUG: https://bugzilla.samba.org/show_bug.cgi?id=12899
+ */
+
+ if (attr == 0) {
+ attr = FILE_ATTRIBUTE_NORMAL;
+ } else if (attr == FILE_ATTRIBUTE_NORMAL) {
+ attr = 0;
+ }
+
SSVAL(inbuf.data, 32, attr);
if (mtime != 0) {
put_long_date((char *)inbuf.data + 16,mtime);
diff --git a/source3/script/tests/test_smbclient_s3.sh b/source3/script/tests/test_smbclient_s3.sh
index 3cbe6f5..f647fd7 100755
--- a/source3/script/tests/test_smbclient_s3.sh
+++ b/source3/script/tests/test_smbclient_s3.sh
@@ -1232,6 +1232,53 @@ EOF
fi
}
+# Test smbclient setmode command
+test_setmode()
+{
+ tmpfile=$PREFIX/smbclient_interactive_prompt_commands
+
+ cat > $tmpfile <<EOF
+del test_setmode
+put ${SMBCLIENT} test_setmode
+setmode test_setmode +r +s +h +a
+allinfo test_setmode
+setmode test_setmode -rsha
+allinfo test_setmode
+del test_setmode
+quit
+EOF
+ cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp -I $SERVER_IP $ADDARGS < $tmpfile 2>&1'
+ eval echo "$cmd"
+ out=`eval $cmd`
+ ret=$?
+
+ if [ $ret != 0 ] ; then
+ echo "$out"
+ echo "failed setmode test with output $ret"
+ false
+ return
+ fi
+
+ echo "$out" | grep 'attributes: RHSA'
+ ret=$?
+ if [ $ret -ne 0 ] ; then
+ echo "$out"
+ echo "failed - should get attributes: RHSA"
+ false
+ return
+ fi
+
+ echo "$out" | grep 'attributes: (80)'
+ ret=$?
+ if [ $ret -ne 0 ] ; then
+ echo "$out"
+ echo "failed - should also get attributes: (80)"
+ false
+ return
+ fi
+}
+
+
test_server_os_message()
{
tmpfile=$PREFIX/smbclient_interactive_prompt_commands
@@ -1377,6 +1424,10 @@ testit "server os message" \
test_server_os_message || \
failed=`expr $failed + 1`
+testit "setmode test" \
+ test_setmode || \
+ failed=`expr $failed + 1`
+
testit "rm -rf $LOGDIR" \
rm -rf $LOGDIR || \
failed=`expr $failed + 1`
--
Samba Shared Repository
More information about the samba-cvs
mailing list