Code

bugfix: mac to host translation case insesitive for mac address
[gosa.git] / gosa-si / gosa-si-bus
index f920f5a5be4a1a63f59d5981670900bc9ca725c2..37d54002cfa8899372b8036ca35b34742401e97e 100755 (executable)
@@ -28,33 +28,35 @@ use Time::HiRes qw( gettimeofday );
 use POE qw(Component::Server::TCP);
 use Data::Dumper;
 use Crypt::Rijndael;
-use GOSA::DBsqlite;
-use GOSA::GosaSupportDaemon;
 use IO::Socket::INET;
 use NetAddr::IP;
 use XML::Simple;
 use MIME::Base64;
+use File::Basename;
 use Digest::MD5  qw(md5 md5_hex md5_base64);
 
+use GOSA::GosaSupportDaemon;
+use GOSA::DBsqlite;
 
 my ($cfg_file, $default_cfg_file, %cfg_defaults, $foreground, $verbose, $pid_file, $procid, $pid, $log_file,);
 my ($bus_address, $bus_key, $bus_ip, $bus_port, $bus_mac_address);
 my ($bus_known_server_db, $bus_known_server_file_name, $bus_known_clients_db, $bus_known_clients_file_name);
 my $xml;
+our $prg= basename($0);
 
 $foreground = 0 ;
 %cfg_defaults = (
 "general" => {
-    "log_file" => [\$log_file, "/var/run/".$0.".log"],
-    "pid_file" => [\$pid_file, "/var/run/".$0.".pid"],
-    "bus_known_server_file_name" => [\$bus_known_server_file_name, "/var/lib/gosa-si/gosa-si-bus_known_server.db"],
-    "bus_known_clients_file_name" => [\$bus_known_clients_file_name, "/var/lib/gosa-si/gosa-si-bus_known_clients.db"],
+    "log_file" => [\$log_file, "/var/run/".$prg.".log"],
+    "pid_file" => [\$pid_file, "/var/run/".$prg.".pid"],
     },
-"GOsa-si-bus" => {
+"bus" => {
     "key"  => [\$bus_key, "secret-bus-password"],
     "ip"   => [\$bus_ip, "0.0.0.0"],
     "port" => [\$bus_port, "20080"],
-    }, 
+    "known-servers" => [\$bus_known_server_file_name, "/var/lib/gosa-si/bus-servers.db"],
+    "known-clients" => [\$bus_known_clients_file_name, "/var/lib/gosa-si/bus-clients.db"],
+   }, 
 );
 
 #=== FUNCTIONS = functions =====================================================
@@ -173,7 +175,7 @@ sub check_pid {
 #===============================================================================
 sub usage {
     print STDERR << "EOF" ;
-usage: $0 [-hvf] [-c config]
+usage: $prg [-hvf] [-c config]
 
     -h        : this (help) message
     -c <file> : config file
@@ -213,10 +215,8 @@ sub daemon_log {
                 $month = $monthnames[$month];
                 $monthday = $monthday < 10 ? $monthday = "0".$monthday : $monthday;
                 $year+=1900;
-                my $name = $0;
-                $name =~ s/\.\///;
 
-                my $log_msg = "$month $monthday $hours:$minutes:$seconds $name $msg\n";
+                my $log_msg = "$month $monthday $hours:$minutes:$seconds $prg $msg\n";
                 print LOG_HANDLE $log_msg;
                 if( $foreground ) { 
                     print STDERR $log_msg;
@@ -468,6 +468,9 @@ sub create_passwd {
 
 sub create_ciphering {
     my ($passwd) = @_;
+       if((!defined($passwd)) || length($passwd)==0) {
+               $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());
@@ -479,10 +482,12 @@ sub create_ciphering {
 sub encrypt_msg {
     my ($msg, $key) = @_;
     my $my_cipher = &create_ciphering($key);
+    my $len;
     {
-      use bytes;
-      $msg = "\0"x(16-length($msg)%16).$msg;
+           use bytes;
+           $len= 16-length($msg)%16;
     }
+    $msg = "\0"x($len).$msg;
     $msg = $my_cipher->encrypt($msg);
     chomp($msg = &encode_base64($msg));
     # there are no newlines allowed inside msg
@@ -492,6 +497,7 @@ sub encrypt_msg {
 
 
 sub decrypt_msg {
+
     my ($msg, $key) = @_ ;
     $msg = &decode_base64($msg);
     my $my_cipher = &create_ciphering($key);
@@ -806,7 +812,7 @@ sub bus_input {
                 }
                 elsif( $target =~ /([0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2})/ ) {
                     # target is a mac address
-                    my $sql_statement = "SELECT * FROM bus_known_clients WHERE macaddress='$target'";
+                    my $sql_statement = "SELECT * FROM bus_known_clients WHERE macaddress LIKE '$target'";
                     my $query_res = $bus_known_clients_db->select_dbentry( $sql_statement );
                     if( 1 > keys(%{$query_res})) {
                         daemon_log("ERROR: there are more than one hosts in bus_known_clients_db with mac address '$target'", 1);
@@ -919,9 +925,9 @@ $SIG{CHLD} = 'IGNORE';
 
 # forward error messages to logfile
 if ( ! $foreground ) {
-       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: $!";
+  open( STDIN,  '+>/dev/null' );
+  open( STDOUT, '+>&STDIN'    );
+  open( STDERR, '+>&STDIN'    );
 }
 
 # Just fork, if we are not in foreground mode