The branch, master has been updated
       via  fca78dd s3: smbd: DFS - Remove the last lp_posix_pathnames() from 
the SMB2/3 code paths.
      from  c51b8c2 ctdb-recovery-helper: Add banning to parallel recovery

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit fca78dddb428b89b01317e47a0db34124dda555e
Author: Jeremy Allison <[email protected]>
Date:   Sat Mar 19 21:04:09 2016 -0700

    s3: smbd: DFS - Remove the last lp_posix_pathnames() from the SMB2/3 code 
paths.
    
    lp_posix_pathnames() is only used in one place in SMB1 DFS
    processing - in dealing with buggy clients, and not at all in SMB2/3.
    
    Note that the removal of lp_posix_pathnames() in the initial detection
    of path separator is a change in behavior - but the case where an
    incoming DFS name *doesn't* begin with the correct separator is a client 
bug,
    so I'm comfortable with making this change.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>
    
    Autobuild-User(master): Uri Simchoni <[email protected]>
    Autobuild-Date(master): Fri Mar 25 13:23:48 CET 2016 on sn-devel-144

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

Summary of changes:
 source3/smbd/msdfs.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index 647ac3b..cab6ff3 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -82,9 +82,19 @@ static NTSTATUS parse_dfs_path(connection_struct *conn,
        eos_ptr = &pathname_local[strlen(pathname_local)];
        p = temp = pathname_local;
 
-       pdp->posix_path = (lp_posix_pathnames() && *pathname == '/');
+       /*
+        * Non-broken DFS paths *must* start with the
+        * path separator. For Windows this is always '\\',
+        * for posix paths this is always '/'.
+        */
 
-       sepchar = pdp->posix_path ? '/' : '\\';
+       if (*pathname == '/') {
+               pdp->posix_path = true;
+               sepchar = '/';
+       } else {
+               pdp->posix_path = false;
+               sepchar = '\\';
+       }
 
        if (allow_broken_path && (*pathname != sepchar)) {
                DEBUG(10,("parse_dfs_path: path %s doesn't start with %c\n",
@@ -92,6 +102,8 @@ static NTSTATUS parse_dfs_path(connection_struct *conn,
                /*
                 * Possibly client sent a local path by mistake.
                 * Try and convert to a local path.
+                * Note that this is an SMB1-only fallback
+                * to cope with known broken SMB1 clients.
                 */
 
                pdp->hostname = eos_ptr; /* "" */


-- 
Samba Shared Repository

Reply via email to