From 1a45d72eb4f9a869976df2caccccaaa6f8a4fc6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= Date: Wed, 5 Jun 2013 15:01:14 +0200 Subject: [PATCH] s4-dfs_server: check for netbios aliases in ad_get_referrals (bug #9947) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without this patch ad_get_referrals checks for netbios, dns names and ip, but not for netbios aliases set by netbios aliases option, whether the requested name is our dns name. Pair-programmed-with: Stefan Metzmacher Signed-off-by: Björn Baumbach Signed-off-by: Stefan Metzmacher Reviewed-by: Michael Adam Autobuild-User(master): Michael Adam Autobuild-Date(master): Tue Jun 11 01:12:08 CEST 2013 on sn-devel-104 (cherry picked from commit 424a990e34278fae4888b00affb530ed1fbcb354) --- dfs_server/dfs_server_ad.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/dfs_server/dfs_server_ad.c b/dfs_server/dfs_server_ad.c index ceabe05..8fa143d 100644 --- a/dfs_server/dfs_server_ad.c +++ b/dfs_server/dfs_server_ad.c @@ -751,6 +751,7 @@ NTSTATUS dfs_server_ad_get_referrals(struct loadparm_context *lp_ctx, const char *dns_domain; const char *netbios_name; const char *dns_name; + const char **netbios_aliases; if (!lpcfg_host_msdfs(lp_ctx)) { return NT_STATUS_FS_DRIVER_REQUIRED; @@ -827,6 +828,40 @@ NTSTATUS dfs_server_ad_get_referrals(struct loadparm_context *lp_ctx, return NT_STATUS_NOT_FOUND; } + netbios_aliases = lpcfg_netbios_aliases(lp_ctx); + while (netbios_aliases && *netbios_aliases) { + const char *netbios_alias = *netbios_aliases; + char *dns_alias; + int cmp; + + cmp = strcasecmp_m(server_name, netbios_alias); + if (cmp == 0) { + /* + * If it is not domain related do not + * handle it here. + */ + return NT_STATUS_NOT_FOUND; + } + + dns_alias = talloc_asprintf(r, "%s.%s", + netbios_alias, + dns_domain); + if (dns_alias == NULL) { + return NT_STATUS_NO_MEMORY; + } + + cmp = strcasecmp_m(server_name, dns_alias); + talloc_free(dns_alias); + if (cmp == 0) { + /* + * If it is not domain related do not + * handle it here. + */ + return NT_STATUS_NOT_FOUND; + } + netbios_aliases++; + } + if ((strcasecmp_m(server_name, netbios_domain) != 0) && (strcasecmp_m(server_name, dns_domain) != 0)) { /* -- 1.8.1.5