Author: metze
Date: 2006-07-27 18:06:09 +0000 (Thu, 27 Jul 2006)
New Revision: 17280

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17280

Log:
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
Modified:
   branches/SAMBA_4_0/source/smb_server/smb/receive.c


Changeset:
Modified: branches/SAMBA_4_0/source/smb_server/smb/receive.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/receive.c  2006-07-27 17:23:57 UTC 
(rev 17279)
+++ branches/SAMBA_4_0/source/smb_server/smb/receive.c  2006-07-27 18:06:09 UTC 
(rev 17280)
@@ -501,16 +501,19 @@
 
        /* 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 @@
 
        /* 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:

Reply via email to