Re-structure Volker's patch to "Fix trans2findfirst for the large directory optimizat...
authorJeremy Allison <jra@samba.org>
Tue, 18 Nov 2008 18:57:54 +0000 (10:57 -0800)
committerJeremy Allison <jra@samba.org>
Tue, 18 Nov 2008 18:57:54 +0000 (10:57 -0800)
Jeremy.

source3/smbd/filename.c

index 3eb2d63734a9e1cad5b5d9455ca36b17e44bc776..392264bfc0e7fc8db7bf34b06c8891297854d4c2 100644 (file)
@@ -194,30 +194,39 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
                return result;
        }
 
+       if (!(name = talloc_strdup(ctx, orig_path))) {
+               DEBUG(0, ("talloc_strdup failed\n"));
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       /*
+        * Large directory fix normalization. If we're case sensitive, and
+        * the case preserving parameters are set to "no", normalize the case of
+        * the incoming filename from the client WHETHER IT EXISTS OR NOT !
+        * This is in conflict with the current (3.0.20) man page, but is
+        * what people expect from the "large directory howto". I'll update
+        * the man page. Thanks to jht@samba.org for finding this. JRA.
+        */
+
+       if (conn->case_sensitive && !conn->case_preserve &&
+                       !conn->short_case_preserve) {
+               strnorm(name, lp_defaultcase(SNUM(conn)));
+       }
+
        /*
         * Ensure saved_last_component is valid even if file exists.
         */
 
        if(pp_saved_last_component) {
-               end = strrchr_m(orig_path, '/');
+               end = strrchr_m(name, '/');
                if (end) {
                        *pp_saved_last_component = talloc_strdup(ctx, end + 1);
                } else {
                        *pp_saved_last_component = talloc_strdup(ctx,
-                                                       orig_path);
-               }
-               if (conn->case_sensitive && !conn->case_preserve &&
-                   !conn->short_case_preserve) {
-                       strnorm(*pp_saved_last_component,
-                               lp_defaultcase(SNUM(conn)));
+                                                       name);
                }
        }
 
-       if (!(name = talloc_strdup(ctx, orig_path))) {
-               DEBUG(0, ("talloc_strdup failed\n"));
-               return NT_STATUS_NO_MEMORY;
-       }
-
        if (!lp_posix_pathnames()) {
                stream = strchr_m(name, ':');
 
@@ -232,20 +241,6 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
                }
        }
 
-       /*
-        * Large directory fix normalization. If we're case sensitive, and
-        * the case preserving parameters are set to "no", normalize the case of
-        * the incoming filename from the client WHETHER IT EXISTS OR NOT !
-        * This is in conflict with the current (3.0.20) man page, but is
-        * what people expect from the "large directory howto". I'll update
-        * the man page. Thanks to jht@samba.org for finding this. JRA.
-        */
-
-       if (conn->case_sensitive && !conn->case_preserve &&
-                       !conn->short_case_preserve) {
-               strnorm(name, lp_defaultcase(SNUM(conn)));
-       }
-
        start = name;
 
        /* If we're providing case insentive semantics or