summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2012-05-23 13:09:40 +0200
committerStefan Metzmacher <metze@samba.org>2012-05-24 14:12:32 +0200
commit758d61201f7b51da6ce74aee2d18c5125d72522e (patch)
tree10c9fb6c13388b1a070e7dca3a1c999ce1e1ecb9
parenta92f7176bd7f198a547952142b7d361a9b4e9146 (diff)
downloadsamba-758d61201f7b51da6ce74aee2d18c5125d72522e.tar.gz
samba-758d61201f7b51da6ce74aee2d18c5125d72522e.tar.bz2
samba-758d61201f7b51da6ce74aee2d18c5125d72522e.zip
s3:smbd/msdfs: pass 'allow_broken_path' to get_referred_path()
Note the DCERPC code should not be smb2 specific! I wonder why this is at all smb2 specific... metze
-rw-r--r--source3/modules/vfs_default.c4
-rw-r--r--source3/rpc_server/dfs/srv_dfs_nt.c11
-rw-r--r--source3/smbd/msdfs.c4
-rw-r--r--source3/smbd/proto.h2
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);