The branch, v3-4-test has been updated
       via  37f42ad... Correct fix for bug 6781 - Cannot rename subfolders in 
Explorer view with recent versions of Samba. Without this fix, renaming a 
directory ./a to ./b, whilst a directory ./aa was already open would fail. 
Simplifies logic of earlier code. Jeremy.
      from  9f7d155... Fix bug 6769 - symlink unlink does nothing. Jeremy.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test


- Log -----------------------------------------------------------------
commit 37f42ad6a1fff1e43bfd6dcaa8244b738ea37363
Author: Jeremy Allison <[email protected]>
Date:   Wed Oct 7 15:46:57 2009 -0700

    Correct fix for bug 6781 - Cannot rename subfolders in Explorer view with 
recent versions of Samba. Without this fix, renaming a directory ./a to ./b, 
whilst a directory ./aa was already open would fail. Simplifies logic of 
earlier code. Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/files.c |   32 ++++++++++++--------------------
 1 files changed, 12 insertions(+), 20 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index 54c4c73..6f82686 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -385,13 +385,12 @@ bool file_find_subpath(files_struct *dir_fsp)
 {
        files_struct *fsp;
        size_t dlen;
-       bool ret = false;
        char *d_fullname = talloc_asprintf(talloc_tos(),
                                        "%s/%s",
                                        dir_fsp->conn->connectpath,
                                        dir_fsp->fsp_name);
        if (!d_fullname) {
-               goto out;
+               return false;
        }
 
        dlen = strlen(d_fullname);
@@ -408,28 +407,21 @@ bool file_find_subpath(files_struct *dir_fsp)
                                        fsp->conn->connectpath,
                                        fsp->fsp_name);
 
-               if (strnequal(d_fullname, d1_fullname, dlen)) {
-                       int d1_len = strlen(d1_fullname);
-
-                       /*
-                        * If the open file is a second file handle to the
-                        * same name or is a stream on the original file, then
-                        * don't return true.
-                        */
-                       if (d1_len == dlen || d1_fullname[dlen] == ':') {
-                               TALLOC_FREE(d1_fullname);
-                               continue;
-                       }
-
+                /*
+                * If the open file has a path that is a longer
+                * component, then it's a subpath.
+                */
+               if (strnequal(d_fullname, d1_fullname, dlen) &&
+                               (d1_fullname[dlen] == '/')) {
                        TALLOC_FREE(d1_fullname);
-                       ret = true;
-                       goto out;
+                       TALLOC_FREE(d_fullname);
+                       return true;
                }
                TALLOC_FREE(d1_fullname);
-       } 
- out:
+       }
+
        TALLOC_FREE(d_fullname);
-       return ret;
+       return false;
 }
 
 /****************************************************************************


-- 
Samba Shared Repository

Reply via email to