Title: [opsview-base] [217] Fixed event handler execution in Nagios 4.
Revision
217
Author
tvoon
Date
2013-02-25 15:13:57 +0000 (Mon, 25 Feb 2013)

Log Message

Fixed event handler execution in Nagios 4. Forward porting of various bugfixes currently in 
Nagios trunk

Modified Paths

Added Paths

Modified: trunk/Makefile
===================================================================
--- trunk/Makefile	2013-02-25 14:11:20 UTC (rev 216)
+++ trunk/Makefile	2013-02-25 15:13:57 UTC (rev 217)
@@ -588,6 +588,16 @@
 	cd ${NAGIOS} && patch -p1 < ../patches/nagios_handle_escape_characters.patch
 	# Patch below already in nagios, commit 2608
 	cd ${NAGIOS} && patch -p1 < ../patches/nagios_cgi_error_for_hosts_with_umlats.patch
+	cd ${NAGIOS} && patch -p1 < ../patches/nagios_4_support_event_handlers.patch
+	# bugfixes below already in nagios, listing commit numbers
+	cd ${NAGIOS} && patch -l -p2 < ../patches/nagios_bugfix_2576.patch
+	cd ${NAGIOS} && patch -p1 < ../patches/nagios_bugfix_2578.patch
+	cd ${NAGIOS} && patch -p1 < ../patches/nagios_bugfix_2596.patch
+	cd ${NAGIOS} && patch -R -p1 < ../patches/nagios_bugfix_2605.patch
+	cd ${NAGIOS} && patch -p1 < ../patches/nagios_bugfix_2606.patch
+	cd ${NAGIOS} && patch -p1 < ../patches/nagios_bugfix_2612_2615.patch
+	# Commit 2601 can be ignored for the moment
+	# End bugfixes (till 2013-02-22)
 	if [ $(KERNEL_NAME) = Linux ] ; then \
 		cd ${NAGIOS} && CFLAGS="${CFLAGS}" ./configure --with-nagios-user=$(NAGIOS_USER) --with-nagios-group=$(NAGIOS_GROUP) --with-command-group=$(NAGIOS_GROUP) --with-cgiurl=/cgi-bin --with-htmurl=/ --enable-libtap ; \
 	elif [ $(KERNEL_NAME) = Darwin ] ; then \

Added: trunk/patches/nagios_4_support_event_handlers.patch
===================================================================
--- trunk/patches/nagios_4_support_event_handlers.patch	                        (rev 0)
+++ trunk/patches/nagios_4_support_event_handlers.patch	2013-02-25 15:13:57 UTC (rev 217)
@@ -0,0 +1,76 @@
+diff -ur nagios-4.0.20130107.original/base/sehandlers.c nagios-4.0.20130107/base/sehandlers.c
+--- nagios-4.0.20130107.original/base/sehandlers.c	2013-02-20 08:43:04.000000000 +0000
++++ nagios-4.0.20130107/base/sehandlers.c	2013-02-20 09:01:44.000000000 +0000
+@@ -301,8 +301,7 @@
+ 	add_command_environment_to_kvv(&kvv, global_service_event_handler_ptr, mac);
+ 
+ 	/* run the command through a worker */
+-	/* XXX FIXME make base/workers.c handle the eventbroker stuff below */
+-	result = wproc_run(WPJOB_GLOBAL_SVC_EVTHANDLER, processed_command, event_handler_timeout, &kvv);
++	result = wproc_run_event_handler(WPJOB_GLOBAL_SVC_EVTHANDLER, event_handler_timeout, svc->host_name, svc->description, processed_command, &kvv);
+ 
+ 	/* check to see if the event handler timed out */
+ 	if(early_timeout == TRUE)
+@@ -408,8 +407,7 @@
+ 	add_command_environment_to_kvv(&kvv, svc->event_handler_ptr, mac);
+ 
+ 	/* run the command through a worker */
+-	/* XXX FIXME make base/workers.c handle the eventbroker stuff below */
+-	result = wproc_run(WPJOB_SVC_EVTHANDLER, processed_command, event_handler_timeout, &kvv);
++	result = wproc_run_event_handler(WPJOB_SVC_EVTHANDLER, event_handler_timeout, svc->host_name, svc->description, processed_command, &kvv);
+ 
+ 	/* check to see if the event handler timed out */
+ 	if(early_timeout == TRUE)
+@@ -559,8 +557,7 @@
+ 	add_command_environment_to_kvv(&kvv, global_host_event_handler_ptr, mac);
+ 
+ 	/* run the command through a worker */
+-	/* XXX FIXME make base/workers.c handle the eventbroker stuff below */
+-	wproc_run(WPJOB_GLOBAL_HOST_EVTHANDLER, processed_command, event_handler_timeout, &kvv);
++	wproc_run_event_handler(WPJOB_GLOBAL_HOST_EVTHANDLER, event_handler_timeout, hst->name, NULL, processed_command, &kvv);
+ 
+ 	/* check for a timeout in the execution of the event handler command */
+ 	if(early_timeout == TRUE)
+@@ -664,7 +661,7 @@
+ 	add_command_environment_to_kvv(&kvv, hst->event_handler_ptr, mac);
+ 
+ 	/* run the command through a worker */
+-	result = wproc_run(WPJOB_HOST_EVTHANDLER, processed_command, event_handler_timeout, &kvv);
++	result = wproc_run_event_handler(WPJOB_HOST_EVTHANDLER, event_handler_timeout, hst->name, NULL, processed_command, &kvv);
+ 
+ 	/* check to see if the event handler timed out */
+ 	if(early_timeout == TRUE)
+diff -ur nagios-4.0.20130107.original/base/workers.c nagios-4.0.20130107/base/workers.c
+--- nagios-4.0.20130107.original/base/workers.c	2013-02-20 08:43:04.000000000 +0000
++++ nagios-4.0.20130107/base/workers.c	2013-02-20 08:51:06.000000000 +0000
+@@ -966,6 +966,19 @@
+ 	return wproc_run_job(job, kvv);
+ }
+ 
++int wproc_run_event_handler(int jtype, int timeout, char *hname, char *sdesc, char *cmd, struct kvvec *kvv)
++{
++	worker_job *job;
++	wproc_object_job *oj;
++
++	if (!(oj = create_object_job(NULL, hname, sdesc)))
++		return ERROR;
++
++	job = create_job(jtype, oj, timeout, cmd);
++
++	return wproc_run_job(job, kvv);
++}
++
+ int wproc_run_service_job(int jtype, int timeout, service *svc, char *cmd, struct kvvec *kvv)
+ {
+ 	worker_job *job;
+diff -ur nagios-4.0.20130107.original/include/workers.h nagios-4.0.20130107/include/workers.h
+--- nagios-4.0.20130107.original/include/workers.h	2013-02-20 08:43:04.000000000 +0000
++++ nagios-4.0.20130107/include/workers.h	2013-02-20 08:50:41.000000000 +0000
+@@ -27,6 +27,7 @@
+ extern int init_workers(int desired_workers);
+ extern int wproc_run_check(check_result *cr, char *cmd, struct kvvec *kvv);
+ extern int wproc_notify(char *cname, char *hname, char *sdesc, char *cmd, struct kvvec *kvv);
++extern int wproc_run_event_handler(int jtype, int timeout, char *hname, char *sdesc, char *cmd, struct kvvec *kvv);
+ extern int wproc_run(int job_type, char *cmd, int timeout, struct kvvec *kvv);
+ extern int wproc_run_service_job(int jtype, int timeout, service *svc, char *cmd, struct kvvec *kvv);
+ extern int wproc_run_host_job(int jtype, int timeout, host *hst, char *cmd, struct kvvec *kvv);

Added: trunk/patches/nagios_bugfix_2576.patch
===================================================================
--- trunk/patches/nagios_bugfix_2576.patch	                        (rev 0)
+++ trunk/patches/nagios_bugfix_2576.patch	2013-02-25 15:13:57 UTC (rev 217)
@@ -0,0 +1,12 @@
+Modified: nagioscore/trunk/base/nerd.c
+===================================================================
+--- nagioscore/trunk/base/nerd.c    2013-01-14 11:41:03 UTC (rev 2575)
++++ nagioscore/trunk/base/nerd.c    2013-01-15 18:52:17 UTC (rev 2576)
+@@ -371,6 +371,7 @@
+            free(subscr);
+        }
+        chan->subscriptions = NULL;
++       my_free(chan);
+    }
+    my_free(channels);
+    num_channels = 0;


Property changes on: trunk/patches/nagios_bugfix_2576.patch
___________________________________________________________________
Added: svn:mergeinfo
   + 

Added: trunk/patches/nagios_bugfix_2578.patch
===================================================================
--- trunk/patches/nagios_bugfix_2578.patch	                        (rev 0)
+++ trunk/patches/nagios_bugfix_2578.patch	2013-02-25 15:13:57 UTC (rev 217)
@@ -0,0 +1,47 @@
+diff -ur nagios-4.0.20130107.pre2578/base/events.c nagios-4.0.20130107/base/events.c
+--- nagios-4.0.20130107.pre2578/base/events.c	2013-02-20 09:04:28.000000000 +0000
++++ nagios-4.0.20130107/base/events.c	2013-02-22 00:10:52.000000000 +0000
+@@ -31,6 +31,8 @@
+ #include "../include/workers.h"
+ #include "../lib/squeue.h"
+ 
++/* the event we're currently processing */
++static timed_event *current_event;
+ 
+ /******************************************************************/
+ /************ EVENT SCHEDULING/HANDLING FUNCTIONS *****************/
+@@ -852,6 +854,10 @@
+ 		squeue_remove(sq, event->sq_event);
+ 
+ 	event->sq_event = NULL; /* mark this event as unscheduled */
++
++    if (event == current_event) {
++        current_event = NULL;
++        }
+ 	}
+ 
+ 
+@@ -986,7 +992,7 @@
+ 			compensate_for_system_time_change((unsigned long)last_time, (unsigned long)current_time);
+ 
+ 		/* get next scheduled event */
+-		temp_event = (timed_event *)squeue_peek(nagios_squeue);
++		current_event = temp_event = (timed_event *)squeue_peek(nagios_squeue);
+ 
+ 		/* if we don't have any events to handle, exit */
+ 		if(!temp_event) {
+@@ -1032,6 +1038,11 @@
+ 
+ 		log_debug_info(DEBUGL_IPC, 2, "## %d descriptors had input\n", inputs);
+ 
++        if(!current_event) {
++            log_debug_info( DEBUGL_EVENTS, 0, "Event was cancelled by iobroker input\n");
++            continue;
++            }
++
+ 		/* 100 milliseconds allowance for firing off events early */
+ 		gettimeofday(&now, NULL);
+ 		if (tv_delta_msec(&now, event_runtime) > 100)
+Binary files nagios-4.0.20130107.pre2578/base/events.o and nagios-4.0.20130107/base/events.o differ
+Binary files nagios-4.0.20130107.pre2578/base/nagios and nagios-4.0.20130107/base/nagios differ
+Binary files nagios-4.0.20130107.pre2578/base/nerd.o and nagios-4.0.20130107/base/nerd.o differ

Added: trunk/patches/nagios_bugfix_2596.patch
===================================================================
--- trunk/patches/nagios_bugfix_2596.patch	                        (rev 0)
+++ trunk/patches/nagios_bugfix_2596.patch	2013-02-25 15:13:57 UTC (rev 217)
@@ -0,0 +1,11 @@
+diff -ur nagios-4.0.20130107.original/xdata/xodtemplate.c nagios-4.0.20130107/xdata/xodtemplate.c
+--- nagios-4.0.20130107.original/xdata/xodtemplate.c	2013-02-20 09:04:28.000000000 +0000
++++ nagios-4.0.20130107/xdata/xodtemplate.c	2013-02-22 00:17:38.000000000 +0000
+@@ -4834,6 +4834,7 @@
+ 
+ 	parents = children = NULL;
+ 	bitmap_clear(parent_map);
++	bitmap_clear(service_map);
+ 
+ 	/* create the two object lists */
+ 	if(xodtemplate_create_service_list(&parents, parent_map, temp_servicedependency->host_name, temp_servicedependency->hostgroup_name, temp_servicedependency->servicegroup_name, temp_servicedependency->service_description, temp_servicedependency->_config_file, temp_servicedependency->_start_line) != OK) {

Added: trunk/patches/nagios_bugfix_2605.patch
===================================================================
--- trunk/patches/nagios_bugfix_2605.patch	                        (rev 0)
+++ trunk/patches/nagios_bugfix_2605.patch	2013-02-25 15:13:57 UTC (rev 217)
@@ -0,0 +1,23 @@
+diff -ur nagios-4.0.20130107/common/macros.c nagios-4.0.20130107.original/common/macros.c
+--- nagios-4.0.20130107/common/macros.c	2013-02-22 00:25:13.000000000 +0000
++++ nagios-4.0.20130107.original/common/macros.c	2013-02-20 09:04:28.000000000 +0000
+@@ -788,6 +788,9 @@
+ 			/* SERVICE MACROS */
+ 			/******************/
+ 		case MACRO_SERVICEGROUPNAMES:
++		case MACRO_SERVICEACTIONURL:
++		case MACRO_SERVICENOTESURL:
++		case MACRO_SERVICENOTES:
+ 			*free_macro = TRUE;
+ 		case MACRO_SERVICEDESC:
+ 		case MACRO_SERVICESTATE:
+@@ -812,9 +815,6 @@
+ 		case MACRO_LASTSERVICECRITICAL:
+ 		case MACRO_SERVICECHECKCOMMAND:
+ 		case MACRO_SERVICEDISPLAYNAME:
+-		case MACRO_SERVICEACTIONURL:
+-		case MACRO_SERVICENOTESURL:
+-		case MACRO_SERVICENOTES:
+ 		case MACRO_SERVICECHECKTYPE:
+ 		case MACRO_LONGSERVICEOUTPUT:
+ 		case MACRO_SERVICENOTIFICATIONNUMBER:

Added: trunk/patches/nagios_bugfix_2606.patch
===================================================================
--- trunk/patches/nagios_bugfix_2606.patch	                        (rev 0)
+++ trunk/patches/nagios_bugfix_2606.patch	2013-02-25 15:13:57 UTC (rev 217)
@@ -0,0 +1,38 @@
+diff -ur nagios-4.0.20130107.original/xdata/xodtemplate.c nagios-4.0.20130107/xdata/xodtemplate.c
+--- nagios-4.0.20130107.original/xdata/xodtemplate.c	2013-02-22 00:17:38.000000000 +0000
++++ nagios-4.0.20130107/xdata/xodtemplate.c	2013-02-22 00:23:35.000000000 +0000
+@@ -4747,7 +4747,7 @@
+ {
+ 	xodtemplate_hostdependency *temp_hostdependency = (xodtemplate_hostdependency *)hd_;
+ 	objectlist *master_hostlist = NULL, *dependent_hostlist = NULL;
+-	objectlist *list, *next, *l2, *n2;
++	objectlist *list, *next, *l2;
+ 
+ 	/* skip host dependencies without enough data */
+ 	if(temp_hostdependency->hostgroup_name == NULL && temp_hostdependency->dependent_hostgroup_name == NULL && temp_hostdependency->host_name == NULL && temp_hostdependency->dependent_host_name == NULL)
+@@ -4781,22 +4781,21 @@
+ 		next = list->next;
+ 		free(list);
+ 
+-		for(l2 = dependent_hostlist; l2; l2 = n2) {
++		for(l2 = dependent_hostlist; l2; l2 = l2->next) {
+ 			xodtemplate_host *child = (xodtemplate_host *)l2->object_ptr;
+-			n2 = l2->next;
+-			free(l2);
+ 
+ 			temp_hostdependency->host_name = master->host_name;
+ 			temp_hostdependency->dependent_host_name = child->host_name;
+ 			if(xodtemplate_register_hostdependency(temp_hostdependency) != OK) {
+ 				/* exit on error */
++                free_objectlist(&dependent_hostlist);
+ 				free_objectlist(&next);
+-				free_objectlist(&n2);
+ 				return ERROR;
+ 				}
+ 			}
+ 		}
+ 
++    free_objectlist(&dependent_hostlist);
+ 	my_free(temp_hostdependency->dependency_period);
+ 	my_free(temp_hostdependency);
+ 

Added: trunk/patches/nagios_bugfix_2612_2615.patch
===================================================================
--- trunk/patches/nagios_bugfix_2612_2615.patch	                        (rev 0)
+++ trunk/patches/nagios_bugfix_2612_2615.patch	2013-02-25 15:13:57 UTC (rev 217)
@@ -0,0 +1,13 @@
+diff -ur nagios-4.0.20130107.original/lib/dkhash.c nagios-4.0.20130107/lib/dkhash.c
+--- nagios-4.0.20130107.original/lib/dkhash.c	2012-12-24 15:29:25.000000000 +0000
++++ nagios-4.0.20130107/lib/dkhash.c	2013-02-22 00:28:35.000000000 +0000
+@@ -207,8 +207,7 @@
+ 	if (!(bkt = t->buckets[slot]))
+ 		return NULL;
+ 
+-	prev = bkt; /* pay attention */
+-	for (; bkt; bkt = bkt->next) {
++	for (prev = bkt; bkt; prev = bkt, bkt = bkt->next) {
+ 		if (strcmp(k1, bkt->key))
+ 			continue;
+ 		if ((!k2 && !bkt->key2) || !strcmp(k2, bkt->key2)) {

_______________________________________________
Opsview-checkins mailing list
Opsview-checkins@lists.opsview.org
http://lists.opsview.org/lists/listinfo/opsview-checkins

Reply via email to