From: Björn Baumbach Date: Wed, 5 Jun 2013 13:01:14 +0000 (+0200) Subject: s4-dfs_server: check for netbios aliases in ad_get_referrals X-Git-Url: http://git.samba.org/?p=obnox%2Fsamba%2Fsamba-obnox.git;a=commitdiff_plain;h=424a990e34278fae4888b00affb530ed1fbcb354 s4-dfs_server: check for netbios aliases in ad_get_referrals 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 --- diff --git a/dfs_server/dfs_server_ad.c b/dfs_server/dfs_server_ad.c index 4d3891a774a..249a1d18617 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)) { /*