Commit 5e94f62e authored by Ad Schellevis's avatar Ad Schellevis

replace xmlrpc server and include example stub, legacy methods not implemented...

replace xmlrpc server and include example stub, legacy methods not implemented yet. client also needs some work
parent f9b24c4a
<?php <?php
/* /**
$Id$ * Copyright (C) 2015 Deciso B.V.
*
xmlrpc.inc * All rights reserved.
Copyright (C) 2005-2006 Colin Smith *
All rights reserved. * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
Redistribution and use in source and binary forms, with or without *
modification, are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
1. Redistributions of source code must retain the above copyright notice, *
this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
2. Redistributions in binary form must reproduce the above copyright * documentation and/or other materials provided with the distribution.
notice, this list of conditions and the following disclaimer in the *
documentation and/or other materials provided with the distribution. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * POSSIBILITY OF SUCH DAMAGE.
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
POSSIBILITY OF SUCH DAMAGE. */
*/ require_once("IXR_Library.php") ;
/* class XMLRPCServer
pfSense_BUILDER_BINARIES: {
pfSense_MODULE: utils private $prefix = "opnsense" ;
*/
require_once("auth.inc"); private $xmlrpc_callbacks = array() ;
require_once("xmlrpc_client.inc");
/* /**
* xmlrpc_params_to_php: Convert params array passed from XMLRPC server into a PHP array and return it. * load publishable function from inc/xmlrpc/*.inc
* every usable module should include a function to return it's own registrable functions, using
* the following patten:
* xmlrpc_publishable_{filename without .inc}
*/ */
function xmlrpc_params_to_php($params) { private function loadPlugins()
$array = array(); {
for($i = 0; $i < $params->getNumParams(); $i++) { // load all xmlrpc published functions
$value = $params->getParam($i); foreach (glob(__DIR__ . "/xmlrpc/*.inc") as $filename) {
$array[] = XML_RPC_decode($value); require_once($filename);
$publ_func = "xmlrpc_publishable_" .str_replace(".inc", "", basename($filename));
if (function_exists($publ_func)) {
foreach ($publ_func() as $function) {
$this->xmlrpc_callbacks[$this->prefix.".".$function] = $function;
} }
return $array;
}
/*
* xmlrpc_value_to_php: Convert an XMLRPC value into a PHP scalar/array and return it.
*/
function xmlrpc_value_to_php($raw_value) {
/*
switch($raw_value->kindOf()) {
case "scalar":
if($raw_value->scalartyp() == "boolean") $return = (boolean) $raw_value->scalarval();
$return = $raw_value->scalarval();
break;
case "array":
$return = array();
for($i = 0; $i < $raw_value->arraysize(); $i++) {
$value = $raw_value->arraymem($i);
$return[] = xmlrpc_value_to_php($value);
} }
break;
case "struct":
$return = array();
for($i = 0; $i < $raw_value->arraysize(); $i++) {
list($key, $value) = $raw_value->structeach();
$return[$key] = xmlrpc_value_to_php($value);
} }
break;
} }
*/
return XML_RPC_decode($raw_value);
}
/* /**
* php_value_to_xmlrpc: Convert a PHP scalar or array into its XMLRPC equivalent. * handle request
* @return IXR_Server
*/ */
function php_value_to_xmlrpc($value, $force_array = false) { public function start()
$toreturn = XML_RPC_encode($value); {
return $force_array ? array($toreturn) : $toreturn; $this->loadPlugins();
/* $server = new IXR_Server($this->xmlrpc_callbacks);
if(gettype($value) == "array") { return $server;
$xmlrpc_type = "array";
$toreturn = array();
foreach($value as $key => $val) {
if(is_string($key)) $xmlrpc_type = "struct";
$toreturn[$key] = php_value_to_xmlrpc($val);
} }
return new XML_RPC_Value($toreturn, $xmlrpc_type);
} else {
if($force_array == true) {
return new XML_RPC_Value(array(new XML_RPC_Value($value, gettype($value))), "array");
} else {
return new XML_RPC_Value($value, gettype($value));
}
}
*/
}
/*
* xmlrpc_auth: Handle basic crypt() authentication of an XMLRPC request. This function assumes that
* $params[0] contains the local system's plaintext password and removes the password from
* the array before returning it.
*/
function xmlrpc_auth(&$params) {
global $config, $_SERVER;
/* XXX: Should teach caller to pass username and use it here. */
/* XXX: Should clarify from old behaviour what is in params[0] that differs from params['xmlrpcauth'] */
if (isset($config['system']['webgui']['authmode'])) {
$authcfg = auth_get_authserver($config['system']['webgui']['authmode']);
if (authenticate_user("admin", $params[0], $authcfg) ||
authenticate_user("admin", $params[0])) {
array_shift($params);
unset($params['xmlrpcauth']);
return true;
} else if (!empty($params['xmlrpcauth']) && (authenticate_user("admin", $params['xmlrpcauth'], $authcfg) ||
authenticate_user("admin", $params['xmlrpcauth']))) {
array_shift($params);
unset($params['xmlrpcauth']);
return true;
}
} else if (authenticate_user("admin", $params[0])) {
array_shift($params);
unset($params['xmlrpcauth']);
return true;
} else if (!empty($params['xmlrpcauth']) && authenticate_user("admin", $params['xmlrpcauth'])) {
array_shift($params);
unset($params['xmlrpcauth']);
return true;
}
array_shift($params);
unset($params['xmlrpcauth']);
log_error("webConfigurator authentication error for 'admin' from {$_SERVER['REMOTE_ADDR']} during sync settings.");
return false;
} }
?>
<?php
/**
* Copyright (C) 2015 Deciso B.V.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
/**
* request functions which may be registered by the xmlrpc system
* every registrable module should include a file with this pattern xmlrpc_publishable_{filename without .inc}
* @return array
*/
function xmlrpc_publishable_test()
{
return array("test");
}
/**
* test function
* @return string
*/
function test()
{
return "test";
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment