From 85b5bedd43cdb758463cb03079eb1bb4aadf6677 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 30 Oct 2013 13:22:05 +0000 Subject: smbd: Support multiple dfs targets for msdfs proxy shares MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Volker Lendecke Reviewed-by: Björn Jacke --- source3/smbd/msdfs.c | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c index 52a2a4852e..aede3e6da0 100644 --- a/source3/smbd/msdfs.c +++ b/source3/smbd/msdfs.c @@ -958,6 +958,7 @@ NTSTATUS get_referred_path(TALLOC_CTX *ctx, if (pdp->reqpath[0] == '\0') { char *tmp; struct referral *ref; + int refcount; if (*lp_msdfs_proxy(talloc_tos(), snum) == '\0') { TALLOC_FREE(pdp); @@ -973,39 +974,20 @@ NTSTATUS get_referred_path(TALLOC_CTX *ctx, * the configured target share. */ - jucn->referral_count = 1; - if ((ref = talloc_zero(ctx, struct referral)) == NULL) { + tmp = talloc_asprintf(talloc_tos(), "msdfs:%s", + lp_msdfs_proxy(talloc_tos(), snum)); + if (tmp == NULL) { TALLOC_FREE(pdp); return NT_STATUS_NO_MEMORY; } - if (!(tmp = talloc_strdup(ctx, lp_msdfs_proxy(talloc_tos(), snum)))) { + if (!parse_msdfs_symlink(ctx, tmp, &ref, &refcount)) { + TALLOC_FREE(tmp); TALLOC_FREE(pdp); - return NT_STATUS_NO_MEMORY; + return NT_STATUS_INVALID_PARAMETER; } - - trim_string(tmp, "\\", 0); - - ref->alternate_path = talloc_asprintf(ctx, "\\%s", tmp); TALLOC_FREE(tmp); - - if (!ref->alternate_path) { - TALLOC_FREE(pdp); - return NT_STATUS_NO_MEMORY; - } - - if (pdp->reqpath[0] != '\0') { - ref->alternate_path = talloc_asprintf_append( - ref->alternate_path, - "%s", - pdp->reqpath); - if (!ref->alternate_path) { - TALLOC_FREE(pdp); - return NT_STATUS_NO_MEMORY; - } - } - ref->proximity = 0; - ref->ttl = REFERRAL_TTL; + jucn->referral_count = refcount; jucn->referral_list = ref; *consumedcntp = strlen(dfs_path); TALLOC_FREE(pdp); -- cgit