diff --git a/gosa-core/include/class_gosaSupportDaemon.inc b/gosa-core/include/class_gosaSupportDaemon.inc
index f03d95111d39eb9eb88d1a9832362c1ba6775c3f..7d8a4f494c94a1a8a041f0909cff547805d6fbcf 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=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();
- new log("debug","gosaSupportDaemon::connect()", "Could not connect to server.", array(),$this->get_error());
+ $this->set_error(msgPool::cmdnotfound("GOSA_SI",_("GOsa support daemon")));
}
return($this->is_connected);
}
}
+ public function FAI_get_kernels($release)
+ {
+ $xml_msg =
+ "<xml>".
+ "<header>gosa_get_available_kernel</header>".
+ "<source>GOSA</source>".
+ "<target>GOSA</target>".
+ "<release>".$release."</release>".
+ "</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 */
+ $ret = $entries['XML'];
+ foreach($ret as $key => $entry){
+ if(!preg_match("/^answer/i",$key)){
+ unset($ret[$key]);
+ }
+ }
+ }
+ }
+ }
+ return($ret);
+ }
+
+
+ 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>
".$tags."
<orderby>".$sort."</orderby>";
-if($from != -1 && $to != -1){
-$xml_msg.= "
- <limit>
- <from>".$from."</from>
- <to>".$to."</to>
- </limit>";
-}
-$xml_msg.= "
+ if($from != -1 && $to != -1){
+ $xml_msg.= "
+ <limit>
+ <from>".$from."</from>
+ <to>".$to."</to>
+ </limit>";
+ }
+ $xml_msg.= "
</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'])){
}
}
+ /* 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){
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($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");
$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'])) {
/*! \brief Returns the number of currently queued objects.
@return Integer
*/
- public function number_of_queued_entries()
+ public function number_of_queued_entries($event_types)
{
+ $tags = "";
+ foreach($event_types as $type){
+ $tags .= "<phrase><headertag>".$type."</headertag></phrase>";
+ }
+ if(count($event_types) > 1){
+ $tags = "<connector>or</connector>".$tags;
+ }
+ if(count($event_types)){
+ $tags = "<where><clause>".$tags."</clause></where>";
+ }
+
+
+ $xml_msg =
+ "<xml>".
+ "<header>gosa_query_jobdb</header>".
+ "<target>GOSA</target>".
+ "<source>GOSA</source>".
+ "<select> count ID</select>".
+ $tags.
+ "</xml>";
+
$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 */
+ 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{
$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;