From 529cfff08f5e921c9db9715dc97339011f3f9cf1 Mon Sep 17 00:00:00 2001 From: Juan Altmayer Pizzorno Date: Mon, 14 May 2018 13:40:05 -0400 Subject: [PATCH 1/2] Added function to allow overriding (while initializing) DNS resolver for a library. Especially useful for tests, but also needed to integrate into environments where other DNS resolution infrastructure is used. --- libopenarc/arc.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ libopenarc/arc.h | 31 +++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/libopenarc/arc.c b/libopenarc/arc.c index b7dae823..baadfaf4 100644 --- a/libopenarc/arc.c +++ b/libopenarc/arc.c @@ -1015,6 +1015,61 @@ arc_options(ARC_LIB *lib, int op, int arg, void *val, size_t valsz) } } + +/* +** +** ARC_INIT_DNS -- override and initialize library DNS resolver +** +** Parameters: +** lib -- library to set DNS for +** srv -- resolver handle to use +** arc_dns_close -- terminates a resolver +** arc_dns_start -- starts a DNS query +** arc_dns_cancel -- cancels a DNS query +** arc_dns_waitreply -- synchronously waits on a DNS response +** +** Return value: +** An ARC_STAT_* constant. +*/ + +ARC_STAT +arc_init_dns(ARC_LIB *lib, void* srv, + void (*arc_dns_close) (void *srv), + int (*arc_dns_start) (void *srv, int type, + unsigned char *query, + unsigned char *buf, + size_t buflen, + void **qh), + int (*arc_dns_cancel) (void *srv, void *qh), + int (*arc_dns_waitreply) (void *srv, + void *qh, + struct timeval *to, + size_t *bytes, + int *error, + int *dnssec)) +{ + assert(lib != NULL); + assert(srv != 0); + assert(arc_dns_close != 0); + assert(arc_dns_start != 0); + assert(arc_dns_cancel != 0); + assert(arc_dns_waitreply != 0); + + /* "illegal state" would be better */ + if (lib->arcl_dnsinit_done) + return ARC_STAT_INTERNAL; + + lib->arcl_dnsinit_done = TRUE; + lib->arcl_dns_service = srv; + lib->arcl_dns_init = 0; + lib->arcl_dns_close = arc_dns_close; + lib->arcl_dns_start = arc_dns_start; + lib->arcl_dns_cancel = arc_dns_cancel; + lib->arcl_dns_waitreply = arc_dns_waitreply; + + return ARC_STAT_OK; +} + /* ** ARC_GETSSLBUF -- retrieve SSL error buffer ** diff --git a/libopenarc/arc.h b/libopenarc/arc.h index 6dd67e4e..538fa20d 100644 --- a/libopenarc/arc.h +++ b/libopenarc/arc.h @@ -360,6 +360,37 @@ extern const char *arc_geterror __P((ARC_MESSAGE *)); extern ARC_STAT arc_options __P((ARC_LIB *, int, int, void *, size_t)); +/* +** +** ARC_INIT_DNS -- override and initialize library DNS resolver +** +** Parameters: +** lib -- library to set DNS for +** srv -- resolver handle to use +** arc_dns_close -- terminates a resolver +** arc_dns_start -- starts a DNS query +** arc_dns_cancel -- cancels a DNS query +** arc_dns_waitreply -- synchronously waits on a DNS response +** +** Return value: +** An ARC_STAT_* constant. +*/ + +extern ARC_STAT arc_init_dns __P((ARC_LIB *, void* srv, + void (*arc_dns_close) (void *srv), + int (*arc_dns_start) (void *srv, int type, + unsigned char *query, + unsigned char *buf, + size_t buflen, + void **qh), + int (*arc_dns_cancel) (void *srv, void *qh), + int (*arc_dns_waitreply) (void *srv, + void *qh, + struct timeval *to, + size_t *bytes, + int *error, + int *dnssec))); + /* ** ARC_GETSSLBUF -- retrieve SSL error buffer ** From 3f3f9eb20da8747886dcc9fb95444989bc6d38ef Mon Sep 17 00:00:00 2001 From: Juan Altmayer Pizzorno Date: Thu, 17 May 2018 14:10:25 -0400 Subject: [PATCH 2/2] Remove extraneous empty line --- libopenarc/arc.c | 1 - 1 file changed, 1 deletion(-) diff --git a/libopenarc/arc.c b/libopenarc/arc.c index baadfaf4..4cb7f4aa 100644 --- a/libopenarc/arc.c +++ b/libopenarc/arc.c @@ -1015,7 +1015,6 @@ arc_options(ARC_LIB *lib, int op, int arg, void *val, size_t valsz) } } - /* ** ** ARC_INIT_DNS -- override and initialize library DNS resolver