* @return string A PEM formatted SSL Certificate.
*/
function mnet_get_public_key($uri) {
- global $CFG;
+ global $CFG, $MNET;
// The key may be cached in the mnet_set_public_key function...
// check this first
$key = mnet_set_public_key($uri);
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');
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
return true;
}
- function bootstrap($wwwroot) {
+ function bootstrap($wwwroot, $pubkey = null) {
if (substr($wwwroot, 0, -1) == '/') {
$wwwroot = substr($wwwroot, 0, -1);
$this->wwwroot = $wwwroot;
$this->ip_address = $ip_address;
$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->last_connect_time = 0;
$this->last_log_id = 0;
}
}
+/**
+ * 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) {
global $CFG, $MNET;
$return = array();
if (!empty($CFG->mnet_register_allhosts)) {
$mnet_peer = new mnet_peer();
- $keyok = $mnet_peer->bootstrap($params[0]);
+ $keyok = $mnet_peer->bootstrap($params[0], $params[1]);
if ($keyok) {
$mnet_peer->commit();
}
}
return $MNET->public_key;
}
+
?>