diff options
author | Stefan Metzmacher <metze@samba.org> | 2006-07-01 14:14:11 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:09:42 -0500 |
commit | 6acd9aed93b09b74e53a3b854085c6c8fab41819 (patch) | |
tree | fcb31756c3b73737c81b391b62314417d883ede5 /source4/smb_server/smb2 | |
parent | a18fc61d4f6140ed6081d779dbad223cdd6df0cf (diff) | |
download | samba-6acd9aed93b09b74e53a3b854085c6c8fab41819.tar.gz samba-6acd9aed93b09b74e53a3b854085c6c8fab41819.tar.bz2 samba-6acd9aed93b09b74e53a3b854085c6c8fab41819.zip |
r16734: the 2 bytes after the opcode and before the flags,
is no padding...
the following patch is needed for vista beta2 to connect to samba4
metze
(This used to be commit 58baae8fc463cd2c4e4ce532c153ad80313b03eb)
Diffstat (limited to 'source4/smb_server/smb2')
-rw-r--r-- | source4/smb_server/smb2/negprot.c | 4 | ||||
-rw-r--r-- | source4/smb_server/smb2/receive.c | 4 | ||||
-rw-r--r-- | source4/smb_server/smb2/sesssetup.c | 15 |
3 files changed, 12 insertions, 11 deletions
diff --git a/source4/smb_server/smb2/negprot.c b/source4/smb_server/smb2/negprot.c index 6d180eb1d6..66ba902746 100644 --- a/source4/smb_server/smb2/negprot.c +++ b/source4/smb_server/smb2/negprot.c @@ -204,9 +204,9 @@ void smb2srv_reply_smb_negprot(struct smbsrv_request *smb_req) SSVAL(req->in.hdr, SMB2_HDR_PAD1, 0); SIVAL(req->in.hdr, SMB2_HDR_STATUS, 0); SSVAL(req->in.hdr, SMB2_HDR_OPCODE, SMB2_OP_NEGPROT); - SSVAL(req->in.hdr, SMB2_HDR_PAD2, 0); + SSVAL(req->in.hdr, SMB2_HDR_UNKNOWN1,0); SIVAL(req->in.hdr, SMB2_HDR_FLAGS, 0); - SIVAL(req->in.hdr, SMB2_HDR_UNKNOWN, 0); + SIVAL(req->in.hdr, SMB2_HDR_UNKNOWN2,0); SBVAL(req->in.hdr, SMB2_HDR_SEQNUM, 0); SIVAL(req->in.hdr, SMB2_HDR_PID, 0); SIVAL(req->in.hdr, SMB2_HDR_TID, 0); diff --git a/source4/smb_server/smb2/receive.c b/source4/smb_server/smb2/receive.c index 8ac90b89f9..80b626a78a 100644 --- a/source4/smb_server/smb2/receive.c +++ b/source4/smb_server/smb2/receive.c @@ -69,9 +69,9 @@ NTSTATUS smb2srv_setup_reply(struct smb2srv_request *req, uint16_t body_fixed_si SSVAL(req->out.hdr, SMB2_HDR_PAD1, 0); SIVAL(req->out.hdr, SMB2_HDR_STATUS, NT_STATUS_V(req->status)); SSVAL(req->out.hdr, SMB2_HDR_OPCODE, SVAL(req->in.hdr, SMB2_HDR_OPCODE)); - SSVAL(req->out.hdr, SMB2_HDR_PAD2, 0); + SSVAL(req->out.hdr, SMB2_HDR_UNKNOWN1,0x0001); SIVAL(req->out.hdr, SMB2_HDR_FLAGS, 0x00000001); - SIVAL(req->out.hdr, SMB2_HDR_UNKNOWN, 0); + SIVAL(req->out.hdr, SMB2_HDR_UNKNOWN2,0); SBVAL(req->out.hdr, SMB2_HDR_SEQNUM, req->seqnum); SIVAL(req->out.hdr, SMB2_HDR_PID, IVAL(req->in.hdr, SMB2_HDR_PID)); SIVAL(req->out.hdr, SMB2_HDR_TID, IVAL(req->in.hdr, SMB2_HDR_TID)); diff --git a/source4/smb_server/smb2/sesssetup.c b/source4/smb_server/smb2/sesssetup.c index 6d472c26d4..e1c326bb9d 100644 --- a/source4/smb_server/smb2/sesssetup.c +++ b/source4/smb_server/smb2/sesssetup.c @@ -119,16 +119,21 @@ failed: static void smb2srv_sesssetup_send(struct smb2srv_request *req, union smb_sesssetup *io) { - NTSTATUS status; + uint16_t unknown1; - if (NT_STATUS_IS_ERR(req->status) && !NT_STATUS_EQUAL(req->status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { + if (NT_STATUS_IS_OK(req->status)) { + unknown1 = 0x0003; + } else if (NT_STATUS_EQUAL(req->status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { + unknown1 = 0x0002; + } else { smb2srv_send_error(req, req->status); return; } SMB2SRV_CHECK(smb2srv_setup_reply(req, 0x08, True, io->smb2.out.secblob.length)); - SBVAL(req->out.hdr, SMB2_HDR_UID, io->smb2.out.uid); + SSVAL(req->out.hdr, SMB2_HDR_UNKNOWN1, unknown1); + SBVAL(req->out.hdr, SMB2_HDR_UID, io->smb2.out.uid); SSVAL(req->out.body, 0x02, io->smb2.out._pad); SMB2SRV_CHECK(smb2_push_o16s16_blob(&req->out, 0x04, io->smb2.out.secblob)); @@ -139,8 +144,6 @@ static void smb2srv_sesssetup_send(struct smb2srv_request *req, union smb_sessse void smb2srv_sesssetup_recv(struct smb2srv_request *req) { union smb_sesssetup *io; - NTSTATUS status; - SMB2SRV_CHECK_BODY_SIZE(req, 0x18, True); SMB2SRV_TALLOC_IO_PTR(io, union smb_sesssetup); @@ -170,8 +173,6 @@ static NTSTATUS smb2srv_logoff_backend(struct smb2srv_request *req) static void smb2srv_logoff_send(struct smb2srv_request *req) { - NTSTATUS status; - if (NT_STATUS_IS_ERR(req->status)) { smb2srv_send_error(req, req->status); return; |