1238106SdesIndex: smallapp/unbound-host.c 2238106Sdes=================================================================== 3238106Sdes--- smallapp/unbound-host.c (revision 2115) 4238106Sdes+++ smallapp/unbound-host.c (working copy) 5238106Sdes@@ -62,9 +62,18 @@ 6238106Sdes #include "libunbound/unbound.h" 7238106Sdes #include <ldns/ldns.h> 8238106Sdes 9238106Sdes+/** status variable ala nagios */ 10238106Sdes+#define FINAL_STATUS_OK 0 11238106Sdes+#define FINAL_STATUS_WARNING 1 12238106Sdes+#define FINAL_STATUS_CRITICAL 2 13238106Sdes+#define FINAL_STATUS_UNKNOWN 3 14238106Sdes+ 15238106Sdes /** verbosity for unbound-host app */ 16238106Sdes static int verb = 0; 17238106Sdes 18238106Sdes+/** variable to determine final output */ 19238106Sdes+static int final_status = FINAL_STATUS_UNKNOWN; 20238106Sdes+ 21238106Sdes /** Give unbound-host usage, and exit (1). */ 22238106Sdes static void 23238106Sdes usage() 24238106Sdes@@ -93,7 +102,7 @@ 25238106Sdes printf("Version %s\n", PACKAGE_VERSION); 26238106Sdes printf("BSD licensed, see LICENSE in source package for details.\n"); 27238106Sdes printf("Report bugs to %s\n", PACKAGE_BUGREPORT); 28238106Sdes- exit(1); 29238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 30238106Sdes } 31238106Sdes 32238106Sdes /** determine if str is ip4 and put into reverse lookup format */ 33238106Sdes@@ -138,7 +147,7 @@ 34238106Sdes *res = strdup(buf); 35238106Sdes if(!*res) { 36238106Sdes fprintf(stderr, "error: out of memory\n"); 37238106Sdes- exit(1); 38238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 39238106Sdes } 40238106Sdes return 1; 41238106Sdes } 42238106Sdes@@ -158,7 +167,7 @@ 43238106Sdes } 44238106Sdes if(!res) { 45238106Sdes fprintf(stderr, "error: out of memory\n"); 46238106Sdes- exit(1); 47238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 48238106Sdes } 49238106Sdes return res; 50238106Sdes } 51238106Sdes@@ -172,7 +181,7 @@ 52238106Sdes if(r == 0 && strcasecmp(t, "TYPE0") != 0 && 53238106Sdes strcmp(t, "") != 0) { 54238106Sdes fprintf(stderr, "error unknown type %s\n", t); 55238106Sdes- exit(1); 56238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 57238106Sdes } 58238106Sdes return r; 59238106Sdes } 60238106Sdes@@ -191,7 +200,7 @@ 61238106Sdes if(r == 0 && strcasecmp(c, "CLASS0") != 0 && 62238106Sdes strcmp(c, "") != 0) { 63238106Sdes fprintf(stderr, "error unknown class %s\n", c); 64238106Sdes- exit(1); 65238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 66238106Sdes } 67238106Sdes return r; 68238106Sdes } 69238106Sdes@@ -207,6 +216,19 @@ 70238106Sdes return "(insecure)"; 71238106Sdes } 72238106Sdes 73238106Sdes+/** update the final status for the exit code */ 74238106Sdes+void 75238106Sdes+update_final_status(struct ub_result* result) 76238106Sdes+{ 77238106Sdes+ if (final_status == FINAL_STATUS_UNKNOWN || final_status == FINAL_STATUS_OK) { 78238106Sdes+ if (result->secure) final_status = FINAL_STATUS_OK; 79238106Sdes+ else if (result->bogus) final_status = FINAL_STATUS_CRITICAL; 80238106Sdes+ else final_status = FINAL_STATUS_WARNING; 81238106Sdes+ } 82238106Sdes+ else if (final_status == FINAL_STATUS_WARNING && result->bogus) 83238106Sdes+ final_status = FINAL_STATUS_CRITICAL; 84238106Sdes+} 85238106Sdes+ 86238106Sdes /** nice string for type */ 87238106Sdes static void 88238106Sdes pretty_type(char* s, size_t len, int t) 89238106Sdes@@ -353,7 +375,7 @@ 90238106Sdes } else { 91238106Sdes fprintf(stderr, "could not parse " 92238106Sdes "reply packet to ANY query\n"); 93238106Sdes- exit(1); 94238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 95238106Sdes } 96238106Sdes ldns_pkt_free(p); 97238106Sdes 98238106Sdes@@ -388,9 +410,10 @@ 99238106Sdes ret = ub_resolve(ctx, q, t, c, &result); 100238106Sdes if(ret != 0) { 101238106Sdes fprintf(stderr, "resolve error: %s\n", ub_strerror(ret)); 102238106Sdes- exit(1); 103238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 104238106Sdes } 105238106Sdes pretty_output(q, t, c, result, docname); 106238106Sdes+ update_final_status(result); 107238106Sdes ret = result->nxdomain; 108238106Sdes ub_resolve_free(result); 109238106Sdes return ret; 110238106Sdes@@ -427,7 +450,7 @@ 111238106Sdes { 112238106Sdes if(r != 0) { 113238106Sdes fprintf(stderr, "error: %s\n", ub_strerror(r)); 114238106Sdes- exit(1); 115238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 116238106Sdes } 117238106Sdes } 118238106Sdes 119238106Sdes@@ -448,7 +471,7 @@ 120238106Sdes ctx = ub_ctx_create(); 121238106Sdes if(!ctx) { 122238106Sdes fprintf(stderr, "error: out of memory\n"); 123238106Sdes- exit(1); 124238106Sdes+ exit(FINAL_STATUS_UNKNOWN); 125238106Sdes } 126238106Sdes 127238106Sdes /* parse the options */ 128238106Sdes@@ -509,5 +532,5 @@ 129238106Sdes usage(); 130238106Sdes 131238106Sdes lookup(ctx, argv[0], qtype, qclass); 132238106Sdes- return 0; 133238106Sdes+ return final_status; 134238106Sdes } 135