X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-si%2Fmodules%2FGosaSupportDaemon.pm;h=a14d5def0d4621b96c32d9ade846b21e067987f7;hb=c461774e974e9866634b0bce54a6a52bfead7643;hp=219a2fde5193f0bda81941d569453c231bd2e41e;hpb=6994da4a295f9e62685b4fa06181b9231ec750f2;p=gosa.git diff --git a/gosa-si/modules/GosaSupportDaemon.pm b/gosa-si/modules/GosaSupportDaemon.pm index 219a2fde5..a14d5def0 100644 --- a/gosa-si/modules/GosaSupportDaemon.pm +++ b/gosa-si/modules/GosaSupportDaemon.pm @@ -10,12 +10,15 @@ my @functions = ( "transform_msg2hash", "get_time", "build_msg", + "db_res2xml", + "db_res2si_msg", "get_where_statement", "get_select_statement", "get_update_statement", "get_limit_statement", "get_orderby_statement", "get_dns_domains", + "get_logged_in_users", ); @EXPORT = @functions; use strict; @@ -25,6 +28,7 @@ use Crypt::Rijndael; use Digest::MD5 qw(md5 md5_hex md5_base64); use MIME::Base64; use XML::Simple; +use Data::Dumper; my $op_hash = { 'eq' => '=', @@ -33,6 +37,7 @@ my $op_hash = { 'gt' => '>', 'le' => '<=', 'lt' => '<', + 'like' => ' LIKE ', }; @@ -141,98 +146,6 @@ sub add_content2xml_hash { } -#=== 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, $key) = @_; -# my $my_cipher = &create_ciphering($key); -# { -# use bytes; -# $msg = "\0"x(16-length($msg)%16).$msg; -# } -# $msg = $my_cipher->encrypt($msg); -# chomp($msg = &encode_base64($msg)); -# # there are no newlines allowed inside msg -# $msg=~ s/\n//g; -# return $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 ($msg, $my_cipher) = @_ ; -# -# if(defined $msg && defined $my_cipher) { -# $msg = &decode_base64($msg); -# } -# $msg = $my_cipher->decrypt($msg); -# $msg =~ s/\0*//g; -# return $msg; -# my ($msg, $key) = @_ ; -# $msg = &decode_base64($msg); -# my $my_cipher = &create_ciphering($key); -# $msg = $my_cipher->decrypt($msg); -# $msg =~ s/\0*//g; -# return $msg; -#} - - -#=== 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); -# -# #daemon_log("iv: $iv", 7); -# #daemon_log("key: $passwd", 7); -# my $my_cipher = Crypt::Rijndael->new($passwd , Crypt::Rijndael::MODE_CBC()); -# $my_cipher->set_iv($iv); -# return $my_cipher; -#} - - -#=== 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; -# } -# &daemon_log("open_socket: $PeerAddr", 7); -# return $socket; -#} - - sub get_time { my ($seconds, $minutes, $hours, $monthday, $month, $year, $weekday, $yearday, $sommertime) = localtime(time); @@ -275,6 +188,45 @@ sub build_msg ($$$$) { } +sub db_res2xml { + my ($db_res) = @_ ; + my $xml = ""; + + my $len_db_res= keys %{$db_res}; + for( my $i= 1; $i<= $len_db_res; $i++ ) { + $xml .= "\n"; + my $hash= $db_res->{$i}; + while ( my ($column_name, $column_value) = each %{$hash} ) { + $xml .= "<$column_name>"; + my $xml_content; + if( $column_name eq "xmlmessage" ) { + $xml_content = &encode_base64($column_value); + } else { + $xml_content = $column_value; + } + $xml .= $xml_content; + $xml .= ""; + } + $xml .= ""; + + } + + return $xml; +} + + +sub db_res2si_msg { + my ($db_res, $header, $target, $source) = @_; + + my $si_msg = ""; + $si_msg .= "
$header
"; + $si_msg .= "$source"; + $si_msg .= "$target"; + $si_msg .= &db_res2xml; + $si_msg .= "
"; +} + + sub get_where_statement { my ($msg, $msg_hash) = @_; my $error= 0; @@ -299,7 +251,7 @@ sub get_where_statement { if( exists $phrase->{'operator'} ) { my $op = $op_hash->{$phrase->{'operator'}[0]}; if( not defined $op ) { - &main::daemon_log("Can not translate operator '$operator' in where ". + &main::daemon_log("ERROR: Can not translate operator '$operator' in where-". "statement to sql valid syntax. Please use 'eq', ". "'ne', 'ge', 'gt', 'le', 'lt' in xml message\n", 1); &main::daemon_log($msg, 8); @@ -312,15 +264,20 @@ sub get_where_statement { my @xml_tags = keys %{$phrase}; my $tag = $xml_tags[0]; my $val = $phrase->{$tag}[0]; - push(@phrase_l, "$tag$operator'$val'"); + # integer columns do not have to have single quotes besides the value + if ($tag eq "id") { + push(@phrase_l, "$tag$operator$val"); + } else { + push(@phrase_l, "$tag$operator'$val'"); + } } my $clause_str .= join(" $connector ", @phrase_l); - push(@clause_l, $clause_str); + push(@clause_l, "($clause_str)"); } if( not 0 == @clause_l ) { $clause_str = join(" AND ", @clause_l); - $clause_str = "WHERE $clause_str "; + $clause_str = "WHERE ($clause_str) "; } } @@ -332,7 +289,7 @@ sub get_select_statement { my $select = "*"; if( exists $msg_hash->{'select'} ) { my $select_l = \@{$msg_hash->{'select'}}; - $select = join(' AND ', @{$select_l}); + $select = join(', ', @{$select_l}); } return $select; } @@ -437,4 +394,25 @@ sub get_dns_domains() { return @searches; } + +sub get_logged_in_users { + my $result = qx(/usr/bin/w -hs); + my @res_lines; + + if( defined $result ) { + chomp($result); + @res_lines = split("\n", $result); + } + + my @logged_in_user_list; + foreach my $line (@res_lines) { + chomp($line); + my @line_parts = split(/\s+/, $line); + push(@logged_in_user_list, $line_parts[0]); + } + + return @logged_in_user_list; + +} + 1;