From 207abd8486d88f88e60d6cd41db8e1d432d3cbcf Mon Sep 17 00:00:00 2001 From: Colin Smith Date: Wed, 20 Apr 2005 14:09:05 +0000 Subject: Move XMLRPC helper functions (for auth and type conversion) to an include file. --- etc/inc/xmlrpc.inc | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 etc/inc/xmlrpc.inc diff --git a/etc/inc/xmlrpc.inc b/etc/inc/xmlrpc.inc new file mode 100644 index 0000000..f7878a1 --- /dev/null +++ b/etc/inc/xmlrpc.inc @@ -0,0 +1,109 @@ +getNumParams(); $i++) { + $value = $params->getParam($i); + $array[] = xmlrpc_value_to_php($value); + } + 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": + $return = $raw_value->scalarval(); + break; + case "array": + $return = array(); + for($i = 0; $i < $raw_value->arraysize(); $i++) { + $value = $raw_value->arraymem($i); + $return[] = xmlrpc_array_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 $return; +} + +/* + * php_value_to_xmlrpc: Convert a PHP scalar or array into its XMLRPC equivalent. + */ +function php_value_to_xmlrpc($value, $force_array = false) { + if(gettype($value) == "array") { + $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; + $localpass = $config['system']['password']; + if(crypt($params[0], $localpass) == $localpass) { + array_shift($params); + return true; + } elseif(crypt($params['xmlrpcauth'], $localpass) != $localpass) { + unset($params['xmlrpcauth']); + return true; + } + return false; +} + -- cgit v1.1