diff options
author | Stefan Metzmacher <metze@samba.org> | 2006-07-27 18:06:09 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:15:05 -0500 |
commit | 9a067547ecf96878213f8e46eb5a41b372e4d0a2 (patch) | |
tree | d7a02e2f7dc202958b92b402442c89ba3d5ccb2f | |
parent | 6d35c078114d911784bf7c18fc700ea81cea6f6f (diff) | |
download | samba-9a067547ecf96878213f8e46eb5a41b372e4d0a2.tar.gz samba-9a067547ecf96878213f8e46eb5a41b372e4d0a2.tar.bz2 samba-9a067547ecf96878213f8e46eb5a41b372e4d0a2.zip |
r17280: NT_STATUS_INVALID_HANDLE maps to ERRbadfid, which is wrong in this
places, so only overwrite ERRbaduid and ERRinvnid when NTSTATUS support
is given.
metze
(This used to be commit c70edc3fb8ef02ce12c784fad7ee9d5ac782bf98)
-rw-r--r-- | source4/smb_server/smb/receive.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/source4/smb_server/smb/receive.c b/source4/smb_server/smb/receive.c index a47d0a5442..6fce5dc7c0 100644 --- a/source4/smb_server/smb/receive.c +++ b/source4/smb_server/smb/receive.c @@ -501,16 +501,19 @@ static void switch_message(int type, struct smbsrv_request *req) /* see if the vuid is valid */ if ((flags & NEED_SESS) && !req->session) { + status = NT_STATUS_DOS(ERRSRV, ERRbaduid); /* amazingly, the error code depends on the command */ switch (type) { - case SMBntcreateX: - case SMBntcancel: - case SMBulogoffX: - status = NT_STATUS_DOS(ERRSRV, ERRbaduid); - break; - default: + case SMBntcreateX: + case SMBntcancel: + case SMBulogoffX: + break; + default: + if (req->smb_conn->config.nt_status_support && + req->smb_conn->negotiate.client_caps & CAP_STATUS32) { status = NT_STATUS_INVALID_HANDLE; - break; + } + break; } /* * TODO: @@ -530,16 +533,19 @@ static void switch_message(int type, struct smbsrv_request *req) /* does this protocol need a valid tree connection? */ if ((flags & NEED_TCON) && !req->tcon) { + status = NT_STATUS_DOS(ERRSRV, ERRinvnid); /* amazingly, the error code depends on the command */ switch (type) { - case SMBntcreateX: - case SMBntcancel: - case SMBtdis: - status = NT_STATUS_DOS(ERRSRV, ERRinvnid); - break; - default: + case SMBntcreateX: + case SMBntcancel: + case SMBtdis: + break; + default: + if (req->smb_conn->config.nt_status_support && + req->smb_conn->negotiate.client_caps & CAP_STATUS32) { status = NT_STATUS_INVALID_HANDLE; - break; + } + break; } /* * TODO: |