MINOR: resolvers: resolvers_new() create a resolvers with default values
Split the creation of the resolve structure from the parser to
resolvers_new();
diff --git a/src/resolvers.c b/src/resolvers.c
index 0ced384..4634b55 100644
--- a/src/resolvers.c
+++ b/src/resolvers.c
@@ -3277,6 +3277,68 @@
return err_code;
}
+static int resolvers_new(struct resolvers **resolvers, const char *id, const char *file, int linenum)
+{
+ struct resolvers *r = NULL;
+ struct proxy *p = NULL;
+ int err_code = 0;
+
+ if ((r = calloc(1, sizeof(*r))) == NULL) {
+ err_code |= ERR_ALERT | ERR_ABORT;
+ goto out;
+ }
+
+ /* allocate new proxy to tcp servers */
+ p = calloc(1, sizeof *p);
+ if (!p) {
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
+ }
+
+ init_new_proxy(p);
+ resolvers_setup_proxy(p);
+ p->parent = r;
+ p->id = strdup(id);
+ p->conf.args.file = p->conf.file = strdup(file);
+ p->conf.args.line = p->conf.line = linenum;
+ r->px = p;
+
+ /* default values */
+ LIST_APPEND(&sec_resolvers, &r->list);
+ r->conf.file = strdup(file);
+ r->conf.line = linenum;
+ r->id = strdup(id);
+ r->query_ids = EB_ROOT;
+ /* default maximum response size */
+ r->accepted_payload_size = 512;
+ /* default hold period for nx, other, refuse and timeout is 30s */
+ r->hold.nx = 30000;
+ r->hold.other = 30000;
+ r->hold.refused = 30000;
+ r->hold.timeout = 30000;
+ r->hold.obsolete = 0;
+ /* default hold period for valid is 10s */
+ r->hold.valid = 10000;
+ r->timeout.resolve = 1000;
+ r->timeout.retry = 1000;
+ r->resolve_retries = 3;
+ LIST_INIT(&r->nameservers);
+ LIST_INIT(&r->resolutions.curr);
+ LIST_INIT(&r->resolutions.wait);
+ HA_SPIN_INIT(&r->lock);
+
+ *resolvers = r;
+
+out:
+ if (err_code & (ERR_FATAL|ERR_ABORT)) {
+ ha_free(&r);
+ ha_free(&p);
+ }
+
+ return err_code;
+}
+
+
/*
* Parse a <resolvers> section.
* Returns the error code, 0 if OK, or any combination of :
@@ -3293,7 +3355,6 @@
int err_code = 0;
char *errmsg = NULL;
char *warnmsg = NULL;
- struct proxy *p;
if (strcmp(args[0], "resolvers") == 0) { /* new resolvers section */
if (!*args[1]) {
@@ -3319,51 +3380,12 @@
}
}
- if ((curr_resolvers = calloc(1, sizeof(*curr_resolvers))) == NULL) {
+ err_code |= resolvers_new(&curr_resolvers, args[1], file, linenum);
+ if (err_code & ERR_ALERT) {
ha_alert("parsing [%s:%d] : out of memory.\n", file, linenum);
- err_code |= ERR_ALERT | ERR_ABORT;
goto out;
}
- /* allocate new proxy to tcp servers */
- p = calloc(1, sizeof *p);
- if (!p) {
- ha_alert("parsing [%s:%d] : out of memory.\n", file, linenum);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- init_new_proxy(p);
- resolvers_setup_proxy(p);
- p->parent = curr_resolvers;
- p->id = strdup(args[1]);
- p->conf.args.file = p->conf.file = strdup(file);
- p->conf.args.line = p->conf.line = linenum;
- curr_resolvers->px = p;
-
- /* default values */
- LIST_APPEND(&sec_resolvers, &curr_resolvers->list);
- curr_resolvers->conf.file = strdup(file);
- curr_resolvers->conf.line = linenum;
- curr_resolvers->id = strdup(args[1]);
- curr_resolvers->query_ids = EB_ROOT;
- /* default maximum response size */
- curr_resolvers->accepted_payload_size = 512;
- /* default hold period for nx, other, refuse and timeout is 30s */
- curr_resolvers->hold.nx = 30000;
- curr_resolvers->hold.other = 30000;
- curr_resolvers->hold.refused = 30000;
- curr_resolvers->hold.timeout = 30000;
- curr_resolvers->hold.obsolete = 0;
- /* default hold period for valid is 10s */
- curr_resolvers->hold.valid = 10000;
- curr_resolvers->timeout.resolve = 1000;
- curr_resolvers->timeout.retry = 1000;
- curr_resolvers->resolve_retries = 3;
- LIST_INIT(&curr_resolvers->nameservers);
- LIST_INIT(&curr_resolvers->resolutions.curr);
- LIST_INIT(&curr_resolvers->resolutions.wait);
- HA_SPIN_INIT(&curr_resolvers->lock);
}
else if (strcmp(args[0], "nameserver") == 0) { /* nameserver definition */
struct dns_nameserver *newnameserver = NULL;