diff --git a/gosa-core/include/class_gosaSupportDaemon.inc b/gosa-core/include/class_gosaSupportDaemon.inc
index c8a05a09f24aad79cc17bf1e4df5f68501983c4c..5f160733477b1c4b4aae02c7ae594f82a9535981 100644 (file)
@param boolean Connect Directly connect to daemon socket.
@param float Timeout The timelimit for all socket actions.
*/
- public function __construct($connect=TRUE,$timeout=0.2)
+ public function __construct($connect=TRUE,$timeout=10)
{
#FIXME: bad idea about referencing global variables from within classes
global $config;
*/
public function connect()
{
- $this->o_sock = new Socket_Client($this->s_host,$this->i_port,TRUE,$this->f_timeout);
- if($this->o_sock->connected()){
- $this->o_sock->setEncryptionKey($this->s_encryption_key);
- $this->is_connected = TRUE;
+ if(!empty($this->s_host) && !empty($this->i_port)){
+ $this->o_sock = new Socket_Client($this->s_host,$this->i_port,TRUE,$this->f_timeout);
+ if($this->o_sock->connected()){
+ $this->o_sock->setEncryptionKey($this->s_encryption_key);
+ $this->is_connected = TRUE;
+ }else{
+ $this->set_error($this->o_sock->get_error());
+ $this->disconnect();
+ new log("debug","gosaSupportDaemon::connect()", "Cannot connect to si-server", array(),$this->get_error());
+ }
}else{
- $this->set_error($this->o_sock->get_error());
- $this->disconnect();
+ $this->set_error(msgPool::cmdnotfound("GOSA_SI",_("GOsa support daemon")));
}
return($this->is_connected);
}
}
+
+
+ public function FAI_get_package_sections($release)
+ {
+ $xml_msg = "<xml><header>gosa_query_packages_list</header><target>GOSA</target><source>GOSA</source>".
+ "<select>distinct section</select>".
+ "<where><clause><phrase><distribution>".$release."</distribution></phrase></clause></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);
+ 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]);
+ }
+ }
+ $ret = $entries['XML'];
+ }
+ }
+ }
+ return($ret);
+ }
+
+
+ public function FAI_get_packages($release,$attrs,$package,$from=-1,$to=-1)
+ {
+ $this->reset_error();
+ $ret = array();
+
+ /* Check Parameter */
+ if(!is_array($attrs) || !count($attrs)){
+ trigger_error("Second parameter must be an array. With at least one attribute name.");
+ return($ret);
+ }
+
+ /* Check Parameter */
+ if(!is_array($package)){
+ trigger_error("Third parameter must be an array. With at least one attribute name.");
+ return($ret);
+ }
+
+ /* Create list of attributes to fetch */
+ $attr = "";
+ foreach($attrs as $at){
+ $attr.= "<select>".$at."</select>";
+ }
+
+ /* If no package is given, search for all */
+ if(!count($package)) $package = array("%");
+
+ /* Create limit tag */
+ if($from == -1){
+ $limit ="";
+ }else{
+ $limit = "<limit><from>".$from."</from><to>".$to."</to></limit>";
+ }
+
+ /* Create list of attributes to fetch */
+ $pkgs = "";
+ foreach($package as $pkg){
+ $pkgs .="<phrase><operator>like</operator><package>".$pkg."</package></phrase>";
+ }
+
+ $xml_msg = "<xml><header>gosa_query_packages_list</header><target>GOSA</target><source>GOSA</source>".
+ $attr.
+ "<where>
+ <clause><phrase><distribution>".$release."</distribution></phrase></clause>
+ <clause><connector>OR</connector>
+ ".$pkgs."
+ </clause>
+ </where>".
+ $limit.
+ "</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);
+ 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]);
+ }
+ }
+ $ret = $entries['XML'];
+ }
+ }
+ }
+ return($ret);
+
+
+ }
+
+
+ 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);
+ 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]);
+ }
+ }
+ $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);
+ 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]);
+ }
+ }
+ $ret = $entries['XML'];
+ }
+ }
+ }
+ return($ret);
+ }
+
+
/*! \brief Returns an array containing all queued entries.
@return Array All queued entries as an array.
*/
$tags = "<where><clause>".$tags."</clause></where>";
}
- $xml_msg = "<xml>
+ $xml_msg =
+"<xml>
<header>gosa_query_jobdb</header>
<target>GOSA</target>
<source>GOSA</source>
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);
if(isset($entries['XML']) && is_array($entries['XML'])){
}
}
+ /* Remove session ID. No one is interested in this... */
+ unset($ret['SESSION_ID']);
+
return($ret);
}
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);
if(isset($entries['XML']) && is_array($entries['XML'])){
foreach($entries['XML'] as $entry){
}
+ /*! \brief Returns an entry containing all requested ids.
+ @param Array The IDs of the entries we want to return.
+ @return Array Of the requested entries.
+ */
+ public function get_entries_by_mac($macs)
+ {
+ if(!is_array($macs)){
+ trigger_error("Requires an array as parameter.");
+ return;
+ }
+ $this->reset_error();
+
+ $ret = array();
+
+ $xml_msg = "<xml>
+ <header>gosa_query_jobdb</header>
+ <target>GOSA</target>
+ <source>GOSA</source>
+ <where>
+ <clause>
+ <connector>or</connector>";
+ foreach($macs as $mac){
+ $xml_msg .= "<phrase>
+ <operator>eq</operator>
+ <macaddress>".$mac."</macaddress>
+ </phrase>";
+ }
+ $xml_msg .= "</clause>
+ </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);
+ if(isset($entries['XML'])){
+ foreach($entries['XML'] as $name => $entry){
+ if(preg_match("/^ANSWER[0-9]*$/",$name)){
+ $ret[$name] = $entry;
+ }
+ }
+ }
+ }
+ return($ret);
+ }
+
+
/*! \brief Returns an entry containing all requested ids.
@param Array The IDs of the entries we want to return.
@return Array Of the requested entries.
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);
if(isset($entries['XML'])){
foreach($entries['XML'] as $name => $entry){
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);
if( isset($entries['XML']['HEADER']) &&
$entries['XML']['HEADER']=="answer" &&
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);
if( isset($entries['XML']['HEADER']) &&
$entries['XML']['HEADER']=="answer" &&
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);
if(isset($entries['XML']) || isset($entries['COUNT'])){
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::remove_entries()", $ids,"SUCCESS");
return(TRUE);
+ }else{
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::remove_entries()", $ids,"FAILED ".$this->get_error());
}
}
return(FALSE);
*/
public function remove_entry($id)
{
- $this->reset_error();
-
- $xml_msg = "<xml>
- <header>gosa_delete_jobdb_entry</header>
- <target>GOSA</target>
- <source>GOSA</source>
- <where>
- <clause>
- <phrase>
- <operator>eq</operator>
- <id>".$id."</id>
- </phrase>
- </clause>
- </where>
- </xml>";
- if($this->connect()){
- $this->o_sock->write($xml_msg);
- $str = $this->o_sock->read();
- $entries = $this->xml_to_array($str);
- if(isset($entries['XML'])){
- return(TRUE);
- }
- }
- return(FALSE);
+ return($this->remove_entries(array($id)));
}
if(!isset($params['XML'])){
if (!array_key_exists('XML', $params)){
- $this->set_error(_("Could not parse XML."));
+ $this->set_error(_("Cannot not parse XML!"));
}
$params = array("COUNT" => 0);
}
$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);
if(isset($entries['XML'])){
if(isset($entries['XML']['ERROR_STRING'])) {
$this->set_error($entries['XML']['ERROR_STRING']);
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::update_entries()", $ids,"FAILED setting (".$attr.") error was ".$this->get_error());
return(FALSE);
}
+ new log("debug","DaemonEvent (IDS) ", "gosaSupportDaemon::update_entries()", $ids,"SUCCESS");
return(TRUE);
}
}
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(0);
+ }
+
$entries = $this->xml_to_array($str);
if(isset($entries['XML'])){
return($entries['XML']['COUNT']);
/* Prepare data */
foreach ($data as $key => $value){
if(is_array($value)){
- foreach($value as $sub_val){
+ foreach($value as $sub_value){
$xml_message.= "<$key>$sub_value</$key>";
}
}else{
$request_answer = FALSE;
if($event->get_type() == SCHEDULED_EVENT){
$action = $event->get_schedule_action();
- $request_answer = TRUE;
}elseif($event->get_type() == TRIGGERED_EVENT){
$action = $event->get_trigger_action();
}else{
$this->o_sock->write($data);
if ($answer_expected){
$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);
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());
+ }else{
+ 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());
}
}
return($ret);
/* First of all we have to check which jobs are startet
* for $mac
*/
- $xml_msg ="
- <xml>
- <header>gosa_query_jobdb</header>
- <target>GOSA</target>
- <source>GOSA</source>
- <where>
- <clause>
- <phrase>
- <macaddress>".$mac."</macaddress>
- </phrase>
- </clause>
- </where>
- </xml>
- ";
-
+ $xml_msg ="<xml><header>gosa_query_jobdb</header><target>GOSA</target><source>GOSA</source><where><clause><phrase><macaddress>".$mac."</macaddress></phrase></clause></where></xml>";
+
+ new log("debug","DaemonEvent ", "gosaSupportDaemon::clean_queue_from_mac()", array($mac => $mac)," start cleaning.");
+
$data = $this->_send($xml_msg,TRUE);
if(is_array($data) && isset($data['XML'])){
$already_aborted = FALSE;
$tmp->add_targets(array($mac));
$tmp->set_type(TRIGGERED_EVENT);
if(!$this->append($tmp)){
- msg_dialog::display(_("Error"), sprintf(_("Cannot send abort event for entry: %s"),$entry['ID']) , ERROR_DIALOG);
+ msg_dialog::display(_("Error"), sprintf(_("Cannot send abort event for entry %s!"),$entry['ID']) , ERROR_DIALOG);
+ new log("debug","DaemonEvent ", "gosaSupportDaemon::clean_queue_from_mac()", array($mac => $mac),
+ "FAILED, could not send 'DaemonEvent_faireboot' for entry ID (".$entry['ID'].") - ".$this->get_error());
+ }else{
+ new log("debug","DaemonEvent ", "gosaSupportDaemon::clean_queue_from_mac()", array($mac => $mac),
+ "SUCCESS, send 'DaemonEvent_faireboot' for entry ID (".$entry['ID'].")");
}
;break;
}else{
* Failed or waiting events, can be removed without any trouble.
*/
if(!$this->remove_entries(array($entry['ID']))){
- msg_dialog::display(_("Error"), sprintf(_("Cannot remove entry: %s"),$entry['ID']) , ERROR_DIALOG);
+ msg_dialog::display(_("Error"), sprintf(_("Cannot remove entry %s!"),$entry['ID']) , ERROR_DIALOG);
}
;break;
}