The branch, master has been updated
       via  2efa2e0 s3: smbd: Replace lp_posix_pathnames() with 
req->posix_pathnames in dir.c. Only one remaining.
       via  52bae79 s3: smbd: Remove lp_posix_pathnames() checks on paths sent 
in via old Win9X RPC calls.
       via  398ee27 s3: smbd: Replace lp_posix_pathnames() with 
smbreq->posix_pathnames in smb2_query_directory.c.
       via  944e940 s3: smbd: smb2_create.c - remove all uses of 
lp_posix_pathnames().
       via  a2f025e s3: smbd: Convert all but one use of lp_posix_pathnames() 
into req->posix_pathnames in trans2.c
       via  3cd1b18 s3: smbd: Remove *all* uses of lp_posix_pathnames() from 
open.c
       via  865bd48 s3: smbd: Replace most uses of lp_posix_pathnames() with 
req->posix_pathnames in nttrans.c
       via  6db6bc2 s3: smbd: Replace most uses of lp_posix_pathnames() with 
req->posix_pathnames in reply.c
       via  40df6f2 s3: smbd: Now struct smb_request has a bool 
posix_pathnames, remove the lp_posix_pathnames() call inside 
srvstr_get_path_req_wcard().
       via  4587d83 s3: smbd: VFS change. Add new field bool posix_pathnames 
into struct smb_request.
       via  cc729ae s3: smbd: srvstr_get_path() is now only called when 
lp_posix_pathnames() is false.
       via  88bb480 s3: smbd: Split all calls to srvstr_get_path() to calls to 
srvstr_get_path_posix() or srvstr_get_path() depending on lp_posix_pathnames().
       via  c78d739 s3: smbd: Add srvstr_get_path_posix().
       via  5740761 s3: smbd: We now know that srvstr_get_path_wcard() is only 
called when lp_posix_pathnames() is false.
       via  41d62df s3: smbd: Split all calls to srvstr_get_path_wcard() into 
srvstr_get_path_wcard_posix() or srvstr_get_path_wcard() depending on 
lp_posix_pathnames().
       via  eb7198f s3: smbd: Add srvstr_get_path_wcard_posix().
       via  db36ee4 s3: smbd: Move lp_posix_pathnames() out into 
srvstr_get_path_req_wcard().
       via  5a34069 s3: smbd: Move lp_posix_pathnames() out into 
srvstr_get_path().
       via  4a6d7e1 s3: smbd: Move lp_posix_pathnames() out of 
srvstr_get_path_wcard_internal().
      from  f33224d net: Fix Coverity ID 241039 Unchecked return value

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


- Log -----------------------------------------------------------------
commit 2efa2e08a440579827e18bbe14225e4f2513c232
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 14:46:36 2015 -0800

    s3: smbd: Replace lp_posix_pathnames() with req->posix_pathnames in dir.c. 
Only one remaining.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Wed Dec 23 21:27:46 CET 2015 on sn-devel-144

commit 52bae7927cecbf43d98f29c57da45d49873a15dd
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 14:09:52 2015 -0800

    s3: smbd: Remove lp_posix_pathnames() checks on paths sent in via old Win9X 
RPC calls.
    
    No unix client makes these.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 398ee270de106e3cb8d5ca01282aa7692ac1d815
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:55:21 2015 -0800

    s3: smbd: Replace lp_posix_pathnames() with smbreq->posix_pathnames in 
smb2_query_directory.c.
    
    Currently SMB2/3 doesn't do posix pathname processing, leave this
    as a placeholder for when SMB2 unix extensions are added.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 944e94013c1367d65766cab83eccbacc79326445
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:52:10 2015 -0800

    s3: smbd: smb2_create.c - remove all uses of lp_posix_pathnames().
    
    Currently SMB2/3 doesn't do POSIX pathname processing.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit a2f025e26bb10e6574ea9b8d877eff75697e469e
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:49:55 2015 -0800

    s3: smbd: Convert all but one use of lp_posix_pathnames() into 
req->posix_pathnames in trans2.c
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 3cd1b185bd49da6c61b2df24d097c99bc8fee032
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:45:30 2015 -0800

    s3: smbd: Remove *all* uses of lp_posix_pathnames() from open.c
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 865bd48f3ac5072f9f69521d56338f1c74b861f7
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:44:10 2015 -0800

    s3: smbd: Replace most uses of lp_posix_pathnames() with 
req->posix_pathnames in nttrans.c
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 6db6bc204fc911106d36d5690de765dc4d61e34b
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:41:45 2015 -0800

    s3: smbd: Replace most uses of lp_posix_pathnames() with 
req->posix_pathnames in reply.c
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 40df6f23f33348761a6fbd39c73de1b6e2ed190c
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:36:57 2015 -0800

    s3: smbd: Now struct smb_request has a bool posix_pathnames, remove the 
lp_posix_pathnames() call inside srvstr_get_path_req_wcard().
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 4587d83f075a82665a48b52087b2704d2105882e
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:35:10 2015 -0800

    s3: smbd: VFS change. Add new field bool posix_pathnames into struct 
smb_request.
    
    Initialize from lp_posix_pathnames() global.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit cc729ae47d87a4659590af86e5389f37d17a523f
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:27:55 2015 -0800

    s3: smbd: srvstr_get_path() is now only called when lp_posix_pathnames() is 
false.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 88bb4801c0c7632caf6b1b059aa07d56cf215c60
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:26:49 2015 -0800

    s3: smbd: Split all calls to srvstr_get_path() to calls to 
srvstr_get_path_posix() or srvstr_get_path() depending on lp_posix_pathnames().
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit c78d73986d69f52699d576c3d0cad157feef13a8
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:18:03 2015 -0800

    s3: smbd: Add srvstr_get_path_posix().
    
    Not yet used, will be plumbed into existing callers of srvstr_get_path()
    when lp_posix_pathnames() is true.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 5740761e78711b59b1b7734bbbc76ddb55c3abc8
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:14:41 2015 -0800

    s3: smbd: We now know that srvstr_get_path_wcard() is only called when 
lp_posix_pathnames() is false.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 41d62dfcb6179ff760a35e38d73009ae3761c533
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:13:44 2015 -0800

    s3: smbd: Split all calls to srvstr_get_path_wcard() into 
srvstr_get_path_wcard_posix() or srvstr_get_path_wcard() depending on 
lp_posix_pathnames().
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit eb7198f9991c5baba241dd2897107ba80dd6a817
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:07:49 2015 -0800

    s3: smbd: Add srvstr_get_path_wcard_posix().
    
    Allows us to call this directly and eventually remove the 
lp_posix_pathnames() call
    from inside of srvstr_get_path_wcard().
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit db36ee422bc45147169997c0217ea43b104efcec
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:04:11 2015 -0800

    s3: smbd: Move lp_posix_pathnames() out into srvstr_get_path_req_wcard().
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 5a340698755fa591f0d2b7a63d50f41c051e487b
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 13:01:08 2015 -0800

    s3: smbd: Move lp_posix_pathnames() out into srvstr_get_path().
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

commit 4a6d7e1e1599634d4bcfa7cf00eb6f5f4a4aa177
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Dec 22 12:52:58 2015 -0800

    s3: smbd: Move lp_posix_pathnames() out of srvstr_get_path_wcard_internal().
    
    Pass as parameter. Part of moving this switch out to the external request
    parsing code.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <volker.lende...@sernet.de>

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

Summary of changes:
 source3/include/vfs.h                     |   3 +
 source3/rpc_server/srvsvc/srv_srvsvc_nt.c |   4 +-
 source3/smbd/dir.c                        |   5 +-
 source3/smbd/nttrans.c                    |  79 ++++++++--
 source3/smbd/open.c                       |   8 +-
 source3/smbd/process.c                    |   1 +
 source3/smbd/proto.h                      |  17 +++
 source3/smbd/reply.c                      | 167 ++++++++++++++++++----
 source3/smbd/smb2_create.c                |   6 +-
 source3/smbd/smb2_query_directory.c       |   4 +-
 source3/smbd/trans2.c                     | 230 +++++++++++++++++++++++++-----
 11 files changed, 437 insertions(+), 87 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index 71e1af9..66e4fc6 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -169,6 +169,7 @@
 /* Version 33 - Remove notify_watch_fn */
 /* Bump to version 34 - Samba 4.4 will ship with that */
 /* Version 34 - Remove bool posix_open, add uint64_t posix_flags */
+/* Version 34 - Added bool posix_pathnames to struct smb_request */
 
 #define SMB_VFS_INTERFACE_VERSION 34
 
@@ -464,6 +465,8 @@ struct smb_request {
        struct smb_request **chain;
 
        struct timeval request_time;
+
+       bool posix_pathnames;
 };
 
 /*
diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c 
b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
index fd71650..b1e9d13 100644
--- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
+++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
@@ -2311,7 +2311,7 @@ WERROR _srvsvc_NetGetFileSecurity(struct pipes_struct *p,
        files_struct *fsp = NULL;
        int snum;
        char *oldcwd = NULL;
-       uint32_t ucf_flags = (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = 0;
 
        ZERO_STRUCT(st);
 
@@ -2459,7 +2459,7 @@ WERROR _srvsvc_NetSetFileSecurity(struct pipes_struct *p,
        char *oldcwd = NULL;
        struct security_descriptor *psd = NULL;
        uint32_t security_info_sent = 0;
-       uint32_t ucf_flags = (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = 0;
 
        ZERO_STRUCT(st);
 
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index ad57294..a322bb5 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -485,7 +485,7 @@ NTSTATUS dptr_create(connection_struct *conn,
                if (smb_dname == NULL) {
                        return NT_STATUS_NO_MEMORY;
                }
-               if (lp_posix_pathnames()) {
+               if (req != NULL && req->posix_pathnames) {
                        ret = SMB_VFS_LSTAT(conn, smb_dname);
                } else {
                        ret = SMB_VFS_STAT(conn, smb_dname);
@@ -545,7 +545,8 @@ NTSTATUS dptr_create(connection_struct *conn,
                TALLOC_FREE(dir_hnd);
                return NT_STATUS_NO_MEMORY;
        }
-       if (lp_posix_pathnames() || (wcard[0] == '.' && wcard[1] == 0)) {
+       if ((req != NULL && req->posix_pathnames) ||
+                       (wcard[0] == '.' && wcard[1] == 0)) {
                dptr->has_wild = True;
        } else {
                dptr->has_wild = wcard_has_wild;
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index 6ef4c5a..b5fbbfd 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -462,7 +462,7 @@ void reply_ntcreate_and_X(struct smb_request *req)
        uint8_t oplock_granted = NO_OPLOCK_RETURN;
        struct case_semantics_state *case_state = NULL;
        uint32_t ucf_flags = UCF_PREP_CREATEFILE |
-                       (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 0);
+                       (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
        TALLOC_CTX *ctx = talloc_tos();
 
        START_PROFILE(SMBntcreateX);
@@ -762,9 +762,25 @@ static void do_nt_transact_create_pipe(connection_struct 
*conn,
 
        flags = IVAL(params,0);
 
-       srvstr_get_path(ctx, params, req->flags2, &fname, params+53,
-                       parameter_count-53, STR_TERMINATE,
+       if (req->posix_pathnames) {
+               srvstr_get_path_posix(ctx,
+                       params,
+                       req->flags2,
+                       &fname,
+                       params+53,
+                       parameter_count-53,
+                       STR_TERMINATE,
                        &status);
+       } else {
+               srvstr_get_path(ctx,
+                       params,
+                       req->flags2,
+                       &fname,
+                       params+53,
+                       parameter_count-53,
+                       STR_TERMINATE,
+                       &status);
+       }
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                return;
@@ -1003,7 +1019,7 @@ static void call_nt_transact_create(connection_struct 
*conn,
        uint8_t oplock_granted;
        struct case_semantics_state *case_state = NULL;
        uint32_t ucf_flags = UCF_PREP_CREATEFILE |
-                       (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 0);
+                       (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
        TALLOC_CTX *ctx = talloc_tos();
 
        DEBUG(5,("call_nt_transact_create\n"));
@@ -1052,9 +1068,25 @@ static void call_nt_transact_create(connection_struct 
*conn,
         */
        create_options &= ~NTCREATEX_OPTIONS_MUST_IGNORE_MASK;
 
-       srvstr_get_path(ctx, params, req->flags2, &fname,
-                       params+53, parameter_count-53,
-                       STR_TERMINATE, &status);
+       if (req->posix_pathnames) {
+               srvstr_get_path_posix(ctx,
+                       params,
+                       req->flags2,
+                       &fname,
+                       params+53,
+                       parameter_count-53,
+                       STR_TERMINATE,
+                       &status);
+       } else {
+               srvstr_get_path(ctx,
+                       params,
+                       req->flags2,
+                       &fname,
+                       params+53,
+                       parameter_count-53,
+                       STR_TERMINATE,
+                       &status);
+       }
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                goto out;
@@ -1528,8 +1560,8 @@ void reply_ntrename(struct smb_request *req)
        bool src_has_wcard = False;
        bool dest_has_wcard = False;
        uint32_t attrs;
-       uint32_t ucf_flags_src = (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 
0);
-       uint32_t ucf_flags_dst = (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 
0);
+       uint32_t ucf_flags_src = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 
0);
+       uint32_t ucf_flags_dst = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 
0);
        uint16_t rename_type;
        TALLOC_CTX *ctx = talloc_tos();
        bool stream_rename = false;
@@ -1552,7 +1584,7 @@ void reply_ntrename(struct smb_request *req)
                goto out;
        }
 
-       if (!lp_posix_pathnames() && ms_has_wild(oldname)) {
+       if (!req->posix_pathnames && ms_has_wild(oldname)) {
                reply_nterror(req, NT_STATUS_OBJECT_PATH_SYNTAX_BAD);
                goto out;
        }
@@ -1565,7 +1597,7 @@ void reply_ntrename(struct smb_request *req)
                goto out;
        }
 
-       if (!lp_posix_pathnames()) {
+       if (!req->posix_pathnames) {
                /* The newname must begin with a ':' if the
                   oldname contains a ':'. */
                if (strchr_m(oldname, ':')) {
@@ -1835,9 +1867,28 @@ static void call_nt_transact_rename(connection_struct 
*conn,
        if (!check_fsp(conn, req, fsp)) {
                return;
        }
-       srvstr_get_path_wcard(ctx, params, req->flags2, &new_name, params+4,
-                             parameter_count - 4,
-                             STR_TERMINATE, &status, &dest_has_wcard);
+       if (req->posix_pathnames) {
+               srvstr_get_path_wcard_posix(ctx,
+                               params,
+                               req->flags2,
+                               &new_name,
+                               params+4,
+                               parameter_count - 4,
+                               STR_TERMINATE,
+                               &status,
+                               &dest_has_wcard);
+       } else {
+               srvstr_get_path_wcard(ctx,
+                               params,
+                               req->flags2,
+                               &new_name,
+                               params+4,
+                               parameter_count - 4,
+                               STR_TERMINATE,
+                               &status,
+                               &dest_has_wcard);
+       }
+
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                return;
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index d4f257c..3c0a7a3 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -2529,7 +2529,8 @@ static NTSTATUS open_file_ntcreate(connection_struct 
*conn,
        }
 
        /* this is for OS/2 long file names - say we don't support them */
-       if (!lp_posix_pathnames() && strstr(smb_fname->base_name,".+,;=[].")) {
+       if (req != NULL && !req->posix_pathnames &&
+                       strstr(smb_fname->base_name,".+,;=[].")) {
                /* OS/2 Workplace shell fix may be main code stream in a later
                 * release. */
                DEBUG(5,("open_file_ntcreate: OS/2 long filenames are not "
@@ -4828,7 +4829,8 @@ NTSTATUS get_relative_fid_filename(connection_struct 
*conn,
        files_struct *dir_fsp;
        char *parent_fname = NULL;
        char *new_base_name = NULL;
-       uint32_t ucf_flags = (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = ((req != NULL && req->posix_pathnames) ?
+                       UCF_POSIX_PATHNAMES : 0);
        NTSTATUS status;
 
        if (root_dir_fid == 0 || !smb_fname) {
@@ -5040,7 +5042,7 @@ NTSTATUS create_file_default(connection_struct *conn,
                        status = NT_STATUS_NOT_A_DIRECTORY;
                        goto fail;
                }
-               if (lp_posix_pathnames()) {
+               if (req != NULL && req->posix_pathnames) {
                        ret = SMB_VFS_LSTAT(conn, smb_fname);
                } else {
                        ret = SMB_VFS_STAT(conn, smb_fname);
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index c99c75e..79ca91f 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -629,6 +629,7 @@ static bool init_smb_request(struct smb_request *req,
        req->smb2req = NULL;
        req->priv_paths = NULL;
        req->chain = NULL;
+       req->posix_pathnames = lp_posix_pathnames();
        smb_init_perfcount_data(&req->pcd);
 
        /* Ensure we have at least wct words and 2 bytes of bcc. */
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 55e8286..847a191 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -847,6 +847,15 @@ size_t srvstr_get_path_wcard(TALLOC_CTX *ctx,
                        int flags,
                        NTSTATUS *err,
                        bool *contains_wcard);
+size_t srvstr_get_path_wcard_posix(TALLOC_CTX *ctx,
+                       const char *inbuf,
+                       uint16_t smb_flags2,
+                       char **pp_dest,
+                       const char *src,
+                       size_t src_len,
+                       int flags,
+                       NTSTATUS *err,
+                       bool *contains_wcard);
 size_t srvstr_get_path(TALLOC_CTX *ctx,
                        const char *inbuf,
                        uint16_t smb_flags2,
@@ -855,6 +864,14 @@ size_t srvstr_get_path(TALLOC_CTX *ctx,
                        size_t src_len,
                        int flags,
                        NTSTATUS *err);
+size_t srvstr_get_path_posix(TALLOC_CTX *ctx,
+                       const char *inbuf,
+                       uint16_t smb_flags2,
+                       char **pp_dest,
+                       const char *src,
+                       size_t src_len,
+                       int flags,
+                       NTSTATUS *err);
 size_t srvstr_get_path_req_wcard(TALLOC_CTX *mem_ctx, struct smb_request *req,
                                 char **pp_dest, const char *src, int flags,
                                 NTSTATUS *err, bool *contains_wcard);
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index b1ca7a5..77d5b6e 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -253,15 +253,17 @@ NTSTATUS check_path_syntax_posix(char *path)
 
 /****************************************************************************
  Pull a string and check the path allowing a wilcard - provide for error 
return.
+ Passes in posix flag.
 ****************************************************************************/
 
-size_t srvstr_get_path_wcard(TALLOC_CTX *ctx,
+static size_t srvstr_get_path_wcard_internal(TALLOC_CTX *ctx,
                        const char *base_ptr,
                        uint16_t smb_flags2,
                        char **pp_dest,
                        const char *src,
                        size_t src_len,
                        int flags,
+                       bool posix_pathnames,
                        NTSTATUS *err,
                        bool *contains_wcard)
 {
@@ -288,7 +290,7 @@ size_t srvstr_get_path_wcard(TALLOC_CTX *ctx,
                return ret;
        }
 
-       if (lp_posix_pathnames()) {
+       if (posix_pathnames) {
                *err = check_path_syntax_posix(*pp_dest);
        } else {
                *err = check_path_syntax_wcard(*pp_dest, contains_wcard);
@@ -298,6 +300,59 @@ size_t srvstr_get_path_wcard(TALLOC_CTX *ctx,
 }
 
 /****************************************************************************
+ Pull a string and check the path allowing a wilcard - provide for error 
return.
+****************************************************************************/
+
+size_t srvstr_get_path_wcard(TALLOC_CTX *ctx,
+                       const char *base_ptr,
+                       uint16_t smb_flags2,
+                       char **pp_dest,
+                       const char *src,
+                       size_t src_len,
+                       int flags,
+                       NTSTATUS *err,
+                       bool *contains_wcard)
+{
+       return srvstr_get_path_wcard_internal(ctx,
+                       base_ptr,
+                       smb_flags2,
+                       pp_dest,
+                       src,
+                       src_len,
+                       flags,
+                       false,
+                       err,
+                       contains_wcard);
+}
+
+/****************************************************************************
+ Pull a string and check the path allowing a wilcard - provide for error 
return.
+ posix_pathnames version.
+****************************************************************************/
+
+size_t srvstr_get_path_wcard_posix(TALLOC_CTX *ctx,
+                       const char *base_ptr,
+                       uint16_t smb_flags2,
+                       char **pp_dest,
+                       const char *src,
+                       size_t src_len,
+                       int flags,
+                       NTSTATUS *err,
+                       bool *contains_wcard)
+{
+       return srvstr_get_path_wcard_internal(ctx,
+                       base_ptr,
+                       smb_flags2,
+                       pp_dest,
+                       src,
+                       src_len,
+                       flags,
+                       true,
+                       err,
+                       contains_wcard);
+}
+
+/****************************************************************************
  Pull a string and check the path - provide for error return.
 ****************************************************************************/
 
@@ -311,10 +366,46 @@ size_t srvstr_get_path(TALLOC_CTX *ctx,
                        NTSTATUS *err)
 {
        bool ignore;
-       return srvstr_get_path_wcard(ctx, base_ptr, smb_flags2, pp_dest, src,
-                                    src_len, flags, err, &ignore);
+       return srvstr_get_path_wcard_internal(ctx,
+                       base_ptr,
+                       smb_flags2,
+                       pp_dest,
+                       src,
+                       src_len,
+                       flags,
+                       false,
+                       err,
+                       &ignore);
+}
+
+/****************************************************************************
+ Pull a string and check the path - provide for error return.
+ posix_pathnames version.
+****************************************************************************/
+
+size_t srvstr_get_path_posix(TALLOC_CTX *ctx,
+                       const char *base_ptr,
+                       uint16_t smb_flags2,
+                       char **pp_dest,
+                       const char *src,
+                       size_t src_len,
+                       int flags,
+                       NTSTATUS *err)
+{
+       bool ignore;
+       return srvstr_get_path_wcard_internal(ctx,
+                       base_ptr,
+                       smb_flags2,
+                       pp_dest,
+                       src,
+                       src_len,
+                       flags,
+                       true,
+                       err,
+                       &ignore);
 }
 
+
 size_t srvstr_get_path_req_wcard(TALLOC_CTX *mem_ctx, struct smb_request *req,
                                 char **pp_dest, const char *src, int flags,
                                 NTSTATUS *err, bool *contains_wcard)
@@ -326,9 +417,29 @@ size_t srvstr_get_path_req_wcard(TALLOC_CTX *mem_ctx, 
struct smb_request *req,
                return 0;
        }
 
-       return srvstr_get_path_wcard(mem_ctx, (const char *)req->inbuf,
-                                    req->flags2, pp_dest, src, bufrem, flags,
-                                    err, contains_wcard);
+       if (req->posix_pathnames) {
+               return srvstr_get_path_wcard_internal(mem_ctx,
+                               (const char *)req->inbuf,
+                               req->flags2,
+                               pp_dest,
+                               src,
+                               bufrem,
+                               flags,
+                               true,
+                               err,
+                               contains_wcard);
+       } else {
+               return srvstr_get_path_wcard_internal(mem_ctx,
+                               (const char *)req->inbuf,
+                               req->flags2,
+                               pp_dest,
+                               src,
+                               bufrem,
+                               flags,
+                               false,
+                               err,
+                               contains_wcard);
+       }
 }
 
 size_t srvstr_get_path_req(TALLOC_CTX *mem_ctx, struct smb_request *req,
@@ -1165,7 +1276,7 @@ void reply_checkpath(struct smb_request *req)
        struct smb_filename *smb_fname = NULL;
        char *name = NULL;
        NTSTATUS status;
-       uint32_t ucf_flags = (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
        TALLOC_CTX *ctx = talloc_tos();
 
        START_PROFILE(SMBcheckpath);
@@ -1280,7 +1391,7 @@ void reply_getatr(struct smb_request *req)
                size = 0;
                mtime = 0;
        } else {
-               uint32_t ucf_flags = (lp_posix_pathnames() ?
+               uint32_t ucf_flags = (req->posix_pathnames ?
                                UCF_POSIX_PATHNAMES : 0);
                status = filename_convert(ctx,
                                conn,
@@ -1367,7 +1478,7 @@ void reply_setatr(struct smb_request *req)
        time_t mtime;
        const char *p;
        NTSTATUS status;
-       uint32_t ucf_flags = (lp_posix_pathnames() ? UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
        TALLOC_CTX *ctx = talloc_tos();
 
        START_PROFILE(SMBsetatr);
@@ -1644,7 +1755,7 @@ void reply_search(struct smb_request *req)
                goto out;
        }
 
-       if (lp_posix_pathnames()) {
+       if (req->posix_pathnames) {
                reply_unknown_new(req, req->cmd);
                goto out;
        }
@@ -1673,7 +1784,7 @@ void reply_search(struct smb_request *req)
 
        if (status_len == 0) {
                uint32_t ucf_flags = UCF_ALWAYS_ALLOW_WCARD_LCOMP |


-- 
Samba Shared Repository

Reply via email to