/* saves a service downtime entry */ int add_new_service_downtime(char *host_name, char *service_description, time_t entry_time, char *author, char *comment_data, time_t start_time, time_t end_time, int fixed, unsigned long triggered_by, unsigned long duration, unsigned long *downtime_id, int is_in_effect, time_t trigger_time) { int result = OK; if (host_name == NULL || service_description == NULL) return ERROR; /* find the next valid downtime id */ while (find_service_downtime(next_downtime_id) != NULL) next_downtime_id++; /* add downtime to list in memory */ result = add_service_downtime(host_name, service_description, entry_time, author, comment_data, start_time, end_time, fixed, triggered_by, duration, next_downtime_id, is_in_effect, trigger_time); /* save downtime id */ if (downtime_id != NULL) *downtime_id = next_downtime_id; #ifdef USE_EVENT_BROKER /* send data to event broker */ broker_downtime_data(NEBTYPE_DOWNTIME_ADD, NEBFLAG_NONE, NEBATTR_NONE, SERVICE_DOWNTIME, host_name, service_description, entry_time, author, comment_data, start_time, end_time, fixed, triggered_by, duration, next_downtime_id, NULL, is_in_effect, trigger_time); #endif /* increment the downtime id */ next_downtime_id++; return result; }
/* saves a service downtime entry */ int add_new_service_downtime(char *host_name, char *service_description, time_t entry_time, char *author, char *comment_data, time_t start_time, time_t end_time, int fixed, unsigned long triggered_by, unsigned long duration, unsigned long *downtime_id, int is_in_effect, int start_notification_sent){ int result = OK; unsigned long new_downtime_id = 0L; log_debug_info(DEBUGL_FUNCTIONS, 0, "add_new_service_downtime()\n"); if(host_name == NULL || service_description == NULL) { log_debug_info(DEBUGL_DOWNTIME, 1, "Host name (%s) or service description (%s) is null\n", ((NULL == host_name) ? "null" : host_name), ((NULL == service_description) ? "null" : service_description)); return ERROR; } new_downtime_id = get_next_downtime_id(); result = add_service_downtime(host_name, service_description, entry_time, author, comment_data, start_time, 0, end_time, fixed, triggered_by, duration, new_downtime_id, is_in_effect, start_notification_sent); /* save downtime id */ if(downtime_id != NULL) *downtime_id = new_downtime_id; #ifdef USE_EVENT_BROKER /* send data to event broker */ broker_downtime_data(NEBTYPE_DOWNTIME_ADD, NEBFLAG_NONE, NEBATTR_NONE, SERVICE_DOWNTIME, host_name, service_description, entry_time, author, comment_data, start_time, end_time, fixed, triggered_by, duration, new_downtime_id, NULL); #endif return result; }
/* adds a new scheduled service downtime entry */ int xdddefault_add_new_service_downtime(char *host_name, char *service_description, time_t entry_time, char *author, char *comment, time_t start_time, time_t end_time, int fixed, unsigned long triggered_by, unsigned long duration, unsigned long *downtime_id, int is_in_effect, int start_notification_sent){ /* find the next valid downtime id */ while(find_service_downtime(next_downtime_id) != NULL) next_downtime_id++; /* add downtime to list in memory */ add_service_downtime(host_name, service_description, entry_time, author, comment, start_time, (time_t)0, end_time, fixed, triggered_by, duration, next_downtime_id, is_in_effect, start_notification_sent); /* return the id for the downtime we are about to add (this happens in the main code) */ if(downtime_id != NULL) *downtime_id = next_downtime_id; /* increment the downtime id */ next_downtime_id++; return OK; }
/* read all program, host, and service status information */ int xsddefault_read_status_data(char *config_file, int options) { #ifdef NO_MMAP char input[MAX_PLUGIN_OUTPUT_LENGTH] = ""; FILE *fp = NULL; #else char *input = NULL; mmapfile *thefile = NULL; #endif int data_type = XSDDEFAULT_NO_DATA; hoststatus *temp_hoststatus = NULL; servicestatus *temp_servicestatus = NULL; char *var = NULL; char *val = NULL; char *ptr = NULL; int result = 0; /* comment and downtime vars */ unsigned long comment_id = 0; int persistent = FALSE; int expires = FALSE; time_t expire_time = 0L; int entry_type = USER_COMMENT; int source = COMMENTSOURCE_INTERNAL; time_t entry_time = 0L; char *host_name = NULL; char *service_description = NULL; char *author = NULL; char *comment_data = NULL; unsigned long downtime_id = 0; time_t start_time = 0L; time_t flex_downtime_start = 0L; time_t end_time = 0L; int fixed = FALSE; unsigned long triggered_by = 0; unsigned long duration = 0L; int x = 0; int is_in_effect = FALSE; /* initialize some vars */ for(x = 0; x < MAX_CHECK_STATS_TYPES; x++) { program_stats[x][0] = 0; program_stats[x][1] = 0; program_stats[x][2] = 0; } /* grab configuration data */ result = xsddefault_grab_config_info(config_file); if(result == ERROR) return ERROR; /* open the status file for reading */ #ifdef NO_MMAP if((fp = fopen(xsddefault_status_log, "r")) == NULL) return ERROR; #else if((thefile = mmap_fopen(xsddefault_status_log)) == NULL) return ERROR; #endif /* Big speedup when reading status.dat in bulk */ defer_downtime_sorting = 1; defer_comment_sorting = 1; /* read all lines in the status file */ while(1) { #ifdef NO_MMAP strcpy(input, ""); if(fgets(input, sizeof(input), fp) == NULL) break; #else /* free memory */ my_free(input); /* read the next line */ if((input = mmap_fgets(thefile)) == NULL) break; #endif strip(input); /* skip blank lines and comments */ if(input[0] == '#' || input[0] == '\x0') continue; else if(!strcmp(input, "info {")) data_type = XSDDEFAULT_INFO_DATA; else if(!strcmp(input, "programstatus {")) data_type = XSDDEFAULT_PROGRAMSTATUS_DATA; else if(!strcmp(input, "hoststatus {")) { data_type = XSDDEFAULT_HOSTSTATUS_DATA; temp_hoststatus = (hoststatus *)calloc(1, sizeof(hoststatus)); } else if(!strcmp(input, "servicestatus {")) { data_type = XSDDEFAULT_SERVICESTATUS_DATA; temp_servicestatus = (servicestatus *)calloc(1, sizeof(servicestatus)); } else if(!strcmp(input, "contactstatus {")) { data_type = XSDDEFAULT_CONTACTSTATUS_DATA; /* unimplemented */ } else if(!strcmp(input, "hostcomment {")) data_type = XSDDEFAULT_HOSTCOMMENT_DATA; else if(!strcmp(input, "servicecomment {")) data_type = XSDDEFAULT_SERVICECOMMENT_DATA; else if(!strcmp(input, "hostdowntime {")) data_type = XSDDEFAULT_HOSTDOWNTIME_DATA; else if(!strcmp(input, "servicedowntime {")) data_type = XSDDEFAULT_SERVICEDOWNTIME_DATA; else if(!strcmp(input, "}")) { switch(data_type) { case XSDDEFAULT_INFO_DATA: break; case XSDDEFAULT_PROGRAMSTATUS_DATA: break; case XSDDEFAULT_HOSTSTATUS_DATA: add_host_status(temp_hoststatus); temp_hoststatus = NULL; break; case XSDDEFAULT_SERVICESTATUS_DATA: add_service_status(temp_servicestatus); temp_servicestatus = NULL; break; case XSDDEFAULT_CONTACTSTATUS_DATA: /* unimplemented */ break; case XSDDEFAULT_HOSTCOMMENT_DATA: case XSDDEFAULT_SERVICECOMMENT_DATA: /* add the comment */ add_comment((data_type == XSDDEFAULT_HOSTCOMMENT_DATA) ? HOST_COMMENT : SERVICE_COMMENT, entry_type, host_name, service_description, entry_time, author, comment_data, comment_id, persistent, expires, expire_time, source); /* free temp memory */ my_free(host_name); my_free(service_description); my_free(author); my_free(comment_data); /* reset defaults */ entry_type = USER_COMMENT; comment_id = 0; source = COMMENTSOURCE_INTERNAL; persistent = FALSE; entry_time = 0L; expires = FALSE; expire_time = 0L; break; case XSDDEFAULT_HOSTDOWNTIME_DATA: case XSDDEFAULT_SERVICEDOWNTIME_DATA: /* add the downtime */ if(data_type == XSDDEFAULT_HOSTDOWNTIME_DATA) add_host_downtime(host_name, entry_time, author, comment_data, start_time, flex_downtime_start, end_time, fixed, triggered_by, duration, downtime_id, is_in_effect); else add_service_downtime(host_name, service_description, entry_time, author, comment_data, start_time, flex_downtime_start, end_time, fixed, triggered_by, duration, downtime_id, is_in_effect); /* free temp memory */ my_free(host_name); my_free(service_description); my_free(author); my_free(comment_data); /* reset defaults */ downtime_id = 0; entry_time = 0L; start_time = 0L; end_time = 0L; fixed = FALSE; triggered_by = 0; duration = 0L; is_in_effect = FALSE; break; default: break; } data_type = XSDDEFAULT_NO_DATA; } else if(data_type != XSDDEFAULT_NO_DATA) { var = strtok(input, "="); val = strtok(NULL, "\n"); if(val == NULL) continue; switch(data_type) { case XSDDEFAULT_INFO_DATA: break; case XSDDEFAULT_PROGRAMSTATUS_DATA: /* NOTE: some vars are not read, as they are not used by the CGIs (modified attributes, event handler commands, etc.) */ if(!strcmp(var, "nagios_pid")) nagios_pid = atoi(val); else if(!strcmp(var, "daemon_mode")) daemon_mode = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "program_start")) program_start = strtoul(val, NULL, 10); else if(!strcmp(var, "last_log_rotation")) last_log_rotation = strtoul(val, NULL, 10); else if(!strcmp(var, "enable_notifications")) enable_notifications = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "active_service_checks_enabled")) execute_service_checks = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "passive_service_checks_enabled")) accept_passive_service_checks = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "active_host_checks_enabled")) execute_host_checks = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "passive_host_checks_enabled")) accept_passive_host_checks = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "enable_event_handlers")) enable_event_handlers = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "obsess_over_services")) obsess_over_services = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "obsess_over_hosts")) obsess_over_hosts = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "check_service_freshness")) check_service_freshness = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "check_host_freshness")) check_host_freshness = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "enable_flap_detection")) enable_flap_detection = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "process_performance_data")) process_performance_data = (atoi(val) > 0) ? TRUE : FALSE; else if(strstr(var, "_stats")) { x = -1; if(!strcmp(var, "active_scheduled_host_check_stats")) x = ACTIVE_SCHEDULED_HOST_CHECK_STATS; if(!strcmp(var, "active_ondemand_host_check_stats")) x = ACTIVE_ONDEMAND_HOST_CHECK_STATS; if(!strcmp(var, "passive_host_check_stats")) x = PASSIVE_HOST_CHECK_STATS; if(!strcmp(var, "active_scheduled_service_check_stats")) x = ACTIVE_SCHEDULED_SERVICE_CHECK_STATS; if(!strcmp(var, "active_ondemand_service_check_stats")) x = ACTIVE_ONDEMAND_SERVICE_CHECK_STATS; if(!strcmp(var, "passive_service_check_stats")) x = PASSIVE_SERVICE_CHECK_STATS; if(!strcmp(var, "cached_host_check_stats")) x = ACTIVE_CACHED_HOST_CHECK_STATS; if(!strcmp(var, "cached_service_check_stats")) x = ACTIVE_CACHED_SERVICE_CHECK_STATS; if(!strcmp(var, "external_command_stats")) x = EXTERNAL_COMMAND_STATS; if(!strcmp(var, "parallel_host_check_stats")) x = PARALLEL_HOST_CHECK_STATS; if(!strcmp(var, "serial_host_check_stats")) x = SERIAL_HOST_CHECK_STATS; if(x >= 0) { if((ptr = strtok(val, ","))) { program_stats[x][0] = atoi(ptr); if((ptr = strtok(NULL, ","))) { program_stats[x][1] = atoi(ptr); if((ptr = strtok(NULL, "\n"))) program_stats[x][2] = atoi(ptr); } } } } break; case XSDDEFAULT_HOSTSTATUS_DATA: /* NOTE: some vars are not read, as they are not used by the CGIs (modified attributes, event handler commands, etc.) */ if(temp_hoststatus != NULL) { if(!strcmp(var, "host_name")) temp_hoststatus->host_name = (char *)strdup(val); else if(!strcmp(var, "has_been_checked")) temp_hoststatus->has_been_checked = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "should_be_scheduled")) temp_hoststatus->should_be_scheduled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "check_execution_time")) temp_hoststatus->execution_time = strtod(val, NULL); else if(!strcmp(var, "check_latency")) temp_hoststatus->latency = strtod(val, NULL); else if(!strcmp(var, "check_type")) temp_hoststatus->check_type = atoi(val); else if(!strcmp(var, "current_state")) temp_hoststatus->status = atoi(val); else if(!strcmp(var, "last_hard_state")) temp_hoststatus->last_hard_state = atoi(val); else if(!strcmp(var, "plugin_output")) { temp_hoststatus->plugin_output = (char *)strdup(val); unescape_newlines(temp_hoststatus->plugin_output); } else if(!strcmp(var, "long_plugin_output")) { temp_hoststatus->long_plugin_output = (char *)strdup(val); unescape_newlines(temp_hoststatus->long_plugin_output); } else if(!strcmp(var, "performance_data")) temp_hoststatus->perf_data = (char *)strdup(val); else if(!strcmp(var, "current_attempt")) temp_hoststatus->current_attempt = atoi(val); else if(!strcmp(var, "max_attempts")) temp_hoststatus->max_attempts = atoi(val); else if(!strcmp(var, "last_check")) temp_hoststatus->last_check = strtoul(val, NULL, 10); else if(!strcmp(var, "next_check")) temp_hoststatus->next_check = strtoul(val, NULL, 10); else if(!strcmp(var, "check_options")) temp_hoststatus->check_options = atoi(val); else if(!strcmp(var, "current_attempt")) temp_hoststatus->current_attempt = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "state_type")) temp_hoststatus->state_type = atoi(val); else if(!strcmp(var, "last_state_change")) temp_hoststatus->last_state_change = strtoul(val, NULL, 10); else if(!strcmp(var, "last_hard_state_change")) temp_hoststatus->last_hard_state_change = strtoul(val, NULL, 10); else if(!strcmp(var, "last_time_up")) temp_hoststatus->last_time_up = strtoul(val, NULL, 10); else if(!strcmp(var, "last_time_down")) temp_hoststatus->last_time_down = strtoul(val, NULL, 10); else if(!strcmp(var, "last_time_unreachable")) temp_hoststatus->last_time_unreachable = strtoul(val, NULL, 10); else if(!strcmp(var, "last_notification")) temp_hoststatus->last_notification = strtoul(val, NULL, 10); else if(!strcmp(var, "next_notification")) temp_hoststatus->next_notification = strtoul(val, NULL, 10); else if(!strcmp(var, "no_more_notifications")) temp_hoststatus->no_more_notifications = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "current_notification_number")) temp_hoststatus->current_notification_number = atoi(val); else if(!strcmp(var, "notifications_enabled")) temp_hoststatus->notifications_enabled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "problem_has_been_acknowledged")) temp_hoststatus->problem_has_been_acknowledged = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "acknowledgement_type")) temp_hoststatus->acknowledgement_type = atoi(val); else if(!strcmp(var, "active_checks_enabled")) temp_hoststatus->checks_enabled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "passive_checks_enabled")) temp_hoststatus->accept_passive_checks = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "event_handler_enabled")) temp_hoststatus->event_handler_enabled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "flap_detection_enabled")) temp_hoststatus->flap_detection_enabled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "process_performance_data")) temp_hoststatus->process_performance_data = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "obsess_over_host") || !strcmp(var, "obsess")) temp_hoststatus->obsess = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "last_update")) temp_hoststatus->last_update = strtoul(val, NULL, 10); else if(!strcmp(var, "is_flapping")) temp_hoststatus->is_flapping = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "percent_state_change")) temp_hoststatus->percent_state_change = strtod(val, NULL); else if(!strcmp(var, "scheduled_downtime_depth")) temp_hoststatus->scheduled_downtime_depth = atoi(val); } break; case XSDDEFAULT_SERVICESTATUS_DATA: /* NOTE: some vars are not read, as they are not used by the CGIs (modified attributes, event handler commands, etc.) */ if(temp_servicestatus != NULL) { if(!strcmp(var, "host_name")) temp_servicestatus->host_name = (char *)strdup(val); else if(!strcmp(var, "service_description")) temp_servicestatus->description = (char *)strdup(val); else if(!strcmp(var, "has_been_checked")) temp_servicestatus->has_been_checked = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "should_be_scheduled")) temp_servicestatus->should_be_scheduled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "check_execution_time")) temp_servicestatus->execution_time = strtod(val, NULL); else if(!strcmp(var, "check_latency")) temp_servicestatus->latency = strtod(val, NULL); else if(!strcmp(var, "check_type")) temp_servicestatus->check_type = atoi(val); else if(!strcmp(var, "current_state")) temp_servicestatus->status = atoi(val); else if(!strcmp(var, "last_hard_state")) temp_servicestatus->last_hard_state = atoi(val); else if(!strcmp(var, "current_attempt")) temp_servicestatus->current_attempt = atoi(val); else if(!strcmp(var, "max_attempts")) temp_servicestatus->max_attempts = atoi(val); else if(!strcmp(var, "state_type")) temp_servicestatus->state_type = atoi(val); else if(!strcmp(var, "last_state_change")) temp_servicestatus->last_state_change = strtoul(val, NULL, 10); else if(!strcmp(var, "last_hard_state_change")) temp_servicestatus->last_hard_state_change = strtoul(val, NULL, 10); else if(!strcmp(var, "last_time_ok")) temp_servicestatus->last_time_ok = strtoul(val, NULL, 10); else if(!strcmp(var, "last_time_warning")) temp_servicestatus->last_time_warning = strtoul(val, NULL, 10); else if(!strcmp(var, "last_time_unknown")) temp_servicestatus->last_time_unknown = strtoul(val, NULL, 10); else if(!strcmp(var, "last_time_critical")) temp_servicestatus->last_time_critical = strtoul(val, NULL, 10); else if(!strcmp(var, "plugin_output")) { temp_servicestatus->plugin_output = (char *)strdup(val); unescape_newlines(temp_servicestatus->plugin_output); } else if(!strcmp(var, "long_plugin_output")) { temp_servicestatus->long_plugin_output = (char *)strdup(val); unescape_newlines(temp_servicestatus->long_plugin_output); } else if(!strcmp(var, "performance_data")) temp_servicestatus->perf_data = (char *)strdup(val); else if(!strcmp(var, "last_check")) temp_servicestatus->last_check = strtoul(val, NULL, 10); else if(!strcmp(var, "next_check")) temp_servicestatus->next_check = strtoul(val, NULL, 10); else if(!strcmp(var, "check_options")) temp_servicestatus->check_options = atoi(val); else if(!strcmp(var, "current_notification_number")) temp_servicestatus->current_notification_number = atoi(val); else if(!strcmp(var, "last_notification")) temp_servicestatus->last_notification = strtoul(val, NULL, 10); else if(!strcmp(var, "next_notification")) temp_servicestatus->next_notification = strtoul(val, NULL, 10); else if(!strcmp(var, "no_more_notifications")) temp_servicestatus->no_more_notifications = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "notifications_enabled")) temp_servicestatus->notifications_enabled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "active_checks_enabled")) temp_servicestatus->checks_enabled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "passive_checks_enabled")) temp_servicestatus->accept_passive_checks = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "event_handler_enabled")) temp_servicestatus->event_handler_enabled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "problem_has_been_acknowledged")) temp_servicestatus->problem_has_been_acknowledged = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "acknowledgement_type")) temp_servicestatus->acknowledgement_type = atoi(val); else if(!strcmp(var, "flap_detection_enabled")) temp_servicestatus->flap_detection_enabled = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "process_performance_data")) temp_servicestatus->process_performance_data = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "obsess_over_service") || !strcmp(var, "obsess")) temp_servicestatus->obsess = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "last_update")) temp_servicestatus->last_update = strtoul(val, NULL, 10); else if(!strcmp(var, "is_flapping")) temp_servicestatus->is_flapping = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "percent_state_change")) temp_servicestatus->percent_state_change = strtod(val, NULL); else if(!strcmp(var, "scheduled_downtime_depth")) temp_servicestatus->scheduled_downtime_depth = atoi(val); } break; case XSDDEFAULT_CONTACTSTATUS_DATA: /* unimplemented */ break; case XSDDEFAULT_HOSTCOMMENT_DATA: case XSDDEFAULT_SERVICECOMMENT_DATA: if(!strcmp(var, "host_name")) host_name = (char *)strdup(val); else if(!strcmp(var, "service_description")) service_description = (char *)strdup(val); else if(!strcmp(var, "entry_type")) entry_type = atoi(val); else if(!strcmp(var, "comment_id")) comment_id = strtoul(val, NULL, 10); else if(!strcmp(var, "source")) source = atoi(val); else if(!strcmp(var, "persistent")) persistent = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "entry_time")) entry_time = strtoul(val, NULL, 10); else if(!strcmp(var, "expires")) expires = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "expire_time")) expire_time = strtoul(val, NULL, 10); else if(!strcmp(var, "author")) author = (char *)strdup(val); else if(!strcmp(var, "comment_data")) comment_data = (char *)strdup(val); break; case XSDDEFAULT_HOSTDOWNTIME_DATA: case XSDDEFAULT_SERVICEDOWNTIME_DATA: if(!strcmp(var, "host_name")) host_name = (char *)strdup(val); else if(!strcmp(var, "service_description")) service_description = (char *)strdup(val); else if(!strcmp(var, "downtime_id")) downtime_id = strtoul(val, NULL, 10); else if(!strcmp(var, "comment_id")) comment_id = strtoul(val, NULL, 10); else if(!strcmp(var, "entry_time")) entry_time = strtoul(val, NULL, 10); else if(!strcmp(var, "start_time")) start_time = strtoul(val, NULL, 10); else if(!strcmp(var, "flex_downtime_start")) flex_downtime_start = strtoul(val, NULL, 10); else if(!strcmp(var, "end_time")) end_time = strtoul(val, NULL, 10); else if(!strcmp(var, "fixed")) fixed = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "triggered_by")) triggered_by = strtoul(val, NULL, 10); else if(!strcmp(var, "duration")) duration = strtoul(val, NULL, 10); else if(!strcmp(var, "is_in_effect")) is_in_effect = (atoi(val) > 0) ? TRUE : FALSE; else if(!strcmp(var, "author")) author = (char *)strdup(val); else if(!strcmp(var, "comment")) comment_data = (char *)strdup(val); break; default: break; } } } /* free memory and close the file */ #ifdef NO_MMAP fclose(fp); #else my_free(input); mmap_fclose(thefile); #endif /* free memory */ my_free(xsddefault_status_log); my_free(xsddefault_temp_file); if(sort_downtime() != OK) return ERROR; if(sort_comments() != OK) return ERROR; return OK; }