mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
Mnet: Bugfix: Prevent infinite loop when 2 community hubs peer for the first time
This commit is contained in:
parent
e931feddaf
commit
85d2d959d5
3 changed files with 21 additions and 5 deletions
|
@ -46,7 +46,7 @@ function mnet_get_hostname_from_uri($uri = null) {
|
||||||
* @return string A PEM formatted SSL Certificate.
|
* @return string A PEM formatted SSL Certificate.
|
||||||
*/
|
*/
|
||||||
function mnet_get_public_key($uri) {
|
function mnet_get_public_key($uri) {
|
||||||
global $CFG;
|
global $CFG, $MNET;
|
||||||
// The key may be cached in the mnet_set_public_key function...
|
// The key may be cached in the mnet_set_public_key function...
|
||||||
// check this first
|
// check this first
|
||||||
$key = mnet_set_public_key($uri);
|
$key = mnet_set_public_key($uri);
|
||||||
|
@ -54,7 +54,7 @@ function mnet_get_public_key($uri) {
|
||||||
return $key;
|
return $key;
|
||||||
}
|
}
|
||||||
|
|
||||||
$rq = xmlrpc_encode_request('system/keyswap', $CFG->wwwroot);
|
$rq = xmlrpc_encode_request('system/keyswap', array($CFG->wwwroot, $MNET->public_key));
|
||||||
$ch = curl_init($uri.'/mnet/xmlrpc/server.php');
|
$ch = curl_init($uri.'/mnet/xmlrpc/server.php');
|
||||||
|
|
||||||
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
|
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
|
||||||
|
|
|
@ -25,7 +25,7 @@ class mnet_peer {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function bootstrap($wwwroot) {
|
function bootstrap($wwwroot, $pubkey = null) {
|
||||||
|
|
||||||
if (substr($wwwroot, 0, -1) == '/') {
|
if (substr($wwwroot, 0, -1) == '/') {
|
||||||
$wwwroot = substr($wwwroot, 0, -1);
|
$wwwroot = substr($wwwroot, 0, -1);
|
||||||
|
@ -59,7 +59,11 @@ class mnet_peer {
|
||||||
$this->wwwroot = $wwwroot;
|
$this->wwwroot = $wwwroot;
|
||||||
$this->ip_address = $ip_address;
|
$this->ip_address = $ip_address;
|
||||||
$this->deleted = 0;
|
$this->deleted = 0;
|
||||||
$this->public_key = clean_param(mnet_get_public_key($this->wwwroot), PARAM_PEM);
|
if(empty($pubkey)) {
|
||||||
|
$this->public_key = clean_param(mnet_get_public_key($this->wwwroot), PARAM_PEM);
|
||||||
|
} else {
|
||||||
|
$this->public_key = clean_param($pubkey, PARAM_PEM);
|
||||||
|
}
|
||||||
$this->public_key_expires = $this->check_common_name($this->public_key);
|
$this->public_key_expires = $this->check_common_name($this->public_key);
|
||||||
$this->last_connect_time = 0;
|
$this->last_connect_time = 0;
|
||||||
$this->last_log_id = 0;
|
$this->last_log_id = 0;
|
||||||
|
|
|
@ -670,17 +670,29 @@ function mnet_server_invoke_method($includefile, $methodname, $method, $payload,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accepts a public key from a new remote host and returns the public key for
|
||||||
|
* this host. If 'register all hosts' is turned on, it will bootstrap a record
|
||||||
|
* for the remote host in the mnet_host table (if it's not already there)
|
||||||
|
*
|
||||||
|
* @param string $function XML-RPC requires this but we don't... discard!
|
||||||
|
* @param array $params Array of parameters
|
||||||
|
* $params[0] is the remote wwwroot
|
||||||
|
* $params[1] is the remote public key
|
||||||
|
* @return string The XML-RPC response
|
||||||
|
*/
|
||||||
function mnet_keyswap($function, $params) {
|
function mnet_keyswap($function, $params) {
|
||||||
global $CFG, $MNET;
|
global $CFG, $MNET;
|
||||||
$return = array();
|
$return = array();
|
||||||
|
|
||||||
if (!empty($CFG->mnet_register_allhosts)) {
|
if (!empty($CFG->mnet_register_allhosts)) {
|
||||||
$mnet_peer = new mnet_peer();
|
$mnet_peer = new mnet_peer();
|
||||||
$keyok = $mnet_peer->bootstrap($params[0]);
|
$keyok = $mnet_peer->bootstrap($params[0], $params[1]);
|
||||||
if ($keyok) {
|
if ($keyok) {
|
||||||
$mnet_peer->commit();
|
$mnet_peer->commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $MNET->public_key;
|
return $MNET->public_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue