r478: Added Volkers fix to be able to force DOS errors when needed.
authorJeremy Allison <jra@samba.org>
Tue, 4 May 2004 23:01:00 +0000 (23:01 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:51:24 +0000 (10:51 -0500)
Jeremy.

source/include/smb_macros.h
source/smbd/error.c
source/smbd/process.c

index c3bdba30b15bf339f19131915c263fd44325547c..e847714443a0e191dc4bef0797d772691333db83 100644 (file)
 /* these are the datagram types */
 #define DGRAM_DIRECT_UNIQUE 0x10
 
-#define ERROR_DOS(class,code) error_packet(outbuf,NT_STATUS_OK,class,code,__LINE__,__FILE__)
-#define ERROR_NT(status) error_packet(outbuf,status,0,0,__LINE__,__FILE__)
-#define ERROR_BOTH(status,class,code) error_packet(outbuf,status,class,code,__LINE__,__FILE__)
+#define ERROR_DOS(class,code) error_packet(outbuf,NT_STATUS_OK,class,code,False,__LINE__,__FILE__)
+#define ERROR_FORCE_DOS(class,code) error_packet(outbuf,NT_STATUS_OK,class,code,True,__LINE__,__FILE__)
+#define ERROR_NT(status) error_packet(outbuf,status,0,0,False,__LINE__,__FILE__)
+#define ERROR_BOTH(status,class,code) error_packet(outbuf,status,class,code,False,__LINE__,__FILE__)
 
 /* this is how errors are generated */
 #define UNIXERROR(defclass,deferror) unix_error_packet(outbuf,defclass,deferror,__LINE__,__FILE__)
index 795bf0949ccf7b172c250911cbf0a53dd0c956ed..9c81d465e7ae32efbf21e2b68003038288489ccb 100644 (file)
@@ -42,7 +42,7 @@ int cached_error_packet(char *outbuf,files_struct *fsp,int line,const char *file
        /* We can now delete the auxiliary struct */
        free((char *)wbmpx);
        fsp->wbmpx_ptr = NULL;
-       return error_packet(outbuf,NT_STATUS_OK,eclass,err,line,file);
+       return error_packet(outbuf,NT_STATUS_OK,eclass,err,False,line,file);
 }
 
 /****************************************************************************
@@ -76,7 +76,7 @@ int unix_error_packet(char *outbuf,int def_class,uint32 def_code,
                }
        }
 
-       return error_packet(outbuf,ntstatus,eclass,ecode,line,file);
+       return error_packet(outbuf,ntstatus,eclass,ecode,False,line,file);
 }
 
 
@@ -85,7 +85,7 @@ int unix_error_packet(char *outbuf,int def_class,uint32 def_code,
 ****************************************************************************/
 
 int error_packet(char *outbuf,NTSTATUS ntstatus,
-                uint8 eclass,uint32 ecode,int line, const char *file)
+                uint8 eclass,uint32 ecode,BOOL force_dos, int line, const char *file)
 {
        int outsize = set_message(outbuf,0,0,True);
        extern uint32 global_client_caps;
@@ -106,7 +106,7 @@ int error_packet(char *outbuf,NTSTATUS ntstatus,
         * when talking with clients that normally expect nt status codes. JRA.
         */
 
-       if ((lp_nt_status_support() || (SVAL(outbuf,smb_flg2) & FLAGS2_32_BIT_ERROR_CODES)) && (global_client_caps & CAP_STATUS32)) {
+       if ((lp_nt_status_support() || (SVAL(outbuf,smb_flg2) & FLAGS2_32_BIT_ERROR_CODES)) && (global_client_caps & CAP_STATUS32) && (!force_dos)) {
                if (NT_STATUS_V(ntstatus) == 0 && eclass)
                        ntstatus = dos_to_ntstatus(eclass, ecode);
                SIVAL(outbuf,smb_rcls,NT_STATUS_V(ntstatus));
index 718d1bb67b2cf11b6c50a8917beab9bbcffca952..966bb63c1eac5bb07f22bb6092f935330ff5eeae 100644 (file)
@@ -736,7 +736,7 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize
                        if (flags & AS_GUEST) 
                                flags &= ~AS_USER;
                        else
-                               return(ERROR_DOS(ERRSRV,ERRaccess));
+                               return(ERROR_FORCE_DOS(ERRSRV,ERRbaduid));
                }
 
                /* this code is to work around a bug is MS client 3 without