From 9a067547ecf96878213f8e46eb5a41b372e4d0a2 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 27 Jul 2006 18:06:09 +0000 Subject: 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) --- source4/smb_server/smb/receive.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'source4/smb_server/smb') 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: -- cgit