Code

Added workaround for some ipv6 setups.
[gosa.git] / gosa-si / modules / ServerPackages.pm
index 1aa8db2a82beb1f73298853dcfa16c31b80f61ee..884b8f7ffdcab166588d17d6518de15da1a054b2 100644 (file)
@@ -3,7 +3,7 @@ package ServerPackages;
 use Exporter;
 @ISA = ("Exporter");
 
-# Each module has to have a function 'process_incoming_msg'. This function works as a interface to gosa-sd and recieves the msg hash from gosa-sd. 'process_incoming_function checks, wether it has a function to process the incoming msg and forward the msg to it. 
+# Each module has to have a function 'process_incoming_msg'. This function works as a interface to gosa-sd and receives the msg hash from gosa-sd. 'process_incoming_function checks, wether it has a function to process the incoming msg and forward the msg to it. 
 
 
 use strict;
@@ -58,9 +58,6 @@ my %cfg_defaults =
 $network_interface= &get_interface_for_ip($server_ip);
 $server_mac_address= &get_mac($network_interface); 
 
-&main::daemon_log("server ip address detected: $server_ip", 1);
-&main::daemon_log("server mac address detected: $server_mac_address", 1);
-
 # complete addresses
 my $server_address = "$server_ip:$server_port";
 my $bus_address = "$bus_ip:$bus_port";
@@ -68,29 +65,11 @@ my $bus_address = "$bus_ip:$bus_port";
 # create general settings for this module
 my $xml = new XML::Simple();
 
-# open server socket
-if($server_activ eq "on"){
-    &main::daemon_log(" ", 1);
-    $server = IO::Socket::INET->new(LocalPort => $server_port,
-            Type => SOCK_STREAM,
-            Reuse => 1,
-            Listen => 20,
-            ); 
-    if(not defined $server){
-        &main::daemon_log("cannot be a tcp server at $server_port : $@");
-        die;
-    } else {
-        &main::daemon_log("start server: $server_address", 1);
-    }
-}
-
-
 # register at bus
 if ($main::no_bus > 0) {
     $bus_activ = "off"
 }
 if($bus_activ eq "on") {
-    &main::daemon_log(" ", 1);
     &register_at_bus();
 }
 
@@ -280,30 +259,6 @@ sub get_ip {
        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,
-#            Timeout => 5,
-#            );
-#    if(not defined $socket) {
-#        return;
-#    }
-#    &main::daemon_log("open_socket to: $PeerAddr", 7);
-#    return $socket;
-#}
 
 #===  FUNCTION  ================================================================
 #         NAME:  register_at_bus
@@ -344,11 +299,12 @@ sub process_incoming_msg {
         &main::daemon_log("function 'process_incoming_msg': got no msg", 7);
     }
 
-    &main::daemon_log("ServerPackages: incoming msg: \n$crypted_msg", 8);
-
     $crypted_msg =~ /^([\s\S]*?)\.(\d{1,3}?)\.(\d{1,3}?)\.(\d{1,3}?)\.(\d{1,3}?)$/;
     $crypted_msg = $1;
-    my $host = sprintf("%s.%s.%s.%s", $2, $3, $4, $5);
+       my $host="0.0.0.0";
+       if(defined $2 && defined $3 && defined $4 && defined $5) {
+               $host = sprintf("%s.%s.%s.%s", $2, $3, $4, $5);
+       }
 
     my $msg;
     my $msg_hash;
@@ -362,7 +318,7 @@ sub process_incoming_msg {
     &main::daemon_log("ServerPackage: host_key: $host_key", 7);
     eval{
         my $key_cipher = &create_ciphering($host_key);
-        $msg = &decrypt_msg($crypted_msg, $key_cipher);
+               $msg = &decrypt_msg($crypted_msg, $key_cipher);
         $msg_hash = &transform_msg2hash($msg);
     };
     if($@) {
@@ -376,9 +332,12 @@ sub process_incoming_msg {
 
     # check wether incoming msg is from a known_server
     if( not defined $msg ) {
-        my $query_res = $main::known_server_db->select_dbentry( {table=>'known_server'} ); 
+        my $sql_statement= "SELECT * FROM known_server";
+        my $query_res = $main::known_server_db->select_dbentry( $sql_statement ); 
+
         while( my ($hit_num, $hit) = each %{ $query_res } ) {  
             $host_name = $hit->{hostname};
+
             if( not $host_name =~ "^$host") {
                 next;
             }
@@ -405,7 +364,9 @@ sub process_incoming_msg {
 
     # check wether incoming msg is from a known_client
     if( not defined $msg ) {
-        my $query_res = $main::known_clients_db->select_dbentry( {table=>'known_clients'} ); 
+        #my $query_res = $main::known_clients_db->select_dbentry( {table=>'known_clients'} ); 
+        my $sql_statement= "SELECT * FROM known_clients";
+        my $query_res = $main::known_clients_db->select_dbentry( $sql_statement ); 
         while( my ($hit_num, $hit) = each %{ $query_res } ) {    
             $host_name = $hit->{hostname};
             if( not $host_name =~ "^$host") {
@@ -434,7 +395,7 @@ sub process_incoming_msg {
 
     if( not defined $msg ) {
         &main::daemon_log("WARNING: ServerPackage do not understand the message:", 5);
-        &main::daemon_log("$@", 7);
+        &main::daemon_log("$@", 8);
         return;
     }
 
@@ -442,8 +403,8 @@ sub process_incoming_msg {
     my $header = @{$msg_hash->{header}}[0]; 
     my $source = @{$msg_hash->{source}}[0];
 
-    &main::daemon_log("recieve '$header' at ServerPackages from $host", 1);
-    &main::daemon_log("ServerPackages: msg to process: \n$msg", 7);
+    &main::daemon_log("receive '$header' at ServerPackages from $host", 1);
+    &main::daemon_log("ServerPackages: msg to process: \n$msg", 5);
 
     my @targets = @{$msg_hash->{target}};
     my $len_targets = @targets;
@@ -466,7 +427,8 @@ sub process_incoming_msg {
         else { 
             if ($target eq "*") {
                 # msg is for all clients
-                my $query_res = $main::known_clients_db->select_dbentry( {table=>'known_clients'} ); 
+                my $sql_statement = "SELECT * FROM known_clients";
+                my $query_res = $main::known_clients_db->select_dbentry( $sql_statement ); 
                 while( my ($hit_num, $hit) = each %{ $query_res } ) {    
                     $host_name = $hit->{hostname};
                     $host_key = $hit->{hostkey};
@@ -479,15 +441,17 @@ sub process_incoming_msg {
                 my $host_key;
 
 
-                if( not defined $host_key ) {
-                    my $query_res = $main::known_clients_db->select_dbentry( {table=>'known_clients', hostname=>$target} );
+                if( not defined $host_key ) { 
+                    my $sql_statement = "SELECT * FROM known_clients WHERE hostname='$target'";
+                    my $query_res = $main::known_clients_db->select_dbentry( $sql_statement );
                     if( 1 == keys %{$query_res} ) {
                         $host_key = $query_res->{1}->{host_key};
                     }
                 } 
 
                 if( not defined $host_key ) {
-                    my $query_res = $main::known_server_db->select_dbentry( {table=>'known_server', hostname=>$target} );
+                    my $sql_statement = "SELECT * FROM known_server WHERE hostname='$target'";
+                    my $query_res = $main::known_server_db->select_dbentry( $sql_statement );
                     if( 1 == keys %{$query_res} ) {
                         $host_key = $query_res->{1}->{host_key};
                     }
@@ -549,15 +513,14 @@ sub new_passwd {
     my $query_res;
 
     # check known_clients_db
-    $query_res = $main::known_clients_db->select_dbentry( {table=>'known_clients', hostname=>$source_name} );
+    my $sql_statement = "SELECT * FROM known_clients WHERE hostname='$source_name'";
+    $query_res = $main::known_clients_db->select_dbentry( $sql_statement );
     if( 1 == keys %{$query_res} ) {
-        my $update_hash = { table=>'known_clients' };
-        $update_hash->{where} = [ { hostname=>[$source_name] } ];
-        $update_hash->{update} = [ {
-            hostkey=>[$source_key],
-            timestamp=>[&get_time],
-        } ];
-        my $res = $main::known_clients_db->update_dbentry( $update_hash );
+        my $act_time = &get_time;
+        my $sql_statement= "UPDATE known_clients ".
+            "SET hostkey='$source_key', timestamp='$act_time' ".
+            "WHERE hostname='$source_name'";
+        my $res = $main::known_clients_db->update_dbentry( $sql_statement );
 
         my $hash = &create_xml_hash("confirm_new_passwd", $server_address, $source_name);
         &send_msg_hash2address($hash, $source_name, $source_key);
@@ -565,15 +528,14 @@ sub new_passwd {
     }
 
     # check known_server_db
-    $query_res = $main::known_server_db->select_dbentry( {table=>'known_server', hostname=>$source_name } );
+    $sql_statement = "SELECT * FROM known_server WHERE hostname='$source_name'";
+    $query_res = $main::known_server_db->select_dbentry( $sql_statement );
     if( 1 == keys %{$query_res} ) {
-        my $update_hash = { table=>'known_server' };
-        $update_hash->{where} = [ { hostname=>[$source_name] } ];
-        $update_hash->{update} = [ {
-            hostkey=>[$source_key],
-                timestamp=>[&get_time],
-        } ];
-        my $res = $main::known_server_db->update_dbentry( $update_hash );
+        my $act_time = &get_time;
+        my $sql_statement= "UPDATE known_server ".
+            "SET hostkey='$source_key', timestamp='$act_time' ".
+            "WHERE hostname='$source_name'";
+        my $res = $main::known_server_db->update_dbentry( $sql_statement );
 
         my $hash = &create_xml_hash("confirm_new_passwd", $server_address, $source_name);
         &send_msg_hash2address($hash, $source_name, $source_key);
@@ -585,16 +547,6 @@ sub new_passwd {
 }
 
 
-sub send_msg_hash {
-    my ($hash, $host_name, $host_key);
-
-    
-    my $answer = &send_msg_hash2address($hash, $host_name, $host_key);
-    
-    return;
-}
-
-
 #===  FUNCTION  ================================================================
 #         NAME:  here_i_am
 #   PARAMETERS:  msg_hash - hash - hash from function create_xml_hash
@@ -609,10 +561,13 @@ sub here_i_am {
     my $out_hash;
 
     # number of known clients
-    my $nu_clients = keys %{ $main::known_clients_db->select_dbentry( {table=>'known_clients'} ) };
+    my $nu_clients= $main::known_clients_db->count_dbentries('known_clients');
 
     # check wether client address or mac address is already known
-    if (exists $main::known_clients->{$source}) {
+    my $sql_statement= "SELECT * FROM known_clients WHERE hostname='$source'";
+    my $db_res= $main::known_clients_db->select_dbentry( $sql_statement );
+    
+    if ( 1 == keys %{$db_res} ) {
         &main::daemon_log("WARNING: $source is already known as a client", 1);
         &main::daemon_log("WARNING: values for $source are being overwritten", 1);   
         $nu_clients --;
@@ -638,6 +593,7 @@ sub here_i_am {
     # create entry in known_clients
     my $events = @{$msg_hash->{events}}[0];
     
+
     # add entry to known_clients_db
     my $res = $main::known_clients_db->add_dbentry( {table=>'known_clients', 
                                                 primkey=>'hostname',
@@ -661,9 +617,10 @@ sub here_i_am {
     # notify registered client to bus
     if( $bus_activ eq "on") {
         # fetch actual bus key
-        my $query_res = $main::known_server_db->select_dbentry( {table=>'known_server'} );
-        my $hostkey = $query_res->{1}->{hostkey};
-        
+        my $sql_statement= "SELECT * FROM known_server WHERE status='bus'";
+        my $query_res = $main::known_server_db->select_dbentry( $sql_statement );
+        my $hostkey = $query_res->{1}->{'hostkey'};
+
         # send update msg to bus
         $out_hash = &create_xml_hash("new_client", $server_address, $bus_address, $source);
         &send_msg_hash2address($out_hash, $bus_address, $hostkey);
@@ -734,7 +691,8 @@ sub who_has_i_do {
 sub new_ldap_config {
     my ($address) = @_ ;
     
-    my $res = $main::known_clients_db->select_dbentry( { table=>'known_clients', hostname=>$address } );
+    my $sql_statement= "SELECT * FROM known_clients WHERE hostname='$address'";
+    my $res = $main::known_clients_db->select_dbentry( $sql_statement );
 
     # check hit
     my $hit_counter = keys %{$res};