Author: jra
Date: 2007-08-16 22:50:57 +0000 (Thu, 16 Aug 2007)
New Revision: 24499

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

Log:
Move the checks for DOS error codes on open to a function.
Jeremy.

Modified:
   branches/SAMBA_3_0_25/source/include/smb_macros.h
   branches/SAMBA_3_0_25/source/smbd/error.c
   branches/SAMBA_3_0_25/source/smbd/nttrans.c
   branches/SAMBA_3_0_25/source/smbd/reply.c
   branches/SAMBA_3_0_25/source/smbd/trans2.c
   branches/SAMBA_3_2_0/source/include/smb_macros.h
   branches/SAMBA_3_2_0/source/smbd/error.c
   branches/SAMBA_3_2_0/source/smbd/nttrans.c
   branches/SAMBA_3_2_0/source/smbd/reply.c
   branches/SAMBA_3_2_0/source/smbd/trans2.c


Changeset:
Modified: branches/SAMBA_3_0_25/source/include/smb_macros.h
===================================================================
--- branches/SAMBA_3_0_25/source/include/smb_macros.h   2007-08-16 17:42:34 UTC 
(rev 24498)
+++ branches/SAMBA_3_0_25/source/include/smb_macros.h   2007-08-16 22:50:57 UTC 
(rev 24499)
@@ -166,6 +166,7 @@
 
 #define ERROR_DOS(class,code) 
error_packet(outbuf,class,code,NT_STATUS_OK,__LINE__,__FILE__)
 #define ERROR_NT(status) error_packet(outbuf,0,0,status,__LINE__,__FILE__)
+#define ERROR_OPEN(status) error_open(outbuf,status,__LINE__,__FILE__)
 #define ERROR_FORCE_NT(status) 
error_packet(outbuf,-1,-1,status,__LINE__,__FILE__)
 #define ERROR_BOTH(status,class,code) 
error_packet(outbuf,class,code,status,__LINE__,__FILE__)
 

Modified: branches/SAMBA_3_0_25/source/smbd/error.c
===================================================================
--- branches/SAMBA_3_0_25/source/smbd/error.c   2007-08-16 17:42:34 UTC (rev 
24498)
+++ branches/SAMBA_3_0_25/source/smbd/error.c   2007-08-16 22:50:57 UTC (rev 
24499)
@@ -132,3 +132,22 @@
        error_packet_set(outbuf, eclass, ecode, ntstatus, line, file);
        return outsize;
 }
+
+/*******************************************************************************
+ Special error map processing needed for returning DOS errors on open calls.
+*******************************************************************************/
+
+int error_open(char *outbuf, NTSTATUS status, int line, const char *file)
+{
+       if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
+               /*
+                * We hit an existing file, and if we're returning DOS
+                * error codes OBJECT_NAME_COLLISION would map to
+                * ERRDOS/183, we need to return ERRDOS/80, see bug
+                * 4852.
+                */
+               return error_packet(outbuf, ERRDOS, ERRfilexists,
+                               NT_STATUS_OBJECT_NAME_COLLISION, line, file);
+       }
+       return error_packet(outbuf,0,0,status,line,file);
+}

Modified: branches/SAMBA_3_0_25/source/smbd/nttrans.c
===================================================================
--- branches/SAMBA_3_0_25/source/smbd/nttrans.c 2007-08-16 17:42:34 UTC (rev 
24498)
+++ branches/SAMBA_3_0_25/source/smbd/nttrans.c 2007-08-16 22:50:57 UTC (rev 
24499)
@@ -800,18 +800,7 @@
                        return -1;
                }
 
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                                       ERRDOS, ERRfilexists);
-
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        file_len = sbuf.st_size;
@@ -1457,18 +1446,7 @@
                        return -1;
                }
 
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                                       ERRDOS, ERRfilexists);
-
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        /*

Modified: branches/SAMBA_3_0_25/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_0_25/source/smbd/reply.c   2007-08-16 17:42:34 UTC (rev 
24498)
+++ branches/SAMBA_3_0_25/source/smbd/reply.c   2007-08-16 22:50:57 UTC (rev 
24499)
@@ -1321,17 +1321,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        size = sbuf.st_size;
@@ -1465,17 +1455,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                                         ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        /* Setting the "size" field in vwv9 and vwv10 causes the file to be set 
to this size,
@@ -1664,17 +1644,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
  
        ts[0] = get_atimespec(&sbuf); /* atime. */
@@ -1776,17 +1746,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        outsize = set_message(outbuf,1,0,True);

Modified: branches/SAMBA_3_0_25/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_0_25/source/smbd/trans2.c  2007-08-16 17:42:34 UTC (rev 
24498)
+++ branches/SAMBA_3_0_25/source/smbd/trans2.c  2007-08-16 22:50:57 UTC (rev 
24499)
@@ -872,17 +872,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        size = get_file_size(sbuf);
@@ -6048,16 +6038,8 @@
                if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
                        return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, 
ERRbadpath);
                }
-               if (info_level == SMB_POSIX_PATH_OPEN &&
-                               NT_STATUS_EQUAL(status, 
NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
+               if (info_level == SMB_POSIX_PATH_OPEN) {
+                       return ERROR_OPEN(status);
                }
                return ERROR_NT(status);
        }

Modified: branches/SAMBA_3_2_0/source/include/smb_macros.h
===================================================================
--- branches/SAMBA_3_2_0/source/include/smb_macros.h    2007-08-16 17:42:34 UTC 
(rev 24498)
+++ branches/SAMBA_3_2_0/source/include/smb_macros.h    2007-08-16 22:50:57 UTC 
(rev 24499)
@@ -166,6 +166,7 @@
 
 #define ERROR_DOS(class,code) 
error_packet(outbuf,class,code,NT_STATUS_OK,__LINE__,__FILE__)
 #define ERROR_NT(status) error_packet(outbuf,0,0,status,__LINE__,__FILE__)
+#define ERROR_OPEN(status) error_open(outbuf,status,__LINE__,__FILE__)
 #define ERROR_FORCE_NT(status) 
error_packet(outbuf,-1,-1,status,__LINE__,__FILE__)
 #define ERROR_BOTH(status,class,code) 
error_packet(outbuf,class,code,status,__LINE__,__FILE__)
 

Modified: branches/SAMBA_3_2_0/source/smbd/error.c
===================================================================
--- branches/SAMBA_3_2_0/source/smbd/error.c    2007-08-16 17:42:34 UTC (rev 
24498)
+++ branches/SAMBA_3_2_0/source/smbd/error.c    2007-08-16 22:50:57 UTC (rev 
24499)
@@ -131,3 +131,22 @@
        error_packet_set(outbuf, eclass, ecode, ntstatus, line, file);
        return outsize;
 }
+
+/*******************************************************************************
+ Special error map processing needed for returning DOS errors on open calls.
+*******************************************************************************/
+
+int error_open(char *outbuf, NTSTATUS status, int line, const char *file)
+{
+       if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
+               /*
+                * We hit an existing file, and if we're returning DOS
+                * error codes OBJECT_NAME_COLLISION would map to
+                * ERRDOS/183, we need to return ERRDOS/80, see bug
+                * 4852.
+                */
+               return error_packet(outbuf, ERRDOS, ERRfilexists,
+                               NT_STATUS_OBJECT_NAME_COLLISION, line, file);
+       }
+       return error_packet(outbuf,0,0,status,line,file);
+}

Modified: branches/SAMBA_3_2_0/source/smbd/nttrans.c
===================================================================
--- branches/SAMBA_3_2_0/source/smbd/nttrans.c  2007-08-16 17:42:34 UTC (rev 
24498)
+++ branches/SAMBA_3_2_0/source/smbd/nttrans.c  2007-08-16 22:50:57 UTC (rev 
24499)
@@ -742,7 +742,6 @@
                                        file_attributes,
                                        &info, &fsp);
 
-               TALLOC_FREE(case_state);
        } else {
 
                /*
@@ -826,18 +825,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        file_len = sbuf.st_size;
@@ -1493,10 +1481,6 @@
                                                        create_options,
                                                        file_attributes,
                                                        &info, &fsp);
-                               if(!NT_STATUS_IS_OK(status)) {
-                                       TALLOC_FREE(case_state);
-                                       return ERROR_NT(status);
-                               }
                        }
                }
        }
@@ -1504,23 +1488,11 @@
        TALLOC_FREE(case_state);
 
        if(!NT_STATUS_IS_OK(status)) {
-
                if (open_was_deferred(SVAL(inbuf,smb_mid))) {
                        /* We have re-scheduled this call. */
                        return -1;
                }
-
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        /*

Modified: branches/SAMBA_3_2_0/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_2_0/source/smbd/reply.c    2007-08-16 17:42:34 UTC (rev 
24498)
+++ branches/SAMBA_3_2_0/source/smbd/reply.c    2007-08-16 22:50:57 UTC (rev 
24499)
@@ -1367,17 +1367,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        size = sbuf.st_size;
@@ -1515,17 +1505,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                                         ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        /* Setting the "size" field in vwv9 and vwv10 causes the file to be set 
to this size,
@@ -1718,17 +1698,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
  
        ts[0] = get_atimespec(&sbuf); /* atime. */
@@ -1834,17 +1804,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        outsize = set_message(outbuf,1,0,True);

Modified: branches/SAMBA_3_2_0/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_2_0/source/smbd/trans2.c   2007-08-16 17:42:34 UTC (rev 
24498)
+++ branches/SAMBA_3_2_0/source/smbd/trans2.c   2007-08-16 22:50:57 UTC (rev 
24499)
@@ -876,17 +876,7 @@
                        /* We have re-scheduled this call. */
                        return -1;
                }
-               if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
-               }
-               return ERROR_NT(status);
+               return ERROR_OPEN(status);
        }
 
        size = get_file_size(sbuf);
@@ -6187,16 +6177,8 @@
                if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
                        return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, 
ERRbadpath);
                }
-               if (info_level == SMB_POSIX_PATH_OPEN &&
-                               NT_STATUS_EQUAL(status, 
NT_STATUS_OBJECT_NAME_COLLISION)) {
-                       /*
-                        * We hit an existing file, and if we're returning DOS
-                        * error codes OBJECT_NAME_COLLISION would map to
-                        * ERRDOS/183, we need to return ERRDOS/80, see bug
-                        * 4852.
-                        */
-                       return ERROR_BOTH(NT_STATUS_OBJECT_NAME_COLLISION,
-                               ERRDOS, ERRfilexists);
+               if (info_level == SMB_POSIX_PATH_OPEN) {
+                       return ERROR_OPEN(status);
                }
                return ERROR_NT(status);
        }

Reply via email to