diff --git a/gosa-core/include/class_gosaSupportDaemon.inc b/gosa-core/include/class_gosaSupportDaemon.inc
index 5101e905a1abf5c567972b1df5d6e987ab0a970a..189dbdfac3a9addfe14b00e5c176f18a044f0284 100644 (file)
private $is_connected = FALSE;
+ protected $use_alternative_xml_parse_method = FALSE;
/*! \brief Creates a new gosaSupportDaemon object.
@param string Host The Host where the daemon is running on.
#FIXME: bad idea about referencing global variables from within classes
global $config;
+ /* This should only be the case if we call this from setup.
+ __autoload()
+ */
+ if(!is_object($config)) { return; }
+
# load from config, store statically
- if (isset($config->current['GOSA_SI'])){
+ if ($config->get_cfg_value("gosa_si") != ""){
if ($this->s_host == ""){
- $this->s_host= preg_replace("/^.*@([^:]+):.*$/", "$1", $config->current['GOSA_SI']);
- $this->i_port= preg_replace("/^.*@[^:]+:(.*)$/", "$1", $config->current['GOSA_SI']);
- $this->s_encryption_key = preg_replace("/^(.*)@[^:]+:.*$/", "$1", $config->current['GOSA_SI']);
+ $this->s_host= preg_replace("/^.*@([^:]+):.*$/", "$1", $config->get_cfg_value("gosa_si"));
+ $this->i_port= preg_replace("/^.*@[^:]+:(.*)$/", "$1", $config->get_cfg_value("gosa_si"));
+ $this->s_encryption_key = preg_replace("/^(.*)@[^:]+:.*$/", "$1", $config->get_cfg_value("gosa_si"));
}
$this->f_timeout = $timeout;
return($this->is_connected);
}
+
+ /*! \brief Returns TRUE whether we are connected or not
+ @return BOOLEAN Returns TRUE when connected else FALSE
+ */
+ public function is_connected()
+ {
+ return($this->is_connected);
+ }
+
+
+ /*! \brief */
+ public function get_hosts_with_module($mod)
+ {
+ $data = array("module_name" => $mod);
+ $res = $this->send_data("gosa_get_hosts_with_module",$this->s_host.":".$this->i_port,$data,TRUE);
+ $hosts = array();
+ if(isset($res['XML'][0]['HOST'])){
+ foreach($res['XML'][0]['HOST'] as $entry){
+ $hosts [] = $entry['VALUE'];
+ }
+ }
+ return($hosts);
+ }
+
/*! \brief Disconnect from gosa daemon.
*/
@param String XML string
@return Array Returns an array containing the xml structure.
*/
- private function xml_to_array($xml)
+ private function xml_to_array($xml,$alternative_method = FALSE)
{
$params = array();
$level = array();
}else{
xml_parser_free($parser);
- foreach ($vals as $xml_elem) {
- if ($xml_elem['type'] == 'open') {
- if (array_key_exists('attributes',$xml_elem)) {
- list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
- } else {
- $level[$xml_elem['level']] = $xml_elem['tag'];
- }
- }
- if ($xml_elem['type'] == 'complete') {
+ if($this->use_alternative_xml_parse_method) {
+ $params = $this->build_xml_array($vals);
+ } else {
- /* Save tag attributes too.
- e.g. <tag attr="val">
- */
- if(isset($xml_elem['attributes'])){
- foreach($xml_elem['attributes'] as $name => $value){
- $test2['ATTRIBUTES'][$name] = $value;
+ foreach ($vals as $xml_elem) {
+ if ($xml_elem['type'] == 'open') {
+ if (array_key_exists('attributes',$xml_elem)) {
+ list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
+ } else {
+ $level[$xml_elem['level']] = $xml_elem['tag'];
}
}
+ if ($xml_elem['type'] == 'complete') {
- $start_level = 1;
- $test2 = &$params;
- while($start_level < $xml_elem['level']) {
- $test2 = &$test2[$level[$start_level]];
- $start_level++;
- }
- if(!isset($test2[$xml_elem['tag']])){
- if(isset($xml_elem['value'])){
- $test2[$xml_elem['tag']] = $xml_elem['value'];
+ $start_level = 1;
+ $test2 = &$params;
+ while($start_level < $xml_elem['level']) {
+ $test2 = &$test2[$level[$start_level]];
+ $start_level++;
}
- }else{
- if(!is_array($test2[$xml_elem['tag']])){
- $test2[$xml_elem['tag']] = array($test2[$xml_elem['tag']]);
+
+ /* Save tag attributes too.
+ e.g. <tag attr="val">
+ */
+ if(isset($xml_elem['attributes'])){
+ foreach($xml_elem['attributes'] as $name => $value){
+ $test2['ATTRIBUTES'][$name] = $value;
+ }
+ }
+
+ if(!isset($test2[$xml_elem['tag']])){
+ if(isset($xml_elem['value'])){
+ $test2[$xml_elem['tag']] = $xml_elem['value'];
+ }
+ }else{
+ if(!is_array($test2[$xml_elem['tag']])){
+ $test2[$xml_elem['tag']] = array($test2[$xml_elem['tag']]);
+ }
+ $test2[$xml_elem['tag']][] = $xml_elem['value'];
}
- $test2[$xml_elem['tag']][] = $xml_elem['value'];
}
}
}
}
+ function build_xml_array(&$vals)
+ {
+ $array = array();
+ while(count($vals)){
+ $key = key($vals);
+ $val = $vals[$key];
+ unset($vals[$key]);
+ if($val['type'] == "close"){
+ return($array);
+ }elseif($val['type']=="open"){
+ $array[$val['tag']][] = $this->build_xml_array($vals);
+ }elseif($val['type'] != "cdata"){
+ $data = array("VALUE" => "","ATTRIBUTES" => "");
+ foreach(array("value" => "VALUE", "attributes" => "ATTRIBUTES") as $name => $attr){
+ if(isset($val[$name])){
+ $data[$attr] = $val[$name];
+ }
+ }
+ $array[$val['tag']][] = $data;
+ }else{
+#print_a($val);
+ }
+ }
+ return($array);
+ }
+
+
+
+
+
+
/*! \brief Updates an entry with a set of new values,
@param Integer The ID of the entry, we want to update.
@param Array The variables to update.
$entries = $this->xml_to_array($str);
if(isset($entries['XML']) && is_array($entries['XML'])){
$ret = $entries;
- if(isset($entries['XML']['ERROR_STRING'])) {
- $this->set_error($entries['XML']['ERROR_STRING']);
- new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()", array($data=>$data),"FAILED ".$this->get_error());
- }elseif(isset($entries['XML']['ERROR'])){
- $this->set_error($entries['XML']['ERROR']);
- new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()", array($data=>$data),"FAILED ".$this->get_error());
+ if($this->use_alternative_xml_parse_method) {
+ if(isset($entries['XML'][0]['ERROR_STRING'][0]) && is_array($entries['XML'][0]['ERROR_STRING'])) {
+ $this->set_error($entries['XML'][0]['ERROR_STRING'][0]['VALUE']);
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()",
+ array($data=>$data),"FAILED ".$this->get_error());
+ }elseif(isset($entries['XML'][0]['ERROR'][0]['VALUE']) && is_array($entries['XML'][0]['ERROR'])){
+ $this->set_error($entries['XML'][0]['ERROR'][0]['VALUE']);
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()",
+ array($data=>$data),"FAILED ".$this->get_error());
+ }
}else{
- new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()", array($data=>$data),"SUCCESS");
+ if(isset($entries['XML']['ERROR_STRING'])) {
+ $this->set_error($entries['XML']['ERROR_STRING']);
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()",
+ array($data=>$data),"FAILED ".$this->get_error());
+ }elseif(isset($entries['XML']['ERROR'])){
+ $this->set_error($entries['XML']['ERROR']);
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()",
+ array($data=>$data),"FAILED ".$this->get_error());
+ }
}
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()",
+ array($data=>$data),"SUCCESS");
}
}else{
- new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()", array($data=>$data),"Fire & forget, not result.! ".$this->get_error());
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::_send()",
+ array($data=>$data),"Fire & forget, not result.! ".$this->get_error());
}
}
return($ret);
$key = preg_replace("/^.*\n\n/sim","",$key);
/* Remove footer */
$key = preg_replace("/-----.*$/sim","",$key);
+ }elseif (!preg_match('%^[a-zA-Z0-9/+]*={0,2}$%', $key)) {
+
+ /* Encode key if it is raw.
+ */
+ $key = base64_encode($key);
}
/* Create query
$xml_msg = "<xml>
<header>gosa_remove_dak_key</header>
<target>".$server."</target>
- <uid>".$key."</uid>
+ <keyid>".$key."</keyid>
<source>GOSA</source>
</xml>";