X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_log.inc;h=33e58523a94abddb8a76b4cd4bf8edc1fcc187d9;hb=c24abf1e4216c3cea0eff19346e6c7da1a346e47;hp=fdebaaf80d0177c8cac64496de4c3c728b9b8fa7;hpb=7943059c230b657b40708c7dded95ee418660913;p=gosa.git diff --git a/gosa-core/include/class_log.inc b/gosa-core/include/class_log.inc index fdebaaf80..33e58523a 100644 --- a/gosa-core/include/class_log.inc +++ b/gosa-core/include/class_log.inc @@ -1,24 +1,25 @@ \version 2.6 @@ -51,11 +52,11 @@ class log { } $entry = array(); - if(!session::is_set('config')){ + if(!session::global_is_set('config')){ $entry['user']= "unkown"; }else{ - $this->config = session::get('config'); + $this->config = session::global_get('config'); $ui = get_userinfo(); $entry['user']= @$ui->dn; } @@ -75,7 +76,7 @@ class log { $entry['changes'] = $changes; $entry['result'] = $result; - if(!isset($this->config->current['LOGGING']) && empty($entry['user'])){ + if(!isset($this->config) || ( $this->config->get_cfg_value("logging") == "" && empty($entry['user']))){ $entry['user'] = "unknown"; } @@ -89,21 +90,17 @@ class log { }else{ - if(!isset($this->config->current['LOGGING'])){ - $this->log_into_syslog($entry); - }else{ - - /* Start logging for configured methods */ - if(isset($this->config->current['LOGGING']) && preg_match("/(^|,)syslog(,|$)/i",$this->config->current['LOGGING'])){ + if (isset ($this->config)){ + if ($this->config->get_cfg_value("logging") == ""){ $this->log_into_syslog($entry); - } - if(isset($this->config->current['LOGGING']) && preg_match("/(^|,)mysql(,|$)/i",$this->config->current['LOGGING'])){ - $res = $this->log_into_db($entry); + }else{ - if(!$res){ - global $config; - $config->current['LOGGING'] = preg_replace("/(^|,)mysql(,|$)/",",",$config->current['LOGGING']); - msg_dialog::display(_("Logging to MySQL disabled"),_("The logging to a MySQL database is now disabled for this session of GOsa, due to communication errors with the specified logging database."), INFO_DIALOG); + /* Start logging for configured methods */ + if(preg_match("/(^|,)syslog(,|$)/i",$this->config->get_cfg_value("logging"))){ + $this->log_into_syslog($entry); + } + if(preg_match("/(^|,)mysql(,|$)/i",$this->config->get_cfg_value("logging"))){ + $this->log_into_db($entry); } } } @@ -116,11 +113,11 @@ class log { $msgs = array(); if(!isset($entry['action']) || !in_array($entry['action'],array("modify","create","remove","copy","snapshot","view","security","debug"))){ - $msgs[] = sprintf(_("Invalid option '%s' specified."), $entry['action']); + $msgs[] = sprintf(_("Invalid option '%s' specified!"), $entry['action']); } if(!isset($entry['objecttype']) || empty($entry['objecttype'])){ - $msgs[] = _("Specified objectType is empty or invalid"); + $msgs[] = _("Specified objectType is empty or invalid!"); } return($msgs); @@ -130,122 +127,131 @@ class log { /* This function is used to into the systems syslog */ function log_into_syslog($entry) { - $str = $entry['user']." ".$entry['action']." ".$entry['object']." from type ".$entry['objecttype']." ".$entry['changes']." : Result was ".$entry['result']; + $str= ""; + if (empty($entry['object']) && empty($entry['changes'])) { + $str = "(".$entry['action'].") ".$entry['objecttype'].": ".$entry['result']; + } else { + $str = "(".$entry['action'].") ".$entry['object']." of type ".$entry['objecttype']." ".$entry['changes'].": ".$entry['result']; + } gosa_log($str); } + function disable_mysql_log($server,$error) + { + global $config; + msg_dialog::display(_("Error"), $error, ERROR_DIALOG); + msg_dialog::display(_("MySQL error"),sprintf(_("Logging to MySQL database will be disabled for server '%s'!"),$server), INFO_DIALOG); + unset($config->data['SERVERS']['LOGGING'][$server]) ; + $this->config = $config; + } + + /* Log into configured logging databses.*/ function log_into_db($entry) { if(isset($this->config->data['SERVERS']['LOGGING'])){ $servers = $this->config->data['SERVERS']['LOGGING']; }else{ - msg_dialog::display(_("Error"), _("You have enabled the logging into mysql database, but there are no logging servers available."), ERROR_DIALOG); return(FALSE); } /* Log into each configured server */ foreach($servers as $server_name => $server){ - + + $error = ""; + /* Connect to the database */ + ini_set("mysql.connect_timeout",5); $con = @mysql_pconnect($server_name,$server['USER'],$server['PWD']); if(!$con){ - msg_dialog::display(_("Error"), sprintf(_("Cannot connect to logging server '%s'."),$server_name), ERROR_DIALOG); - return(FALSE); - }else{ - - /* Check if the database is available - */ - $db = mysql_select_db($server['DB'],$con); - if(!$db){ - msg_dialog::display(_("Error"), sprintf(_("Cannot select database '%s' on server '%s': %s"),$server['DB'],$server['SERVER'], mysql_error($con)), ERROR_DIALOG); - return(FALSE); - }else{ + $error = msgPool::dbconnect(_("MySQL logging"),mysql_error()); + $this->disable_mysql_log($server_name,$error); + continue; + } - /* Check for required tables - */ - $query = "SHOW TABLES;"; - $res = @mysql_query($query,$con); - $tables = array(); - while($attrs = mysql_fetch_row($res)){ - $tables[] = $attrs[0]; - } - $error = FALSE; - foreach(array("gosa_log","gosa_locations") as $required){ - if(!in_array($required,$tables)){ - msg_dialog::display(_("Error"), - sprintf(_("Missing logging table (%s.%s) update your GOsa logging database schema."), - $server['DB'],$required), ERROR_DIALOG); - $error = TRUE; - } - if($error) return(FALSE); - } - - /* Check if our current location is already registerd - in this case get its id. - If it wasn't registered yet, create it. - */ - $base = mysql_escape_string($this->config->current['BASE']); - $query= "SELECT id FROM gosa_locations WHERE location=\"".$base."\";"; - $res = mysql_query($query); - $location_id = -1; - while($attrs = mysql_fetch_assoc($res)){ - $location_id = $attrs['id']; - break; - } - - /* No location found that matches our location. - Create it. - */ - if($location_id == -1){ - $query = "INSERT INTO gosa_locations (location) VALUES ('".$base."');"; - mysql_query($query,$con); - - /* Try to detect the location again - */ - $query= "SELECT id FROM gosa_locations WHERE location=\"".$base."\";"; - $res = mysql_query($query); - $location_id = -1; - while($attrs = mysql_fetch_assoc($res)){ - $location_id = $attrs['id']; - break; - } - if($location_id == -1){ - msg_dialog::display(_("Error"), sprintf(_("Couldn't add your location to the logging database, the error was: %s."), - mysql_error($con)), ERROR_DIALOG); - return(FALSE); - } - } - - /* Create mysql syntax */ - $query ="INSERT INTO gosa_log - (timestamp,user,action,objecttype,object,changes,result,location_id) - VALUES - ( - \"".mysql_escape_string($entry['timestamp'])."\", - \"".mysql_escape_string($entry['user'])."\", - \"".mysql_escape_string($entry['action'])."\", - \"".mysql_escape_string($entry['objecttype'])."\", - \"".mysql_escape_string($entry['object'])."\", - \"".mysql_escape_string($entry['changes'])."\", - \"".mysql_escape_string($entry['result'])."\", - \"".mysql_escape_string($location_id)."\" - ); - "; - $res = mysql_query($query,$con); - if(!$res){ - msg_dialog::display(_("Error"), sprintf(_("Cannot query database '%s' on server '%s': %s"), - $server['DB'],$server['SERVER'], mysql_error($con)), ERROR_DIALOG); - return(FALSE); - } + /* Check if the database is available + */ + $db = @mysql_select_db($server['DB'],$con); + if(!$db){ + $error = msgPool::dbselect(_("MySQL logging"),mysql_error()); + $this->disable_mysql_log($server_name,$error); + continue; + } + + /* Check if our current location is already registerd + in this case get its id. + If it wasn't registered yet, create it. + */ + $base = mysql_escape_string($this->config->current['BASE']); + $query= "SELECT id FROM gosa_locations WHERE location=\"".$base."\";"; + $res = mysql_query($query); + if(!$res){ + $error = msgPool::dbquery(_("MySQL logging"),mysql_error()); + $this->disable_mysql_log($server_name,$error); + continue; + } + + $location_id = -1; + while($attrs = mysql_fetch_assoc($res)){ + $location_id = $attrs['id']; + break; + } + + /* No location found that matches our location. + Create it. + */ + if($location_id == -1){ + $query = "INSERT INTO gosa_locations (location) VALUES ('".$base."');"; + if(!mysql_query($query,$con)){ + $error = msgPool::dbquery(_("MySQL logging"),mysql_error()); + $this->disable_mysql_log($server_name,$error); + continue; } + + /* Try to detect the location again + */ + $query= "SELECT id FROM gosa_locations WHERE location=\"".$base."\";"; + $res = mysql_query($query); + $location_id = -1; + while($attrs = mysql_fetch_assoc($res)){ + $location_id = $attrs['id']; + break; + } + if($location_id == -1){ + $error = sprintf(_("Cannot add location to the database!")."

"._("Error").": %s",mysql_error($con)); + $this->disable_mysql_log($server_name,$error); + continue; + } + } + + /* Create mysql syntax */ + $query ="INSERT INTO gosa_log + (timestamp,user,action,objecttype,object,changes,result,location_id) + VALUES + ( + \"".mysql_escape_string($entry['timestamp'])."\", + \"".mysql_escape_string($entry['user'])."\", + \"".mysql_escape_string($entry['action'])."\", + \"".mysql_escape_string($entry['objecttype'])."\", + \"".mysql_escape_string($entry['object'])."\", + \"".mysql_escape_string($entry['changes'])."\", + \"".mysql_escape_string($entry['result'])."\", + \"".mysql_escape_string($location_id)."\" + ); + "; + $res = mysql_query($query,$con); + if(!$res){ + $error = dbquery(_("MySQL logging"), mysql_error()); + $this->disable_mysql_log($server_name,$error); + continue; + } + if(is_resource($con)){ mysql_close($con); } } - return(TRUE); } }