VCL-1080 - Wrong port can be delivered in RDP file
requests.php: modified AJconnectRequest: added cmid to data saved in
continuation for sendRDPfile
utils.php: modified sendRDPfile: get $cmid from continuation; no longer
loop through connect methods to guess which connect method to use; just
use the one referenced by $cmid and get port information from it
diff --git a/web/.ht-inc/requests.php b/web/.ht-inc/requests.php
index 9d8d8ce..a497ba4 100644
--- a/web/.ht-inc/requests.php
+++ b/web/.ht-inc/requests.php
@@ -4421,7 +4421,8 @@
#$h .= "<div id=\"connectdiv\">\n";
$h .= "<FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n";
$cdata = array('requestid' => $requestid,
- 'resid' => $res['reservationid']);
+ 'resid' => $res['reservationid'],
+ 'cmid' => $cmid);
$expire = datetimeToUnix($requestData['end']) - $now + 1800; # remaining reservation time plus 30 min
$cont = addContinuationsEntry('sendRDPfile', $cdata, $expire);
$h .= "<INPUT type=hidden name=continuation value=\"$cont\">\n";
diff --git a/web/.ht-inc/utils.php b/web/.ht-inc/utils.php
index feaabef..f7ca371 100644
--- a/web/.ht-inc/utils.php
+++ b/web/.ht-inc/utils.php
@@ -10468,13 +10468,16 @@
////////////////////////////////////////////////////////////////////////////////
function sendRDPfile() {
global $user;
- # for more info on this file, see
+ # for more info on this file, see
# http://dev.remotenetworktechnology.com/ts/rdpfile.htm
$requestid = getContinuationVar("requestid");
$resid = getContinuationVar("resid");
+
+ $cmid = getContinuationVar('cmid');
+
$request = getRequestInfo("$requestid");
if($request['stateid'] == 11 || $request['stateid'] == 12 ||
- ($request['stateid'] == 14 &&
+ ($request['stateid'] == 14 &&
($request['laststateid'] == 11 || $request['laststateid'] == 12))) {
$cont = addContinuationsEntry('viewRequests');
header("Location: " . BASEURL . SCRIPT . "?continuation=$cont");
@@ -10494,20 +10497,19 @@
$res['imagerevisionid']);
$natports = getNATports($resid);
$port = '';
- foreach($connectData as $cmid => $method) {
- if(preg_match('/remote desktop/i', $method['description']) ||
- preg_match('/RDP/i', $method['description'])) {
- # assume index 0 of ports for nat
- if(! empty($natports) && array_key_exists($method['ports'][0]['key'], $natports[$cmid]))
- $port = ':' . $natports[$cmid][$method['ports'][0]['key']]['publicport'];
- else {
- if($method['ports'][0]['key'] == '#Port-TCP-3389#' &&
- $user['rdpport'] != 3389)
- $port = ':' . $user['rdpport'];
- else
- $port = ':' . $method['ports'][0]['port'];
- }
- break;
+
+ $method = $connectData[$cmid];
+ if(preg_match('/remote desktop/i', $method['description']) ||
+ preg_match('/RDP/i', $method['description'])) {
+ # assume index 0 of ports for nat
+ if(! empty($natports) && array_key_exists($method['ports'][0]['key'], $natports[$cmid]))
+ $port = ':' . $natports[$cmid][$method['ports'][0]['key']]['publicport'];
+ else {
+ if($method['ports'][0]['key'] == '#Port-TCP-3389#' &&
+ $user['rdpport'] != 3389)
+ $port = ':' . $user['rdpport'];
+ else
+ $port = ':' . $method['ports'][0]['port'];
}
}