s4 torture: Add lockread_supported based off of CAP_LOCK_AND_READ
authorZachary Loafman <zachary.loafman@isilon.com>
Tue, 17 Nov 2009 23:25:58 +0000 (23:25 +0000)
committerTim Prouty <tprouty@samba.org>
Fri, 4 Dec 2009 04:21:22 +0000 (20:21 -0800)
Signed-off-by: Tim Prouty <tprouty@samba.org>
source4/libcli/raw/libcliraw.h
source4/libcli/raw/rawnegotiate.c
source4/torture/raw/read.c
source4/torture/raw/write.c

index 37e158a465d3a851ee223008780817e348432b8b..69de33ce713d2a12992e84acbcda25ec6b34e68d 100644 (file)
@@ -65,6 +65,7 @@ struct smbcli_negotiate {
        time_t server_time;
        uint_t readbraw_supported:1;
        uint_t writebraw_supported:1;
+       uint_t lockread_supported:1;
 
        char *server_domain;
 };
index dedc891ac123f8fd4c50c792bbc14417f83d38a6..67f3bfa0afdfd3a2bd335f0b042ae143a86bfe14 100644 (file)
@@ -152,6 +152,9 @@ NTSTATUS smb_raw_negotiate_recv(struct smbcli_request *req)
                        transport->negotiate.readbraw_supported = true;
                        transport->negotiate.writebraw_supported = true;
                }
+
+               if (transport->negotiate.capabilities & CAP_LOCK_AND_READ)
+                       transport->negotiate.lockread_supported = true;
        } else if (transport->negotiate.protocol >= PROTOCOL_LANMAN1) {
                SMBCLI_CHECK_WCT(req, 13);
                transport->negotiate.sec_mode = SVAL(req->in.vwv,VWV(1));
index 90ca18d5b62bcedb0dd0d42218a51f292371bd44..efdd04045196a05d0d174f0329f9b0d5c4646bd7 100644 (file)
@@ -224,6 +224,11 @@ static bool test_lockread(struct torture_context *tctx,
        const char *test_data = "TEST DATA";
        uint_t seed = time(NULL);
 
+       if (!cli->transport->negotiate.lockread_supported) {
+               printf("Server does not support lockread - skipping\n");
+               return true;
+       }
+
        buf = talloc_zero_array(tctx, uint8_t, maxsize);
 
        if (!torture_setup_dir(cli, BASEDIR)) {
index cd1b078dbf6f9b637308c958fc5485349aa46547..31cbb98a888a9ab1bfecf984680eb6099e04e003 100644 (file)
@@ -425,6 +425,11 @@ static bool test_writeunlock(struct torture_context *tctx,
 
        buf = talloc_zero_array(tctx, uint8_t, maxsize);
 
+       if (!cli->transport->negotiate.lockread_supported) {
+               printf("Server does not support writeunlock - skipping\n");
+               return true;
+       }
+
        if (!torture_setup_dir(cli, BASEDIR)) {
                return false;
        }