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);
 }