[monitoring-plugins] ignore CNAMEs in RDNS-mode #1460

Lorenz Kästle git at monitoring-plugins.org
Sun Mar 9 16:00:11 CET 2025


 Module: monitoring-plugins
 Branch: master
 Commit: 16cb24807db5b1bd20e2b31a15bda7940f1145bd
 Author: Lorenz Kästle <12514511+RincewindsHat at users.noreply.github.com>
   Date: Sun Mar  9 15:43:06 2025 +0100
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=16cb2480

ignore CNAMEs in RDNS-mode #1460

Suppose your provider uses RFC 2317 (or RFC 4183 for that matter). The output of nslookup could look like the following:
2.120.22.172.in-addr.arpa	canonical name = 2.0/26.120.22.172.in-addr.arpa.
2.0/26.120.22.172.in-addr.arpa	name = rajesh.intern.prauscher.de.
Without this filter, check_dns would check the string against "2.0/26.120.22.172.in-addr.arpa., rajesh.intern.prauscher.de." which will fail for obvious reasons.
In forward DNS, this is achieved in line 165, as nslookup will print the address separate from the CNAME-resolving.

Original commit by Patrick Rauscher (prauscher at prauscher.de), adapted
here.

---

 plugins/check_dns.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/plugins/check_dns.c b/plugins/check_dns.c
index a4c8e9b1..95f33083 100644
--- a/plugins/check_dns.c
+++ b/plugins/check_dns.c
@@ -128,6 +128,9 @@ int main(int argc, char **argv) {
 		}
 
 		if (strcasestr(chld_out.line[i], ".in-addr.arpa") || strcasestr(chld_out.line[i], ".ip6.arpa")) {
+			if ((strstr(chld_out.line[i], "canonical name = ") != NULL)) {
+				continue;
+			}
 			char *temp_buffer = NULL;
 			if ((temp_buffer = strstr(chld_out.line[i], "name = "))) {
 				addresses[n_addresses++] = strdup(temp_buffer + 7);



More information about the Commits mailing list