344 lines
13 KiB
C
344 lines
13 KiB
C
/************************************************************************
|
|
*
|
|
* MACROS.H - Common macro functions
|
|
* Written By: Ethan Galstad (egalstad@nagios.org)
|
|
*
|
|
* 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_MACROS_H_INCLUDED
|
|
#define NAGIOS_MACROS_H_INCLUDED
|
|
|
|
#include "common.h"
|
|
#include "objects.h"
|
|
|
|
|
|
|
|
/****************** LENGTH LIMITATIONS ****************/
|
|
|
|
#define MAX_COMMAND_ARGUMENTS 32 /* maximum number of $ARGx$ macros */
|
|
|
|
|
|
/****************** MACRO DEFINITIONS *****************/
|
|
|
|
#define MACRO_ENV_VAR_PREFIX "NAGIOS_"
|
|
|
|
#define MAX_USER_MACROS 256 /* maximum number of $USERx$ macros */
|
|
|
|
#define MACRO_X_COUNT 157 /* size of macro_x[] array */
|
|
|
|
NAGIOS_BEGIN_DECL
|
|
|
|
struct nagios_macros {
|
|
char *x[MACRO_X_COUNT];
|
|
char *argv[MAX_COMMAND_ARGUMENTS];
|
|
char *contactaddress[MAX_CONTACT_ADDRESSES];
|
|
char *ondemand;
|
|
host *host_ptr;
|
|
hostgroup *hostgroup_ptr;
|
|
service *service_ptr;
|
|
servicegroup *servicegroup_ptr;
|
|
contact *contact_ptr;
|
|
contactgroup *contactgroup_ptr;
|
|
customvariablesmember *custom_host_vars;
|
|
customvariablesmember *custom_service_vars;
|
|
customvariablesmember *custom_contact_vars;
|
|
};
|
|
typedef struct nagios_macros nagios_macros;
|
|
|
|
|
|
|
|
#define MACRO_HOSTNAME 0
|
|
#define MACRO_HOSTALIAS 1
|
|
#define MACRO_HOSTADDRESS 2
|
|
#define MACRO_SERVICEDESC 3
|
|
#define MACRO_SERVICESTATE 4
|
|
#define MACRO_SERVICESTATEID 5
|
|
#define MACRO_SERVICEATTEMPT 6
|
|
#define MACRO_LONGDATETIME 7
|
|
#define MACRO_SHORTDATETIME 8
|
|
#define MACRO_DATE 9
|
|
#define MACRO_TIME 10
|
|
#define MACRO_TIMET 11
|
|
#define MACRO_LASTHOSTCHECK 12
|
|
#define MACRO_LASTSERVICECHECK 13
|
|
#define MACRO_LASTHOSTSTATECHANGE 14
|
|
#define MACRO_LASTSERVICESTATECHANGE 15
|
|
#define MACRO_HOSTOUTPUT 16
|
|
#define MACRO_SERVICEOUTPUT 17
|
|
#define MACRO_HOSTPERFDATA 18
|
|
#define MACRO_SERVICEPERFDATA 19
|
|
#define MACRO_CONTACTNAME 20
|
|
#define MACRO_CONTACTALIAS 21
|
|
#define MACRO_CONTACTEMAIL 22
|
|
#define MACRO_CONTACTPAGER 23
|
|
#define MACRO_ADMINEMAIL 24
|
|
#define MACRO_ADMINPAGER 25
|
|
#define MACRO_HOSTSTATE 26
|
|
#define MACRO_HOSTSTATEID 27
|
|
#define MACRO_HOSTATTEMPT 28
|
|
#define MACRO_NOTIFICATIONTYPE 29
|
|
#define MACRO_NOTIFICATIONNUMBER 30 /* deprecated - see HOSTNOTIFICATIONNUMBER and SERVICENOTIFICATIONNUMBER macros */
|
|
#define MACRO_HOSTEXECUTIONTIME 31
|
|
#define MACRO_SERVICEEXECUTIONTIME 32
|
|
#define MACRO_HOSTLATENCY 33
|
|
#define MACRO_SERVICELATENCY 34
|
|
#define MACRO_HOSTDURATION 35
|
|
#define MACRO_SERVICEDURATION 36
|
|
#define MACRO_HOSTDURATIONSEC 37
|
|
#define MACRO_SERVICEDURATIONSEC 38
|
|
#define MACRO_HOSTDOWNTIME 39
|
|
#define MACRO_SERVICEDOWNTIME 40
|
|
#define MACRO_HOSTSTATETYPE 41
|
|
#define MACRO_SERVICESTATETYPE 42
|
|
#define MACRO_HOSTPERCENTCHANGE 43
|
|
#define MACRO_SERVICEPERCENTCHANGE 44
|
|
#define MACRO_HOSTGROUPNAME 45
|
|
#define MACRO_HOSTGROUPALIAS 46
|
|
#define MACRO_SERVICEGROUPNAME 47
|
|
#define MACRO_SERVICEGROUPALIAS 48
|
|
#define MACRO_HOSTACKAUTHOR 49
|
|
#define MACRO_HOSTACKCOMMENT 50
|
|
#define MACRO_SERVICEACKAUTHOR 51
|
|
#define MACRO_SERVICEACKCOMMENT 52
|
|
#define MACRO_LASTSERVICEOK 53
|
|
#define MACRO_LASTSERVICEWARNING 54
|
|
#define MACRO_LASTSERVICEUNKNOWN 55
|
|
#define MACRO_LASTSERVICECRITICAL 56
|
|
#define MACRO_LASTHOSTUP 57
|
|
#define MACRO_LASTHOSTDOWN 58
|
|
#define MACRO_LASTHOSTUNREACHABLE 59
|
|
#define MACRO_SERVICECHECKCOMMAND 60
|
|
#define MACRO_HOSTCHECKCOMMAND 61
|
|
#define MACRO_MAINCONFIGFILE 62
|
|
#define MACRO_STATUSDATAFILE 63
|
|
#define MACRO_HOSTDISPLAYNAME 64
|
|
#define MACRO_SERVICEDISPLAYNAME 65
|
|
#define MACRO_RETENTIONDATAFILE 66
|
|
#define MACRO_OBJECTCACHEFILE 67
|
|
#define MACRO_TEMPFILE 68
|
|
#define MACRO_LOGFILE 69
|
|
#define MACRO_RESOURCEFILE 70
|
|
#define MACRO_COMMANDFILE 71
|
|
#define MACRO_HOSTPERFDATAFILE 72
|
|
#define MACRO_SERVICEPERFDATAFILE 73
|
|
#define MACRO_HOSTACTIONURL 74
|
|
#define MACRO_HOSTNOTESURL 75
|
|
#define MACRO_HOSTNOTES 76
|
|
#define MACRO_SERVICEACTIONURL 77
|
|
#define MACRO_SERVICENOTESURL 78
|
|
#define MACRO_SERVICENOTES 79
|
|
#define MACRO_TOTALHOSTSUP 80
|
|
#define MACRO_TOTALHOSTSDOWN 81
|
|
#define MACRO_TOTALHOSTSUNREACHABLE 82
|
|
#define MACRO_TOTALHOSTSDOWNUNHANDLED 83
|
|
#define MACRO_TOTALHOSTSUNREACHABLEUNHANDLED 84
|
|
#define MACRO_TOTALHOSTPROBLEMS 85
|
|
#define MACRO_TOTALHOSTPROBLEMSUNHANDLED 86
|
|
#define MACRO_TOTALSERVICESOK 87
|
|
#define MACRO_TOTALSERVICESWARNING 88
|
|
#define MACRO_TOTALSERVICESCRITICAL 89
|
|
#define MACRO_TOTALSERVICESUNKNOWN 90
|
|
#define MACRO_TOTALSERVICESWARNINGUNHANDLED 91
|
|
#define MACRO_TOTALSERVICESCRITICALUNHANDLED 92
|
|
#define MACRO_TOTALSERVICESUNKNOWNUNHANDLED 93
|
|
#define MACRO_TOTALSERVICEPROBLEMS 94
|
|
#define MACRO_TOTALSERVICEPROBLEMSUNHANDLED 95
|
|
#define MACRO_PROCESSSTARTTIME 96
|
|
#define MACRO_HOSTCHECKTYPE 97
|
|
#define MACRO_SERVICECHECKTYPE 98
|
|
#define MACRO_LONGHOSTOUTPUT 99
|
|
#define MACRO_LONGSERVICEOUTPUT 100
|
|
#define MACRO_TEMPPATH 101
|
|
#define MACRO_HOSTNOTIFICATIONNUMBER 102
|
|
#define MACRO_SERVICENOTIFICATIONNUMBER 103
|
|
#define MACRO_HOSTNOTIFICATIONID 104
|
|
#define MACRO_SERVICENOTIFICATIONID 105
|
|
#define MACRO_HOSTEVENTID 106
|
|
#define MACRO_LASTHOSTEVENTID 107
|
|
#define MACRO_SERVICEEVENTID 108
|
|
#define MACRO_LASTSERVICEEVENTID 109
|
|
#define MACRO_HOSTGROUPNAMES 110
|
|
#define MACRO_SERVICEGROUPNAMES 111
|
|
#define MACRO_HOSTACKAUTHORNAME 112
|
|
#define MACRO_HOSTACKAUTHORALIAS 113
|
|
#define MACRO_SERVICEACKAUTHORNAME 114
|
|
#define MACRO_SERVICEACKAUTHORALIAS 115
|
|
#define MACRO_MAXHOSTATTEMPTS 116
|
|
#define MACRO_MAXSERVICEATTEMPTS 117
|
|
#define MACRO_SERVICEISVOLATILE 118
|
|
#define MACRO_TOTALHOSTSERVICES 119
|
|
#define MACRO_TOTALHOSTSERVICESOK 120
|
|
#define MACRO_TOTALHOSTSERVICESWARNING 121
|
|
#define MACRO_TOTALHOSTSERVICESUNKNOWN 122
|
|
#define MACRO_TOTALHOSTSERVICESCRITICAL 123
|
|
#define MACRO_HOSTGROUPNOTES 124
|
|
#define MACRO_HOSTGROUPNOTESURL 125
|
|
#define MACRO_HOSTGROUPACTIONURL 126
|
|
#define MACRO_SERVICEGROUPNOTES 127
|
|
#define MACRO_SERVICEGROUPNOTESURL 128
|
|
#define MACRO_SERVICEGROUPACTIONURL 129
|
|
#define MACRO_HOSTGROUPMEMBERS 130
|
|
#define MACRO_SERVICEGROUPMEMBERS 131
|
|
#define MACRO_CONTACTGROUPNAME 132
|
|
#define MACRO_CONTACTGROUPALIAS 133
|
|
#define MACRO_CONTACTGROUPMEMBERS 134
|
|
#define MACRO_CONTACTGROUPNAMES 135
|
|
#define MACRO_NOTIFICATIONRECIPIENTS 136
|
|
#define MACRO_NOTIFICATIONISESCALATED 137
|
|
#define MACRO_NOTIFICATIONAUTHOR 138
|
|
#define MACRO_NOTIFICATIONAUTHORNAME 139
|
|
#define MACRO_NOTIFICATIONAUTHORALIAS 140
|
|
#define MACRO_NOTIFICATIONCOMMENT 141
|
|
#define MACRO_EVENTSTARTTIME 142
|
|
#define MACRO_HOSTPROBLEMID 143
|
|
#define MACRO_LASTHOSTPROBLEMID 144
|
|
#define MACRO_SERVICEPROBLEMID 145
|
|
#define MACRO_LASTSERVICEPROBLEMID 146
|
|
#define MACRO_ISVALIDTIME 147
|
|
#define MACRO_NEXTVALIDTIME 148
|
|
#define MACRO_LASTHOSTSTATE 149
|
|
#define MACRO_LASTHOSTSTATEID 150
|
|
#define MACRO_LASTSERVICESTATE 151
|
|
#define MACRO_LASTSERVICESTATEID 152
|
|
#define MACRO_HOSTIMPORTANCE 153
|
|
#define MACRO_SERVICEIMPORTANCE 154
|
|
#define MACRO_HOSTANDSERVICESIMPORTANCE 155
|
|
#define MACRO_HOSTGROUPMEMBERADDRESSES 156
|
|
|
|
|
|
/************* MACRO CLEANING OPTIONS *****************/
|
|
|
|
#define STRIP_ILLEGAL_MACRO_CHARS 1
|
|
#define ESCAPE_MACRO_CHARS 2
|
|
#define URL_ENCODE_MACRO_CHARS 4
|
|
|
|
|
|
|
|
/****************** MACRO FUNCTIONS ******************/
|
|
|
|
nagios_macros *get_global_macros(void);
|
|
|
|
/*
|
|
* Replace macros with their actual values
|
|
* This function modifies the global_macros struct and is thus
|
|
* not thread-safe.
|
|
*/
|
|
int process_macros(char *, char **, int);
|
|
|
|
/* thread-safe version of the above */
|
|
int process_macros_r(nagios_macros *mac, char *, char **, int);
|
|
|
|
/* cleans macros characters before insertion into output string */
|
|
char *clean_macro_chars(char *, int);
|
|
|
|
/*
|
|
* These functions updates **macros with the values from
|
|
* their respective object type.
|
|
*/
|
|
|
|
int grab_service_macros(service *);
|
|
int grab_host_macros(host *);
|
|
int grab_servicegroup_macros(servicegroup *);
|
|
int grab_hostgroup_macros(hostgroup *);
|
|
int grab_contact_macros(contact *);
|
|
|
|
int grab_macro_value(char *, char **, int *, int *);
|
|
int grab_macrox_value(int, char *, char *, char **, int *);
|
|
int grab_custom_macro_value(char *, char *, char *, char **);
|
|
int grab_datetime_macro(int, char *, char *, char **);
|
|
int grab_standard_host_macro(int, host *, char **, int *);
|
|
int grab_standard_hostgroup_macro(int, hostgroup *, char **);
|
|
int grab_standard_service_macro(int, service *, char **, int *);
|
|
int grab_standard_servicegroup_macro(int, servicegroup *, char **);
|
|
int grab_standard_contact_macro(int, contact *, char **);
|
|
int grab_contact_address_macro(int, contact *, char **);
|
|
int grab_standard_contactgroup_macro(int, contactgroup *, char **);
|
|
int grab_custom_object_macro(char *, customvariablesmember *, char **);
|
|
|
|
/* thread-safe version of the above */
|
|
int grab_service_macros_r(nagios_macros *mac, service *);
|
|
int grab_host_macros_r(nagios_macros *mac, host *);
|
|
int grab_servicegroup_macros_r(nagios_macros *mac, servicegroup *);
|
|
int grab_hostgroup_macros_r(nagios_macros *mac, hostgroup *);
|
|
int grab_contact_macros_r(nagios_macros *mac, contact *);
|
|
|
|
int grab_argv_macros_r(nagios_macros *mac, char *check_command);
|
|
|
|
int grab_macro_value_r(nagios_macros *mac, char *, char **, int *, int *);
|
|
int grab_macrox_value_r(nagios_macros *mac, int, char *, char *, char **, int *);
|
|
int grab_custom_macro_value_r(nagios_macros *mac, char *, char *, char *, char **);
|
|
int grab_datetime_macro_r(nagios_macros *mac, int, char *, char *, char **);
|
|
int grab_standard_host_macro_r(nagios_macros *mac, int, host *, char **, int *);
|
|
int grab_standard_hostgroup_macro_r(nagios_macros *mac, int, hostgroup *, char **);
|
|
int grab_standard_service_macro_r(nagios_macros *mac, int, service *, char **, int *);
|
|
int grab_standard_servicegroup_macro_r(nagios_macros *mac, int, servicegroup *, char **);
|
|
int grab_standard_contact_macro_r(nagios_macros *mac, int, contact *, char **);
|
|
int grab_custom_object_macro_r(nagios_macros *mac, char *, customvariablesmember *, char **);
|
|
|
|
|
|
char *get_url_encoded_string(char *); /* URL encode a string */
|
|
|
|
int init_macros(void);
|
|
int init_macrox_names(void);
|
|
int free_macrox_names(void);
|
|
|
|
extern void copy_constant_macros(char **dest);
|
|
|
|
/* clear macros */
|
|
int clear_argv_macros(void);
|
|
int clear_volatile_macros(void);
|
|
int clear_host_macros(void);
|
|
int clear_service_macros(void);
|
|
int clear_hostgroup_macros(void);
|
|
int clear_servicegroup_macros(void);
|
|
int clear_contact_macros(void);
|
|
int clear_contactgroup_macros(void);
|
|
int clear_summary_macros(void);
|
|
|
|
/* thread-safe version of the above */
|
|
int clear_argv_macros_r(nagios_macros *mac);
|
|
int clear_volatile_macros_r(nagios_macros *mac);
|
|
int clear_host_macros_r(nagios_macros *mac);
|
|
int clear_service_macros_r(nagios_macros *mac);
|
|
int clear_hostgroup_macros_r(nagios_macros *mac);
|
|
int clear_servicegroup_macros_r(nagios_macros *mac);
|
|
int clear_contact_macros_r(nagios_macros *mac);
|
|
int clear_contactgroup_macros_r(nagios_macros *mac);
|
|
int clear_summary_macros_r(nagios_macros *mac);
|
|
int clear_datetime_macros_r(nagios_macros *mac);
|
|
|
|
|
|
#ifndef NSCGI
|
|
int set_all_macro_environment_vars(int);
|
|
int set_macrox_environment_vars(int);
|
|
int set_argv_macro_environment_vars(int);
|
|
int set_custom_macro_environment_vars(int);
|
|
int set_contact_address_environment_vars(int);
|
|
int set_macro_environment_var(char *, char *, int);
|
|
|
|
/* thread-safe version of the above */
|
|
int set_all_macro_environment_vars_r(nagios_macros *mac, int);
|
|
int set_macrox_environment_vars_r(nagios_macros *mac, int);
|
|
int set_argv_macro_environment_vars_r(nagios_macros *mac, int);
|
|
int set_custom_macro_environment_vars_r(nagios_macros *mac, int);
|
|
int set_contact_address_environment_vars_r(nagios_macros *mac, int);
|
|
|
|
#endif
|
|
|
|
NAGIOS_END_DECL
|
|
#endif
|