59
char *config_file=NULL;
61
char *command_file=NULL;
64
char *check_result_path=NULL;
66
char *log_archive_path=NULL;
67
char *p1_file=NULL; /**** EMBEDDED PERL ****/
68
char *auth_file=NULL; /**** EMBEDDED PERL INTERPRETER AUTH FILE ****/
69
char *nagios_user=NULL;
70
char *nagios_group=NULL;
72
extern char *macro_x[MACRO_X_COUNT];
74
char *global_host_event_handler=NULL;
75
char *global_service_event_handler=NULL;
76
command *global_host_event_handler_ptr=NULL;
77
command *global_service_event_handler_ptr=NULL;
79
char *ocsp_command=NULL;
80
char *ochp_command=NULL;
81
command *ocsp_command_ptr=NULL;
82
command *ochp_command_ptr=NULL;
84
char *illegal_object_chars=NULL;
85
char *illegal_output_chars=NULL;
87
int use_regexp_matches=FALSE;
88
int use_true_regexp_matching=FALSE;
90
int use_syslog=DEFAULT_USE_SYSLOG;
91
int log_notifications=DEFAULT_NOTIFICATION_LOGGING;
92
int log_service_retries=DEFAULT_LOG_SERVICE_RETRIES;
93
int log_host_retries=DEFAULT_LOG_HOST_RETRIES;
94
int log_event_handlers=DEFAULT_LOG_EVENT_HANDLERS;
95
int log_initial_states=DEFAULT_LOG_INITIAL_STATES;
96
int log_external_commands=DEFAULT_LOG_EXTERNAL_COMMANDS;
97
int log_passive_checks=DEFAULT_LOG_PASSIVE_CHECKS;
99
unsigned long logging_options=0;
100
unsigned long syslog_options=0;
102
int service_check_timeout=DEFAULT_SERVICE_CHECK_TIMEOUT;
103
int host_check_timeout=DEFAULT_HOST_CHECK_TIMEOUT;
104
int event_handler_timeout=DEFAULT_EVENT_HANDLER_TIMEOUT;
105
int notification_timeout=DEFAULT_NOTIFICATION_TIMEOUT;
106
int ocsp_timeout=DEFAULT_OCSP_TIMEOUT;
107
int ochp_timeout=DEFAULT_OCHP_TIMEOUT;
109
double sleep_time=DEFAULT_SLEEP_TIME;
110
int interval_length=DEFAULT_INTERVAL_LENGTH;
111
int service_inter_check_delay_method=ICD_SMART;
112
int host_inter_check_delay_method=ICD_SMART;
113
int service_interleave_factor_method=ILF_SMART;
114
int max_host_check_spread=DEFAULT_HOST_CHECK_SPREAD;
115
int max_service_check_spread=DEFAULT_SERVICE_CHECK_SPREAD;
117
int command_check_interval=DEFAULT_COMMAND_CHECK_INTERVAL;
118
int check_reaper_interval=DEFAULT_CHECK_REAPER_INTERVAL;
119
int max_check_reaper_time=DEFAULT_MAX_REAPER_TIME;
120
int service_freshness_check_interval=DEFAULT_FRESHNESS_CHECK_INTERVAL;
121
int host_freshness_check_interval=DEFAULT_FRESHNESS_CHECK_INTERVAL;
122
int auto_rescheduling_interval=DEFAULT_AUTO_RESCHEDULING_INTERVAL;
124
int check_external_commands=DEFAULT_CHECK_EXTERNAL_COMMANDS;
125
int check_orphaned_services=DEFAULT_CHECK_ORPHANED_SERVICES;
126
int check_orphaned_hosts=DEFAULT_CHECK_ORPHANED_HOSTS;
127
int check_service_freshness=DEFAULT_CHECK_SERVICE_FRESHNESS;
128
int check_host_freshness=DEFAULT_CHECK_HOST_FRESHNESS;
129
int auto_reschedule_checks=DEFAULT_AUTO_RESCHEDULE_CHECKS;
130
int auto_rescheduling_window=DEFAULT_AUTO_RESCHEDULING_WINDOW;
132
int additional_freshness_latency=DEFAULT_ADDITIONAL_FRESHNESS_LATENCY;
134
int check_for_updates=DEFAULT_CHECK_FOR_UPDATES;
135
int bare_update_check=DEFAULT_BARE_UPDATE_CHECK;
136
time_t last_update_check=0L;
137
unsigned long update_uid=0L;
138
int update_available=FALSE;
139
char *last_program_version=NULL;
140
char *new_program_version=NULL;
142
time_t last_command_check=0L;
143
time_t last_command_status_update=0L;
144
time_t last_log_rotation=0L;
146
int use_aggressive_host_checking=DEFAULT_AGGRESSIVE_HOST_CHECKING;
147
unsigned long cached_host_check_horizon=DEFAULT_CACHED_HOST_CHECK_HORIZON;
148
unsigned long cached_service_check_horizon=DEFAULT_CACHED_SERVICE_CHECK_HORIZON;
149
int enable_predictive_host_dependency_checks=DEFAULT_ENABLE_PREDICTIVE_HOST_DEPENDENCY_CHECKS;
150
int enable_predictive_service_dependency_checks=DEFAULT_ENABLE_PREDICTIVE_SERVICE_DEPENDENCY_CHECKS;
152
int soft_state_dependencies=FALSE;
154
int retain_state_information=FALSE;
155
int retention_update_interval=DEFAULT_RETENTION_UPDATE_INTERVAL;
156
int use_retained_program_state=TRUE;
157
int use_retained_scheduling_info=FALSE;
158
int retention_scheduling_horizon=DEFAULT_RETENTION_SCHEDULING_HORIZON;
159
unsigned long modified_host_process_attributes=MODATTR_NONE;
160
unsigned long modified_service_process_attributes=MODATTR_NONE;
161
unsigned long retained_host_attribute_mask=0L;
162
unsigned long retained_service_attribute_mask=0L;
163
unsigned long retained_contact_host_attribute_mask=0L;
164
unsigned long retained_contact_service_attribute_mask=0L;
165
unsigned long retained_process_host_attribute_mask=0L;
166
unsigned long retained_process_service_attribute_mask=0L;
168
unsigned long next_comment_id=0L;
169
unsigned long next_downtime_id=0L;
170
unsigned long next_event_id=0L;
171
unsigned long next_problem_id=0L;
172
unsigned long next_notification_id=0L;
174
int log_rotation_method=LOG_ROTATION_NONE;
176
int sigshutdown=FALSE;
177
int sigrestart=FALSE;
178
char *sigs[35]={"EXIT","HUP","INT","QUIT","ILL","TRAP","ABRT","BUS","FPE","KILL","USR1","SEGV","USR2","PIPE","ALRM","TERM","STKFLT","CHLD","CONT","STOP","TSTP","TTIN","TTOU","URG","XCPU","XFSZ","VTALRM","PROF","WINCH","IO","PWR","UNUSED","ZERR","DEBUG",(char *)NULL};
179
int caught_signal=FALSE;
182
int restarting=FALSE;
184
int verify_config=FALSE;
185
int verify_object_relationships=TRUE;
186
int verify_circular_paths=TRUE;
187
int test_scheduling=FALSE;
188
int precache_objects=FALSE;
189
int use_precached_objects=FALSE;
191
int daemon_mode=FALSE;
192
int daemon_dumps_core=TRUE;
194
int max_parallel_service_checks=DEFAULT_MAX_PARALLEL_SERVICE_CHECKS;
195
int currently_running_service_checks=0;
196
int currently_running_host_checks=0;
198
time_t program_start=0L;
199
time_t event_start=0L;
201
int enable_notifications=TRUE;
202
int execute_service_checks=TRUE;
203
int accept_passive_service_checks=TRUE;
204
int execute_host_checks=TRUE;
205
int accept_passive_host_checks=TRUE;
206
int enable_event_handlers=TRUE;
207
int obsess_over_services=FALSE;
208
int obsess_over_hosts=FALSE;
209
int enable_failure_prediction=TRUE;
211
int translate_passive_host_checks=DEFAULT_TRANSLATE_PASSIVE_HOST_CHECKS;
212
int passive_host_checks_are_soft=DEFAULT_PASSIVE_HOST_CHECKS_SOFT;
214
int aggregate_status_updates=TRUE;
215
int status_update_interval=DEFAULT_STATUS_UPDATE_INTERVAL;
217
int time_change_threshold=DEFAULT_TIME_CHANGE_THRESHOLD;
219
unsigned long event_broker_options=BROKER_NOTHING;
221
int process_performance_data=DEFAULT_PROCESS_PERFORMANCE_DATA;
223
int enable_flap_detection=DEFAULT_ENABLE_FLAP_DETECTION;
225
double low_service_flap_threshold=DEFAULT_LOW_SERVICE_FLAP_THRESHOLD;
226
double high_service_flap_threshold=DEFAULT_HIGH_SERVICE_FLAP_THRESHOLD;
227
double low_host_flap_threshold=DEFAULT_LOW_HOST_FLAP_THRESHOLD;
228
double high_host_flap_threshold=DEFAULT_HIGH_HOST_FLAP_THRESHOLD;
230
int use_large_installation_tweaks=DEFAULT_USE_LARGE_INSTALLATION_TWEAKS;
231
int enable_environment_macros=TRUE;
232
int free_child_process_memory=-1;
233
int child_processes_fork_twice=-1;
235
int enable_embedded_perl=DEFAULT_ENABLE_EMBEDDED_PERL;
236
int use_embedded_perl_implicitly=DEFAULT_USE_EMBEDDED_PERL_IMPLICITLY;
237
int embedded_perl_initialized=FALSE;
239
int date_format=DATE_FORMAT_US;
240
char *use_timezone=NULL;
59
char *config_file = NULL;
60
char *log_file = NULL;
61
char *command_file = NULL;
62
char *temp_file = NULL;
63
char *temp_path = NULL;
64
char *check_result_path = NULL;
65
char *lock_file = NULL;
66
char *log_archive_path = NULL;
67
char *p1_file = NULL; /**** EMBEDDED PERL ****/
68
char *auth_file = NULL; /**** EMBEDDED PERL INTERPRETER AUTH FILE ****/
69
char *nagios_user = NULL;
70
char *nagios_group = NULL;
72
char *global_host_event_handler = NULL;
73
char *global_service_event_handler = NULL;
74
command *global_host_event_handler_ptr = NULL;
75
command *global_service_event_handler_ptr = NULL;
77
char *ocsp_command = NULL;
78
char *ochp_command = NULL;
79
command *ocsp_command_ptr = NULL;
80
command *ochp_command_ptr = NULL;
82
char *illegal_object_chars = NULL;
83
char *illegal_output_chars = NULL;
85
int use_regexp_matches = FALSE;
86
int use_true_regexp_matching = FALSE;
88
int use_syslog = DEFAULT_USE_SYSLOG;
89
int log_notifications = DEFAULT_NOTIFICATION_LOGGING;
90
int log_service_retries = DEFAULT_LOG_SERVICE_RETRIES;
91
int log_host_retries = DEFAULT_LOG_HOST_RETRIES;
92
int log_event_handlers = DEFAULT_LOG_EVENT_HANDLERS;
93
int log_initial_states = DEFAULT_LOG_INITIAL_STATES;
94
int log_external_commands = DEFAULT_LOG_EXTERNAL_COMMANDS;
95
int log_passive_checks = DEFAULT_LOG_PASSIVE_CHECKS;
97
unsigned long logging_options = 0;
98
unsigned long syslog_options = 0;
100
int service_check_timeout = DEFAULT_SERVICE_CHECK_TIMEOUT;
101
int service_check_timeout_state=STATE_CRITICAL;
102
int host_check_timeout = DEFAULT_HOST_CHECK_TIMEOUT;
103
int event_handler_timeout = DEFAULT_EVENT_HANDLER_TIMEOUT;
104
int notification_timeout = DEFAULT_NOTIFICATION_TIMEOUT;
105
int ocsp_timeout = DEFAULT_OCSP_TIMEOUT;
106
int ochp_timeout = DEFAULT_OCHP_TIMEOUT;
108
double sleep_time = DEFAULT_SLEEP_TIME;
109
int interval_length = DEFAULT_INTERVAL_LENGTH;
110
int service_inter_check_delay_method = ICD_SMART;
111
int host_inter_check_delay_method = ICD_SMART;
112
int service_interleave_factor_method = ILF_SMART;
113
int max_host_check_spread = DEFAULT_HOST_CHECK_SPREAD;
114
int max_service_check_spread = DEFAULT_SERVICE_CHECK_SPREAD;
116
int command_check_interval = DEFAULT_COMMAND_CHECK_INTERVAL;
117
int check_reaper_interval = DEFAULT_CHECK_REAPER_INTERVAL;
118
int max_check_reaper_time = DEFAULT_MAX_REAPER_TIME;
119
int service_freshness_check_interval = DEFAULT_FRESHNESS_CHECK_INTERVAL;
120
int host_freshness_check_interval = DEFAULT_FRESHNESS_CHECK_INTERVAL;
121
int auto_rescheduling_interval = DEFAULT_AUTO_RESCHEDULING_INTERVAL;
123
int check_external_commands = DEFAULT_CHECK_EXTERNAL_COMMANDS;
124
int check_orphaned_services = DEFAULT_CHECK_ORPHANED_SERVICES;
125
int check_orphaned_hosts = DEFAULT_CHECK_ORPHANED_HOSTS;
126
int check_service_freshness = DEFAULT_CHECK_SERVICE_FRESHNESS;
127
int check_host_freshness = DEFAULT_CHECK_HOST_FRESHNESS;
128
int auto_reschedule_checks = DEFAULT_AUTO_RESCHEDULE_CHECKS;
129
int auto_rescheduling_window = DEFAULT_AUTO_RESCHEDULING_WINDOW;
131
int additional_freshness_latency = DEFAULT_ADDITIONAL_FRESHNESS_LATENCY;
133
int check_for_updates = DEFAULT_CHECK_FOR_UPDATES;
134
int bare_update_check = DEFAULT_BARE_UPDATE_CHECK;
135
time_t last_update_check = 0L;
136
unsigned long update_uid = 0L;
137
int update_available = FALSE;
138
char *last_program_version = NULL;
139
char *new_program_version = NULL;
141
time_t last_command_check = 0L;
142
time_t last_command_status_update = 0L;
143
time_t last_log_rotation = 0L;
144
time_t last_program_stop = 0L;
146
int use_aggressive_host_checking = DEFAULT_AGGRESSIVE_HOST_CHECKING;
147
unsigned long cached_host_check_horizon = DEFAULT_CACHED_HOST_CHECK_HORIZON;
148
unsigned long cached_service_check_horizon = DEFAULT_CACHED_SERVICE_CHECK_HORIZON;
149
int enable_predictive_host_dependency_checks = DEFAULT_ENABLE_PREDICTIVE_HOST_DEPENDENCY_CHECKS;
150
int enable_predictive_service_dependency_checks = DEFAULT_ENABLE_PREDICTIVE_SERVICE_DEPENDENCY_CHECKS;
152
int soft_state_dependencies = FALSE;
154
int retain_state_information = FALSE;
155
int retention_update_interval = DEFAULT_RETENTION_UPDATE_INTERVAL;
156
int use_retained_program_state = TRUE;
157
int use_retained_scheduling_info = FALSE;
158
int retention_scheduling_horizon = DEFAULT_RETENTION_SCHEDULING_HORIZON;
159
unsigned long modified_host_process_attributes = MODATTR_NONE;
160
unsigned long modified_service_process_attributes = MODATTR_NONE;
161
unsigned long retained_host_attribute_mask = 0L;
162
unsigned long retained_service_attribute_mask = 0L;
163
unsigned long retained_contact_host_attribute_mask = 0L;
164
unsigned long retained_contact_service_attribute_mask = 0L;
165
unsigned long retained_process_host_attribute_mask = 0L;
166
unsigned long retained_process_service_attribute_mask = 0L;
168
unsigned long next_comment_id = 0L;
169
unsigned long next_downtime_id = 0L;
170
unsigned long next_event_id = 0L;
171
unsigned long next_problem_id = 0L;
172
unsigned long next_notification_id = 0L;
174
int log_rotation_method = LOG_ROTATION_NONE;
176
int sigshutdown = FALSE;
177
int sigrestart = FALSE;
178
char *sigs[35] = {"EXIT", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "UNUSED", "ZERR", "DEBUG", (char *)NULL};
179
int caught_signal = FALSE;
182
int restarting = FALSE;
184
int verify_config = FALSE;
185
int verify_object_relationships = TRUE;
186
int verify_circular_paths = TRUE;
187
int test_scheduling = FALSE;
188
int precache_objects = FALSE;
189
int use_precached_objects = FALSE;
191
int daemon_mode = FALSE;
192
int daemon_dumps_core = TRUE;
194
int max_parallel_service_checks = DEFAULT_MAX_PARALLEL_SERVICE_CHECKS;
195
int currently_running_service_checks = 0;
196
int currently_running_host_checks = 0;
198
time_t program_start = 0L;
199
time_t event_start = 0L;
201
int enable_notifications = TRUE;
202
int execute_service_checks = TRUE;
203
int accept_passive_service_checks = TRUE;
204
int execute_host_checks = TRUE;
205
int accept_passive_host_checks = TRUE;
206
int enable_event_handlers = TRUE;
207
int obsess_over_services = FALSE;
208
int obsess_over_hosts = FALSE;
209
int enable_failure_prediction = TRUE;
211
int translate_passive_host_checks = DEFAULT_TRANSLATE_PASSIVE_HOST_CHECKS;
212
int passive_host_checks_are_soft = DEFAULT_PASSIVE_HOST_CHECKS_SOFT;
214
int aggregate_status_updates = TRUE;
215
int status_update_interval = DEFAULT_STATUS_UPDATE_INTERVAL;
217
int time_change_threshold = DEFAULT_TIME_CHANGE_THRESHOLD;
219
unsigned long event_broker_options = BROKER_NOTHING;
221
int process_performance_data = DEFAULT_PROCESS_PERFORMANCE_DATA;
223
int enable_flap_detection = DEFAULT_ENABLE_FLAP_DETECTION;
225
double low_service_flap_threshold = DEFAULT_LOW_SERVICE_FLAP_THRESHOLD;
226
double high_service_flap_threshold = DEFAULT_HIGH_SERVICE_FLAP_THRESHOLD;
227
double low_host_flap_threshold = DEFAULT_LOW_HOST_FLAP_THRESHOLD;
228
double high_host_flap_threshold = DEFAULT_HIGH_HOST_FLAP_THRESHOLD;
230
int use_large_installation_tweaks = DEFAULT_USE_LARGE_INSTALLATION_TWEAKS;
231
int enable_environment_macros = TRUE;
232
int free_child_process_memory = -1;
233
int child_processes_fork_twice = -1;
235
int enable_embedded_perl = DEFAULT_ENABLE_EMBEDDED_PERL;
236
int use_embedded_perl_implicitly = DEFAULT_USE_EMBEDDED_PERL_IMPLICITLY;
237
int embedded_perl_initialized = FALSE;
239
int date_format = DATE_FORMAT_US;
240
char *use_timezone = NULL;
242
int allow_empty_hostgroup_assignment = DEFAULT_ALLOW_EMPTY_HOSTGROUP_ASSIGNMENT;
242
244
int command_file_fd;
243
245
FILE *command_file_fp;
244
int command_file_created=FALSE;
246
int command_file_created = FALSE;
247
249
extern contact *contact_list;
254
256
notification *notification_list;
256
258
check_result check_result_info;
257
check_result *check_result_list=NULL;
258
unsigned long max_check_result_file_age=DEFAULT_MAX_CHECK_RESULT_AGE;
259
check_result *check_result_list = NULL;
260
unsigned long max_check_result_file_age = DEFAULT_MAX_CHECK_RESULT_AGE;
260
262
dbuf check_result_dbuf;
262
264
circular_buffer external_command_buffer;
263
265
circular_buffer check_result_buffer;
264
266
pthread_t worker_threads[TOTAL_WORKER_THREADS];
265
int external_command_buffer_slots=DEFAULT_EXTERNAL_COMMAND_BUFFER_SLOTS;
267
int external_command_buffer_slots = DEFAULT_EXTERNAL_COMMAND_BUFFER_SLOTS;
267
269
check_stats check_statistics[MAX_CHECK_STATS_TYPES];
269
271
char *debug_file;
270
int debug_level=DEFAULT_DEBUG_LEVEL;
271
int debug_verbosity=DEFAULT_DEBUG_VERBOSITY;
272
unsigned long max_debug_file_size=DEFAULT_MAX_DEBUG_FILE_SIZE;
272
int debug_level = DEFAULT_DEBUG_LEVEL;
273
int debug_verbosity = DEFAULT_DEBUG_VERBOSITY;
274
unsigned long max_debug_file_size = DEFAULT_MAX_DEBUG_FILE_SIZE;
277
279
/* Following main() declaration required by older versions of Perl ut 5.00503 */
279
int main(int argc, char **argv, char **env){
281
int main(int argc, char **argv){
280
int main(int argc, char **argv, char **env) {
286
int display_license=FALSE;
287
int display_help=FALSE;
284
int display_license = FALSE;
285
int display_help = FALSE;
291
289
char datestring[256];
292
mac = get_global_macros();
295
296
#ifdef HAVE_GETOPT_H
297
static struct option long_options[]=
299
{"help",no_argument,0,'h'},
300
{"version",no_argument,0,'V'},
301
{"license",no_argument,0,'V'},
302
{"verify-config",no_argument,0,'v'},
303
{"daemon",no_argument,0,'d'},
304
{"test-scheduling",no_argument,0,'s'},
305
{"dont-verify-objects",no_argument,0,'o'},
306
{"dont-verify-paths",no_argument,0,'x'},
307
{"precache-objects",no_argument,0,'p'},
308
{"use-precached-objects",no_argument,0,'u'},
297
int option_index = 0;
298
static struct option long_options[] = {
299
{"help", no_argument, 0, 'h'},
300
{"version", no_argument, 0, 'V'},
301
{"license", no_argument, 0, 'V'},
302
{"verify-config", no_argument, 0, 'v'},
303
{"daemon", no_argument, 0, 'd'},
304
{"test-scheduling", no_argument, 0, 's'},
305
{"dont-verify-objects", no_argument, 0, 'o'},
306
{"dont-verify-paths", no_argument, 0, 'x'},
307
{"precache-objects", no_argument, 0, 'p'},
308
{"use-precached-objects", no_argument, 0, 'u'},
313
313
/* make sure we have the correct number of command line arguments */
318
318
/* get all command line arguments */
321
321
#ifdef HAVE_GETOPT_H
322
c=getopt_long(argc,argv,"+hVvdsoxpu",long_options,&option_index);
322
c = getopt_long(argc, argv, "+hVvdsoxpu", long_options, &option_index);
324
c=getopt(argc,argv,"+hVvdsoxpu");
324
c = getopt(argc, argv, "+hVvdsoxpu");
332
case '?': /* usage */
337
case 'V': /* version */
338
display_license=TRUE;
341
case 'v': /* verify */
345
case 's': /* scheduling check */
346
test_scheduling=TRUE;
349
case 'd': /* daemon mode */
353
case 'o': /* don't verify objects */
355
verify_object_relationships=FALSE;
359
case 'x': /* don't verify circular paths */
360
verify_circular_paths=FALSE;
363
case 'p': /* precache object config */
364
precache_objects=TRUE;
367
case 'u': /* use precached object config */
368
use_precached_objects=TRUE;
327
if(c == -1 || c == EOF)
332
case '?': /* usage */
337
case 'V': /* version */
338
display_license = TRUE;
341
case 'v': /* verify */
342
verify_config = TRUE;
345
case 's': /* scheduling check */
346
test_scheduling = TRUE;
349
case 'd': /* daemon mode */
353
case 'o': /* don't verify objects */
355
verify_object_relationships=FALSE;
359
case 'x': /* don't verify circular paths */
360
verify_circular_paths = FALSE;
363
case 'p': /* precache object config */
364
precache_objects = TRUE;
367
case 'u': /* use precached object config */
368
use_precached_objects = TRUE;
377
377
/* make sure we have the right combination of arguments */
378
if(precache_objects==TRUE && (test_scheduling==FALSE && verify_config==FALSE)){
378
if(precache_objects == TRUE && (test_scheduling == FALSE && verify_config == FALSE)) {
383
383
#ifdef DEBUG_MEMORY
387
if(daemon_mode==FALSE){
388
printf("\nNagios Core %s\n",PROGRAM_VERSION);
389
printf("Copyright (c) 2009-2010 Nagios Core Development Team and Community Contributors\n");
387
if(daemon_mode == FALSE) {
388
printf("\nNagios Core %s\n", PROGRAM_VERSION);
389
printf("Copyright (c) 2009-2011 Nagios Core Development Team and Community Contributors\n");
390
390
printf("Copyright (c) 1999-2009 Ethan Galstad\n");
391
printf("Last Modified: %s\n",PROGRAM_MODIFICATION_DATE);
391
printf("Last Modified: %s\n", PROGRAM_MODIFICATION_DATE);
392
392
printf("License: GPL\n\n");
393
393
printf("Website: http://www.nagios.org\n");
396
396
/* just display the license */
397
if(display_license==TRUE){
397
if(display_license == TRUE) {
399
399
printf("This program is free software; you can redistribute it and/or modify\n");
400
400
printf("it under the terms of the GNU General Public License version 2 as\n");
740
738
/* initialize embedded Perl interpreter */
741
739
/* NOTE 02/15/08 embedded Perl must be initialized if compiled in, regardless of whether or not its enabled in the config file */
742
740
/* It compiled it, but not initialized, Nagios will segfault in readdir() calls, as libperl takes this function over */
743
if(embedded_perl_initialized==FALSE){
744
/* if(enable_embedded_perl==TRUE){*/
741
if(embedded_perl_initialized == FALSE) {
742
/* if(enable_embedded_perl==TRUE){*/
745
743
#ifdef EMBEDDEDPERL
746
744
init_embedded_perl(env);
748
746
init_embedded_perl(NULL);
750
embedded_perl_initialized=TRUE;
748
embedded_perl_initialized = TRUE;
754
/* handle signals (interrupts) */
752
/* handle signals (interrupts) */
755
753
setup_sighandler();
758
756
#ifdef USE_EVENT_BROKER
759
757
/* send program data to broker */
760
broker_program_state(NEBTYPE_PROCESS_START,NEBFLAG_NONE,NEBATTR_NONE,NULL);
758
broker_program_state(NEBTYPE_PROCESS_START, NEBFLAG_NONE, NEBATTR_NONE, NULL);
763
761
/* enter daemon mode (unless we're restarting...) */
764
if(daemon_mode==TRUE && sigrestart==FALSE){
762
if(daemon_mode == TRUE && sigrestart == FALSE) {
766
result=daemon_init();
764
result = daemon_init();
768
766
/* we had an error daemonizing, so bail... */
770
logit(NSLOG_PROCESS_INFO | NSLOG_RUNTIME_ERROR,TRUE,"Bailing out due to failure to daemonize. (PID=%d)",(int)getpid());
767
if(result == ERROR) {
768
logit(NSLOG_PROCESS_INFO | NSLOG_RUNTIME_ERROR, TRUE, "Bailing out due to failure to daemonize. (PID=%d)", (int)getpid());
772
770
#ifdef USE_EVENT_BROKER
773
771
/* send program data to broker */
774
broker_program_state(NEBTYPE_PROCESS_SHUTDOWN,NEBFLAG_PROCESS_INITIATED,NEBATTR_SHUTDOWN_ABNORMAL,NULL);
772
broker_program_state(NEBTYPE_PROCESS_SHUTDOWN, NEBFLAG_PROCESS_INITIATED, NEBATTR_SHUTDOWN_ABNORMAL, NULL);
780
asprintf(&buffer,"Finished daemonizing... (New PID=%d)\n",(int)getpid());
781
write_to_all_logs(buffer,NSLOG_PROCESS_INFO);
778
asprintf(&buffer, "Finished daemonizing... (New PID=%d)\n", (int)getpid());
779
write_to_all_logs(buffer, NSLOG_PROCESS_INFO);
784
782
/* get new PID */
785
nagios_pid=(int)getpid();
783
nagios_pid = (int)getpid();
788
786
/* open the command file (named pipe) for reading */
789
result=open_command_file();
787
result = open_command_file();
792
logit(NSLOG_PROCESS_INFO | NSLOG_RUNTIME_ERROR,TRUE,"Bailing out due to errors encountered while trying to initialize the external command file... (PID=%d)\n",(int)getpid());
790
logit(NSLOG_PROCESS_INFO | NSLOG_RUNTIME_ERROR, TRUE, "Bailing out due to errors encountered while trying to initialize the external command file... (PID=%d)\n", (int)getpid());
794
792
#ifdef USE_EVENT_BROKER
795
793
/* send program data to broker */
796
broker_program_state(NEBTYPE_PROCESS_SHUTDOWN,NEBFLAG_PROCESS_INITIATED,NEBATTR_SHUTDOWN_ABNORMAL,NULL);
794
broker_program_state(NEBTYPE_PROCESS_SHUTDOWN, NEBFLAG_PROCESS_INITIATED, NEBATTR_SHUTDOWN_ABNORMAL, NULL);
802
/* initialize status data unless we're starting */
803
if(sigrestart==FALSE)
800
/* initialize status data unless we're starting */
801
if(sigrestart == FALSE)
804
802
initialize_status_data(config_file);
806
804
/* read initial service and host state information */
810
808
/* initialize comment data */
811
809
initialize_comment_data(config_file);
813
811
/* initialize scheduled downtime data */
814
812
initialize_downtime_data(config_file);
816
814
/* initialize performance data */
817
815
initialize_performance_data(config_file);
819
/* initialize the event timing loop */
817
/* initialize the event timing loop */
820
818
init_timing_loop();
822
820
/* initialize check statistics */
823
821
init_check_stats();
825
823
/* check for updates */
826
check_for_nagios_updates(FALSE,TRUE);
824
check_for_nagios_updates(FALSE, TRUE);
828
826
/* update all status data (with retained information) */
829
827
update_all_status_data();
831
829
/* log initial host and service state */
832
log_host_states(INITIAL_STATES,NULL);
833
log_service_states(INITIAL_STATES,NULL);
830
log_host_states(INITIAL_STATES, NULL);
831
log_service_states(INITIAL_STATES, NULL);
835
833
/* reset the restart flag */
838
836
#ifdef USE_EVENT_BROKER
839
837
/* send program data to broker */
840
broker_program_state(NEBTYPE_PROCESS_EVENTLOOPSTART,NEBFLAG_NONE,NEBATTR_NONE,NULL);
838
broker_program_state(NEBTYPE_PROCESS_EVENTLOOPSTART, NEBFLAG_NONE, NEBATTR_NONE, NULL);
843
841
/* get event start time and save as macro */
844
event_start=time(NULL);
845
my_free(macro_x[MACRO_EVENTSTARTTIME]);
846
asprintf(¯o_x[MACRO_EVENTSTARTTIME],"%lu",(unsigned long)event_start);
842
event_start = time(NULL);
843
my_free(mac->x[MACRO_EVENTSTARTTIME]);
844
asprintf(&mac->x[MACRO_EVENTSTARTTIME], "%lu", (unsigned long)event_start);
848
/***** start monitoring all services *****/
846
/***** start monitoring all services *****/
849
847
/* (doesn't return until a restart or shutdown signal is encountered) */
850
848
event_execution_loop();
852
850
/* 03/01/2007 EG Moved from sighandler() to prevent FUTEX locking problems under NPTL */
853
851
/* 03/21/2007 EG SIGSEGV signals are still logged in sighandler() so we don't loose them */
854
852
/* did we catch a signal? */
855
if(caught_signal==TRUE){
858
asprintf(&buffer,"Caught SIGHUP, restarting...\n");
859
else if(sig_id!=SIGSEGV)
860
asprintf(&buffer,"Caught SIG%s, shutting down...\n",sigs[sig_id]);
862
write_to_all_logs(buffer,NSLOG_PROCESS_INFO);
853
if(caught_signal == TRUE) {
856
asprintf(&buffer, "Caught SIGHUP, restarting...\n");
857
else if(sig_id != SIGSEGV)
858
asprintf(&buffer, "Caught SIG%s, shutting down...\n", sigs[sig_id]);
860
write_to_all_logs(buffer, NSLOG_PROCESS_INFO);
866
864
#ifdef USE_EVENT_BROKER
867
865
/* send program data to broker */
868
broker_program_state(NEBTYPE_PROCESS_EVENTLOOPEND,NEBFLAG_NONE,NEBATTR_NONE,NULL);
869
if(sigshutdown==TRUE)
870
broker_program_state(NEBTYPE_PROCESS_SHUTDOWN,NEBFLAG_USER_INITIATED,NEBATTR_SHUTDOWN_NORMAL,NULL);
871
else if(sigrestart==TRUE)
872
broker_program_state(NEBTYPE_PROCESS_RESTART,NEBFLAG_USER_INITIATED,NEBATTR_RESTART_NORMAL,NULL);
866
broker_program_state(NEBTYPE_PROCESS_EVENTLOOPEND, NEBFLAG_NONE, NEBATTR_NONE, NULL);
867
if(sigshutdown == TRUE)
868
broker_program_state(NEBTYPE_PROCESS_SHUTDOWN, NEBFLAG_USER_INITIATED, NEBATTR_SHUTDOWN_NORMAL, NULL);
869
else if(sigrestart == TRUE)
870
broker_program_state(NEBTYPE_PROCESS_RESTART, NEBFLAG_USER_INITIATED, NEBATTR_RESTART_NORMAL, NULL);
875
873
/* save service and host state information */