X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fgosa-si-server;h=61528f048d6522cff65ef50d52481509ca95b314;hb=f37acb9b21bc6f2d6d21ce60536f9e222e001b04;hp=16dd30e1beec374b6a683e71748b2b51e9cefa64;hpb=296960061e76624c66ce4962ee8aaa4ae5cdb1ce;p=gosa.git diff --git a/gosa-si/gosa-si-server b/gosa-si/gosa-si-server index 16dd30e1b..61528f048 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"; @@ -535,7 +542,7 @@ sub check_key_and_xml_validity { # check header if( not exists $msg_hash->{'header'} ) { die "no header specified"; } my $header_l = $msg_hash->{'header'}; - if( 1 > @{$header_l} ) { die 'empty header tag'; } + if( (1 > @{$header_l}) || ( ( 'HASH' eq ref @{$header_l}[0]) && (1 > keys %{@{$header_l}[0]}) ) ) { die 'empty header tag'; } if( 1 < @{$header_l} ) { die 'more than one header specified'; } my $header = @{$header_l}[0]; if( 0 == length $header) { die 'empty string in header tag'; } @@ -544,7 +551,7 @@ sub check_key_and_xml_validity { # check source if( not exists $msg_hash->{'source'} ) { die "no source specified"; } my $source_l = $msg_hash->{'source'}; - if( 1 > @{$source_l} ) { die 'empty source tag'; } + if( (1 > @{$source_l}) || ( ( 'HASH' eq ref @{$source_l}[0]) && (1 > keys %{@{$source_l}[0]}) ) ) { die 'empty source tag'; } if( 1 < @{$source_l} ) { die 'more than one source specified'; } my $source = @{$source_l}[0]; if( 0 == length $source) { die 'source error'; } @@ -553,7 +560,7 @@ sub check_key_and_xml_validity { # check target if( not exists $msg_hash->{'target'} ) { die "no target specified"; } my $target_l = $msg_hash->{'target'}; - if( 1 > @{$target_l} ) { die 'empty target tag'; } + if( (1 > @{$target_l}) || ( ('HASH' eq ref @{$target_l}[0]) && (1 > keys %{@{$target_l}[0]}) ) ) { die 'empty target tag'; } } }; if($@) { @@ -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'"; } @@ -1028,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); @@ -3167,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 + $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); + } +} -# 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); +# 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