nagios4/include/cgiutils.h

512 lines
17 KiB
C

/************************************************************************
*
* CGIUTILS.H - Header file for common CGI functions
*
* License:
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
************************************************************************/
#ifndef NAGIOS_CGIUTILS_H_INCLUDED
#define NAGIOS_CGIUTILS_H_INCLUDED
#include "lib/libnagios.h"
#include "logging.h"
#include "objects.h"
#include "cgiauth.h"
NAGIOS_BEGIN_DECL
/**************************** CGI REFRESH RATE ******************************/
#define DEFAULT_REFRESH_RATE 60 /* 60 second refresh rate for CGIs */
/******************************* CGI NAMES **********************************/
#define STATUS_CGI "status.cgi"
#ifdef LEGACY_GRAPHICAL_CGIS
#define STATUSMAP_CGI "statusmap.cgi"
#else
#define STATUSMAP_CGI "../map.php"
#define LEGACY_STATUSMAP_CGI "statusmap.cgi"
#endif
#define STATUSWORLD_CGI "statuswrl.cgi"
#define COMMAND_CGI "cmd.cgi"
#define EXTINFO_CGI "extinfo.cgi"
#define SHOWLOG_CGI "showlog.cgi"
#define NOTIFICATIONS_CGI "notifications.cgi"
#define HISTORY_CGI "history.cgi"
#define CONFIG_CGI "config.cgi"
#define OUTAGES_CGI "outages.cgi"
#ifdef LEGACY_GRAPHICAL_CGIS
#define TRENDS_CGI "trends.cgi"
#else
#define TRENDS_CGI "../trends.html"
#define LEGACY_TRENDS_CGI "trends.cgi"
#endif
#define AVAIL_CGI "avail.cgi"
#define TAC_CGI "tac.cgi"
#define STATUSWML_CGI "statuswml.cgi"
#define TRACEROUTE_CGI "traceroute.cgi"
#ifdef LEGACY_GRAPHICAL_CGIS
#define HISTOGRAM_CGI "histogram.cgi"
#else
#define HISTOGRAM_CGI "../histogram.html"
#define LEGACY_HISTOGRAM_CGI "histogram.cgi"
#endif
#define CHECKSANITY_CGI "checksanity.cgi"
#define MINISTATUS_CGI "ministatus.cgi"
#define SUMMARY_CGI "summary.cgi"
/**************************** STYLE SHEET NAMES ******************************/
#define COMMON_CSS "common.css"
#define SHOWLOG_CSS "showlog.css"
#define STATUS_CSS "status.css"
#define STATUSMAP_CSS "statusmap.css"
#define COMMAND_CSS "cmd.css"
#define EXTINFO_CSS "extinfo.css"
#define NOTIFICATIONS_CSS "notifications.css"
#define HISTORY_CSS "history.css"
#define CONFIG_CSS "config.css"
#define OUTAGES_CSS "outages.css"
#define TRENDS_CSS "trends.css"
#define AVAIL_CSS "avail.css"
#define TAC_CSS "tac.css"
#define HISTOGRAM_CSS "histogram.css"
#define CHECKSANITY_CSS "checksanity.css"
#define MINISTATUS_CSS "ministatus.css"
#define SUMMARY_CSS "summary.css"
#define NAGFUNCS_CSS "nag_funcs.css"
/********************************* JAVASCRIPT INCLUDES **********************/
#define JQUERY_JS "jquery-1.12.4.min.js"
#define NAGFUNCS_JS "nag_funcs.js"
/********************************* ICONS ************************************/
#define STATUS_ICON_WIDTH 20
#define STATUS_ICON_HEIGHT 20
#define INFO_ICON "info.png"
#define INFO_ICON_ALT "Informational Message"
#define START_ICON "start.gif"
#define START_ICON_ALT "Program Start"
#define STOP_ICON "stop.gif"
#define STOP_ICON_ALT "Program End"
#define RESTART_ICON "restart.gif"
#define RESTART_ICON_ALT "Program Restart"
#define OK_ICON "recovery.png"
#define OK_ICON_ALT "Service Ok"
#define CRITICAL_ICON "critical.png"
#define CRITICAL_ICON_ALT "Service Critical"
#define WARNING_ICON "warning.png"
#define WARNING_ICON_ALT "Service Warning"
#define UNKNOWN_ICON "unknown.png"
#define UNKNOWN_ICON_ALT "Service Unknown"
#define NOTIFICATION_ICON "notify.gif"
#define NOTIFICATION_ICON_ALT "Service Notification"
#define LOG_ROTATION_ICON "logrotate.png"
#define LOG_ROTATION_ICON_ALT "Log Rotation"
#define EXTERNAL_COMMAND_ICON "command.png"
#define EXTERNAL_COMMAND_ICON_ALT "External Command"
#define STATUS_DETAIL_ICON "status2.gif"
#define STATUS_OVERVIEW_ICON "status.gif"
#define STATUSMAP_ICON "status3.gif"
#define STATUSWORLD_ICON "status4.gif"
#define EXTINFO_ICON "extinfo.gif"
#define HISTORY_ICON "history.gif"
#define CONTACTGROUP_ICON "contactgroup.gif"
#define TRENDS_ICON "trends.gif"
#define DISABLED_ICON "disabled.gif"
#define ENABLED_ICON "enabled.gif"
#define PASSIVE_ONLY_ICON "passiveonly.gif"
#define NOTIFICATIONS_DISABLED_ICON "ndisabled.gif"
#define ACKNOWLEDGEMENT_ICON "ack.gif"
#define REMOVE_ACKNOWLEDGEMENT_ICON "noack.gif"
#define COMMENT_ICON "comment.gif"
#define DELETE_ICON "delete.gif"
#define DELAY_ICON "delay.gif"
#define DOWNTIME_ICON "downtime.gif"
#define PASSIVE_ICON "passiveonly.gif"
#define RIGHT_ARROW_ICON "right.gif"
#define LEFT_ARROW_ICON "left.gif"
#define UP_ARROW_ICON "up.gif"
#define DOWN_ARROW_ICON "down.gif"
#define FLAPPING_ICON "flapping.gif"
#define SCHEDULED_DOWNTIME_ICON "downtime.gif"
#define EMPTY_ICON "empty.gif"
#define ACTIVE_ICON "active.gif"
#define ACTIVE_ICON_ALT "Active Mode"
#define STANDBY_ICON "standby.gif"
#define STANDBY_ICON_ALT "Standby Mode"
#define HOST_DOWN_ICON "critical.png"
#define HOST_DOWN_ICON_ALT "Host Down"
#define HOST_UNREACHABLE_ICON "critical.png"
#define HOST_UNREACHABLE_ICON_ALT "Host Unreachable"
#define HOST_UP_ICON "recovery.png"
#define HOST_UP_ICON_ALT "Host Up"
#define HOST_NOTIFICATION_ICON "notify.gif"
#define HOST_NOTIFICATION_ICON_ALT "Host Notification"
#define SERVICE_EVENT_ICON "serviceevent.gif"
#define SERVICE_EVENT_ICON_ALT "Service Event Handler"
#define HOST_EVENT_ICON "hostevent.gif"
#define HOST_EVENT_ICON_ALT "Host Event Handler"
#define THERM_OK_IMAGE "thermok.png"
#define THERM_WARNING_IMAGE "thermwarn.png"
#define THERM_CRITICAL_IMAGE "thermcrit.png"
#define CONFIGURATION_ICON "config.gif"
#define NOTES_ICON "notes.gif"
#define ACTION_ICON "action.gif"
#define DETAIL_ICON "detail.gif"
#define PARENT_TRAVERSAL_ICON "parentup.gif"
#define TAC_DISABLED_ICON "tacdisabled.png"
#define TAC_ENABLED_ICON "tacenabled.png"
#define ZOOM1_ICON "zoom1.gif"
#define ZOOM2_ICON "zoom2.gif"
#define CONTEXT_HELP_ICON1 "contexthelp1.gif"
#define CONTEXT_HELP_ICON2 "contexthelp2.gif"
#define SPLUNK_SMALL_WHITE_ICON "splunk1.gif"
#define SPLUNK_SMALL_BLACK_ICON "splunk2.gif"
#define FIRST_PAGE_ICON "b_first2.png"
#define LAST_PAGE_ICON "b_last2.png"
#define NEXT_PAGE_ICON "b_next2.png"
#define PREVIOUS_PAGE_ICON "b_prev2.png"
/********************* EXTENDED INFO CGI DISPLAY TYPES *********************/
#define DISPLAY_PROCESS_INFO 0
#define DISPLAY_HOST_INFO 1
#define DISPLAY_SERVICE_INFO 2
#define DISPLAY_COMMENTS 3
#define DISPLAY_PERFORMANCE 4
#define DISPLAY_HOSTGROUP_INFO 5
#define DISPLAY_DOWNTIME 6
#define DISPLAY_SCHEDULING_QUEUE 7
#define DISPLAY_SERVICEGROUP_INFO 8
/************************ COMMAND CGI COMMAND MODES *************************/
#define CMDMODE_NONE 0
#define CMDMODE_REQUEST 1
#define CMDMODE_COMMIT 2
/******************** HOST AND SERVICE NOTIFICATION TYPES ******************/
#define NOTIFICATION_ALL 0 /* all service and host notifications */
#define NOTIFICATION_SERVICE_ALL 1 /* all types of service notifications */
#define NOTIFICATION_HOST_ALL 2 /* all types of host notifications */
#define NOTIFICATION_SERVICE_WARNING 4
#define NOTIFICATION_SERVICE_UNKNOWN 8
#define NOTIFICATION_SERVICE_CRITICAL 16
#define NOTIFICATION_SERVICE_RECOVERY 32
#define NOTIFICATION_HOST_DOWN 64
#define NOTIFICATION_HOST_UNREACHABLE 128
#define NOTIFICATION_HOST_RECOVERY 256
#define NOTIFICATION_SERVICE_ACK 512
#define NOTIFICATION_HOST_ACK 1024
#define NOTIFICATION_SERVICE_FLAP 2048
#define NOTIFICATION_HOST_FLAP 4096
#define NOTIFICATION_SERVICE_CUSTOM 8192
#define NOTIFICATION_HOST_CUSTOM 16384
#define NOTIFICATION_SERVICE_DOWNTIME 32768
#define NOTIFICATION_HOST_DOWNTIME 65536
/********************** HOST AND SERVICE ALERT TYPES **********************/
#define HISTORY_ALL 0 /* all service and host alert */
#define HISTORY_SERVICE_ALL 1 /* all types of service alerts */
#define HISTORY_HOST_ALL 2 /* all types of host alerts */
#define HISTORY_SERVICE_WARNING 4
#define HISTORY_SERVICE_UNKNOWN 8
#define HISTORY_SERVICE_CRITICAL 16
#define HISTORY_SERVICE_RECOVERY 32
#define HISTORY_HOST_DOWN 64
#define HISTORY_HOST_UNREACHABLE 128
#define HISTORY_HOST_RECOVERY 256
/****************************** SORT TYPES *******************************/
#define SORT_NONE 0
#define SORT_ASCENDING 1
#define SORT_DESCENDING 2
/***************************** SORT OPTIONS ******************************/
#define SORT_NOTHING 0
#define SORT_HOSTNAME 1
#define SORT_SERVICENAME 2
#define SORT_SERVICESTATUS 3
#define SORT_LASTCHECKTIME 4
#define SORT_CURRENTATTEMPT 5
#define SORT_STATEDURATION 6
#define SORT_NEXTCHECKTIME 7
#define SORT_HOSTSTATUS 8
#define SORT_HOSTURGENCY 9
/****************** HOST AND SERVICE FILTER PROPERTIES *******************/
#define HOST_SCHEDULED_DOWNTIME 1
#define HOST_NO_SCHEDULED_DOWNTIME 2
#define HOST_STATE_ACKNOWLEDGED 4
#define HOST_STATE_UNACKNOWLEDGED 8
#define HOST_CHECKS_DISABLED 16
#define HOST_CHECKS_ENABLED 32
#define HOST_EVENT_HANDLER_DISABLED 64
#define HOST_EVENT_HANDLER_ENABLED 128
#define HOST_FLAP_DETECTION_DISABLED 256
#define HOST_FLAP_DETECTION_ENABLED 512
#define HOST_IS_FLAPPING 1024
#define HOST_IS_NOT_FLAPPING 2048
#define HOST_NOTIFICATIONS_DISABLED 4096
#define HOST_NOTIFICATIONS_ENABLED 8192
#define HOST_PASSIVE_CHECKS_DISABLED 16384
#define HOST_PASSIVE_CHECKS_ENABLED 32768
#define HOST_PASSIVE_CHECK 65536
#define HOST_ACTIVE_CHECK 131072
#define HOST_HARD_STATE 262144
#define HOST_SOFT_STATE 524288
#define SERVICE_SCHEDULED_DOWNTIME 1
#define SERVICE_NO_SCHEDULED_DOWNTIME 2
#define SERVICE_STATE_ACKNOWLEDGED 4
#define SERVICE_STATE_UNACKNOWLEDGED 8
#define SERVICE_CHECKS_DISABLED 16
#define SERVICE_CHECKS_ENABLED 32
#define SERVICE_EVENT_HANDLER_DISABLED 64
#define SERVICE_EVENT_HANDLER_ENABLED 128
#define SERVICE_FLAP_DETECTION_ENABLED 256
#define SERVICE_FLAP_DETECTION_DISABLED 512
#define SERVICE_IS_FLAPPING 1024
#define SERVICE_IS_NOT_FLAPPING 2048
#define SERVICE_NOTIFICATIONS_DISABLED 4096
#define SERVICE_NOTIFICATIONS_ENABLED 8192
#define SERVICE_PASSIVE_CHECKS_DISABLED 16384
#define SERVICE_PASSIVE_CHECKS_ENABLED 32768
#define SERVICE_PASSIVE_CHECK 65536
#define SERVICE_ACTIVE_CHECK 131072
#define SERVICE_HARD_STATE 262144
#define SERVICE_SOFT_STATE 524288
/****************************** SSI TYPES ********************************/
#define SSI_HEADER 0
#define SSI_FOOTER 1
/************************ CONTEXT-SENSITIVE HELP *************************/
#define CONTEXTHELP_STATUS_DETAIL "A1"
#define CONTEXTHELP_STATUS_HGOVERVIEW "A2"
#define CONTEXTHELP_STATUS_HGSUMMARY "A3"
#define CONTEXTHELP_STATUS_HGGRID "A4"
#define CONTEXTHELP_STATUS_SVCPROBLEMS "A5"
#define CONTEXTHELP_STATUS_HOST_DETAIL "A6"
#define CONTEXTHELP_STATUS_HOSTPROBLEMS "A7"
#define CONTEXTHELP_STATUS_SGOVERVIEW "A8"
#define CONTEXTHELP_STATUS_SGSUMMARY "A9"
#define CONTEXTHELP_STATUS_SGGRID "A10"
#define CONTEXTHELP_TAC "B1"
#define CONTEXTHELP_MAP "C1"
#define CONTEXTHELP_LOG "D1"
#define CONTEXTHELP_HISTORY "E1"
#define CONTEXTHELP_NOTIFICATIONS "F1"
#define CONTEXTHELP_TRENDS_MENU1 "G1"
#define CONTEXTHELP_TRENDS_MENU2 "G2"
#define CONTEXTHELP_TRENDS_MENU3 "G3"
#define CONTEXTHELP_TRENDS_MENU4 "G4"
#define CONTEXTHELP_TRENDS_HOST "G5"
#define CONTEXTHELP_TRENDS_SERVICE "G6"
#define CONTEXTHELP_AVAIL_MENU1 "H1"
#define CONTEXTHELP_AVAIL_MENU2 "H2"
#define CONTEXTHELP_AVAIL_MENU3 "H3"
#define CONTEXTHELP_AVAIL_MENU4 "H4"
#define CONTEXTHELP_AVAIL_MENU5 "H5"
#define CONTEXTHELP_AVAIL_HOSTGROUP "H6"
#define CONTEXTHELP_AVAIL_HOST "H7"
#define CONTEXTHELP_AVAIL_SERVICE "H8"
#define CONTEXTHELP_AVAIL_SERVICEGROUP "H9"
#define CONTEXTHELP_EXT_HOST "I1"
#define CONTEXTHELP_EXT_SERVICE "I2"
#define CONTEXTHELP_EXT_HOSTGROUP "I3"
#define CONTEXTHELP_EXT_PROCESS "I4"
#define CONTEXTHELP_EXT_PERFORMANCE "I5"
#define CONTEXTHELP_EXT_COMMENTS "I6"
#define CONTEXTHELP_EXT_DOWNTIME "I7"
#define CONTEXTHELP_EXT_QUEUE "I8"
#define CONTEXTHELP_EXT_SERVICEGROUP "I9"
#define CONTEXTHELP_CMD_INPUT "J1"
#define CONTEXTHELP_CMD_COMMIT "J2"
#define CONTEXTHELP_OUTAGES "K1"
#define CONTEXTHELP_CONFIG_MENU "L1"
#define CONTEXTHELP_CONFIG_HOSTS "L2"
#define CONTEXTHELP_CONFIG_HOSTDEPENDENCIES "L3"
#define CONTEXTHELP_CONFIG_HOSTESCALATIONS "L4"
#define CONTEXTHELP_CONFIG_HOSTGROUPS "L5"
#define CONTEXTHELP_CONFIG_HOSTGROUPESCALATIONS "L6"
#define CONTEXTHELP_CONFIG_SERVICES "L7"
#define CONTEXTHELP_CONFIG_SERVICEDEPENDENCIES "L8"
#define CONTEXTHELP_CONFIG_SERVICEESCALATIONS "L9"
#define CONTEXTHELP_CONFIG_CONTACTS "L10"
#define CONTEXTHELP_CONFIG_CONTACTGROUPS "L11"
#define CONTEXTHELP_CONFIG_TIMEPERIODS "L12"
#define CONTEXTHELP_CONFIG_COMMANDS "L13"
#define CONTEXTHELP_CONFIG_HOSTEXTINFO "L14"
#define CONTEXTHELP_CONFIG_SERVICEEXTINFO "L15"
#define CONTEXTHELP_CONFIG_SERVICEGROUPS "L16"
#define CONTEXTHELP_HISTOGRAM_MENU1 "M1"
#define CONTEXTHELP_HISTOGRAM_MENU2 "M2"
#define CONTEXTHELP_HISTOGRAM_MENU3 "M3"
#define CONTEXTHELP_HISTOGRAM_MENU4 "M4"
#define CONTEXTHELP_HISTOGRAM_HOST "M5"
#define CONTEXTHELP_HISTOGRAM_SERVICE "M6"
#define CONTEXTHELP_SUMMARY_MENU "N1"
#define CONTEXTHELP_SUMMARY_RECENT_ALERTS "N2"
#define CONTEXTHELP_SUMMARY_ALERT_TOTALS "N3"
#define CONTEXTHELP_SUMMARY_HOSTGROUP_ALERT_TOTALS "N4"
#define CONTEXTHELP_SUMMARY_HOST_ALERT_TOTALS "N5"
#define CONTEXTHELP_SUMMARY_SERVICE_ALERT_TOTALS "N6"
#define CONTEXTHELP_SUMMARY_ALERT_PRODUCERS "N7"
#define CONTEXTHELP_SUMMARY_SERVICEGROUP_ALERT_TOTALS "N8"
/************************** LIFO RETURN CODES ****************************/
#define LIFO_OK 0
#define LIFO_ERROR_MEMORY 1
#define LIFO_ERROR_FILE 2
#define LIFO_ERROR_DATA 3
/*************************** DATA STRUCTURES *****************************/
/* LIFO data structure */
typedef struct lifo_struct {
char *data;
struct lifo_struct *next;
} lifo;
struct nagios_extcmd {
const char *name;
int id;
int cmt_opt; /* 0 = not allowed, 1 = optional, 2 = required */
char *default_comment;
};
/******************************** FUNCTIONS *******************************/
typedef void (*read_config_callback)(const char*, const char*);
void reset_cgi_vars(void);
void cgi_init(void (*doc_header)(int), void (*doc_footer)(void), int object_options, int status_options);
void free_memory(void);
const char *get_cgi_config_location(void); /* gets location of the CGI config file to read */
const char *get_cmd_file_location(void); /* gets location of external command file to write to */
int read_cgi_config_file(const char *, read_config_callback);
int read_main_config_file(const char *);
int read_all_object_configuration_data(const char *, int);
int read_all_status_data(const char *, int);
char *unescape_newlines(char *);
void sanitize_plugin_output(char *); /* strips HTML and bad characters from plugin output */
void strip_html_brackets(char *); /* strips > and < from string */
void get_time_string(time_t *, char *, int, int); /* gets a date/time string */
void get_interval_time_string(double, char *, int); /* gets a time string for an interval of time */
const char *url_encode(const char *); /* encodes a string in proper URL format */
char *html_encode(char *, int); /* encodes a string in HTML format (for what the user sees) */
char *escape_string(const char *); /* escape string for html form usage */
void get_log_archive_to_use(int, char *, int); /* determines the name of the log archive to use */
void determine_log_rotation_times(int);
int determine_archive_to_use_from_time(time_t);
void print_extra_hostgroup_url(char *, char *);
void print_extra_servicegroup_url(char *, char *);
void display_info_table(const char *, int, authdata *);
void display_nav_table(char *, int);
void display_splunk_host_url(host *);
void display_splunk_service_url(service *);
void display_splunk_generic_url(char *, int);
void strip_splunk_query_terms(char *);
void include_ssi_files(const char *, int); /* include user-defined SSI footers/headers */
void include_ssi_file(const char *); /* include user-defined SSI footer/header */
void cgi_config_file_error(const char *);
void main_config_file_error(const char *);
void object_data_error(void);
void status_data_error(void);
void display_context_help(const char *); /* displays context-sensitive help window */
int read_file_into_lifo(char *); /* LIFO functions */
void free_lifo_memory(void);
int push_lifo(char *);
char *pop_lifo(void);
struct nagios_extcmd* extcmd_get_command_id(int);
struct nagios_extcmd* extcmd_get_command_name(const char *);
const char *extcmd_get_name(int);
NAGIOS_END_DECL
#endif