diff options
author | Pawel Pekala <pawel@FreeBSD.org> | 2014-12-18 22:41:58 +0000 |
---|---|---|
committer | Pawel Pekala <pawel@FreeBSD.org> | 2014-12-18 22:41:58 +0000 |
commit | ea2bdf4b973f70d003ec0f1c67d8418a23105057 (patch) | |
tree | fb9bd2695de227ef91347b8182e27945d6ab0fac /net-mgmt/pandorafms_server | |
parent | 1f60f7a36ee34be7bea4ac4bf76f1c0dc47424ff (diff) | |
download | ports-ea2bdf4b973f70d003ec0f1c67d8418a23105057.tar.gz ports-ea2bdf4b973f70d003ec0f1c67d8418a23105057.zip |
Notes
Diffstat (limited to 'net-mgmt/pandorafms_server')
-rw-r--r-- | net-mgmt/pandorafms_server/Makefile | 7 | ||||
-rw-r--r-- | net-mgmt/pandorafms_server/bsd.pandora.mk | 8 | ||||
-rw-r--r-- | net-mgmt/pandorafms_server/distinfo | 4 | ||||
-rw-r--r-- | net-mgmt/pandorafms_server/files/patch-update | 5592 | ||||
-rw-r--r-- | net-mgmt/pandorafms_server/pkg-plist | 12 | ||||
-rw-r--r-- | net-mgmt/pandorafms_server/pkg-plist.spool | 24 |
6 files changed, 22 insertions, 5625 deletions
diff --git a/net-mgmt/pandorafms_server/Makefile b/net-mgmt/pandorafms_server/Makefile index acbb47b9578a..d11faee0c623 100644 --- a/net-mgmt/pandorafms_server/Makefile +++ b/net-mgmt/pandorafms_server/Makefile @@ -2,8 +2,6 @@ # $FreeBSD$ PORTNAME= pandora_server -PORTREVISION= 2 - CATEGORIES= net-mgmt MAINTAINER= koichiro@rworks.jp @@ -21,14 +19,13 @@ PANDORA_DEPS= p5-DBI>=0:${PORTSDIR}/databases/p5-DBI \ p5-XML-Simple>=0:${PORTSDIR}/textproc/p5-XML-Simple \ p5-XML-Twig>=0:${PORTSDIR}/textproc/p5-XML-Twig \ p5-JSON>=0:${PORTSDIR}/converters/p5-JSON - BUILD_DEPENDS= ${PANDORA_DEPS} - RUN_DEPENDS= p5-libwww>=0:${PORTSDIR}/www/p5-libwww \ p5-DBD-mysql>=4:${PORTSDIR}/databases/p5-DBD-mysql \ ${LOCALBASE}/bin/wmic:${PORTSDIR}/net-mgmt/wmi-client \ ${LOCALBASE}/bin/nmap:${PORTSDIR}/security/nmap \ p5-Storable>=0:${PORTSDIR}/devel/p5-Storable \ + p5-Encode-Locale>=0:${PORTSDIR}/converters/p5-Encode-Locale \ ${PANDORA_DEPS} OPTIONS_DEFINE= DOCS TENTACLE XPROBE PGSQL ORACLE EXTRAS @@ -104,7 +101,7 @@ post-install: @${MV} ${STAGEDIR}${ETCDIR}/pandora_server.conf ${STAGEDIR}${ETCDIR}/pandora_server.conf.sample @${MKDIR} ${STAGEDIR}${DOCSDIR} .for x in ${PORTDOCS} - @${INSTALL_DATA} ${WRKSRC}/${x} ${STAGEDIR}${DOCSDIR} + ${INSTALL_DATA} ${WRKSRC}/${x} ${STAGEDIR}${DOCSDIR} .endfor .include <bsd.port.post.mk> diff --git a/net-mgmt/pandorafms_server/bsd.pandora.mk b/net-mgmt/pandorafms_server/bsd.pandora.mk index 74beea439a12..2487f1aa1718 100644 --- a/net-mgmt/pandorafms_server/bsd.pandora.mk +++ b/net-mgmt/pandorafms_server/bsd.pandora.mk @@ -1,6 +1,6 @@ # $FreeBSD$ -PANDORA_VERSION= 5.1 +PANDORA_VERSION= 5.1SP1 PANDORA_LICENSE= GPLv2 PANDORA_LICENSE_FILE= ${WRKSRC}/COPYING @@ -12,9 +12,9 @@ PANDORA_HOMEDIR?= ${PANDORA_ETCDIR}/home PANDORA_INSTALLER= ${PORTNAME}_installer PANDORA_INSTALLER_ARGS= --install -PORTVERSION= ${PANDORA_VERSION:C/((SP[0-9]*)?)$/.0\1/} +PORTVERSION= ${PANDORA_VERSION:C/SP/./} -MASTER_SITES?= SF/pandora/Pandora%20FMS%20${PANDORA_VERSION}/Final/Tarball +MASTER_SITES?= SF/pandora/Pandora%20FMS%20${PANDORA_VERSION:C/(SP[0-9]*)/\/\1/}Final/Tarball .if ${PORTNAME} == "pandora_agent" DISTNAME= pandorafms_agent_unix-${PANDORA_VERSION} .else @@ -38,7 +38,7 @@ PLIST_SUB+= SPOOLDIR="${PANDORA_SPOOLDIR}" LOGDIR="${PANDORA_LOGDIR}" \ SUB_LIST+= PANDORA_VERSION="${PANDORA_VERSION}" PLIST= ${WRKDIR}/PLIST -PORTDOCS?= AUTHORS ChangeLog +PORTDOCS?= AUTHORS .if ${PORTNAME} == "pandora_server" USE_LOGDIR= "" diff --git a/net-mgmt/pandorafms_server/distinfo b/net-mgmt/pandorafms_server/distinfo index bae0c3a61aa8..5b1a04faa61c 100644 --- a/net-mgmt/pandorafms_server/distinfo +++ b/net-mgmt/pandorafms_server/distinfo @@ -1,2 +1,2 @@ -SHA256 (pandora/pandorafms_server-5.1.tar.gz) = 00b163f3fad5474380ba02afcbac2c4221ff03d4bd293957590310504a5a0b3e -SIZE (pandora/pandorafms_server-5.1.tar.gz) = 4064063 +SHA256 (pandora/pandorafms_server-5.1SP1.tar.gz) = c7b49da0b941315a59de9d3edebb10f0103eb4ee59956e961d3b6787f4449b27 +SIZE (pandora/pandorafms_server-5.1SP1.tar.gz) = 4011575 diff --git a/net-mgmt/pandorafms_server/files/patch-update b/net-mgmt/pandorafms_server/files/patch-update deleted file mode 100644 index 13de3c16a593..000000000000 --- a/net-mgmt/pandorafms_server/files/patch-update +++ /dev/null @@ -1,5592 +0,0 @@ -Index: NetBSD/pandora_server.conf.new -=================================================================== ---- NetBSD/pandora_server.conf.new (revision 0) -+++ NetBSD/pandora_server.conf.new (revision 10417) -@@ -0,0 +1,443 @@ -+############################################################################# -+# Pandora FMS Server Parameters -+# Pandora FMS, the Flexible Monitoring System. -+# Version 5.1BETA1 -+# Licensed under GPL license v2, -+# (c) 2003-2014 Artica Soluciones Tecnologicas -+# http://www.pandorafms.com -+# Please change it for your setup needs -+############################################################################# -+ -+# Servername: Name of this server -+# if not given, it takes hostname. It's preferable to setup one -+# because machine name could change by some reason. -+ -+#servername greystone -+ -+# incomingdir: Defines directory where incoming data packets are stored -+# You could set directory relative to base path or absolute, starting with / -+ -+incomingdir /var/spool/pandora/data_in -+ -+# log_file: Main logfile for pandora_server -+# You could set file relative to base path or absolute, starting with / -+ -+log_file /var/log/pandora/pandora_server.log -+ -+# Log file for Pandora FMS SNMP console. Its generated by NetSNMP Trap daemon -+ -+snmp_logfile /var/log/pandora/pandora_snmptrap.log -+ -+# Error logfile: aux logfile for pandora_server errors (in Daemon mode) -+# You could set file relative to base path or absolute, starting with / -+ -+errorlog_file /var/log/pandora/pandora_server.error -+ -+# daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground -+# this could be also configured on commandline with -D option -+ -+# daemon 1 -+ -+# dbengine: mysql, postgresql or oracle (mysql by default) -+ -+dbengine mysql -+ -+# Database credentials. A VERY important configuration. -+# This must be the same credentials used by your Pandora FMS Console -+# but could be different if your console is not running in the same -+# host than the server. Check your console setup in /include/config.php -+ -+# dbname: Database name (pandora by default) -+ -+dbname pandora -+ -+# dbuser: Database user name (pandora by default) -+ -+dbuser pandora -+ -+# dbpass: Database password -+ -+dbpass pandora -+ -+# dbhost: Database hostname or IP address -+ -+dbhost 127.0.0.1 -+ -+# dbport: Database port number -+# Default value depends on the dbengine (mysql: 3306, postgresql: 5432, oracle: 1521) -+ -+#dbport 3306 -+ -+# By default, parent agent will not be updated -+ -+#update_parent 0 -+ -+# verbosity: level of detail on errors/messages (0 default, 1 verbose, 2 debug.... 10 noisy) -+# -v in command line (verbose) or -d (debug). Set this to 10 when try to locate problems and -+# set to 0 or 1 on production enviroments. -+ -+verbosity 1 -+ -+# Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup) -+ -+master 1 -+ -+# Activate Pandora SNMP console (depending on snmptrapd) -+ -+snmpconsole 0 -+ -+# snmptrapd will ignore authenticationFailure traps if set to 1. -+ -+snmp_ignore_authfailure 1 -+ -+# snmptrapd will read the PDU source address instead of the agent-addr field is set to 1. -+ -+snmp_pdu_address 0 -+ -+# Activate (1) Pandora Network Server -+ -+networkserver 1 -+ -+# Activate (1) Pandora Data Server -+ -+dataserver 1 -+ -+# Activate (1) Pandora FMS Recon server -+ -+reconserver 1 -+ -+# pluginserver : 1 or 0. Set to 1 to activate plugin server with this setup -+ -+pluginserver 1 -+ -+# Pandora FMS Plugin exec tool filepath (by default at /usr/local/bin) -+ -+plugin_exec /usr/local/bin/gtimeout -+ -+# predictionserver : 1 or 0. Set to 1 to activate prediction server with this setup -+# DISABLED BY DEFAULT -+ -+predictionserver 0 -+ -+# wmiserver : 1 or 0. Set to 1 to activate WMI server with this setup -+# DISABLED BY DEFAULT -+ -+wmiserver 1 -+ -+# wmic: Needed by Pandora FMS wmi server. -+ -+wmi_client /usr/local/bin/wmic -+ -+# Network timeout (in seconds) for timeout in network connections for Network agents -+ -+network_timeout 4 -+ -+# Server keepalive (in seconds) -+ -+server_keepalive 45 -+ -+# Server Threshold: defines number of seconds of main loop (in sec) -+ -+server_threshold 5 -+ -+# Network threads: Do not set too high (~40). Each threads make a network module check. -+ -+network_threads 4 -+ -+# icmp_checks x : defines number of pings for each icmp_proc module type. at least one of -+# that ping should be 1 to report 1. Values of 1 have more performance, but are more feasible -+# to produce false positives. -+ -+icmp_checks 3 -+ -+# tcp specific options : -+# tcp_checks: number of tcp retries if first attempt fails. -+# tcp_timeout: specific timeout for tcp connections -+ -+tcp_checks 1 -+tcp_timeout 10 -+ -+# snmp specific options : -+# snmp_checks: number of snmp request retries if first attempt fails. -+# snmp_timeout: specific timeout for snmp request. -+ -+snmp_checks 1 -+snmp_timeout 4 -+ -+# snmp_proc_deadresponse 1 (default): Return DOWN if cannot contact -+# or receive NULL from a SNMP PROC module. -+ -+snmp_proc_deadresponse 1 -+ -+# plugin_threads: Specify number of plugin server threads for processing plugin calls -+ -+plugin_threads 1 -+ -+# plugin_timeout: Specify number of seconds calling plugin exec waiting for response -+# after this time, call is aborted and result is "unknown". -+ -+plugin_timeout 12 -+ -+# wmi_timeout : specific timeout for wmi request. -+ -+wmi_timeout 7 -+ -+# wmi_threads: Specify number of WMI server threads for processing WMI remote calls -+ -+wmi_threads 1 -+ -+# recon_threads. Each thread will scan a different scantask. -+ -+recon_threads 1 -+ -+# dataserver_threads: Number of threads for data server (XML processing threads) -+ -+dataserver_threads 1 -+ -+# mta_address: External Mailer (MTA) IP Address to be used by Pandora FMS internal email capabilities -+ -+mta_address localhost -+ -+# mta_port, this is the mail server port (default 25) -+ -+#mta_port 25 -+ -+# mta_user MTA User (if needed for auth, FQD or simple user, depending on your server) -+ -+#mta_user myuser@mydomain.com -+ -+# mta_pass MTA Pass (if needed for auth) -+ -+#mta_pass mypassword -+ -+# mta_auth MTA Auth system (if needed, it supports LOGIN, PLAIN, CRAM-MD5, DIGEST-MD) -+ -+#mta_auth LOGIN -+ -+# mta_from Email address that sends the mail, by default is pandora@localhost -+# probably you need to change it to avoid problems with your antispam -+ -+#mta_from Pandora FMS <pandora@mydomain.com> -+ -+# Set 1 if want eMail deliver alert in separate mail (default). -+# Set 0 if want eMail deliver shared mail by all destination. -+mail_in_separate 1 -+ -+ -+# xprobe2: Optional package to detect OS types using advanced TCP/IP -+# fingerprinting tecniques, much more accurates than stadard nmap. -+# If not provided, nmap is used insted xprobe2 -+ -+xprobe2 /usr/local/bin/xprobe2 -+ -+# nmap: If provided, is used to detect OS type with recon server using -+# advanded OS fingerprint technique. Xprobe2 gives more accurate results -+# Nmap is also used to do TCP port scanning in detected host. -+ -+nmap /usr/pkg/bin/nmap -+ -+# snmpget: Needed to do SNMP checks. By default is on /usr/local/bin/snmpget -+ -+snmpget /usr/pkg/bin/snmpget -+ -+# snmp_trapd: Needed by Pandora FMS SNMP console. -+ -+snmp_trapd /usr/pkg/sbin/snmptrapd -+ -+# Location of the braa binary needed by the Enterprise SNMP Server (/usr/local/bin/braa by default) (PANDORA FMS ENTERPRISE ONLY). -+ -+braa /usr/local/bin/braa -+ -+# Number of retries before braa hands a module over to the Network Server (PANDORA FMS ENTERPRISE ONLY). -+ -+braa_retries 3 -+ -+# Default group id for new agents created with Pandora FMS Data Server -+ -+autocreate_group 2 -+ -+# Set to 1 if want to autocreate agents with Pandora FMS Data Server, -+# set to 0 to disable (for security purposes, for example). -+ -+autocreate 1 -+ -+# max_log_size: Specify max size of Pandora FMS server log file (1MB by default). If -+# log file grows above this limit, is renamed to "pandora_server.log.old". -+ -+max_log_size 65536 -+ -+# max_queue_files (500 by default) -+# When server have more than max_queue_files in incoming directory, skips the read -+# the directory to avoid filesystem overhead. -+ -+max_queue_files 500 -+ -+# Use the XML file last modification time as timestamp. -+# use_xml_timestamp 1 -+ -+# Pandora FMS will autorestart itself each XXX seconds, use this if you experience problems with -+# shutting down threads, or other stability problems. -+ -+# auto_restart 86400 -+ -+# Pandora FMS will restart after restart_delay seconds on critical errors. -+ -+restart 1 -+restart_delay 60 -+ -+# More information about GIS Setup in /usr/share/pandora_server/util/gis.README -+# Flag to activate GIS (positional information for agents and maps) -+# by default it is desactivated -+ -+#activate_gis 0 -+ -+# Radius of error in meters to consider two gis locations as the same location. -+ -+#location_error 50 -+ -+# Recon reverse geolocation mode [disabled, sql, file] -+# disabled The recon task doesn't try to geolocate the ip discovered. -+# sql The recon task trys to query the SQL database to geolocate the -+# ip discovered -+# file The recon task trys to find the geolocation information of the -+# ip discovered in the file indicated in the -+# recon_reverse_geolocation_file parameter -+ -+# recon_reverse_geolocation_mode disabled -+ -+# Recon reverse geolocation file. This is the database with the reverse -+# geolocation information using MaxMind GPL GeoLiteCity.dat format). -+ -+#recon_reverse_geolocation_file /usr/local/share/GeoIP/GeoIPCity.dat -+ -+# Radius (in meters) of the circle in where the agents will be place randomly -+# when finded by a recon task. Center of the circle is guessed -+# by geolocating the IP. -+#recon_location_scatter_radius 1000 -+ -+# Pandora Server self-monitoring (embedded agent) (by default enabled) -+ -+self_monitoring 1 -+ -+# Update parent from the agent xml -+ -+#update_parent 1 -+# -+# -+# This enable realtime reverse geocoding using Google Maps public api. -+# This requires internet access, and could have performance penalties processing GIS -+# information due the connetion needed to resolve all GIS input. -+# NOTE: If you dont pay the service to google, they will ban your IP in a few days. -+ -+# google_maps_description 1 -+ -+# This enable realtime reverse geocoding using Openstreet Maps public api. -+# This requires internet access, and could have performance penalties processing GIS -+# information due the connetion needed to resolve all GIS input. -+# You can alter the code to use a local (your own) openstreet maps server. -+ -+# openstreetmaps_description 1 -+ -+# Enable (1) or disable (0) Pandora FMS Event Web Server (PANDORA FMS ENTERPRISE ONLY). -+ -+webserver 1 -+ -+# Number of threads for the Web Server (PANDORA FMS ENTERPRISE ONLY). -+ -+web_threads 1 -+ -+# Enable (1) or disable (0) Pandora FMS Inventory Server (PANDORA FMS ENTERPRISE ONLY). -+ -+inventoryserver 1 -+ -+# Number of threads for the Web Server (PANDORA FMS ENTERPRISE ONLY). -+ -+inventory_threads 1 -+ -+# Enable (1) or disable (0) Pandora FMS Export Server (PANDORA FMS ENTERPRISE ONLY). -+ -+exportserver 0 -+ -+# Number of threads for the Export Server (PANDORA FMS ENTERPRISE ONLY). -+ -+export_threads 1 -+ -+# Enable (1) or disable (0) Pandora FMS Event Server (PANDORA FMS ENTERPRISE ONLY). -+ -+eventserver 0 -+ -+# Event Server event window in seconds (3600 by default) (PANDORA FMS ENTERPRISE ONLY). -+ -+event_window 3600 -+ -+# Enable (1) or disable (0) Pandora FMS Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY). -+# You need nmap 5.20 or higher in order to use this ! -+ -+icmpserver 1 -+ -+# Number of threads for the Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY). -+ -+icmp_threads 1 -+ -+# Enable (1) or disable (0) Pandora FMS Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY). -+# Check braa tool is running and operative. -+ -+snmpserver 1 -+ -+# Number of threads for the Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY). -+ -+snmp_threads 1 -+ -+# Block size for block producer/consumer servers, that is, the number of modules -+# per block (20 by default) (PANDORA FMS ENTERPRISE ONLY). -+ -+block_size 20 -+ -+# Path to the netflow daemon nfcapd. -+ -+netflow_daemon /usr/pkg/bin/nfcapd -+ -+# If set to 1, process XML data files in a stack instead of a queue. 0 by default. -+# WARNING: Incremental modules will not work properly if dataserver_lifo is set to 1!!! -+ -+dataserver_lifo 0 -+ -+# If set to 1, the policy manager is enabled and the server is listening the policy queue. -+# 0 by default (PANDORA FMS ENTERPRISE ONLY) -+ -+policy_manager 1 -+ -+# If set to 1, the event replicate process is enabled. 0 by default. (PANDORA FMS ENTERPRISE ONLY) -+# WARNING: This process doesn't do anything if is not properly configured from the console setup -+ -+event_replication 0 -+ -+# If set to 1, new events validate older event for the same module. This will -+# affect the performance of the server. This was the "normal behaviour" on previous (4.x) versions. -+# disable only if you really know what you are doing !!. -+ -+event_auto_validation 1 -+ -+# If defined, events generated by Pandora FMS will be written to the specified text file. -+#event_file /var/log/pandora/pandora_events.txt -+ -+# Set the maximum number of traps that will be processed from a single source in a -+# configured time interval. -+snmp_storm_protection 25 -+ -+# Time interval for snmp_storm protection (in seconds). -+snmp_storm_timeout 10 -+ -+# Default texts for some events. The macros _module_ and _data_ are supported. -+#text_going_down_normal Module '_module_' is going to NORMAL (_data_) -+#text_going_up_critical Module '_module_' is going to CRITICAL (_data_) -+#text_going_up_warning Module '_module_' is going to WARNING (_data_) -+#text_going_down_warning Module '_module_' is going to WARNING (_data_) -+#text_going_unknown Module '_module_' is going to UNKNOWN -+ -+# Events older that the specified time (in seconds) will be auto-validated. Set to 0 to disable this feature. -+event_expiry_time 0 -+ -+# Only events more recent than the specified time window (in seconds) will be auto-validated. This value must -+# be greater than event_expiry_time. -+#event_expiry_window 86400 -Index: NetBSD/pandora_server.conf -=================================================================== ---- NetBSD/pandora_server.conf (revision 10314) -+++ NetBSD/pandora_server.conf (working copy) -@@ -1,442 +0,0 @@ --############################################################################# --# Pandora FMS Server Parameters --# Pandora FMS, the Flexible Monitoring System. --# Version 5.1BETA1 --# Licensed under GPL license v2, --# (c) 2003-2014 Artica Soluciones Tecnologicas --# http://www.pandorafms.com --# Please change it for your setup needs --############################################################################# -- --# Servername: Name of this server --# if not given, it takes hostname. It's preferable to setup one --# because machine name could change by some reason. -- --#servername greystone -- --# incomingdir: Defines directory where incoming data packets are stored --# You could set directory relative to base path or absolute, starting with / -- --incomingdir /var/spool/pandora/data_in -- --# log_file: Main logfile for pandora_server --# You could set file relative to base path or absolute, starting with / -- --log_file /var/log/pandora/pandora_server.log -- --# Log file for Pandora FMS SNMP console. Its generated by NetSNMP Trap daemon -- --snmp_logfile /var/log/pandora/pandora_snmptrap.log -- --# Error logfile: aux logfile for pandora_server errors (in Daemon mode) --# You could set file relative to base path or absolute, starting with / -- --errorlog_file /var/log/pandora/pandora_server.error -- --# daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground --# this could be also configured on commandline with -D option -- --# daemon 1 -- --# dbengine: mysql, postgresql or oracle (mysql by default) -- --dbengine mysql -- --# Database credentials. A VERY important configuration. --# This must be the same credentials used by your Pandora FMS Console --# but could be different if your console is not running in the same --# host than the server. Check your console setup in /include/config.php -- --# dbname: Database name (pandora by default) -- --dbname pandora -- --# dbuser: Database user name (pandora by default) -- --dbuser pandora -- --# dbpass: Database password -- --dbpass pandora -- --# dbhost: Database hostname or IP address -- --dbhost 127.0.0.1 -- --# dbport: Database port number --# Default value depends on the dbengine (mysql: 3306, postgresql: 5432, oracle: 1521) -- --#dbport 3306 -- --# By default, parent agent will not be updated -- --#update_parent 0 -- --# verbosity: level of detail on errors/messages (0 default, 1 verbose, 2 debug.... 10 noisy) --# -v in command line (verbose) or -d (debug). Set this to 10 when try to locate problems and --# set to 0 or 1 on production enviroments. -- --verbosity 1 -- --# Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup) -- --master 1 -- --# Activate Pandora SNMP console (depending on snmptrapd) -- --snmpconsole 0 -- --# snmptrapd will ignore authenticationFailure traps if set to 1. -- --snmp_ignore_authfailure 1 -- --# snmptrapd will read the PDU source address instead of the agent-addr field is set to 1. -- --snmp_pdu_address 0 -- --# Activate (1) Pandora Network Server -- --networkserver 1 -- --# Activate (1) Pandora Data Server -- --dataserver 1 -- --# Activate (1) Pandora FMS Recon server -- --reconserver 1 -- --# pluginserver : 1 or 0. Set to 1 to activate plugin server with this setup -- --pluginserver 1 -- --# Pandora FMS Plugin exec tool filepath (by default at /usr/local/bin) -- --plugin_exec /usr/local/bin/gtimeout -- --# predictionserver : 1 or 0. Set to 1 to activate prediction server with this setup --# DISABLED BY DEFAULT -- --predictionserver 0 -- --# wmiserver : 1 or 0. Set to 1 to activate WMI server with this setup --# DISABLED BY DEFAULT -- --wmiserver 1 -- --# wmic: Needed by Pandora FMS wmi server. -- --wmi_client /usr/local/bin/wmic -- --# Network timeout (in seconds) for timeout in network connections for Network agents -- --network_timeout 4 -- --# Server keepalive (in seconds) -- --server_keepalive 45 -- --# Server Threshold: defines number of seconds of main loop (in sec) -- --server_threshold 5 -- --# Network threads: Do not set too high (~40). Each threads make a network module check. -- --network_threads 4 -- --# icmp_checks x : defines number of pings for each icmp_proc module type. at least one of --# that ping should be 1 to report 1 -- --icmp_checks 1 -- --# tcp specific options : --# tcp_checks: number of tcp retries if first attempt fails. --# tcp_timeout: specific timeout for tcp connections -- --tcp_checks 1 --tcp_timeout 10 -- --# snmp specific options : --# snmp_checks: number of snmp request retries if first attempt fails. --# snmp_timeout: specific timeout for snmp request. -- --snmp_checks 1 --snmp_timeout 4 -- --# snmp_proc_deadresponse 1 (default): Return DOWN if cannot contact --# or receive NULL from a SNMP PROC module. -- --snmp_proc_deadresponse 1 -- --# plugin_threads: Specify number of plugin server threads for processing plugin calls -- --plugin_threads 1 -- --# plugin_timeout: Specify number of seconds calling plugin exec waiting for response --# after this time, call is aborted and result is "unknown". -- --plugin_timeout 12 -- --# wmi_timeout : specific timeout for wmi request. -- --wmi_timeout 7 -- --# wmi_threads: Specify number of WMI server threads for processing WMI remote calls -- --wmi_threads 1 -- --# recon_threads. Each thread will scan a different scantask. -- --recon_threads 1 -- --# dataserver_threads: Number of threads for data server (XML processing threads) -- --dataserver_threads 1 -- --# mta_address: External Mailer (MTA) IP Address to be used by Pandora FMS internal email capabilities -- --mta_address localhost -- --# mta_port, this is the mail server port (default 25) -- --#mta_port 25 -- --# mta_user MTA User (if needed for auth, FQD or simple user, depending on your server) -- --#mta_user myuser@mydomain.com -- --# mta_pass MTA Pass (if needed for auth) -- --#mta_pass mypassword -- --# mta_auth MTA Auth system (if needed, it supports LOGIN, PLAIN, CRAM-MD5, DIGEST-MD) -- --#mta_auth LOGIN -- --# mta_from Email address that sends the mail, by default is pandora@localhost --# probably you need to change it to avoid problems with your antispam -- --#mta_from Pandora FMS <pandora@mydomain.com> -- --# Set 1 if want eMail deliver alert in separate mail (default). --# Set 0 if want eMail deliver shared mail by all destination. --mail_in_separate 1 -- -- --# xprobe2: Optional package to detect OS types using advanced TCP/IP --# fingerprinting tecniques, much more accurates than stadard nmap. --# If not provided, nmap is used insted xprobe2 -- --xprobe2 /usr/local/bin/xprobe2 -- --# nmap: If provided, is used to detect OS type with recon server using --# advanded OS fingerprint technique. Xprobe2 gives more accurate results --# Nmap is also used to do TCP port scanning in detected host. -- --nmap /usr/pkg/bin/nmap -- --# snmpget: Needed to do SNMP checks. By default is on /usr/local/bin/snmpget -- --snmpget /usr/pkg/bin/snmpget -- --# snmp_trapd: Needed by Pandora FMS SNMP console. -- --snmp_trapd /usr/pkg/sbin/snmptrapd -- --# Location of the braa binary needed by the Enterprise SNMP Server (/usr/local/bin/braa by default) (PANDORA FMS ENTERPRISE ONLY). -- --braa /usr/local/bin/braa -- --# Number of retries before braa hands a module over to the Network Server (PANDORA FMS ENTERPRISE ONLY). -- --braa_retries 3 -- --# Default group id for new agents created with Pandora FMS Data Server -- --autocreate_group 2 -- --# Set to 1 if want to autocreate agents with Pandora FMS Data Server, --# set to 0 to disable (for security purposes, for example). -- --autocreate 1 -- --# max_log_size: Specify max size of Pandora FMS server log file (1MB by default). If --# log file grows above this limit, is renamed to "pandora_server.log.old". -- --max_log_size 65536 -- --# max_queue_files (500 by default) --# When server have more than max_queue_files in incoming directory, skips the read --# the directory to avoid filesystem overhead. -- --max_queue_files 500 -- --# Use the XML file last modification time as timestamp. --# use_xml_timestamp 1 -- --# Pandora FMS will autorestart itself each XXX seconds, use this if you experience problems with --# shutting down threads, or other stability problems. -- --# auto_restart 86400 -- --# Pandora FMS will restart after restart_delay seconds on critical errors. -- --restart 1 --restart_delay 60 -- --# More information about GIS Setup in /usr/share/pandora_server/util/gis.README --# Flag to activate GIS (positional information for agents and maps) --# by default it is desactivated -- --#activate_gis 0 -- --# Radius of error in meters to consider two gis locations as the same location. -- --#location_error 50 -- --# Recon reverse geolocation mode [disabled, sql, file] --# disabled The recon task doesn't try to geolocate the ip discovered. --# sql The recon task trys to query the SQL database to geolocate the --# ip discovered --# file The recon task trys to find the geolocation information of the --# ip discovered in the file indicated in the --# recon_reverse_geolocation_file parameter -- --# recon_reverse_geolocation_mode disabled -- --# Recon reverse geolocation file. This is the database with the reverse --# geolocation information using MaxMind GPL GeoLiteCity.dat format). -- --#recon_reverse_geolocation_file /usr/local/share/GeoIP/GeoIPCity.dat -- --# Radius (in meters) of the circle in where the agents will be place randomly --# when finded by a recon task. Center of the circle is guessed --# by geolocating the IP. --#recon_location_scatter_radius 1000 -- --# Pandora Server self-monitoring (embedded agent) (by default enabled) -- --self_monitoring 1 -- --# Update parent from the agent xml -- --#update_parent 1 --# --# --# This enable realtime reverse geocoding using Google Maps public api. --# This requires internet access, and could have performance penalties processing GIS --# information due the connetion needed to resolve all GIS input. --# NOTE: If you dont pay the service to google, they will ban your IP in a few days. -- --# google_maps_description 1 -- --# This enable realtime reverse geocoding using Openstreet Maps public api. --# This requires internet access, and could have performance penalties processing GIS --# information due the connetion needed to resolve all GIS input. --# You can alter the code to use a local (your own) openstreet maps server. -- --# openstreetmaps_description 1 -- --# Enable (1) or disable (0) Pandora FMS Event Web Server (PANDORA FMS ENTERPRISE ONLY). -- --webserver 1 -- --# Number of threads for the Web Server (PANDORA FMS ENTERPRISE ONLY). -- --web_threads 1 -- --# Enable (1) or disable (0) Pandora FMS Inventory Server (PANDORA FMS ENTERPRISE ONLY). -- --inventoryserver 1 -- --# Number of threads for the Web Server (PANDORA FMS ENTERPRISE ONLY). -- --inventory_threads 1 -- --# Enable (1) or disable (0) Pandora FMS Export Server (PANDORA FMS ENTERPRISE ONLY). -- --exportserver 0 -- --# Number of threads for the Export Server (PANDORA FMS ENTERPRISE ONLY). -- --export_threads 1 -- --# Enable (1) or disable (0) Pandora FMS Event Server (PANDORA FMS ENTERPRISE ONLY). -- --eventserver 0 -- --# Event Server event window in seconds (3600 by default) (PANDORA FMS ENTERPRISE ONLY). -- --event_window 3600 -- --# Enable (1) or disable (0) Pandora FMS Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY). --# You need nmap 5.20 or higher in order to use this ! -- --icmpserver 1 -- --# Number of threads for the Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY). -- --icmp_threads 1 -- --# Enable (1) or disable (0) Pandora FMS Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY). --# Check braa tool is running and operative. -- --snmpserver 1 -- --# Number of threads for the Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY). -- --snmp_threads 1 -- --# Block size for block producer/consumer servers, that is, the number of modules --# per block (20 by default) (PANDORA FMS ENTERPRISE ONLY). -- --block_size 20 -- --# Path to the netflow daemon nfcapd. -- --netflow_daemon /usr/pkg/bin/nfcapd -- --# If set to 1, process XML data files in a stack instead of a queue. 0 by default. --# WARNING: Incremental modules will not work properly if dataserver_lifo is set to 1!!! -- --dataserver_lifo 0 -- --# If set to 1, the policy manager is enabled and the server is listening the policy queue. --# 0 by default (PANDORA FMS ENTERPRISE ONLY) -- --policy_manager 1 -- --# If set to 1, the event replicate process is enabled. 0 by default. (PANDORA FMS ENTERPRISE ONLY) --# WARNING: This process doesn't do anything if is not properly configured from the console setup -- --event_replication 0 -- --# If set to 1, new events validate older event for the same module. This will --# affect the performance of the server. This was the "normal behaviour" on previous (4.x) versions. --# disable only if you really know what you are doing !!. -- --event_auto_validation 1 -- --# If defined, events generated by Pandora FMS will be written to the specified text file. --#event_file /var/log/pandora/pandora_events.txt -- --# Set the maximum number of traps that will be processed from a single source in a --# configured time interval. --snmp_storm_protection 25 -- --# Time interval for snmp_storm protection (in seconds). --snmp_storm_timeout 10 -- --# Default texts for some events. The macros _module_ and _data_ are supported. --#text_going_down_normal Module '_module_' is going to NORMAL (_data_) --#text_going_up_critical Module '_module_' is going to CRITICAL (_data_) --#text_going_up_warning Module '_module_' is going to WARNING (_data_) --#text_going_down_warning Module '_module_' is going to WARNING (_data_) --#text_going_unknown Module '_module_' is going to UNKNOWN -- --# Events older that the specified time (in seconds) will be auto-validated. Set to 0 to disable this feature. --event_expiry_time 0 -- --# Only events more recent than the specified time window (in seconds) will be auto-validated. This value must --# be greater than event_expiry_time. --#event_expiry_window 86400 -Index: conf/pandora_server.conf.new -=================================================================== ---- conf/pandora_server.conf.new (revision 10314) -+++ conf/pandora_server.conf.new (working copy) -@@ -86,6 +86,18 @@ - - snmpconsole 0 - -+# snmpconsole_threads: number of SNMP console threads for processing SNMP traps. -+ -+snmpconsole_threads 1 -+ -+# Attempt to translate variable bindings when processing SNMP traps. 1 enabled, 0 disabled. 0 by default. (ENTERPRISE ONLY). -+ -+translate_variable_bindings 0 -+ -+# Attempt to translate enterprise strings when processing SNMP traps. 1 enabled, 0 disabled. 1 by default. (ENTERPRISE ONLY). -+ -+translate_enterprise_strings 0 -+ - # snmptrapd will ignore authenticationFailure traps if set to 1. - - snmp_ignore_authfailure 1 -@@ -141,9 +153,10 @@ - network_threads 4 - - # icmp_checks x : defines number of pings for each icmp_proc module type. at least one of --# that ping should be 1 to report 1 -+# that ping should be 1 to report 1. Setting this to 1 will make all icmp montioring faster but -+# with more probability of failure. - --icmp_checks 1 -+icmp_checks 3 - - # tcp specific options : - # tcp_checks: number of tcp retries if first attempt fails. -@@ -231,6 +244,9 @@ - - nmap /usr/bin/nmap - -+# A value that specifies how aggressive nmap should be from 1 to 5. 1 means slower but more reliable, 5 means faster but less reliable. 2 by default. -+nmap_timing_template 2 -+ - # snmpget: Needed to do SNMP checks. By default is on /usr/bin/snmpget - - snmpget /usr/bin/snmpget -Index: ChangeLog -=================================================================== ---- ChangeLog (revision 10314) -+++ ChangeLog (working copy) -@@ -1,3 +1,160 @@ -+2014-08-14 Koichiro Kikuchi <koichiro@rworks.jp> -+ -+ * FreeBSD/tentacle_server: Set rcvar statically. -+ -+2014-08-13 Ramon Novoa <rnovoa@artica.es> -+ -+ * pandora_server.redhat.spec: Fixed some typos (packages were not -+ being built). -+ -+2014-08-12 Koichiro Kikuchi <koichiro@rworks.jp> -+ -+ * bin/pandora_server: Fixed issue that pandora_server failed to -+ shut down properly on non-Linux systems. -+ -+ Merged r10335 from branch 5.0. -+ -+2014-08-12 Koichiro Kikuchi <koichiro@rworks.jp> -+ -+ * pandora_server_installer: Refactord implementation, added -+ "fakeroot" installation support, small bug fixes and improvements: -+ fixed processing arguments, replace "test -e" with "test -f" for portability -+ (solaris' /bin/sh doesn't support "test -e"). -+ -+ * Makefile.PL: Install bin/tentacle_server if WITHOUT_TENTACLE=0 so that -+ MakeMaker can fix perl path in the shebang line. -+ -+ * pandora_server.redhat.spec: Added missing dependency. -+ -+ * FreeBSD/pandora_server.conf -> FreeBSD/pandora_server.conf.new: Renamed -+ * NetBSD/pandora_server.conf -> NetBSD/pandora_server.conf.new: Rename -+ -+ * FreeBSD/tentacle_server: Small bug fix and improvements. Fixed -+ "tentacle_server_flags" and modified code to use proper variables and -+ to get pid more strictly. -+ -+ * FreeBSD/pandora_server: Added support to start multiple pandora_server -+ instances. -+ -+2014-08-12 Junichi Satoh <junichi@rworks.jp> -+ -+ * lib/PandoraFMS/Core.pm, lib/PandoraFMS/DataServer.pm: Fixed sql -+ error with MySQL 5.6 and its default sql_mode. -+ -+2014-08-11 Hirofumi Kosaka <kosaka@rworks.jp> -+ -+ * lib/PandoraFMS/Core.pm: Fixed modules would have ignored -+ ff_threshold when the module shifted from normal to critical -+ while its status remained unknown. -+ -+2014-08-07 Ramon Novoa <rnovoa@artica.es> -+ -+ * util/recon_scripts/snmp-recon.pl, -+ util/recon_scripts/wmi-recon.pl: Set a default value -+ for nmap_timing_template. -+ -+2014-08-07 Ramon Novoa <rnovoa@artica.es> -+ -+ * conf/pandora_server.conf.new, -+ lib/PandoraFMS/Config.pm, -+ lib/PandoraFMS/ReconServer.pm, -+ util/recon_scripts/snmp-recon.pl, -+ util/recon_scripts/wmi-recon.pl: Added a new parameter to control how -+ aggressive nmap should be. -+ -+2014-08-06 Sancho Lerena <slerena@artica.es> -+ -+ * NetBSD/pandora_server.conf, -+ conf/pandora_server.conf.new, -+ conf/pandora_server.conf.windows: New default value for icmp_retries -+ to have default setup more realiable but a bit slower. -+ -+2014-08-06 Alejandro Gallardo <alejandro.gallardo@artica.es> -+ -+ * lib/PandoraFMS/NetworkServer.pm: Little syntax fix. -+ -+ * util/pandora_revent_create.pl: Changed the url encode -+ separator of the api call from "," to "|". -+ -+2014-08-06 Ramon Novoa <rnovoa@artica.es> -+ -+ * lib/PandoraFMS/NetworkServer.pm: Rewrote TCP module socket code for -+ sending data (tcp_send). Fixes ticket #1096. -+ -+2014-08-05 Hirofumi Kosaka <kosaka@rworks.jp> -+ -+ * lib/PandoraFMS/Core.pm: Suppress "going to normal (warning, -+ critical)" events from "unknown" status, if you disable "Throw -+ unknown events" at the Console. -+ -+2014-08-05 Hirofumi Kosaka <kosaka@rworks.jp> -+ -+ * lib/PandoraFMS/Core.pm: Fixed that unknown modules would be -+ set to normal if its status is not normal, when new data -+ arrives but ff_threshold is greater than 0. -+ -+2014-07-30 Ramon Novoa <rnovoa@artica.es> -+ -+ * util/trap_rate.sh: Added to repository. Script to calculate the rate of -+ SNMP traps received by snmptrapd. -+ -+2014-07-30 Ramon Novoa <rnovoa@artica.es> -+ -+ * lib/PandoraFMS/Core.pm: Set unknown modules to normal if new data -+ arrives but ff_threshold is greater than 0. -+ -+2014-07-28 Ramon Novoa <rnovoa@artica.es> -+ -+ * conf/pandora_server.conf.new, -+ lib/PandoraFMS/Config.pm: Added configuration tokens to disable the -+ translation of enterprise strings and variable bindings (SNMP console). -+ -+ * lib/PandoraFMS/SNMPServer.pm: Added thread support to the SNMP console. -+ -+ * lib/PandoraFMS/DB.pm: Fixed a warning. -+ -+2014-07-25 Miguel de Dios <miguel.dedios@artica.es> -+ -+ * lib/PandoraFMS/GIS.pm, lib/PandoraFMS/DB.pm, -+ lib/PandoraFMS/Core.pm, lib/PandoraFMS/ReconServer.pm, -+ lib/PandoraFMS/DataServer.pm: tiny fixes for to improve the support -+ of PostgreSQL. -+ -+2014-07-25 Junichi Satoh <junichi@rworks.jp> -+ -+ * util/pandora_db.pl: Fixed error when 'dbengine' token is not defined -+ in pandora_server.conf with enterprise installed. -+ -+2014-07-23 Miguel de Dios <miguel.dedios@artica.es> -+ -+ * util/plugin/snmp_remote.pl: some fixed for the snmp v3. -+ -+2014-06-17 Vanessa Gil <vanessa.gil@artica.es> -+ -+ * lib/PandoraFMS/Core.pm: Added macros -+ '_alert_critical_instructions_' and -+ '_alert_warning_instructions_'. -+ -+2014-07-11 Hirofumi Kosaka <kosaka@rworks.jp> -+ -+ * util/pandora_manage.pl: To handle multi-byte strings in -+ command line arguments (assumes utf-8). -+ -+2014-07-08 Vanessa Gil <vanessa.gil@artica.es> -+ -+ * util/pandora_manage.pl: Fixed problem -+ with entities. -+ -+2014-07-08 Vanessa Gil <vanessa.gil@artica.es> -+ -+ * util/pandora_manage.pl: Fixed help screen. -+ -+2014-07-08 Vanessa Gil <vanessa.gil@artica.es> -+ -+ * util/pandora_manage.pl -+ lib/PandoraFMS/Core.pm: Added 'create_data_module_from_local_component' -+ and 'create_local_component' functions to CLI. -+ - 2014-06-26 Ramon Novoa <rnovoa@artica.es> - - * util/pandora_xml_stress.pl: Remove new line and carriage return -Index: Makefile.PL -=================================================================== ---- Makefile.PL (revision 10314) -+++ Makefile.PL (working copy) -@@ -1,6 +1,12 @@ - use 5.000; - use ExtUtils::MakeMaker; - -+my %ARGV = map { my @r = split /=/,$_; defined $r[1] or $r[1]=1; @r } @ARGV; -+ -+my @exe_files = qw(bin/pandora_server bin/pandora_exec); -+ -+$ARGV{WITHOUT_TENTACLE} or push @exe_files, 'bin/tentacle_server'; -+ - WriteMakefile( - INSTALLSITELIB => '/usr/lib/perl5', - (($^O eq 'freebsd') -@@ -27,10 +33,9 @@ - HTML::Entities => 0, - IO::Socket::INET6 => 0, - JSON => 0, -- }, -- EXE_FILES => [ 'bin/pandora_server', 'bin/pandora_exec'], -- PMLIBDIRS => [ 'lib' ], -- 'dist' => { 'TAR' => 'tar', 'TARFLAGS' => 'cvfz', 'SUFFIX' --=> '.gz', 'COMPRESS' => 'gzip'} -+ }, -+ EXE_FILES => [ @exe_files ], -+ PMLIBDIRS => [ 'lib' ], -+ 'dist' => { 'TAR' => 'tar', 'TARFLAGS' => 'cvfz', 'SUFFIX' => '.gz', 'COMPRESS' => 'gzip'} - ); - -Index: pandora_server_installer -=================================================================== ---- pandora_server_installer (revision 10314) -+++ pandora_server_installer (working copy) -@@ -10,97 +10,177 @@ - - - MODE=$1 --SECOPT=$2 -+shift -+ -+# Defaults -+PREFIX=/usr - PANDORA_SPOOL=/var/spool/pandora --PANDORA_HOME=/usr/share/pandora_server -+PANDORA_HOME=$PREFIX/share/pandora_server - PANDORA_CFG_DIR=/etc/pandora - PANDORA_LOG=/var/log/pandora - PANDORA_SERVER=/etc/init.d/pandora_server - TENTACLE_SERVER=/etc/init.d/tentacle_serverd --PANDORA_CFG_FILE=/etc/pandora/pandora_server.conf -+PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf -+PANDORA_CFG_FILE_DIST=conf/pandora_server.conf.new -+PANDORA_INIT_SCRIPT=util/pandora_server -+TENTACLE_INIT_SCRIPT=util/tentacle_serverd -+PERL=perl -+MANDIR=$PREFIX/share/man/man1 -+INITDIR=/etc/init.d -+WITHOUT_TENTACLE=0 - -+# -+# set_global_vars -+# Check platform and set DISTRO, OS_VERSION and LINUX. -+# Also, define some platform sepcific variables (e.g. PANDORA_RC_VAR for (Free|Net)BSD) -+# and override some of defaults defined above if needed. -+# -+set_global_vars () { -+ # Default -+ LINUX=NO -+ OS_VERSION=`uname -r` -+ DISTRO=`uname -s` - --get_distro () { -- # Get Linux Distro type and version -- # We assume we are on Linux unless told otherwise -- LINUX=YES -- if [ -f "/etc/SuSE-release" ] -- then -- OS_VERSION=`cat /etc/SuSE-release | grep VERSION | cut -f 3 -d " "` -- LINUX_DISTRO=SUSE -- elif [ -f "/etc/lsb-release" ] && [ ! -f "/etc/redhat-release" ] -- then -- OS_VERSION=`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -f 2 -d "="` -- LINUX_DISTRO=UBUNTU -- OS_VERSION="UBUNTU $OS_VERSION" -- elif [ -f "/etc/debian_version" ] -- then -- OS_VERSION=`cat /etc/debian_version` -- OS_VERSION="DEBIAN $OS_VERSION" -- LINUX_DISTRO=DEBIAN -- elif [ -f "/etc/fedora-release" ] -- then -- OS_VERSION=`cat /etc/fedora-release | cut -f 4 -d " "` -- OS_VERSION="FEDORA $OS_VERSION" -- LINUX_DISTRO=FEDORA -- elif [ `uname -s` = "Darwin" ] -- then -- # For future reference, Darwin doesn't have /etc/init.d but uses LaunchDaemons -- LINUX_DISTRO="Darwin" -- OS_VERSION=`uname -r` -- LINUX=NO -- elif [ `uname -s` = "AIX" ] -- then -- # For future reference, AIX doesn't have /etc/init.d -- LINUX_DISTRO="AIX" -- OS_VERSION=`uname -r` -- LINUX=NO -- elif [ `uname -s` = "SunOS" ] -- then -+ # set corret value for LINUX_DISTRO -+ case $DISTRO in -+ Linux) -+ # Default for Linux -+ LINUX=YES -+ DISTRO="GENERIC" -+ # Get Linux Distro type and version -+ # We assume we are on Linux unless told otherwise -+ if [ -f "/etc/SuSE-release" ] -+ then -+ OS_VERSION=`cat /etc/SuSE-release | grep VERSION | cut -f 3 -d " "` -+ DISTRO=SUSE -+ elif [ -f "/etc/lsb-release" ] && [ ! -f "/etc/redhat-release" ] -+ then -+ OS_VERSION=`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -f 2 -d "="` -+ DISTRO=UBUNTU -+ OS_VERSION="UBUNTU $OS_VERSION" -+ elif [ -f "/etc/debian_version" ] -+ then -+ OS_VERSION=`cat /etc/debian_version` -+ OS_VERSION="DEBIAN $OS_VERSION" -+ DISTRO=DEBIAN -+ elif [ -f "/etc/fedora-release" ] -+ then -+ OS_VERSION=`cat /etc/fedora-release | cut -f 4 -d " "` -+ OS_VERSION="FEDORA $OS_VERSION" -+ DISTRO=FEDORA -+ fi -+ ;; -+ Darwin|AIX) -+ # For future reference, Darwin doesn't have /etc/init.d but uses LaunchDaemons. -+ # AIX doesn't have /etc/init.d -+ ;; -+ SunOS) - # Some Solaris and other Unices don't have /etc/init.d, some have /usr/spool instead of /var/spool -- LINUX_DISTRO="Solaris" -- OS_VERSION=`uname -r` -- LINUX=NO -- elif [ `uname -s` = "Linux" ] -+ DISTRO="Solaris" -+ ;; -+ FreeBSD) -+ PREFIX=/usr/local -+ PANDORA_HOME=$PREFIX/share/pandora_server -+ PANDORA_CFG_DIR=$PREFIX/etc/pandora -+ PANDORA_SERVER=$PREFIX/etc/rc.d/pandora_server -+ TENTACLE_SERVER=$PREFIX/etc/rc.d/tentacle_server -+ PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf -+ PANDORA_CFG_FILE_DIST=$DISTRO/pandora_server.conf.new -+ PANDORA_INIT_SCRIPT=$DISTRO/pandora_server -+ TENTACLE_INIT_SCRIPT=$DISTRO/tentacle_server -+ MANDIR=$PREFIX/man/man1 -+ INITDIR=$PREFIX/etc/rc.d -+ PERL=/usr/local/bin/perl -+ PANDORA_RC_VAR="pandora_server_enable" -+ TENTACLE_RC_VAR="tentacle_server_enable" -+ ;; -+ NetBSD) -+ PREFIX=/usr/local -+ PANDORA_HOME=$PREFIX/share/pandora_server -+ PANDORA_CFG_DIR=$PREFIX/etc/pandora -+ PANDORA_SERVER=/etc/rc.d/pandora_server -+ TENTACLE_SERVER=/etc/rc.d/tentacle_server -+ PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf -+ PANDORA_CFG_FILE_DIST=$DISTRO/pandora_server.conf.new -+ PANDORA_INIT_SCRIPT=$DISTRO/pandora_server -+ TENTACLE_INIT_SCRIPT=$DISTRO/tentacle_server -+ PERL=/usr/pkg/bin/perl -+ INITDIR=/etc/rc.d -+ PANDORA_RC_VAR="pandora_server" -+ TENTACLE_RC_VAR="tentacle_server" -+ ;; -+ esac -+} -+ -+# -+# install_startup_script [options...] SRC -+# copy SRC into the $INITDIR and do additional required operation according to $DISTRO -+# if $INITDIR is not set or empty, do nothing. -+# If $DESTDIR is set, skip enabling service -+# OPTIONS: -+# -s SPRIO specify startup priority for service -+# -+install_startup_script () { -+ [ "$INITDIR" ] || return 1 -+ if [ "$1" = "-s" ] - then -- # Test for Linux to make sure we're on Linux -- LINUX_DISTRO="GENERIC" -- OS_VERSION=`uname -r` -- elif [ `uname -s` = "FreeBSD" ] -- then -- LINUX_DISTRO="FreeBSD" -- OS_VERSION=`uname -r` -- LINUX=NO -- elif [ `uname -s` = "NetBSD" ] -- then -- LINUX_DISTRO="NetBSD" -- OS_VERSION=`uname -r` -- LINUX=NO -- else -- # Default to Linux is false, test for real Linux above - that way we don't assume we can just plunk down files everywhere -- LINUX_DISTRO=`uname -s` -- OS_VERSION=`uname -r` -- LINUX=NO -+ SPRIO=$2 -+ shift;shift - fi -- echo "$LINUX_DISTRO:$OS_VERSION:$LINUX" -+ SRC=$1 -+ SCRIPT_NAME=`basename $SRC` -+ -+ echo "Copying the daemon script into $INITDIR" -+ cp $SRC $DESTDIR$INITDIR -+ -+ [ "$DESTDIR" ] && return -+ -+ case $DISTRO in -+ UBUNTU|DEBIAN) -+ echo "Linking startup script to /etc/rc2.d" -+ update-rc.d $SCRIPT_NAME defaults -+ ;; -+ SUSE) -+ echo "Creating startup daemons" -+ insserv $SCRIPT_NAME -+ ;; -+ FeeBSD|NetBSD) -+ chmod 555 $DESTDIR$INITDIR/$SCRIPT_NAME -+ ;; -+ *) -+ if [ "$LINUX" = YES ] -+ then -+ # Pandora FMS Server install (Other Distros) -+ INITLV=`grep '[0-9]:initdefault' /etc/inittab | cut -f 2 -d ':'` -+ : ${INITLV:=2} -+ echo "Linking startup script to /etc/rc.d/rc$INITLV.d/S$SPRIO$SCRIPT_NAME" -+ ln -s $INITDIR/$SCRIPT_NAME /etc/rc.d/rc$INITLV.d/S$SPRIO$SCRIPT_NAME -+ fi -+ ;; -+ esac - } - -- - install () { -+ set_global_vars - -- perl Makefile.PL > output 2>&1 #&& sleep 2 && cat output | grep "found" | wc -l -+ FORCE=0 -+ -+ # parse options -+ while : -+ do -+ case $1 in -+ --force) FORCE=1;; -+ --no-tentacle) WITHOUT_TENTALCE=1;; -+ --destdir) DESTDIR=$2;shift;; -+ *) break;; -+ esac -+ shift -+ done -+ -+ $PERL Makefile.PL INSTALLMAN1DIR=none WITHOUT_TENTACLE=$WITHOUT_TENTACLE > output 2>&1 -+ #&& sleep 2 && cat output | grep "found" | wc -l - DEPENDENCIAS=`cat output | grep "found" | wc -l` - -- FORCE=0 -- -- if [ ! -z "$SECOPT" ] -- then -- if [ "$SECOPT" = "--force" ] -- then -- FORCE=1 -- fi -- fi -- - if [ $DEPENDENCIAS -gt 0 ] && [ $FORCE -eq 0 ] - then - echo "You are missing the following dependencies" -@@ -142,448 +222,251 @@ - echo " $ cpan Time::Local DBI Socket6 XML::Simple XML::Twig IO::Socket Time::HiRes NetAddr::IP HTML::Entities IO::Socket::INET6 JSON" - echo " " - rm output -- else -+ exit 1 -+ fi -+ rm output - -- # This returns a multiple value string, separated with ":" -> $LINUX_DISTRO:$OS_VERSION:$LINUX -- GET_DISTRO="`get_distro`" -- DISTRO=`echo $GET_DISTRO | cut -f 1 -d ":"` -- OS_VERSION=`echo $GET_DISTRO | cut -f 2 -d ":"` -- LINUX=`echo $GET_DISTRO | cut -f 3 -d ":"` -- -- if [ "$DISTRO" = "UBUNTU" ] -- then -- echo "UBUNTU distribution detected" -- elif [ "$DISTRO" = "SUSE" ] -- then -- echo "SUSE distribution detected" -- elif [ "$DISTRO" = "FreeBSD" ] -- then -- echo "FreeBSD detected" -- PANDORA_SPOOL=/var/spool/pandora -- PANDORA_HOME=/usr/local/share/pandora_server -- PANDORA_CFG_DIR=/usr/local/etc/pandora -- PANDORA_LOG=/var/log/pandora -- PANDORA_SERVER=/usr/local/etc/rc.d/pandora_server -- TENTACLE_SERVER=/usr/local/etc/rc.d/tentacle_server -- PANDORA_CFG_FILE=/usr/local/etc/pandora/pandora_server.conf -- elif [ "$DISTRO" = "NetBSD" ] -- then -- echo "NetBSD detected" -- PANDORA_SPOOL=/var/spool/pandora -- PANDORA_HOME=/usr/local/share/pandora_server -- PANDORA_CFG_DIR=/usr/local/etc/pandora -- PANDORA_LOG=/var/log/pandora -- PANDORA_SERVER=/etc/rc.d/pandora_server -- TENTACLE_SERVER=/etc/rc.d/tentacle_server -- PANDORA_CFG_FILE=/usr/local/etc/pandora/pandora_server.conf -- -- sed s:/usr/bin/perl:/usr/pkg/bin/perl: bin/pandora_server > bin/tmp -- mv bin/tmp bin/pandora_server -- sed s:/usr/bin/perl:/usr/pkg/bin/perl: bin/pandora_exec > bin/tmp -- mv bin/tmp bin/pandora_exec -- sed s:/usr/bin/perl:/usr/pkg/bin/perl: bin/tentacle_server > bin/tmp -- mv bin/tmp bin/tentacle_server -- -- fi -+ if [ "$LINUX" = YES ] -+ then -+ echo "$DISTRO distribution detected" -+ else -+ echo "$DISTRO detected" -+ fi - -- echo "Installing binaries and libraries" -- make -- make install -+ echo "Installing binaries and libraries" -+ make -+ make DESTDIR=$DESTDIR install - -- echo "Checking binaries at /usr/local/bin -> /usr/bin" -- if [ ! -e "/usr/bin/pandora_server" ] -+ echo "Checking binaries at /usr/local/bin -> /usr/bin" -+ if [ ! -f "$DESTDIR/usr/bin/pandora_server" ] -+ then -+ if [ ! -f "$DESTDIR/usr/local/bin/pandora_server" ] - then -- if [ ! -e "/usr/local/bin/pandora_server" ] -- then -- echo "ERROR compiling Pandora FMS Server from sources. Aborting" -- exit 1 -- fi -- if [ "$DISTRO" != "FreeBSD" -a "$DISTRO" != "NetBSD" ] -- then -- ln -s /usr/local/bin/pandora_server /usr/bin -- ln -s /usr/local/bin/pandora_exec /usr/bin -- fi -+ echo "ERROR compiling Pandora FMS Server from sources. Aborting" -+ exit 1 - fi -- -- echo "Creating common Pandora FMS directories" -- id pandora 2> /dev/null -- if [ $? -eq 0 ]; then -- echo " " -- echo "User pandora does exist, make sure the SSH directories are correct" -- else -- echo "Are you sure we can create a standard 'pandora' user locally? [y/N]" -- read AREYOUSURE -- if [ "$AREYOUSURE" = "y" ]; then -- if [ "$DISTRO" = "FreeBSD" ] -- then -- echo "pandora:41121:::::Pandora FMS:/home/pandora:/usr/sbin/nologin:" | adduser -f - -w no 2> /dev/null -- else -- useradd pandora -- mkdir /home/pandora 2> /dev/null -- mkdir /home/pandora/.ssh 2> /dev/null -- chown -R pandora /home/pandora -- fi -- else -- echo "Please create the 'pandora' user manually according to your authentication scheme, then start again the installation" -- echo "Aborting..." -- exit 1 -- fi -+ if [ "$DISTRO" != "FreeBSD" ] && [ "$DISTRO" != "NetBSD" ] -+ then -+ ln -s /usr/local/bin/pandora_server $DESTDIR$PREFIX -+ ln -s /usr/local/bin/pandora_exec $DESTDIR$PREFIX - fi -+ fi - -- mkdir $PANDORA_SPOOL 2> /dev/null -- mkdir $PANDORA_SPOOL/data_in 2> /dev/null -- chmod 770 $PANDORA_SPOOL/data_in -- mkdir $PANDORA_SPOOL/data_in/conf 2> /dev/null -- chmod 770 $PANDORA_SPOOL/data_in/conf -- mkdir $PANDORA_SPOOL/data_in/md5 2> /dev/null -- chmod 770 $PANDORA_SPOOL/data_in/md5 -- mkdir $PANDORA_SPOOL/data_in/collections 2> /dev/null -- chmod 770 $PANDORA_SPOOL/data_in/collections -- mkdir $PANDORA_SPOOL/data_in/netflow 2> /dev/null -- chmod 770 $PANDORA_SPOOL/data_in/netflow -- mkdir $PANDORA_LOG 2> /dev/null -- -- echo "Giving proper permission to /var/spool/pandora" -- IDGROUP=`id -g www-data 2> /dev/null` -- if [ $? -eq 0 ] -- then -- GROUPNAME=`cat /etc/group | grep ":$IDGROUP:" | awk -F":" '{print $1}'` -- chown -R pandora:$GROUPNAME $PANDORA_SPOOL -- else -- IDGROUP=`id -g wwwrun 2> /dev/null` -- if [ $? -eq 0 ] -+ echo "Creating common Pandora FMS directories" -+ id pandora 2> /dev/null -+ if [ $? -eq 0 ]; then -+ echo " " -+ echo "User pandora does exist, make sure the SSH directories are correct" -+ elif [ "$DESTDIR" ] -+ then -+ # chown can fail with fakeroot installation -+ echo "User 'pandora' does not exist. All chown operations may fail." -+ echo "You should manualy set proper ownership to $DESTDIR$PANDORA_SPOOL if needed." -+ echo -+ else -+ echo "Are you sure we can create a standard 'pandora' user locally? [y/N]" -+ read AREYOUSURE -+ if [ "$AREYOUSURE" = "y" ]; then -+ if [ "$DISTRO" = "FreeBSD" ] - then -- GROUPNAME=`cat /etc/group | grep ":$IDGROUP:" | awk -F":" '{print $1}'` -- chown -R pandora:$GROUPNAME $PANDORA_SPOOL -+ echo "pandora:41121:::::Pandora FMS:/home/pandora:/usr/sbin/nologin:" | adduser -f - -w no 2> /dev/null - else -- IDGROUP=`id -g www 2> /dev/null` -- if [ $? -eq 0 ] -- then -- GROUPNAME=`cat /etc/group | grep ":$IDGROUP:" | awk -F":" '{print $1}'` -- chown -R pandora:$GROUPNAME $PANDORA_SPOOL -- else -- IDGROUP=`id -g apache 2> /dev/null` -- if [ $? -eq 0 ] -- then -- GROUPNAME=`cat /etc/group | grep ":$IDGROUP:" | awk -F":" '{print $1}'` -- chown -R pandora:$GROUPNAME $PANDORA_SPOOL -- else -- echo "No web server user found, some functionality might not perform correctly" -- chown -R pandora:root $PANDORA_SPOOL -- fi -- fi -+ useradd pandora -+ mkdir /home/pandora 2> /dev/null -+ mkdir /home/pandora/.ssh 2> /dev/null -+ chown -R pandora /home/pandora - fi -- fi -- -- -- echo "Creating setup directory in $PANDORA_CFG_DIR" -- mkdir $PANDORA_CFG_DIR 2> /dev/null -- if [ "$DISTRO" = "FreeBSD" ] -- then -- if [ -e $PANDORA_CFG_FILE ] -- then -- OLDFILENAMETMP=`date +"%Y-%m-%d"` -- echo "Old installation detected, backing up pandora_server.conf.$ODFILENAMETMP" -- mv $PANDORA_CFG_FILE $PANDORA_CFG_FILE.$OLDFILENAMETMP -- fi -- echo cp FreeBSD/pandora_server.conf $PANDORA_CFG_DIR -- cp FreeBSD/pandora_server.conf $PANDORA_CFG_DIR -- elif [ "$DISTRO" = "NetBSD" ] -- then -- if [ ! -d $PANDORA_CFG_DIR ] -- then -- mkdir -p $PANDORA_CFG_DIR -- fi -- if [ -e $PANDORA_CFG_FILE ] -- then -- OLDFILENAMETMP=`date +"%Y-%m-%d"` -- echo "Old installation detected, backing up pandora_server.conf.$ODFILENAMETMP" -- mv $PANDORA_CFG_FILE $PANDORA_CFG_FILE.$OLDFILENAMETMP -- fi -- echo cp NetBSD/pandora_server.conf $PANDORA_CFG_DIR -- cp NetBSD/pandora_server.conf $PANDORA_CFG_DIR - else -- if [ -f "$PANDORA_CFG_FILE" ] -- then -- echo cp conf/pandora_server.conf.new $PANDORA_CFG_DIR -- cp conf/pandora_server.conf.new $PANDORA_CFG_DIR -- else -- echo cp conf/pandora_server.conf.new $PANDORA_CFG_FILE -- cp conf/pandora_server.conf.new $PANDORA_CFG_FILE -- fi -+ echo "Please create the 'pandora' user manually according to your authentication scheme, then start again the installation" -+ echo "Aborting..." -+ exit 1 - fi -- chmod 770 $PANDORA_CFG_FILE -+ fi - -- echo "Installing Pandora Server manual" -- if [ "$DISTRO" = "FreeBSD" ] -+ mkdir -p $DESTDIR$PANDORA_SPOOL/data_in 2> /dev/null -+ chmod 770 $DESTDIR$PANDORA_SPOOL/data_in -+ mkdir $DESTDIR$PANDORA_SPOOL/data_in/conf 2> /dev/null -+ chmod 770 $DESTDIR$PANDORA_SPOOL/data_in/conf -+ mkdir $DESTDIR$PANDORA_SPOOL/data_in/md5 2> /dev/null -+ chmod 770 $DESTDIR$PANDORA_SPOOL/data_in/md5 -+ mkdir $DESTDIR$PANDORA_SPOOL/data_in/collections 2> /dev/null -+ chmod 770 $DESTDIR$PANDORA_SPOOL/data_in/collections -+ mkdir $DESTDIR$PANDORA_SPOOL/data_in/netflow 2> /dev/null -+ chmod 770 $DESTDIR$PANDORA_SPOOL/data_in/netflow -+ mkdir -p $DESTDIR$PANDORA_LOG 2> /dev/null -+ -+ echo "Giving proper permission to /var/spool/pandora" -+ for group in "www-data" wwwrun www apache -+ do -+ IDGROUP=`id -g "$group" 2> /dev/null` -+ if [ $? -eq 0 ] - then -- cp man/man1/pandora_server.1.gz /usr/local/man/man1 -- else -- cp man/man1/pandora_server.1.gz /usr/share/man/man1 -+ GROUPNAME=`grep ":$IDGROUP:" /etc/group | awk -F":" '{print $1}'` -+ break - fi -+ done -+ if [ -z "$GROUPNAME" ] -+ then -+ echo "No web server user found, some functionality might not perform correctly" -+ GROUPNAME=0 -+ fi -+ # when fakeroot installation, this can fail -+ chown -R pandora:$GROUPNAME $DESTDIR$PANDORA_SPOOL 2>/dev/null - -- if [ "$LINUX" = "YES" ] -- then -- echo "Copying the daemon script into /etc/init.d/pandora_server" -- cp util/pandora_server /etc/init.d/ -- -- if [ "$DISTRO" = "UBUNTU" ] || [ "$DISTRO" = "DEBIAN" ] -- then -- -- echo "Linking startup script to /etc/rc2.d" -- update-rc.d pandora_server defaults -- else -- if [ "$DISTRO" = "SUSE" ] -- then -- echo "Creating startup daemons" -- insserv pandora_server -- else -- # Pandora FMS Server install (Other Distros) -- INITLV=`cat /etc/inittab | grep "[0-9]\:initdefault" | cut -f 2 -d ":"` -- if [ -z "$INITLV" ] -- then -- INITLV=2 -- fi -- echo "Linking startup script to /etc/rc.d/rc$INITLV.d" -- ln -s $PANDORA_SERVER /etc/rc.d/rc$INITLV.d/S90pandora_server -- fi -- fi -- else -- if [ "$DISTRO" = "FreeBSD" ] -- then -- echo "Copying the daemon script into $PANDORA_SERVER" -- cp FreeBSD/pandora_server $PANDORA_SERVER -- chmod 555 $PANDORA_SERVER -- fi -- if [ "$DISTRO" = "NetBSD" ] -- then -- echo "Copying the daemon script into $PANDORA_SERVER" -- cp NetBSD/pandora_server $PANDORA_SERVER -- chmod 555 $PANDORA_SERVER -- fi -- fi -+ echo "Creating setup directory in $PANDORA_CFG_DIR" -+ mkdir -p $DESTDIR$PANDORA_CFG_DIR 2> /dev/null -+ if [ -f "$DESTDIR$PANDORA_CFG_FILE" ] -+ then -+ echo cp $PANDORA_CFG_FILE_DIST $DESTDIR$PANDORA_CFG_DIR -+ cp $PANDORA_CFG_FILE_DIST $DESTDIR$PANDORA_CFG_DIR -+ else -+ echo cp $PANDORA_CFG_FILE_DIST $DESTDIR$PANDORA_CFG_FILE -+ cp $PANDORA_CFG_FILE_DIST $DESTDIR$PANDORA_CFG_FILE -+ chmod 770 $DESTDIR$PANDORA_CFG_FILE -+ fi - -- if [ -d /etc/logrotate.d ]; then -- echo "Creating logrotate.d entry for Pandora FMS log management" -- cp util/pandora_logrotate /etc/logrotate.d/pandora -- else -- echo "Please add a log rotation schedule manually to your log rotation daemon (if any)" -- fi -+ echo "Installing Pandora Server manual" -+ cp man/man1/pandora_server.1.gz $DESTDIR$MANDIR -+ -+ install_startup_script -s 90 $PANDORA_INIT_SCRIPT -+ -+ if [ -d /etc/logrotate.d ] -+ then -+ [ -d $DESTDIR/etc/logrotate.d ] && mkdir -p $DESTDIR/etc/logrotate.d -+ echo "Creating logrotate.d entry for Pandora FMS log management" -+ cp util/pandora_logrotate $DESTDIR/etc/logrotate.d/pandora -+ else -+ echo "Please add a log rotation schedule manually to your log rotation daemon (if any)" -+ fi - -- if [ "$LINUX" = "YES" ] -- then -- if [ "$SECOPT" != "--no-tentacle" ] -- then -- if [ "$DISTRO" = "UBUNTU" ] || [ "$DISTRO" = "DEBIAN" ] -- then -- # Tentacle server install (Ubuntu) -- echo "Installing tentacle server" -- cp bin/tentacle_server /usr/bin -- chown pandora /usr/bin/tentacle_server -- cp util/tentacle_serverd $TENTACLE_SERVER -- update-rc.d tentacle_serverd defaults -- else -- if [ "$DISTRO" = "SUSE" ] -- then -- echo "Creating Tentacle startup daemon" -- cp bin/tentacle_server /usr/bin -- chown pandora /usr/bin/tentacle_server -- cp util/tentacle_serverd /etc/init.d/tentacle_serverd -- insserv tentacle_serverd -- else -- # Tentacle server install (Other Distros) -- echo "Installing tentacle server in /etc/rc.d/rc$INITLV.d/S80tentacle_serverd" -- cp bin/tentacle_server /usr/bin -- chown pandora /usr/bin/tentacle_server -- cp util/tentacle_serverd /etc/init.d/tentacle_serverd -- ln -s $TENTACLE_SERVER /etc/rc.d/rc$INITLV.d/S80tentacle_serverd -- fi -- fi -+ if [ $WITHOUT_TENTACLE -eq 0 ] -+ then -+ # tentacle_server is already installed by "make install" -+ install_startup_script -s 80 $TENTACLE_INIT_SCRIPT -+ -+ echo "Installing Tentacle Server manual" -+ cp man/man1/tentacle_server.1.gz $DESTDIR$MANDIR -+ fi - -- echo "Installing Tentacle Server manual" -- cp man/man1/tentacle_server.1.gz /usr/share/man/man1 -- fi -- else -- if [ "$SECOPT" != "--no-tentacle" ] -- then -- if [ "$DISTRO" = "FreeBSD" ] -- then -- echo "Installing tentacle server" -- cp bin/tentacle_server /usr/local/bin -- chown pandora /usr/local/bin/tentacle_server -- chmod 555 /usr/local/bin/tentacle_server -- cp FreeBSD/tentacle_server $TENTACLE_SERVER -- chmod 555 $TENTACLE_SERVER -- echo "Installing Tentacle Server manual" -- cp man/man1/tentacle_server.1.gz /usr/local/man/man1 -- fi -- if [ "$DISTRO" = "NetBSD" ] -- then -- echo "Installing tentacle server" -- cp bin/tentacle_server /usr/local/bin -- chown pandora /usr/local/bin/tentacle_server -- chmod 555 /usr/local/bin/tentacle_server -- cp NetBSD/tentacle_server $TENTACLE_SERVER -- chmod 555 $TENTACLE_SERVER -- echo "Installing Tentacle Server manual" -- cp man/man1/tentacle_server.1.gz /usr/share/man/man1 -- fi -- fi -- fi -+ echo "Creating Pandora FMS distribution directory in $PANDORA_HOME" -+ mkdir -p $DESTDIR$PANDORA_HOME 2> /dev/null -+ cp -R util $DESTDIR$PANDORA_HOME -+ find $DESTDIR$PANDORA_HOME -type l -delete - -- echo "Creating Pandora FMS distribution directory in $PANDORA_HOME" -- mkdir $PANDORA_HOME 2> /dev/null -- if [ ! -d $PANDORA_HOME ] -+ # install cron job -+ if [ -d /etc/cron.hourly ] -+ then -+ [ ! -d $DESTDIR/etc/cron.hourly ] && mkdir -p $DESTDIR/etc/cron.hourly -+ echo "Creating the Cron script to run Pandora DB tool each hour" -+ echo "#!/bin/bash" > $DESTDIR/etc/cron.hourly/pandora_db -+ echo "perl $PANDORA_HOME/util/pandora_db.pl /etc/pandora/pandora_server.conf" >> /etc/cron.hourly/pandora_db -+ chmod +x /etc/cron.hourly/pandora_db -+ elif [ "$DISTRO" = "FreeBSD" ] || [ "$DISTRO" = "NetBSD" ] -+ then -+ if [ "$DESTDIR" ] - then -- mkdir -p $PANDORA_HOME -- fi -- cp -R util $PANDORA_HOME -- -- if [ -d /etc/cron.hourly ] -- then -- echo "Creating the Cron script to run Pandora DB tool each hour" -- echo "#!/bin/bash" > /etc/cron.hourly/pandora_db -- echo "perl /usr/share/pandora_server/util/pandora_db.pl /etc/pandora/pandora_server.conf" >> /etc/cron.hourly/pandora_db -- chmod +x /etc/cron.hourly/pandora_db -+ echo "Skip adding cron entry for pandora_db.pl when performing fakeroot installation." - else -- if [ "$DISTRO" = "FreeBSD" -o "$DISTRO" = "NetBSD" ] -+ grep pandora_db.pl /etc/crontab > /dev/null 2>&1 -+ if [ $? -ne 0 ] - then -- grep pandora_db.pl /etc/crontab > /dev/null 2>&1 -- if [ $? -ne 0 ] -- then -- echo "# Pandora FMS" >> /etc/crontab -- echo "2 * * * * root perl /usr/local/share/pandora_server/util/pandora_db.pl /usr/local/etc/pandora/pandora_server.conf" >> /etc/crontab -- else -- echo "The crontab for pandora_db.pl is already configured." -- fi -+ echo "# Pandora FMS" >> /etc/crontab -+ echo "2 * * * * root perl $PANDORA_HOME/util/pandora_db.pl $PANDORA_CFG_FILE" >> /etc/crontab - else -- echo "You're probably not using cron for automatic scheduling. You should schedule the following command to run frequently (hourly) on your master server:" -- echo " perl /usr/share/pandora_server/util/pandora_db.pl /etc/pandora/pandora_server.conf" -+ echo "The crontab for pandora_db.pl is already configured." - fi - fi -- echo -- echo "Now you have to edit your $PANDORA_CFG_FILE file to change the database password (default is pandora) with the one set in include/config.php of your Pandora FMS Console." -- echo "After setting password you can start your Pandora FMS Server!!" -- rm output -+ else -+ echo "You're probably not using cron for automatic scheduling. You should schedule the following command to run frequently (hourly) on your master server:" -+ echo " perl $PANDORA_HOME/util/pandora_db.pl $PANDORA_CFG_FILE" -+ fi -+ echo -+ echo "Now you have to edit your $PANDORA_CFG_FILE file to change the database password (default is pandora) with the one set in include/config.php of your Pandora FMS Console." -+ echo "After setting password you can start your Pandora FMS Server!!" - -- if [ -d "/etc/logrotate.d" ] -- then -- echo "Managing Pandora FMS logs with logrotate (Distro independent)" -- cp -aRf util/pandora_logrotate /etc/logrotate.d/pandora -- fi -+ if [ "$DISTRO" = "FreeBSD" ] || [ "$DISTRO" = "NetBSD" ] -+ then -+ echo " " -+ echo "Define '$PANDORA_RC_VAR=\"YES\"' in /etc/rc.conf to enable pandora server daemon." -+ [ "$WITHOUT_TENTACLE" = 0 ] && \ -+ echo "Define '$TENTACLE_RC_VAR=\"YES\"' in /etc/rc.conf to enable tentacle server daemon." -+ fi -+} - -- if [ "$DISTRO" = "FreeBSD" ] -- then -- echo " " -- echo "Define 'pandora_server_enable=\"YES\"' in /etc/rc.conf to enable pandora server daemon." -- echo "Define 'tentacle_server_enable=\"YES\"' in /etc/rc.conf to enable tentacle server daemon." -- fi -+uninstall () { -+ set_global_vars - -- if [ "$DISTRO" = "NetBSD" ] -- then -- echo " " -- echo "Define 'pandora_server=\"YES\"' in /etc/rc.conf to enable pandora server daemon." -- echo "Define 'tentacle_server=\"YES\"' in /etc/rc.conf to enable tentacle server daemon." -- fi -- -+ if [ "$LINUX" != NO ] || [ "$DISTRO" != "FreeBSD" ] || [ "$DISTRO" != "NetBSD" ] -+ then -+ echo "This is not a Linux-based distro. Uninstaller is currently not working for your OS" -+ exit 1 - fi - --} -- --uninstall_bsd () { -- if [ "$DISTRO" = "FreeBSD" ] -+ echo "Removing PERL libs and man files" -+ -+ PERL_SITELIB=/usr/lib/perl5 -+ if [ "$DISTRO" != "FreeBSD" ] || [ "$DISTRO" != "NetBSD" ] - then -- PANDORA_SPOOL=/var/spool/pandora -- PANDORA_HOME=/usr/local/share/pandora_server -- PANDORA_CFG_DIR=/usr/local/etc/pandora -- PANDORA_LOG=/var/log/pandora -- PANDORA_SERVER=/usr/local/etc/rc.d/pandora_server -- TENTACLE_SERVER=/usr/local/etc/rc.d/tentacle_server -- PANDORA_CFG_FILE=/usr/local/etc/pandora/pandora_server.conf -- TMP_CRONTAB=/tmp/crontab.tmp -- else -- PANDORA_SPOOL=/var/spool/pandora -- PANDORA_HOME=/usr/local/share/pandora_server -- PANDORA_CFG_DIR=/usr/local/etc/pandora -- PANDORA_LOG=/var/log/pandora -- PANDORA_SERVER=/etc/rc.d/pandora_server -- TENTACLE_SERVER=/etc/rc.d/tentacle_server -- PANDORA_CFG_FILE=/usr/local/etc/pandora/pandora_server.conf -- TMP_CRONTAB=/tmp/crontab.tmp -- fi -+ PERL_SITELIB=$(eval $($PERL -V:sitelib);echo $sitelib); -+ fi -+ PERL_SITEMAN3DIR=`eval \`$PERL -V:siteman3dir\`;echo $siteman3dir`; - -- echo "Removing PERL libs" -- rm -rf /usr/lib/perl5/PandoraFMS/ -+ [ -d $DESTDIR/$PERL_SITELIB/PandoraFMS ] && rm -rf $DESTDIR/$PERL_SITELIB/PandoraFMS -+ rm -f $DESTDIR/$PERL_SITEMAN3DIR/PandoraFMS::* 2>/dev/null - -- echo "Removing Pandora Servers" -- rm -Rf $PANDORA_SPOOL/data_in/ - -- echo "If the user Pandora is not being used for any other operations, please delete using the following commands:" -- echo " rmuser pandora" -- -- rm -Rf $PANDORA_LOG 2> /dev/null -- rm -Rf $PANDORA_CFG_FILE 2> /dev/null -- rm -Rf $PANDORA_SERVER 2> /dev/null -- rm -Rf $PANDORA_HOME -- rm -Rf $PANDORA_SERVER -- rm -Rf $TENTACLE_SERVER -- -- cat /etc/crontab | grep -v "Pandora FMS" | grep -v "pandora_db.pl" > $TMP_CRONTAB -- cp $TMP_CRONTAB /etc/crontab -- rm $TMP_CRONTAB -- -- echo "Done" -- exit --} -- --uninstall () { -- GET_DISTRO="`get_distro`" -- DISTRO=`echo $GET_DISTRO | cut -f 1 -d ":"` -- if [ "`uname -s`" != "Linux" ]; then -- if [ "$DISTRO" = "FreeBSD" -o "$DISTRO" = "NetBSD" ] -- then -- uninstall_bsd -- else -- echo "This is not a Linux-based distro. Uninstaller is currently not working for your OS" -- fi -- fi -- -- echo "Removing PERL libs" -- rm -rf /usr/lib/perl5/PandoraFMS/ -- - echo "Removing Pandora Servers" -- if [ -d $PANDORA_SPOOL/data_out ]; then -- rm -Rf $PANDORA_SPOOL/data_in -+ if [ -d $DESTDIR$PANDORA_SPOOL/data_out ]; then -+ rm -Rf $DESTDIR$PANDORA_SPOOL/data_in - else -- rm -Rf $PANDORA_SPOOL -+ rm -Rf $DESTDIR$PANDORA_SPOOL - fi - - echo "If the user Pandora is not being used for any other operations, please delete using the following commands:" -- echo " userdel pandora" -- echo " rm -Rf /home/pandora/" -+ if [ "$DISTRO" != "FreeBSD" ] || [ "$DISTRO" != "NetBSD" ] -+ then -+ echo " rmuser pandora" -+ else -+ echo " userdel pandora" -+ echo " rm -Rf /home/pandora/" -+ fi - - ## Just to clarify here. Some people (like me) are using the pandora user - ## for other purposes and/or using an LDAP-based user management - ## I would hate to have a script clear out this users' information without any notification - -- rm -Rf $PANDORA_LOG 2> /dev/null -- rm -Rf $PANDORA_CFG_FILE 2> /dev/null -- rm -Rf "$PANDORA_CFG_FILE.new" 2> /dev/null -- rm -Rf $PANDORA_SERVER 2> /dev/null -- rm -Rf /usr/bin/pandora_server 2> /dev/null -- rm -Rf /usr/bin/pandora_exec 2> /dev/null -- rm -Rf $PANDORA_HOME -- rm -Rf /etc/cron.hourly/pandora_db -- rm -Rf /etc/logrotate.d/pandora -- if [ "$DISTRO" = "UBUNTU" ] || [ "$DISTRO" = "DEBIAN" ] -+ -+ rm -Rf $DESTDIR$PANDORA_LOG 2> /dev/null -+ rm -f $DESTDIR$PANDORA_CFG_FILE 2> /dev/null -+ rm -f "$DESTDIR$PANDORA_CFG_FILE.new" 2> /dev/null -+ rm -f $DESTDIR$PANDORA_SERVER 2> /dev/null -+ rm -f $DESTDIR$PREFIX/bin/pandora_server 2> /dev/null -+ rm -f $DESTDIR$PREFIX/bin/pandora_exec 2> /dev/null -+ rm -f $DESTDIR$PREFIX/bin/tentacle_server 2> /dev/null -+ rm -Rf $DESTDIR$PANDORA_HOME -+ rm -f $DESTDIR/etc/cron.hourly/pandora_db -+ rm -f $DESTDIR/etc/logrotate.d/pandora -+ if [ "$DESTDIR" ] - then -+ # do nothing with "fakeroot" uninstallation -+ : -+ elif [ "$DISTRO" = "UBUNTU" ] || [ "$DISTRO" = "DEBIAN" ] -+ then - update-rc.d -f pandora_server remove - update-rc.d -f tentacle_serverd remove -+ elif [ "$DISTRO" != "FreeBSD" ] || [ "$DISTRO" != "NetBSD" ] -+ then -+ TMP_CRONTAB=/tmp/crontab.tmp -+ egrep -v "Pandora FMS|pandora_db.pl" /etc/crontab > $TMP_CRONTAB -+ cp $TMP_CRONTAB /etc/crontab -+ rm $TMP_CRONTAB - fi -- rm -Rf /etc/rc2.d/S90pandora_server 2> /dev/null -- rm -Rf /etc/rc.d/rc3.d/S90pandora_server 2> /dev/null -- rm -Rf /usr/share/man/man1/pandora_server.1.gz 2>/dev/null -- rm -Rf /usr/share/man/man1/tentacle_server.1.gz 2>/dev/null -+ rm -f $DESTDIR/etc/rc2.d/S90pandora_server 2> /dev/null -+ rm -f $DESTDIR/etc/rc.d/rc3.d/S90pandora_server 2> /dev/null -+ rm -f $DESTDIR/etc/rc2.d/S80tentacle_serverd 2> /dev/null -+ rm -f $DESTDIR/etc/rc.d/rc3.d/S80tentacle_serverd 2> /dev/null -+ rm -f $DESTDIR$MANDIR/pandora_server.1.gz 2>/dev/null -+ rm -f $DESTDIR$MANDIR/tentacle_server.1.gz 2>/dev/null - echo "Done" - } - -@@ -595,24 +478,25 @@ - echo " " - echo " --force Ignore dependency problems and do the install" - echo " --no-tentacle Skip tentacle server installation (by default tentacle server installed)" -+ echo " --destdir DIR Specify root directory for \"fakeroot\" installation" - echo " " - } - - # Script banner at start - echo " " --echo "Pandora FMS 5.0 Server Installer (c) 2008-2013 Artica ST" -+echo "Pandora FMS 5.1 Server Installer (c) 2008-2014 Artica ST" - echo "This program is licensed under GPL2 Terms. http://pandorafms.com" - echo " " - - case "$MODE" in - - '--install') -- install -+ install "$@" - exit - ;; - - '--uninstall') -- uninstall -+ uninstall "$@" - exit - ;; - -Index: lib/PandoraFMS/SNMPServer.pm -=================================================================== ---- lib/PandoraFMS/SNMPServer.pm (revision 10314) -+++ lib/PandoraFMS/SNMPServer.pm (working copy) -@@ -25,6 +25,7 @@ - use Thread::Semaphore; - - use Time::Local; -+use Time::HiRes qw(usleep); - use XML::Simple; - - # Default lib dir for RPM and DEB packages -@@ -33,21 +34,27 @@ - use PandoraFMS::Tools; - use PandoraFMS::DB; - use PandoraFMS::Core; --use PandoraFMS::Server; -+use PandoraFMS::ProducerConsumerServer; - --# Inherits from PandoraFMS::Server --our @ISA = qw(PandoraFMS::Server); -+# Inherits from PandoraFMS::ProducerConsumerServer -+our @ISA = qw(PandoraFMS::ProducerConsumerServer); - --# Tells the server to keep running --my $RUN :shared; -+# Global variables -+my @TaskQueue :shared; -+my %PendingTasks :shared; -+my $Sem :shared; -+my $TaskSem :shared; - - # Trap statistics by agent - my %AGENTS = (); - -+# Index file management -+my ($IDX_FILE, $LAST_LINE, $LAST_SIZE) = (); -+ - ######################################################################################## - # SNMP Server class constructor. - ######################################################################################## --sub new ($$;$) { -+sub new ($$$) { - my ($class, $config, $dbh) = @_; - - return undef unless $config->{'snmpconsole'} == 1; -@@ -57,15 +64,46 @@ - return undef; - } - -+ # Wait for the SNMP log file to be available -+ my $log_file = $config->{'snmp_logfile'}; -+ sleep ($config->{'server_threshold'}) if (! -e $log_file); -+ if (!open (SNMPLOGFILE, $log_file)) { -+ logger ($config, ' [E] Could not open the SNMP log file ' . $config->{'snmp_logfile'} . ".", 1); -+ print_message ($config, ' [E] Could not open the SNMP log file ' . $config->{'snmp_logfile'} . ".", 1); -+ return 1; -+ } -+ -+ # Process index file, if available -+ ($IDX_FILE, $LAST_LINE, $LAST_SIZE) = ($log_file . '.index', 0, 0); -+ if (-e $IDX_FILE) { -+ open (INDEXFILE, $IDX_FILE) or return; -+ my $idx_data = <INDEXFILE>; -+ close INDEXFILE; -+ ($LAST_LINE, $LAST_SIZE) = split(/\s+/, $idx_data); -+ } -+ my $log_size = (stat ($log_file))[7]; -+ -+ # New SNMP log file found -+ if ($log_size < $LAST_SIZE) { -+ unlink ($IDX_FILE); -+ ($LAST_LINE, $LAST_SIZE) = (0, 0); -+ } -+ -+ # Skip already processed lines -+ readline SNMPLOGFILE for (1..$LAST_LINE); -+ -+ # Initialize semaphores and queues -+ @TaskQueue = (); -+ %PendingTasks = (); -+ $Sem = Thread::Semaphore->new; -+ $TaskSem = Thread::Semaphore->new (0); -+ - # Call the constructor of the parent class -- my $self = $class->SUPER::new($config, 2, $dbh); -+ my $self = $class->SUPER::new($config, 2, \&PandoraFMS::SNMPServer::data_producer, \&PandoraFMS::SNMPServer::data_consumer, $dbh); - - # Save the path of snmptrapd - $self->{'snmp_trapd'} = $config->{'snmp_trapd'}; - -- # Run! -- $RUN = 1; -- - bless $self, $class; - return $self; - } -@@ -77,242 +115,219 @@ - my $self = shift; - my $pa_config = $self->getConfig (); - -- print_message ($pa_config, " [*] Starting Pandora FMS SNMP Console.", 1); -- $self->SUPER::run (\&PandoraFMS::SNMPServer::pandora_snmptrapd); -+ print_message ($pa_config, " [*] Starting Pandora FMS SNMP Console.", 2); -+ -+ # Set the initial date for storm protection. -+ $pa_config->{"__storm_ref__"} = time(); -+ -+ # This is the only server that reads from disk instead of from the DB. No need for a higher server threshold. -+ $pa_config->{'server_threshold'} = 1; -+ -+ $self->setNumThreads ($pa_config->{'snmpconsole_threads'}); -+ $self->SUPER::run (\@TaskQueue, \%PendingTasks, $Sem, $TaskSem); - } - --########################################################################## --# Process SNMP log file. --########################################################################## --sub pandora_snmptrapd { -+############################################################################### -+# Data producer. -+############################################################################### -+sub data_producer ($) { - my $self = shift; -- my $pa_config = $self->getConfig (); -+ my ($pa_config, $dbh) = ($self->getConfig (), $self->getDBH ()); - -- my $dbh; -- eval { -- # Connect to the DB -- $dbh = db_connect ($pa_config->{'dbengine'}, $pa_config->{'dbname'}, $pa_config->{'dbhost'}, -- $pa_config->{'dbport'}, $pa_config->{'dbuser'}, $pa_config->{'dbpass'}); -- $self->setDBH ($dbh); -+ my @tasks; -+ -+ # Slave server -+ if ($pa_config->{'pandora_master'} == 0 && get_db_value ($dbh, 'SELECT name FROM tserver WHERE name = ANY(SELECT name FROM tserver WHERE status = 0)') == undef) { -+ return @tasks; -+ } - -- # Wait for the SNMP log file to be available -- my $log_file = $pa_config->{'snmp_logfile'}; -- sleep ($pa_config->{'server_threshold'}) while (! -e $log_file); -- open (SNMPLOGFILE, $log_file) or return; -+ # Reset storm protection counters -+ my $curr_time = time (); -+ if ($pa_config->{"__storm_ref__"} + $pa_config->{"snmp_storm_timeout"} < $curr_time) { -+ $pa_config->{"__storm_ref__"} = $curr_time; -+ %AGENTS = (); -+ } - -- # Process index file, if available -- my ($idx_file, $last_line, $last_size) = ($log_file . '.index', 0, 0); -- if (-e $idx_file) { -- open (INDEXFILE, $idx_file) or return; -- my $idx_data = <INDEXFILE>; -- close INDEXFILE; -- ($last_line, $last_size) = split(/\s+/, $idx_data); -- } -+ while (my $line = <SNMPLOGFILE>) { -+ $LAST_LINE++; -+ $LAST_SIZE = (stat ($pa_config->{'snmp_logfile'}))[7]; -+ chomp ($line); - -- my $log_size = (stat ($log_file))[7]; -+ # Update index file -+ open INDEXFILE, '>' . $IDX_FILE; -+ print INDEXFILE $LAST_LINE . ' ' . $LAST_SIZE; -+ close INDEXFILE; - -- # New SNMP log file found -- if ($log_size < $last_size) { -- unlink ($idx_file); -- ($last_line, $last_size) = (0, 0); -+ # Skip lines other than SNMP Trap logs -+ next unless ($line =~ m/^SNMPv[12]\[\*\*\]/); -+ -+ # Storm protection. -+ my ($ver, $date, $time, $source, $null) = split(/\[\*\*\]/, $line, 5); -+ next unless defined ($source); -+ if (! defined ($AGENTS{$source})) { -+ $AGENTS{$source}{'count'} = 1; -+ $AGENTS{$source}{'event'} = 0; -+ } else { -+ $AGENTS{$source}{'count'} += 1; - } -- -- # Skip already processed lines -- readline SNMPLOGFILE for (1..$last_line); -- -- # Main loop -- my $storm_ref = time (); -- while ($RUN == 1) { -- -- # Reset storm protection counters -- my $curr_time = time (); -- if ($storm_ref + $pa_config->{"snmp_storm_timeout"} < $curr_time) { -- $storm_ref = $curr_time; -- %AGENTS = (); -+ if ($pa_config->{'snmp_storm_protection'} > 0 && $AGENTS{$source}{'count'} > $pa_config->{'snmp_storm_protection'}) { -+ if ($AGENTS{$source}{'event'} == 0) { -+ pandora_event ($pa_config, "Too many traps coming from $source. Silenced for " . int ($pa_config->{"snmp_storm_timeout"} / 60) . " minutes.", 0, 0, 4, 0, 0, 'system', 0, $dbh); - } -+ $AGENTS{$source}{'event'} = 1; -+ next; -+ } - -- while (my $line = <SNMPLOGFILE>) { -- $last_line++; -- $last_size = (stat ($log_file))[7]; -- chomp ($line); -+ push (@tasks, $line); -+ } - -- # Update index file -- open INDEXFILE, '>' . $idx_file; -- print INDEXFILE $last_line . ' ' . $last_size; -- close INDEXFILE; -+ return @tasks; -+} - -- # Skip lines other than SNMP Trap logs -- next unless ($line =~ m/^SNMPv[12]\[\*\*\]/); -+############################################################################### -+# Data consumer. -+############################################################################### -+sub data_consumer ($$) { -+ my ($self, $task) = @_; - -- (my $trap_ver, $line) = split(/\[\*\*\]/, $line, 2); -+ pandora_snmptrapd ($self->getConfig (), $task, $self->getServerID (), $self->getDBH ()); -+} - -- # Process SNMP filter -- next if (matches_filter ($dbh, $pa_config, $line) == 1); -+########################################################################## -+# Process SNMP log file. -+########################################################################## -+sub pandora_snmptrapd { -+ my ($pa_config, $line, $server_id, $dbh) = @_; - -- logger($pa_config, "Reading trap '$line'", 10); -- my ($date, $time, $source, $oid, $type, $type_desc, $value, $data) = ('', '', '', '', '', '', '', ''); -+ (my $trap_ver, $line) = split(/\[\*\*\]/, $line, 2); - -- if ($trap_ver eq "SNMPv1") { -- ($date, $time, $source, $oid, $type, $type_desc, $value, $data) = split(/\[\*\*\]/, $line, 8); -+ # Process SNMP filter -+ next if (matches_filter ($dbh, $pa_config, $line) == 1); - -- $value = limpia_cadena ($value); -+ logger($pa_config, "Reading trap '$line'", 10); -+ my ($date, $time, $source, $oid, $type, $type_desc, $value, $data) = ('', '', '', '', '', '', '', ''); - -- # Try to save as much information as possible if the trap could not be parsed -- $oid = $type_desc if ($oid eq '' || $oid eq '.'); -+ if ($trap_ver eq "SNMPv1") { -+ ($date, $time, $source, $oid, $type, $type_desc, $value, $data) = split(/\[\*\*\]/, $line, 8); - -- } elsif ($trap_ver eq "SNMPv2") { -- ($date, $time, $source, $data) = split(/\[\*\*\]/, $line, 4); -- my @data = split(/\t/, $data); -+ $value = limpia_cadena ($value); - -- shift @data; # Drop unused 1st data. -- $oid = shift @data; -+ # Try to save as much information as possible if the trap could not be parsed -+ $oid = $type_desc if ($oid eq '' || $oid eq '.'); - -- if (!defined($oid)) { -- logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv2 trap?)", 1); -- next; -- } -- $oid =~ s/.* = OID: //; -- $data = join("\t", @data); -- } -+ } elsif ($trap_ver eq "SNMPv2") { -+ ($date, $time, $source, $data) = split(/\[\*\*\]/, $line, 4); -+ my @data = split(/\t/, $data); - -- if ($trap_ver eq "SNMPv2" || $pa_config->{'snmp_pdu_address'} eq '1' ) { -- # extract IP address from %b part: -- # * destination part (->[dest_ip]:dest_port) appears in Net-SNMP > 5.3 -- # * protocol name (TCP: or UDP:) and bracketted IP addr w/ port number appear in -- # Net-SNMP > 5.1 (Net-SNMP 5.1 has IP addr only). -- # * port number is signed (often negative) in Net-SNMP 5.2 -- $source =~ s/(?:(?:TCP|UDP):\s*)?\[?([^] ]+)\]?(?::-?\d+)?(?:\s*->.*)?$/$1/; -- } -+ shift @data; # Drop unused 1st data. -+ $oid = shift @data; - -- my $timestamp = $date . ' ' . $time; -- my ($custom_oid, $custom_type, $custom_value) = ('', '', ''); -+ if (!defined($oid)) { -+ logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv2 trap?)", 1); -+ next; -+ } -+ $oid =~ s/.* = OID: //; -+ $data = join("\t", @data); -+ } - -- # custom_type, custom_value is not used since 4.0 version, all custom data goes on custom_oid -- $custom_oid = $data; -+ if ($trap_ver eq "SNMPv2" || $pa_config->{'snmp_pdu_address'} eq '1' ) { -+ # extract IP address from %b part: -+ # * destination part (->[dest_ip]:dest_port) appears in Net-SNMP > 5.3 -+ # * protocol name (TCP: or UDP:) and bracketted IP addr w/ port number appear in -+ # Net-SNMP > 5.1 (Net-SNMP 5.1 has IP addr only). -+ # * port number is signed (often negative) in Net-SNMP 5.2 -+ $source =~ s/(?:(?:TCP|UDP):\s*)?\[?([^] ]+)\]?(?::-?\d+)?(?:\s*->.*)?$/$1/; -+ } - -- # Storm protection -- if (! defined ($AGENTS{$source})) { -- $AGENTS{$source}{'count'} = 1; -- $AGENTS{$source}{'event'} = 0; -- } else { -- $AGENTS{$source}{'count'} += 1; -- } -- if ($pa_config->{'snmp_storm_protection'} > 0 && $AGENTS{$source}{'count'} > $pa_config->{'snmp_storm_protection'}) { -- if ($AGENTS{$source}{'event'} == 0) { -- pandora_event ($pa_config, "Too many traps coming from $source. Silenced for " . int ($pa_config->{"snmp_storm_timeout"} / 60) . " minutes.", 0, 0, 4, 0, 0, 'system', 0, $dbh); -- } -- $AGENTS{$source}{'event'} = 1; -- next; -- } -+ my $timestamp = $date . ' ' . $time; -+ my ($custom_oid, $custom_type, $custom_value) = ('', '', ''); - -- #Trap forwarding -- if ($pa_config->{'snmp_forward_trap'}==1) { -- my $trap_data_string = ""; -+ # custom_type, custom_value is not used since 4.0 version, all custom data goes on custom_oid -+ $custom_oid = $data; - -- #We loop through all the custom data of the received trap, creating the $trap_data_string string to forward the trap properly -- while ($data =~ /([\.\d]+)\s=\s([^:]+):\s([\S ]+)/g) { -- my ($trap_data, $trap_type, $trap_value) = ($1, $2, $3); -- if ($trap_type eq "INTEGER") { -- #FIX for translated traps from IF-MIB.txt MIB -- $trap_value =~ s/\D//g; -- $trap_data_string = $trap_data_string . "$trap_data i $trap_value "; -- } -- elsif ($trap_type eq "UNSIGNED"){ -- $trap_data_string = $trap_data_string . "$trap_data u $trap_value "; -- } -- elsif ($trap_type eq "COUNTER32"){ -- $trap_data_string = $trap_data_string . "$trap_data c $trap_value "; -- } -- elsif ($trap_type eq "STRING"){ -- $trap_data_string = $trap_data_string . "$trap_data s $trap_value "; -- } -- elsif ($trap_type eq "HEX STRING"){ -- $trap_data_string = $trap_data_string . "$trap_data x $trap_value "; -- } -- elsif ($trap_type eq "DECIMAL STRING"){ -- $trap_data_string = $trap_data_string . "$trap_data d $trap_value "; -- } -- elsif ($trap_type eq "NULLOBJ"){ -- $trap_data_string = $trap_data_string . "$trap_data n $trap_value "; -- } -- elsif ($trap_type eq "OBJID"){ -- $trap_data_string = $trap_data_string . "$trap_data o $trap_value "; -- } -- elsif ($trap_type eq "TIMETICKS"){ -- $trap_data_string = $trap_data_string . "$trap_data t $trap_value "; -- } -- elsif ($trap_type eq "IPADDRESS"){ -- $trap_data_string = $trap_data_string . "$trap_data a $trap_value "; -- } -- elsif ($trap_type eq "BITS"){ -- $trap_data_string = $trap_data_string . "$trap_data b $trap_value "; -- } -- } -+ #Trap forwarding -+ if ($pa_config->{'snmp_forward_trap'}==1) { -+ my $trap_data_string = ""; - -- #We distinguish between the three different kinds of SNMP forwarding -- if ($pa_config->{'snmp_forward_version'} eq '3') { -- system("snmptrap -v $pa_config->{'snmp_forward_version'} -n \"\" -a $pa_config->{'snmp_forward_authProtocol'} -A $pa_config->{'snmp_forward_authPassword'} -x $pa_config->{'snmp_forward_privProtocol'} -X $pa_config->{'snmp_forward_privPassword'} -l $pa_config->{'snmp_forward_secLevel'} -u $pa_config->{'snmp_forward_secName'} -e $pa_config->{'snmp_forward_engineid'} $pa_config->{'snmp_forward_ip'} '' $oid $trap_data_string"); -- } -- elsif ($pa_config->{'snmp_forward_version'} eq '2' || $pa_config->{'snmp_forward_version'} eq '2c') { -- system("snmptrap -v 2c -n \"\" -c $pa_config->{'snmp_forward_community'} $pa_config->{'snmp_forward_ip'} '' $oid $trap_data_string"); -- } -- elsif ($pa_config->{'snmp_forward_version'} eq '1') { -- #Because of tne SNMP v1 protocol, we must perform additional steps for creating the trap -- my $value_sending = ""; -- my $type_sending = ""; -+ #We loop through all the custom data of the received trap, creating the $trap_data_string string to forward the trap properly -+ while ($data =~ /([\.\d]+)\s=\s([^:]+):\s([\S ]+)/g) { -+ my ($trap_data, $trap_type, $trap_value) = ($1, $2, $3); -+ if ($trap_type eq "INTEGER") { -+ #FIX for translated traps from IF-MIB.txt MIB -+ $trap_value =~ s/\D//g; -+ $trap_data_string = $trap_data_string . "$trap_data i $trap_value "; -+ } -+ elsif ($trap_type eq "UNSIGNED"){ -+ $trap_data_string = $trap_data_string . "$trap_data u $trap_value "; -+ } -+ elsif ($trap_type eq "COUNTER32"){ -+ $trap_data_string = $trap_data_string . "$trap_data c $trap_value "; -+ } -+ elsif ($trap_type eq "STRING"){ -+ $trap_data_string = $trap_data_string . "$trap_data s $trap_value "; -+ } -+ elsif ($trap_type eq "HEX STRING"){ -+ $trap_data_string = $trap_data_string . "$trap_data x $trap_value "; -+ } -+ elsif ($trap_type eq "DECIMAL STRING"){ -+ $trap_data_string = $trap_data_string . "$trap_data d $trap_value "; -+ } -+ elsif ($trap_type eq "NULLOBJ"){ -+ $trap_data_string = $trap_data_string . "$trap_data n $trap_value "; -+ } -+ elsif ($trap_type eq "OBJID"){ -+ $trap_data_string = $trap_data_string . "$trap_data o $trap_value "; -+ } -+ elsif ($trap_type eq "TIMETICKS"){ -+ $trap_data_string = $trap_data_string . "$trap_data t $trap_value "; -+ } -+ elsif ($trap_type eq "IPADDRESS"){ -+ $trap_data_string = $trap_data_string . "$trap_data a $trap_value "; -+ } -+ elsif ($trap_type eq "BITS"){ -+ $trap_data_string = $trap_data_string . "$trap_data b $trap_value "; -+ } -+ } - -- if ($value eq ''){ -- $value_sending = "\"\""; -- } -- else { -- $value_sending = $value; -- $value_sending =~ s/[\$#@~!&*()\[\];.,:?^ `\\\/]+//g; -- } -- if ($type eq ''){ -- $type_sending = "\"\""; -- } -- else{ -- $type_sending = $type; -- } -+ #We distinguish between the three different kinds of SNMP forwarding -+ if ($pa_config->{'snmp_forward_version'} eq '3') { -+ system("snmptrap -v $pa_config->{'snmp_forward_version'} -n \"\" -a $pa_config->{'snmp_forward_authProtocol'} -A $pa_config->{'snmp_forward_authPassword'} -x $pa_config->{'snmp_forward_privProtocol'} -X $pa_config->{'snmp_forward_privPassword'} -l $pa_config->{'snmp_forward_secLevel'} -u $pa_config->{'snmp_forward_secName'} -e $pa_config->{'snmp_forward_engineid'} $pa_config->{'snmp_forward_ip'} '' $oid $trap_data_string"); -+ } -+ elsif ($pa_config->{'snmp_forward_version'} eq '2' || $pa_config->{'snmp_forward_version'} eq '2c') { -+ system("snmptrap -v 2c -n \"\" -c $pa_config->{'snmp_forward_community'} $pa_config->{'snmp_forward_ip'} '' $oid $trap_data_string"); -+ } -+ elsif ($pa_config->{'snmp_forward_version'} eq '1') { -+ #Because of tne SNMP v1 protocol, we must perform additional steps for creating the trap -+ my $value_sending = ""; -+ my $type_sending = ""; - -- system("snmptrap -v 1 -c $pa_config->{'snmp_forward_community'} $pa_config->{'snmp_forward_ip'} $oid \"\" $type_sending $value_sending \"\" $trap_data_string"); -- } -- } -+ if ($value eq ''){ -+ $value_sending = "\"\""; -+ } -+ else { -+ $value_sending = $value; -+ $value_sending =~ s/[\$#@~!&*()\[\];.,:?^ `\\\/]+//g; -+ } -+ if ($type eq ''){ -+ $type_sending = "\"\""; -+ } -+ else{ -+ $type_sending = $type; -+ } - -- # Insert the trap into the DB -- if (! defined(enterprise_hook ('snmp_insert_trap', [$pa_config, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type, $timestamp, $self->getServerID (), $dbh]))) { -- my $trap_id = db_insert ($dbh, 'id_trap', 'INSERT INTO ttrap (timestamp, source, oid, type, value, oid_custom, value_custom, type_custom) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', -- $timestamp, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type); -- logger ($pa_config, "Received SNMP Trap from $source", 4); -- -- # Evaluate alerts for this trap -- pandora_evaluate_snmp_alerts ($pa_config, $trap_id, $source, $oid, $type, $oid, $value, $custom_oid, $dbh); -- } -- } -- -- sleep ($pa_config->{'server_threshold'}); -+ system("snmptrap -v 1 -c $pa_config->{'snmp_forward_community'} $pa_config->{'snmp_forward_ip'} $oid \"\" $type_sending $value_sending \"\" $trap_data_string"); - } -- }; -- -- if ($@) { -- $self->setErrStr ($@); - } - -- db_disconnect ($dbh); --} -+ # Insert the trap into the DB -+ if (! defined(enterprise_hook ('snmp_insert_trap', [$pa_config, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type, $timestamp, $server_id, $dbh]))) { -+ my $trap_id = db_insert ($dbh, 'id_trap', 'INSERT INTO ttrap (timestamp, source, oid, type, value, oid_custom, value_custom, type_custom) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', -+ $timestamp, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type); -+ logger ($pa_config, "Received SNMP Trap from $source", 4); - --######################################################################################## --# Stop the server, killing snmptrapd before. --######################################################################################## --sub stop () { -- my $self = shift; -- -- if ($self->{'snmp_trapd'} ne 'manual') { -- system ("kill -9 `cat /var/run/pandora_snmptrapd.pid 2>$DEVNULL`"); -- unlink ('/var/run/pandora_snmptrapd.pid'); -+ # Evaluate alerts for this trap -+ pandora_evaluate_snmp_alerts ($pa_config, $trap_id, $source, $oid, $type, $oid, $value, $custom_oid, $dbh); - } -- -- $self->SUPER::stop (); - } - - ######################################################################################## -@@ -328,14 +343,14 @@ - my $eval_result; - - # eval protects against server down (by invalid regular expressions) -- $eval_result = eval { -+ $eval_result = eval { - $string =~ m/$regexp/i ; - }; - -- if ($eval_result) { -- logger($pa_config, "Trap '$string' matches filter '$regexp'. Discarding...", 10); -- return 1; -- } -+ if ($eval_result) { -+ logger($pa_config, "Trap '$string' matches filter '$regexp'. Discarding...", 10); -+ return 1; -+ } - - } - -@@ -393,7 +408,7 @@ - print_message ($config, " [E] Could not start snmptrapd.", 1); - return 1; - } -- -+ - return 0; - } - -@@ -403,7 +418,10 @@ - sub DESTROY { - my $self = shift; - -- $RUN = 0; -+ if ($self->{'snmp_trapd'} ne 'manual') { -+ system ("kill -9 `cat /var/run/pandora_snmptrapd.pid 2>$DEVNULL`"); -+ unlink ('/var/run/pandora_snmptrapd.pid'); -+ } - } - - 1; -Index: lib/PandoraFMS/Config.pm -=================================================================== ---- lib/PandoraFMS/Config.pm (revision 10314) -+++ lib/PandoraFMS/Config.pm (working copy) -@@ -248,6 +248,9 @@ - $pa_config->{"snmp_pdu_address"} = 0; # 5.0 - $pa_config->{"snmp_storm_protection"} = 0; # 5.0 - $pa_config->{"snmp_storm_timeout"} = 600; # 5.0 -+ $pa_config->{"snmpconsole_threads"} = 1; # 5.1 -+ $pa_config->{"translate_variable_bindings"} = 0; # 5.1 -+ $pa_config->{"translate_enterprise_strings"} = 1; # 5.1 - - # Internal MTA for alerts, each server need its own config. - $pa_config->{"mta_address"} = '127.0.0.1'; # Introduced on 2.0 -@@ -261,6 +264,7 @@ - - # nmap for recon OS fingerprinting and tcpscan (optional) - $pa_config->{"nmap"} = "/usr/bin/nmap"; -+ $pa_config->{"nmap_timing_template"} = 2; # > 5.1 - - # braa for enterprise snmp server - $pa_config->{"braa"} = "/usr/bin/braa"; -@@ -465,6 +469,15 @@ - elsif ($parametro =~ m/^snmp_storm_timeout\s+(\d+)/i) { - $pa_config->{'snmp_storm_timeout'}= clean_blank($1); - } -+ elsif ($parametro =~ m/^snmpconsole_threads\s+(\d+)/i) { -+ $pa_config->{'snmpconsole_threads'}= clean_blank($1); -+ } -+ elsif ($parametro =~ m/^translate_variable_bindings\s+([0-1])/i) { -+ $pa_config->{'translate_variable_bindings'}= clean_blank($1); -+ } -+ elsif ($parametro =~ m/^translate_enterprise_strings\s+([0-1])/i) { -+ $pa_config->{'translate_enterprise_strings'}= clean_blank($1); -+ } - elsif ($parametro =~ m/^dbengine\s(.*)/i) { - $pa_config->{'dbengine'}= clean_blank($1); - } -@@ -595,6 +608,9 @@ - elsif ($parametro =~ m/^nmap\s(.*)/i) { - $pa_config->{'nmap'}= clean_blank($1); - } -+ elsif ($parametro =~ m/^nmap_timing_template\s([0-9]*)/i) { -+ $pa_config->{'nmap_timing_template'}= clean_blank($1); -+ } - elsif ($parametro =~ m/^braa\s(.*)/i) { - $pa_config->{'braa'}= clean_blank($1); - } -Index: lib/PandoraFMS/NetworkServer.pm -=================================================================== ---- lib/PandoraFMS/NetworkServer.pm (revision 10314) -+++ lib/PandoraFMS/NetworkServer.pm (working copy) -@@ -25,6 +25,7 @@ - use Thread::Semaphore; - - use IO::Socket::INET6; -+use IO::Select; - use HTML::Entities; - use POSIX qw(strftime); - -@@ -170,100 +171,103 @@ - $retries = $pa_config->{'tcp_checks'}; - } - -- $tcp_send = decode_entities($tcp_send); -- $tcp_rcv = decode_entities($tcp_rcv); -+ $tcp_send = decode_entities($tcp_send); -+ $tcp_rcv = decode_entities($tcp_rcv); - -- my $counter; -- for ($counter =0; $counter < $retries; $counter++){ -- my $temp; my $temp2; -- my $tam; -- my $handle=IO::Socket::INET6->new( -- Proto=>"tcp", -- PeerAddr=>$ip_target, -- Timeout=>$timeout, -- PeerPort=>$tcp_port, -+ my $counter; -+ for ($counter =0; $counter < $retries; $counter++){ -+ my $temp; my $temp2; -+ my $tam; -+ my $handle=IO::Socket::INET6->new( -+ Proto=>"tcp", -+ PeerAddr=>$ip_target, -+ Timeout=>$timeout, -+ PeerPort=>$tcp_port, - Multihomed=>1, -- Blocking=>0 ); # Non blocking !!, very important ! -- -- if (defined ($handle)){ -+ Blocking=>0 ); # Non blocking !!, very important ! -+ -+ if (defined ($handle)){ - # Multi request patch, submitted by Glen Eustace (new zealand) - my @tcp_send = split( /\|/, $tcp_send ); - my @tcp_rcv = split( /\|/, $tcp_rcv ); - -+ # Add server socket to select queue -+ my $select = IO::Select->new (); -+ $select->add ($handle); -+ - next_pair: - $tcp_send = shift( @tcp_send ); - $tcp_rcv = shift( @tcp_rcv ); - -- if ((defined ($tcp_send)) && ($tcp_send ne "")){ # its Expected to sending data ? -- # Send data -- $handle->autoflush(1); -- $tcp_send =~ s/\^M/\r\n/g; -- # Replace Carriage rerturn and line feed -- $handle->send($tcp_send); -- } -- # we expect to receive data ? (non proc types) -- if ((defined ($tcp_rcv) && $tcp_rcv ne "") || (($id_tipo_modulo == 10) || ($id_tipo_modulo ==8) || ($id_tipo_modulo == 11))) { -- # Receive data, non-blocking !!!! (VERY IMPORTANT!) -- $temp2 = ""; -- for ($tam=0; $tam<$timeout; $tam++){ -- $handle->recv($temp,16000,0x40); -- $temp2 = $temp2.$temp; -- if ($temp ne ""){ -- $tam++; # If doesnt receive data, increase counter -- } -- sleep(1); -- } -- if ($id_tipo_modulo == 9){ # only for TCP Proc -- if ($temp2 =~ /$tcp_rcv/i){ # String match ! -+ if ((defined ($tcp_send)) && ($tcp_send ne "")){ # its Expected to sending data ? -+ # Send data -+ $handle->autoflush(1); -+ $tcp_send =~ s/\^M/\r\n/g; -+ # Replace Carriage rerturn and line feed -+ $handle->send($tcp_send); -+ } -+ # we expect to receive data ? (non proc types) -+ if ((defined ($tcp_rcv) && $tcp_rcv ne "") || (($id_tipo_modulo == 10) || ($id_tipo_modulo ==8) || ($id_tipo_modulo == 11))) { -+ # Receive data, non-blocking !!!! (VERY IMPORTANT!) -+ $temp2 = ""; -+ for ($tam = 0; $tam < $timeout; $tam ++) { -+ if ($select->can_read (1)) { -+ my $read = sysread ($handle, $temp, 16000); -+ last if (! defined ($read) || $read == 0); # No more data or something went wrong -+ $temp2 = $temp2.$temp; -+ } -+ } -+ if ($id_tipo_modulo == 9){ # only for TCP Proc -+ if ($temp2 =~ /$tcp_rcv/i){ # String match ! - if ( @tcp_send ) { # still more pairs - goto next_pair; - } -- $$module_data = 1; -- $$module_result = 0; -- $counter = $retries; -- } else { -- $$module_data = 0; -- $$module_result = 0; -- $counter = $retries; -- } -- } elsif ($id_tipo_modulo == 10 ){ # TCP String (no int conversion)! -- $$module_data = $temp2; -- $$module_result =0; -- } else { # TCP Data numeric (inc or data) -- if ($temp2 ne ""){ -- if ($temp2 =~ /[A-Za-z\.\,\-\/\\\(\)\[\]]/){ -- $$module_result = 1; -- $$module_data = 0; # invalid data -- $counter = $retries; -- } else { -- $$module_data = int($temp2); -- $$module_result = 0; # Successful -- $counter = $retries; -- } -- } else { -- $$module_result = 1; -- $$module_data = 0; # invalid data -- $counter = $retries; -- } -- } -- } else { # No expected data to receive, if connected and tcp_proc type successful -- if ($id_tipo_modulo == 9){ # TCP Proc -- $$module_result = 0; -- $$module_data = 1; -- $counter = $retries; -- } -- } -- $handle->close(); -- undef ($handle); -- } else { # Cannot connect (open sock failed) -- $$module_result = 1; # Fail -- if ($id_tipo_modulo == 9){ # TCP Proc -- $$module_result = 0; -- $$module_data = 0; # Failed, but data exists -- $counter = $retries; -- } -- } -- } -+ $$module_data = 1; -+ $$module_result = 0; -+ $counter = $retries; -+ } else { -+ $$module_data = 0; -+ $$module_result = 0; -+ $counter = $retries; -+ } -+ } elsif ($id_tipo_modulo == 10 ){ # TCP String (no int conversion)! -+ $$module_data = $temp2; -+ $$module_result =0; -+ } else { # TCP Data numeric (inc or data) -+ if ($temp2 ne ""){ -+ if ($temp2 =~ /[A-Za-z\.\,\-\/\\\(\)\[\]]/){ -+ $$module_result = 1; -+ $$module_data = 0; # invalid data -+ $counter = $retries; -+ } else { -+ $$module_data = int($temp2); -+ $$module_result = 0; # Successful -+ $counter = $retries; -+ } -+ } else { -+ $$module_result = 1; -+ $$module_data = 0; # invalid data -+ $counter = $retries; -+ } -+ } -+ } else { # No expected data to receive, if connected and tcp_proc type successful -+ if ($id_tipo_modulo == 9){ # TCP Proc -+ $$module_result = 0; -+ $$module_data = 1; -+ $counter = $retries; -+ } -+ } -+ $handle->close(); -+ undef ($handle); -+ } else { # Cannot connect (open sock failed) -+ $$module_result = 1; # Fail -+ if ($id_tipo_modulo == 9){ # TCP Proc -+ $$module_result = 0; -+ $$module_data = 0; # Failed, but data exists -+ $counter = $retries; -+ } -+ } -+ } - } - - ############################################################################### -@@ -352,7 +356,7 @@ - - return (undef, 0) unless ($snmp_oid ne ''); - if ($snmp_oid =~ m/[a-zA-Z]/) { -- $snmp_oid = translate_obj ($pa_config, $dbh, $snmp_oid, ); -+ $snmp_oid = translate_obj ($pa_config, $dbh, $snmp_oid); - - # Could not translate OID, disable the module - if (! defined ($snmp_oid) || $snmp_oid eq '') { -Index: lib/PandoraFMS/GIS.pm -=================================================================== ---- lib/PandoraFMS/GIS.pm (revision 10314) -+++ lib/PandoraFMS/GIS.pm (working copy) -@@ -146,12 +146,24 @@ - ########################################################################## - sub get_reverse_geoip_sql($$$) { - my ($pa_config,$ip_addr, $dbh) = @_; -- -- my $id_range = get_db_value($dbh, 'SELECT `id_range` FROM tgis_reverse_geoip_ranges WHERE INET_ATON(?) >= `first_IP_decimal` AND INET_ATON(?) <= `last_IP_decimal` LIMIT 1', $ip_addr, $ip_addr); -- if (defined($id_range)) { -- logger($pa_config,"Range id of '$ip_addr' is '$id_range'", 8); -- my $region_info = get_db_single_row($dbh, 'SELECT * FROM tgis_reverse_geoip_info WHERE `id_range` = ?',$id_range); -- logger($pa_config, "region info of id_range '$id_range' is: country:".$region_info->{'country_name'}." region:".$region_info->{'region'}." city:".$region_info->{'city'}." longitude:".$region_info->{'longitude'}." latitude:".$region_info->{'longitude'}, 8); -+ -+ my $id_range = get_db_value($dbh, -+ 'SELECT ' . $RDBMS_QUOTE . 'id_range' . $RDBMS_QUOTE . ' -+ FROM tgis_reverse_geoip_ranges -+ WHERE INET_ATON(?) >= ' . $RDBMS_QUOTE . 'first_IP_decimal' . $RDBMS_QUOTE . ' -+ AND INET_ATON(?) <= ' . $RDBMS_QUOTE . 'last_IP_decimal ' . $RDBMS_QUOTE . ' -+ LIMIT 1', $ip_addr, $ip_addr); -+ -+ if (defined($id_range)) { -+ logger($pa_config,"Range id of '$ip_addr' is '$id_range'", 8); -+ my $region_info = get_db_single_row($dbh, -+ 'SELECT * -+ FROM tgis_reverse_geoip_info -+ WHERE ' . $RDBMS_QUOTE . 'id_range ' . $RDBMS_QUOTE . ' = ?', -+ $id_range); -+ -+ logger($pa_config, "region info of id_range '$id_range' is: country:".$region_info->{'country_name'}." region:".$region_info->{'region'}." city:".$region_info->{'city'}." longitude:".$region_info->{'longitude'}." latitude:".$region_info->{'longitude'}, 8); -+ - return $region_info; - } - return undef; -Index: lib/PandoraFMS/DB.pm -=================================================================== ---- lib/PandoraFMS/DB.pm (revision 10314) -+++ lib/PandoraFMS/DB.pm (working copy) -@@ -86,14 +86,18 @@ - get_agentmodule_data - $RDBMS - $RDBMS_QUOTE -+ $RDBMS_QUOTE_STRING - ); - - # Relational database management system in use - our $RDBMS = ''; - --# Character used to quote reserved words in the current RDBMS -+# For fields, character used to quote reserved words in the current RDBMS - our $RDBMS_QUOTE = ''; - -+# For strings, Character used to quote in the current RDBMS -+our $RDBMS_QUOTE_STRING = ''; -+ - ########################################################################## - ## Connect to the DB. - ########################################################################## -@@ -103,7 +107,8 @@ - if ($rdbms eq 'mysql') { - $RDBMS = 'mysql'; - $RDBMS_QUOTE = '`'; -- -+ $RDBMS_QUOTE_STRING = '"'; -+ - # Connect to MySQL - my $dbh = DBI->connect("DBI:mysql:$db_name:$db_host:$db_port", $db_user, $db_pass, { RaiseError => 1, AutoCommit => 1 }); - return undef unless defined ($dbh); -@@ -119,15 +124,18 @@ - elsif ($rdbms eq 'postgresql') { - $RDBMS = 'postgresql'; - $RDBMS_QUOTE = '"'; -+ $RDBMS_QUOTE_STRING = "'"; - - # Connect to PostgreSQL - my $dbh = DBI->connect("DBI:Pg:dbname=$db_name;host=$db_host;port=$db_port", $db_user, $db_pass, { RaiseError => 1, AutoCommit => 1 }); - return undef unless defined ($dbh); - - return $dbh; -- } elsif ($rdbms eq 'oracle') { -+ } -+ elsif ($rdbms eq 'oracle') { - $RDBMS = 'oracle'; - $RDBMS_QUOTE = '"'; -+ $RDBMS_QUOTE_STRING = '"'; - - # Connect to Oracle - my $dbh = DBI->connect("DBI:Oracle:dbname=$db_name;host=$db_host;port=$db_port;sid=pandora", $db_user, $db_pass, { RaiseError => 1, AutoCommit => 1 }); -@@ -641,6 +649,7 @@ - my ($dbh, $index, $query, @values) = @_; - my $insert_id = undef; - -+ - # MySQL - if ($RDBMS eq 'mysql') { - $dbh->do($query, undef, @values); -@@ -684,9 +693,9 @@ - return defined ($rc) ? $rc : -1; - } - --########################################################################## -+######################################################################## - ## SQL insert. Returns the ID of the inserted row. --########################################################################## -+######################################################################## - sub db_process_insert($$$$;@) { - my ($dbh, $index, $table, $parameters, @values) = @_; - -@@ -711,10 +720,14 @@ - } - $wildcards = '('.$wildcards.')'; - -- my $columns_string = join('`,`',@columns_array); -+ my $columns_string = join($RDBMS_QUOTE . ',' . $RDBMS_QUOTE, -+ @columns_array); - -- my $res = db_insert ($dbh, $index, "INSERT INTO $table (`".$columns_string."`) VALUES ".$wildcards, @values_array); -+ my $res = db_insert ($dbh, -+ $index, -+ "INSERT INTO $table (" . $RDBMS_QUOTE . $columns_string . $RDBMS_QUOTE . ") VALUES " . $wildcards, @values_array); - -+ - return $res; - } - -@@ -740,7 +753,8 @@ - if ($i > 0 && $i <= $#values_array) { - $fields = $fields.','; - } -- $fields = $fields." `$columns_array[$i]` = ?"; -+ $fields = $fields . -+ " " . $RDBMS_QUOTE . "$columns_array[$i]" . $RDBMS_QUOTE . " = ?"; - } - - push(@values_array, $where_value); -@@ -752,28 +766,30 @@ - return $res; - } - --########################################################################## -+######################################################################## - # Add the given address to taddress. --########################################################################## -+######################################################################## - sub add_address ($$) { - my ($dbh, $ip_address) = @_; -- -+ - return db_insert ($dbh, 'id_a', 'INSERT INTO taddress (ip) VALUES (?)', $ip_address); - } - --########################################################################## -+######################################################################## - # Assign the new address to the agent --########################################################################## -+######################################################################## - sub add_new_address_agent ($$$) { - my ($dbh, $addr_id, $agent_id) = @_; - -- db_do ($dbh, 'INSERT INTO taddress_agent (`id_a`, `id_agent`) -+ db_do ($dbh, 'INSERT INTO taddress_agent (' . -+ $RDBMS_QUOTE . 'id_a' . $RDBMS_QUOTE . ', ' . -+ $RDBMS_QUOTE. 'id_agent' . $RDBMS_QUOTE. ') - VALUES (?, ?)', $addr_id, $agent_id); - } - --########################################################################## -+######################################################################## - # Return the ID of the given address, -1 if it does not exist. --########################################################################## -+######################################################################## - sub get_addr_id ($$) { - my ($dbh, $addr) = @_; - -@@ -825,9 +841,9 @@ - return (defined ($id_ag)) ? $id_ag : 0; - } - --########################################################################## -+######################################################################## - ## Quote the given string. --########################################################################## -+######################################################################## - sub db_string ($) { - my $string = shift; - -@@ -856,7 +872,10 @@ - sub get_alert_template_name ($$) { - my ($dbh, $alert_id) = @_; - -- return get_db_value ($dbh, "SELECT name FROM talert_templates, talert_template_modules WHERE talert_templates.id = talert_template_modules.id_alert_template AND talert_template_modules.id = ?", $alert_id); -+ return get_db_value ($dbh, "SELECT name -+ FROM talert_templates, talert_template_modules -+ WHERE talert_templates.id = talert_template_modules.id_alert_template -+ AND talert_template_modules.id = ?", $alert_id); - } - - ######################################################################## -@@ -865,9 +884,8 @@ - sub db_concat ($$) { - my ($element1, $element2) = @_; - -- return " concat(" . $element1 . ", ' '," . $element2 . ") " if ($RDBMS eq 'mysql'); -- - return " " . $element1 . " || ' ' || " . $element2 . " " if ($RDBMS eq 'oracle' or $RDBMS eq 'postgresql'); -+ return " concat(" . $element1 . ", ' '," . $element2 . ") "; - } - - ######################################################################## -@@ -906,18 +924,18 @@ - ######################################################################## - sub db_update_get_values ($) { - my ($set_ref) = @_; -- -+ - my $set = ''; - my @values; - while (my ($key, $value) = each (%{$set_ref})) { -- -- # Not value for the given column -- next if (! defined ($value)); -- -- $set .= "$key = ?,"; -- push (@values, $value); -+ -+ # Not value for the given column -+ next if (! defined ($value)); -+ -+ $set .= "$key = ?,"; -+ push (@values, $value); - } -- -+ - # Remove the last , - chop ($set); - -@@ -929,34 +947,34 @@ - ######################################################################## - sub db_insert_get_values ($) { - my ($insert_ref) = @_; -- -+ - my $columns = '('; - my @values; - while (my ($key, $value) = each (%{$insert_ref})) { -- -- # Not value for the given column -- next if (! defined ($value)); -- -- $columns .= $PandoraFMS::DB::RDBMS_QUOTE . "$key" . $PandoraFMS::DB::RDBMS_QUOTE . ","; -- push (@values, $value); -+ -+ # Not value for the given column -+ next if (! defined ($value)); -+ -+ $columns .= $PandoraFMS::DB::RDBMS_QUOTE . "$key" . $PandoraFMS::DB::RDBMS_QUOTE . ","; -+ push (@values, $value); - } -- -+ - # Remove the last , and close the parentheses - chop ($columns); - $columns .= ')'; - -- # No columns -+ # No columns - if ($columns eq '()') { - return; - } -- -+ - # Add placeholders for the values - $columns .= ' VALUES (' . ("?," x ($#values + 1)); -- -+ - # Remove the last , and close the parentheses - chop ($columns); - $columns .= ')'; -- -+ - return ($columns, \@values); - } - -@@ -973,7 +991,7 @@ - my $sth = $dbh->prepare('SELECT GET_LOCK(?, ?)'); - $sth->execute($lock_name, $lock_timeout); - my ($lock) = $sth->fetchrow; -- -+ - # Something went wrong - return 0 if (! defined ($lock)); - -Index: lib/PandoraFMS/Core.pm -=================================================================== ---- lib/PandoraFMS/Core.pm (revision 10314) -+++ lib/PandoraFMS/Core.pm (working copy) -@@ -511,6 +511,9 @@ - my $critical_instructions = get_db_value ($dbh, 'SELECT critical_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); - my $warning_instructions = get_db_value ($dbh, 'SELECT warning_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); - my $unknown_instructions = get_db_value ($dbh, 'SELECT unknown_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); -+ -+ $alert->{'critical_instructions'} = $critical_instructions; -+ $alert->{'warning_instructions'} = $warning_instructions; - - # Generate an event - if ($table eq 'tevent_alert') { -@@ -666,6 +669,14 @@ - return; - } - -+ # Critical_instructions, warning_instructions, unknown_instructions -+ my $critical_instructions = get_db_value ($dbh, 'SELECT critical_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); -+ my $warning_instructions = get_db_value ($dbh, 'SELECT warning_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); -+ my $unknown_instructions = get_db_value ($dbh, 'SELECT unknown_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); -+ -+ $alert->{'critical_instructions'} = $critical_instructions; -+ $alert->{'warning_instructions'} = $warning_instructions; -+ - # Execute actions - my $event_generated = 0; - foreach my $action (@actions) { -@@ -692,11 +703,6 @@ - } - } - -- # Critical_instructions, warning_instructions, unknown_instructions -- my $critical_instructions = get_db_value ($dbh, 'SELECT critical_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); -- my $warning_instructions = get_db_value ($dbh, 'SELECT warning_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); -- my $unknown_instructions = get_db_value ($dbh, 'SELECT unknown_instructions FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'}); -- - # Generate an event only if an event has not already been generated by an alert action - if ($event_generated == 0) { - -@@ -840,6 +846,8 @@ - _alert_times_fired_ => $alert->{'times_fired'}, - _alert_priority_ => $alert->{'priority'}, - _alert_text_severity_ => get_priority_name($alert->{'priority'}), -+ _alert_critical_instructions_ => $alert->{'critical_instructions'}, -+ _alert_warning_instructions_ => $alert->{'warning_instructions'}, - _groupcontact_ => (defined ($group)) ? $group->{'contact'} : '', - _groupother_ => (defined ($group)) ? $group->{'other'} : '', - _module_ => (defined ($module)) ? $module->{'nombre'} : '', -@@ -1095,6 +1103,11 @@ - $min_ff_event = $module->{'min_ff_event_warning'} if ($new_status == 2); - } - -+ # replace $new_status with $last_known_status when recovering from 'unknown' -+ if ($status == 3) { -+ $new_status = $last_known_status; -+ } -+ - if ($last_status == $new_status) { - - # Avoid overflows -@@ -1124,17 +1137,24 @@ - # Update module status count - pandora_mark_agent_for_module_update ($dbh, $agent->{'id_agente'}); - } -- # Set not-init modules to normal even if min_ff_event is not matched the first time they receive data -+ # Set not-init modules to normal status even if min_ff_event is not matched the first time they receive data. -+ # if critical or warning status, just pass through here and wait the time min_ff_event will be matched. - elsif ($status == 4) { -- $new_status = 0; -- -+ generate_status_event ($pa_config, $processed_data, $agent, $module, 0, $status, $last_known_status, $dbh); -+ $status = 0; -+ -+ # Update module status count -+ pandora_mark_agent_for_module_update ($dbh, $agent->{'id_agente'}); -+ } -+ # If unknown modules receive data, restore status even if min_ff_event is not matched. -+ elsif ($status == 3) { - generate_status_event ($pa_config, $processed_data, $agent, $module, $new_status, $status, $last_known_status, $dbh); - $status = $new_status; - - # Update module status count - pandora_mark_agent_for_module_update ($dbh, $agent->{'id_agente'}); - } -- -+ - $last_status = $new_status; - - # tagente_estado.last_try defaults to NULL, should default to '1970-01-01 00:00:00' -@@ -1193,8 +1213,10 @@ - # Stop executed downtimes (enable agents and disable_agents_alerts) - my @downtimes = get_db_rows($dbh, 'SELECT * - FROM tplanned_downtime -- WHERE type_downtime != "quiet" AND type_execution="once" -- AND executed = 1 AND date_to <= ?', $utimestamp); -+ WHERE type_downtime != ' . $RDBMS_QUOTE_STRING. 'quiet' . $RDBMS_QUOTE_STRING. ' -+ AND type_execution = ' . $RDBMS_QUOTE_STRING. 'once' . $RDBMS_QUOTE_STRING. ' -+ AND executed = 1 -+ AND date_to <= ?', $utimestamp); - - foreach my $downtime (@downtimes) { - -@@ -1226,7 +1248,8 @@ - # Start pending downtimes (disable agents and disable_agents_alerts) - my @downtimes = get_db_rows($dbh, 'SELECT * - FROM tplanned_downtime -- WHERE type_downtime != "quiet" AND type_execution="once" -+ WHERE type_downtime != ' . $RDBMS_QUOTE_STRING . 'quiet' . $RDBMS_QUOTE_STRING . ' -+ AND type_execution = ' . $RDBMS_QUOTE_STRING . 'once' . $RDBMS_QUOTE_STRING . ' - AND executed = 0 AND date_from <= ? - AND date_to >= ?', $utimestamp, $utimestamp); - -@@ -1423,7 +1446,8 @@ - # Stop pending downtimes - my @downtimes = get_db_rows($dbh, 'SELECT * - FROM tplanned_downtime -- WHERE type_downtime = "quiet" AND type_execution="once" -+ WHERE type_downtime = ' . $RDBMS_QUOTE_STRING . 'quiet' . $RDBMS_QUOTE_STRING . ' -+ AND type_execution = ' . $RDBMS_QUOTE_STRING. 'once' . $RDBMS_QUOTE_STRING . ' - AND executed = 1 AND date_to <= ?', $utimestamp); - - foreach my $downtime (@downtimes) { -@@ -1463,7 +1487,8 @@ - # Start pending downtimes - my @downtimes = get_db_rows($dbh, 'SELECT * - FROM tplanned_downtime -- WHERE type_downtime = "quiet" AND type_execution="once" -+ WHERE type_downtime = ' . $RDBMS_QUOTE_STRING . 'quiet' . $RDBMS_QUOTE_STRING . ' -+ AND type_execution = ' . $RDBMS_QUOTE_STRING . 'once' . $RDBMS_QUOTE_STRING . ' - AND executed = 0 AND date_from <= ? - AND date_to >= ?', $utimestamp, $utimestamp); - -@@ -1517,7 +1542,7 @@ - # Start pending downtimes - my @downtimes = get_db_rows($dbh, 'SELECT * - FROM tplanned_downtime -- WHERE type_periodicity="monthly" -+ WHERE type_periodicity = ' . $RDBMS_QUOTE_STRING . 'monthly' . $RDBMS_QUOTE_STRING . ' - AND executed = 0 - AND periodically_day_from <= ? - AND periodically_day_to >= ?', -@@ -1619,9 +1644,9 @@ - # Start pending downtimes - my @downtimes = get_db_rows($dbh, 'SELECT * - FROM tplanned_downtime -- WHERE type_periodicity = "monthly" -+ WHERE type_periodicity = ' . $RDBMS_QUOTE_STRING . 'monthly' . $RDBMS_QUOTE_STRING . ' - AND executed = 1 -- AND type_execution <> "once"'); -+ AND type_execution <> ' . $RDBMS_QUOTE_STRING . 'once' . $RDBMS_QUOTE_STRING); - - foreach my $downtime (@downtimes) { - #Convert to identical type. -@@ -1695,18 +1720,18 @@ - # Start pending downtimes - my @downtimes = get_db_rows($dbh, 'SELECT * - FROM tplanned_downtime -- WHERE type_periodicity="weekly" -+ WHERE type_periodicity = ' . $RDBMS_QUOTE_STRING . 'weekly' . $RDBMS_QUOTE_STRING . ' - AND executed = 0'); - - foreach my $downtime (@downtimes) { - my $across_date = $downtime->{'periodically_time_from'} gt $downtime->{'periodically_time_to'} ? 1 : 0 ; - $found = 0; -- -+ - if ($across_date && ($time lt $downtime->{'periodically_time_to'})) { -- $number_day_week--; -- $number_day_week = 6 if ($number_day_week == -1); -- } -- -+ $number_day_week--; -+ $number_day_week = 6 if ($number_day_week == -1); -+ } -+ - if (($number_day_week == 1) && - ($downtime->{'monday'})) { - $found = 1; -@@ -1817,8 +1842,8 @@ - # Start pending downtimes - my @downtimes = get_db_rows($dbh, 'SELECT * - FROM tplanned_downtime -- WHERE type_periodicity = "weekly" -- AND type_execution <> "once" -+ WHERE type_periodicity = ' . $RDBMS_QUOTE_STRING . 'weekly' . $RDBMS_QUOTE_STRING . ' -+ AND type_execution <> ' . $RDBMS_QUOTE_STRING . 'once' . $RDBMS_QUOTE_STRING . ' - AND executed = 1'); - - foreach my $downtime (@downtimes) { -@@ -2137,7 +2162,7 @@ - Create a template module. - - =cut --########################################################################## -+######################################################################## - sub pandora_create_template_module ($$$$;$$$) { - my ($pa_config, $dbh, $id_agent_module, $id_alert_template, $id_policy_alerts, $disabled, $standby) = @_; - -@@ -2146,16 +2171,27 @@ - $standby = 0 unless defined $standby; - - my $module_name = get_module_name($dbh, $id_agent_module); -- return db_insert ($dbh, 'id', "INSERT INTO talert_template_modules (`id_agent_module`, `id_alert_template`, `id_policy_alerts`, `disabled`, `standby`, `last_reference`) VALUES (?, ?, ?, ?, ?, ?)", $id_agent_module, $id_alert_template, $id_policy_alerts, $disabled, $standby, time); -+ -+ return db_insert ($dbh, -+ 'id', -+ "INSERT INTO talert_template_modules( -+ " . $RDBMS_QUOTE . "id_agent_module" . $RDBMS_QUOTE . ", -+ " . $RDBMS_QUOTE . "id_alert_template" . $RDBMS_QUOTE . ", -+ " . $RDBMS_QUOTE . "id_policy_alerts" . $RDBMS_QUOTE . ", -+ " . $RDBMS_QUOTE . "disabled" . $RDBMS_QUOTE . ", -+ " . $RDBMS_QUOTE . "standby" . $RDBMS_QUOTE . ", -+ " . $RDBMS_QUOTE . "last_reference" . $RDBMS_QUOTE . ") -+ VALUES (?, ?, ?, ?, ?, ?)", -+ $id_agent_module, $id_alert_template, $id_policy_alerts, $disabled, $standby, time); - } - --########################################################################## -+######################################################################## - =head2 C<< pandora_update_template_module(I<$pa_config>, I<$dbh>, I<$id_alert>, I<$id_policy_alerts>, I<$disabled>, I<$standby>) >> - - Update a template module. - - =cut --########################################################################## -+######################################################################## - - sub pandora_update_template_module ($$$;$$$) { - my ($pa_config, $dbh, $id_alert, $id_policy_alerts, $disabled, $standby) = @_; -@@ -2164,16 +2200,22 @@ - $disabled = 0 unless defined $disabled; - $standby = 0 unless defined $standby; - -- db_do ($dbh, "UPDATE talert_template_modules SET `id_policy_alerts` = ?, `disabled` = ?, `standby` = ? WHERE id = ?", $id_policy_alerts, $disabled, $standby, $id_alert); -+ db_do ($dbh, -+ "UPDATE talert_template_modules -+ SET " . $RDBMS_QUOTE . "id_policy_alerts" . $RDBMS_QUOTE . " = ?, -+ " . $RDBMS_QUOTE . "disabled" . $RDBMS_QUOTE . " = ?, -+ " . $RDBMS_QUOTE . "standby" . $RDBMS_QUOTE . " = ? -+ WHERE id = ?", -+ $id_policy_alerts, $disabled, $standby, $id_alert); - } - --########################################################################## -+######################################################################## - =head2 C<< pandora_create_template_module_action(I<$pa_config>, I<$parameters>, I<$dbh>) >> - - Create a template action. - - =cut --########################################################################## -+######################################################################## - sub pandora_create_template_module_action ($$$) { - my ($pa_config, $parameters, $dbh) = @_; - -@@ -2184,26 +2226,26 @@ - return $action_id; - } - --########################################################################## -+######################################################################## - =head2 C<< pandora_delete_all_template_module_actions(I<$dbh>, I<$template_module_id>) >> - - Delete all actions of policy template module. - - =cut --########################################################################## -+######################################################################## - sub pandora_delete_all_template_module_actions ($$) { - my ($dbh, $template_module_id) = @_; - - return db_do ($dbh, 'DELETE FROM talert_template_module_actions WHERE id_alert_template_module = ?', $template_module_id); - } - --########################################################################## -+######################################################################## - =head2 C<< pandora_update_agent_address(I<$pa_config>, I<$agent_id>, I<$address>, I<$dbh>) >> - - Update the address of an agent. - - =cut --########################################################################## -+######################################################################## - sub pandora_update_agent_address ($$$$$) { - my ($pa_config, $agent_id, $agent_name, $address, $dbh) = @_; - -@@ -2298,9 +2340,13 @@ - $status = 0; - } - -- my $module_id = db_insert($dbh, 'id_agente_modulo', 'INSERT INTO tagente_modulo (id_agente, id_tipo_modulo, nombre, max, min, post_process, descripcion, module_interval, id_modulo) -- VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)', $agent_id, $module_type_id, safe_input($module_name), $max, $min, $post_process, $description, $interval); -- db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, id_agente, estado, last_status, last_known_status, last_try) VALUES (?, ?, ?, ?, ?, \'1970-01-01 00:00:00\')', $module_id, $agent_id, $status, $status, $status); -+ my $module_id = db_insert($dbh, 'id_agente_modulo', -+ 'INSERT INTO tagente_modulo (id_agente, id_tipo_modulo, nombre, max, min, post_process, descripcion, module_interval, id_modulo, critical_instructions, warning_instructions, unknown_instructions, disabled_types_event, module_macros) -+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, \'\', \'\', \'\', \'\', \'\')', -+ $agent_id, $module_type_id, safe_input($module_name), $max, $min, $post_process, $description, $interval); -+ db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, id_agente, estado, last_status, last_known_status, last_try, datos) -+ VALUES (?, ?, ?, ?, ?, \'1970-01-01 00:00:00\', \'\')', -+ $module_id, $agent_id, $status, $status, $status); - - # Update the module status count. When the module is created disabled dont do it - pandora_mark_agent_for_module_update ($dbh, $agent_id); -@@ -2400,7 +2446,18 @@ - delete $parameters->{'type'}; - delete $parameters->{'datalist'}; - delete $parameters->{'status'}; -- -+ if (defined $parameters->{'id_os'}) { -+ delete $parameters->{'id_os'}; -+ } -+ if (defined $parameters->{'os_version'}) { -+ delete $parameters->{'os_version'}; -+ } -+ if (defined $parameters->{'id_os'}) { -+ delete $parameters->{'id'}; -+ } -+ if (defined $parameters->{'id_network_component_group'}) { -+ delete $parameters->{'id_network_component_group'}; -+ } - my $module_id = db_process_insert($dbh, 'id_agente_modulo', - 'tagente_modulo', $parameters); - -@@ -2409,7 +2466,7 @@ - $status = 0; - } - -- db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, id_agente, estado, last_status, last_known_status, last_try) VALUES (?, ?, ?, ?, ?, \'1970-01-01 00:00:00\')', $module_id, $parameters->{'id_agente'}, $status, $status, $status); -+ db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, id_agente, estado, last_status, last_known_status, last_try, datos) VALUES (?, ?, ?, ?, ?, \'1970-01-01 00:00:00\', \'\')', $module_id, $parameters->{'id_agente'}, $status, $status, $status); - - # Update the module status count. When the module is created disabled dont do it - pandora_mark_agent_for_module_update ($dbh, $parameters->{'id_agente'}); -@@ -2495,8 +2552,16 @@ - } - - foreach my $tag_name (split (',', $serialized_tags)) { -- my $tag_id = get_db_value ($dbh, "SELECT id_tag FROM ttag WHERE name = ?", $tag_name); -- db_insert ($dbh, 'id_tag', "INSERT INTO ttag_module (`id_tag`, `id_agente_modulo`) VALUES (?, ?)", $tag_id, $id_agent_module); -+ my $tag_id = get_db_value ($dbh, -+ "SELECT id_tag FROM ttag WHERE name = ?", $tag_name); -+ -+ db_insert ($dbh, -+ 'id_tag', -+ "INSERT INTO ttag_module( -+ " . $RDBMS_QUOTE . "id_tag" . $RDBMS_QUOTE . ", -+ " . $RDBMS_QUOTE . "id_agente_modulo" . $RDBMS_QUOTE . ") -+ VALUES (?, ?)", -+ $tag_id, $id_agent_module); - } - } - -@@ -3385,6 +3450,19 @@ - return; - } - -+ # disable event just recovering from 'Unknown' without status change -+ if($last_status == 3 && $status == $last_known_status && $module->{'disabled_types_event'} ) { -+ my $disabled_types_event; -+ eval { -+ local $SIG{__DIE__}; -+ $disabled_types_event = decode_json($module->{'disabled_types_event'}); -+ }; -+ -+ if ($disabled_types_event->{'going_unknown'}) { -+ return; -+ } -+ } -+ - # Mark as "validated" any previous event for this module - pandora_validate_event ($pa_config, $module->{'id_agente_modulo'}, $dbh); - -@@ -3968,33 +4046,46 @@ - AND estado = 3"); - $agents_unknown = 0 if (!defined($agents_unknown)); - } -- -+ - my $queued_modules = get_db_value ($dbh, "SELECT SUM(queued_modules) FROM tserver WHERE name = '".$pa_config->{"servername"}."'"); -- -- if (!defined($queued_modules)){ -+ -+ if (!defined($queued_modules)) { - $queued_modules = 0; - } -- -- my $dbmaintance = get_db_value ($dbh, "SELECT COUNT(*) FROM tconfig WHERE token = 'db_maintance' AND value > UNIX_TIMESTAMP() - 86400"); -- -+ -+ my $dbmaintance; -+ if ($RDBMS eq 'postgresql') { -+ $dbmaintance = get_db_value ($dbh, -+ "SELECT COUNT(*) -+ FROM tconfig -+ WHERE token = 'db_maintance' -+ AND NULLIF(value, '')::int > UNIX_TIMESTAMP() - 86400"); -+ } -+ else { -+ $dbmaintance = get_db_value ($dbh, -+ "SELECT COUNT(*) -+ FROM tconfig -+ WHERE token = 'db_maintance' AND value > UNIX_TIMESTAMP() - 86400"); -+ } -+ - $xml_output .=" <module>"; - $xml_output .=" <name>Database Maintenance</name>"; - $xml_output .=" <type>generic_proc</type>"; - $xml_output .=" <data>$dbmaintance</data>"; - $xml_output .=" </module>"; -- -+ - $xml_output .=" <module>"; - $xml_output .=" <name>Queued_Modules</name>"; - $xml_output .=" <type>generic_data</type>"; - $xml_output .=" <data>$queued_modules</data>"; - $xml_output .=" </module>"; -- -+ - $xml_output .=" <module>"; - $xml_output .=" <name>Agents_Unknown</name>"; - $xml_output .=" <type>generic_data</type>"; - $xml_output .=" <data>$agents_unknown</data>"; - $xml_output .=" </module>"; -- -+ - $xml_output .=" <module>"; - $xml_output .=" <name>System_Load_AVG</name>"; - $xml_output .=" <type>generic_data</type>"; -Index: lib/PandoraFMS/ReconServer.pm -=================================================================== ---- lib/PandoraFMS/ReconServer.pm (revision 10314) -+++ lib/PandoraFMS/ReconServer.pm (working copy) -@@ -141,9 +141,11 @@ - } - - # Call nmap -+ my $timeout = $pa_config->{'networktimeout'}*1000; -+ my $nmap_args = '-nsP -PE --max-retries '.$pa_config->{'icmp_checks'}.' --host-timeout '.$timeout.' -T'.$pa_config->{'nmap_timing_template'}; - my $np = new PandoraFMS::NmapParser; - eval { -- $np->parsescan($pa_config->{'nmap'},'-nsP', ($task->{'subnet'})); -+ $np->parsescan($pa_config->{'nmap'}, $nmap_args, ($task->{'subnet'})); - }; - if ($@) { - update_recon_task ($dbh, $task_id, -1); -@@ -262,7 +264,7 @@ - } - } - # End of GIS code ----------------------------- -- else { -+ else { - # Create a new agent - $agent_id = pandora_create_agent ($pa_config, $pa_config->{'servername'}, - $host_name, $addr, $task->{'id_group'}, -@@ -274,7 +276,7 @@ - logger($pa_config, "Error creating agent '$host_name'.", 3); - next; - } -- -+ - # Add the new address if it does not exist - my $addr_id = get_addr_id ($dbh, $addr); - $addr_id = add_address ($dbh, $addr) unless ($addr_id > 0); -@@ -282,14 +284,15 @@ - logger($pa_config, "Could not add address '$addr' for host '$host_name'.", 3); - next; - } -- -+ - # Assign the new address to the agent - my $agent_addr_id = get_agent_addr_id ($dbh, $addr_id, $agent_id); - if ($agent_addr_id <= 0) { -- db_do ($dbh, 'INSERT INTO taddress_agent (`id_a`, `id_agent`) -- VALUES (?, ?)', $addr_id, $agent_id); -+ db_do ($dbh, 'INSERT INTO taddress_agent (' . $RDBMS_QUOTE . 'id_a' . $RDBMS_QUOTE . ', ' . -+ $RDBMS_QUOTE . 'id_agent' . $RDBMS_QUOTE . ') -+ VALUES (?, ?)', $addr_id, $agent_id); - } -- -+ - # Create network profile modules for the agent - create_network_profile_modules ($pa_config, $dbh, $agent_id, $task->{'id_network_profile'}, $addr, $task->{'snmp_community'}); - -@@ -309,9 +312,9 @@ - $text .= "\n\nThis is the list of IP addresses found: \n\n$added_hosts"; - pandora_create_incident ($pa_config, $dbh, "[RECON] New hosts detected", $text, 0, 0, 'Pandora FMS Recon Server', $task->{'id_group'}); - } -- -+ - logger($pa_config, "Finished recon task for net " . $task->{'subnet'} . ".", 10); -- -+ - # Mark recon task as done - update_recon_task ($dbh, $task_id, -1); - } -@@ -324,9 +327,11 @@ - my ($pa_config, $host, $dbh, $group, $max_depth, $resolve, $os_detect) = @_; - - # Call nmap -+ my $timeout = $pa_config->{'networktimeout'}*1000; -+ my $nmap_args = '-nsP -PE --traceroute --max-retries '.$pa_config->{'icmp_checks'}.' --host-timeout '.$timeout.' -T'.$pa_config->{'nmap_timing_template'}; - my $np = new PandoraFMS::NmapParser; - eval { -- $np->parsescan($pa_config->{'nmap'},'-nsP --traceroute', ($host)); -+ $np->parsescan($pa_config->{'nmap'}, $nmap_args, ($host)); - }; - if ($@) { - return 0; -@@ -388,12 +393,13 @@ - if ($os_detect == 1) { - $id_os = guess_os ($pa_config, $dbh, $host_addr); - } -- -+ - # Create the host - my $agent_id = pandora_create_agent ($pa_config, $pa_config->{'servername'}, $host_name, $host_addr, $group, $parent_id, $id_os, '', 300, $dbh); - $agent_id = 0 unless defined ($parent_id); -- db_do ($dbh, 'INSERT INTO taddress_agent (`id_a`, `id_agent`) -- VALUES (?, ?)', $addr_id, $agent_id); -+ db_do ($dbh, 'INSERT INTO taddress_agent (' . $RDBMS_QUOTE . 'id_a' . $RDBMS_QUOTE . ',' . -+ $RDBMS_QUOTE . 'id_agent' . $RDBMS_QUOTE . ') -+ VALUES (?, ?)', $addr_id, $agent_id); - - # Move to the next host - $parent_id = $agent_id; -@@ -417,9 +423,9 @@ - # Guess OS using xprobe2. - ########################################################################## - sub guess_os { -- my ($pa_config, $dbh, $host) = @_; -- -- # Use xprobe2 if available -+ my ($pa_config, $dbh, $host) = @_; -+ -+ # Use xprobe2 if available - my $xprobe = $pa_config->{'xprobe2'}; - if (-e $xprobe){ - my $output = `$xprobe $host 2>$DEVNULL | grep 'Running OS' | head -1`; -Index: lib/PandoraFMS/DataServer.pm -=================================================================== ---- lib/PandoraFMS/DataServer.pm (revision 10314) -+++ lib/PandoraFMS/DataServer.pm (working copy) -@@ -528,7 +528,7 @@ - 'str_warning' => '', 'str_critical' => '', 'critical_instructions' => '', 'warning_instructions' => '', - 'unknown_instructions' => '', 'tags' => '', 'critical_inverse' => 0, 'warning_inverse' => 0, 'quiet' => 0, - 'module_ff_interval' => 0}; -- -+ - # Other tags will be saved here - $module_conf->{'extended_info'} = ''; - -@@ -539,8 +539,8 @@ - } else { - $module_conf->{'extended_info'} .= "$tag: " . get_tag_value ($data, $tag, '') . '<br/>'; - } -- } -- -+ } -+ - # Description XML tag and column name don't match - $module_conf->{'descripcion'} = $module_conf->{'description'}; - $module_conf->{'descripcion'} = '' unless defined ($module_conf->{'descripcion'}); -@@ -549,14 +549,21 @@ - # Name XML tag and column name don't match - $module_conf->{'nombre'} = safe_input($module_name); - delete $module_conf->{'name'}; -- -+ - # Calculate the module interval in seconds - $module_conf->{'module_interval'} = 1 unless defined ($module_conf->{'module_interval'}); - $module_conf->{'module_interval'} *= $interval if (defined ($module_conf->{'module_interval'})); -- -+ - # Allow , as a decimal separator - $module_conf->{'post_process'} =~ s/,/./ if (defined ($module_conf->{'post_process'})); - -+ # avoid NULL columns -+ $module_conf->{'critical_instructions'} = '' unless defined ($module_conf->{'critical_instructions'}); -+ $module_conf->{'warning_instructions'} = '' unless defined ($module_conf->{'warning_instructions'}); -+ $module_conf->{'unknown_instructions'} = '' unless defined ($module_conf->{'unknown_instructions'}); -+ $module_conf->{'disabled_types_event'} = '' unless defined ($module_conf->{'disabled_types_event'}); -+ $module_conf->{'module_macros'} = '' unless defined ($module_conf->{'module_macros'}); -+ - # Get module data or create it if it does not exist - $ModuleSem->down (); - my $module = get_db_single_row ($dbh, 'SELECT * FROM tagente_modulo WHERE id_agente = ? AND ' . db_text ('nombre') . ' = ?', $agent->{'id_agente'}, safe_input($module_name)); -@@ -568,14 +575,14 @@ - $ModuleSem->up (); - return; - } -- -+ - # Is the agent learning? - if ($agent->{'modo'} ne '1') { - logger($pa_config, "Learning mode disabled. Skipping module '$module_name' agent '$agent_name'.", 10); - $ModuleSem->up (); - return; - } -- -+ - # Get the module type - $module_conf->{'id_tipo_modulo'} = get_module_id ($dbh, $module_type); - if ($module_conf->{'id_tipo_modulo'} <= 0) { -@@ -583,16 +590,16 @@ - $ModuleSem->up (); - return; - } -- -+ - # The group name has to be translated to a group ID - if (defined $module_conf->{'module_group'}) { - $module_conf->{'id_module_group'} = get_module_group_id ($dbh, $module_conf->{'module_group'}); - delete $module_conf->{'module_group'}; - } -- -+ - $module_conf->{'id_modulo'} = 1; - $module_conf->{'id_agente'} = $agent->{'id_agente'}; -- -+ - my $module_tags = undef; - if(defined ($module_conf->{'tags'})) { - $module_tags = $module_conf->{'tags'}; -@@ -601,7 +608,7 @@ - - # Create the module - my $module_id = pandora_create_module_from_hash ($pa_config, $module_conf, $dbh); -- -+ - $module = get_db_single_row ($dbh, 'SELECT * FROM tagente_modulo WHERE id_agente = ? AND ' . db_text('nombre') . ' = ?', $agent->{'id_agente'}, safe_input($module_name)); - if (! defined ($module)) { - logger($pa_config, "Could not create module '$module_name' for agent '$agent_name'.", 3); -@@ -626,7 +633,8 @@ - } - } - -- } else { -+ } -+ else { - # Control NULL columns - $module->{'descripcion'} = '' unless defined ($module->{'descripcion'}); - $module->{'extended_info'} = '' unless defined ($module->{'extended_info'}); -@@ -649,15 +657,15 @@ - if ($agent->{'modo'} eq '1' && $policy_linked == 0) { - update_module_configuration ($pa_config, $dbh, $module, $module_conf); - } -- -+ - $ModuleSem->up (); -- -+ - # Module disabled! - if ($module->{'disabled'} eq '1') { - logger($pa_config, "Skipping disabled module '$module_name' agent '$agent_name'.", 10); - return; - } -- -+ - # Parse the timestamp and process the module - if ($timestamp !~ /(\d+)\/(\d+)\/(\d+) +(\d+):(\d+):(\d+)/ && - $timestamp !~ /(\d+)\-(\d+)\-(\d+) +(\d+):(\d+):(\d+)/) { -Index: bin/pandora_server -=================================================================== ---- bin/pandora_server (revision 10314) -+++ bin/pandora_server (working copy) -@@ -47,11 +47,22 @@ - my @Servers; - my $DBH; - my $RUN :shared = 1; -+my $MainThread = threads->self; - - ######################################################################################## - # Server shutdown. Handler to do a controlled shutdown. - ######################################################################################## - sub pandora_shutdown () { -+ my $signal = shift; -+ -+ logger (\%Config, 'Pandora FMS Server \'' . $Config{'servername'} . '\' Caught SIG' . $signal . ' by thread(' . threads->self()->tid() . ')', 10); -+ -+ if (!threads->self->equal($MainThread)) { -+ # deliver signal to the main thread since no other threads than main thread -+ # could disconnet $DBH properly -+ $MainThread->kill($signal); -+ return; -+ } - logger (\%Config, 'Pandora FMS Server \'' . $Config{'servername'} . '\' Shutdown by signal ', 1); - - # Stop servers -Index: pandora_server.redhat.spec -=================================================================== ---- pandora_server.redhat.spec (revision 10314) -+++ pandora_server.redhat.spec (working copy) -@@ -28,6 +28,7 @@ - Requires: perl-NetAddr-IP net-snmp net-tools - Requires: perl-IO-Socket-INET6 perl-Socket6 perl-Net-Telnet - Requires: nmap wmic sudo perl-JSON -+Requires: perl-Time-HiRes - - %description - Pandora FMS is a monitoring system for big IT environments. It uses remote tests, or local agents to grab information. Pandora supports all standard OS (Linux, AIX, HP-UX, Solaris and Windows XP,2000/2003), and support multiple setups in HA enviroments. -Index: FreeBSD/pandora_server.conf.new -=================================================================== ---- FreeBSD/pandora_server.conf.new (revision 0) -+++ FreeBSD/pandora_server.conf.new (revision 10417) -@@ -0,0 +1,442 @@ -+############################################################################# -+# Pandora FMS Server Parameters -+# Pandora FMS, the Flexible Monitoring System. -+# Version 5.1BETA1 -+# Licensed under GPL license v2, -+# (c) 2003-2014 Artica Soluciones Tecnologicas -+# http://www.pandorafms.com -+# Please change it for your setup needs -+############################################################################# -+ -+# Servername: Name of this server -+# if not given, it takes hostname. It's preferable to setup one -+# because machine name could change by some reason. -+ -+#servername greystone -+ -+# incomingdir: Defines directory where incoming data packets are stored -+# You could set directory relative to base path or absolute, starting with / -+ -+incomingdir /var/spool/pandora/data_in -+ -+# log_file: Main logfile for pandora_server -+# You could set file relative to base path or absolute, starting with / -+ -+log_file /var/log/pandora/pandora_server.log -+ -+# Log file for Pandora FMS SNMP console. Its generated by NetSNMP Trap daemon -+ -+snmp_logfile /var/log/pandora/pandora_snmptrap.log -+ -+# Error logfile: aux logfile for pandora_server errors (in Daemon mode) -+# You could set file relative to base path or absolute, starting with / -+ -+errorlog_file /var/log/pandora/pandora_server.error -+ -+# daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground -+# this could be also configured on commandline with -D option -+ -+# daemon 1 -+ -+# dbengine: mysql, postgresql or oracle (mysql by default) -+ -+dbengine mysql -+ -+# Database credentials. A VERY important configuration. -+# This must be the same credentials used by your Pandora FMS Console -+# but could be different if your console is not running in the same -+# host than the server. Check your console setup in /include/config.php -+ -+# dbname: Database name (pandora by default) -+ -+dbname pandora -+ -+# dbuser: Database user name (pandora by default) -+ -+dbuser pandora -+ -+# dbpass: Database password -+ -+dbpass pandora -+ -+# dbhost: Database hostname or IP address -+ -+dbhost 127.0.0.1 -+ -+# dbport: Database port number -+# Default value depends on the dbengine (mysql: 3306, postgresql: 5432, oracle: 1521) -+ -+#dbport 3306 -+ -+# By default, parent agent will not be updated -+ -+#update_parent 0 -+ -+# verbosity: level of detail on errors/messages (0 default, 1 verbose, 2 debug.... 10 noisy) -+# -v in command line (verbose) or -d (debug). Set this to 10 when try to locate problems and -+# set to 0 or 1 on production enviroments. -+ -+verbosity 1 -+ -+# Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup) -+ -+master 1 -+ -+# Activate Pandora SNMP console (depending on snmptrapd) -+ -+snmpconsole 0 -+ -+# snmptrapd will ignore authenticationFailure traps if set to 1. -+ -+snmp_ignore_authfailure 1 -+ -+# snmptrapd will read the PDU source address instead of the agent-addr field is set to 1. -+ -+snmp_pdu_address 0 -+ -+# Activate (1) Pandora Network Server -+ -+networkserver 1 -+ -+# Activate (1) Pandora Data Server -+ -+dataserver 1 -+ -+# Activate (1) Pandora FMS Recon server -+ -+reconserver 1 -+ -+# pluginserver : 1 or 0. Set to 1 to activate plugin server with this setup -+ -+pluginserver 1 -+ -+# Pandora FMS Plugin exec tool filepath (by default at /usr/local/bin) -+ -+plugin_exec /usr/local/bin/gtimeout -+ -+# predictionserver : 1 or 0. Set to 1 to activate prediction server with this setup -+# DISABLED BY DEFAULT -+ -+predictionserver 0 -+ -+# wmiserver : 1 or 0. Set to 1 to activate WMI server with this setup -+# DISABLED BY DEFAULT -+ -+wmiserver 1 -+ -+# wmic: Needed by Pandora FMS wmi server. -+ -+wmi_client /usr/local/bin/wmic -+ -+# Network timeout (in seconds) for timeout in network connections for Network agents -+ -+network_timeout 4 -+ -+# Server keepalive (in seconds) -+ -+server_keepalive 45 -+ -+# Server Threshold: defines number of seconds of main loop (in sec) -+ -+server_threshold 5 -+ -+# Network threads: Do not set too high (~40). Each threads make a network module check. -+ -+network_threads 4 -+ -+# icmp_checks x : defines number of pings for each icmp_proc module type. at least one of -+# that ping should be 1 to report 1 -+ -+icmp_checks 1 -+ -+# tcp specific options : -+# tcp_checks: number of tcp retries if first attempt fails. -+# tcp_timeout: specific timeout for tcp connections -+ -+tcp_checks 1 -+tcp_timeout 10 -+ -+# snmp specific options : -+# snmp_checks: number of snmp request retries if first attempt fails. -+# snmp_timeout: specific timeout for snmp request. -+ -+snmp_checks 1 -+snmp_timeout 4 -+ -+# snmp_proc_deadresponse 1 (default): Return DOWN if cannot contact -+# or receive NULL from a SNMP PROC module. -+ -+snmp_proc_deadresponse 1 -+ -+# plugin_threads: Specify number of plugin server threads for processing plugin calls -+ -+plugin_threads 1 -+ -+# plugin_timeout: Specify number of seconds calling plugin exec waiting for response -+# after this time, call is aborted and result is "unknown". -+ -+plugin_timeout 12 -+ -+# wmi_timeout : specific timeout for wmi request. -+ -+wmi_timeout 7 -+ -+# wmi_threads: Specify number of WMI server threads for processing WMI remote calls -+ -+wmi_threads 1 -+ -+# recon_threads. Each thread will scan a different scantask. -+ -+recon_threads 1 -+ -+# dataserver_threads: Number of threads for data server (XML processing threads) -+ -+dataserver_threads 1 -+ -+# mta_address: External Mailer (MTA) IP Address to be used by Pandora FMS internal email capabilities -+ -+mta_address localhost -+ -+# mta_port, this is the mail server port (default 25) -+ -+#mta_port 25 -+ -+# mta_user MTA User (if needed for auth, FQD or simple user, depending on your server) -+ -+#mta_user myuser@mydomain.com -+ -+# mta_pass MTA Pass (if needed for auth) -+ -+#mta_pass mypassword -+ -+# mta_auth MTA Auth system (if needed, it supports LOGIN, PLAIN, CRAM-MD5, DIGEST-MD) -+ -+#mta_auth LOGIN -+ -+# mta_from Email address that sends the mail, by default is pandora@localhost -+# probably you need to change it to avoid problems with your antispam -+ -+#mta_from Pandora FMS <pandora@mydomain.com> -+ -+# Set 1 if want eMail deliver alert in separate mail (default). -+# Set 0 if want eMail deliver shared mail by all destination. -+mail_in_separate 1 -+ -+ -+# xprobe2: Optional package to detect OS types using advanced TCP/IP -+# fingerprinting tecniques, much more accurates than stadard nmap. -+# If not provided, nmap is used insted xprobe2 -+ -+xprobe2 /usr/local/bin/xprobe2 -+ -+# nmap: If provided, is used to detect OS type with recon server using -+# advanded OS fingerprint technique. Xprobe2 gives more accurate results -+# Nmap is also used to do TCP port scanning in detected host. -+ -+nmap /usr/local/bin/nmap -+ -+# snmpget: Needed to do SNMP checks. By default is on /usr/local/bin/snmpget -+ -+snmpget /usr/local/bin/snmpget -+ -+# snmp_trapd: Needed by Pandora FMS SNMP console. -+ -+snmp_trapd /usr/local/sbin/snmptrapd -+ -+# Location of the braa binary needed by the Enterprise SNMP Server (/usr/local/bin/braa by default) (PANDORA FMS ENTERPRISE ONLY). -+ -+braa /usr/local/bin/braa -+ -+# Number of retries before braa hands a module over to the Network Server (PANDORA FMS ENTERPRISE ONLY). -+ -+braa_retries 3 -+ -+# Default group id for new agents created with Pandora FMS Data Server -+ -+autocreate_group 2 -+ -+# Set to 1 if want to autocreate agents with Pandora FMS Data Server, -+# set to 0 to disable (for security purposes, for example). -+ -+autocreate 1 -+ -+# max_log_size: Specify max size of Pandora FMS server log file (1MB by default). If -+# log file grows above this limit, is renamed to "pandora_server.log.old". -+ -+max_log_size 65536 -+ -+# max_queue_files (500 by default) -+# When server have more than max_queue_files in incoming directory, skips the read -+# the directory to avoid filesystem overhead. -+ -+max_queue_files 500 -+ -+# Use the XML file last modification time as timestamp. -+# use_xml_timestamp 1 -+ -+# Pandora FMS will autorestart itself each XXX seconds, use this if you experience problems with -+# shutting down threads, or other stability problems. -+ -+# auto_restart 86400 -+ -+# Pandora FMS will restart after restart_delay seconds on critical errors. -+ -+restart 1 -+restart_delay 60 -+ -+# More information about GIS Setup in /usr/share/pandora_server/util/gis.README -+# Flag to activate GIS (positional information for agents and maps) -+# by default it is desactivated -+ -+#activate_gis 0 -+ -+# Radius of error in meters to consider two gis locations as the same location. -+ -+#location_error 50 -+ -+# Recon reverse geolocation mode [disabled, sql, file] -+# disabled The recon task doesn't try to geolocate the ip discovered. -+# sql The recon task trys to query the SQL database to geolocate the -+# ip discovered -+# file The recon task trys to find the geolocation information of the -+# ip discovered in the file indicated in the -+# recon_reverse_geolocation_file parameter -+ -+# recon_reverse_geolocation_mode disabled -+ -+# Recon reverse geolocation file. This is the database with the reverse -+# geolocation information using MaxMind GPL GeoLiteCity.dat format). -+ -+#recon_reverse_geolocation_file /usr/local/share/GeoIP/GeoIPCity.dat -+ -+# Radius (in meters) of the circle in where the agents will be place randomly -+# when finded by a recon task. Center of the circle is guessed -+# by geolocating the IP. -+#recon_location_scatter_radius 1000 -+ -+# Pandora Server self-monitoring (embedded agent) (by default enabled) -+ -+self_monitoring 1 -+ -+# Update parent from the agent xml -+ -+#update_parent 1 -+# -+# -+# This enable realtime reverse geocoding using Google Maps public api. -+# This requires internet access, and could have performance penalties processing GIS -+# information due the connetion needed to resolve all GIS input. -+# NOTE: If you dont pay the service to google, they will ban your IP in a few days. -+ -+# google_maps_description 1 -+ -+# This enable realtime reverse geocoding using Openstreet Maps public api. -+# This requires internet access, and could have performance penalties processing GIS -+# information due the connetion needed to resolve all GIS input. -+# You can alter the code to use a local (your own) openstreet maps server. -+ -+# openstreetmaps_description 1 -+ -+# Enable (1) or disable (0) Pandora FMS Event Web Server (PANDORA FMS ENTERPRISE ONLY). -+ -+webserver 1 -+ -+# Number of threads for the Web Server (PANDORA FMS ENTERPRISE ONLY). -+ -+web_threads 1 -+ -+# Enable (1) or disable (0) Pandora FMS Inventory Server (PANDORA FMS ENTERPRISE ONLY). -+ -+inventoryserver 1 -+ -+# Number of threads for the Web Server (PANDORA FMS ENTERPRISE ONLY). -+ -+inventory_threads 1 -+ -+# Enable (1) or disable (0) Pandora FMS Export Server (PANDORA FMS ENTERPRISE ONLY). -+ -+exportserver 0 -+ -+# Number of threads for the Export Server (PANDORA FMS ENTERPRISE ONLY). -+ -+export_threads 1 -+ -+# Enable (1) or disable (0) Pandora FMS Event Server (PANDORA FMS ENTERPRISE ONLY). -+ -+eventserver 0 -+ -+# Event Server event window in seconds (3600 by default) (PANDORA FMS ENTERPRISE ONLY). -+ -+event_window 3600 -+ -+# Enable (1) or disable (0) Pandora FMS Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY). -+# You need nmap 5.20 or higher in order to use this ! -+ -+icmpserver 1 -+ -+# Number of threads for the Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY). -+ -+icmp_threads 1 -+ -+# Enable (1) or disable (0) Pandora FMS Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY). -+# Check braa tool is running and operative. -+ -+snmpserver 1 -+ -+# Number of threads for the Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY). -+ -+snmp_threads 1 -+ -+# Block size for block producer/consumer servers, that is, the number of modules -+# per block (20 by default) (PANDORA FMS ENTERPRISE ONLY). -+ -+block_size 20 -+ -+# Path to the netflow daemon nfcapd. -+ -+netflow_daemon /usr/local/bin/nfcapd -+ -+# If set to 1, process XML data files in a stack instead of a queue. 0 by default. -+# WARNING: Incremental modules will not work properly if dataserver_lifo is set to 1!!! -+ -+dataserver_lifo 0 -+ -+# If set to 1, the policy manager is enabled and the server is listening the policy queue. -+# 0 by default (PANDORA FMS ENTERPRISE ONLY) -+ -+policy_manager 1 -+ -+# If set to 1, the event replicate process is enabled. 0 by default. (PANDORA FMS ENTERPRISE ONLY) -+# WARNING: This process doesn't do anything if is not properly configured from the console setup -+ -+event_replication 0 -+ -+# If set to 1, new events validate older event for the same module. This will -+# affect the performance of the server. This was the "normal behaviour" on previous (4.x) versions. -+# disable only if you really know what you are doing !!. -+ -+event_auto_validation 1 -+ -+# If defined, events generated by Pandora FMS will be written to the specified text file. -+#event_file /var/log/pandora/pandora_events.txt -+ -+# Set the maximum number of traps that will be processed from a single source in a -+# configured time interval. -+snmp_storm_protection 25 -+ -+# Time interval for snmp_storm protection (in seconds). -+snmp_storm_timeout 10 -+ -+# Default texts for some events. The macros _module_ and _data_ are supported. -+#text_going_down_normal Module '_module_' is going to NORMAL (_data_) -+#text_going_up_critical Module '_module_' is going to CRITICAL (_data_) -+#text_going_up_warning Module '_module_' is going to WARNING (_data_) -+#text_going_down_warning Module '_module_' is going to WARNING (_data_) -+#text_going_unknown Module '_module_' is going to UNKNOWN -+ -+# Events older that the specified time (in seconds) will be auto-validated. Set to 0 to disable this feature. -+event_expiry_time 0 -+ -+# Only events more recent than the specified time window (in seconds) will be auto-validated. This value must -+# be greater than event_expiry_time. -+#event_expiry_window 86400 -Index: FreeBSD/tentacle_server -=================================================================== ---- FreeBSD/tentacle_server (revision 10314) -+++ FreeBSD/tentacle_server (working copy) -@@ -18,28 +18,27 @@ - . "/etc/rc.subr" - - name="tentacle_server" --rcvar=`set_rcvar` -+rcvar=tentacle_server_enable - - # read configuration and set defaults - tentacle_server_enable=${tentacle_server_enable:-"NO"} --tentacle_server_flags=${tentacle_server_flags:-"-a 0.0.0.0 -p 41121 -s /var/spool/pandora/data_in -i.*\.conf:conf\;.*\.md5:md5\;.*\.zip:collections -d"} -+tentacle_server_flags=${tentacle_server_flags:-'-a 0.0.0.0 -p 41121 -s /var/spool/pandora/data_in -i.*\.conf:conf\;.*\.md5:md5\;.*\.zip:collections -d'} - tentacle_server_user=${tentacle_server_user:-"pandora"} - load_rc_config $name - - PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin - - command=/usr/local/bin/${name} -+command_interpreter=/usr/local/bin/perl -+procname=$command -+pidfile=/var/run/$name.pid - --pidfile=/var/run/$name.pid - start_postcmd=start_postcmd - stop_postcmd=stop_postcmd - --procname="/usr/bin/perl" -- - start_postcmd() - { -- TENTACLE_PID=`pgrep -f -j none "$procname $command"` -- echo $TENTACLE_PID > $pidfile -+ pgrep -f -j none "^$command_interpreter $command" > $pidfile - } - - stop_postcmd() -Index: FreeBSD/pandora_server -=================================================================== ---- FreeBSD/pandora_server (revision 10314) -+++ FreeBSD/pandora_server (working copy) -@@ -3,6 +3,7 @@ - # ********************************************************************** - # Pandora FMS Server Daemon launcher for FreeBSD - # (c) 2010 Junichi Satoh <junichi@rworks.jp> -+# (c) 2014 Koichiro Kikuchi <koichiro@rworks.jp> - # - # ********************************************************************** - -@@ -10,27 +11,65 @@ - # REQUIRE: LOGIN mysql - # KEYWORD: shutdown - --# Add the following line to /etc/rc.conf to enable `pandora_server': -+# Add the following lines to /etc/rc.conf to enable pandora_server: -+# pandora_server_enable (bool): Set to "YES" to enable pandora_server (default: NO) -+# pandora_server_profiles (str): Define your profiles here (default: "") - # --# pandora_server_enable="YES" --# - - . "/etc/rc.subr" - -+PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin -+ - name="pandora_server" --rcvar=`set_rcvar` -+rcvar=pandora_server_enable - --# read configuration and set defaults --pandora_server_enable=${pandora_server_enable:-"NO"} -+: ${pandora_server_enable:=NO} -+: ${pandora_server_configfile:=/usr/local/etc/pandora/pandora_server.conf} -+ -+command=/usr/local/bin/${name} -+command_args="-D" -+command_interpreter=/usr/local/bin/perl -+_pidprefix=/var/run/$name -+pidfile=${_pidprefix}.pid -+required_files="$pandora_server_configfile" -+ - load_rc_config $name - --PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin -+if [ "$2" ]; then -+ profile="$2" -+ if [ "$pandora_server_profiles" ]; then -+ pidfile="${_pidprefix}.${profile}.pid" -+ eval pandora_server_configfile="\${pandora_server_${profile}_configfile:-}" -+ if [ -z "$pandora_server_configfile" ]; then -+ echo "You must define a configuration file (pandora_server_${profile}_configfile)" -+ exit 1 -+ fi -+ required_files="$pandora_server_configfile" -+ eval pandora_server_enable="\${pandora_server_${profile}_enable:-$pandora_server_enable}" -+ eval pandora_server_flags="\${pandora_server_${profile}_flags:-$pandora_server_flags}" -+ eval pidfile="\${pandora_server_${profile}_pidfile:-$pidfile}" -+ else -+ echo "$0: extra argument ignored" -+ fi -+elif [ "${pandora_server_profiles}" ] && [ "$1" ]; then -+ for profile in ${pandora_server_profiles}; do -+ eval _enable="\${pandora_server_${profile}_enable}" -+ case "${_enable:-${pandora_server_enable}}" in -+ [Yy][Ee][Ss]);; -+ *) continue;; -+ esac -+ echo "===> pandora_server profile: ${profile}" -+ /usr/local/etc/rc.d/pandora_server $1 ${profile} -+ retcode="$?" -+ if [ "0${retcode}" -ne 0 ]; then -+ failed="${profile} (${retcode}) ${failed:-}" -+ else -+ success="${profile} ${success:-}" -+ fi -+ done -+ exit 0 -+fi - --pidfile=/var/run/$name.pid --command=/usr/local/bin/${name} --command_args="-D -P ${pidfile} /usr/local/etc/pandora/pandora_server.conf" --required_files="/usr/local/etc/pandora/pandora_server.conf" -+pandora_server_flags="$pandora_server_flags -P $pidfile $pandora_server_configfile" - --procname="/usr/local/bin/perl" -- - run_rc_command "$1" -Index: FreeBSD/pandora_server.conf -=================================================================== ---- FreeBSD/pandora_server.conf (revision 10314) -+++ FreeBSD/pandora_server.conf (working copy) -@@ -1,442 +0,0 @@ --############################################################################# --# Pandora FMS Server Parameters --# Pandora FMS, the Flexible Monitoring System. --# Version 5.1BETA1 --# Licensed under GPL license v2, --# (c) 2003-2014 Artica Soluciones Tecnologicas --# http://www.pandorafms.com --# Please change it for your setup needs --############################################################################# -- --# Servername: Name of this server --# if not given, it takes hostname. It's preferable to setup one --# because machine name could change by some reason. -- --#servername greystone -- --# incomingdir: Defines directory where incoming data packets are stored --# You could set directory relative to base path or absolute, starting with / -- --incomingdir /var/spool/pandora/data_in -- --# log_file: Main logfile for pandora_server --# You could set file relative to base path or absolute, starting with / -- --log_file /var/log/pandora/pandora_server.log -- --# Log file for Pandora FMS SNMP console. Its generated by NetSNMP Trap daemon -- --snmp_logfile /var/log/pandora/pandora_snmptrap.log -- --# Error logfile: aux logfile for pandora_server errors (in Daemon mode) --# You could set file relative to base path or absolute, starting with / -- --errorlog_file /var/log/pandora/pandora_server.error -- --# daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground --# this could be also configured on commandline with -D option -- --# daemon 1 -- --# dbengine: mysql, postgresql or oracle (mysql by default) -- --dbengine mysql -- --# Database credentials. A VERY important configuration. --# This must be the same credentials used by your Pandora FMS Console --# but could be different if your console is not running in the same --# host than the server. Check your console setup in /include/config.php -- --# dbname: Database name (pandora by default) -- --dbname pandora -- --# dbuser: Database user name (pandora by default) -- --dbuser pandora -- --# dbpass: Database password -- --dbpass pandora -- --# dbhost: Database hostname or IP address -- --dbhost 127.0.0.1 -- --# dbport: Database port number --# Default value depends on the dbengine (mysql: 3306, postgresql: 5432, oracle: 1521) -- --#dbport 3306 -- --# By default, parent agent will not be updated -- --#update_parent 0 -- --# verbosity: level of detail on errors/messages (0 default, 1 verbose, 2 debug.... 10 noisy) --# -v in command line (verbose) or -d (debug). Set this to 10 when try to locate problems and --# set to 0 or 1 on production enviroments. -- --verbosity 1 -- --# Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup) -- --master 1 -- --# Activate Pandora SNMP console (depending on snmptrapd) -- --snmpconsole 0 -- --# snmptrapd will ignore authenticationFailure traps if set to 1. -- --snmp_ignore_authfailure 1 -- --# snmptrapd will read the PDU source address instead of the agent-addr field is set to 1. -- --snmp_pdu_address 0 -- --# Activate (1) Pandora Network Server -- --networkserver 1 -- --# Activate (1) Pandora Data Server -- --dataserver 1 -- --# Activate (1) Pandora FMS Recon server -- --reconserver 1 -- --# pluginserver : 1 or 0. Set to 1 to activate plugin server with this setup -- --pluginserver 1 -- --# Pandora FMS Plugin exec tool filepath (by default at /usr/local/bin) -- --plugin_exec /usr/local/bin/gtimeout -- --# predictionserver : 1 or 0. Set to 1 to activate prediction server with this setup --# DISABLED BY DEFAULT -- --predictionserver 0 -- --# wmiserver : 1 or 0. Set to 1 to activate WMI server with this setup --# DISABLED BY DEFAULT -- --wmiserver 1 -- --# wmic: Needed by Pandora FMS wmi server. -- --wmi_client /usr/local/bin/wmic -- --# Network timeout (in seconds) for timeout in network connections for Network agents -- --network_timeout 4 -- --# Server keepalive (in seconds) -- --server_keepalive 45 -- --# Server Threshold: defines number of seconds of main loop (in sec) -- --server_threshold 5 -- --# Network threads: Do not set too high (~40). Each threads make a network module check. -- --network_threads 4 -- --# icmp_checks x : defines number of pings for each icmp_proc module type. at least one of --# that ping should be 1 to report 1 -- --icmp_checks 1 -- --# tcp specific options : --# tcp_checks: number of tcp retries if first attempt fails. --# tcp_timeout: specific timeout for tcp connections -- --tcp_checks 1 --tcp_timeout 10 -- --# snmp specific options : --# snmp_checks: number of snmp request retries if first attempt fails. --# snmp_timeout: specific timeout for snmp request. -- --snmp_checks 1 --snmp_timeout 4 -- --# snmp_proc_deadresponse 1 (default): Return DOWN if cannot contact --# or receive NULL from a SNMP PROC module. -- --snmp_proc_deadresponse 1 -- --# plugin_threads: Specify number of plugin server threads for processing plugin calls -- --plugin_threads 1 -- --# plugin_timeout: Specify number of seconds calling plugin exec waiting for response --# after this time, call is aborted and result is "unknown". -- --plugin_timeout 12 -- --# wmi_timeout : specific timeout for wmi request. -- --wmi_timeout 7 -- --# wmi_threads: Specify number of WMI server threads for processing WMI remote calls -- --wmi_threads 1 -- --# recon_threads. Each thread will scan a different scantask. -- --recon_threads 1 -- --# dataserver_threads: Number of threads for data server (XML processing threads) -- --dataserver_threads 1 -- --# mta_address: External Mailer (MTA) IP Address to be used by Pandora FMS internal email capabilities -- --mta_address localhost -- --# mta_port, this is the mail server port (default 25) -- --#mta_port 25 -- --# mta_user MTA User (if needed for auth, FQD or simple user, depending on your server) -- --#mta_user myuser@mydomain.com -- --# mta_pass MTA Pass (if needed for auth) -- --#mta_pass mypassword -- --# mta_auth MTA Auth system (if needed, it supports LOGIN, PLAIN, CRAM-MD5, DIGEST-MD) -- --#mta_auth LOGIN -- --# mta_from Email address that sends the mail, by default is pandora@localhost --# probably you need to change it to avoid problems with your antispam -- --#mta_from Pandora FMS <pandora@mydomain.com> -- --# Set 1 if want eMail deliver alert in separate mail (default). --# Set 0 if want eMail deliver shared mail by all destination. --mail_in_separate 1 -- -- --# xprobe2: Optional package to detect OS types using advanced TCP/IP --# fingerprinting tecniques, much more accurates than stadard nmap. --# If not provided, nmap is used insted xprobe2 -- --xprobe2 /usr/local/bin/xprobe2 -- --# nmap: If provided, is used to detect OS type with recon server using --# advanded OS fingerprint technique. Xprobe2 gives more accurate results --# Nmap is also used to do TCP port scanning in detected host. -- --nmap /usr/local/bin/nmap -- --# snmpget: Needed to do SNMP checks. By default is on /usr/local/bin/snmpget -- --snmpget /usr/local/bin/snmpget -- --# snmp_trapd: Needed by Pandora FMS SNMP console. -- --snmp_trapd /usr/local/sbin/snmptrapd -- --# Location of the braa binary needed by the Enterprise SNMP Server (/usr/local/bin/braa by default) (PANDORA FMS ENTERPRISE ONLY). -- --braa /usr/local/bin/braa -- --# Number of retries before braa hands a module over to the Network Server (PANDORA FMS ENTERPRISE ONLY). -- --braa_retries 3 -- --# Default group id for new agents created with Pandora FMS Data Server -- --autocreate_group 2 -- --# Set to 1 if want to autocreate agents with Pandora FMS Data Server, --# set to 0 to disable (for security purposes, for example). -- --autocreate 1 -- --# max_log_size: Specify max size of Pandora FMS server log file (1MB by default). If --# log file grows above this limit, is renamed to "pandora_server.log.old". -- --max_log_size 65536 -- --# max_queue_files (500 by default) --# When server have more than max_queue_files in incoming directory, skips the read --# the directory to avoid filesystem overhead. -- --max_queue_files 500 -- --# Use the XML file last modification time as timestamp. --# use_xml_timestamp 1 -- --# Pandora FMS will autorestart itself each XXX seconds, use this if you experience problems with --# shutting down threads, or other stability problems. -- --# auto_restart 86400 -- --# Pandora FMS will restart after restart_delay seconds on critical errors. -- --restart 1 --restart_delay 60 -- --# More information about GIS Setup in /usr/share/pandora_server/util/gis.README --# Flag to activate GIS (positional information for agents and maps) --# by default it is desactivated -- --#activate_gis 0 -- --# Radius of error in meters to consider two gis locations as the same location. -- --#location_error 50 -- --# Recon reverse geolocation mode [disabled, sql, file] --# disabled The recon task doesn't try to geolocate the ip discovered. --# sql The recon task trys to query the SQL database to geolocate the --# ip discovered --# file The recon task trys to find the geolocation information of the --# ip discovered in the file indicated in the --# recon_reverse_geolocation_file parameter -- --# recon_reverse_geolocation_mode disabled -- --# Recon reverse geolocation file. This is the database with the reverse --# geolocation information using MaxMind GPL GeoLiteCity.dat format). -- --#recon_reverse_geolocation_file /usr/local/share/GeoIP/GeoIPCity.dat -- --# Radius (in meters) of the circle in where the agents will be place randomly --# when finded by a recon task. Center of the circle is guessed --# by geolocating the IP. --#recon_location_scatter_radius 1000 -- --# Pandora Server self-monitoring (embedded agent) (by default enabled) -- --self_monitoring 1 -- --# Update parent from the agent xml -- --#update_parent 1 --# --# --# This enable realtime reverse geocoding using Google Maps public api. --# This requires internet access, and could have performance penalties processing GIS --# information due the connetion needed to resolve all GIS input. --# NOTE: If you dont pay the service to google, they will ban your IP in a few days. -- --# google_maps_description 1 -- --# This enable realtime reverse geocoding using Openstreet Maps public api. --# This requires internet access, and could have performance penalties processing GIS --# information due the connetion needed to resolve all GIS input. --# You can alter the code to use a local (your own) openstreet maps server. -- --# openstreetmaps_description 1 -- --# Enable (1) or disable (0) Pandora FMS Event Web Server (PANDORA FMS ENTERPRISE ONLY). -- --webserver 1 -- --# Number of threads for the Web Server (PANDORA FMS ENTERPRISE ONLY). -- --web_threads 1 -- --# Enable (1) or disable (0) Pandora FMS Inventory Server (PANDORA FMS ENTERPRISE ONLY). -- --inventoryserver 1 -- --# Number of threads for the Web Server (PANDORA FMS ENTERPRISE ONLY). -- --inventory_threads 1 -- --# Enable (1) or disable (0) Pandora FMS Export Server (PANDORA FMS ENTERPRISE ONLY). -- --exportserver 0 -- --# Number of threads for the Export Server (PANDORA FMS ENTERPRISE ONLY). -- --export_threads 1 -- --# Enable (1) or disable (0) Pandora FMS Event Server (PANDORA FMS ENTERPRISE ONLY). -- --eventserver 0 -- --# Event Server event window in seconds (3600 by default) (PANDORA FMS ENTERPRISE ONLY). -- --event_window 3600 -- --# Enable (1) or disable (0) Pandora FMS Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY). --# You need nmap 5.20 or higher in order to use this ! -- --icmpserver 1 -- --# Number of threads for the Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY). -- --icmp_threads 1 -- --# Enable (1) or disable (0) Pandora FMS Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY). --# Check braa tool is running and operative. -- --snmpserver 1 -- --# Number of threads for the Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY). -- --snmp_threads 1 -- --# Block size for block producer/consumer servers, that is, the number of modules --# per block (20 by default) (PANDORA FMS ENTERPRISE ONLY). -- --block_size 20 -- --# Path to the netflow daemon nfcapd. -- --netflow_daemon /usr/local/bin/nfcapd -- --# If set to 1, process XML data files in a stack instead of a queue. 0 by default. --# WARNING: Incremental modules will not work properly if dataserver_lifo is set to 1!!! -- --dataserver_lifo 0 -- --# If set to 1, the policy manager is enabled and the server is listening the policy queue. --# 0 by default (PANDORA FMS ENTERPRISE ONLY) -- --policy_manager 1 -- --# If set to 1, the event replicate process is enabled. 0 by default. (PANDORA FMS ENTERPRISE ONLY) --# WARNING: This process doesn't do anything if is not properly configured from the console setup -- --event_replication 0 -- --# If set to 1, new events validate older event for the same module. This will --# affect the performance of the server. This was the "normal behaviour" on previous (4.x) versions. --# disable only if you really know what you are doing !!. -- --event_auto_validation 1 -- --# If defined, events generated by Pandora FMS will be written to the specified text file. --#event_file /var/log/pandora/pandora_events.txt -- --# Set the maximum number of traps that will be processed from a single source in a --# configured time interval. --snmp_storm_protection 25 -- --# Time interval for snmp_storm protection (in seconds). --snmp_storm_timeout 10 -- --# Default texts for some events. The macros _module_ and _data_ are supported. --#text_going_down_normal Module '_module_' is going to NORMAL (_data_) --#text_going_up_critical Module '_module_' is going to CRITICAL (_data_) --#text_going_up_warning Module '_module_' is going to WARNING (_data_) --#text_going_down_warning Module '_module_' is going to WARNING (_data_) --#text_going_unknown Module '_module_' is going to UNKNOWN -- --# Events older that the specified time (in seconds) will be auto-validated. Set to 0 to disable this feature. --event_expiry_time 0 -- --# Only events more recent than the specified time window (in seconds) will be auto-validated. This value must --# be greater than event_expiry_time. --#event_expiry_window 86400 -Index: util/trap_rate.sh -=================================================================== ---- util/trap_rate.sh (revision 0) -+++ util/trap_rate.sh (revision 10417) -@@ -0,0 +1,49 @@ -+#!/bin/bash -+# Calculate the rate of SNMP traps received by snmptrapd. -+TEMP_FILE="/tmp/trap_rate.tmp" -+COUNT="100" -+ -+# Parse command line arguments -+if [ "$1" == "" ]; then -+ echo "Usage: $0 <path to pandora_server.conf> [trap count]" -+ exit 1 -+fi -+ -+if [ "$2" != "" ]; then -+ COUNT="$2" -+fi -+ -+# Read the SNMP log file and generate the temporary file -+SNMP_LOG=`grep snmp_logfile $1 | cut -d' ' -f2` -+if [ ! -f "$SNMP_LOG" ]; then -+ echo "SNMP log file $SNMP_LOG does not exists or is not readable." -+ exit 1 -+fi -+grep "SNMPv" "$SNMP_LOG" | tail -$COUNT | cut -d']' -f 3 | cut -d'[' -f 1 > "$TEMP_FILE" -+ -+# Get the newest trap -+START=`head -1 "$TEMP_FILE"` -+if [ "$START" == "" ]; then -+ echo "START: 0 END: 0 TRAPS RECEIVED: 0 RATE: 0 traps/s" -+ exit 0 -+fi -+ -+# Get the oldest trap -+END=`tail -1 "$TEMP_FILE"` -+if [ "$END" == "" ]; then -+ echo "START: 0 END: 0 TRAPS RECEIVED: 0 RATE: 0 traps/s" -+ exit 0 -+fi -+ -+# Get the trap count -+COUNT=`cat "$SNMP_LOG" | wc -l` -+ -+# Calculate the trap rate -+START_UTIME=`date +"%s" -d"$START"` -+END_UTIME=`date +"%s" -d"$END"` -+ELAPSED=$(($END_UTIME - $START_UTIME)) -+RATE=`bc -l <<< "$COUNT / $ELAPSED"` -+ -+echo "START: $START END: $END TRAPS RECEIVED: $COUNT RATE: $RATE traps/s" -+rm -f "$TEMP_FILE" -+ - -Property changes on: util/trap_rate.sh -___________________________________________________________________ -Added: svn:executable -## -0,0 +1 ## -+* -\ No newline at end of property -Index: util/plugin/snmp_remote.pl -=================================================================== ---- util/plugin/snmp_remote.pl (revision 10314) -+++ util/plugin/snmp_remote.pl (working copy) -@@ -1,5 +1,5 @@ - #!/usr/bin/perl --#--------------------------------------------------------------------------- -+#----------------------------------------------------------------------- - # SNMP remote plugin - # Depending on the configuration returns the result of these modules: - # - % Memory Use -@@ -11,7 +11,7 @@ - # Copyright (C) 2013 mario.pulido@artica.es - # - # License: GPLv2+ --#--------------------------------------------------------------------------- -+#----------------------------------------------------------------------- - # This program is free software; you can redistribute it and/or - # modify it under the terms of the GNU General Public License - # as published by the Free Software Foundation; either version 2 -@@ -23,111 +23,249 @@ - # GNU General Public License for more details. - # - # GPL License: http://www.gnu.org/licenses/gpl.txt --#--------------------------------------------------------------------------- -+#----------------------------------------------------------------------- - - use strict; - use Getopt::Std; - - my $VERSION = 'v1r1'; - --#----------------------------------------------------------------------------- -+#----------------------------------------------------------------------- - # HELP --#----------------------------------------------------------------------------- -+#----------------------------------------------------------------------- - --if ($#ARGV == -1 ) --{ -- print "-H, --host=STRING\n"; -- print "\tHost IP\n"; -- print "-c, --community=STRING\n"; -- print "\tSnmp Community\n"; -- print "-m, --module=STRING\n"; -- print "\tDefine module (memuse|diskuse|process|cpuload) \n"; -- print "-d, --disk=STRING\n"; -- print "\tDefine disk name (C:, D: in Windows) or mount point (Linux)(only in diskuse module)\n"; -- print "-p, --process=STRING\n"; -- print "\tProcess or service name (only in process module)\n"; -- print "\n"; -- print "Example of use \n"; -- print "perl snmp_remoto.pl -H host -c community -m (memuse|diskuse|process|cpuload) [-p process -d disk] \n"; -- print "Version=$VERSION"; -- exit; -+if ($#ARGV == -1 ) { -+ print "-H, --host=STRING\n"; -+ print "\tHost IP\n"; -+ -+ print "-c, --community=STRING\n"; -+ print "\tSnmp Community\n"; -+ -+ print "-m, --module=STRING\n"; -+ print "\tDefine module (memuse|diskuse|process|cpuload) \n"; -+ -+ print "-d, --disk=STRING\n"; -+ print "\tDefine disk name (C:, D: in Windows) or mount point (Linux)(only in diskuse module)\n"; -+ -+ print "-p, --process=STRING\n"; -+ print "\tProcess or service name (only in process module)\n"; -+ -+ print "-v, --version=NUMBER\n"; -+ print "\tVersion of protocol\n"; -+ -+ print "-u, --user=STRING\n"; -+ print "\tAuth user\n"; -+ -+ print "-A, --auth=STRING\n"; -+ print "\tAuth pass\n"; -+ -+ print "-l, --level=STRING\n"; -+ print "\tSecurity level\n"; -+ -+ print "-a STRING\n"; -+ print "\tAuth method\n"; -+ -+ print "-x STRING\n"; -+ print "\tPrivacy method\n"; -+ -+ print "-X STRING\n"; -+ print "\tPrivacy pass\n"; -+ -+ print "\n"; -+ print "Example of use \n"; -+ print "perl snmp_remoto.pl -H host -c community -m (memuse|diskuse|process|cpuload) [-p process -d disk] \n"; -+ print "Version=$VERSION"; -+ exit; - } - --my ( $host, $community, $module, $disk, $process ) = &options; -+my ($host, -+ $community, -+ $module, -+ $disk, -+ $process, -+ $version, -+ $user, -+ $pass, -+ $auth_method, -+ $privacy_method, -+ $privacy_pass ) = &options; - --#------------------------------------------------------------------------------------- -+#----------------------------------------------------------------------- - # OPTIONS --#------------------------------------------------------------------------------------- -- -+#----------------------------------------------------------------------- - sub options { -- -- # Get and check args -- my %opts; -- getopt( 'Hcmdp', \%opts ); -- -- $opts{"H"} = 0 unless ( exists( $opts{"H"} ) ); -- $opts{"c"} = 0 unless ( exists( $opts{"c"} ) ); -- $opts{"m"} = 0 unless ( exists( $opts{"m"} ) ); -- $opts{"d"} = "/" unless ( exists( $opts{"d"} ) ); -- $opts{"p"} = 0 unless ( exists( $opts{"p"} ) ); -- return ( $opts{"H"}, $opts{"c"}, $opts{"m"}, $opts{"d"}, $opts {"p"}); -+ -+ # Get and check args -+ my %opts; -+ getopt( 'HcmdpvuAlaxX', \%opts ); -+ -+ #~ ' -u ' . $snmp3_auth_user . -+ #~ ' -A ' . $snmp3_auth_pass . -+ #~ ' -l ' . $snmp3_security_level . -+ #~ ' -a ' . $snmp3_auth_method . -+ #~ ' -x ' . $snmp3_privacy_method . -+ #~ ' -X' $snmp3_privacy_pass; -+ -+ $opts{"H"} = 0 unless ( exists( $opts{"H"} ) ); -+ $opts{"c"} = 0 unless ( exists( $opts{"c"} ) ); -+ $opts{"m"} = 0 unless ( exists( $opts{"m"} ) ); -+ $opts{"d"} = "/" unless ( exists( $opts{"d"} ) ); -+ $opts{"p"} = 0 unless ( exists( $opts{"p"} ) ); -+ $opts{"p"} = 0 unless ( exists( $opts{"p"} ) ); -+ $opts{"v"} = 2 unless ( exists( $opts{"v"} ) ); -+ $opts{"u"} = "" unless ( exists( $opts{"u"} ) ); -+ $opts{"A"} = "" unless ( exists( $opts{"A"} ) ); -+ $opts{"l"} = "noAuthNoPriv" unless ( exists( $opts{"l"} ) ); -+ $opts{"a"} = "" unless ( exists( $opts{"a"} ) ); -+ $opts{"x"} = "" unless ( exists( $opts{"x"} ) ); -+ $opts{"X"} = "" unless ( exists( $opts{"X"} ) ); -+ -+ return ( $opts{"H"}, -+ $opts{"c"}, -+ $opts{"m"}, -+ $opts{"d"}, -+ $opts {"p"}, -+ $opts{"v"}, -+ $opts{"u"}, -+ $opts{"A"}, -+ $opts{"l"}, -+ $opts{"a"}, -+ $opts{"x"}, -+ $opts{"X"}); - } - --#-------------------------------------------------------------------------------------------------- -+#----------------------------------------------------------------------- - # Module % Memory use --#-------------------------------------------------------------------------------------------------- -+#----------------------------------------------------------------------- -+if ($module eq "memuse") { -+ my $memuse = 0; -+ my $command_line_parammeters; -+ -+ if ($version == 3) { -+ if ($auth_method eq 'authNoPriv') { -+ $command_line_parammeters = "-v 3 -u $user -a $privacy_method -A $pass -l $auth_method $host"; -+ } -+ elsif ($auth_method eq "noAuthNoPriv") { -+ $command_line_parammeters = "-v 3 -u $user -l $auth_method $host"; -+ } -+ else { -+ $command_line_parammeters = "-v 3 -u $user -a $privacy_method -A $pass -l $auth_method -x $privacy_method -X $privacy_pass $host"; -+ } -+ } -+ else { -+ $command_line_parammeters = "-v 1 -c $community $host"; -+ } -+ -+ my $memid = `snmpwalk -On $command_line_parammeters .1.3.6.1.2.1.25.2.3.1.3 | grep Physical | head -1 | gawk '{print \$1}' | gawk -F "." '{print \$13}' | tr -d "\r"`; -+ my $memtot = `snmpget $command_line_parammeters .1.3.6.1.2.1.25.2.3.1.5.$memid ` ; -+ my $memtot2 = `echo "$memtot" | gawk '{print \$4}'`; -+ my $memfree = `snmpget $command_line_parammeters .1.3.6.1.2.1.25.2.3.1.6.$memid` ; -+ my $memfree2 = `echo "$memfree" | gawk '{print \$4}'`; -+ -+ $memuse = ($memfree2) * 100 / $memtot2; -+ -+ printf("%.2f", $memuse); -+} - --if ($module eq "memuse"){ -- my $memid = `snmpwalk -On -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.3 | grep Physical | head -1 | gawk '{print \$1}' | gawk -F "." '{print \$13}' | tr -d "\r"`; -- my $memtot = `snmpget -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.5.$memid ` ; -- my $memtot2 = `echo "$memtot" | gawk '{print \$4}'`; -- my $memfree = `snmpget -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.6.$memid` ; -- my $memfree2 = `echo "$memfree" | gawk '{print \$4}'`; -- my $memuse = ($memfree2)*100/$memtot2; -- printf("%.2f", $memuse); -- } --#-------------------------------------------------------------------------------------------------- -+#----------------------------------------------------------------------- - # Module % Disk use --#-------------------------------------------------------------------------------------------------- --if ($module eq "diskuse"){ -- my $diskid = `snmpwalk -On -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.3 | grep "$disk" | head -1 | gawk '{print \$1}' | gawk -F "." '{print \$13}' | tr -d "\r"`; -- my $disktot = `snmpget -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.5.$diskid ` ; -- my $disktot2 = `echo "$disktot" | gawk '{print \$4}'`; -- -- if($disktot2 == 0) { -- print 0; -- } -- else { -- my $diskfree = `snmpget -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.6.$diskid` ; -- my $diskfree2 = `echo "$diskfree" | gawk '{print \$4}'`; -- my $diskuse = ($disktot2 - $diskfree2)*100/$disktot2; -- printf("%.2f", $diskuse); -- } -- } -- --#-------------------------------------------------------------------------------------------------- -+#----------------------------------------------------------------------- -+if ($module eq "diskuse") { -+ my $diskuse = 0; -+ my $command_line_parammeters; -+ -+ if ($version == 3) { -+ if ($auth_method eq 'authNoPriv') { -+ $command_line_parammeters = "-v 3 -u $user -a $privacy_method -A $pass -l $auth_method $host"; -+ } -+ elsif ($auth_method eq "noAuthNoPriv") { -+ $command_line_parammeters = "-v 3 -u $user -l $auth_method $host"; -+ } -+ else { -+ $command_line_parammeters = "-v 3 -u $user -a $privacy_method -A $pass -l $auth_method -x $privacy_method -X $privacy_pass $host"; -+ } -+ } -+ else { -+ $command_line_parammeters = "-v 1 -c $community $host"; -+ } -+ -+ my $diskid = `snmpwalk -On $command_line_parammeters .1.3.6.1.2.1.25.2.3.1.3 | grep "$disk" | head -1 | gawk '{print \$1}' | gawk -F "." '{print \$13}' | tr -d "\r"`; -+ my $disktot = `snmpget $command_line_parammeters .1.3.6.1.2.1.25.2.3.1.5.$diskid ` ; -+ my $disktot2 = `echo "$disktot" | gawk '{print \$4}'`; -+ -+ if ($disktot2 == 0) { -+ $diskuse = 0; -+ } -+ else { -+ my $diskfree = `snmpget $command_line_parammeters .1.3.6.1.2.1.25.2.3.1.6.$diskid` ; -+ my $diskfree2 = `echo "$diskfree" | gawk '{print \$4}'`; -+ -+ $diskuse = ($disktot2 - $diskfree2) * 100 / $disktot2; -+ } -+ -+ printf("%.2f", $diskuse); -+} -+ -+#----------------------------------------------------------------------- - # Module Process Status --#-------------------------------------------------------------------------------------------------- -- --if ($module eq "process"){ -- my $status = `snmpwalk -v 2c -c $community $host 1.3.6.1.2.1.25.4.2.1.2 | grep "$process" | head -1 | wc -l`; -- print $status; -- } --#-------------------------------------------------------------------------------------------------- -+#----------------------------------------------------------------------- -+if ($module eq "process") { -+ my $status = 0; -+ my $command_line_parammeters; -+ -+ if ($version == 3) { -+ if ($auth_method eq 'authNoPriv') { -+ $command_line_parammeters = "-v 3 -u $user -a $privacy_method -A $pass -l $auth_method $host"; -+ } -+ elsif ($auth_method eq "noAuthNoPriv") { -+ $command_line_parammeters = "-v 3 -u $user -l $auth_method $host"; -+ } -+ else { -+ $command_line_parammeters = "-v 3 -u $user -a $privacy_method -A $pass -l $auth_method -x $privacy_method -X $privacy_pass $host"; -+ } -+ } -+ else { -+ $command_line_parammeters = "-v 2c -c $community $host"; -+ } -+ -+ $status = `snmpwalk $command_line_parammeters 1.3.6.1.2.1.25.4.2.1.2 | grep "$process" | head -1 | wc -l`; -+ -+ print $status; -+} -+ -+#----------------------------------------------------------------------- - # Module % Cpu Load --#-------------------------------------------------------------------------------------------------- -+#----------------------------------------------------------------------- -+if ($module eq "cpuload") { -+ my $cputotal = 0; -+ my $command_line_parammeters; -+ -+ if ($version == 3) { -+ if ($auth_method eq 'authNoPriv') { -+ $command_line_parammeters = "-v 3 -u $user -a $privacy_method -A $pass -l $auth_method $host"; -+ } -+ elsif ($auth_method eq "noAuthNoPriv") { -+ $command_line_parammeters = "-v 3 -u $user -l $auth_method $host"; -+ } -+ else { -+ $command_line_parammeters = "-v 3 -u $user -a $privacy_method -A $pass -l $auth_method -x $privacy_method -X $privacy_pass $host"; -+ } -+ } -+ else { -+ $command_line_parammeters = "-v 1 -c $community $host"; -+ } -+ -+ my $cpuload = `snmpwalk $command_line_parammeters .1.3.6.1.2.1.25.3.3.1.2 | gawk '{print \$4}' `; -+ my @cpuload = split(/\n/, $cpuload); -+ my $sum; -+ my $counter = 0; -+ foreach my $val(@cpuload) { -+ $sum = $sum + $val; -+ $counter++; -+ } -+ -+ $cputotal = $sum/$counter; -+ -+ print $cputotal; -+} - --if ($module eq "cpuload"){ -- my $cpuload = `snmpwalk -v 1 -c $community $host .1.3.6.1.2.1.25.3.3.1.2 | gawk '{print \$4}' `; -- my @cpuload = split(/\n/, $cpuload); -- my $sum; -- my $counter = 0; -- foreach my $val(@cpuload){ -- $sum = $sum+$val; -- $counter ++; -- } -- my $cputotal = $sum/$counter; -- print $cputotal; -- -- } -- -Index: util/pandora_db.pl -=================================================================== ---- util/pandora_db.pl (revision 10314) -+++ util/pandora_db.pl (working copy) -@@ -547,7 +547,9 @@ - foreach my $param ('dbuser', 'dbpass', 'dbname', 'dbhost', 'log_file') { - die ("[ERROR] Bad config values. Make sure " . $conf->{'_pandora_path'} . " is a valid config file.\n\n") unless defined ($conf->{$param}); - } -+ $conf->{'dbengine'} = 'mysql' unless defined ($conf->{'dbengine'}); - $conf->{'dbport'} = '3306' unless defined ($conf->{'dbport'}); -+ $conf->{'claim_back_snmp_modules'} = '1' unless defined ($conf->{'claim_back_snmp_modules'}); - - # Read additional tokens from the DB - my $dbh = db_connect ('mysql', $conf->{'dbname'}, $conf->{'dbhost'}, $conf->{'dbport'}, $conf->{'dbuser'}, $conf->{'dbpass'}); -Index: util/pandora_revent_create.pl -=================================================================== ---- util/pandora_revent_create.pl (revision 10314) -+++ util/pandora_revent_create.pl (working copy) -@@ -232,9 +232,9 @@ - $i++; - } - -- $data_event = $event_name.",".$id_group.",".$id_agent.",".$status.",".$id_user.",".$event_type.",".$criticity.",".$id_agent_module.",".$id_alert_am.",".$critical_instructions.",".$warning_instructions.",".$unknown_instructions.",".$user_comment.",".$owner_user.",".$source.",".$tags; -+ $data_event = $event_name."|".$id_group."|".$id_agent."|".$status."|".$id_user."|".$event_type."|".$criticity."|".$id_agent_module."|".$id_alert_am."|".$critical_instructions."|".$warning_instructions."|".$unknown_instructions."|".$user_comment."|".$owner_user."|".$source."|".$tags; - -- $call_api = $api_path.'?op=set&op2=create_event&id='.$event_name.'&other='.$data_event.'&other_mode=url_encode_separator_,&apipass='.$api_pass.'&user='.$db_user.'&pass='.$db_pass; -+ $call_api = $api_path.'?op=set&op2=create_event&id='.$event_name.'&other='.$data_event.'&other_mode=url_encode_separator_|&apipass='.$api_pass.'&user='.$db_user.'&pass='.$db_pass; - - #DEBUG TRACE# - -Index: util/pandora_manage.pl -=================================================================== ---- util/pandora_manage.pl (revision 10314) -+++ util/pandora_manage.pl (working copy) -@@ -29,6 +29,10 @@ - use PandoraFMS::Core; - use PandoraFMS::Config; - -+# To handle 'UTF-8' encoded string in command like arguments (similar to "-CA" option for perl) -+use Encode::Locale; -+Encode::Locale::decode_argv; -+ - # version: define current version - my $version = "5.1 PS140630"; - -@@ -128,6 +132,8 @@ - help_screen_line('--create_special_day', "<special_day> <same_day> <description> <group>", 'Create special day'); - help_screen_line('--delete_special_day', '<special_day>', 'Delete special day'); - help_screen_line('--update_special_day', "<special_day> <field_to_change> <new_value>", 'Update a field of a special day'); -+ help_screen_line('--create_data_module_from_local_component', '<agent_name> <component_name>', "Create a new data \n\t module from a local component"); -+ help_screen_line('--create_local_component', "<component_name> <data> [<description> <id_os> <os_version> \n\t <id_network_component_group> <type> <min> <max> <module_interval> <id_module_group> <history_data> <min_warning> \n\t <max_warning> <str_warning> <min_critical> <max_critical>\n\t <str_critical> <min_ff_event> <post_process> <unit>\n\t <wizard_level> <critical_instructions>\n\t <warning_instructions> <unknown_instructions> <critical_inverse>\n\t <warning_inverse> <id_category> <disabled_types_event>\n\t <tags> <min_ff_event_normal> <min_ff_event_warning>\n\t <min_ff_event_critical> <each_ff> <ff_timeout>]", 'Create local component'); - - print "\nUSERS:\n\n" unless $param ne ''; - help_screen_line('--create_user', '<user_name> <user_password> <is_admin> [<comments>]', 'Create user'); -@@ -3885,6 +3891,14 @@ - param_check($ltotal, 1); - cli_delete_special_day(); - } -+ elsif ($param eq '--create_data_module_from_local_component') { -+ param_check($ltotal, 2); -+ cli_create_data_module_from_local_component(); -+ } -+ elsif ($param eq '--create_local_component') { -+ param_check($ltotal, 35, 33); -+ cli_create_local_component(); -+ } - else { - print_log "[ERROR] Invalid option '$param'.\n\n"; - $param = ''; -@@ -3980,3 +3994,110 @@ - pandora_delete_graph_source($id_graph, $dbh, $module); - } - } -+ -+############################################################################## -+# Return local component id given the name -+############################################################################## -+ -+sub pandora_get_local_component_id($$) { -+ my ($dbh,$name) = @_; -+ -+ my $lc_id = get_db_value($dbh, 'SELECT id FROM tlocal_component WHERE name = ?',safe_input($name)); -+ -+ return defined ($lc_id) ? $lc_id : -1; -+} -+ -+############################################################################## -+# Create data module from local component. -+# Related option: --create_data_module_from_local_component -+############################################################################## -+ -+sub cli_create_data_module_from_local_component() { -+ my ($agent_name, $component_name) = @ARGV[2..3]; -+ -+ my $agent_id = get_agent_id($dbh,$agent_name); -+ exist_check($agent_id,'agent',$agent_name); -+ -+ my $lc_id = pandora_get_local_component_id($dbh, $component_name); -+ exist_check($lc_id,'local component',$component_name); -+ -+ my $module_exists = get_agent_module_id($dbh, $component_name, $agent_id); -+ non_exist_check($module_exists, 'module name', $component_name); -+ -+ # Get local component data -+ my $component = get_db_single_row ($dbh, 'SELECT * FROM tlocal_component WHERE id = ?', $lc_id); -+ -+ #~ pandora_create_module_from_local_component ($conf, $component, $agent_id, $dbh); -+ enterprise_hook('pandora_create_module_from_local_component',[$conf, $component, $agent_id, $dbh]); -+} -+ -+############################################################################## -+# Create local component. -+# Related option: --create_local_component -+############################################################################## -+ -+sub cli_create_local_component() { -+ -+ my ($component_name, $data, $description, $id_os, $os_version, $id_network_component_group, $type, -+ $min,$max,$module_interval, $id_module_group, $history_data, $min_warning, $max_warning, $str_warning, -+ $min_critical, $max_critical, $str_critical, $min_ff_event, $post_process, $unit, $wizard_level, -+ $critical_instructions, $warning_instructions, $unknown_instructions, $critical_inverse, $warning_inverse, -+ $id_category, $tags, $disabled_types_event, $min_ff_event_normal, $min_ff_event_warning, $min_ff_event_critical, -+ $each_ff, $ff_timeout) = @ARGV[2..37]; -+ -+ my %parameters; -+ -+ $parameters{'name'} = safe_input($component_name); -+ my $data_aux = safe_input($data); -+ $data_aux =~ s/\n/
/g; -+ $parameters{'data'} = $data_aux; -+ $parameters{'description'} = safe_input($description) unless !defined ($description); -+ $parameters{'id_os'} = $id_os unless !defined ($id_os); -+ $parameters{'type'} = $type unless !defined ($type); -+ if (defined $id_network_component_group) { -+ $parameters{'id_network_component_group'} = $id_network_component_group; -+ } else { -+ $parameters{'id_network_component_group'} = 1; -+ } -+ $parameters{'max'} = $max unless !defined ($max); -+ $parameters{'min'} = $min unless !defined ($min); -+ $parameters{'module_interval'} = $module_interval unless !defined ($module_interval); -+ $parameters{'id_module_group'} = $id_module_group unless !defined ($id_module_group); -+ $parameters{'history_data'} = safe_input($history_data) unless !defined ($history_data); -+ $parameters{'min_warning'} = $min_warning unless !defined ($min_warning); -+ $parameters{'max_warning'} = $max_warning unless !defined ($max_warning); -+ $parameters{'str_warning'} = $str_warning unless !defined ($str_warning); -+ $parameters{'min_critical'} = $min_critical unless !defined ($min_critical); -+ $parameters{'max_critical'} = $max_critical unless !defined ($max_critical); -+ $parameters{'str_critical'} = $str_critical unless !defined ($str_critical); -+ $parameters{'min_ff_event'} = $min_ff_event unless !defined ($min_ff_event); -+ $parameters{'post_process'} = $post_process unless !defined ($post_process); -+ $parameters{'unit'} = $unit unless !defined ($unit); -+ $parameters{'wizard_level'} = $wizard_level unless !defined ($wizard_level); -+ $parameters{'critical_instructions'} = safe_input($critical_instructions) unless !defined ($critical_instructions); -+ $parameters{'warning_instructions'} = safe_input($warning_instructions) unless !defined ($warning_instructions); -+ $parameters{'unknown_instructions'} = safe_input($unknown_instructions) unless !defined ($unknown_instructions); -+ $parameters{'critical_inverse'} = $critical_inverse unless !defined ($critical_inverse); -+ $parameters{'warning_inverse'} = $warning_inverse unless !defined ($warning_inverse); -+ $parameters{'id_category'} = $id_category unless !defined ($id_category); -+ $parameters{'tags'} = safe_input($tags) unless !defined ($tags); -+ -+ my $disabled_types_event_hash = {}; -+ if ($disabled_types_event) { -+ $disabled_types_event_hash->{'going_unknown'} = 0; -+ } -+ else { -+ $disabled_types_event_hash->{'going_unknown'} = 1; -+ } -+ my $disabled_types_event_json = encode_json($disabled_types_event_hash); -+ $parameters{'disabled_types_event'} = $disabled_types_event_json unless !defined ($disabled_types_event); -+ -+ $parameters{'min_ff_event_normal'} = $min_ff_event_normal unless !defined ($min_ff_event_normal); -+ $parameters{'min_ff_event_warning'} = $min_ff_event_warning unless !defined ($min_ff_event_warning); -+ $parameters{'min_ff_event_critical'} = $min_ff_event_critical unless !defined ($min_ff_event_critical); -+ $parameters{'each_ff'} = $each_ff unless !defined ($each_ff); -+ $parameters{'ff_timeout'} = $ff_timeout unless !defined ($ff_timeout); -+ -+ my $component_id = enterprise_hook('pandora_create_local_component_from_hash',[$conf, \%parameters, $dbh]); -+ -+} -Index: util/recon_scripts/wmi-recon.pl -=================================================================== ---- util/recon_scripts/wmi-recon.pl (revision 10314) -+++ util/recon_scripts/wmi-recon.pl (working copy) -@@ -27,8 +27,9 @@ - 'daemon' => 0, - 'PID' => '', - 'pandora_path' => '/usr/local/etc/pandora/pandora_server.conf', -- 'ping_timeout' => 2, -- 'ping_retries' => 1, -+ 'networktimeout' => 2, -+ 'icmp_checks' => 1, -+ 'nmap_timing_template' => 2, - 'wmi_client' => '/usr/local/bin/wmic'); - } else { - %CONF = ('quiet' => 0, -@@ -36,8 +37,9 @@ - 'daemon' => 0, - 'PID' => '', - 'pandora_path' => '/etc/pandora/pandora_server.conf', -- 'ping_timeout' => 2, -- 'ping_retries' => 1, -+ 'networktimeout' => 2, -+ 'icmp_checks' => 1, -+ 'nmap_timing_template' => 2, - 'wmi_client' => '/usr/bin/wmic'); - } - -@@ -106,10 +108,10 @@ - my ($task, $function) = @_; - - # Timeout in ms. -- my $timeout = $CONF{'ping_timeout'} * 1000; -+ my $timeout = $CONF{'networktimeout'} * 1000; - - # Added -PE to make nmap behave like ping and avoid confusion if ICMP traffic is blocked. -- my $nmap_args = '-nsP -PE --max-retries ' . $CONF{'ping_retries'} . ' --host-timeout ' . $timeout; -+ my $nmap_args = '-nsP -PE --max-retries ' . $CONF{'icmp_checks'} . ' --host-timeout '.$timeout.' -T'.$CONF{'nmap_timing_template'}; - - # Scan the network. - my $np = new PandoraFMS::NmapParser; -Index: util/recon_scripts/snmp-recon.pl -=================================================================== ---- util/recon_scripts/snmp-recon.pl (revision 10314) -+++ util/recon_scripts/snmp-recon.pl (working copy) -@@ -35,8 +35,9 @@ - %CONF = ( - 'nmap' => '/usr/local/bin/nmap', - 'pandora_path' => '/usr/local/etc/pandora/pandora_server.conf', -- 'ping_retries' => 1, -- 'ping_timeout' => 2, -+ 'icmp_checks' => 1, -+ 'networktimeout' => 2, -+ 'nmap_timing_template' => 2, - 'PID' => '', - 'quiet' => 1, - ); -@@ -44,8 +45,9 @@ - %CONF = ( - 'nmap' => '/usr/bin/nmap', - 'pandora_path' => '/etc/pandora/pandora_server.conf', -- 'ping_retries' => 1, -- 'ping_timeout' => 2, -+ 'icmp_checks' => 1, -+ 'networktimeout' => 2, -+ 'nmap_timing_template' => 2, - 'PID' => '', - 'quiet' => 1, - ); -@@ -861,9 +863,11 @@ - return unless defined($agent); - - # Perform a traceroute. -+ my $timeout = $CONF{'networktimeout'}*1000; -+ my $nmap_args = '-nsP -PE --traceroute --max-retries '.$CONF{'icmp_checks'}.' --host-timeout '.$timeout.' -T'.$CONF{'nmap_timing_template'}; - my $np = new PandoraFMS::NmapParser; - eval { -- $np->parsescan($CONF{'nmap'}, '-nsP --traceroute', ($host)); -+ $np->parsescan($CONF{'nmap'}, $nmap_args, ($host)); - }; - return if ($@); - -@@ -930,10 +934,11 @@ - - # Populate ARP caches. - message("Populating ARP caches..."); --my $timeout = $CONF{'ping_timeout'} * 1000; # Convert the timeout from s to ms. -+my $timeout = $CONF{'networktimeout'} * 1000; # Convert the timeout from s to ms. -+my $nmap_args = '-nsP --send-ip --max-retries '.$CONF{'icmp_checks'}.' --host-timeout '.$timeout.' -T'.$CONF{'nmap_timing_template'}; - my $np = new PandoraFMS::NmapParser; - if ($#SUBNETS >= 0) { -- $np->parsescan($CONF{'nmap'}, '-nsP --send-ip --max-retries ' . $CONF{'ping_retries'} . ' --host-timeout ' . $timeout, @SUBNETS); -+ $np->parsescan($CONF{'nmap'}, $nmap_args, @SUBNETS); - } - - # Find routers. diff --git a/net-mgmt/pandorafms_server/pkg-plist b/net-mgmt/pandorafms_server/pkg-plist index 21043e2b151e..83adb4cfd3a8 100644 --- a/net-mgmt/pandorafms_server/pkg-plist +++ b/net-mgmt/pandorafms_server/pkg-plist @@ -43,6 +43,8 @@ man/man1/tentacle_server.1.gz %%DATADIR%%/util/esx_trap_manager.pl %%DATADIR%%/util/gis.README %%DATADIR%%/util/gpx2pandora_agent_data.pl +%%DATADIR%%/util/integria_rticket.pl +%%DATADIR%%/util/integrity_check %%DATADIR%%/util/n2p.README %%DATADIR%%/util/n2p.pl %%DATADIR%%/util/pandora2ast/GPL @@ -95,6 +97,7 @@ man/man1/tentacle_server.1.gz %%DATADIR%%/util/plugin/multicast.pl %%DATADIR%%/util/plugin/mysql_plugin.sh %%DATADIR%%/util/plugin/openvpn_pandoraplugin.pl +%%DATADIR%%/util/plugin/packet_loss.sh %%DATADIR%%/util/plugin/pandora_inventory_change.README %%DATADIR%%/util/plugin/pandora_inventory_change.pl %%DATADIR%%/util/plugin/pandora_loadgen.pl @@ -107,15 +110,8 @@ man/man1/tentacle_server.1.gz %%DATADIR%%/util/recon_scripts/ipmi-recon.pl %%DATADIR%%/util/recon_scripts/snmp-recon.pl %%DATADIR%%/util/recon_scripts/wmi-recon.pl +%%DATADIR%%/util/snmptrap_gen.sh %%DATADIR%%/util/tentacle_serverd %%DATADIR%%/util/trap_rate.sh %%DATADIR%%/util/udp_client.pl %%DATADIR%%/util/windows.README -@dirrm %%DATADIR%%/util/plugin/babel_plugin -@dirrm %%DATADIR%%/util/plugin/integria_plugin -@dirrm %%DATADIR%%/util/pandora2ast -@dirrmtry %%DATADIR%%/util/plugin -@dirrmtry %%DATADIR%%/util/recon_scripts -@dirrmtry %%DATADIR%%/util -@dirrmtry %%DATADIR%% -@dirrmtry %%ETCDIR%% diff --git a/net-mgmt/pandorafms_server/pkg-plist.spool b/net-mgmt/pandorafms_server/pkg-plist.spool index 8fd054fcfc6e..b3b510eea11c 100644 --- a/net-mgmt/pandorafms_server/pkg-plist.spool +++ b/net-mgmt/pandorafms_server/pkg-plist.spool @@ -1,21 +1,17 @@ -@comment /var/log/pandora -@mode 770 @owner pandora @group wheel -%%USE_LOGDIR%%@unexec rmdir %%LOGDIR%% 2>/dev/null || : -@comment /var/spool/pandora/data_out -@mode 700 -%%USE_SPOOL_OUT%%@unexec rmdir %%SPOOLDIR%%/data_out 2>/dev/null || : -@comment /var/spool/pandora/data_in and subdirectories +%%USE_LOGDIR%%@mode 770 +%%USE_LOGDIR%%@dir %%LOGDIR%% +%%USE_SPOOL_OUT%%@mode 700 +%%USE_SPOOL_OUT%%@dir %%SPOOLDIR%%/data_out @mode 770 @group www -%%USE_SPOOL_IN%%@unexec rmdir %%SPOOLDIR%%/data_in/collections 2>/dev/null || : -%%USE_SPOOL_IN%%@unexec rmdir %%SPOOLDIR%%/data_in/conf 2>/dev/null || : -%%USE_SPOOL_IN%%@unexec rmdir %%SPOOLDIR%%/data_in/md5 2>/dev/null || : -%%USE_SPOOL_IN%%@unexec rmdir %%SPOOLDIR%%/data_in/netflow 2>/dev/null || : -%%USE_SPOOL_IN%%@unexec rmdir %%SPOOLDIR%%/data_in 2>/dev/null || : -@comment /var/spool/pandora -@unexec rmdir %%SPOOLDIR%% 2>/dev/null || : +%%USE_SPOOL_IN%%@dir %%SPOOLDIR%%/data_in/collections +%%USE_SPOOL_IN%%@dir %%SPOOLDIR%%/data_in/conf +%%USE_SPOOL_IN%%@dir %%SPOOLDIR%%/data_in/md5 +%%USE_SPOOL_IN%%@dir %%SPOOLDIR%%/data_in/netflow +%%USE_SPOOL_IN%%@dir %%SPOOLDIR%%/data_in +@dir %%SPOOLDIR%% @comment unset mode/owner/group @mode @owner |