From b5d3997aa39169637871a4bca5f860fae21aba3e Mon Sep 17 00:00:00 2001
From: Thomas Guyot-Sionnest <dermoth@users.sourceforge.net>
Date: Sat, 5 Jan 2008 14:09:29 +0000
Subject: Fix Bug #1862300: check_ntp_time segfault in 1.4.11 (Also apply to
 check_ntp)

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1887 f882894a-f735-0410-b71e-b25c423dba1c

diff --git a/NEWS b/NEWS
index 485693a..a58c4ce 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ This file documents the major additions and syntax changes between releases.
 	check_tcp now returns UNKNOWN with invalid hostname
 	New check_icmp -s option to specify the source IP address
 	check_dns now sorts addresses for testing results for more than one returned IP (Matthias Urlichs)
+	Fix segfault in check_ntp_time and (deprecated) check_ntp. (Bug #1862300)
 
 1.4.11 13th December 2007
 	Fixed check_http regression in 1.4.10 where following redirects to
diff --git a/plugins/check_ntp.c b/plugins/check_ntp.c
index 86e3d09..b474d9a 100644
--- a/plugins/check_ntp.c
+++ b/plugins/check_ntp.c
@@ -329,7 +329,7 @@ int best_offset_server(const ntp_server_results *slist, int nservers){
 		/* if we haven't reached the current list's end, move everyone
 		 * over one to the right, and insert the new candidate */
 		if(i<csize){
-			for(j=5; j>i; j--){
+			for(j=4; j>i; j--){
 				candidates[j]=candidates[j-1];
 			}
 		}
@@ -392,6 +392,7 @@ double offset_request(const char *host, int *status){
 	servers=(ntp_server_results*)malloc(sizeof(ntp_server_results)*num_hosts);
 	if(servers==NULL) die(STATE_UNKNOWN, "can not allocate server array");
 	memset(servers, 0, sizeof(ntp_server_results)*num_hosts);
+	DBG(printf("Found %d peers to check\n", num_hosts));
 
 	/* setup each socket for writing, and the corresponding struct pollfd */
 	ai_tmp=ai;
@@ -837,11 +838,11 @@ void print_help(void){
 
 	printf ("Copyright (c) 2006 Sean Finney\n");
 	printf (COPYRIGHT, copyright, email);
-  
-  printf ("%s\n", _("This plugin checks the selected ntp server"));
 
-  printf ("\n\n");
-  
+	printf ("%s\n", _("This plugin checks the selected ntp server"));
+
+	printf ("\n\n");
+
 	print_usage();
 	printf (_(UT_HELP_VRSN));
 	printf (_(UT_HOST_PORT), 'p', "123");
@@ -871,11 +872,17 @@ void print_help(void){
 	printf("  %s\n", ("./check_ntp -H ntpserv -w 0.5 -c 1 -j -1:100 -k -1:200"));
 
 	printf (_(UT_SUPPORT));
+
+	printf("\n");
+	printf ("%s\n", _("WARNING: check_ntp is deprecated. Please use check_ntp_peer or"));
+	printf ("%s\n\n", _("check_ntp_time istead."));
 }
 
 void
 print_usage(void)
 {
-  printf (_("Usage:"));
-  printf(" %s -H <host> [-w <warn>] [-c <crit>] [-j <warn>] [-k <crit>] [-v verbose]\n", progname);
+	printf ("%s\n", _("WARNING: check_ntp is deprecated. Please use check_ntp_peer or"));
+	printf ("%s\n\n", _("check_ntp_time istead."));
+	printf (_("Usage:"));
+	printf(" %s -H <host> [-w <warn>] [-c <crit>] [-j <warn>] [-k <crit>] [-v verbose]\n", progname);
 }
diff --git a/plugins/check_ntp_time.c b/plugins/check_ntp_time.c
index f414c32..767dcd9 100644
--- a/plugins/check_ntp_time.c
+++ b/plugins/check_ntp_time.c
@@ -274,7 +274,7 @@ int best_offset_server(const ntp_server_results *slist, int nservers){
 		/* if we haven't reached the current list's end, move everyone
 		 * over one to the right, and insert the new candidate */
 		if(i<csize){
-			for(j=5; j>i; j--){
+			for(j=4; j>i; j--){
 				candidates[j]=candidates[j-1];
 			}
 		}
@@ -337,6 +337,7 @@ double offset_request(const char *host, int *status){
 	servers=(ntp_server_results*)malloc(sizeof(ntp_server_results)*num_hosts);
 	if(servers==NULL) die(STATE_UNKNOWN, "can not allocate server array");
 	memset(servers, 0, sizeof(ntp_server_results)*num_hosts);
+	DBG(printf("Found %d peers to check\n", num_hosts));
 
 	/* setup each socket for writing, and the corresponding struct pollfd */
 	ai_tmp=ai;
-- 
cgit v0.10-9-g596f

