X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_log.inc;h=fbdbb371c72b953e34a4b1dd78325e6fdb5c4c86;hb=62c2547a71af33f8815bf3627822599c95153527;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..fbdbb371c 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);
@@ -135,117 +132,121 @@ class log {
}
+ 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);
}
}