s4:smb2srv: We only support SMB 2.002.
authorStefan Metzmacher <metze@samba.org>
Tue, 26 May 2009 06:44:27 +0000 (08:44 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 26 May 2009 07:50:45 +0000 (09:50 +0200)
We need to loop over all given dialects and check
if we can find SMB2_DIALECT_REVISION_202.

metze

source4/smb_server/smb/negprot.c
source4/smb_server/smb2/negprot.c

index c3399fdd4899bc1e329c692a8dc4b1b5e0f59498..5ac56247455bc3dca5428c0bb841a3239b09f608 100644 (file)
@@ -469,7 +469,6 @@ static const struct {
        int protocol_level;
 } supported_protocols[] = {
        {"SMB 2.002",                   "SMB2",         reply_smb2,     PROTOCOL_SMB2},
-       {"SMB 2.001",                   "SMB2",         reply_smb2,     PROTOCOL_SMB2},
        {"NT LANMAN 1.0",               "NT1",          reply_nt1,      PROTOCOL_NT1},
        {"NT LM 0.12",                  "NT1",          reply_nt1,      PROTOCOL_NT1},
        {"LANMAN2.1",                   "LANMAN2",      reply_lanman2,  PROTOCOL_LANMAN2},
index 0b65a196343db924269a164c063b79c77d680704..f915392ffaee5af9d19472ac90f0eb44d272bb61 100644 (file)
@@ -97,14 +97,21 @@ static NTSTATUS smb2srv_negprot_backend(struct smb2srv_request *req, struct smb2
        NTSTATUS status;
        struct timeval current_time;
        struct timeval boot_time;
+       uint16_t i;
+       uint16_t dialect = 0;
 
        /* we only do one dialect for now */
        if (io->in.dialect_count < 1) {
                return NT_STATUS_NOT_SUPPORTED;
        }
-       if (io->in.dialects[0] != 0 &&
-           io->in.dialects[0] != SMB2_DIALECT_REVISION) {
-               DEBUG(0,("Got unexpected SMB2 dialect %u\n", io->in.dialects[0]));
+       for (i=0; i < io->in.dialect_count; i++) {
+               dialect = io->in.dialects[i];
+               if (dialect == SMB2_DIALECT_REVISION_202) {
+                       break;
+               }
+       }
+       if (dialect != SMB2_DIALECT_REVISION_202) {
+               DEBUG(0,("Got unexpected SMB2 dialect %u\n", dialect));
                return NT_STATUS_NOT_SUPPORTED;
        }
 
@@ -128,7 +135,7 @@ static NTSTATUS smb2srv_negprot_backend(struct smb2srv_request *req, struct smb2
                req->smb_conn->smb2_signing_required = true;
                break;
        }
-       io->out.dialect_revision   = SMB2_DIALECT_REVISION;
+       io->out.dialect_revision   = dialect;
        io->out.capabilities       = 0;
        io->out.max_transact_size  = lp_parm_ulong(req->smb_conn->lp_ctx, NULL, 
                                                   "smb2", "max transaction size", 0x10000);
@@ -281,7 +288,7 @@ void smb2srv_reply_smb_negprot(struct smbsrv_request *smb_req)
 
        SSVAL(req->in.body, 0x02, 1);
        memset(req->in.body+0x04, 0, 32);
-       SSVAL(req->in.body, 0x24, 0);
+       SSVAL(req->in.body, 0x24, SMB2_DIALECT_REVISION_202);
 
        smb2srv_negprot_recv(req);
        return;