Code

gotoHardwareChecksum gets added to LDAP if not present
[gosa.git] / gosa-si / gosa-si-bus
index bca785bfedd78eb8ddea0e0d1aaeb93dd7b5dc89..dd848c182c3b4ade9d9ae1dd35a1e7a4edc7564d 100755 (executable)
@@ -292,34 +292,34 @@ sub get_interfaces {
 #  DESCRIPTION:  Uses ioctl to get mac address directly from system.
 #===============================================================================
 sub get_mac {
-        my $ifreq= shift;
-        my $result;
-        if ($ifreq && length($ifreq) > 0) {
-                if($ifreq eq "all") {
-                        $result = "00:00:00:00:00:00";
-                } else {
-                        my $SIOCGIFHWADDR= 0x8927;     # man 2 ioctl_list
+    my $ifreq= shift;
+    my $result;
+    if ($ifreq && length($ifreq) > 0) {
+        if($ifreq eq "all") {
+            $result = "00:00:00:00:00:00";
+        } else {
+            my $SIOCGIFHWADDR= 0x8927;     # man 2 ioctl_list
 
-                        # A configured MAC Address should always override a guessed value
-                        if ($bus_mac_address and length($bus_mac_address) > 0) {
-                                return $bus_mac_address;
-                        }
+                # A configured MAC Address should always override a guessed value
+                if ($bus_mac_address and length($bus_mac_address) > 0) {
+                    return $bus_mac_address;
+                }
 
-                        socket SOCKET, PF_INET, SOCK_DGRAM, getprotobyname('ip')
-                                or die "socket: $!";
+            socket SOCKET, PF_INET, SOCK_DGRAM, getprotobyname('ip')
+                or die "socket: $!";
 
-                        if(ioctl SOCKET, $SIOCGIFHWADDR, $ifreq) {
-                                my ($if, $mac)= unpack 'h36 H12', $ifreq;
+            if(ioctl SOCKET, $SIOCGIFHWADDR, $ifreq) {
+                my ($if, $mac)= unpack 'h36 H12', $ifreq;
 
-                                if (length($mac) > 0) {
-                                        $mac=~ m/^([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/;
-                                        $mac= sprintf("%s:%s:%s:%s:%s:%s", $1, $2, $3, $4, $5, $6);
-                                        $result = $mac;
-                                }
-                        }
+                if (length($mac) > 0) {
+                    $mac=~ m/^([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/;
+                    $mac= sprintf("%s:%s:%s:%s:%s:%s", $1, $2, $3, $4, $5, $6);
+                    $result = $mac;
                 }
+            }
         }
-        return $result;
+    }
+    return $result;
 }
 
 #===  FUNCTION  ================================================================
@@ -550,7 +550,8 @@ sub process_incoming_msg {
 
     # check wether incoming msg is from a bus_known_server
     if( not defined $msg ) {
-        my $query_res = $bus_known_server_db->select_dbentry( {table=>'bus_known_server'} );
+        my $sql_statement= "SELECT * FROM bus_known_server";
+        my $query_res = $bus_known_server_db->select_dbentry( $sql_statement );
         while( my ($hit_num, $hit) = each %{ $query_res } ) {
             $host_name = $hit->{hostname};
             if( not $host_name =~ "^$host") {
@@ -613,7 +614,8 @@ sub process_incoming_msg {
 
         } elsif ($target eq "*"){
             # msg is for all server
-            my $query_res = $bus_known_server_db->select_dbentry( {table=>'known_server'} );
+            my $sql_statement= "SELECT * FROM known_server";
+            my $query_res = $bus_known_server_db->select_dbentry( $sql_statement );
             while( my ($hit_num, $hit) = each %{ $query_res } ) {
                 $host_name = $hit->{hostname};
                 $host_key = $hit->{hostkey};
@@ -628,14 +630,16 @@ sub process_incoming_msg {
         my $target_address;
         foreach $target_address (@targets) {
 
-            my $query_res = $bus_known_server_db->select_dbentry( {table=>'known_server', hostname=>$target_address} );
+            my $sql_statement= "SELECT * FROM known_server WHERE hostname='$target_address'";
+            my $query_res = $bus_known_server_db->select_dbentry( $sql_statement );
             if( 1 == keys %{$query_res} ) {
                 $host_key = $query_res->{1}->{hostkey};
                 &send_msg_hash2address($msg_hash, $target_address, $host_key);
                 next;
 
             } else { 
-                $query_res = $bus_known_server_db->select_dbentry( {table=>'known_server'} );
+                my $sql_statement= "SELECT * FROM known_server";
+                $query_res = $bus_known_server_db->select_dbentry( $sql_statement );
                 while( my ($hit_num, $hit) = each %{$query_res} ) {
                     my $host_name = $hit->{hostname};
                     my $host_key = $hit->{hostkey};
@@ -659,17 +663,6 @@ sub process_incoming_msg {
 }
 
 
-#===  FUNCTION  ================================================================
-#         NAME:  get_content_of_known_daemons
-#   PARAMETERS:
-#      RETURNS:
-#  DESCRIPTION:
-#===============================================================================
-#sub get_content_of_known_daemons {
-#    my ($host, $content) = @_;
-#    return;
-#}
-
 
 #===  FUNCTION  ================================================================
 #         NAME:  create_passwd
@@ -686,162 +679,6 @@ sub create_passwd {
 }
 
 
-#===  FUNCTION  ================================================================
-#         NAME:  create_ciphering
-#   PARAMETERS:  passwd - string - used to create ciphering
-#      RETURNS:  cipher - object 
-#  DESCRIPTION:  creates a Crypt::Rijndael::MODE_CBC object with passwd as key
-#===============================================================================
-#sub create_ciphering {
-#    my ($passwd) = @_;
-#    $passwd = substr(md5_hex("$passwd") x 32, 0, 32);
-#    my $iv = substr(md5_hex('GONICUS GmbH'),0, 16);
-#
-#    my $my_cipher = Crypt::Rijndael->new($passwd , Crypt::Rijndael::MODE_CBC());
-#    $my_cipher->set_iv($iv);
-#    return $my_cipher;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  encrypt_msg
-#   PARAMETERS:  msg - string - message to encrypt
-#                my_cipher - ref - reference to a Crypt::Rijndael object
-#      RETURNS:  crypted_msg - string - crypted message
-#  DESCRIPTION:  crypts the incoming message with the Crypt::Rijndael module
-#===============================================================================
-#sub encrypt_msg {
-#    my ($msg, $my_cipher) = @_;
-#    if(not defined $my_cipher) { print "no cipher object\n"; }
-#    $msg = "\0"x(16-length($msg)%16).$msg;
-#    my $crypted_msg = $my_cipher->encrypt($msg);
-#    chomp($crypted_msg = &encode_base64($crypted_msg));
-#    return $crypted_msg;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  decrypt_msg
-#   PARAMETERS:  crypted_msg - string - message to decrypt
-#                my_cipher - ref - reference to a Crypt::Rijndael object
-#      RETURNS:  msg - string - decrypted message
-#  DESCRIPTION:  decrypts the incoming message with the Crypt::Rijndael module
-#===============================================================================
-#sub decrypt_msg {
-#    my ($crypted_msg, $my_cipher) = @_ ;
-#    $crypted_msg = &decode_base64($crypted_msg);
-#    my $msg = $my_cipher->decrypt($crypted_msg); 
-#    $msg =~ s/^\0*//g;
-#    return $msg;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  create_xml_hash
-#   PARAMETERS:  header - string - message header (required)
-#                source - string - where the message come from (required)
-#                target - string - where the message should go to (required)
-#                [header_value] - string - something usefull (optional)
-#      RETURNS:  hash - hash - nomen est omen
-#  DESCRIPTION:  creates a key-value hash, all values are stored in a array
-#===============================================================================
-#sub create_xml_hash {
-#    my ($header, $source, $target, $header_value) = @_ ;
-#    
-#    if (not defined $header || not defined $source || not defined $target) {
-#        daemon_log("ERROR: create_xml_hash function is invoked with uncompleted parameters", 7);
-#    }
-#
-#    my $hash = {
-#            header => [$header],
-#            source => [$source],
-#            target => [$target],
-#            $header => [$header_value],
-#    };
-#    #daemon_log("create_xml_hash:", 7),
-#    #chomp(my $tmp = Dumper $hash);
-#    #daemon_log("\t$tmp\n", 7);
-#    return $hash
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  create_xml_string
-#   PARAMETERS:  xml_hash - hash - hash from function create_xml_hash
-#      RETURNS:  xml_string - string - xml string representation of the hash
-#  DESCRIPTION:  transform the hash to a string using XML::Simple module
-#===============================================================================
-#sub create_xml_string {
-#    my ($xml_hash) = @_ ;
-#    my $xml_string = $xml->XMLout($xml_hash, RootName => 'xml');
-#    #$xml_string =~ s/[\n]+//g;
-#    return $xml_string;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  add_content2xml_hash
-#   PARAMETERS:  xml_ref - ref - reference to a hash from function create_xml_hash
-#                element - string - key for the hash
-#                content - string - value for the hash
-#      RETURNS:  nothing 
-#  DESCRIPTION:  add key-value pair to xml_ref, if key alread exists, then append value to list
-#===============================================================================
-#sub add_content2xml_hash {
-#    my ($xml_ref, $element, $content) = @_;
-#    if(not exists $$xml_ref{$element} ) {
-#        $$xml_ref{$element} = [];
-#    }
-#    my $tmp = $$xml_ref{$element};
-#    push(@$tmp, $content);
-#    return;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  get_content_from_xml_hash
-#   PARAMETERS:  xml_ref - ref - reference of the xml hash
-#                element - string - key of the value you want
-#      RETURNS:  value - string - if key is either header, target or source
-#                value - list - for all other keys in xml hash
-#  DESCRIPTION:  
-#===============================================================================
-#sub get_content_from_xml_hash {
-#    my ($xml_ref, $element) = @_;
-#    my $result = $xml_ref->{$element};
-#    if( $element eq "header" || $element eq "target" || $element eq "source") {
-#        return @$result[0];
-#    }
-#    return @$result;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  open_socket
-#   PARAMETERS:  PeerAddr - string - something like 192.168.1.1 or 192.168.1.1:10000
-#                [PeerPort] - string - necessary if port not appended by PeerAddr
-#      RETURNS:  socket - IO::Socket::INET
-#  DESCRIPTION:  open a socket to PeerAddr 
-#===============================================================================
-#sub open_socket {
-#    my ($PeerAddr, $PeerPort) = @_ ;
-#    if(defined($PeerPort)){
-#        $PeerAddr = $PeerAddr.":".$PeerPort;
-#    }
-#    my $socket;
-#    $socket = new IO::Socket::INET(PeerAddr => $PeerAddr ,
-#            Porto => "tcp" ,
-#            Type => SOCK_STREAM,
-#            Reuse => 1,
-#            Timeout => 5,
-#            );
-#    if(not defined $socket) {
-#        return;
-#    }
-#    return $socket;
-#}
-
-
 #===  FUNCTION  ================================================================
 #         NAME:  read_from_socket
 #   PARAMETERS:  socket - fh - filehandel to read from  
@@ -873,99 +710,6 @@ sub read_from_socket {
 }
 
 
-#===  FUNCTION  ================================================================
-#         NAME:  send_msg_hash2address
-#   PARAMETERS:  msg_hash - hash - xml_hash created with function create_xml_hash
-#                PeerAddr string - socket address to send msg
-#                PeerPort string - socket port, if not included in socket address
-#      RETURNS:  nothing
-#  DESCRIPTION:  ????
-#===============================================================================
-#sub send_msg_hash2address {
-#    my ($msg_hash, $address) = @_ ;
-#
-#    # fetch header for logging
-#    my $header = &get_content_from_xml_hash($msg_hash, "header");
-#
-#    # generate xml string
-#    my $msg_xml = &create_xml_string($msg_hash);
-#
-#    # fetch the appropriated passwd from hash
-#    my $passwd = $known_daemons->{$address}->{passwd};
-#
-#    # create a ciphering object
-#    my $act_cipher = &create_ciphering($passwd);
-#
-#    # encrypt xml msg
-#    my $crypted_msg = &encrypt_msg($msg_xml, $act_cipher);
-#
-#    # open socket
-#    my $socket = &open_socket($address);
-#    if(not defined $socket){
-#        daemon_log("ERROR: cannot send '$header'-msg to $address , server not reachable", 1);
-#        return;
-#    }
-#
-#    # send xml msg
-#    print $socket $crypted_msg."\n";
-#
-#    close $socket;
-#    daemon_log("send '$header'-msg to $address", 5);
-#    daemon_log("crypted_msg:\n\t$crypted_msg", 7);
-#    return;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  send_msg_hash2all
-#   PARAMETERS:  msg_hash - hash - xml_hash created with function create_xml_hash
-#      RETURNS:  nothing
-#  DESCRIPTION:  send msg_hash to all registered daemons
-#===============================================================================
-#sub send_msg_hash2all {
-#    my ($msg_hash) = @_;
-#
-#    # fetch header for logging
-#    my $header = &get_content_from_xml_hash($msg_hash, "header");
-#
-#    # generate xml string
-#    my $msg_xml = &create_xml_string($msg_hash);
-#
-#    # fetch a list of all target addresses 
-#    my @targets = keys(%$known_daemons);
-#
-#    # itterates through the list an send each the msg
-#    foreach my $target (@targets) {
-#        if($target eq $bus_address) {next};   # do not send msg to bus
-#
-#        # fetch the appropriated passwd
-#        my $passwd = $known_daemons->{$target}->{passwd};
-#
-#        # create ciphering object
-#        my $act_cipher = &create_ciphering($passwd);
-#
-#        # encrypt xml msg
-#        my $crypted_msg = &encrypt_msg($msg_xml, $act_cipher);
-#
-#        # open socket
-#        my $socket = &open_socket($target);
-#        if(not defined $socket){
-#            daemon_log("ERROR: cannot open socket to $target , server not reachable", 1);
-#            &update_known_daemons_entry(hostname=>$target, status=>"down");
-#            next;
-#        }
-#
-#        # send xml msg
-#        print $socket $crypted_msg."\n";
-#
-#        close $socket;
-#        daemon_log("send '$header'-msg to $target", 5);
-#        daemon_log("crypted_msg:\n\t$crypted_msg", 7);
-#    }
-#    return;
-#}
-
-
 #===  FUNCTION  ================================================================
 #         NAME:  here_i_am
 #   PARAMETERS:  msg_hash - hash - hash from function create_xml_hash
@@ -994,10 +738,10 @@ sub here_i_am {
     &send_msg_hash2address($out_hash, $source, $bus_passwd);
 
     # change hostkey, reason
-    my $update_hash = { table=>'bus_known_server' };
-    $update_hash->{where} = [ { hostname=>[$source] } ];
-    $update_hash->{update} = [ {  hostkey=>[$new_key] } ];
-    $bus_known_server_db->update_dbentry($update_hash);
+    my $where_str= " WHERE hostname='$source'";
+    my $update_str= " SET hostkey='$new_key'";
+    my $sql_statement= "UPDATE bus_known_server $update_str $where_str";
+    $bus_known_server_db->update_dbentry($sql_statement);
 
     return;
 }
@@ -1012,11 +756,11 @@ sub here_i_am {
 sub confirm_new_passwd {
     my ($msg_hash) = @_ ;
     my $source = @{$msg_hash->{source}}[0];
+    my $sql_statement= "UPDATE bus_known_server ".
+        "SET status='key_confirmed' ".
+        "WHERE hostname='$source' ";
 
-    my $update_hash = { table=>'bus_known_server' };
-    $update_hash->{where} = [ { hostname=>[$source] } ];
-    $update_hash->{update} = [ { status=>['key_confirmed'] } ];
-    $bus_known_server_db->update_dbentry($update_hash);
+    $bus_known_server_db->update_dbentry($sql_statement);
 
     return;
 }
@@ -1033,15 +777,13 @@ sub ping {
     my $header = @{$msg_hash->{header}}[0];
     my $source = @{$msg_hash->{source}}[0];
 
-    my $update_hash = { table=>'bus_known_server',
-        where=> [ { hostname=>[$source] } ], 
-        update=> [ { status=>$header } ],
-    };
-    $bus_known_server_db->update_dbentry($update_hash);
+    my $sql_statement= "UPDATE bus_known_server SET status='$header' WHERE hostname='$source'";
+    $bus_known_server_db->update_dbentry($sql_statement);
 
     my $out_hash = &create_xml_hash("got_ping", $bus_address, $source);
     
-    my $res = $bus_known_server_db->select_dbentry( { table=>'bus_known_server', hostname=>$source } );
+    $sql_statement= "SELECT * FROM bus_known_server WHERE hostname='$source'";
+    my $res = $bus_known_server_db->select_dbentry( $sql_statement );
     my $hostkey = $res->{1}->{hostkey};
     &send_msg_hash2address($out_hash, $source, $hostkey);
 
@@ -1049,21 +791,6 @@ sub ping {
 }
 
 
-#===  FUNCTION  ================================================================
-#         NAME:  make ping
-#   PARAMETERS:  address - string - address which should be pinged
-#      RETURNS:  nothing
-#  DESCRIPTION:  send ping message to address
-#===============================================================================
-#sub make_ping {
-#    my ($address) = @_;
-#    daemon_log("ping:$address\n", 1);
-#    my $out_hash = &create_xml_hash("ping", "$bus_ip:$bus_port", $address);
-#    &send_msg_hash2address($out_hash, $address);
-#    return;
-#}
-
-
 #===  FUNCTION  ================================================================
 #         NAME:  got_ping
 #   PARAMETERS:  msg_hash - hash - hash from function create_xml_hash
@@ -1073,12 +800,9 @@ sub ping {
 sub got_ping {
     my ($msg_hash) = @_;
     my $source = @{$msg_hash->{source}}[0];
-
-    my $update_hash = { table=>'bus_known_server',
-        where=> [ { hostname=>[$source] } ], 
-        update=> [ { status=>'got_ping' } ],
-    };
-    $bus_known_server_db->update_dbentry($update_hash);
+    
+    my $sql_statement= "UPDATE bus_known_server SET status='got_ping' WHERE hostname='$source'";
+    $bus_known_server_db->update_dbentry($sql_statement);
 
     return;
 }
@@ -1095,8 +819,9 @@ sub new_client {
     my $source = @{$msg_hash->{source}}[0];
     my $header = @{$msg_hash->{header}}[0];
     my $new_client = @{$msg_hash->{$header}}[0];
-    
-    my $res = $bus_known_server_db->select_dbentry( { table=>'bus_known_server', hostname=>$source } );
+    my $sql_statement= "SELECT * FROM bus_known_server WHERE hostname='$source'";
+    my $res = $bus_known_server_db->select_dbentry( $sql_statement );
     my $clients = $res->{1}->{clients};
 
     # if host has alread more clients, than just append
@@ -1106,140 +831,12 @@ sub new_client {
         $clients = $new_client;
     }
 
-    my $update_hash =  { table=>'bus_known_server',
-        where=>[ {hostname=>[$source] } ],
-        update=>[ {clients=>[$clients] } ],    
-    };
-
-    $bus_known_server_db->update_dbentry( $update_hash );
+    $sql_statement= "UPDATE bus_known_server SET clients='$clients' WHERE hostname='$source'";
+    $bus_known_server_db->update_dbentry( $sql_statement );
     return;
 }
 
 
-#===  FUNCTION  ================================================================
-#         NAME:  delete_client
-#   PARAMETERS:  msg_hash - hash - hash from function create_xml_hash
-#      RETURNS:  nothing
-#  DESCRIPTION:  process this incoming message
-#===============================================================================
-#sub delete_client {
-#    my ($msg_hash) = @_ ;
-#    my $source = &get_content_from_xml_hash($msg_hash, "source");
-#    my $header = &get_content_from_xml_hash($msg_hash, "header");
-#    my $del_client = (&get_content_from_xml_hash($msg_hash, $header))[0];
-#   
-#    if (not exists $known_daemons->{$source}->{$del_client}) {
-#        daemon_log
-#    }
-#    delete $known_daemons->{$source}->{$del_client};
-#    
-#    return;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  print_known_daemons_hash
-#   PARAMETERS:  nothing
-#      RETURNS:  nothing
-#  DESCRIPTION:  nome est omen
-#===============================================================================
-#sub print_known_daemons_hash {
-#    my ($tmp) = @_;
-#    print "####################################\n";
-#    print "# status of known_daemons\n";
-#    my $hosts;
-#    my $host_hash;
-#    $shmkh->shlock(LOCK_EX);
-#    my @hosts = keys %$known_daemons;
-#    foreach my $host (@hosts) {
-#        my $status = $known_daemons->{$host}->{status} ;
-#        my $passwd = $known_daemons->{$host}->{passwd};
-#        my $timestamp = $known_daemons->{$host}->{timestamp};
-#        my @clients = keys %{$known_daemons->{$host}->{clients}};
-#        my $client_string = join(", ", @clients);
-#        print "$host\n";
-#        print "\tstatus:    $status\n";
-#        print "\tpasswd:    $passwd\n";
-#        print "\ttimestamp: $timestamp\n";
-#        print "\tclients:   $client_string\n";
-#        
-#    }
-#    $shmkh->shunlock(LOCK_EX);
-#    print "####################################\n\n";
-#    return;
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  create_known_daemons_entry
-#   PARAMETERS:  hostname - string - ip address and port of host
-#      RETURNS:  nothing
-#  DESCRIPTION:  nome est omen
-#===============================================================================
-#sub create_known_daemons_entry {
-#    my ($hostname) = @_;
-#    $shmkh->shlock(LOCK_EX);
-#    $known_daemons->{$hostname} = {};
-#    $known_daemons->{$hostname}->{status} = "none";
-#    $known_daemons->{$hostname}->{passwd} = "none";
-#    $known_daemons->{$hostname}->{timestamp} = "none";
-#    $known_daemons->{$hostname}->{clients} = {};
-#    $shmkh->shunlock(LOCK_EX); 
-#    return;  
-#}
-
-
-#===  FUNCTION  ================================================================
-#         NAME:  update_known_daemons_entry
-#   PARAMETERS:  hostname - string - ip address and port of host (required)
-#                status - string - (optional)
-#                passwd - string - (optional)
-#                client - string - ip address and port of client (optional)
-#      RETURNS:  nothing
-#  DESCRIPTION:  nome est omen and updates each time the timestamp of hostname
-#===============================================================================
-#sub update_known_daemons_entry {
-#    my $arg = {
-#        hostname => undef, status => undef, passwd => undef,
-#        client => undef,
-#        @_ };
-#    my $hostname = $arg->{hostname};
-#    my $status = $arg->{status};
-#    my $passwd = $arg->{passwd};
-#    my $client = $arg->{client};
-#
-#    if (not defined $hostname) {
-#        daemon_log("ERROR: function add_content2known_daemons is not invoked with requiered parameter 'hostname'", 1);
-#        return;
-#    }
-#
-#    my ($seconds, $minutes, $hours, $monthday, $month,
-#    $year, $weekday, $yearday, $sommertime) = localtime(time);
-#    $hours = $hours < 10 ? $hours = "0".$hours : $hours;
-#    $minutes = $minutes < 10 ? $minutes = "0".$minutes : $minutes;
-#    $seconds = $seconds < 10 ? $seconds = "0".$seconds : $seconds;
-#    $month+=1;
-#    $month = $month < 10 ? $month = "0".$month : $month;
-#    $monthday = $monthday < 10 ? $monthday = "0".$monthday : $monthday;
-#    $year+=1900;
-#    my $t = "$year$month$monthday$hours$minutes$seconds";
-#
-#    $shmkh->shlock(LOCK_EX);
-#    if (defined $status) {
-#        $known_daemons->{$hostname}->{status} = $status;
-#    }
-#    if (defined $passwd) {
-#        $known_daemons->{$hostname}->{passwd} = $passwd;
-#    }
-#    if (defined $client) {
-#        $known_daemons->{$hostname}->{clients}->{$client} = "";
-#    }
-#    $known_daemons->{$hostname}->{timestamp} = $t;
-#    $shmkh->shunlock(LOCK_EX);
-#    return;
-#}
-
-
 #==== MAIN = main ==============================================================
 
 #  parse commandline options
@@ -1262,26 +859,31 @@ if(-e $log_file ) { unlink $log_file }
 daemon_log(" ", 1);
 daemon_log("$0 started!", 1);
 
+# delete old DBsqlite lock files
+system('rm -f /tmp/gosa_si_lock*');
+
+# forward error messages to logfile
+if( ! $foreground ) {
+       open(STDERR, '>>', $log_file);
+       open(STDOUT, '>>', $log_file);
+}
+
 # Just fork, if we"re not in foreground mode
 if( ! $foreground ) {
        chdir '/'                 or die "Can't chdir to /: $!";
-       open STDIN, '/dev/null'   or die "Can't read /dev/null: $!";
-       open STDOUT, '>>/dev/null' or die "Can't write to /dev/null: $!";
-       open STDERR, '>>/dev/null' or die "Can't write to /dev/null: $!";
-       defined($pid = fork)   or die "Can't fork: $!";
-       exit if $pid;
+       $pid = fork;
        setsid                    or die "Can't start a new session: $!";
        umask 0;
+} else { 
+    $pid = $$; 
 }
 
-else { $pid = $$; }
-
 # Do something useful - put our PID into the pid_file
 if( 0 != $pid ) {
     open( LOCK_FILE, ">$pid_file" );
     print LOCK_FILE "$pid\n";
     close( LOCK_FILE );
-    if( !$foreground ) { exit( 0 ) };
+    if( ! $foreground ) { exit( 0 ) };
 }
 
 # connect to bus_known_server_db
@@ -1293,7 +895,6 @@ $bus_known_server_db->create_table('bus_known_server', \@server_col_names);
 # detect own ip and mac address
 $network_interface= &get_interface_for_ip($bus_ip);
 $bus_mac_address= &get_mac($network_interface);
-
 daemon_log("bus ip address detected: $bus_ip", 1);
 daemon_log("bus mac address detected: $bus_mac_address", 1);