diff options
author | Jeremy Allison <jra@samba.org> | 2010-11-10 17:54:57 -0800 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2010-11-10 18:07:51 -0800 |
commit | ac0ffba004160693ea5829775d732146ef261c47 (patch) | |
tree | 7d440a3a243f9c85da50f07a3994c7da034259bc /source3 | |
parent | c4c230bd0fb25a0433e36c4e4a315268ff44fbe0 (diff) | |
download | samba-ac0ffba004160693ea5829775d732146ef261c47.tar.gz samba-ac0ffba004160693ea5829775d732146ef261c47.tar.bz2 samba-ac0ffba004160693ea5829775d732146ef261c47.zip |
Add test that detects problems in the SMB signing code when run through cli_write() (which doesn't use the new async methods).
Unfortunately, and I think due to the socket wrapper code, this doesn't
detect the failure on the build farm, but running the RW-SIGNING test
separately against a Samba or Windows server using signing does.
Jeremy.
Diffstat (limited to 'source3')
-rwxr-xr-x | source3/script/tests/test_smbtorture_s3.sh | 2 | ||||
-rw-r--r-- | source3/torture/torture.c | 46 |
2 files changed, 36 insertions, 12 deletions
diff --git a/source3/script/tests/test_smbtorture_s3.sh b/source3/script/tests/test_smbtorture_s3.sh index 1abf7b6d8f..4680f64039 100755 --- a/source3/script/tests/test_smbtorture_s3.sh +++ b/source3/script/tests/test_smbtorture_s3.sh @@ -28,7 +28,7 @@ tests="FDPASS LOCK1 LOCK2 LOCK3 LOCK4 LOCK5 LOCK6 LOCK7 LOCK9" #tests="$tests UNLINK BROWSE ATTR TRANS2 MAXFID TORTURE " tests="$tests UNLINK BROWSE ATTR TRANS2 TORTURE " tests="$tests OPLOCK1 OPLOCK2 OPLOCK3 STREAMERROR" -tests="$tests DIR DIR1 DIR-CREATETIME TCON TCONDEV RW1 RW2 RW3" +tests="$tests DIR DIR1 DIR-CREATETIME TCON TCONDEV RW1 RW2 RW3 RW-SIGNING" tests="$tests OPEN XCOPY RENAME DELETE PROPERTIES W2K" tests="$tests TCON2 IOCTL CHKPATH FDSESS LOCAL-SUBSTITUTE CHAIN1" tests="$tests GETADDRINFO POSIX UID-REGRESSION-TEST SHORTNAME-TEST" diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 161c6f9a64..f69d734b7b 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -52,6 +52,7 @@ static fstring multishare_conn_fname; static bool use_multishare_conn = False; static bool do_encrypt; static const char *local_path = NULL; +static int signing_state = Undefined; bool torture_showall = False; @@ -178,7 +179,7 @@ static struct cli_state *open_nbt_connection(void) zero_sockaddr(&ss); - if (!(c = cli_initialise())) { + if (!(c = cli_initialise_ex(signing_state))) { printf("Failed initialize cli_struct to connect with %s\n", host); return NULL; } @@ -311,7 +312,7 @@ static struct cli_state *open_bad_nbt_connection(void) zero_sockaddr(&ss); - if (!(c = cli_initialise())) { + if (!(c = cli_initialise_ex(signing_state))) { printf("Failed initialize cli_struct to connect with %s\n", host); return NULL; } @@ -412,7 +413,7 @@ static bool torture_open_connection_share(struct cli_state **c, hostname, NULL, port_to_use, sharename, "?????", username, workgroup, - password, flags, Undefined, &retry); + password, flags, signing_state, &retry); if (!NT_STATUS_IS_OK(status)) { printf("failed to open share connection: //%s/%s port:%d - %s\n", hostname, sharename, port_to_use, nt_errstr(status)); @@ -887,7 +888,7 @@ static bool run_readwritemulti(int dummy) return test; } -static bool run_readwritelarge(int dummy) +static bool run_readwritelarge_internal(int max_xmit_k) { static struct cli_state *cli1; uint16_t fnum1; @@ -902,9 +903,17 @@ static bool run_readwritelarge(int dummy) cli_sockopt(cli1, sockops); memset(buf,'\0',sizeof(buf)); - cli1->max_xmit = 128*1024; + cli1->max_xmit = max_xmit_k*1024; + + if (signing_state == Required) { + /* Horrible cheat to force + multiple signed outstanding + packets against a Samba server. + */ + cli1->is_samba = false; + } - printf("starting readwritelarge\n"); + printf("starting readwritelarge_internal\n"); cli_unlink(cli1, lockfname, aSYSTEM | aHIDDEN); @@ -923,10 +932,10 @@ static bool run_readwritelarge(int dummy) } if (fsize == sizeof(buf)) - printf("readwritelarge test 1 succeeded (size = %lx)\n", + printf("readwritelarge_internal test 1 succeeded (size = %lx)\n", (unsigned long)fsize); else { - printf("readwritelarge test 1 failed (size = %lx)\n", + printf("readwritelarge_internal test 1 failed (size = %lx)\n", (unsigned long)fsize); correct = False; } @@ -958,10 +967,10 @@ static bool run_readwritelarge(int dummy) } if (fsize == sizeof(buf)) - printf("readwritelarge test 2 succeeded (size = %lx)\n", + printf("readwritelarge_internal test 2 succeeded (size = %lx)\n", (unsigned long)fsize); else { - printf("readwritelarge test 2 failed (size = %lx)\n", + printf("readwritelarge_internal test 2 failed (size = %lx)\n", (unsigned long)fsize); correct = False; } @@ -992,6 +1001,20 @@ static bool run_readwritelarge(int dummy) return correct; } +static bool run_readwritelarge(int dummy) +{ + return run_readwritelarge_internal(128); +} + +static bool run_readwritelarge_signtest(int dummy) +{ + bool ret; + signing_state = Required; + ret = run_readwritelarge_internal(2); + signing_state = Undefined; + return ret; +} + int line_count = 0; int nbio_id; @@ -1440,7 +1463,7 @@ static bool run_tcon_devtype_test(int dummy) host, NULL, port_to_use, NULL, NULL, username, workgroup, - password, flags, Undefined, &retry); + password, flags, signing_state, &retry); if (!NT_STATUS_IS_OK(status)) { printf("could not open connection\n"); @@ -7782,6 +7805,7 @@ static struct { {"RW1", run_readwritetest, 0}, {"RW2", run_readwritemulti, FLAG_MULTIPROC}, {"RW3", run_readwritelarge, 0}, + {"RW-SIGNING", run_readwritelarge_signtest, 0}, {"OPEN", run_opentest, 0}, {"POSIX", run_simple_posix_open_test, 0}, {"POSIX-APPEND", run_posix_append, 0}, |