[Nagiosplug-checkins] nagiosplug/plugins check_ntp.c,1.20,1.21

Holger Weiss hweiss at users.sourceforge.net
Mon Apr 2 14:39:33 CEST 2007


Update of /cvsroot/nagiosplug/nagiosplug/plugins
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv20617

Modified Files:
	check_ntp.c 
Log Message:
Don't rely on the assumption that the size of a READSTAT response is a
multiple of sizeof(ntp_assoc_status_pair).


Index: check_ntp.c
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_ntp.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- check_ntp.c	2 Apr 2007 07:32:30 -0000	1.20
+++ check_ntp.c	2 Apr 2007 12:39:30 -0000	1.21
@@ -501,7 +501,7 @@
 double jitter_request(const char *host, int *status){
 	int conn=-1, i, npeers=0, num_candidates=0, syncsource_found=0;
 	int run=0, min_peer_sel=PEER_INCLUDED, num_selected=0, num_valid=0;
-	int peer_offset=0;
+	int peers_size=0, peer_offset=0;
 	ntp_assoc_status_pair *peers=NULL;
 	ntp_control_message req;
 	double rval = 0.0, jitter = -1.0;
@@ -539,11 +539,12 @@
 		/* Each peer identifier is 4 bytes in the data section, which
 	 	 * we represent as a ntp_assoc_status_pair datatype.
 	 	 */
-		npeers+=(ntohs(req.count)/sizeof(ntp_assoc_status_pair));
-		if((tmp=realloc(peers, sizeof(ntp_assoc_status_pair)*npeers)) == NULL)
+		peers_size+=ntohs(req.count);
+		if((tmp=realloc(peers, peers_size)) == NULL)
 			free(peers), die(STATE_UNKNOWN, "can not (re)allocate 'peers' buffer\n");
 		peers=tmp;
 		memcpy((void*)((ptrdiff_t)peers+peer_offset), (void*)req.data, ntohs(req.count));
+		npeers=peers_size/sizeof(ntp_assoc_status_pair);
 		peer_offset+=ntohs(req.count);
 	} while(req.op&REM_MORE);
 
@@ -596,8 +597,8 @@
 					printf("parsing jitter from peer %.2x: ", ntohs(peers[i].assoc));
 				}
 				startofvalue = strchr(req.data, '=');
-				if(startofvalue != NULL) startofvalue++;
 				if(startofvalue != NULL) {
+					startofvalue++;
 					jitter = strtod(startofvalue, &nptr);
 				}
 				if(startofvalue == NULL || startofvalue==nptr){
@@ -618,7 +619,7 @@
 	rval = num_valid ? rval / num_valid : -1.0;
 
 	close(conn);
-	free(peers);
+	if(peers!=NULL) free(peers);
 	/* If we return -1.0, it means no synchronization source was found */
 	return rval;
 }





More information about the Commits mailing list