diff --git a/extras/deploy-scripts/pandora_deploy_community.sh b/extras/deploy-scripts/pandora_deploy_community.sh index f660d5338d..0601c90688 100644 --- a/extras/deploy-scripts/pandora_deploy_community.sh +++ b/extras/deploy-scripts/pandora_deploy_community.sh @@ -282,6 +282,8 @@ server_dependencies=" \ expect \ openssh-clients \ java \ + bind-utils \ + whois \ http://firefly.artica.es/centos7/xprobe2-0.3-12.2.x86_64.rpm \ http://firefly.artica.es/centos7/wmic-1.4-1.el7.x86_64.rpm \ https://firefly.artica.es/centos7/pandorawmic-1.0.0-1.x86_64.rpm" diff --git a/extras/deploy-scripts/pandora_deploy_community_el8.sh b/extras/deploy-scripts/pandora_deploy_community_el8.sh index 0f3ceadb39..7c55b91ed2 100644 --- a/extras/deploy-scripts/pandora_deploy_community_el8.sh +++ b/extras/deploy-scripts/pandora_deploy_community_el8.sh @@ -338,6 +338,8 @@ server_dependencies=" \ expect \ openssh-clients \ java \ + bind-utils \ + whois \ http://firefly.artica.es/centos7/xprobe2-0.3-12.2.x86_64.rpm \ http://firefly.artica.es/centos7/wmic-1.4-1.el7.x86_64.rpm \ https://firefly.artica.es/centos8/pandorawmic-1.0.0-1.x86_64.rpm" diff --git a/extras/deploy-scripts/pandora_deploy_community_ubuntu_2204.sh b/extras/deploy-scripts/pandora_deploy_community_ubuntu_2204.sh new file mode 100644 index 0000000000..7c78908878 --- /dev/null +++ b/extras/deploy-scripts/pandora_deploy_community_ubuntu_2204.sh @@ -0,0 +1,743 @@ +#!/bin/bash +############################################################################################################## +# PandoraFMS Community online installation script for Ubuntu 22.04 +############################################################################################################## +## Tested versions ## +# Ubuntu 22.04.1 + +#avoid promps +export DEBIAN_FRONTEND=noninteractive +export NEEDRESTART_SUSPEND=1 + +#Constants +PANDORA_CONSOLE=/var/www/html/pandora_console +PANDORA_SERVER_CONF=/etc/pandora/pandora_server.conf +PANDORA_AGENT_CONF=/etc/pandora/pandora_agent.conf +WORKDIR=/opt/pandora/deploy + + +S_VERSION='2022052501' +LOGFILE="/tmp/pandora-deploy-community-$(date +%F).log" + +# define default variables +[ "$TZ" ] || TZ="Europe/Madrid" +[ "$PHPVER" ] || PHPVER=7.4 +[ "$DBHOST" ] || DBHOST=127.0.0.1 +[ "$DBNAME" ] || DBNAME=pandora +[ "$DBUSER" ] || DBUSER=pandora +[ "$DBPASS" ] || DBPASS=pandora +[ "$DBPORT" ] || DBPORT=3306 +[ "$DBROOTPASS" ] || DBROOTPASS=pandora +[ "$SKIP_PRECHECK" ] || SKIP_PRECHECK=0 +[ "$SKIP_DATABASE_INSTALL" ] || SKIP_DATABASE_INSTALL=0 +[ "$SKIP_KERNEL_OPTIMIZATIONS" ] || SKIP_KERNEL_OPTIMIZATIONS=0 +[ "$POOL_SIZE" ] || POOL_SIZE=$(grep -i total /proc/meminfo | head -1 | awk '{printf "%.2f \n", $(NF-1)*0.4/1024}' | sed "s/\\..*$/M/g") +[ "$PANDORA_BETA" ] || PANDORA_BETA=0 + +# Ansi color code variables +red="\e[0;91m" +green="\e[0;92m" +cyan="\e[0;36m" +reset="\e[0m" + +# Functions + +execute_cmd () { + local cmd="$1" + local msg="$2" + + echo -e "${cyan}$msg...${reset}" + $cmd &>> "$LOGFILE" + if [ $? -ne 0 ]; then + echo -e "${red}Fail${reset}" + [ "$3" ] && echo "$3" + echo "Error installing Pandora FMS for detailed error please check log: $LOGFILE" + rm -rf "$WORKDIR" &>> "$LOGFILE" + exit 1 + else + echo -e "\e[1A\e ${cyan}$msg...${reset} ${green}OK${reset}" + return 0 + fi +} + +check_cmd_status () { + if [ $? -ne 0 ]; then + echo -e "${red}Fail${reset}" + [ "$1" ] && echo "$1" + echo "Error installing Pandora FMS for detailed error please check log: $LOGFILE" + rm -rf "$WORKDIR" &>> "$LOGFILE" + exit 1 + else + echo -e "${green}OK${reset}" + return 0 + fi +} + +check_pre_pandora () { + export MYSQL_PWD=$DBPASS + + echo -en "${cyan}Checking environment ... ${reset}" + [ -d "$PANDORA_CONSOLE" ] && local fail=true + [ -f /usr/bin/pandora_server ] && local fail=true + echo "use $DBNAME" | mysql -u$DBUSER -P$DBPORT -h$DBHOST &>> /dev/null && local fail=true + + [ ! $fail ] + check_cmd_status 'Error there is a current Pandora FMS installation on this node, please remove it to execute a clean install' +} + +check_repo_connection () { + execute_cmd "ping -c 2 firefly.artica.es" "Checking Community repo" + execute_cmd "ping -c 2 support.pandorafms.com" "Checking Enterprise repo" +} + +check_root_permissions () { + echo -en "${cyan}Checking root account... ${reset}" + if [ "$(whoami)" != "root" ]; then + echo -e "${red}Fail${reset}" + echo "Please use a root account or sudo for installing Pandora FMS" + echo "Error installing Pandora FMS for detailed error please check log: $LOGFILE" + exit 1 + + else + echo -e "${green}OK${reset}" + fi +} + +## Main +echo "Starting PandoraFMS Community deployment Ubuntu 22.04 ver. $S_VERSION" + +# Ubuntu Version +if [ ! "$(grep -Ei 'Ubuntu' /etc/lsb-release)" ]; then + printf "\n ${red}Error this is not a Ubuntu system, this installer is compatible with Ubuntu systems only${reset}\n" + exit 1 +fi + + +echo -en "${cyan}Check Ubuntu Version...${reset}" +[ $(sed -nr 's/VERSION_ID+=\s*"([0-9][0-9].[0-9][0-9])"$/\1/p' /etc/os-release) == "22.04" ] +check_cmd_status 'Error OS version, Ubuntu 22.04 is expected' + +#Detect OS +os_name=$(grep ^PRETTY_NAME= /etc/os-release | cut -d '=' -f2 | tr -d '"') +execute_cmd "echo $os_name" "OS detected: ${os_name}" + +# initialice logfile +execute_cmd "echo 'Starting community deployment' > $LOGFILE" "All installer activity is logged on $LOGFILE" +echo "Community installer version: $S_VERSION" >> "$LOGFILE" + +# Pre checks +# Root permisions +check_root_permissions + +# Pre installed pandora +[ "$SKIP_PRECHECK" == 1 ] || check_pre_pandora + +#advicing BETA PROGRAM +[ "$PANDORA_BETA" -ne '0' ] && echo -e "${red}BETA version enable using nightly PandoraFMS packages${reset}" + +# Connectivity +check_repo_connection + +# Systemd +execute_cmd "systemctl --version" "Checking SystemD" 'This is not a SystemD enable system, if tryng to use in a docker env please check: https://github.com/pandorafms/pandorafms/tree/develop/extras/docker/centos8' + +# Check memomry greather or equal to 2G +execute_cmd "[ $(grep MemTotal /proc/meminfo | awk '{print $2}') -ge 1700000 ]" 'Checking memory (required: 2 GB)' + +# Check disk size at least 10 Gb free space +execute_cmd "[ $(df -BM / | tail -1 | awk '{print $4}' | tr -d M) -gt 10000 ]" 'Checking Disk (required: 10 GB free min)' + +# Setting timezone +rm -rf /etc/localtime &>> "$LOGFILE" +execute_cmd "timedatectl set-timezone $TZ" "Setting Timezone $TZ" + +# Execute tools check +execute_cmd "awk --version" 'Checking needed tools: awk' +execute_cmd "grep --version" 'Checking needed tools: grep' +execute_cmd "sed --version" 'Checking needed tools: sed' +execute_cmd "apt --version" 'Checking needed tools: dnf' + +# Creating working directory +rm -rf "$WORKDIR" &>> "$LOGFILE" +mkdir -p "$WORKDIR" &>> "$LOGFILE" +execute_cmd "cd $WORKDIR" "Moving to workdir: $WORKDIR" + +## Install utils +execute_cmd "apt update" "Updating repos" +execute_cmd "apt install -y net-tools vim curl wget software-properties-common apt-transport-https" "Installing utils" + +#Installing Apache and php-fpm +[ -e "/etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list" ] || execute_cmd "add-apt-repository ppa:ondrej/php -y" "Enable ppa:ondrej/php repo" +execute_cmd "apt update" "Updating repos" +execute_cmd "apt install -y php$PHPVER-fpm php$PHPVER-common libapache2-mod-fcgid php$PHPVER-cli apache2" "Installing apache and php-fpm" +#execute_cmd "a2enmod proxy_fcgi setenvif && a2enconf php$PHPVER-fpm" "Enabling php-fpm" +echo -en "${cyan}Enabling php$PHPVER-fpm...${reset}" + a2enmod proxy_fcgi setenvif &>> "$LOGFILE" && a2enconf php$PHPVER-fpm &>> "$LOGFILE" +check_cmd_status "Error enabling php$PHPVER-fpm " +systemctl restart php$PHPVER-fpm &>> "$LOGFILE" + +# Console dependencies + console_dependencies=" \ + ldap-utils \ + postfix \ + wget \ + graphviz \ + xfonts-75dpi \ + xfonts-100dpi \ + xfonts-ayu \ + xfonts-intl-arabic \ + xfonts-intl-asian \ + xfonts-intl-phonetic \ + xfonts-intl-japanese-big \ + xfonts-intl-european \ + xfonts-intl-chinese \ + xfonts-intl-japanese \ + xfonts-intl-chinese-big \ + libzstd1 \ + gir1.2-atk-1.0 \ + libavahi-common-data \ + cairo-perf-utils \ + libfribidi-bin \ + php$PHPVER-mcrypt \ + php$PHPVER-gd \ + php$PHPVER-curl \ + php$PHPVER-mysql \ + php$PHPVER-ldap \ + php$PHPVER-fileinfo \ + php$PHPVER-gettext \ + php$PHPVER-snmp \ + php$PHPVER-mbstring \ + php$PHPVER-zip \ + php$PHPVER-xmlrpc \ + php$PHPVER-xml \ + php$PHPVER-yaml \ + libnet-telnet-perl \ + whois" +execute_cmd "apt install -y $console_dependencies" "Installing Pandora FMS Console dependencies" + +# Server dependencies +server_dependencies=" \ + perl \ + nmap \ + fping \ + sudo \ + net-tools \ + nfdump \ + expect \ + openssh-client \ + postfix \ + unzip \ + xprobe \ + coreutils \ + libio-compress-perl \ + libmoosex-role-timer-perl \ + libdbd-mysql-perl \ + libcrypt-mysql-perl \ + libhttp-request-ascgi-perl \ + liblwp-useragent-chicaching-perl \ + liblwp-protocol-https-perl \ + snmp \ + libnetaddr-ip-perl \ + libio-socket-ssl-perl \ + libio-socket-socks-perl \ + libio-socket-ip-perl \ + libio-socket-inet6-perl \ + libnet-telnet-perl \ + libjson-perl \ + libencode-perl \ + libgeo-ip-perl \ + openjdk-8-jdk " +execute_cmd "apt install -y $server_dependencies" "Installing Pandora FMS Server dependencies" + +# wmic and pandorawmic +execute_cmd "curl -O https://firefly.artica.es/pandorafms/utils/bin/wmic" "Downloading wmic" +execute_cmd "curl -O https://firefly.artica.es/pandorafms/utils/bin/pandorawmic" "Downloading pandorawmic" +echo -en "${cyan}Installing wmic and pandorawmic...${reset}" + chmod +x pandorawmic wmic &>> "$LOGFILE" && \ + cp -a wmic /usr/bin/ &>> "$LOGFILE" && \ + cp -a pandorawmic /usr/bin/ &>> "$LOGFILE" +check_cmd_status "Error Installing phanromjs" + +# phantomjs +echo -en "${cyan}Installing phantomjs...${reset}" + export PHANTOM_JS="phantomjs-2.1.1-linux-x86_64" + export OPENSSL_CONF=/etc/ssl + curl -LSs -O "https://firefly.artica.es/pandorafms/utils/$PHANTOM_JS.tar.bz2" &>> "$LOGFILE" && \ + tar xvjf "$PHANTOM_JS.tar.bz2" &>> "$LOGFILE" && \ + mv $PHANTOM_JS/bin/phantomjs /usr/bin &>> "$LOGFILE" && \ + /usr/bin/phantomjs --version &>> "$LOGFILE" +check_cmd_status "Error Installing phanromjs" + + +# SDK VMware perl dependencies +vmware_dependencies=" \ + lib32z1 \ + lib32z1 \ + build-essential \ + uuid uuid-dev \ + libssl-dev \ + perl-doc \ + libxml-libxml-perl \ + libcrypt-ssleay-perl \ + libsoap-lite-perl \ + libmodule-build-perl" +execute_cmd "apt install -y $vmware_dependencies" "Installing VMware SDK dependencies" +execute_cmd "wget https://firefly.artica.es/pandorafms/utils/VMware-vSphere-Perl-SDK-7.0.0-16453907.x86_64.tar.gz" "Downloading VMware SDK" +echo -en "${cyan}Installing VMware SDK...${reset}" + tar xvzf VMware-vSphere-Perl-SDK-7.0.0-16453907.x86_64.tar.gz &>> "$LOGFILE" + cd vmware-vsphere-cli-distrib/ &>> "$LOGFILE" + sed --follow-symlinks -i -e "s/[^#].*show_EULA().*/ #show_EULA();/g" vmware-install.pl &>> "$LOGFILE" + ./vmware-install.pl --default &>> "$LOGFILE" +check_cmd_status "Error Installing VMware SDK" +execute_cmd "cpan Crypt::OpenSSL::AES" "Installing extra vmware dependencie" +cd $WORKDIR &>> "$LOGFILE" + + + +# Instant client Oracle +execute_cmd "mkdir -p /opt/oracle" "Creating Oracle instant client directory /opt/oracle" +execute_cmd "wget https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-basic-linux.x64-19.8.0.0.0dbru.zip" "Downloading Oracle instant client" +execute_cmd "wget https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip" "Downloading Oracle sqlplus" +echo -en "${cyan}Installing Oracle instant client...${reset}" + rm -fr /opt/oracle/* &>> "$LOGFILE" + unzip instantclient-basic-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle/ &>> "$LOGFILE" + unzip instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle/ &>> "$LOGFILE" +check_cmd_status "Error Installing Oracle instant client" + +#Configuring env variables +cat >> /root/.profile << 'EOF_ENV' +#!/bin/bash +VERSION=19.8 +export PATH=$PATH:/opt/oracle/instantclient_19_8 +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle/instantclient_19_8 +export ORACLE_HOME=/opt/oracle/instantclient_19_8 +EOF_ENV + +source '/root/.profile' &>> "$LOGFILE" + +#ipam dependencies +ipam_dependencies=" \ + xprobe \ + libnetaddr-ip-perl \ + coreutils \ + libdbd-mysql-perl \ + libxml-simple-perl \ + libgeo-ip-perl \ + libio-socket-inet6-perl \ + libxml-twig-perl \ + libnetaddr-ip-perl" +execute_cmd "apt install -y $ipam_dependencies" "Installing IPAM Dependencies" + +# MSSQL dependencies el8 +curl -sSL https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc &>> "$LOGFILE" +curl -sSL https://packages.microsoft.com/config/ubuntu/20.04/prod.list | tee /etc/apt/sources.list.d/microsoft-prod.list &>> "$LOGFILE" +apt update &>> "$LOGFILE" +execute_cmd "env ACCEPT_EULA=Y apt install -y msodbcsql17" "Installing ODBC Driver for Microsoft(R) SQL Server(R)" +MS_ID=$(head -1 /etc/odbcinst.ini | tr -d '[]') &>> "$LOGFILE" + +# Disabling apparmor and ufw +systemctl stop ufw.service &>> "$LOGFILE" +systemctl disable ufw &>> "$LOGFILE" +systemctl stop apparmor &>> "$LOGFILE" +systemctl disable apparmor &>> "$LOGFILE" + +#install mysql +debconf-set-selections <<< $(echo -n "mysql-server mysql-server/root_password password $DBROOTPASS") &>> "$LOGFILE" +debconf-set-selections <<< $(echo -n "mysql-server mysql-server/root_password_again password $DBROOTPASS") &>> "$LOGFILE" +echo -en "${cyan}Installing MySql Server...${reset}" + env DEBIAN_FRONTEND=noninteractive apt install -y mysql-server &>> "$LOGFILE" +check_cmd_status "Error Installing MySql Server" + + +#Configuring Database +if [ "$SKIP_DATABASE_INSTALL" -eq '0' ] ; then + execute_cmd "systemctl start mysql" "Starting database engine" + + export MYSQL_PWD=$DBROOTPASS + echo -en "${cyan}Creating Pandora FMS database...${reset}" + echo "create database $DBNAME" | mysql -uroot -P$DBPORT -h$DBHOST + check_cmd_status "Error creating database $DBNAME, is this an empty node? if you have a previus installation please contact with support." + + echo "CREATE USER \"$DBUSER\"@'%' IDENTIFIED BY \"$DBPASS\";" | mysql -uroot -P$DBPORT -h$DBHOST + echo "ALTER USER \"$DBUSER\"@'%' IDENTIFIED WITH mysql_native_password BY \"$DBPASS\"" | mysql -uroot -P$DBPORT -h$DBHOST + echo "GRANT ALL PRIVILEGES ON $DBNAME.* TO \"$DBUSER\"@'%'" | mysql -uroot -P$DBPORT -h$DBHOST +fi +export MYSQL_PWD=$DBPASS + +#Generating my.cnf +cat > /etc/mysql/my.cnf << EOF_DB +[mysqld] +datadir=/var/lib/mysql +user=mysql +character-set-server=utf8 +skip-character-set-client-handshake +# Disabling symbolic-links is recommended to prevent assorted security risks +symbolic-links=0 +# Mysql optimizations for Pandora FMS +# Please check the documentation in http://pandorafms.com for better results + +max_allowed_packet = 64M +innodb_buffer_pool_size = $POOL_SIZE +innodb_lock_wait_timeout = 90 +innodb_file_per_table +innodb_flush_log_at_trx_commit = 0 +innodb_flush_method = O_DIRECT +innodb_log_file_size = 64M +innodb_log_buffer_size = 16M +innodb_io_capacity = 100 +thread_cache_size = 8 +thread_stack = 256K +max_connections = 100 + +key_buffer_size=4M +read_buffer_size=128K + +read_rnd_buffer_size=128K +sort_buffer_size=128K +join_buffer_size=4M + +sql_mode="" + +log-error=/var/log/mysql/error.log +[mysqld_safe] +log-error=/var/log/mysqld.log +pid-file=/var/run/mysqld/mysqld.pid + +EOF_DB + +execute_cmd "systemctl restart mysql" "Configuring and restarting database engine" + + +#Define packages +if [ "$PANDORA_BETA" -eq '0' ] ; then + [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_server-7.0NG.tar.gz" + [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_console-7.0NG.tar.gz" + [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_agent_unix-7.0NG.tar.gz" +elif [ "$PANDORA_BETA" -ne '0' ] ; then + [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandora_enterprise_nightlies/pandorafms_server-latest_x86_64.tar.gz" + [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandora_enterprise_nightlies/pandorafms_console-latest.tar.gz" + [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_agent_unix-7.0NG.tar.gz" +fi + +# Downloading Pandora Packages +cd $WORKDIR &>> "$LOGFILE" + +curl -LSs --output pandorafms_console-7.0NG.tar.gz "${PANDORA_CONSOLE_PACKAGE}" &>> "$LOGFILE" +curl -LSs --output pandorafms_server-7.0NG.tar.gz "${PANDORA_SERVER_PACKAGE}" &>> "$LOGFILE" +curl -LSs --output pandorafms_agent_unix-7.0NG.tar.gz "${PANDORA_AGENT_PACKAGE}" &>> "$LOGFILE" + +# Install PandoraFMS Console +echo -en "${cyan}Installing PandoraFMS Console...${reset}" + tar xvzf pandorafms_console-7.0NG.tar.gz &>> "$LOGFILE" && cp -Ra pandora_console /var/www/html/ &>> "$LOGFILE" +check_cmd_status "Error installing PandoraFMS Console" +rm -f $PANDORA_CONSOLE/*.spec &>> "$LOGFILE" + +# Install Pandora FMS Server +echo -en "${cyan}Installing PandoraFMS Server...${reset}" + useradd pandora &>> "$LOGFILE" + tar xvfz $WORKDIR/pandorafms_server-7.0NG.tar.gz &>> $LOGFILE && cd pandora_server && ./pandora_server_installer --install &>> $LOGFILE && cd $WORKDIR &>> $LOGFILE +check_cmd_status "Error installing PandoraFMS Server" + +#Install agent: +execute_cmd "apt install -y libyaml-tiny-perl perl coreutils wget curl unzip procps python3 python3-pip" "Installing PandoraFMS Agent Dependencies" +echo -en "${cyan}Installing PandoraFMS Agent...${reset}" + tar xvzf $WORKDIR/pandorafms_agent_unix-7.0NG.tar.gz &>> "$LOGFILE" && cd unix && ./pandora_agent_installer --install &>> $LOGFILE && cp -a tentacle_client /usr/local/bin/ &>> $LOGFILE && cd $WORKDIR +check_cmd_status "Error installing PandoraFMS Agent" + +# Copy gotty utility +cd $WORKDIR &>> "$LOGFILE" +execute_cmd "wget https://pandorafms.com/library/wp-content/uploads/2019/11/gotty_linux_amd64.tar.gz" 'Dowloading gotty util' +tar xvzf gotty_linux_amd64.tar.gz &>> $LOGFILE +execute_cmd "mv gotty /usr/bin/" 'Installing gotty util' + +# Config servicesa +#Configure apache2 +#Enable SSL connections +cat > /etc/apache2/conf-available/ssl-params.conf << EOF_PARAM +SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH + + SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 + + SSLHonorCipherOrder On + + + Header always set X-Frame-Options DENY + + Header always set X-Content-Type-Options nosniff + + # Requires Apache >= 2.4 + + SSLCompression off + + SSLUseStapling on + + SSLStaplingCache "shmcb:logs/stapling-cache(150000)" + + + # Requires Apache >= 2.4.11 + + SSLSessionTickets Off +EOF_PARAM + +a2enmod ssl &>> "$LOGFILE" +a2enmod headers &>> "$LOGFILE" +a2enconf ssl-params &>> "$LOGFILE" +a2ensite default-ssl &>> "$LOGFILE" +a2enconf ssl-params &>> "$LOGFILE" +apache2ctl configtest &>> "$LOGFILE" + +execute_cmd "systemctl restart apache2" "Enable SSL mod and Restarting Apache2" + +execute_cmd "systemctl enable mysql --now" "Enabling Database service" +execute_cmd "systemctl enable apache2 --now" "Enabling Apache2 service" +execute_cmd "systemctl enable php$PHPVER-fpm --now" "Enabling php$PHPVER-fpm service" + + +# Populate Database +echo -en "${cyan}Loading pandoradb.sql to $DBNAME database...${reset}" +mysql -u$DBUSER -P$DBPORT -h$DBHOST $DBNAME < $PANDORA_CONSOLE/pandoradb.sql &>> "$LOGFILE" +check_cmd_status 'Error Loading database schema' + +echo -en "${cyan}Loading pandoradb_data.sql to $DBNAME database...${reset}" +mysql -u$DBUSER -P$DBPORT -h$DBHOST $DBNAME < $PANDORA_CONSOLE/pandoradb_data.sql &>> "$LOGFILE" +check_cmd_status 'Error Loading database schema data' + +# Configure console +# Set console config file +cat > $PANDORA_CONSOLE/include/config.php << EO_CONFIG_F + /etc/apache2/conf-enabled/pandora_security.conf << EO_CONFIG_F + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + +EO_CONFIG_F + +#Enable quickshell proxy +cat >> /etc/apache2/mods-enabled/00-proxy.conf << 'EO_HTTPD_WSTUNNEL' +ProxyRequests Off + + Require all granted + + +ProxyPass /ws ws://127.0.0.1:8080 +ProxyPassReverse /ws ws://127.0.0.1:8080 +EO_HTTPD_WSTUNNEL + +# Fixing console permissions +chmod 600 $PANDORA_CONSOLE/include/config.php &>> "$LOGFILE" +chown -R www-data:www-data $PANDORA_CONSOLE &>> "$LOGFILE" +mv $PANDORA_CONSOLE/install.php $PANDORA_CONSOLE/install.done &>> "$LOGFILE" + +# Prepare php.ini +## Prepare php config +ln -s /etc/php/$PHPVER/fpm/php.ini /etc/ +sed --follow-symlinks -i -e "s/^max_input_time.*/max_input_time = -1/g" /etc/php.ini +sed --follow-symlinks -i -e "s/^max_execution_time.*/max_execution_time = 0/g" /etc/php.ini +sed --follow-symlinks -i -e "s/^upload_max_filesize.*/upload_max_filesize = 800M/g" /etc/php.ini +sed --follow-symlinks -i -e "s/^memory_limit.*/memory_limit = 800M/g" /etc/php.ini +sed --follow-symlinks -i -e "s/.*post_max_size =.*/post_max_size = 800M/" /etc/php.ini +sed --follow-symlinks -i -e "s/^disable_functions/;disable_functions/" /etc/php.ini + +#adding 900s to httpd timeout +#echo 'TimeOut 900' > /etc/httpd/conf.d/timeout.conf + +cat > /var/www/html/index.html << EOF_INDEX + +EOF_INDEX + +execute_cmd "systemctl restart apache2" "Restarting apache2 after configuration" +execute_cmd "systemctl restart php$PHPVER-fpm" "Restarting php$PHPVER-fpm after configuration" + +# prepare snmptrapd +cat > /etc/snmp/snmptrapd.conf << EOF +authCommunity log public +disableAuthorization yes +EOF + +# Prepare Server conf +sed -i -e "s/^dbhost.*/dbhost $DBHOST/g" $PANDORA_SERVER_CONF +sed -i -e "s/^dbname.*/dbname $DBNAME/g" $PANDORA_SERVER_CONF +sed -i -e "s/^dbuser.*/dbuser $DBUSER/g" $PANDORA_SERVER_CONF +sed -i -e "s|^dbpass.*|dbpass $DBPASS|g" $PANDORA_SERVER_CONF +sed -i -e "s/^dbport.*/dbport $DBPORT/g" $PANDORA_SERVER_CONF +sed -i -e "s/^#.mssql_driver.*/mssql_driver $MS_ID/g" $PANDORA_SERVER_CONF + +# Adding group www-data to pandora server conf. +grep -q "group www-data" $PANDORA_SERVER_CONF || \ +cat >> $PANDORA_SERVER_CONF << EOF_G + +#Adding group www-data to assing remote-config permission correctly for ubuntu 22.04 +group www-data +EOF_G + +# Enable agent remote config +sed -i "s/^remote_config.*$/remote_config 1/g" $PANDORA_AGENT_CONF + +# Set Oracle environment for pandora_server +cat > /etc/pandora/pandora_server.env << 'EOF_ENV' +#!/bin/bash +VERSION=19.8 +export PATH=$PATH:/opt/oracle/instantclient_19_8 +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle/instantclient_19_8 +export ORACLE_HOME=/opt/oracle/instantclient_19_8 +export OPENSSL_CONF=/etc/ssl +EOF_ENV + +# Kernel optimization + +if [ "$SKIP_KERNEL_OPTIMIZATIONS" -eq '0' ] ; then +cat >> /etc/sysctl.conf < /etc/logrotate.d/pandora_server < /etc/logrotate.d/pandora_agent <> "$LOGFILE" +chmod +x /etc/init.d/pandora_websocket_engine + +# Start Websocket engine +/etc/init.d/pandora_websocket_engine start &>> "$LOGFILE" + +# Configure websocket to be started at start. +systemctl enable pandora_websocket_engine &>> "$LOGFILE" + +# Enable pandora ha service +execute_cmd "/etc/init.d/pandora_server start" "Starting Pandora FMS Server" +systemctl enable pandora_server &>> "$LOGFILE" + +# starting tentacle server +execute_cmd "service tentacle_serverd start" "Starting Tentacle Server" +systemctl enable tentacle_serverd &>> "$LOGFILE" + +# Enabling condole cron +execute_cmd "echo \"* * * * * root wget -q -O - --no-check-certificate http://127.0.0.1/pandora_console/enterprise/cron.php >> $PANDORA_CONSOLE/log/cron.log\" >> /etc/crontab" "Enabling Pandora FMS Console cron" +echo "* * * * * root wget -q -O - --no-check-certificate http://127.0.0.1/pandora_console/enterprise/cron.php >> $PANDORA_CONSOLE/log/cron.log" >> /etc/crontab + +## Enabling agent adn configuring Agente +sed -i "s/^remote_config.*$/remote_config 1/g" $PANDORA_AGENT_CONF &>> "$LOGFILE" +execute_cmd "/etc/init.d/pandora_agent_daemon start" "Starting PandoraFSM Agent" +systemctl enable pandora_agent_daemon &>> "$LOGFILE" + +#fix path phantomjs +sed --follow-symlinks -i -e "s/^openssl_conf = openssl_init/#openssl_conf = openssl_init/g" /etc/ssl/openssl.cnf &>> "$LOGFILE" + +#SSH banner +[ "$(curl -s ifconfig.me)" ] && ipplublic=$(curl -s ifconfig.me) + +cat > /etc/issue.net << EOF_banner + +Welcome to Pandora FMS appliance on CentOS +------------------------------------------ +Go to Public http://$ipplublic/pandora_console$to to login web console +$(ip addr | grep -w "inet" | grep -v "127.0.0.1" | grep -v "172.17.0.1" | awk '{print $2}' | awk -F '/' '{print "Go to Local http://"$1"/pandora_console to login web console"}') + +You can find more information at http://pandorafms.com + +EOF_banner + +rm -f /etc/issue +ln -s /etc/issue.net /etc/issue + +echo 'Banner /etc/issue.net' >> /etc/ssh/sshd_config + +# Remove temporary files +execute_cmd "echo done" "Pandora FMS Community installed" +cd "$HOME" +execute_cmd "rm -rf $WORKDIR" "Removing temporary files" + +# Print nice finish message +GREEN='\033[01;32m' +NONE='\033[0m' +printf " -> Go to Public ${green}http://"$ipplublic"/pandora_console${reset} to manage this server" +ip addr | grep -w "inet" | grep -v "127.0.0.1" | grep -v -e "172.1[0-9].0.1" | awk '{print $2}' | awk -v g=$GREEN -v n=$NONE -F '/' '{printf "\n -> Go to Local "g"http://"$1"/pandora_console"n" to manage this server \n -> Use these credentials to log in Pandora Console "g"[ User: admin / Password: pandora ]"n" \n"}' \ No newline at end of file diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 7f85c96c3e..9f0cf4aedf 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.764-220908 +Version: 7.0NG.764-220923 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 09fd79feaa..6d6b45e319 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.764-220908" +pandora_version="7.0NG.764-220923" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 34ff1bccc3..06a3d7a775 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1015,7 +1015,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.764'; -use constant AGENT_BUILD => '220908'; +use constant AGENT_BUILD => '220923'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 234e667854..e2c3fd718c 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.764 -%define release 220908 +%define release 220923 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 16e2263607..e5d5b8ec01 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.764 -%define release 220908 +%define release 220923 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index b6285c40c5..1f08ee2b18 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.764" -PI_BUILD="220908" +PI_BUILD="220923" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index a95aed4ead..bac49c88cd 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{220908} +{220923} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 94ae7dc483..8a52c15bee 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.764 Build 220908") +#define PANDORA_VERSION ("7.0NG.764 Build 220923") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index c60622a22d..c06eb8fdad 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.764(Build 220908))" + VALUE "ProductVersion", "(7.0NG.764(Build 220923))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index fa29aca43b..b0efbe6dc2 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.764-220908 +Version: 7.0NG.764-220923 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 44e5331162..9ce9a86a41 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.764-220908" +pandora_version="7.0NG.764-220923" package_pear=0 package_pandora=1 diff --git a/pandora_console/extras/mr/57.sql b/pandora_console/extras/mr/57.sql index 1c43f77b2b..f3e0e2c476 100644 --- a/pandora_console/extras/mr/57.sql +++ b/pandora_console/extras/mr/57.sql @@ -5,9 +5,11 @@ ALTER TABLE `tplanned_downtime` ADD COLUMN `cron_interval_to` VARCHAR(100) DEFAU ALTER TABLE `tplugin` ADD COLUMN `no_delete` TINYINT NOT NULL DEFAULT 0; +ALTER TABLE `tmodule_group` MODIFY COLUMN `id_mg` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT; + SET @id_config := (SELECT id_config FROM tconfig WHERE `token` = 'metaconsole_node_id' AND `value` IS NOT NULL ORDER BY id_config DESC LIMIT 1); DELETE FROM tconfig WHERE `token` = 'metaconsole_node_id' AND (id_config < @id_config OR `value` IS NULL); UPDATE `tplugin` set `no_delete` = 1 WHERE `name` IN ('IPMI Plugin', 'DNS Plugin', 'UDP port check', 'SMTP Check', 'MySQL Plugin', 'SNMP remote', 'Packet Loss', 'Wizard SNMP module', 'Wizard SNMP process', 'Wizard WMI module', 'Network bandwidth SNMP'); -COMMIT; \ No newline at end of file +COMMIT; diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index a1ebc7ce7f..af29579055 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -1052,9 +1052,10 @@ if ($update_agent) { $exists_ip = db_get_row_sql($sql); } + $old_group = agents_get_agent_group($id_agente); if ($grupo <= 0) { ui_print_error_message(__('The group id %d is incorrect.', $grupo)); - } else if (group_allow_more_agents($grupo, true, 'update') === false) { + } else if ($old_group !== $grupo && group_allow_more_agents($grupo, true, 'update') === false) { ui_print_error_message(__('Agent cannot be updated due to the maximum agent limit for this group')); } else if ($exists_ip) { ui_print_error_message(__('Duplicate main IP address')); diff --git a/pandora_console/godmode/agentes/planned_downtime.editor.php b/pandora_console/godmode/agentes/planned_downtime.editor.php index d36c2d4a72..cec18a21ca 100644 --- a/pandora_console/godmode/agentes/planned_downtime.editor.php +++ b/pandora_console/godmode/agentes/planned_downtime.editor.php @@ -880,7 +880,7 @@ $table->data[4][1] = html_print_select( [ 'once' => __('Once'), 'periodically' => __('Periodically'), - 'cron' => __('Cron from/to'), + 'cron' => __('Cron from/to'), ], 'type_execution', $type_execution, diff --git a/pandora_console/godmode/massive/massive_operations.php b/pandora_console/godmode/massive/massive_operations.php index c1d601e28f..49b151b7d4 100755 --- a/pandora_console/godmode/massive/massive_operations.php +++ b/pandora_console/godmode/massive/massive_operations.php @@ -114,11 +114,6 @@ if ($satellite_options != ENTERPRISE_NOT_HOOK) { $options_satellite = array_merge($options_satellite, $satellite_options); } -$options_services = enterprise_hook('massive_services_options'); -if ($options_services === ENTERPRISE_NOT_HOOK) { - $options_services = []; -} - if (in_array($option, array_keys($options_alerts)) === true) { $tab = 'massive_alerts'; @@ -136,8 +131,6 @@ if (in_array($option, array_keys($options_alerts)) === true) { $tab = 'massive_satellite'; } else if (in_array($option, array_keys($options_plugins)) === true) { $tab = 'massive_plugins'; -} else if (in_array($option, array_keys($options_services)) === true) { - $tab = 'massive_services'; } if ($tab === 'massive_agents' && empty($option) === true) { @@ -206,10 +199,6 @@ switch ($tab) { $options = $options_plugins; break; - case 'massive_services': - $options = $options_services; - break; - default: // Default. break; @@ -298,12 +287,6 @@ if ($satellitetab == ENTERPRISE_NOT_HOOK) { $satellitetab = ''; } -$servicestab = enterprise_hook('massive_services_tab'); - -if ($servicestab == ENTERPRISE_NOT_HOOK) { - $servicestab = ''; -} - $onheader = []; $onheader['massive_agents'] = $agentstab; $onheader['massive_modules'] = $modulestab; diff --git a/pandora_console/godmode/menu.php b/pandora_console/godmode/menu.php index d4d10dfa88..d63595d553 100644 --- a/pandora_console/godmode/menu.php +++ b/pandora_console/godmode/menu.php @@ -211,7 +211,6 @@ if ($access_console_node === true) { enterprise_hook('massivepolicies_submenu'); enterprise_hook('massivesnmp_submenu'); enterprise_hook('massivesatellite_submenu'); - enterprise_hook('massiveservices_submenu'); $sub['gmassive']['sub2'] = $sub2; $sub2 = []; diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index 41b50df748..faa8c13ae5 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -3874,6 +3874,7 @@ $class = 'databox filters'; } else { $rows_select = modules_get_modulegroups(); } + html_print_select($rows_select, 'modulegroup', $modulegroup, '', __($is_none), -1, true, false, true, '', false, 'width: 120px;'); html_print_select( $rows_select, diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index 35eaddd2c3..93a3d64a27 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -34,7 +34,7 @@ check_login(); if (is_ajax()) { $test_address = get_parameter('test_address', ''); - $params = get_parameter('params', ''); + $params = io_safe_output(get_parameter('params', '')); $res = send_test_email( $test_address, diff --git a/pandora_console/godmode/wizards/HostDevices.class.php b/pandora_console/godmode/wizards/HostDevices.class.php index 36e7df0b21..cf4f6fe87b 100755 --- a/pandora_console/godmode/wizards/HostDevices.class.php +++ b/pandora_console/godmode/wizards/HostDevices.class.php @@ -914,7 +914,7 @@ class HostDevices extends Wizard 'hidden' => (($this->task['subnet_csv'] == '1') ? 1 : 0), 'id' => 'std_subnet', 'label' => ''.__('Network').':'.ui_print_help_tip( - __('You can specify several networks, separated by commas, for example: 192.168.50.0/24,192.168.60.0/24'), + __('You can specify networks or fully qualified domain names of a specific host, separated by commas, for example: 192.168.50.0/24,192.168.60.0/24, hostname.artica.es'), true ), 'arguments' => [ diff --git a/pandora_console/include/class/ExternalTools.class.php b/pandora_console/include/class/ExternalTools.class.php index 58c021de17..4af91fe5cb 100644 --- a/pandora_console/include/class/ExternalTools.class.php +++ b/pandora_console/include/class/ExternalTools.class.php @@ -651,6 +651,12 @@ class ExternalTools extends HTML } break; + case 'whois': + if (empty($snmpget_path) === false) { + return $snmpget_path; + } + break; + default: return null; } @@ -829,6 +835,7 @@ class ExternalTools extends HTML if (empty($dig) === true) { ui_print_error_message(__('Dig executable does not exist.')); } else { + $dig .= ' '.$ip; $this->performExecution($dig); } @@ -837,6 +844,7 @@ class ExternalTools extends HTML if (empty($whois) === true) { ui_print_error_message(__('Whois executable does not exist.')); } else { + $whois .= ' '.$ip; $this->performExecution($whois); } diff --git a/pandora_console/include/config.inc.php b/pandora_console/include/config.inc.php index a3d5677729..7c92b5774d 100644 --- a/pandora_console/include/config.inc.php +++ b/pandora_console/include/config.inc.php @@ -1,4 +1,5 @@ 0) { - include 'general/mysqlerr.php'; - return false; + if (empty($ssl)) { + $connect_id = mysqli_connect($host, $user, $pass, $db, $port); + if (mysqli_connect_errno() > 0) { + include 'general/mysqlerr.php'; + return false; + } + + db_change_cache_id($db, $host); + + if (isset($charset)) { + mysqli_set_charset($connect_id, $charset); + } + + mysqli_select_db($connect_id, $db); + } else { + $connect_id = mysqli_init(); + + mysqli_ssl_set($connect_id, null, null, $ssl, null, null); + + if ($verify === 'verified') { + mysqli_real_connect($connect_id, $host, $user, $pass, $db, $port, null, MYSQLI_CLIENT_SSL); + } else { + mysqli_real_connect($connect_id, $host, $user, $pass, $db, $port, null, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT); + } + + if (mysqli_connect_errno() > 0) { + include 'general/mysqlerr.php'; + return false; + } } - - db_change_cache_id($db, $host); - - if (isset($charset)) { - mysqli_set_charset($connect_id, $charset); - } - - mysqli_select_db($connect_id, $db); } else { $connect_id = @mysql_connect($host.':'.$port, $user, $pass, true); - if (! $connect_id) { + if (!$connect_id) { return false; } @@ -117,7 +144,7 @@ function mysql_db_get_all_rows_sql($sql, $search_history_db=false, $cache=true, $history = false; // Connect to the history DB - if (! isset($config['history_db_connection']) || $config['history_db_connection'] === false) { + if (!isset($config['history_db_connection']) || $config['history_db_connection'] === false) { $config['history_db_connection'] = db_connect($config['history_db_host'], $config['history_db_name'], $config['history_db_user'], io_output_password($config['history_db_pass']), $config['history_db_port'], false); } @@ -142,13 +169,13 @@ function mysql_db_get_all_rows_sql($sql, $search_history_db=false, $cache=true, } // Append result to the history DB data - if (! empty($return)) { + if (!empty($return)) { foreach ($return as $row) { array_push($history, $row); } } - if (! empty($history)) { + if (!empty($history)) { return $history; } @@ -240,7 +267,7 @@ function mysql_db_get_row($table, $field_search, $condition, $fields=false, $cac } else { if (is_array($fields)) { $fields = implode(',', $fields); - } else if (! is_string($fields)) { + } else if (!is_string($fields)) { return false; } } @@ -403,7 +430,7 @@ function mysql_db_process_sql($sql, $rettype='affected_rows', $dbconnection='', $cache = $config['dbcache']; } - if ($cache && ! empty($sql_cache[$sql_cache['id']][$sql])) { + if ($cache && !empty($sql_cache[$sql_cache['id']][$sql])) { $retval = $sql_cache[$sql_cache['id']][$sql]; $sql_cache['saved'][$sql_cache['id']]++; db_add_database_debug_trace($sql); @@ -518,7 +545,7 @@ function mysql_db_process_sql($sql, $rettype='affected_rows', $dbconnection='', } } - if (! empty($retval)) { + if (!empty($retval)) { return $retval; } @@ -594,7 +621,7 @@ function mysql_encapsule_fields_with_same_name_to_instructions($field) */ function mysql_db_get_value_filter($field, $table, $filter, $where_join='AND', $search_history_db=false) { - if (! is_array($filter) || empty($filter)) { + if (!is_array($filter) || empty($filter)) { return false; } @@ -693,7 +720,7 @@ function mysql_db_format_array_where_clause_sql($values, $join='AND', $prefix=fa { $fields = []; - if (! is_array($values)) { + if (!is_array($values)) { return ''; } @@ -863,7 +890,7 @@ function mysql_db_format_array_where_clause_sql($values, $join='AND', $prefix=fa $i++; } - return (! empty($query) ? $prefix : '').$query.$group.$order.$limit.$offset; + return (!empty($query) ? $prefix : '').$query.$group.$order.$limit.$offset; } @@ -945,7 +972,7 @@ function mysql_db_get_row_filter($table, $filter, $fields=false, $where_join='AN } else { if (is_array($fields)) { $fields = implode(',', $fields); - } else if (! is_string($fields)) { + } else if (!is_string($fields)) { return false; } } @@ -995,7 +1022,7 @@ function mysql_db_get_all_rows_filter($table, $filter=[], $fields=false, $where_ $fields = '*'; } else if (is_array($fields)) { $fields = implode(',', $fields); - } else if (! is_string($fields)) { + } else if (!is_string($fields)) { return false; } diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php index ac608e6acf..178088195c 100644 --- a/pandora_console/include/functions_agents.php +++ b/pandora_console/include/functions_agents.php @@ -789,7 +789,7 @@ function agents_get_agents_selected($group) ); $all = array_reduce( - $all, + (empty($all) === true) ? [] : $all, function ($carry, $item) { $carry[$item['id_agente']] = $item['alias']; return $carry; diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index fbe12e27f8..647b719ae3 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -1,4 +1,5 @@ runBasic(); } - } @@ -3424,7 +3445,6 @@ function get_um_url() } return $url; - } @@ -3440,7 +3460,7 @@ function config_return_in_bytes($val) $last = strtolower($val[(strlen($val) - 1)]); $val = (int) trim($val); switch ($last) { - // The 'G' modifier is available since PHP 5.1.0. + // The 'G' modifier is available since PHP 5.1.0. case 'g': $val *= 1024; case 'm': diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index c04308a717..c36536348f 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -1205,7 +1205,12 @@ function events_get_all( $tags = json_decode($tag_without, true); if (is_array($tags) === true && in_array('0', $tags) === false) { if (!$user_is_admin) { - $user_tags = array_flip(tags_get_tags_for_module_search()); + $tags_module_search = tags_get_tags_for_module_search(); + if ($tags_module_search === false) { + $tags_module_search = []; + } + + $user_tags = array_flip($tags_module_search); if ($user_tags != null) { foreach ($tags as $key_tag => $id_tag) { // User cannot filter with those tags. @@ -4948,6 +4953,8 @@ function events_clean_tags($tags) } $event_tags = tags_get_tags_formatted($tags, false); + $event_tags = io_safe_input($event_tags); + return explode(',', str_replace(' ', '', $event_tags)); } diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php index d9c86aa66a..8b1f1deaae 100644 --- a/pandora_console/include/functions_menu.php +++ b/pandora_console/include/functions_menu.php @@ -656,7 +656,7 @@ function menu_get_sec_pages($sec, $menu_hash=false) foreach ($menu[$sec]['sub'] as $k => $v) { // Avoid special cases of standalone windows. if (preg_match('/^javascript:/', $k) || preg_match('/\.php/', $k)) { - if ($sec !== 'links') { + if ($sec !== 'links' && $sec !== 'eventos') { continue; } } diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 31026035f7..13595689e1 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -7746,15 +7746,7 @@ function reporting_advanced_sla( } if (isset($max_value) === false || (int) $max_value === 0) { - if ($max_value === '0' - && $max_value < $min_value - && isset($min_value_warning) === true - && $min_value_warning > $max_value - ) { - $max_value = $min_value_warning; - } else { - $max_value = null; - } + $max_value = null; } if (isset($max_value) === false && isset($min_value) === false) { @@ -8309,18 +8301,21 @@ function reporting_advanced_sla( $inverse_interval ); - // Warning SLA check. - $sla_check_value_warning = sla_check_value( - $current_data['datos'], - $min_value_warning, - $max_value_warning, - $inverse_interval_warning, - 1 - ); + $sla_check_value_warning = false; + if ($sla_check_value === true) { + // Warning SLA check. + $sla_check_value_warning = sla_check_value( + $current_data['datos'], + $min_value_warning, + $max_value_warning, + $inverse_interval_warning, + 1 + ); + } } // Not unknown nor not init values. - if ($sla_check_value_warning && $sla_check_warning === true) { + if ($sla_check_value_warning === true && $sla_check_warning === true) { if (isset($current_data['type']) === false || ((int) $current_data['type'] === 0 && $i !== 0) diff --git a/pandora_console/include/functions_reporting_html.php b/pandora_console/include/functions_reporting_html.php index 69d85d448d..029b0d70b6 100644 --- a/pandora_console/include/functions_reporting_html.php +++ b/pandora_console/include/functions_reporting_html.php @@ -1756,7 +1756,8 @@ function reporting_html_modules_inventory($table, $item, $pdf=0) } else if ($data_field_key === 'group_id') { $column_value = groups_get_name($data_field_value[0]); } else if ($data_field_key === 'sec_group_id') { - $sec_groups_names = array_map(function ($group_id) { + $sec_groups_names = array_map( + function ($group_id) { return groups_get_name($group_id); }, $data_field_value @@ -4224,7 +4225,7 @@ function reporting_html_availability($table, $item, $pdf=0) } else { $table_row[] = $row['agent']; $item_name = $row['availability_item']; - if ((bool) $row['compare'] === true) { + if ((bool) $row['compare'] === false) { $item_name .= ' ('.__('24 x 7').')'; } diff --git a/pandora_console/include/functions_tactical.php b/pandora_console/include/functions_tactical.php index 3b50ba5476..dec75ae13e 100644 --- a/pandora_console/include/functions_tactical.php +++ b/pandora_console/include/functions_tactical.php @@ -416,7 +416,7 @@ function tactical_get_data( } else { $result_list = db_get_all_rows_sql( sprintf( - 'SELECT COUNT(*) as contado, estado + 'SELECT COUNT(DISTINCT(tam.id_agente_modulo)) as contado, estado FROM tagente_estado tae INNER JOIN tagente ta ON tae.id_agente = ta.id_agente diff --git a/pandora_console/include/functions_tags.php b/pandora_console/include/functions_tags.php index 1ae830bba9..06dc8b1ada 100644 --- a/pandora_console/include/functions_tags.php +++ b/pandora_console/include/functions_tags.php @@ -1334,7 +1334,7 @@ function tags_checks_event_acl($id_user, $id_group, $access, $tags=[], $children WHERE ".get_acl_column($access).' = 1)'; if (isset($id_group)) { - $sql .= 'AND id_grupo = '.$id_group; + $sql .= ' AND id_grupo = '.$id_group; } $user_has_perm_without_tags = db_get_all_rows_sql($sql); @@ -1343,6 +1343,7 @@ function tags_checks_event_acl($id_user, $id_group, $access, $tags=[], $children return true; } + $tags_aux = []; $tags_str = ''; if (!empty($tags)) { foreach ($tags as $tag) { diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index d30171eba3..9db7f80fb7 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -4101,17 +4101,20 @@ function ui_toggle( // JQuery Toggle. $output .= '