1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

Add net-ads-join dnshostname=fqdn option

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14396

Signed-off-by: Isaac Boukris <iboukris@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>

Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Fri May 29 13:33:28 UTC 2020 on sn-devel-184
This commit is contained in:
Isaac Boukris 2020-05-27 15:54:12 +02:00 committed by Andreas Schneider
parent 2b62bd5137
commit ce0e96e6f4
5 changed files with 36 additions and 3 deletions

View File

@ -481,7 +481,7 @@ The remote server must be specified with the -S option.
<refsect2> <refsect2>
<title>[RPC|ADS] JOIN [TYPE] [--no-dns-updates] [-U username[%password]] <title>[RPC|ADS] JOIN [TYPE] [--no-dns-updates] [-U username[%password]]
[createupn=UPN] [createcomputer=OU] [machinepass=PASS] [dnshostname=FQDN] [createupn=UPN] [createcomputer=OU] [machinepass=PASS]
[osName=string osVer=string] [options]</title> [osName=string osVer=string] [options]</title>
<para> <para>
@ -496,6 +496,11 @@ be created.</para>
joining the domain. joining the domain.
</para> </para>
<para>
[FQDN] (ADS only) set the dnsHosName attribute during the join.
The default format is netbiosname.dnsdomain.
</para>
<para> <para>
[UPN] (ADS only) set the principalname attribute during the join. The default [UPN] (ADS only) set the principalname attribute during the join. The default
format is host/netbiosname@REALM. format is host/netbiosname@REALM.

View File

@ -546,7 +546,12 @@ static ADS_STATUS libnet_join_set_machine_spn(TALLOC_CTX *mem_ctx,
goto done; goto done;
} }
fstr_sprintf(my_fqdn, "%s.%s", r->in.machine_name, lp_dnsdomain()); if (r->in.dnshostname != NULL) {
fstr_sprintf(my_fqdn, "%s", r->in.dnshostname);
} else {
fstr_sprintf(my_fqdn, "%s.%s", r->in.machine_name,
lp_dnsdomain());
}
if (!strlower_m(my_fqdn)) { if (!strlower_m(my_fqdn)) {
status = ADS_ERROR_LDAP(LDAP_NO_MEMORY); status = ADS_ERROR_LDAP(LDAP_NO_MEMORY);

View File

@ -37,6 +37,7 @@ interface libnetjoin
[in] string os_servicepack, [in] string os_servicepack,
[in] boolean8 create_upn, [in] boolean8 create_upn,
[in] string upn, [in] string upn,
[in] string dnshostname,
[in] boolean8 modify_config, [in] boolean8 modify_config,
[in,unique] ads_struct *ads, [in,unique] ads_struct *ads,
[in] boolean8 debug, [in] boolean8 debug,

View File

@ -1711,6 +1711,8 @@ static int net_ads_join_usage(struct net_context *c, int argc, const char **argv
{ {
d_printf(_("net ads join [--no-dns-updates] [options]\n" d_printf(_("net ads join [--no-dns-updates] [options]\n"
"Valid options:\n")); "Valid options:\n"));
d_printf(_(" dnshostname=FQDN Set the dnsHostName attribute during the join.\n"
" The default is in the form netbiosname.dnsdomain\n"));
d_printf(_(" createupn[=UPN] Set the userPrincipalName attribute during the join.\n" d_printf(_(" createupn[=UPN] Set the userPrincipalName attribute during the join.\n"
" The default UPN is in the form host/netbiosname@REALM.\n")); " The default UPN is in the form host/netbiosname@REALM.\n"));
d_printf(_(" createcomputer=OU Precreate the computer account in a specific OU.\n" d_printf(_(" createcomputer=OU Precreate the computer account in a specific OU.\n"
@ -1831,6 +1833,7 @@ int net_ads_join(struct net_context *c, int argc, const char **argv)
const char *domain = lp_realm(); const char *domain = lp_realm();
WERROR werr = WERR_NERR_SETUPNOTJOINED; WERROR werr = WERR_NERR_SETUPNOTJOINED;
bool createupn = false; bool createupn = false;
const char *dnshostname = NULL;
const char *machineupn = NULL; const char *machineupn = NULL;
const char *machine_password = NULL; const char *machine_password = NULL;
const char *create_in_ou = NULL; const char *create_in_ou = NULL;
@ -1871,7 +1874,10 @@ int net_ads_join(struct net_context *c, int argc, const char **argv)
/* process additional command line args */ /* process additional command line args */
for ( i=0; i<argc; i++ ) { for ( i=0; i<argc; i++ ) {
if ( !strncasecmp_m(argv[i], "createupn", strlen("createupn")) ) { if ( !strncasecmp_m(argv[i], "dnshostname", strlen("dnshostname")) ) {
dnshostname = get_string_param(argv[i]);
}
else if ( !strncasecmp_m(argv[i], "createupn", strlen("createupn")) ) {
createupn = true; createupn = true;
machineupn = get_string_param(argv[i]); machineupn = get_string_param(argv[i]);
} }
@ -1939,6 +1945,7 @@ int net_ads_join(struct net_context *c, int argc, const char **argv)
r->in.domain_name_type = domain_name_type; r->in.domain_name_type = domain_name_type;
r->in.create_upn = createupn; r->in.create_upn = createupn;
r->in.upn = machineupn; r->in.upn = machineupn;
r->in.dnshostname = dnshostname;
r->in.account_ou = create_in_ou; r->in.account_ou = create_in_ou;
r->in.os_name = os_name; r->in.os_name = os_name;
r->in.os_version = os_version; r->in.os_version = os_version;

View File

@ -277,6 +277,21 @@ rm -f $dedicated_keytab_file
testit "leave+createupn" $VALGRIND $net_tool ads leave -U$DC_USERNAME%$DC_PASSWORD || failed=`expr $failed + 1` testit "leave+createupn" $VALGRIND $net_tool ads leave -U$DC_USERNAME%$DC_PASSWORD || failed=`expr $failed + 1`
#
# Test dnshostname option of 'net ads join'
#
testit "join+dnshostname" $VALGRIND $net_tool ads join -U$DC_USERNAME%$DC_PASSWORD dnshostname="alt.hostname.$HOSTNAME" || failed=`expr $failed + 1`
testit_grep "check dnshostname opt" "dNSHostName: alt.hostname.$HOSTNAME" $ldbsearch -U$DC_USERNAME%$DC_PASSWORD -H ldap://$SERVER.$REALM -s base -b "CN=$HOSTNAME,CN=Computers,$base_dn" || failed=`expr $failed + 1`
testit "create_keytab+dnshostname" $VALGRIND $net_tool ads keytab create --option="kerberosmethod=dedicatedkeytab" --option="dedicatedkeytabfile=$dedicated_keytab_file" || failed=`expr $failed + 1`
testit_grep "check dnshostname+keytab" "host/alt.hostname.$HOSTNAME@$REALM" $net_tool ads keytab list --option="kerberosmethod=dedicatedkeytab" --option="dedicatedkeytabfile=$dedicated_keytab_file" || failed=`expr $failed + 1`
rm -f $dedicated_keytab_file
testit "leave+dnshostname" $VALGRIND $net_tool ads leave -U$DC_USERNAME%$DC_PASSWORD || failed=`expr $failed + 1`
rm -rf $BASEDIR/$WORKDIR rm -rf $BASEDIR/$WORKDIR
exit $failed exit $failed