You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2016/10/21 15:12:06 UTC
svn commit: r1766041 - in /vcl/trunk/web: .ht-inc/addomain.php
.ht-inc/privileges.php .ht-inc/utils.php js/resources/addomain.js
Author: jfthomps
Date: Fri Oct 21 15:12:06 2016
New Revision: 1766041
URL: http://svn.apache.org/viewvc?rev=1766041&view=rev
Log:
VCL-277 - Add support for images to join Active Directory domains
VCL-867 - Active Directory Authentication for Windows VM's
addomain.php:
-modified AJsaveResource, AJeditResource, and validateResourceData: commented out code for logindescription
-modified addResource: commented out code for logindescription; modified INSERT query for resource table to have a subselect to get resourcetype.id based on the type name addomain instead of having 19 hard coded
-modified addEditDialogHTML: added helpIcons for several input fields and corresponding tooltips - still need to fill in the content of the tooltips
-removed 2nd definition of checkResourceInUse (I think I had copied it from the image code to modify but then wrote it separately)
privileges.php:
-modified getResourcePrivRowHTML: added addomain exception to not print checkboxes for available and manageMapping
-modified jsonGetResourceGroupMembers: modified if/elseif conditionals that set $field to have an else to handle setting $field to 'name' and removed specific elseif's that set it to 'name'
utils.php:
-modified getResourceGroupMembers: changed hard coded resource type ids to be subselects to get the id based on the resource type name
-modified isAvailable and debugIsAvailable: found 2 locations calling debugIsAvailable with $loc being the same number (19), changed the 2nd one to be 22
-modified getADdomains: commented out code for logindescription
addomain.js:
-modified addNewResource: set password and password2 to be required
-modified inlineEditResourceCB: set password and password2 to not be required; commented out code for logindescription
-modified resetEditResource, saveResource, and saveResourceCB: commented out code for logindescription
Modified:
vcl/trunk/web/.ht-inc/addomain.php
vcl/trunk/web/.ht-inc/privileges.php
vcl/trunk/web/.ht-inc/utils.php
vcl/trunk/web/js/resources/addomain.js
Modified: vcl/trunk/web/.ht-inc/addomain.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/addomain.php?rev=1766041&r1=1766040&r2=1766041&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/addomain.php (original)
+++ vcl/trunk/web/.ht-inc/addomain.php Fri Oct 21 15:12:06 2016
@@ -202,10 +202,10 @@ class ADdomain extends Resource {
if($data['domaincontrollers'] != $olddata['domaincontrollers'])
$updates[] = "domainControllers = '{$data['domaincontrollers']}'";
# logindescription
- if($data['logindescription'] != $olddata['logindescription']) {
+ /*if($data['logindescription'] != $olddata['logindescription']) {
$esc_desc = mysql_real_escape_string($data['logindescription']);
$updates[] = "logindescription = '$esc_desc'";
- }
+ }*/
if(count($updates)) {
$query = "UPDATE addomain SET "
. implode(', ', $updates)
@@ -261,8 +261,8 @@ class ADdomain extends Resource {
$args['rscid'] = $rscid;
$tmp = $this->getData($args);
$data = $tmp[$rscid];
- $login = preg_replace("/<br>/", "\n", $data['logindescription']);
- $data['logindescription'] = htmlspecialchars_decode($login);
+ /*$login = preg_replace("/<br>/", "\n", $data['logindescription']);
+ $data['logindescription'] = htmlspecialchars_decode($login);*/
$cdata = $this->basecdata;
$cdata['rscid'] = $rscid;
$cdata['olddata'] = $data;
@@ -298,27 +298,27 @@ class ADdomain extends Resource {
$ownerid = getUserlistID($data['owner']);
$esc_pass = mysql_real_escape_string($data['password']);
- $esc_desc = mysql_real_escape_string($data['logindescription']);
+ #$esc_desc = mysql_real_escape_string($data['logindescription']);
$query = "INSERT INTO addomain"
- . "(name,"
- . "ownerid,"
- . "domainDNSName,"
- . "domainNetBIOSName,"
- . "username,"
- . "password,"
- . "dnsServers,"
- . "domainControllers,"
- . "logindescription)"
- . "VALUES ('{$data['name']}',"
- . "$ownerid,"
- . "'{$data['domaindnsname']}',"
- . "'{$data['domainnetbiosname']}',"
- . "'{$data['username']}',"
- . "'$esc_pass',"
- . "'{$data['dnsservers']}',"
- . "'{$data['domaincontrollers']}',"
- . "'$esc_desc')";
+ . "(name, "
+ . "ownerid, "
+ . "domainDNSName, "
+ . "domainNetBIOSName, "
+ . "username, "
+ . "password, "
+ . "dnsServers, "
+ #. "logindescription, "
+ . "domainControllers) "
+ . "VALUES ('{$data['name']}', "
+ . "$ownerid, "
+ . "'{$data['domaindnsname']}', "
+ . "'{$data['domainnetbiosname']}', "
+ . "'{$data['username']}', "
+ . "'$esc_pass', "
+ . "'{$data['dnsservers']}', "
+ #. "'$esc_desc', "
+ . "'{$data['domaincontrollers']}')";
doQuery($query);
$rscid = dbLastInsertID();
@@ -329,7 +329,7 @@ class ADdomain extends Resource {
$query = "INSERT INTO resource "
. "(resourcetypeid, "
. "subid) "
- . "VALUES (19, "
+ . "VALUES ((SELECT id FROM resourcetype WHERE name = 'addomain'), "
. "$rscid)";
doQuery($query);
return $rscid;
@@ -359,8 +359,6 @@ class ADdomain extends Resource {
# id
$h .= "<input type=\"hidden\" id=\"editresid\">\n";
- # todo consider adding help icons with popups
-
$h .= "<div style=\"text-align: center;\">\n";
# name
$errmsg = i("Name cannot contain single (') or double (") quotes, less than (<), or greater than (>) and can be from 2 to 30 characters long");
@@ -377,18 +375,17 @@ class ADdomain extends Resource {
$hostbase = '([A-Za-z0-9]{1,63})(\.[A-Za-z0-9-_]+)*(\.?[A-Za-z0-9])';
$errmsg = i("Domain DNS Name should be in the format domain.tld and can only contain letters, numbers, dashes(-), periods(.), and underscores(_) (e.g. myuniversity.edu)");
$h .= labeledFormItem('domaindnsname', i('Domain DNS Name'), 'text', "^$hostbase$",
- 1, '', $errmsg, '', '', '200px');
+ 1, '', $errmsg, '', '', '200px', helpIcon('domaindnsnamehelp'));
# domain netbios name
$errmsg = i("Domain NetBIOS Name can only contain letters, numbers, dashes(-), periods(.), and underscores(_) and can be up to 15 characters long");
$h .= labeledFormItem('domainnetbiosname', i('Domain NetBIOS Name'), 'text', '^[a-zA-Z0-9_][-a-zA-Z0-9_\.]{0,14}$',
- 1, '', $errmsg, '', '', '200px');
+ 1, '', $errmsg, '', '', '200px', helpIcon('domainnetbiosnamehelp'));
$h .= "<br>\n";
# username
$errmsg = i("Username cannot contain single (') or double (") quotes, less than (<), or greater than (>) and can be from 2 to 64 characters long");
- $h .= labeledFormItem('username', i('Username'), 'text', '^([A-Za-z0-9-!@#$%^&\*\(\)_=\+\[\]{}\\\|:;,\./\?~` ]){2,30}$',
- 1, '', $errmsg, '', '', '200px');
+ $h .= labeledFormItem('username', i('Username'), 'text', '^([A-Za-z0-9-!@#$%^&\*\(\)_=\+\[\]{}\\\|:;,\./\?~` ]){2,64}$',
+ 1, '', $errmsg, '', '', '200px', helpIcon('usernamehelp'));
# password
- # todo make required for adding
$errmsg = i("Password must be at least 4 characters long");
$h .= labeledFormItem('password', i('Password'), 'password', '^.{4,256}$', 0, '', $errmsg, '', '', '200px');
# confirm password
@@ -399,15 +396,15 @@ class ADdomain extends Resource {
$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');
+ '', '', '300px', helpIcon('dnsservershelp'));
# domain controllers list
$reg = "$hostbase(,$hostbase){0,4}";
$errmsg = i("Invalid Domain Controller specified. Must be comma delimited list of hostnames or IP addresses, with up to 5 allowed");
$h .= labeledFormItem('domaincontrollers', i('Domain Controller(s)'), 'text', $reg, 0, '', $errmsg,
- '', '', '300px');
+ '', '', '300px', helpIcon('domaincontrollershelp'));
# login description
- $h .= labeledFormItem('logindescription', i('Login Description'), 'textarea', '',
- 1, '', '', '', '', '300px');
+ /*$h .= labeledFormItem('logindescription', i('Login Description'), 'textarea', '',
+ 1, '', '', '', '', '300px', helpIcon('logindescriptionhelp'));*/
$h .= "</div>\n"; # center
$h .= "</div>\n"; # addomaindlgcontent
@@ -446,6 +443,16 @@ class ADdomain extends Resource {
$h .= "</div>\n"; # btn div
$h .= "</div>\n"; # groupdlg
+ $h .= "<div id=\"tooltips\">\n";
+ # todo fill in all help contents
+ $h .= helpTooltip('domaindnsnamehelp', i(""));
+ $h .= helpTooltip('domainnetbiosnamehelp', i(""));
+ $h .= helpTooltip('usernamehelp', i("These credentials will be used to register reserved computers with AD."));
+ $h .= helpTooltip('dnsservershelp', i(""));
+ $h .= helpTooltip('domaincontrollershelp', i(""));
+ #$h .= helpTooltip('logindescriptionhelp', i(""));
+ $h .= "</div>\n"; # tooltips
+
return $h;
}
@@ -482,12 +489,12 @@ class ADdomain extends Resource {
$return["password2"] = processInputVar("password2", ARG_STRING);
$return["dnsservers"] = processInputVar("dnsservers", ARG_STRING);
$return["domaincontrollers"] = processInputVar("domaincontrollers", ARG_STRING);
- $return["logindescription"] = processInputVar("logindescription", ARG_STRING);
+ /*$return["logindescription"] = processInputVar("logindescription", ARG_STRING);
$return['logindescription'] = preg_replace("/[\n\s]*$/", '', $return['logindescription']);
$return['logindescription'] = preg_replace("/\r/", '', $return['logindescription']);
$return['logindescription'] = htmlspecialchars($return['logindescription']);
- $return['logindescription'] = preg_replace("/\n/", '<br>', $return['logindescription']);
+ $return['logindescription'] = preg_replace("/\n/", '<br>', $return['logindescription']);*/
if(! preg_match("/^([A-Za-z0-9-!@#$%^&\*\(\)_=\+\[\]{}\\\|:;,\.\/\?~` ]){2,30}$/", $return['name'])) {
$return['error'] = 1;
@@ -511,7 +518,7 @@ class ADdomain extends Resource {
$errormsg[] = i("Domain NetBIOS Name can only contain letters, numbers, dashes(-), periods(.), and underscores(_) and can be up to 15 characters long");
}
- if(! preg_match('/^([A-Za-z0-9-!@#$%^&\*\(\)_=\+\[\]{}\\\|:;,\.\/\?~` ]){2,30}$/', $return['username'])) {
+ if(! preg_match('/^([A-Za-z0-9-!@#$%^&\*\(\)_=\+\[\]{}\\\|:;,\.\/\?~` ]){2,64}$/', $return['username'])) {
$return['error'] = 1;
$errormsg[] = i("Username cannot contain single (') or double (") quotes, less than (<), or greater than (>) and can be from 2 to 64 characters long");
}
@@ -590,64 +597,6 @@ class ADdomain extends Resource {
return $msg;
}
-
- /////////////////////////////////////////////////////////////////////////////
- ///
- /// \fn checkResourceInUse($rscid)
- ///
- /// \param $rscid - id of resource
- ///
- /// \return empty string if not being used; string of where resource is
- /// being used if being used
- ///
- /// \brief checks to see if resource is being used
- ///
- /////////////////////////////////////////////////////////////////////////////
- function checkResourceInUse($rscid) {
- $msgs = array();
-
- /*
- # check reservations
- $query = "SELECT rq.end "
- . "FROM request rq, "
- . "reservation rs "
- . "WHERE rs.requestid = rq.id AND "
- . "rs.imageid = $rscid AND "
- . "rq.stateid NOT IN (1, 12) AND "
- . "rq.end > NOW() "
- . "ORDER BY rq.end DESC "
- . "LIMIT 1";
- $qh = doQuery($query);
- if($row = mysql_fetch_assoc($qh))
- $msgs[] = sprintf(i("There is at least one <strong>reservation</strong> for this image. The latest end time is %s."), prettyDatetime($row['end'], 1));;
-
- # check blockComputers
- $query = "SELECT br.name, "
- . "bt.end "
- . "FROM blockRequest br, "
- . "blockTimes bt, "
- . "blockComputers bc "
- . "WHERE bc.imageid = $rscid AND "
- . "bc.blockTimeid = bt.id AND "
- . "bt.blockRequestid = br.id AND "
- . "bt.end > NOW() AND "
- . "bt.skip = 0 AND "
- . "br.status = 'accepted' "
- . "ORDER BY bt.end DESC "
- . "LIMIT 1";
- $qh = doQuery($query);
- if($row = mysql_fetch_assoc($qh))
- $msgs[] = sprintf(i("There is at least one <strong>Block Allocation</strong> with computers currently allocated with this image. Block Allocation %s has the latest end time which is %s."), $row['name'], prettyDatetime($row['end'], 1));
-
- if(empty($msgs))
- return '';
-
- $msg = i("The selected AD Domain is currently being used in the following ways and cannot be deleted at this time.") . "<br><br>\n";
- $msg .= implode("<br><br>\n", $msgs) . "<br><br>\n";
- return $msg;
- */
- return '';
- }
}
?>
Modified: vcl/trunk/web/.ht-inc/privileges.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/privileges.php?rev=1766041&r1=1766040&r2=1766041&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/privileges.php (original)
+++ vcl/trunk/web/.ht-inc/privileges.php Fri Oct 21 15:12:06 2016
@@ -2285,9 +2285,11 @@ function getResourcePrivRowHTML($privnam
$text .= "<TD><img src=images/blank.gif></TD>\n";
}
// if group type is schedule, don't print available or manageMapping checkboxes
+ // if group type is addomain, don't print available or manageMapping checkboxes
// if group type is managementnode, don't print available checkbox
// if group type is serverprofile, don't print manageMapping checkbox
elseif(($grptype == 'schedule' && ($type == 'available' || $type == 'manageMapping')) ||
+ ($grptype == 'addomain' && ($type == 'available' || $type == 'manageMapping')) ||
($grptype == 'managementnode' && $type == 'available') ||
($grptype == 'serverprofile' && $type == 'manageMapping')) {
$text .= "<TD><img src=images/blank.gif></TD>\n";
@@ -2335,9 +2337,7 @@ function jsonGetResourceGroupMembers() {
$field = 'hostname';
elseif($type == 'image')
$field = 'prettyname';
- elseif($type == 'schedule')
- $field = 'name';
- elseif($type == 'serverprofile')
+ else
$field = 'name';
$query = "SELECT t.$field AS item "
. "FROM $type t, "
Modified: vcl/trunk/web/.ht-inc/utils.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/utils.php?rev=1766041&r1=1766040&r2=1766041&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/utils.php (original)
+++ vcl/trunk/web/.ht-inc/utils.php Fri Oct 21 15:12:06 2016
@@ -2985,31 +2985,31 @@ function getResourceGroupMembers($type="
if($type == "computer") {
$names = "c.hostname AS computer, c.deleted ";
- $joins = "LEFT JOIN computer c ON (r.subid = c.id AND r.resourcetypeid = 12) ";
+ $joins = "LEFT JOIN computer c ON (r.subid = c.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'computer')) ";
$orders = "c.hostname";
$types = "'computer'";
}
elseif($type == "image") {
$names = "i.prettyname AS image, i.deleted ";
- $joins = "LEFT JOIN image i ON (r.subid = i.id AND r.resourcetypeid = 13) ";
+ $joins = "LEFT JOIN image i ON (r.subid = i.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'image')) ";
$orders = "i.prettyname";
$types = "'image'";
}
elseif($type == "schedule") {
$names = "s.name AS schedule ";
- $joins = "LEFT JOIN schedule s ON (r.subid = s.id AND r.resourcetypeid = 15) ";
+ $joins = "LEFT JOIN schedule s ON (r.subid = s.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'schedule')) ";
$orders = "s.name";
$types = "'schedule'";
}
elseif($type == "managementnode") {
$names = "m.hostname AS managementnode ";
- $joins = "LEFT JOIN managementnode m ON (r.subid = m.id AND r.resourcetypeid = 16) ";
+ $joins = "LEFT JOIN managementnode m ON (r.subid = m.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'managementnode')) ";
$orders = "m.hostname";
$types = "'managementnode'";
}
elseif($type == "addomain") {
$names = "ad.name AS addomain ";
- $joins = "LEFT JOIN addomain ad ON (r.subid = ad.id AND r.resourcetypeid = 19) ";
+ $joins = "LEFT JOIN addomain ad ON (r.subid = ad.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'addomain')) ";
$orders = "ad.name";
$types = "'addomain'";
}
@@ -3021,11 +3021,11 @@ function getResourceGroupMembers($type="
. "s.name AS schedule, "
. "m.hostname AS managementnode, "
. "ad.name AS addomain ";
- $joins = "LEFT JOIN computer c ON (r.subid = c.id AND r.resourcetypeid = 12) "
- . "LEFT JOIN image i ON (r.subid = i.id AND r.resourcetypeid = 13) "
- . "LEFT JOIN schedule s ON (r.subid = s.id AND r.resourcetypeid = 15) "
- . "LEFT JOIN managementnode m ON (r.subid = m.id AND r.resourcetypeid = 16) "
- . "LEFT JOIN addomain ad ON (r.subid = ad.id AND r.resourcetypeid = 19) ";
+ $joins = "LEFT JOIN computer c ON (r.subid = c.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'computer')) "
+ . "LEFT JOIN image i ON (r.subid = i.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'image')) "
+ . "LEFT JOIN schedule s ON (r.subid = s.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'schedule')) "
+ . "LEFT JOIN managementnode m ON (r.subid = m.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'managementnode')) "
+ . "LEFT JOIN addomain ad ON (r.subid = ad.id AND r.resourcetypeid = (SELECT id FROM resourcetype WHERE name = 'addomain')) ";
$orders = "c.hostname, "
. "i.prettyname, "
. "s.name, "
@@ -4475,7 +4475,7 @@ function isAvailable($images, $imageid,
$cnt = mysql_num_rows($qh);
if($cnt > 1) {
if($now)
- return debugIsAvailable(-4, 19, $start, $end, $imagerevisionid, $computerids, $currentids, $blockids, array(), $virtual);
+ return debugIsAvailable(-4, 22, $start, $end, $imagerevisionid, $computerids, $currentids, $blockids, array(), $virtual);
$requestInfo['ipwarning'] = 1;
}
elseif($cnt == 1) {
@@ -4625,7 +4625,7 @@ function debugIsAvailable($rc, $loc, $st
case "18":
$msg = "requested IP address in use by another computer";
break;
- case "19":
+ case "22":
$msg = "at least 2 computers have the requested IP address assigned to them";
break;
case "11":
@@ -8861,8 +8861,8 @@ function getADdomains($addomainid=0) {
. "ad.domainNetBIOSName AS domainnetbiosname, "
. "ad.username, "
. "ad.dnsServers AS dnsservers, "
- . "ad.domainControllers AS domaincontrollers, "
- . "ad.logindescription "
+ #. "ad.logindescription, "
+ . "ad.domainControllers AS domaincontrollers "
. "FROM addomain ad, "
. "affiliation a, "
. "user u, "
Modified: vcl/trunk/web/js/resources/addomain.js
URL: http://svn.apache.org/viewvc/vcl/trunk/web/js/resources/addomain.js?rev=1766041&r1=1766040&r2=1766041&view=diff
==============================================================================
--- vcl/trunk/web/js/resources/addomain.js (original)
+++ vcl/trunk/web/js/resources/addomain.js Fri Oct 21 15:12:06 2016
@@ -37,6 +37,8 @@ function addNewResource(title) {
dijit.byId('addeditbtn').set('label', title);
dojo.byId('editresid').value = 0;
resetEditResource();
+ dijit.byId('password').set('required', true);
+ dijit.byId('password2').set('required', true);
dijit.byId('addeditdlg').show();
}
@@ -54,7 +56,10 @@ function inlineEditResourceCB(data, ioAr
dijit.byId('username').set('value', data.items.data.username);
dijit.byId('dnsservers').set('value', data.items.data.dnsservers);
dijit.byId('domaincontrollers').set('value', data.items.data.domaincontrollers);
- dijit.byId('logindescription').set('value', data.items.data.logindescription);
+ //dijit.byId('logindescription').set('value', data.items.data.logindescription);
+
+ dijit.byId('password').set('required', false);
+ dijit.byId('password2').set('required', false);
dojo.byId('addeditdlgerrmsg').innerHTML = '';
dijit.byId('addeditdlg').show();
@@ -65,7 +70,7 @@ function inlineEditResourceCB(data, ioAr
}
function resetEditResource() {
- var fields = ['name', 'owner', 'domaindnsname', 'domainnetbiosname', 'username', 'password', 'password2', 'dnsservers', 'domaincontrollers', 'logindescription'];
+ var fields = ['name', 'owner', 'domaindnsname', 'domainnetbiosname', 'username', 'password', 'password2', 'dnsservers', 'domaincontrollers'/*, 'logindescription'*/];
for(var i = 0; i < fields.length; i++) {
dijit.byId(fields[i]).reset();
}
@@ -74,7 +79,7 @@ function resetEditResource() {
function saveResource() {
var errobj = dojo.byId('addeditdlgerrmsg');
- var fields = ['name', 'owner', 'domaindnsname', 'domainnetbiosname', 'username', 'password', 'password2', 'dnsservers', 'domaincontrollers', 'logindescription'];
+ var fields = ['name', 'owner', 'domaindnsname', 'domainnetbiosname', 'username', 'password', 'password2', 'dnsservers', 'domaincontrollers'/*, 'logindescription'*/];
if(dojo.byId('editresid').value == 0)
var data = {continuation: dojo.byId('addresourcecont').value};
@@ -126,7 +131,7 @@ function saveResourceCB(data, ioArgs) {
resourcegrid.store.fetch({
query: {id: data.items.data.id},
onItem: function(item) {
- var fields = ['name', 'owner', 'domaindnsname', 'domainnetbiosname', 'username','dnsservers', 'domaincontrollers', 'logindescription'];
+ var fields = ['name', 'owner', 'domaindnsname', 'domainnetbiosname', 'username','dnsservers', 'domaincontrollers'/*, 'logindescription'*/];
for(var i = 0; i < fields.length; i++) {
dijit.byId(fields[i]).reset();
resourcegrid.store.setValue(item, fields[i], data.items.data[fields[i]]);