diff options
| -rw-r--r-- | NEWS | 4 | ||||
| -rw-r--r-- | THANKS.in | 1 | ||||
| -rw-r--r-- | plugins/check_dns.c | 2 | ||||
| -rw-r--r-- | plugins/t/check_dns.t | 22 |
4 files changed, 26 insertions, 3 deletions
| @@ -1,6 +1,10 @@ | |||
| 1 | This file documents the major additions and syntax changes between releases. | 1 | This file documents the major additions and syntax changes between releases. |
| 2 | 2 | ||
| 3 | 2.3 [...] | 3 | 2.3 [...] |
| 4 | ENHANCEMENTS | ||
| 5 | check_dns: allow 'expected address' (-a) to be specified in CIDR notation | ||
| 6 | (IPv4 only). | ||
| 7 | |||
| 4 | FIXES | 8 | FIXES |
| 5 | Fix regression where check_dhcp was rereading response in a tight loop | 9 | Fix regression where check_dhcp was rereading response in a tight loop |
| 6 | 10 | ||
| @@ -355,3 +355,4 @@ Michael Melcher | |||
| 355 | Sven Geggus | 355 | Sven Geggus |
| 356 | Thomas Kurschel | 356 | Thomas Kurschel |
| 357 | Yannick Charton | 357 | Yannick Charton |
| 358 | Nicolai Søborg | ||
diff --git a/plugins/check_dns.c b/plugins/check_dns.c index 4067c14b..5feafc80 100644 --- a/plugins/check_dns.c +++ b/plugins/check_dns.c | |||
| @@ -308,7 +308,7 @@ ip_match_cidr(const char *addr, const char *cidr_ro) | |||
| 308 | mask = atoi(mask_c); | 308 | mask = atoi(mask_c); |
| 309 | 309 | ||
| 310 | /* https://www.cryptobells.com/verifying-ips-in-a-subnet-in-php/ */ | 310 | /* https://www.cryptobells.com/verifying-ips-in-a-subnet-in-php/ */ |
| 311 | return ( ip2long(addr) & ~ ( ( 1 << ( 32 - mask ) ) - 1 ) ) == ( ip2long(subnet) >> (32 - mask) ) << (32 - mask); | 311 | return (ip2long(addr) & ~((1 << (32 - mask)) - 1)) == (ip2long(subnet) >> (32 - mask)) << (32 - mask); |
| 312 | } | 312 | } |
| 313 | 313 | ||
| 314 | unsigned long | 314 | unsigned long |
diff --git a/plugins/t/check_dns.t b/plugins/t/check_dns.t index 035e7682..3dbb7186 100644 --- a/plugins/t/check_dns.t +++ b/plugins/t/check_dns.t | |||
| @@ -10,7 +10,7 @@ use NPTest; | |||
| 10 | 10 | ||
| 11 | plan skip_all => "check_dns not compiled" unless (-x "check_dns"); | 11 | plan skip_all => "check_dns not compiled" unless (-x "check_dns"); |
| 12 | 12 | ||
| 13 | plan tests => 16; | 13 | plan tests => 19; |
| 14 | 14 | ||
| 15 | my $successOutput = '/DNS OK: [\.0-9]+ seconds? response time/'; | 15 | my $successOutput = '/DNS OK: [\.0-9]+ seconds? response time/'; |
| 16 | 16 | ||
| @@ -23,7 +23,19 @@ my $hostname_valid = getTestParameter( | |||
| 23 | my $hostname_valid_ip = getTestParameter( | 23 | my $hostname_valid_ip = getTestParameter( |
| 24 | "NP_HOSTNAME_VALID_IP", | 24 | "NP_HOSTNAME_VALID_IP", |
| 25 | "The IP address of the valid hostname $hostname_valid", | 25 | "The IP address of the valid hostname $hostname_valid", |
| 26 | "66.118.156.50", | 26 | "130.133.8.40", |
| 27 | ); | ||
| 28 | |||
| 29 | my $hostname_valid_cidr = getTestParameter( | ||
| 30 | "NP_HOSTNAME_VALID_CIDR", | ||
| 31 | "An valid CIDR range containing $hostname_valid_ip", | ||
| 32 | "130.133.8.41/30", | ||
| 33 | ); | ||
| 34 | |||
| 35 | my $hostname_invalid_cidr = getTestParameter( | ||
| 36 | "NP_HOSTNAME_INVALID_CIDR", | ||
| 37 | "An valid CIDR range not containing $hostname_valid_ip", | ||
| 38 | "130.133.8.39/30", | ||
| 27 | ); | 39 | ); |
| 28 | 40 | ||
| 29 | my $hostname_valid_reverse = getTestParameter( | 41 | my $hostname_valid_reverse = getTestParameter( |
| @@ -87,3 +99,9 @@ $res = NPTest->testCmd("./check_dns -H $hostname_valid_ip -a $hostname_valid_rev | |||
| 87 | cmp_ok( $res->return_code, '==', 0, "Got expected fqdn"); | 99 | cmp_ok( $res->return_code, '==', 0, "Got expected fqdn"); |
| 88 | like ( $res->output, $successOutput, "Output OK"); | 100 | like ( $res->output, $successOutput, "Output OK"); |
| 89 | 101 | ||
| 102 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_valid_cidr -t 5"); | ||
| 103 | cmp_ok( $res->return_code, '==', 0, "Got expected address"); | ||
| 104 | |||
| 105 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_invalid_cidr -t 5"); | ||
| 106 | cmp_ok( $res->return_code, '==', 2, "Got wrong address"); | ||
| 107 | like ( $res->output, "/^DNS CRITICAL.*expected '$hostname_invalid_cidr' but got '$hostname_valid_ip'".'$/', "Output OK"); | ||
