|
Tomas Hozza |
01ddf2 |
From e3d1d75a58dcc6bdb7fa7a9a3147ffd297407c76 Mon Sep 17 00:00:00 2001
|
|
Tomas Hozza |
01ddf2 |
From: Mark Andrews via RT <dhcp-bugs@isc.org>
|
|
Tomas Hozza |
01ddf2 |
Date: Wed, 15 Jan 2014 02:30:27 +0000
|
|
Tomas Hozza |
01ddf2 |
Subject: [PATCH] non-existance of resolv.conf should not be fatal
|
|
Tomas Hozza |
01ddf2 |
|
|
Tomas Hozza |
01ddf2 |
I've just put the following in for review. The open question is whether
|
|
Tomas Hozza |
01ddf2 |
we should return ISC_R_SUCCESS or some error code, when the file does not
|
|
Tomas Hozza |
01ddf2 |
exist, and fix the callers.
|
|
Tomas Hozza |
01ddf2 |
|
|
Tomas Hozza |
01ddf2 |
This should be enough to allow you to continue testing.
|
|
Tomas Hozza |
01ddf2 |
|
|
Tomas Hozza |
01ddf2 |
Mark
|
|
Tomas Hozza |
01ddf2 |
|
|
Tomas Hozza |
01ddf2 |
commit 1992f682728798ef73db89351285f03de6d52043
|
|
Tomas Hozza |
01ddf2 |
Author: Mark Andrews <marka@isc.org>
|
|
Tomas Hozza |
01ddf2 |
Date: Wed Jan 15 13:25:22 2014 +1100
|
|
Tomas Hozza |
01ddf2 |
---
|
|
Tomas Hozza |
01ddf2 |
lib/irs/resconf.c | 75 +++++++++++++++++++++++++++++--------------------------
|
|
Tomas Hozza |
01ddf2 |
1 file changed, 40 insertions(+), 35 deletions(-)
|
|
Tomas Hozza |
01ddf2 |
|
|
Tomas Hozza |
01ddf2 |
diff --git a/lib/irs/resconf.c b/lib/irs/resconf.c
|
|
Tomas Hozza |
01ddf2 |
index 88bdac1..8319dc6 100644
|
|
Tomas Hozza |
01ddf2 |
--- a/lib/irs/resconf.c
|
|
Tomas Hozza |
01ddf2 |
+++ b/lib/irs/resconf.c
|
|
Tomas Hozza |
01ddf2 |
@@ -507,45 +507,50 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp)
|
|
Tomas Hozza |
01ddf2 |
conf->search[i] = NULL;
|
|
Tomas Hozza |
01ddf2 |
|
|
Tomas Hozza |
01ddf2 |
errno = 0;
|
|
Tomas Hozza |
01ddf2 |
- if ((fp = fopen(filename, "r")) == NULL) {
|
|
Tomas Hozza |
01ddf2 |
- isc_mem_put(mctx, conf, sizeof(*conf));
|
|
Tomas Hozza |
01ddf2 |
- return (ISC_R_INVALIDFILE);
|
|
Tomas Hozza |
01ddf2 |
- }
|
|
Tomas Hozza |
01ddf2 |
-
|
|
Tomas Hozza |
01ddf2 |
- ret = ISC_R_SUCCESS;
|
|
Tomas Hozza |
01ddf2 |
- do {
|
|
Tomas Hozza |
01ddf2 |
- stopchar = getword(fp, word, sizeof(word));
|
|
Tomas Hozza |
01ddf2 |
- if (stopchar == EOF) {
|
|
Tomas Hozza |
01ddf2 |
- rval = ISC_R_SUCCESS;
|
|
Tomas Hozza |
01ddf2 |
- POST(rval);
|
|
Tomas Hozza |
01ddf2 |
- break;
|
|
Tomas Hozza |
01ddf2 |
- }
|
|
Tomas Hozza |
01ddf2 |
-
|
|
Tomas Hozza |
01ddf2 |
- if (strlen(word) == 0U)
|
|
Tomas Hozza |
01ddf2 |
- rval = ISC_R_SUCCESS;
|
|
Tomas Hozza |
01ddf2 |
- else if (strcmp(word, "nameserver") == 0)
|
|
Tomas Hozza |
01ddf2 |
- rval = resconf_parsenameserver(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
- else if (strcmp(word, "domain") == 0)
|
|
Tomas Hozza |
01ddf2 |
- rval = resconf_parsedomain(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
- else if (strcmp(word, "search") == 0)
|
|
Tomas Hozza |
01ddf2 |
- rval = resconf_parsesearch(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
- else if (strcmp(word, "sortlist") == 0)
|
|
Tomas Hozza |
01ddf2 |
- rval = resconf_parsesortlist(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
- else if (strcmp(word, "options") == 0)
|
|
Tomas Hozza |
01ddf2 |
- rval = resconf_parseoption(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
- else {
|
|
Tomas Hozza |
01ddf2 |
- /* unrecognised word. Ignore entire line */
|
|
Tomas Hozza |
01ddf2 |
- rval = ISC_R_SUCCESS;
|
|
Tomas Hozza |
01ddf2 |
- stopchar = eatline(fp);
|
|
Tomas Hozza |
01ddf2 |
+ if ((fp = fopen(filename, "r")) != NULL) {
|
|
Tomas Hozza |
01ddf2 |
+ ret = ISC_R_SUCCESS;
|
|
Tomas Hozza |
01ddf2 |
+ do {
|
|
Tomas Hozza |
01ddf2 |
+ stopchar = getword(fp, word, sizeof(word));
|
|
Tomas Hozza |
01ddf2 |
if (stopchar == EOF) {
|
|
Tomas Hozza |
01ddf2 |
+ rval = ISC_R_SUCCESS;
|
|
Tomas Hozza |
01ddf2 |
+ POST(rval);
|
|
Tomas Hozza |
01ddf2 |
break;
|
|
Tomas Hozza |
01ddf2 |
}
|
|
Tomas Hozza |
01ddf2 |
- }
|
|
Tomas Hozza |
01ddf2 |
- if (ret == ISC_R_SUCCESS && rval != ISC_R_SUCCESS)
|
|
Tomas Hozza |
01ddf2 |
- ret = rval;
|
|
Tomas Hozza |
01ddf2 |
- } while (1);
|
|
Tomas Hozza |
01ddf2 |
|
|
Tomas Hozza |
01ddf2 |
- fclose(fp);
|
|
Tomas Hozza |
01ddf2 |
+ if (strlen(word) == 0U)
|
|
Tomas Hozza |
01ddf2 |
+ rval = ISC_R_SUCCESS;
|
|
Tomas Hozza |
01ddf2 |
+ else if (strcmp(word, "nameserver") == 0)
|
|
Tomas Hozza |
01ddf2 |
+ rval = resconf_parsenameserver(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
+ else if (strcmp(word, "domain") == 0)
|
|
Tomas Hozza |
01ddf2 |
+ rval = resconf_parsedomain(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
+ else if (strcmp(word, "search") == 0)
|
|
Tomas Hozza |
01ddf2 |
+ rval = resconf_parsesearch(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
+ else if (strcmp(word, "sortlist") == 0)
|
|
Tomas Hozza |
01ddf2 |
+ rval = resconf_parsesortlist(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
+ else if (strcmp(word, "options") == 0)
|
|
Tomas Hozza |
01ddf2 |
+ rval = resconf_parseoption(conf, fp);
|
|
Tomas Hozza |
01ddf2 |
+ else {
|
|
Tomas Hozza |
01ddf2 |
+ /* unrecognised word. Ignore entire line */
|
|
Tomas Hozza |
01ddf2 |
+ rval = ISC_R_SUCCESS;
|
|
Tomas Hozza |
01ddf2 |
+ stopchar = eatline(fp);
|
|
Tomas Hozza |
01ddf2 |
+ if (stopchar == EOF) {
|
|
Tomas Hozza |
01ddf2 |
+ break;
|
|
Tomas Hozza |
01ddf2 |
+ }
|
|
Tomas Hozza |
01ddf2 |
+ }
|
|
Tomas Hozza |
01ddf2 |
+ if (ret == ISC_R_SUCCESS && rval != ISC_R_SUCCESS)
|
|
Tomas Hozza |
01ddf2 |
+ ret = rval;
|
|
Tomas Hozza |
01ddf2 |
+ } while (1);
|
|
Tomas Hozza |
01ddf2 |
+
|
|
Tomas Hozza |
01ddf2 |
+ fclose(fp);
|
|
Tomas Hozza |
01ddf2 |
+ } else {
|
|
Tomas Hozza |
01ddf2 |
+ switch (errno) {
|
|
Tomas Hozza |
01ddf2 |
+ case ENOENT:
|
|
Tomas Hozza |
01ddf2 |
+ break;
|
|
Tomas Hozza |
01ddf2 |
+ default:
|
|
Tomas Hozza |
01ddf2 |
+ isc_mem_put(mctx, conf, sizeof(*conf));
|
|
Tomas Hozza |
01ddf2 |
+ return (ISC_R_INVALIDFILE);
|
|
Tomas Hozza |
01ddf2 |
+ }
|
|
Tomas Hozza |
01ddf2 |
+ }
|
|
Tomas Hozza |
01ddf2 |
|
|
Tomas Hozza |
01ddf2 |
/* If we don't find a nameserver fall back to localhost */
|
|
Tomas Hozza |
01ddf2 |
if (conf->numns == 0) {
|
|
Tomas Hozza |
01ddf2 |
--
|
|
Tomas Hozza |
01ddf2 |
1.8.4.2
|
|
Tomas Hozza |
01ddf2 |
|