Merge branch 'develop' into VCL-1116_use_database_hostnames_for_ad_joined_computers
diff --git a/managementnode/lib/VCL/DataStructure.pm b/managementnode/lib/VCL/DataStructure.pm
index 96ac42e..ba8d614 100644
--- a/managementnode/lib/VCL/DataStructure.pm
+++ b/managementnode/lib/VCL/DataStructure.pm
@@ -404,6 +404,7 @@
#$SUBROUTINE_MAPPINGS{image_domain_password} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{imagedomain}{password}'; # Explicit subroutine
$SUBROUTINE_MAPPINGS{image_domain_secret_id} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{imagedomain}{secretid}';
$SUBROUTINE_MAPPINGS{image_domain_username} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{imagedomain}{username}';
+$SUBROUTINE_MAPPINGS{image_domain_usedbhostname} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{imagedomain}{usedbhostname}';
$SUBROUTINE_MAPPINGS{image_domain_base_ou} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{imagedomain}{imageaddomain}{baseOU}';
$SUBROUTINE_MAPPINGS{image_domain_cryptsecret} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{imagedomain}{cryptsecret}{cryptsecret}';
diff --git a/managementnode/lib/VCL/Module/OS/Windows.pm b/managementnode/lib/VCL/Module/OS/Windows.pm
index 0c7e316..027e333 100644
--- a/managementnode/lib/VCL/Module/OS/Windows.pm
+++ b/managementnode/lib/VCL/Module/OS/Windows.pm
@@ -3939,8 +3939,8 @@
}
# Set sshd service startup mode to auto
- if (!$self->set_service_startup_mode('sshd', 'auto')) {
- notify($ERRORS{'WARNING'}, 0, "reboot not attempted, unable to set sshd service startup mode to auto");
+ if (!$self->set_service_startup_mode('sshd', 'manual')) {
+ notify($ERRORS{'WARNING'}, 0, "reboot not attempted, unable to set sshd service startup mode to manual");
return 0;
}
@@ -12741,6 +12741,7 @@
return;
}
+ my $use_database_hostnames = $self->data->get_image_domain_usedbhostname();
my $database_computer_hostname = $self->data->get_computer_hostname();
my $system32_path = $self->get_system32_path() || return;
@@ -12777,8 +12778,20 @@
$dns_suffix = $2;
}
- # Disable 'Change primary DNS suffix when domain membership changes'
- $self->reg_add('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters', 'SyncDomainWithMembership', 'REG_DWORD', 0);
+ if ($use_database_hostnames == 1) {
+ $new_computer_name = $database_computer_hostname;
+ notify($ERRORS{'DEBUG'}, 0, "active directory forces using database configured hostname: $new_computer_name");
+ # Enable 'Change primary DNS suffix when domain membership changes'
+ $self->reg_add('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters', 'SyncDomainWithMembership', 'REG_DWORD', 1);
+ }
+ else {
+ # Disable 'Change primary DNS suffix when domain membership changes'
+ $self->reg_add('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters', 'SyncDomainWithMembership', 'REG_DWORD', 0);
+ # Set the DNS suffix registry key
+ if ($dns_suffix) {
+ $self->reg_add('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters', 'NV Domain', 'REG_SZ', $dns_suffix);
+ }
+ }
# Assemble the command
my $command = "echo | cmd.exe /c \"$system32_path/Wbem/wmic.exe COMPUTERSYSTEM WHERE Name=\\\"%COMPUTERNAME%\\\" Rename \\\"$new_computer_name\\\"\"";
@@ -12796,11 +12809,6 @@
return 0;
}
- # Set the DNS suffix registry key
- if ($dns_suffix) {
- $self->reg_add('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters', 'NV Domain', 'REG_SZ', $dns_suffix);
- }
-
return 1;
}
diff --git a/mysql/vcl.sql b/mysql/vcl.sql
index 5ac1aa8..dea4ea9 100644
--- a/mysql/vcl.sql
+++ b/mysql/vcl.sql
@@ -38,6 +38,7 @@
`username` varchar(64) NOT NULL default '',
`password` varchar(256) NOT NULL default '',
`secretid` smallint(5) unsigned NOT NULL,
+ `usedbhostname` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `domainDNSName` (`domainDNSName`),
KEY `secretid` (`secretid`)
diff --git a/web/.ht-inc/addomain.php b/web/.ht-inc/addomain.php
index ba38e23..e59d72c 100644
--- a/web/.ht-inc/addomain.php
+++ b/web/.ht-inc/addomain.php
@@ -242,6 +242,9 @@
# dnsservers
if($data['dnsservers'] != $olddata['dnsservers'])
$updates[] = "dnsServers = '{$data['dnsservers']}'";
+ # useDatabaseHostnamesForComputerObjects
+ if($data['useDatabaseHostnamesForComputerObjects'] != $olddata['useDatabaseHostnamesForComputerObjects'])
+ $updates[] = "usedbhostname = {$data['useDatabaseHostnamesForComputerObjects']}";
if(count($updates)) {
$query = "UPDATE addomain SET "
. implode(', ', $updates)
@@ -346,14 +349,16 @@
. "username, "
. "password, "
. "secretid, "
- . "dnsServers) "
+ . "dnsServers, "
+ . "usedbhostname) "
. "VALUES ('{$data['name']}', "
. "$ownerid, "
. "'{$data['domaindnsname']}', "
. "'{$data['username']}', "
. "'$encpass', "
. "$secretid, "
- . "'{$data['dnsservers']}')";
+ . "'{$data['dnsservers']}', "
+ . "'{$data['useDatabaseHostnamesForComputerObjects']}')";
doQuery($query);
$rscid = dbLastInsertID();
@@ -423,14 +428,16 @@
$errmsg = i("Password must be at least 4 characters long");
$h .= labeledFormItem('password', i('Password'), 'password', '^.{4,256}$', 1, '', $errmsg, '', '', '200px');
# confirm password
- $h .= labeledFormItem('password2', i('Confirm Password'), 'password', '', 1, '', '', '', '', '200px');
+ $h .= labeledFormItem('password2', i('Confirm Password'), 'password', '', 1, '', '', '', '', '200px');
+ # use database hostname checkbox
+ $h .= labeledFormItem('usedbhostnames', i('Use Database Hostnames'), 'check', '', '', '', '', '', '', '', helpIcon('usedbhostnameshelp'));
$h .= "<br>\n";
# dns server list
$ipreg = '(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';
$reg = "^($ipreg,)*($ipreg)$";
$errmsg = i("Invalid IP address specified - must be a valid IPV4 address");
$h .= labeledFormItem('dnsservers', i('DNS Server(s)'), 'text', $reg, 0, '', $errmsg,
- '', '', '300px', helpIcon('dnsservershelp'));
+ '', '', '300px', helpIcon('dnsservershelp'));
$h .= "</div>\n"; # center
$h .= "</div>\n"; # addomaindlgcontent
@@ -473,6 +480,7 @@
$h .= helpTooltip('domaindnsnamehelp', i("domain name registered in DNS for Active Directory Domain (ex: ad.example.com)"));
$h .= helpTooltip('usernamehelp', i("These credentials will be used to register reserved computers with AD."));
$h .= helpTooltip('dnsservershelp', i("comma delimited list of IP addresses for DNS servers that handle Domain DNS"));
+ $h .= helpTooltip('usedbhostnameshelp', i("Check this option if you like to have the computer object names within AD to match VM hostname stored within the VCL database"));
$h .= "</div>\n"; # tooltips
return $h;
@@ -510,6 +518,7 @@
$return["password"] = $_POST['password'];
$return["password2"] = $_POST['password2'];
$return["dnsservers"] = processInputVar("dnsservers", ARG_STRING);
+ $return["useDatabaseHostnamesForComputerObjects"] = $_POST['useDatabaseHostnamesForComputerObjects'];
if(! preg_match("/^([A-Za-z0-9-!@#$%^&\*\(\)_=\+\[\]{}\\\|:;,\.\/\?~` ]){2,30}$/", $return['name'])) {
$return['error'] = 1;
diff --git a/web/.ht-inc/utils.php b/web/.ht-inc/utils.php
index c13be06..b10627a 100644
--- a/web/.ht-inc/utils.php
+++ b/web/.ht-inc/utils.php
@@ -9494,7 +9494,8 @@
/// \b domaindnsname\n
/// \b username\n
/// \b dnsservers\n
-/// \b secretid
+/// \b secretid\n
+/// \b useDatabaseHostnamesForComputerObjects\n
///
/// \brief builds an array of AD domains
///
@@ -9508,7 +9509,8 @@
. "ad.domainDNSName AS domaindnsname, "
. "ad.username, "
. "ad.dnsServers AS dnsservers, "
- . "ad.secretid "
+ . "ad.secretid, "
+ . "ad.usedbhostname AS useDatabaseHostnamesForComputerObjects "
. "FROM addomain ad, "
. "affiliation a, "
. "user u, "
diff --git a/web/js/resources/addomain.js b/web/js/resources/addomain.js
index 4579a24..158d97c 100644
--- a/web/js/resources/addomain.js
+++ b/web/js/resources/addomain.js
@@ -41,11 +41,12 @@
dojo.byId('editresid').value = data.items.rscid;
dijit.byId('name').set('value', data.items.data.name);
dijit.byId('owner').set('value', data.items.data.owner);
-
dijit.byId('domaindnsname').set('value', data.items.data.domaindnsname);
dijit.byId('username').set('value', data.items.data.username);
dijit.byId('dnsservers').set('value', data.items.data.dnsservers);
-
+ if (data.items.data.useDatabaseHostnamesForComputerObjects == 1) {
+ dijit.byId('usedbhostnames').set('checked', data.items.data.useDatabaseHostnamesForComputerObjects)
+ }
dijit.byId('password').set('value', '********');
dijit.byId('password2').set('value', 'xxxxxxxx');
@@ -58,7 +59,7 @@
}
function resetEditResource() {
- var fields = ['name', 'owner', 'domaindnsname', 'username', 'password', 'password2', 'dnsservers'];
+ var fields = ['name', 'owner', 'domaindnsname', 'username', 'password', 'password2', 'usedbhostnames', 'dnsservers'];
for(var i = 0; i < fields.length; i++) {
dijit.byId(fields[i]).reset();
}
@@ -89,7 +90,13 @@
dojo.byId('addeditdlgerrmsg').innerHTML = _('Passwords do not match');
return;
}
-
+ // update useDatabaseHostnamesForComputerObjects
+ if(dijit.byId('usedbhostnames').get('checked')) {
+ data['useDatabaseHostnamesForComputerObjects'] = 1;
+ }
+ else {
+ data['useDatabaseHostnamesForComputerObjects'] = 0;
+ }
dijit.byId('addeditbtn').set('disabled', true);
RPCwrapper(data, saveResourceCB, 1);
}