Module: monitoring-plugins
 Branch: master
 Commit: 16cb24807db5b1bd20e2b31a15bda7940f1145bd
 Author: Lorenz Kästle <12514511+rincewinds...@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 (prausc...@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);

Reply via email to