diff --git a/gosa-core/include/class_gosaSupportDaemon.inc b/gosa-core/include/class_gosaSupportDaemon.inc
index 979a545503407dc7325043901b852e83fc26071a..a0b121e5046eaa77a6ba6ed0a8431f24445340fa 100644 (file)
$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'];
+ if(isset($res['XML'])){
+ foreach($res['XML'][0] as $name => $data){
+ if(preg_match("/^ANSWER[0-9]*$/",$name)){
+ if(isset($data[0]['MAC'][0]['VALUE'])){
+ $hosts[] = $data[0]['MAC'][0]['VALUE'];
+ }elseif(isset($data[0]['VALUE'])){
+ $hosts[] = $data[0]['VALUE'];
+ }
+ }
}
}
return($hosts);
*/
private function set_error($str)
{
+ /******
+ Debug handling
+ ******/
+ $debug = debug_backtrace();
+ $file = __FILE__;
+ $function = __FUNCTION__;
+ $line = __LINE__;
+ $class = __CLASS__;
+ foreach($debug as $info){
+ if(!in_array($info['function'],array("send_data","_send","set_error","connect"))){
+ $file = $info['file'];
+ $line = $info['line'];
+ $class = get_class($this);
+ $function = $info['function'];
+ break;
+ }
+ }
+ @DEBUG(DEBUG_SI, $line, "<b>".$class."::".$function."</b>" , $file, "<font color='red'><i>".htmlentities($str)."</i></font>", $info="");
+
+ /******
+ Set error string.
+ ******/
+
$this->b_error = TRUE;
$this->s_error = $str;
}
$ret = array();
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
+ $entries = $this->_send($xml_msg,TRUE);
- $entries = $this->xml_to_array($str);
+ /* Check if returned values represent a valid answer */
if(isset($entries['XML']) && is_array($entries['XML'])){
-
- /* Check if returned values represent a valid answer */
if(isset($entries['XML'])){
- if(isset($entries['XML']['ERROR_STRING'])) {
- $this->set_error($entries['XML']['ERROR_STRING']);
- new log("debug","GOsa-si",
- get_class($this)."::".__FUNCTION__, array(),
- "FAILED error was ".$this->get_error());
- return($ret);
- }
-
- /* Unset header tags */
$ret = $entries['XML'];
foreach($ret as $key => $entry){
if(!preg_match("/^answer/i",$key)){
$ret = array();
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML']) && is_array($entries['XML'])){
- /* Check if returned values represent a valid answer */
- if(isset($entries['XML'])){
- if(isset($entries['XML']['ERROR_STRING'])) {
- $this->set_error($entries['XML']['ERROR_STRING']);
- new log("debug","GOsa-si",
- get_class($this)."::".__FUNCTION__, array(),
- "FAILED error was ".$this->get_error());
- return($ret);
- }
-
- /* Unset header tags */
- foreach(array("HEADER","SOURCE","TARGET","SESSION_ID") as $type){
- if(isset($entries['XML'][$type])){
- unset($entries['XML'][$type]);
- }
+ /* Unset header tags */
+ foreach(array("HEADER","SOURCE","TARGET","SESSION_ID") as $type){
+ if(isset($entries['XML'][$type])){
+ unset($entries['XML'][$type]);
}
- $ret = $entries['XML'];
}
+ $ret = $entries['XML'];
}
}
return($ret);
public function FAI_get_packages($release,$attrs,$package,$from=-1,$to=-1)
{
- $this->reset_error();
$ret = array();
/* Check Parameter */
"</xml>";
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML']) && is_array($entries['XML'])){
/* Check if returned values represent a valid answer */
if(isset($entries['XML'])){
- if(isset($entries['XML']['ERROR_STRING'])) {
- $this->set_error($entries['XML']['ERROR_STRING']);
- new log("debug","GOsa-si",
- get_class($this)."::".__FUNCTION__, array(),
- "FAILED error was ".$this->get_error());
- return($ret);
- }
/* Unset header tags */
foreach(array("HEADER","SOURCE","TARGET","SESSION_ID") as $type){
public function FAI_get_server($name = "")
{
- $this->reset_error();
$xml_msg = "<xml><header>gosa_query_fai_server</header><target>GOSA</target><source>GOSA</source></xml>";
$ret = array();
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
- $entries = $this->xml_to_array($str);
+ /* Check if returned values represent a valid answer */
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML']) && is_array($entries['XML'])){
- /* Check if returned values represent a valid answer */
- if(isset($entries['XML'])){
- if(isset($entries['XML']['ERROR_STRING'])) {
- $this->set_error($entries['XML']['ERROR_STRING']);
- new log("debug","GOsa-si",
- get_class($this)."::".__FUNCTION__, array(),
- "FAILED error was ".$this->get_error());
- return($ret);
- }
-
- /* Unset header tags */
- foreach(array("HEADER","SOURCE","TARGET","SESSION_ID") as $type){
- if(isset($entries['XML'][$type])){
- unset($entries['XML'][$type]);
- }
+ /* Unset header tags */
+ foreach(array("HEADER","SOURCE","TARGET","SESSION_ID") as $type){
+ if(isset($entries['XML'][$type])){
+ unset($entries['XML'][$type]);
}
- $ret = $entries['XML'];
}
+ $ret = $entries['XML'];
}
}
return($ret);
public function FAI_get_classes($name)
{
- $this->reset_error();
$xml_msg = "<xml><header>gosa_query_fai_release</header><target>GOSA</target><source>GOSA</source>".
"<where><clause><phrase><release>".$name."</release></phrase></clause></where></xml>";;
$ret = array();
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML']) && is_array($entries['XML'])){
- /* Check if returned values represent a valid answer */
- if(isset($entries['XML'])){
- if(isset($entries['XML']['ERROR_STRING'])) {
- $this->set_error($entries['XML']['ERROR_STRING']);
- new log("debug","GOsa-si",
- get_class($this)."::".__FUNCTION__, array($name),
- "FAILED error was ".$this->get_error());
- return($ret);
- }
-
- /* Unset header tags */
- foreach(array("HEADER","SOURCE","TARGET","SESSION_ID") as $type){
- if(isset($entries['XML'][$type])){
- unset($entries['XML'][$type]);
- }
+ /* Unset header tags */
+ foreach(array("HEADER","SOURCE","TARGET","SESSION_ID") as $type){
+ if(isset($entries['XML'][$type])){
+ unset($entries['XML'][$type]);
}
- $ret = $entries['XML'];
}
+ $ret = $entries['XML'];
}
}
return($ret);
*/
public function get_queued_entries($event_types = array("*"),$from=-1,$to=-1,$sort="timestamp DESC")
{
- $this->reset_error();
$ret = array();
$tags = "";
</xml>";
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML']) && is_array($entries['XML'])){
- /* Check if returned values represent a valid answer */
- if(isset($entries['XML'])){
-
- /* Unset header tags */
- foreach(array("HEADER","SOURCE","TARGET") as $type){
- unset($entries['XML'][$type]);
- }
- $ret = $entries['XML'];
+ /* Unset header tags */
+ foreach(array("HEADER","SOURCE","TARGET","SESSION_ID") as $type){
+ unset($entries['XML'][$type]);
}
+ $ret = $entries['XML'];
}
}
-
- /* Remove session ID. No one is interested in this... */
- unset($ret['SESSION_ID']);
-
return($ret);
}
trigger_error("Requires an array as parameter.");
return;
}
- $this->reset_error();
$ret = array();
</xml>";
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML']) && is_array($entries['XML'])){
foreach($entries['XML'] as $entry){
if(is_array($entry) && array_key_exists("ID",$entry)){
trigger_error("Requires an array as parameter.");
return;
}
- $this->reset_error();
$ret = array();
</xml>";
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML'])){
foreach($entries['XML'] as $name => $entry){
if(preg_match("/^ANSWER[0-9]*$/",$name)){
trigger_error("Requires an array as parameter.");
return;
}
- $this->reset_error();
$ret = array();
</xml>";
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML'])){
foreach($entries['XML'] as $name => $entry){
if(preg_match("/^ANSWER[0-9]*$/",$name)){
return;
}
- $this->reset_error();
$xml_msg = "<xml>
<header>gosa_query_jobdb</header>
</xml>";
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return(FALSE);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if( isset($entries['XML']['HEADER']) &&
$entries['XML']['HEADER']=="answer" &&
isset($entries['XML']['ANSWER1'])){
trigger_error("Requires an integer as parameter.");
return;
}
- $this->reset_error();
$ret = array();
$xml_msg = "<xml>
</where>
</xml>";
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if( isset($entries['XML']['HEADER']) &&
$entries['XML']['HEADER']=="answer" &&
isset($entries['XML']['ANSWER1'])){
return;
}
- $this->reset_error();
$ret = array();
</xml>";
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = $this->o_sock->read();
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return($ret);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML']) || isset($entries['COUNT'])){
new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::remove_entries()", $ids,"SUCCESS");
return(TRUE);
*/
public function update_entries($ids,$data)
{
- $this->reset_error();
if(!is_array($ids)){
trigger_error("Requires an array as first parameter.");
return;
</xml>";
if($this->connect()){
-
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
- if($this->o_sock->is_error()){
- $this->set_error($this->o_sock->get_error());
- return(FALSE);
- }
-
- $entries = $this->xml_to_array($str);
+ $entries = $this->_send($xml_msg,TRUE);
if(isset($entries['XML'])){
if(isset($entries['XML']['ERROR_STRING'])) {
$this->set_error($entries['XML']['ERROR_STRING']);
$xml_msg ="<xml><header>gosa_count_jobdb</header><target>GOSA</target><source>GOSA</source></xml>";
$this->connect();
if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = trim($this->o_sock->read());
-
- /* Check if something went wrong while reading */
+ $entries = $this->_send($xml_msg,TRUE);
if($this->o_sock->is_error()){
$this->set_error($this->o_sock->get_error());
return(0);
}
-
- $entries = $this->xml_to_array($str);
if(isset($entries['XML'])){
return($entries['XML']['COUNT']);
}
return(FALSE);
}
- $this->reset_error();
/* Add to queue if new
*/
}
-/*! \brief Returns an array containing all queued entries.
+ /*! \brief Returns an array containing all queued entries.
@return Array All queued entries as an array.
*/
public function _send($data, $answer_expected= FALSE)
{
- $this->reset_error();
+
$ret = array();
+ if(!$this->connect()){
+ return($ret);
+ }
+
+ $this->reset_error();
+ /******
+ Debug handling
+ ******/
+ $debug = debug_backtrace();
+ $file = __FILE__;
+ $function = __FUNCTION__;
+ $line = __LINE__;
+ $class = __CLASS__;
+ foreach($debug as $info){
+ if(!in_array($info['function'],array("send_data","_send"))){
+ $file = $info['file'];
+ $line = $info['line'];
+ $class = get_class($this);
+ $function = $info['function'];
+ break;
+ }
+ }
+ @DEBUG(DEBUG_SI, $line, "<b>".$class."::".$function."</b>" , $file, "<i>".htmlentities($data)."</i>", $info="");
+
+
+ /*******
+ Start sending data
+ *******/
if($this->connect()){
$this->o_sock->write($data);
if ($answer_expected){
$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'][0]['VALUE']) && $entries['XML'][0]['ERROR'][0]['VALUE'] == "1"){
+ $this->set_error($entries['XML'][0]['ERROR_STRING'][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);