mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-04 15:40:44 +00:00
Revert "Issue #237 : Resolver uses nameserver commented out in /etc/resolv.conf"
This reverts commit b5fb1f44ed
.
This commit is contained in:
parent
a7beca6fb1
commit
154ad8e0f8
|
@ -27,14 +27,9 @@ ldns_fget_token(FILE *f, char *token, const char *delim, size_t limit)
|
|||
return ldns_fget_token_l(f, token, delim, limit, NULL);
|
||||
}
|
||||
|
||||
enum file_type2parse {
|
||||
zone_file_type, resolv_conf_file_type
|
||||
};
|
||||
|
||||
static ldns_status
|
||||
ldns_fget_token_l_st_file_type(FILE *f, char **token, size_t *limit,
|
||||
bool fixed, const char *delim, int *line_nr,
|
||||
enum file_type2parse file_type)
|
||||
ldns_status
|
||||
ldns_fget_token_l_st(FILE *f, char **token, size_t *limit, bool fixed
|
||||
, const char *delim, int *line_nr)
|
||||
{
|
||||
int c, prev_c;
|
||||
int p; /* 0 -> no parentheses seen, >0 nr of ( seen */
|
||||
|
@ -103,9 +98,7 @@ ldns_fget_token_l_st_file_type(FILE *f, char **token, size_t *limit,
|
|||
}
|
||||
|
||||
/* do something with comments ; */
|
||||
if ((c == ';'
|
||||
|| (c == '#' && file_type == resolv_conf_file_type))
|
||||
&& quoted == 0) {
|
||||
if (c == ';' && quoted == 0) {
|
||||
if (prev_c != '\\') {
|
||||
com = 1;
|
||||
}
|
||||
|
@ -222,26 +215,6 @@ ldns_fget_token_l_st_file_type(FILE *f, char **token, size_t *limit,
|
|||
return i == 0 ? LDNS_STATUS_SYNTAX_EMPTY : LDNS_STATUS_OK;
|
||||
}
|
||||
|
||||
ldns_status
|
||||
ldns_fget_token_l_st(FILE *f, char **token, size_t *limit, bool fixed
|
||||
, const char *delim, int *line_nr)
|
||||
{
|
||||
return ldns_fget_token_l_st_file_type(
|
||||
f, token, limit, fixed, delim, line_nr, zone_file_type);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
ldns_fget_token_l_resolv_conf(FILE *f, char *token, const char *delim,
|
||||
size_t limit, int *line_nr)
|
||||
{
|
||||
if (limit == 0)
|
||||
limit = LDNS_MAX_LINELEN;
|
||||
if (ldns_fget_token_l_st_file_type(f, &token, &limit, true, delim,
|
||||
line_nr, resolv_conf_file_type))
|
||||
return -1;
|
||||
else
|
||||
return (ssize_t)strlen(token);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
ldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *line_nr)
|
||||
|
|
|
@ -761,8 +761,6 @@ ldns_resolver_new_frm_fp(ldns_resolver **res, FILE *fp)
|
|||
return ldns_resolver_new_frm_fp_l(res, fp, NULL);
|
||||
}
|
||||
|
||||
ssize_t ldns_fget_token_l_resolv_conf(FILE *f, char *token, const char *delim,
|
||||
size_t limit, int *line_nr);
|
||||
ldns_status
|
||||
ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
|
||||
{
|
||||
|
@ -777,7 +775,7 @@ ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
|
|||
#endif
|
||||
ssize_t gtr, bgtr;
|
||||
ldns_buffer *b;
|
||||
int lnr = 0;
|
||||
int lnr = 0, oldline;
|
||||
FILE* myfp = fp;
|
||||
if(!line_nr) line_nr = &lnr;
|
||||
|
||||
|
@ -811,18 +809,36 @@ ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
|
|||
|
||||
gtr = 1;
|
||||
word[0] = 0;
|
||||
oldline = *line_nr;
|
||||
expect = LDNS_RESOLV_KEYWORD;
|
||||
while (gtr > 0) {
|
||||
/* check comments */
|
||||
if (word[0] == '#') {
|
||||
word[0]='x';
|
||||
if(oldline == *line_nr) {
|
||||
/* skip until end of line */
|
||||
int c;
|
||||
do {
|
||||
c = fgetc(myfp);
|
||||
} while(c != EOF && c != '\n');
|
||||
if(c=='\n') (*line_nr)++;
|
||||
}
|
||||
/* and read next to prepare for further parsing */
|
||||
oldline = *line_nr;
|
||||
continue;
|
||||
}
|
||||
oldline = *line_nr;
|
||||
switch(expect) {
|
||||
case LDNS_RESOLV_KEYWORD:
|
||||
/* keyword */
|
||||
gtr = ldns_fget_token_l_resolv_conf(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
|
||||
gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
|
||||
if (gtr != 0) {
|
||||
if(word[0] == '#') continue;
|
||||
for(i = 0; i < LDNS_RESOLV_KEYWORDS; i++) {
|
||||
if (strcasecmp(keyword[i], word) == 0) {
|
||||
/* chosen the keyword and
|
||||
* expect values carefully
|
||||
*/
|
||||
*/
|
||||
expect = i;
|
||||
break;
|
||||
}
|
||||
|
@ -840,12 +856,16 @@ ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
|
|||
break;
|
||||
case LDNS_RESOLV_DEFDOMAIN:
|
||||
/* default domain dname */
|
||||
gtr = ldns_fget_token_l_resolv_conf(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
|
||||
gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
|
||||
if (gtr == 0) {
|
||||
if(!fp) fclose(myfp);
|
||||
ldns_resolver_deep_free(r);
|
||||
return LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR;
|
||||
}
|
||||
if(word[0] == '#') {
|
||||
expect = LDNS_RESOLV_KEYWORD;
|
||||
continue;
|
||||
}
|
||||
tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, word);
|
||||
if (!tmp) {
|
||||
if(!fp) fclose(myfp);
|
||||
|
@ -859,12 +879,16 @@ ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
|
|||
break;
|
||||
case LDNS_RESOLV_NAMESERVER:
|
||||
/* NS aaaa or a record */
|
||||
gtr = ldns_fget_token_l_resolv_conf(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
|
||||
gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
|
||||
if (gtr == 0) {
|
||||
if(!fp) fclose(myfp);
|
||||
ldns_resolver_deep_free(r);
|
||||
return LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR;
|
||||
}
|
||||
if(word[0] == '#') {
|
||||
expect = LDNS_RESOLV_KEYWORD;
|
||||
continue;
|
||||
}
|
||||
if(strchr(word, '%')) {
|
||||
/* snip off interface labels,
|
||||
* fe80::222:19ff:fe31:4222%eth0 */
|
||||
|
@ -887,7 +911,7 @@ ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
|
|||
break;
|
||||
case LDNS_RESOLV_SEARCH:
|
||||
/* search list domain dname */
|
||||
gtr = ldns_fget_token_l_resolv_conf(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
|
||||
gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
|
||||
b = LDNS_MALLOC(ldns_buffer);
|
||||
if(!b) {
|
||||
ldns_resolver_deep_free(r);
|
||||
|
@ -905,6 +929,10 @@ ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
|
|||
bgtr = ldns_bget_token(b, word, LDNS_PARSE_NORMAL, (size_t) gtr + 1);
|
||||
while (bgtr > 0) {
|
||||
gtr -= bgtr;
|
||||
if(word[0] == '#') {
|
||||
expect = LDNS_RESOLV_KEYWORD;
|
||||
break;
|
||||
}
|
||||
tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, word);
|
||||
if (!tmp) {
|
||||
ldns_resolver_deep_free(r);
|
||||
|
@ -926,23 +954,28 @@ ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
|
|||
}
|
||||
break;
|
||||
case LDNS_RESOLV_SORTLIST:
|
||||
gtr = ldns_fget_token_l_resolv_conf(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
|
||||
gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
|
||||
/* sortlist not implemented atm */
|
||||
expect = LDNS_RESOLV_KEYWORD;
|
||||
break;
|
||||
case LDNS_RESOLV_OPTIONS:
|
||||
gtr = ldns_fget_token_l_resolv_conf(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
|
||||
gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
|
||||
/* options not implemented atm */
|
||||
expect = LDNS_RESOLV_KEYWORD;
|
||||
break;
|
||||
case LDNS_RESOLV_ANCHOR:
|
||||
/* a file containing a DNSSEC trust anchor */
|
||||
gtr = ldns_fget_token_l_resolv_conf(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
|
||||
gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
|
||||
if (gtr == 0) {
|
||||
ldns_resolver_deep_free(r);
|
||||
if(!fp) fclose(myfp);
|
||||
return LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR;
|
||||
}
|
||||
if(word[0] == '#') {
|
||||
expect = LDNS_RESOLV_KEYWORD;
|
||||
continue;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
tmp_rr = ldns_read_anchor_file(word);
|
||||
(void) ldns_resolver_push_dnssec_anchor(r, tmp_rr);
|
||||
|
|
Loading…
Reference in a new issue