]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/unbound-host.nagios.patch
Vendor import of Unbound 1.9.2.
[FreeBSD/FreeBSD.git] / contrib / unbound-host.nagios.patch
1 Index: smallapp/unbound-host.c
2 ===================================================================
3 --- smallapp/unbound-host.c     (revision 2115)
4 +++ smallapp/unbound-host.c     (working copy)
5 @@ -62,9 +62,18 @@
6  #include "libunbound/unbound.h"
7  #include <ldns/ldns.h>
8  
9 +/** status variable ala nagios */
10 +#define FINAL_STATUS_OK                0
11 +#define FINAL_STATUS_WARNING   1
12 +#define FINAL_STATUS_CRITICAL  2
13 +#define FINAL_STATUS_UNKNOWN   3
14 +
15  /** verbosity for unbound-host app */
16  static int verb = 0;
17  
18 +/** variable to determine final output */
19 +static int final_status = FINAL_STATUS_UNKNOWN;
20 +
21  /** Give unbound-host usage, and exit (1). */
22  static void
23  usage()
24 @@ -93,7 +102,7 @@
25         printf("Version %s\n", PACKAGE_VERSION);
26         printf("BSD licensed, see LICENSE in source package for details.\n");
27         printf("Report bugs to %s\n", PACKAGE_BUGREPORT);
28 -       exit(1);
29 +       exit(FINAL_STATUS_UNKNOWN);
30  }
31  
32  /** determine if str is ip4 and put into reverse lookup format */
33 @@ -138,7 +147,7 @@
34         *res = strdup(buf);
35         if(!*res) {
36                 fprintf(stderr, "error: out of memory\n");
37 -               exit(1);
38 +               exit(FINAL_STATUS_UNKNOWN);
39         }
40         return 1;
41  }
42 @@ -158,7 +167,7 @@
43         }
44         if(!res) {
45                 fprintf(stderr, "error: out of memory\n");
46 -               exit(1);
47 +               exit(FINAL_STATUS_UNKNOWN);
48         }
49         return res;
50  }
51 @@ -172,7 +181,7 @@
52                 if(r == 0 && strcasecmp(t, "TYPE0") != 0 && 
53                         strcmp(t, "") != 0) {
54                         fprintf(stderr, "error unknown type %s\n", t);
55 -                       exit(1);
56 +                       exit(FINAL_STATUS_UNKNOWN);
57                 }
58                 return r;
59         }
60 @@ -191,7 +200,7 @@
61                 if(r == 0 && strcasecmp(c, "CLASS0") != 0 && 
62                         strcmp(c, "") != 0) {
63                         fprintf(stderr, "error unknown class %s\n", c);
64 -                       exit(1);
65 +                       exit(FINAL_STATUS_UNKNOWN);
66                 }
67                 return r;
68         }
69 @@ -207,6 +216,19 @@
70         return "(insecure)";
71  }
72  
73 +/** update the final status for the exit code */
74 +void
75 +update_final_status(struct ub_result* result)
76 +{
77 +       if (final_status == FINAL_STATUS_UNKNOWN || final_status == FINAL_STATUS_OK) {
78 +               if (result->secure) final_status = FINAL_STATUS_OK;
79 +               else if (result->bogus) final_status = FINAL_STATUS_CRITICAL;
80 +               else final_status = FINAL_STATUS_WARNING;
81 +       }
82 +       else if (final_status == FINAL_STATUS_WARNING && result->bogus)
83 +               final_status = FINAL_STATUS_CRITICAL;
84 +}
85 +
86  /** nice string for type */
87  static void
88  pretty_type(char* s, size_t len, int t)
89 @@ -353,7 +375,7 @@
90                                 } else {
91                                         fprintf(stderr, "could not parse "
92                                                 "reply packet to ANY query\n");
93 -                                       exit(1);
94 +                                       exit(FINAL_STATUS_UNKNOWN);
95                                 }
96                                 ldns_pkt_free(p);
97  
98 @@ -388,9 +410,10 @@
99         ret = ub_resolve(ctx, q, t, c, &result);
100         if(ret != 0) {
101                 fprintf(stderr, "resolve error: %s\n", ub_strerror(ret));
102 -               exit(1);
103 +               exit(FINAL_STATUS_UNKNOWN);
104         }
105         pretty_output(q, t, c, result, docname);
106 +       update_final_status(result);
107         ret = result->nxdomain;
108         ub_resolve_free(result);
109         return ret;
110 @@ -427,7 +450,7 @@
111  {
112         if(r != 0) {
113                 fprintf(stderr, "error: %s\n", ub_strerror(r));
114 -               exit(1);
115 +               exit(FINAL_STATUS_UNKNOWN);
116         }
117  }
118  
119 @@ -448,7 +471,7 @@
120         ctx = ub_ctx_create();
121         if(!ctx) {
122                 fprintf(stderr, "error: out of memory\n");
123 -               exit(1);
124 +               exit(FINAL_STATUS_UNKNOWN);
125         }
126  
127         /* parse the options */
128 @@ -509,5 +532,5 @@
129                 usage();
130  
131         lookup(ctx, argv[0], qtype, qclass);
132 -       return 0;
133 +       return final_status;
134  }