diff --git a/pandora_agents/unix/AIX/pandora_agent.conf b/pandora_agents/unix/AIX/pandora_agent.conf index e9d73924c4..c1f7360057 100755 --- a/pandora_agents/unix/AIX/pandora_agent.conf +++ b/pandora_agents/unix/AIX/pandora_agent.conf @@ -85,9 +85,15 @@ transfer_mode tentacle # If set to 1 start babel agent in proxy mode # proxy_mode 1 -# User which runs tentacle server in proxy mode. Required with if proxy mode is enable (by default babel) +# User which runs tentacle server in proxy mode. Required with if proxy mode is enable (by default pandora) # proxy_user pandora +# Max number of simmultaneus connection for proxy (by default 10) +# proxy_max_connection 10 + +# Proxy timeout (by default 1s) +# proxy_timeout 1 + # User the agent will run as #pandora_user root diff --git a/pandora_agents/unix/ChangeLog b/pandora_agents/unix/ChangeLog index 2b7d355bd1..696cef0cb6 100644 --- a/pandora_agents/unix/ChangeLog +++ b/pandora_agents/unix/ChangeLog @@ -1,3 +1,18 @@ +2011-04-12 Dario Rodriguez + + * pandora_agent_daemon: Deleted code that kill tentacle server and + replaced kill -9 to kill of agent stop command. + * Linux/pandora_agent.conf, AIX/pandora_agent.conf, + HP-UX/pandora_agent.conf,SunOS/pandora_agent.conf : Added parameters + proxy_max_connection and proxy_timeout 1. + * pandora_agent: Fixed problems launching tentacle_server and also + added code to handle kill signal. + +2011-04-11 Dario Rodriguez + + * pandora_agent: Fixed an error with command that launch tentacle server + when proxy mode is enable. + 2011-04-11 Dario Rodriguez * pandora_agent_installer: Added code to install tentacle_server with diff --git a/pandora_agents/unix/HP-UX/pandora_agent.conf b/pandora_agents/unix/HP-UX/pandora_agent.conf index 765abc0358..e889a13bce 100755 --- a/pandora_agents/unix/HP-UX/pandora_agent.conf +++ b/pandora_agents/unix/HP-UX/pandora_agent.conf @@ -85,9 +85,15 @@ transfer_mode tentacle # If set to 1 start babel agent in proxy mode # proxy_mode 1 -# User which runs tentacle server in proxy mode. Required with if proxy mode is enable (by default babel) +# User which runs tentacle server in proxy mode. Required with if proxy mode is enable (by default pandora) # proxy_user pandora +# Max number of simmultaneus connection for proxy (by default 10) +# proxy_max_connection 10 + +# Proxy timeout (by default 1s) +# proxy_timeout 1 + # User the agent will run as #pandora_user root diff --git a/pandora_agents/unix/Linux/pandora_agent.conf b/pandora_agents/unix/Linux/pandora_agent.conf index 8f05e7e72c..41dcfcaa69 100755 --- a/pandora_agents/unix/Linux/pandora_agent.conf +++ b/pandora_agents/unix/Linux/pandora_agent.conf @@ -100,9 +100,15 @@ transfer_mode tentacle # If set to 1 start babel agent in proxy mode # proxy_mode 1 -# User which runs tentacle server in proxy mode. Required with if proxy mode is enable (by default babel) +# User which runs tentacle server in proxy mode. Required with if proxy mode is enable (by default pandora) # proxy_user pandora +# Max number of simmultaneus connection for proxy (by default 10) +# proxy_max_connection 10 + +# Proxy timeout (by default 1s) +# proxy_timeout 1 + # Number of threads to execute modules in parallel #agent_threads 1 diff --git a/pandora_agents/unix/SunOS/pandora_agent.conf b/pandora_agents/unix/SunOS/pandora_agent.conf index e49508583d..83a19b8b30 100755 --- a/pandora_agents/unix/SunOS/pandora_agent.conf +++ b/pandora_agents/unix/SunOS/pandora_agent.conf @@ -85,9 +85,15 @@ transfer_mode tentacle # If set to 1 start babel agent in proxy mode # proxy_mode 1 -# User which runs tentacle server in proxy mode. Required with if proxy mode is enable (by default babel) +# User which runs tentacle server in proxy mode. Required with if proxy mode is enable (by default pandora) # proxy_user pandora +# Max number of simmultaneus connection for proxy (by default 10) +# proxy_max_connection 10 + +# Proxy timeout (by default 1s) +# proxy_timeout 1 + # User the agent will run as #pandora_user root diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 6baf24a5e5..9cede06ef2 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -150,7 +150,9 @@ my %Conf = ( 'udp_server_auth_address' => '0.0.0.0', 'udp_server' => 0, 'proxy_mode' => 0, - 'proxy_user' => 'pandora' + 'proxy_user' => 'pandora', + 'proxy_max_connection' => 10, + 'proxy_timeout' => 1, ); # Modules @@ -190,6 +192,9 @@ my $DevNull = '/dev/null'; # Shell command separator my $CmdSep = ';'; +# PID of tentacle proxy, used in proxy mode +my $tentacle_pid = undef; + ################################################################################ # Print usage information and exit. ################################################################################ @@ -615,20 +620,26 @@ sub check_remote_config () { # Launchs tentacle server in proxy mode. ################################################################################ sub launch_tentacle_proxy () { + # Check if proxy server ip is right. + if ($Conf{'server_ip'} ne "localhost") { - # Check if proxy mode is enable. - if ($Conf{'proxy_mode'}) { - - my $auxPid = fork(); - - if (! $auxPid) { - - my $new_process = "sudo -u ".$Conf{'proxy_user'}." tentacle_server -b ".$Conf{'server_ip'}." -g ".$Conf{'server_port'}; + #Create a new process and launch tentacle. + $tentacle_pid = fork(); - log_message ('setup', 'Proxy mode enabled'); - + if ($tentacle_pid == 0) { + # Change the UID + my $proxy_user_id = getpwnam($Conf{'proxy_user'}); + $< = $proxy_user_id; + $> = $proxy_user_id; + + #Execute tentacle server as a daemon + my $new_process = "tentacle_server -b ".$Conf{'server_ip'}." -g ".$Conf{'server_port'}." -c ".$Conf{'proxy_max_connection'}." -t ".$Conf{'proxy_timeout'}; + + log_message ('setup', 'Proxy mode enabled'); exec ($new_process); - } + } + } else { + log_message ('error', 'You can not proxy to localhost'); } } @@ -1353,10 +1364,27 @@ sub exec_plugin ($) { $ThreadSem->up () if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1); } +################################################################################ +# TERM Handler +################################################################################ +sub kill_signal_handler (){ + # Kill tentacle server if it was launched + + if (defined ($tentacle_pid)) { + print "kill -9 $tentacle_pid\n"; + `kill -9 $tentacle_pid`; + } + exit (0); +} + ################################################################################ # Main. ################################################################################ +#Handler TERM signal. +$SIG{'TERM'} = \&kill_signal_handler; + + # Check command line arguments print_usage unless ($#ARGV == 0); $ConfDir = fix_directory ($ARGV[0]); @@ -1403,8 +1431,10 @@ sleep ($Conf{'delayed_startup'}); my $PID = $$; `renice "$Conf{'pandora_nice'}" "$PID"`; -#Launch tentacle server in proxy mode if needed -launch_tentacle_proxy(); +#Launch tentacle server in proxy mode if configured +if ($Conf{'proxy_mode'}) { + launch_tentacle_proxy(); +} # Add the plugins directory to the PATH $ENV{'PATH'} .= ":$ConfDir/plugins"; @@ -1423,8 +1453,8 @@ if ($Conf{'udp_server'} == 1){ # Loop while (1) { - # Ignore signals from UDP server while processing execution - if ($Conf{'udp_server'} == 1){ + # Ignore signals from UDP and Tentacle server while processing execution + if ($Conf{'udp_server'} == 1 || $Conf{'proxy_mode'}){ $SIG{'INT'} = 'DEFAULT'; } diff --git a/pandora_agents/unix/pandora_agent_daemon b/pandora_agents/unix/pandora_agent_daemon index ee44b9d66d..d5ddb4abaf 100755 --- a/pandora_agents/unix/pandora_agent_daemon +++ b/pandora_agents/unix/pandora_agent_daemon @@ -60,19 +60,6 @@ pidof_pandora () { echo $PANDORA_PID } -pidof_tentacle () { - COLUMNS=400 - OS_NAME=`uname -s` - if [ $OS_NAME = "HP-UX" ] - then - TENTACLE_PID=`ps -ex | grep "$DAEMON_TENTACLE" | grep -v grep | head -1 | awk '{ print $1 }'` - else - TENTACLE_PID=`ps -Af | grep "$DAEMON_TENTACLE" | grep -v grep | head -1 | awk '{ print $2 }'` - fi - - echo $TENTACLE_PID -} - if [ ! -f $DAEMON ] then echo "Pandora FMS Agent not found at $DAEMON, please check setup" @@ -102,15 +89,8 @@ case "$1" in exit 1 else echo "Stopping Pandora Agent." - su $PANDORA_USER -c "kill -9 $PANDORA_PID >/dev/null 2>&1" + su $PANDORA_USER -c "kill $PANDORA_PID >/dev/null 2>&1" fi - - TENTACLE_PID=`pidof_tentacle` - if [ ! -z "$TENTACLE_PID" ] - then - echo "Stopping Tentacle Server." - kill $TENTACLE_PID > /dev/null 2>&1 - fi ;; status)