diff options
| author | Holger Weiss <hweiss@users.sourceforge.net> | 2007-04-02 12:39:30 +0000 |
|---|---|---|
| committer | Holger Weiss <hweiss@users.sourceforge.net> | 2007-04-02 12:39:30 +0000 |
| commit | dcbf7bdf6b67a41e749271f60b4ee0f1f34abc34 (patch) | |
| tree | f2cb66e35557476893481f92a8ab13599555a1c0 /plugins | |
| parent | eca20aa3a05b66f6f8182b6f927e2514b90bd4c7 (diff) | |
| download | monitoring-plugins-dcbf7bdf6b67a41e749271f60b4ee0f1f34abc34.tar.gz | |
Don't rely on the assumption that the size of a READSTAT response is a
multiple of sizeof(ntp_assoc_status_pair).
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1673 f882894a-f735-0410-b71e-b25c423dba1c
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/check_ntp.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/plugins/check_ntp.c b/plugins/check_ntp.c index 99fa9a2e..8a08af50 100644 --- a/plugins/check_ntp.c +++ b/plugins/check_ntp.c | |||
| @@ -501,7 +501,7 @@ setup_control_request(ntp_control_message *p, uint8_t opcode, uint16_t seq){ | |||
| 501 | double jitter_request(const char *host, int *status){ | 501 | double jitter_request(const char *host, int *status){ |
| 502 | int conn=-1, i, npeers=0, num_candidates=0, syncsource_found=0; | 502 | int conn=-1, i, npeers=0, num_candidates=0, syncsource_found=0; |
| 503 | int run=0, min_peer_sel=PEER_INCLUDED, num_selected=0, num_valid=0; | 503 | int run=0, min_peer_sel=PEER_INCLUDED, num_selected=0, num_valid=0; |
| 504 | int peer_offset=0; | 504 | int peers_size=0, peer_offset=0; |
| 505 | ntp_assoc_status_pair *peers=NULL; | 505 | ntp_assoc_status_pair *peers=NULL; |
| 506 | ntp_control_message req; | 506 | ntp_control_message req; |
| 507 | double rval = 0.0, jitter = -1.0; | 507 | double rval = 0.0, jitter = -1.0; |
| @@ -539,11 +539,12 @@ double jitter_request(const char *host, int *status){ | |||
| 539 | /* Each peer identifier is 4 bytes in the data section, which | 539 | /* Each peer identifier is 4 bytes in the data section, which |
| 540 | * we represent as a ntp_assoc_status_pair datatype. | 540 | * we represent as a ntp_assoc_status_pair datatype. |
| 541 | */ | 541 | */ |
| 542 | npeers+=(ntohs(req.count)/sizeof(ntp_assoc_status_pair)); | 542 | peers_size+=ntohs(req.count); |
| 543 | if((tmp=realloc(peers, sizeof(ntp_assoc_status_pair)*npeers)) == NULL) | 543 | if((tmp=realloc(peers, peers_size)) == NULL) |
| 544 | free(peers), die(STATE_UNKNOWN, "can not (re)allocate 'peers' buffer\n"); | 544 | free(peers), die(STATE_UNKNOWN, "can not (re)allocate 'peers' buffer\n"); |
| 545 | peers=tmp; | 545 | peers=tmp; |
| 546 | memcpy((void*)((ptrdiff_t)peers+peer_offset), (void*)req.data, ntohs(req.count)); | 546 | memcpy((void*)((ptrdiff_t)peers+peer_offset), (void*)req.data, ntohs(req.count)); |
| 547 | npeers=peers_size/sizeof(ntp_assoc_status_pair); | ||
| 547 | peer_offset+=ntohs(req.count); | 548 | peer_offset+=ntohs(req.count); |
| 548 | } while(req.op&REM_MORE); | 549 | } while(req.op&REM_MORE); |
| 549 | 550 | ||
| @@ -596,8 +597,8 @@ double jitter_request(const char *host, int *status){ | |||
| 596 | printf("parsing jitter from peer %.2x: ", ntohs(peers[i].assoc)); | 597 | printf("parsing jitter from peer %.2x: ", ntohs(peers[i].assoc)); |
| 597 | } | 598 | } |
| 598 | startofvalue = strchr(req.data, '='); | 599 | startofvalue = strchr(req.data, '='); |
| 599 | if(startofvalue != NULL) startofvalue++; | ||
| 600 | if(startofvalue != NULL) { | 600 | if(startofvalue != NULL) { |
| 601 | startofvalue++; | ||
| 601 | jitter = strtod(startofvalue, &nptr); | 602 | jitter = strtod(startofvalue, &nptr); |
| 602 | } | 603 | } |
| 603 | if(startofvalue == NULL || startofvalue==nptr){ | 604 | if(startofvalue == NULL || startofvalue==nptr){ |
| @@ -618,7 +619,7 @@ double jitter_request(const char *host, int *status){ | |||
| 618 | rval = num_valid ? rval / num_valid : -1.0; | 619 | rval = num_valid ? rval / num_valid : -1.0; |
| 619 | 620 | ||
| 620 | close(conn); | 621 | close(conn); |
| 621 | free(peers); | 622 | if(peers!=NULL) free(peers); |
| 622 | /* If we return -1.0, it means no synchronization source was found */ | 623 | /* If we return -1.0, it means no synchronization source was found */ |
| 623 | return rval; | 624 | return rval; |
| 624 | } | 625 | } |
