X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fgosa-si-server;h=e0c98a709bc1ac622436b37aa2662d207deb066e;hb=4b94073c5b43692a6d862046829d90f11416cefb;hp=02fcb8310a2e61c8471456e82dea631b8601b351;hpb=49eaf335cf4e5ff433393ca466203a9b5451167a;p=gosa.git diff --git a/gosa-si/gosa-si-server b/gosa-si/gosa-si-server index 02fcb8310..e0c98a709 100755 --- a/gosa-si/gosa-si-server +++ b/gosa-si/gosa-si-server @@ -48,13 +48,20 @@ use File::Basename; use File::Find; use File::Copy; use File::Path; -use GOSA::DBmysql; use GOSA::GosaSupportDaemon; use POE qw(Component::Server::TCP Wheel::Run Filter::Reference); use Net::LDAP; use Net::LDAP::Util qw(:escape); use Time::HiRes qw( usleep); +my $db_module = "DBsqlite"; +{ +no strict "refs"; +require ("GOSA/".$db_module.".pm"); +("GOSA/".$db_module)->import; +daemon_log("0 INFO: importing database module '$db_module'", 1); +} + my $modules_path = "/usr/lib/gosa-si/modules"; use lib "/usr/lib/gosa-si/modules"; @@ -528,7 +535,7 @@ sub check_key_and_xml_validity { if ($msg =~ //i){ $msg =~ s/\s+/ /g; # just for better daemon_log - daemon_log("$session_id DEBUG: decrypted_msg: \n$msg", 8); + daemon_log("$session_id DEBUG: decrypted_msg: \n$msg", 9); $msg_hash = $xml->XMLin($msg, ForceArray=>1); ############## @@ -594,8 +601,18 @@ sub check_outgoing_xml_validity { if( 0 == length $source) { die 'source has length 0'; } + + # Check if source contains hostname instead of ip address + if(not $source =~ /^[a-z0-9\.]+:\d+$/i) { + my ($hostname,$port) = split(/:/, $source); + my $ip_address = inet_ntoa(scalar gethostbyname($hostname)); + if(defined($ip_address) && $ip_address =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ && $port =~ /^\d+$/) { + # Write ip address to $source variable + $source = "$ip_address:$port"; + } + } unless( $source =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+$/ || - $source =~ /^GOSA$/i ) { + $source =~ /^GOSA$/i) { die "source '$source' is neither a complete ip-address with port nor 'GOSA'"; } @@ -656,6 +673,7 @@ sub input_from_known_server { $msg = $tmp_msg; $msg_hash = $tmp_msg_hash; $module = "ServerPackages"; + daemon_log("$session_id DEBUG: check_key_and_xml_validity... ok", 7); last; } } @@ -693,6 +711,7 @@ sub input_from_known_client { } else { $module = "ClientPackages"; + daemon_log("$session_id DEBUG: check_key_and_xml_validity... ok", 7); last; } } @@ -732,6 +751,7 @@ sub input_from_unknown_host { next; } else { $module = $mod; + daemon_log("$session_id DEBUG: check_key_and_xml_validity... ok", 7); last; } } @@ -1025,10 +1045,9 @@ sub msg_to_decrypt { # hole neue msg aus @msgs_to_decrypt my $next_msg = shift @msgs_to_decrypt; - # entschlüssle sie - # msg is from a new client or gosa ($msg, $msg_hash, $module) = &input_from_unknown_host($next_msg, $session_id); + # msg is from a gosa-si-server if(( !$msg ) || ( !$msg_hash ) || ( !$module )){ ($msg, $msg_hash, $module) = &input_from_known_server($next_msg, $heap->{'remote_ip'}, $session_id); @@ -1241,6 +1260,7 @@ sub msg_to_decrypt { if ( $not_found_in_foreign_clients_db && $not_found_in_known_server_db && $not_found_in_known_clients_db) { + &daemon_log("$session_id DEBUG: target is not in foreign_clients_db, known_server_db or known_clients_db, maybe it is a complete new one -> process here", 7); my $res = $incoming_db->add_dbentry( {table=>$incoming_tn, primkey=>[], headertag=>$header, @@ -1251,7 +1271,6 @@ sub msg_to_decrypt { sessionid=>$session_id, } ); $done = 1; - &daemon_log("$session_id DEBUG: target is not in foreign_clients_db, known_server_db or known_clients_db, maybe it is a complete new one -> process here", 7); } @@ -2044,7 +2063,7 @@ sub watch_for_next_tasks { my $sql = "SELECT * FROM $incoming_tn"; my $res = $incoming_db->select_dbentry($sql); - + while ( my ($hit_num, $hit) = each %$res) { my $headertag = $hit->{'headertag'}; if ($headertag =~ /^answer_(\d+)/) { @@ -3164,74 +3183,113 @@ daemon_log("$0 started!", 1); daemon_log("status: $server_status", 1); daemon_log($server_status_hash->{$server_status}.": $server_revision", 1); -# connect to incoming_db -unlink($incoming_file_name); -$incoming_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$incoming_db->create_table($incoming_tn, \@incoming_col_names); +{ + no strict "refs"; -# connect to gosa-si job queue -unlink($job_queue_file_name); ## just for debugging -$job_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$job_db->create_table($job_queue_tn, \@job_queue_col_names); -chmod(0660, $job_queue_file_name); -chown($root_uid, $adm_gid, $job_queue_file_name); + if ($db_module eq "DBmysql") { + # connect to incoming_db + $incoming_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -# connect to known_clients_db -unlink($known_clients_file_name); ## just for debugging -$known_clients_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$known_clients_db->create_table($known_clients_tn, \@known_clients_col_names); -chmod(0660, $known_clients_file_name); -chown($root_uid, $adm_gid, $known_clients_file_name); + # connect to gosa-si job queue + $job_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -# connect to foreign_clients_db -unlink($foreign_clients_file_name); -$foreign_clients_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$foreign_clients_db->create_table($foreign_clients_tn, \@foreign_clients_col_names); -chmod(0660, $foreign_clients_file_name); -chown($root_uid, $adm_gid, $foreign_clients_file_name); + # connect to known_clients_db + $known_clients_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -# connect to known_server_db -unlink($known_server_file_name); -$known_server_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$known_server_db->create_table($known_server_tn, \@known_server_col_names); -chmod(0660, $known_server_file_name); -chown($root_uid, $adm_gid, $known_server_file_name); + # connect to foreign_clients_db + $foreign_clients_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -# connect to login_usr_db -unlink($login_users_file_name); -$login_users_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$login_users_db->create_table($login_users_tn, \@login_users_col_names); -chmod(0660, $login_users_file_name); -chown($root_uid, $adm_gid, $login_users_file_name); + # connect to known_server_db + $known_server_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -# connect to fai_server_db -unlink($fai_server_file_name); -$fai_server_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$fai_server_db->create_table($fai_server_tn, \@fai_server_col_names); -chmod(0660, $fai_server_file_name); -chown($root_uid, $adm_gid, $fai_server_file_name); + # connect to login_usr_db + $login_users_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -# connect to fai_release_db -unlink($fai_release_file_name); -$fai_release_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$fai_release_db->create_table($fai_release_tn, \@fai_release_col_names); -chmod(0660, $fai_release_file_name); -chown($root_uid, $adm_gid, $fai_release_file_name); + # connect to fai_server_db + $fai_server_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -# connect to packages_list_db -#unlink($packages_list_file_name); -unlink($packages_list_under_construction); -$packages_list_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -$packages_list_db->create_table($packages_list_tn, \@packages_list_col_names); -chmod(0660, $packages_list_file_name); -chown($root_uid, $adm_gid, $packages_list_file_name); + # connect to fai_release_db + $fai_release_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); + + # connect to packages_list_db + $packages_list_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); -# connect to messaging_db -unlink($messaging_file_name); -$messaging_db = GOSA::DBmysql->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); + # connect to messaging_db + $messaging_db = ("GOSA::".$db_module)->new($main::mysql_database, $main::mysql_host, $main::mysql_username, $main::mysql_password); + + } elsif ($db_module eq "DBsqlite") { + # connect to incoming_db + unlink($incoming_file_name); + $incoming_db = GOSA::DBsqlite->new($incoming_file_name); + + # connect to gosa-si job queue + unlink($job_queue_file_name); ## just for debugging + $job_db = GOSA::DBsqlite->new($job_queue_file_name); + chmod(0660, $job_queue_file_name); + chown($root_uid, $adm_gid, $job_queue_file_name); + + # connect to known_clients_db + unlink($known_clients_file_name); ## just for debugging + $known_clients_db = GOSA::DBsqlite->new($known_clients_file_name); + chmod(0660, $known_clients_file_name); + chown($root_uid, $adm_gid, $known_clients_file_name); + + # connect to foreign_clients_db + unlink($foreign_clients_file_name); + $foreign_clients_db = GOSA::DBsqlite->new($foreign_clients_file_name); + chmod(0660, $foreign_clients_file_name); + chown($root_uid, $adm_gid, $foreign_clients_file_name); + + # connect to known_server_db + unlink($known_server_file_name); + $known_server_db = GOSA::DBsqlite->new($known_server_file_name); + chmod(0660, $known_server_file_name); + chown($root_uid, $adm_gid, $known_server_file_name); + + # connect to login_usr_db + unlink($login_users_file_name); + $login_users_db = GOSA::DBsqlite->new($login_users_file_name); + chmod(0660, $login_users_file_name); + chown($root_uid, $adm_gid, $login_users_file_name); + + # connect to fai_server_db + unlink($fai_server_file_name); + $fai_server_db = GOSA::DBsqlite->new($fai_server_file_name); + chmod(0660, $fai_server_file_name); + chown($root_uid, $adm_gid, $fai_server_file_name); + + # connect to fai_release_db + unlink($fai_release_file_name); + $fai_release_db = GOSA::DBsqlite->new($fai_release_file_name); + chmod(0660, $fai_release_file_name); + chown($root_uid, $adm_gid, $fai_release_file_name); + + # connect to packages_list_db + #unlink($packages_list_file_name); + unlink($packages_list_under_construction); + $packages_list_db = GOSA::DBsqlite->new($packages_list_file_name); + chmod(0660, $packages_list_file_name); + chown($root_uid, $adm_gid, $packages_list_file_name); + + # connect to messaging_db + unlink($messaging_file_name); + $messaging_db = GOSA::DBsqlite->new($messaging_file_name); + chmod(0660, $messaging_file_name); + chown($root_uid, $adm_gid, $messaging_file_name); + } +} + +# Creating tables $messaging_db->create_table($messaging_tn, \@messaging_col_names); -chmod(0660, $messaging_file_name); -chown($root_uid, $adm_gid, $messaging_file_name); +$packages_list_db->create_table($packages_list_tn, \@packages_list_col_names); +$fai_release_db->create_table($fai_release_tn, \@fai_release_col_names); +$fai_server_db->create_table($fai_server_tn, \@fai_server_col_names); +$login_users_db->create_table($login_users_tn, \@login_users_col_names); +$known_server_db->create_table($known_server_tn, \@known_server_col_names); +$foreign_clients_db->create_table($foreign_clients_tn, \@foreign_clients_col_names); +$known_clients_db->create_table($known_clients_tn, \@known_clients_col_names); +$incoming_db->create_table($incoming_tn, \@incoming_col_names); +$job_db->create_table($job_queue_tn, \@job_queue_col_names); # create xml object used for en/decrypting