1 /************************************************************************ 2 * 3 * CGIUTILS.H - Header file for common CGI functions 4 * 5 * License: 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 ************************************************************************/ 20 21 #ifndef NAGIOS_CGIUTILS_H_INCLUDED 22 #define NAGIOS_CGIUTILS_H_INCLUDED 23 #include "lib/libnagios.h" 24 #include "logging.h" 25 #include "objects.h" 26 #include "cgiauth.h" 27 28 NAGIOS_BEGIN_DECL 29 30 /**************************** CGI REFRESH RATE ******************************/ 31 32 #define DEFAULT_REFRESH_RATE 60 /* 60 second refresh rate for CGIs */ 33 34 35 /******************************* CGI NAMES **********************************/ 36 37 #define STATUS_CGI "status.cgi" 38 #ifdef LEGACY_GRAPHICAL_CGIS 39 #define STATUSMAP_CGI "statusmap.cgi" 40 #else 41 #define STATUSMAP_CGI "../map.html" 42 #define LEGACY_STATUSMAP_CGI "statusmap.cgi" 43 #endif 44 #define STATUSWORLD_CGI "statuswrl.cgi" 45 #define COMMAND_CGI "cmd.cgi" 46 #define EXTINFO_CGI "extinfo.cgi" 47 #define SHOWLOG_CGI "showlog.cgi" 48 #define NOTIFICATIONS_CGI "notifications.cgi" 49 #define HISTORY_CGI "history.cgi" 50 #define CONFIG_CGI "config.cgi" 51 #define OUTAGES_CGI "outages.cgi" 52 #ifdef LEGACY_GRAPHICAL_CGIS 53 #define TRENDS_CGI "trends.cgi" 54 #else 55 #define TRENDS_CGI "../trends.html" 56 #define LEGACY_TRENDS_CGI "trends.cgi" 57 #endif 58 #define AVAIL_CGI "avail.cgi" 59 #define TAC_CGI "tac.cgi" 60 #define STATUSWML_CGI "statuswml.cgi" 61 #define TRACEROUTE_CGI "traceroute.cgi" 62 #ifdef LEGACY_GRAPHICAL_CGIS 63 #define HISTOGRAM_CGI "histogram.cgi" 64 #else 65 #define HISTOGRAM_CGI "../histogram.html" 66 #define LEGACY_HISTOGRAM_CGI "histogram.cgi" 67 #endif 68 #define CHECKSANITY_CGI "checksanity.cgi" 69 #define MINISTATUS_CGI "ministatus.cgi" 70 #define SUMMARY_CGI "summary.cgi" 71 72 73 /**************************** STYLE SHEET NAMES ******************************/ 74 75 #define COMMON_CSS "common.css" 76 77 #define SHOWLOG_CSS "showlog.css" 78 #define STATUS_CSS "status.css" 79 #define STATUSMAP_CSS "statusmap.css" 80 #define COMMAND_CSS "cmd.css" 81 #define EXTINFO_CSS "extinfo.css" 82 #define NOTIFICATIONS_CSS "notifications.css" 83 #define HISTORY_CSS "history.css" 84 #define CONFIG_CSS "config.css" 85 #define OUTAGES_CSS "outages.css" 86 #define TRENDS_CSS "trends.css" 87 #define AVAIL_CSS "avail.css" 88 #define TAC_CSS "tac.css" 89 #define HISTOGRAM_CSS "histogram.css" 90 #define CHECKSANITY_CSS "checksanity.css" 91 #define MINISTATUS_CSS "ministatus.css" 92 #define SUMMARY_CSS "summary.css" 93 94 /********************************* JAVASCRIPT INCLUDES **********************/ 95 #define JQUERY_JS "jquery-1.7.1.min.js" 96 97 /********************************* ICONS ************************************/ 98 99 #define STATUS_ICON_WIDTH 20 100 #define STATUS_ICON_HEIGHT 20 101 102 #define INFO_ICON "info.png" 103 #define INFO_ICON_ALT "Informational Message" 104 #define START_ICON "start.gif" 105 #define START_ICON_ALT "Program Start" 106 #define STOP_ICON "stop.gif" 107 #define STOP_ICON_ALT "Program End" 108 #define RESTART_ICON "restart.gif" 109 #define RESTART_ICON_ALT "Program Restart" 110 #define OK_ICON "recovery.png" 111 #define OK_ICON_ALT "Service Ok" 112 #define CRITICAL_ICON "critical.png" 113 #define CRITICAL_ICON_ALT "Service Critical" 114 #define WARNING_ICON "warning.png" 115 #define WARNING_ICON_ALT "Service Warning" 116 #define UNKNOWN_ICON "unknown.png" 117 #define UNKNOWN_ICON_ALT "Service Unknown" 118 #define NOTIFICATION_ICON "notify.gif" 119 #define NOTIFICATION_ICON_ALT "Service Notification" 120 #define LOG_ROTATION_ICON "logrotate.png" 121 #define LOG_ROTATION_ICON_ALT "Log Rotation" 122 #define EXTERNAL_COMMAND_ICON "command.png" 123 #define EXTERNAL_COMMAND_ICON_ALT "External Command" 124 125 #define STATUS_DETAIL_ICON "status2.gif" 126 #define STATUS_OVERVIEW_ICON "status.gif" 127 #define STATUSMAP_ICON "status3.gif" 128 #define STATUSWORLD_ICON "status4.gif" 129 #define EXTINFO_ICON "extinfo.gif" 130 #define HISTORY_ICON "history.gif" 131 #define CONTACTGROUP_ICON "contactgroup.gif" 132 #define TRENDS_ICON "trends.gif" 133 134 #define DISABLED_ICON "disabled.gif" 135 #define ENABLED_ICON "enabled.gif" 136 #define PASSIVE_ONLY_ICON "passiveonly.gif" 137 #define NOTIFICATIONS_DISABLED_ICON "ndisabled.gif" 138 #define ACKNOWLEDGEMENT_ICON "ack.gif" 139 #define REMOVE_ACKNOWLEDGEMENT_ICON "noack.gif" 140 #define COMMENT_ICON "comment.gif" 141 #define DELETE_ICON "delete.gif" 142 #define DELAY_ICON "delay.gif" 143 #define DOWNTIME_ICON "downtime.gif" 144 #define PASSIVE_ICON "passiveonly.gif" 145 #define RIGHT_ARROW_ICON "right.gif" 146 #define LEFT_ARROW_ICON "left.gif" 147 #define UP_ARROW_ICON "up.gif" 148 #define DOWN_ARROW_ICON "down.gif" 149 #define FLAPPING_ICON "flapping.gif" 150 #define SCHEDULED_DOWNTIME_ICON "downtime.gif" 151 #define EMPTY_ICON "empty.gif" 152 153 #define ACTIVE_ICON "active.gif" 154 #define ACTIVE_ICON_ALT "Active Mode" 155 #define STANDBY_ICON "standby.gif" 156 #define STANDBY_ICON_ALT "Standby Mode" 157 158 #define HOST_DOWN_ICON "critical.png" 159 #define HOST_DOWN_ICON_ALT "Host Down" 160 #define HOST_UNREACHABLE_ICON "critical.png" 161 #define HOST_UNREACHABLE_ICON_ALT "Host Unreachable" 162 #define HOST_UP_ICON "recovery.png" 163 #define HOST_UP_ICON_ALT "Host Up" 164 #define HOST_NOTIFICATION_ICON "notify.gif" 165 #define HOST_NOTIFICATION_ICON_ALT "Host Notification" 166 167 #define SERVICE_EVENT_ICON "serviceevent.gif" 168 #define SERVICE_EVENT_ICON_ALT "Service Event Handler" 169 #define HOST_EVENT_ICON "hostevent.gif" 170 #define HOST_EVENT_ICON_ALT "Host Event Handler" 171 172 #define THERM_OK_IMAGE "thermok.png" 173 #define THERM_WARNING_IMAGE "thermwarn.png" 174 #define THERM_CRITICAL_IMAGE "thermcrit.png" 175 176 #define CONFIGURATION_ICON "config.gif" 177 #define NOTES_ICON "notes.gif" 178 #define ACTION_ICON "action.gif" 179 #define DETAIL_ICON "detail.gif" 180 181 #define PARENT_TRAVERSAL_ICON "parentup.gif" 182 183 #define TAC_DISABLED_ICON "tacdisabled.png" 184 #define TAC_ENABLED_ICON "tacenabled.png" 185 186 #define ZOOM1_ICON "zoom1.gif" 187 #define ZOOM2_ICON "zoom2.gif" 188 189 #define CONTEXT_HELP_ICON1 "contexthelp1.gif" 190 #define CONTEXT_HELP_ICON2 "contexthelp2.gif" 191 192 #define SPLUNK_SMALL_WHITE_ICON "splunk1.gif" 193 #define SPLUNK_SMALL_BLACK_ICON "splunk2.gif" 194 195 #define FIRST_PAGE_ICON "b_first2.png" 196 #define LAST_PAGE_ICON "b_last2.png" 197 #define NEXT_PAGE_ICON "b_next2.png" 198 #define PREVIOUS_PAGE_ICON "b_prev2.png" 199 200 201 /********************* EXTENDED INFO CGI DISPLAY TYPES *********************/ 202 203 #define DISPLAY_PROCESS_INFO 0 204 #define DISPLAY_HOST_INFO 1 205 #define DISPLAY_SERVICE_INFO 2 206 #define DISPLAY_COMMENTS 3 207 #define DISPLAY_PERFORMANCE 4 208 #define DISPLAY_HOSTGROUP_INFO 5 209 #define DISPLAY_DOWNTIME 6 210 #define DISPLAY_SCHEDULING_QUEUE 7 211 #define DISPLAY_SERVICEGROUP_INFO 8 212 213 214 /************************ COMMAND CGI COMMAND MODES *************************/ 215 216 #define CMDMODE_NONE 0 217 #define CMDMODE_REQUEST 1 218 #define CMDMODE_COMMIT 2 219 220 221 222 /******************** HOST AND SERVICE NOTIFICATION TYPES ******************/ 223 224 #define NOTIFICATION_ALL 0 /* all service and host notifications */ 225 #define NOTIFICATION_SERVICE_ALL 1 /* all types of service notifications */ 226 #define NOTIFICATION_HOST_ALL 2 /* all types of host notifications */ 227 #define NOTIFICATION_SERVICE_WARNING 4 228 #define NOTIFICATION_SERVICE_UNKNOWN 8 229 #define NOTIFICATION_SERVICE_CRITICAL 16 230 #define NOTIFICATION_SERVICE_RECOVERY 32 231 #define NOTIFICATION_HOST_DOWN 64 232 #define NOTIFICATION_HOST_UNREACHABLE 128 233 #define NOTIFICATION_HOST_RECOVERY 256 234 #define NOTIFICATION_SERVICE_ACK 512 235 #define NOTIFICATION_HOST_ACK 1024 236 #define NOTIFICATION_SERVICE_FLAP 2048 237 #define NOTIFICATION_HOST_FLAP 4096 238 #define NOTIFICATION_SERVICE_CUSTOM 8192 239 #define NOTIFICATION_HOST_CUSTOM 16384 240 #define NOTIFICATION_SERVICE_DOWNTIME 32768 241 #define NOTIFICATION_HOST_DOWNTIME 65536 242 243 244 /********************** HOST AND SERVICE ALERT TYPES **********************/ 245 246 #define HISTORY_ALL 0 /* all service and host alert */ 247 #define HISTORY_SERVICE_ALL 1 /* all types of service alerts */ 248 #define HISTORY_HOST_ALL 2 /* all types of host alerts */ 249 #define HISTORY_SERVICE_WARNING 4 250 #define HISTORY_SERVICE_UNKNOWN 8 251 #define HISTORY_SERVICE_CRITICAL 16 252 #define HISTORY_SERVICE_RECOVERY 32 253 #define HISTORY_HOST_DOWN 64 254 #define HISTORY_HOST_UNREACHABLE 128 255 #define HISTORY_HOST_RECOVERY 256 256 257 258 /****************************** SORT TYPES *******************************/ 259 260 #define SORT_NONE 0 261 #define SORT_ASCENDING 1 262 #define SORT_DESCENDING 2 263 264 265 /***************************** SORT OPTIONS ******************************/ 266 267 #define SORT_NOTHING 0 268 #define SORT_HOSTNAME 1 269 #define SORT_SERVICENAME 2 270 #define SORT_SERVICESTATUS 3 271 #define SORT_LASTCHECKTIME 4 272 #define SORT_CURRENTATTEMPT 5 273 #define SORT_STATEDURATION 6 274 #define SORT_NEXTCHECKTIME 7 275 #define SORT_HOSTSTATUS 8 276 #define SORT_HOSTURGENCY 9 277 278 279 /****************** HOST AND SERVICE FILTER PROPERTIES *******************/ 280 281 #define HOST_SCHEDULED_DOWNTIME 1 282 #define HOST_NO_SCHEDULED_DOWNTIME 2 283 #define HOST_STATE_ACKNOWLEDGED 4 284 #define HOST_STATE_UNACKNOWLEDGED 8 285 #define HOST_CHECKS_DISABLED 16 286 #define HOST_CHECKS_ENABLED 32 287 #define HOST_EVENT_HANDLER_DISABLED 64 288 #define HOST_EVENT_HANDLER_ENABLED 128 289 #define HOST_FLAP_DETECTION_DISABLED 256 290 #define HOST_FLAP_DETECTION_ENABLED 512 291 #define HOST_IS_FLAPPING 1024 292 #define HOST_IS_NOT_FLAPPING 2048 293 #define HOST_NOTIFICATIONS_DISABLED 4096 294 #define HOST_NOTIFICATIONS_ENABLED 8192 295 #define HOST_PASSIVE_CHECKS_DISABLED 16384 296 #define HOST_PASSIVE_CHECKS_ENABLED 32768 297 #define HOST_PASSIVE_CHECK 65536 298 #define HOST_ACTIVE_CHECK 131072 299 #define HOST_HARD_STATE 262144 300 #define HOST_SOFT_STATE 524288 301 302 303 #define SERVICE_SCHEDULED_DOWNTIME 1 304 #define SERVICE_NO_SCHEDULED_DOWNTIME 2 305 #define SERVICE_STATE_ACKNOWLEDGED 4 306 #define SERVICE_STATE_UNACKNOWLEDGED 8 307 #define SERVICE_CHECKS_DISABLED 16 308 #define SERVICE_CHECKS_ENABLED 32 309 #define SERVICE_EVENT_HANDLER_DISABLED 64 310 #define SERVICE_EVENT_HANDLER_ENABLED 128 311 #define SERVICE_FLAP_DETECTION_ENABLED 256 312 #define SERVICE_FLAP_DETECTION_DISABLED 512 313 #define SERVICE_IS_FLAPPING 1024 314 #define SERVICE_IS_NOT_FLAPPING 2048 315 #define SERVICE_NOTIFICATIONS_DISABLED 4096 316 #define SERVICE_NOTIFICATIONS_ENABLED 8192 317 #define SERVICE_PASSIVE_CHECKS_DISABLED 16384 318 #define SERVICE_PASSIVE_CHECKS_ENABLED 32768 319 #define SERVICE_PASSIVE_CHECK 65536 320 #define SERVICE_ACTIVE_CHECK 131072 321 #define SERVICE_HARD_STATE 262144 322 #define SERVICE_SOFT_STATE 524288 323 324 325 /****************************** SSI TYPES ********************************/ 326 327 #define SSI_HEADER 0 328 #define SSI_FOOTER 1 329 330 331 332 /************************ CONTEXT-SENSITIVE HELP *************************/ 333 334 #define CONTEXTHELP_STATUS_DETAIL "A1" 335 #define CONTEXTHELP_STATUS_HGOVERVIEW "A2" 336 #define CONTEXTHELP_STATUS_HGSUMMARY "A3" 337 #define CONTEXTHELP_STATUS_HGGRID "A4" 338 #define CONTEXTHELP_STATUS_SVCPROBLEMS "A5" 339 #define CONTEXTHELP_STATUS_HOST_DETAIL "A6" 340 #define CONTEXTHELP_STATUS_HOSTPROBLEMS "A7" 341 #define CONTEXTHELP_STATUS_SGOVERVIEW "A8" 342 #define CONTEXTHELP_STATUS_SGSUMMARY "A9" 343 #define CONTEXTHELP_STATUS_SGGRID "A10" 344 345 #define CONTEXTHELP_TAC "B1" 346 347 #define CONTEXTHELP_MAP "C1" 348 349 #define CONTEXTHELP_LOG "D1" 350 351 #define CONTEXTHELP_HISTORY "E1" 352 353 #define CONTEXTHELP_NOTIFICATIONS "F1" 354 355 #define CONTEXTHELP_TRENDS_MENU1 "G1" 356 #define CONTEXTHELP_TRENDS_MENU2 "G2" 357 #define CONTEXTHELP_TRENDS_MENU3 "G3" 358 #define CONTEXTHELP_TRENDS_MENU4 "G4" 359 #define CONTEXTHELP_TRENDS_HOST "G5" 360 #define CONTEXTHELP_TRENDS_SERVICE "G6" 361 362 #define CONTEXTHELP_AVAIL_MENU1 "H1" 363 #define CONTEXTHELP_AVAIL_MENU2 "H2" 364 #define CONTEXTHELP_AVAIL_MENU3 "H3" 365 #define CONTEXTHELP_AVAIL_MENU4 "H4" 366 #define CONTEXTHELP_AVAIL_MENU5 "H5" 367 #define CONTEXTHELP_AVAIL_HOSTGROUP "H6" 368 #define CONTEXTHELP_AVAIL_HOST "H7" 369 #define CONTEXTHELP_AVAIL_SERVICE "H8" 370 #define CONTEXTHELP_AVAIL_SERVICEGROUP "H9" 371 372 #define CONTEXTHELP_EXT_HOST "I1" 373 #define CONTEXTHELP_EXT_SERVICE "I2" 374 #define CONTEXTHELP_EXT_HOSTGROUP "I3" 375 #define CONTEXTHELP_EXT_PROCESS "I4" 376 #define CONTEXTHELP_EXT_PERFORMANCE "I5" 377 #define CONTEXTHELP_EXT_COMMENTS "I6" 378 #define CONTEXTHELP_EXT_DOWNTIME "I7" 379 #define CONTEXTHELP_EXT_QUEUE "I8" 380 #define CONTEXTHELP_EXT_SERVICEGROUP "I9" 381 382 #define CONTEXTHELP_CMD_INPUT "J1" 383 #define CONTEXTHELP_CMD_COMMIT "J2" 384 385 #define CONTEXTHELP_OUTAGES "K1" 386 387 #define CONTEXTHELP_CONFIG_MENU "L1" 388 #define CONTEXTHELP_CONFIG_HOSTS "L2" 389 #define CONTEXTHELP_CONFIG_HOSTDEPENDENCIES "L3" 390 #define CONTEXTHELP_CONFIG_HOSTESCALATIONS "L4" 391 #define CONTEXTHELP_CONFIG_HOSTGROUPS "L5" 392 #define CONTEXTHELP_CONFIG_HOSTGROUPESCALATIONS "L6" 393 #define CONTEXTHELP_CONFIG_SERVICES "L7" 394 #define CONTEXTHELP_CONFIG_SERVICEDEPENDENCIES "L8" 395 #define CONTEXTHELP_CONFIG_SERVICEESCALATIONS "L9" 396 #define CONTEXTHELP_CONFIG_CONTACTS "L10" 397 #define CONTEXTHELP_CONFIG_CONTACTGROUPS "L11" 398 #define CONTEXTHELP_CONFIG_TIMEPERIODS "L12" 399 #define CONTEXTHELP_CONFIG_COMMANDS "L13" 400 #define CONTEXTHELP_CONFIG_HOSTEXTINFO "L14" 401 #define CONTEXTHELP_CONFIG_SERVICEEXTINFO "L15" 402 #define CONTEXTHELP_CONFIG_SERVICEGROUPS "L16" 403 404 #define CONTEXTHELP_HISTOGRAM_MENU1 "M1" 405 #define CONTEXTHELP_HISTOGRAM_MENU2 "M2" 406 #define CONTEXTHELP_HISTOGRAM_MENU3 "M3" 407 #define CONTEXTHELP_HISTOGRAM_MENU4 "M4" 408 #define CONTEXTHELP_HISTOGRAM_HOST "M5" 409 #define CONTEXTHELP_HISTOGRAM_SERVICE "M6" 410 411 #define CONTEXTHELP_SUMMARY_MENU "N1" 412 #define CONTEXTHELP_SUMMARY_RECENT_ALERTS "N2" 413 #define CONTEXTHELP_SUMMARY_ALERT_TOTALS "N3" 414 #define CONTEXTHELP_SUMMARY_HOSTGROUP_ALERT_TOTALS "N4" 415 #define CONTEXTHELP_SUMMARY_HOST_ALERT_TOTALS "N5" 416 #define CONTEXTHELP_SUMMARY_SERVICE_ALERT_TOTALS "N6" 417 #define CONTEXTHELP_SUMMARY_ALERT_PRODUCERS "N7" 418 #define CONTEXTHELP_SUMMARY_SERVICEGROUP_ALERT_TOTALS "N8" 419 420 421 /************************** LIFO RETURN CODES ****************************/ 422 423 #define LIFO_OK 0 424 #define LIFO_ERROR_MEMORY 1 425 #define LIFO_ERROR_FILE 2 426 #define LIFO_ERROR_DATA 3 427 428 429 430 431 432 /*************************** DATA STRUCTURES *****************************/ 433 434 /* LIFO data structure */ 435 typedef struct lifo_struct { 436 char *data; 437 struct lifo_struct *next; 438 } lifo; 439 440 /******************************** FUNCTIONS *******************************/ 441 442 void reset_cgi_vars(void); 443 void cgi_init(void (*doc_header)(int), void (*doc_footer)(void), int object_options, int status_options); 444 void free_memory(void); 445 446 const char *get_cgi_config_location(void); /* gets location of the CGI config file to read */ 447 const char *get_cmd_file_location(void); /* gets location of external command file to write to */ 448 449 int read_cgi_config_file(const char *); 450 int read_main_config_file(const char *); 451 int read_all_object_configuration_data(const char *, int); 452 int read_all_status_data(const char *, int); 453 454 char *unescape_newlines(char *); 455 void sanitize_plugin_output(char *); /* strips HTML and bad characters from plugin output */ 456 void strip_html_brackets(char *); /* strips > and < from string */ 457 458 void get_time_string(time_t *, char *, int, int); /* gets a date/time string */ 459 void get_interval_time_string(double, char *, int); /* gets a time string for an interval of time */ 460 461 const char *url_encode(const char *); /* encodes a string in proper URL format */ 462 char *html_encode(char *, int); /* encodes a string in HTML format (for what the user sees) */ 463 char *escape_string(const char *); /* escape string for html form usage */ 464 465 void get_log_archive_to_use(int, char *, int); /* determines the name of the log archive to use */ 466 void determine_log_rotation_times(int); 467 int determine_archive_to_use_from_time(time_t); 468 469 void print_extra_hostgroup_url(char *, char *); 470 void print_extra_servicegroup_url(char *, char *); 471 472 void display_info_table(const char *, int, authdata *); 473 void display_nav_table(char *, int); 474 475 void display_splunk_host_url(host *); 476 void display_splunk_service_url(service *); 477 void display_splunk_generic_url(char *, int); 478 void strip_splunk_query_terms(char *); 479 480 void include_ssi_files(const char *, int); /* include user-defined SSI footers/headers */ 481 void include_ssi_file(const char *); /* include user-defined SSI footer/header */ 482 483 void cgi_config_file_error(const char *); 484 void main_config_file_error(const char *); 485 void object_data_error(void); 486 void status_data_error(void); 487 488 void display_context_help(const char *); /* displays context-sensitive help window */ 489 490 int read_file_into_lifo(char *); /* LIFO functions */ 491 void free_lifo_memory(void); 492 int push_lifo(char *); 493 char *pop_lifo(void); 494 495 NAGIOS_END_DECL 496 #endif 497