admin/mnet/peers: Allow admins to manually update a remote server's public
key Author: Donal McMullan <[email protected]>
This commit is contained in:
+28
-35
@@ -23,7 +23,7 @@ print_simple_box_start("center", "");
|
||||
<input type="hidden" name="step" value="commit" />
|
||||
<input type="hidden" name="last_connect_time" value="<?php echo $mnet_peer->last_connect_time; ?>" />
|
||||
<input type="hidden" name="id" value="<?php echo isset($mnet_peer->id)? $mnet_peer->id : '0' ; ?>" />
|
||||
<table cellpadding="9" cellspacing="0" >
|
||||
<table cellpadding="9" cellspacing="0" width="635">
|
||||
|
||||
<tr>
|
||||
<td align="right" valign="top" nowrap><?php print_string('site'); ?>:</td>
|
||||
@@ -43,34 +43,37 @@ if (empty($mnet_peer->public_key)) $mnet_peer->public_key = '';
|
||||
helpbutton("publickey", get_string('publickey', 'mnet'), "mnet", true, true);
|
||||
?></td>
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
if (isset($mnet_peer->deleted) && $mnet_peer->deleted > 0) {
|
||||
$key = mnet_get_public_key($mnet_peer->wwwroot);
|
||||
$mnet_peer->public_key = clean_param($key, PARAM_PEM);
|
||||
?>
|
||||
<td valign="top">
|
||||
<?php
|
||||
if (empty($mnet_peer->public_key)) {
|
||||
notice(get_string('invalidpubkey', 'mnet'));
|
||||
}
|
||||
?>
|
||||
<textarea rows="17" cols="65" name="public_key" style="font-size: 8px;"><?php echo $mnet_peer->public_key; ?></textarea></td>
|
||||
</tr>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<td valign="top">
|
||||
<?php
|
||||
if (empty($mnet_peer->public_key)) {
|
||||
p(get_string('invalidpubkey', 'mnet'));
|
||||
}
|
||||
?>
|
||||
<pre style="font-size: 8px;">
|
||||
<?php echo $mnet_peer->public_key; ?>
|
||||
</pre></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<td valign="top">
|
||||
<?php
|
||||
if (empty($mnet_peer->public_key)) {
|
||||
print_string('nopubkey', 'mnet');
|
||||
}
|
||||
?><br>
|
||||
<textarea rows="17" cols="65" name="public_key" style="font-size: 8px;"><?php echo $mnet_peer->public_key; ?></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
|
||||
if(!empty($currentkey)):
|
||||
?>
|
||||
<tr>
|
||||
<td align="right" valign="top" nowrap></td>
|
||||
<td valign="top"><?php print_string('keymismatch', 'mnet'); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right" valign="top" nowrap><?php print_string('currentkey', 'mnet'); ?>:</td>
|
||||
<td valign="top"><pre style="font-size: 8px;"><?php echo $currentkey;?></pre></td>
|
||||
</tr>
|
||||
<?php
|
||||
endif;
|
||||
|
||||
if (isset($mnet_peer->id) && $mnet_peer->id > 0):
|
||||
?>
|
||||
@@ -79,13 +82,6 @@ if (isset($mnet_peer->id) && $mnet_peer->id > 0):
|
||||
<td valign="top"><?php echo ($mnet_peer->last_connect_time == 0)? get_string('never','mnet') : date('H:i:s d/m/Y',$mnet_peer->last_connect_time);?></td>
|
||||
</tr>
|
||||
<?php
|
||||
if (isset($mnet_peer->transport) && $mnet_peer->transport > 0):
|
||||
?>
|
||||
<tr>
|
||||
<td align="right" valign="top" nowrap><?php print_string('current_transport', 'mnet'); ?>:</td>
|
||||
<td valign="top"><?php echo mnet_get_transport_name($mnet_peer->transport);?></td>
|
||||
</tr>
|
||||
<?php
|
||||
endif;
|
||||
|
||||
if (isset($mnet_peer->deleted) && $mnet_peer->deleted > 0):
|
||||
@@ -100,8 +96,6 @@ if (isset($mnet_peer->deleted) && $mnet_peer->deleted > 0):
|
||||
<?php
|
||||
endif;
|
||||
|
||||
endif;
|
||||
|
||||
if (isset($mnet_peer->ip_address) && '' != $mnet_peer->ip_address):
|
||||
?>
|
||||
<tr>
|
||||
@@ -119,9 +113,8 @@ endif;
|
||||
<td></td>
|
||||
<td><input type="submit" value="<?php print_string("savechanges"); ?>" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
|
||||
echo ' </table>';
|
||||
print_simple_box_end();
|
||||
admin_externalpage_print_footer($adminroot);
|
||||
?>
|
||||
|
||||
+13
-7
@@ -56,10 +56,11 @@ if (($form = data_submitted()) && confirm_sesskey()) {
|
||||
$mnet_peer->set_id($form->id);
|
||||
} else {
|
||||
// PARAM_URL requires a genuine TLD (I think) This breaks my testing
|
||||
$temp_wwwroot = $form->wwwroot; //clean_param($form->wwwroot, PARAM_URL);
|
||||
$temp_wwwroot = clean_param($form->wwwroot, PARAM_URL);
|
||||
if ($temp_wwwroot !== $form->wwwroot) {
|
||||
trigger_error("We now parse the wwwroot with PARAM_URL");
|
||||
error('Invalid URL parameter.', 'peers.php');
|
||||
trigger_error("We now parse the wwwroot with PARAM_URL. Your URL will need to have a valid TLD, etc.");
|
||||
error(get_string("invalidurl", 'mnet'),'peers.php');
|
||||
exit;
|
||||
}
|
||||
unset($temp_wwwroot);
|
||||
$mnet_peer->bootstrap($form->wwwroot);
|
||||
@@ -77,24 +78,27 @@ if (($form = data_submitted()) && confirm_sesskey()) {
|
||||
if (isset($form->public_key)) {
|
||||
$form->public_key = clean_param($form->public_key, PARAM_PEM);
|
||||
if (empty($form->public_key)) {
|
||||
// Public key was not in a correct format
|
||||
error(get_string("invalidpubkey", 'mnet'),'peers.php?step=update&hostid='.$mnet_peer->id);
|
||||
exit;
|
||||
} else {
|
||||
$oldkey = $mnet_peer->public_key;
|
||||
$mnet_peer->public_key = $form->public_key;
|
||||
$mnet_peer->public_key_expires = $mnet_peer->check_common_name($form->public_key);
|
||||
if ($mnet_peer->public_key_expires == false) {
|
||||
$mnet_peer->public_key == $oldkey;
|
||||
error(get_string("invalidpubkey", 'mnet'),'peers.php?step=update&hostid='.$mnet_peer->id);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// PREVENT DUPLICATE RECORDS ///////////////////////////////////////////
|
||||
if ('input' == $form->step) {
|
||||
if ( isset($mnet_peer->id) && $mnet_peer->id > 0 ) {
|
||||
error(get_string("hostexists ".$mnet_peer->id, 'mnet', $mnet_peer->id),'peers.php?step=update&hostid='.$mnet_peer->id);
|
||||
error(get_string("hostexists", 'mnet', $mnet_peer->id),'peers.php?step=update&hostid='.$mnet_peer->id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ('input' == $form->step) {
|
||||
include('./mnet_review.html');
|
||||
} elseif ('commit' == $form->step) {
|
||||
@@ -109,6 +113,8 @@ if (($form = data_submitted()) && confirm_sesskey()) {
|
||||
} elseif (is_int($hostid)) {
|
||||
$mnet_peer = new mnet_peer();
|
||||
$mnet_peer->set_id($hostid);
|
||||
$currentkey = mnet_get_public_key($mnet_peer->wwwroot);
|
||||
if($currentkey == $mnet_peer->public_key) unset($currentkey);
|
||||
$form = new stdClass();
|
||||
if ($hostid != $CFG->mnet_all_hosts_id) {
|
||||
include('./mnet_review.html');
|
||||
|
||||
+13
-9
@@ -120,19 +120,23 @@ class mnet_environment {
|
||||
set_config('openssl_history', serialize($openssl_history), 'mnet');
|
||||
|
||||
// 3. Generate fresh keys
|
||||
$this->keypair = array();
|
||||
$this->keypair = mnet_generate_keypair();
|
||||
$this->public_key = $this->keypair['certificate'];
|
||||
$details = openssl_x509_parse($this->public_key);
|
||||
$this->public_key_expires = $details['validTo_time_t'];
|
||||
|
||||
set_config('openssl', implode('@@@@@@@@', $this->keypair), 'mnet');
|
||||
|
||||
update_record('mnet_host', $this);
|
||||
$this->replace_keys();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function replace_keys() {
|
||||
$this->keypair = array();
|
||||
$this->keypair = mnet_generate_keypair();
|
||||
$this->public_key = $this->keypair['certificate'];
|
||||
$details = openssl_x509_parse($this->public_key);
|
||||
$this->public_key_expires = $details['validTo_time_t'];
|
||||
|
||||
set_config('openssl', implode('@@@@@@@@', $this->keypair), 'mnet');
|
||||
|
||||
update_record('mnet_host', $this);
|
||||
}
|
||||
|
||||
function get_private_key() {
|
||||
if (empty($this->keypair)) $this->get_keypair();
|
||||
if (isset($this->keypair['privatekey'])) return $this->keypair['privatekey'];
|
||||
|
||||
Reference in New Issue
Block a user