The branch, master has been updated
       via  4491817 s3: smbd: Make sure we do not pass paths with ./ on the 
front to VFS routines.
      from  07d3ba4 Change the registry subsystem to use uint32_t from uint32. 
Also change session.h.

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


- Log -----------------------------------------------------------------
commit 449181768f5858587742476ec494af17a7108c34
Author: Richard Sharpe <rsha...@samba.org>
Date:   Wed Apr 15 13:53:09 2015 -0700

    s3: smbd: Make sure we do not pass paths with ./ on the front to VFS 
routines.
    
    Signed-off-by: Richard Sharpe <rsha...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Thu Apr 16 07:30:30 CEST 2015 on sn-devel-104

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

Summary of changes:
 source3/smbd/dir.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index 073ac2f..3cddc4a 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -1068,6 +1068,7 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
        connection_struct *conn = dirptr->conn;
        size_t slashlen;
        size_t pathlen;
+       bool dirptr_path_is_dot = ISDOT(dirptr->path);
 
        *_smb_fname = NULL;
        *_mode = 0;
@@ -1132,10 +1133,18 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
                        return false;
                }
 
-               memcpy(pathreal, dirptr->path, pathlen);
-               pathreal[pathlen] = '/';
-               memcpy(pathreal + slashlen + pathlen, dname,
-                      talloc_get_size(dname));
+               /*
+                * We don't want to pass ./xxx to modules below us so don't
+                * add the path if it is just . by itself.
+                */
+               if (dirptr_path_is_dot) {
+                       memcpy(pathreal, dname, talloc_get_size(dname));
+               } else {
+                       memcpy(pathreal, dirptr->path, pathlen);
+                       pathreal[pathlen] = '/';
+                       memcpy(pathreal + slashlen + pathlen, dname,
+                              talloc_get_size(dname));
+               }
 
                /* Create smb_fname with NULL stream_name. */
                smb_fname = (struct smb_filename) {


-- 
Samba Shared Repository

Reply via email to