diff options
author | Ralph Boehme <slow@samba.org> | 2016-04-26 17:21:46 +0200 |
---|---|---|
committer | Ralph Boehme <slow@samba.org> | 2016-05-04 17:58:05 +0200 |
commit | 0f6d51f34baa816b6ec422c8bc28687f0a3073de (patch) | |
tree | a33268356042b3f72c40920490f6de80b5ee6969 /source3/libnet | |
parent | f85b30ae78c90b7b1ae9bdce099d37728c77c9d4 (diff) | |
download | samba-0f6d51f34baa816b6ec422c8bc28687f0a3073de.tar.gz |
s3:libnet:libnet_join: add netbios aliases as SPNs
Add all listed smb.conf netbios aliases as SPNs to the machine account:
HOST/NETBIOS_ALIAS@REALM
and
HOST/netbios_alias.dnsdomain.name@REALM
Bug: https://bugzilla.samba.org/show_bug.cgi?id=1703
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Wed May 4 17:58:05 CEST 2016 on sn-devel-144
Diffstat (limited to 'source3/libnet')
-rw-r--r-- | source3/libnet/libnet_join.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c index ef6c99506f6..a28864d94eb 100644 --- a/source3/libnet/libnet_join.c +++ b/source3/libnet/libnet_join.c @@ -463,6 +463,7 @@ static ADS_STATUS libnet_join_set_machine_spn(TALLOC_CTX *mem_ctx, size_t num_spns = 0; char *spn = NULL; bool ok; + const char **netbios_aliases = NULL; /* Find our DN */ @@ -524,6 +525,65 @@ static ADS_STATUS libnet_join_set_machine_spn(TALLOC_CTX *mem_ctx, } } + netbios_aliases = lp_netbios_aliases(); + if (netbios_aliases != NULL) { + for (; *netbios_aliases != NULL; netbios_aliases++) { + /* + * Add HOST/NETBIOSNAME + */ + spn = talloc_asprintf(mem_ctx, "HOST/%s", *netbios_aliases); + if (spn == NULL) { + TALLOC_FREE(spn); + return ADS_ERROR_LDAP(LDAP_NO_MEMORY); + } + if (!strupper_m(spn)) { + TALLOC_FREE(spn); + return ADS_ERROR_LDAP(LDAP_NO_MEMORY); + } + + ok = ads_element_in_array(spn_array, num_spns, spn); + if (ok) { + TALLOC_FREE(spn); + continue; + } + ok = add_string_to_array(spn_array, spn, + &spn_array, &num_spns); + if (!ok) { + TALLOC_FREE(spn); + return ADS_ERROR_LDAP(LDAP_NO_MEMORY); + } + TALLOC_FREE(spn); + + /* + * Add HOST/netbiosname.domainname + */ + if (r->out.dns_domain_name == NULL) { + continue; + } + fstr_sprintf(my_fqdn, "%s.%s", + *netbios_aliases, + r->out.dns_domain_name); + + spn = talloc_asprintf(mem_ctx, "HOST/%s", my_fqdn); + if (spn == NULL) { + return ADS_ERROR_LDAP(LDAP_NO_MEMORY); + } + + ok = ads_element_in_array(spn_array, num_spns, spn); + if (ok) { + TALLOC_FREE(spn); + continue; + } + ok = add_string_to_array(spn_array, spn, + &spn_array, &num_spns); + if (!ok) { + TALLOC_FREE(spn); + return ADS_ERROR_LDAP(LDAP_NO_MEMORY); + } + TALLOC_FREE(spn); + } + } + /* make sure to NULL terminate the array */ spn_array = talloc_realloc(mem_ctx, spn_array, const char *, num_spns + 1); if (spn_array == NULL) { |