/************************************************************************ * * 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