diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/modules/vfs_default.c | 4 | ||||
-rw-r--r-- | source3/rpc_server/dfs/srv_dfs_nt.c | 11 | ||||
-rw-r--r-- | source3/smbd/msdfs.c | 4 | ||||
-rw-r--r-- | source3/smbd/proto.h | 2 |
4 files changed, 13 insertions, 8 deletions
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 887dbcb9af..8908508af4 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -22,6 +22,7 @@ #include "system/time.h" #include "system/filesys.h" #include "smbd/smbd.h" +#include "smbd/globals.h" #include "ntioctl.h" #include "smbprofile.h" #include "../libcli/security/security.h" @@ -209,7 +210,8 @@ static NTSTATUS vfswrap_get_dfs_referrals(struct vfs_handle_struct *handle, } /* The following call can change cwd. */ - status = get_referred_path(r, pathnamep, handle->conn->sconn, + status = get_referred_path(r, pathnamep, + !handle->conn->sconn->using_smb2, junction, &consumedcnt, &self_referral); if (!NT_STATUS_IS_OK(status)) { vfs_ChDir(handle->conn, handle->conn->connectpath); diff --git a/source3/rpc_server/dfs/srv_dfs_nt.c b/source3/rpc_server/dfs/srv_dfs_nt.c index e765f15a8d..2c840e20c2 100644 --- a/source3/rpc_server/dfs/srv_dfs_nt.c +++ b/source3/rpc_server/dfs/srv_dfs_nt.c @@ -75,8 +75,9 @@ WERROR _dfs_Add(struct pipes_struct *p, struct dfs_Add *r) } /* The following call can change the cwd. */ - status = get_referred_path(ctx, r->in.path, smbd_server_conn, jn, - &consumedcnt, &self_ref); + status = get_referred_path(ctx, r->in.path, + true, /*allow_broken_path */ + jn, &consumedcnt, &self_ref); if(!NT_STATUS_IS_OK(status)) { return ntstatus_to_werror(status); } @@ -142,7 +143,8 @@ WERROR _dfs_Remove(struct pipes_struct *p, struct dfs_Remove *r) r->in.dfs_entry_path, r->in.servername, r->in.sharename)); } - status = get_referred_path(ctx, r->in.dfs_entry_path, smbd_server_conn, + status = get_referred_path(ctx, r->in.dfs_entry_path, + true, /*allow_broken_path */ jn, &consumedcnt, &self_ref); if(!NT_STATUS_IS_OK(status)) { return WERR_DFS_NO_SUCH_VOL; @@ -369,7 +371,8 @@ WERROR _dfs_GetInfo(struct pipes_struct *p, struct dfs_GetInfo *r) } /* The following call can change the cwd. */ - status = get_referred_path(ctx, r->in.dfs_entry_path, smbd_server_conn, + status = get_referred_path(ctx, r->in.dfs_entry_path, + true, /*allow_broken_path */ jn, &consumedcnt, &self_ref); if(!NT_STATUS_IS_OK(status) || consumedcnt < strlen(r->in.dfs_entry_path)) { diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c index 82859c3be4..76fcb8cbe3 100644 --- a/source3/smbd/msdfs.c +++ b/source3/smbd/msdfs.c @@ -856,7 +856,7 @@ static NTSTATUS self_ref(TALLOC_CTX *ctx, NTSTATUS get_referred_path(TALLOC_CTX *ctx, const char *dfs_path, - struct smbd_server_connection *sconn, + bool allow_broken_path, struct junction_map *jucn, int *consumedcntp, bool *self_referralp) @@ -875,7 +875,7 @@ NTSTATUS get_referred_path(TALLOC_CTX *ctx, *self_referralp = False; - status = parse_dfs_path(NULL, dfs_path, False, !sconn->using_smb2, + status = parse_dfs_path(NULL, dfs_path, False, allow_broken_path, pdp, &dummy); if (!NT_STATUS_IS_OK(status)) { return status; diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index f8a8281806..c5ca6b7176 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -457,7 +457,7 @@ bool is_msdfs_link(connection_struct *conn, struct junction_map; NTSTATUS get_referred_path(TALLOC_CTX *ctx, const char *dfs_path, - struct smbd_server_connection *sconn, + bool allow_broken_path, struct junction_map *jucn, int *consumedcntp, bool *self_referralp); |