From: Miek Gieben Date: Tue, 27 Sep 2005 12:15:41 +0000 (+0000) Subject: also parse the search keyword in the /etc/resolv.conf. Only 1 domain is parsed X-Git-Tag: release-1.0.0~110 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e46c0c1187c2eb7e258471835923cb13fb11384c;p=thirdparty%2Fldns.git also parse the search keyword in the /etc/resolv.conf. Only 1 domain is parsed --- diff --git a/drill/drill.c b/drill/drill.c index 83a01429..99326073 100644 --- a/drill/drill.c +++ b/drill/drill.c @@ -609,7 +609,7 @@ main(int argc, char *argv[]) for(key_count = 0; key_count < ldns_rr_list_rr_count(key_verified); key_count++) { if (qdebug != -1) { - mesg("VALIDATED by id = %d, owner = ", + printf("VALIDATED by id = %d, owner = ", (int)ldns_calc_keytag( ldns_rr_list_rr(key_verified, key_count))); ldns_rdf_print(stdout, ldns_rr_owner( @@ -621,7 +621,7 @@ main(int argc, char *argv[]) for(key_count = 0; key_count < ldns_rr_list_rr_count(key_list); key_count++) { if (qdebug != -1) { - mesg("BOGUS by id = %d, owner = ", + printf("BOGUS by id = %d, owner = ", (int)ldns_calc_keytag( ldns_rr_list_rr(key_list, key_count))); ldns_rdf_print(stdout, ldns_rr_owner( diff --git a/ldns/resolver.h b/ldns/resolver.h index 8f5070cd..2e19f6e5 100644 --- a/ldns/resolver.h +++ b/ldns/resolver.h @@ -24,9 +24,12 @@ #define LDNS_RESOLV_CONF "/etc/resolv.conf" #define LDNS_RESOLV_HOSTS "/etc/hosts" -#define LDNS_RESOLV_KEYWORD 0 -#define LDNS_RESOLV_DEFDOMAIN 1 -#define LDNS_RESOLV_NAMESERVER 2 +#define LDNS_RESOLV_KEYWORD -1 +#define LDNS_RESOLV_DEFDOMAIN 0 +#define LDNS_RESOLV_NAMESERVER 1 +#define LDNS_RESOLV_SEARCH 2 + +#define LDNS_RESOLV_KEYWORDS 3 #define LDNS_RESOLV_INETANY 0 #define LDNS_RESOLV_INET 1 diff --git a/resolver.c b/resolver.c index d499438f..a68f1e21 100644 --- a/resolver.c +++ b/resolver.c @@ -391,6 +391,23 @@ ldns_resolver_set_timeout(ldns_resolver *r, struct timeval timeout) void ldns_resolver_push_searchlist(ldns_resolver *r, ldns_rdf *d) { + ldns_rdf **searchlist; + uint16_t list_count; + + if (ldns_rdf_get_type(d) != LDNS_RDF_TYPE_DNAME) { + return; + } + + /* need functions XXX */ + list_count = r->_searchlist_count; + searchlist = ldns_resolver_searchlist(r); + + searchlist = LDNS_XREALLOC(searchlist, ldns_rdf *, (list_count + 1)); + r->_searchlist = searchlist; + + searchlist[list_count] = ldns_rdf_clone(d); + ldns_resolver_set_searchlist_count(r, list_count + 1); + r->_searchlist[++r->_searchlist_count] = ldns_rdf_clone(d); } @@ -478,9 +495,9 @@ ldns_resolver * ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr) { ldns_resolver *r; - const char *keyword[2]; + const char *keyword[LDNS_RESOLV_KEYWORDS]; char *word; - uint8_t expect; + int8_t expect; uint8_t i; ldns_rdf *tmp; ssize_t gtr; @@ -493,8 +510,9 @@ ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr) */ /* recognized keywords */ - keyword[0] = "domain"; - keyword[1] = "nameserver"; + keyword[LDNS_RESOLV_DEFDOMAIN] = "domain"; + keyword[LDNS_RESOLV_NAMESERVER] = "nameserver"; + keyword[LDNS_RESOLV_SEARCH] = "search"; word = LDNS_XMALLOC(char, LDNS_MAX_LINELEN + 1); expect = LDNS_RESOLV_KEYWORD; @@ -508,17 +526,17 @@ ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr) switch(expect) { case LDNS_RESOLV_KEYWORD: /* keyword */ - for(i = 0; i < 2; i++) { + for(i = 0; i < LDNS_RESOLV_KEYWORDS; i++) { if (strcasecmp(keyword[i], word) == 0) { /* chosen the keyword and * expect values carefully */ - expect = i + 1; + expect = i; break; } } /* no keyword recognized */ - if (expect == 0) { + if (expect == LDNS_RESOLV_KEYWORD) { dprintf("[%s] unreg keyword\n", word); } break; @@ -549,6 +567,18 @@ ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr) ldns_rdf_deep_free(tmp); expect = LDNS_RESOLV_KEYWORD; break; + case LDNS_RESOLV_SEARCH: + /* search list domain dname, will only work with 1 name! */ + tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, word); + if (!tmp) { + expect = LDNS_RESOLV_KEYWORD; + break; + } + + ldns_resolver_push_searchlist(r, tmp); + ldns_rdf_deep_free(tmp); + expect = LDNS_RESOLV_KEYWORD; + break; default: /* huh?! */ dprintf("%s", "BIG FAT WARNING should never reach this\n");