]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
handle comments in resolv.conf and be much more robust
authorMiek Gieben <miekg@NLnetLabs.nl>
Thu, 23 Mar 2006 10:48:58 +0000 (10:48 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Thu, 23 Mar 2006 10:48:58 +0000 (10:48 +0000)
examples/Makefile.in
parse.c
resolver.c

index 5dd5efdd4366449fc4dc3675230f81245d8b4b3e..5e59710bed1e811a9f071041119e1869d34aa549 100644 (file)
@@ -38,6 +38,7 @@ SOURCES       = ldns-read-zone.c \
                  ldns-zsplit.c \
                  ldns-zcat.c \
                  ldns-dpa.c \
+                 ldns-resolver.c \
                  ldnsd.c
 
 
@@ -92,6 +93,9 @@ ldnsd:                ldnsd.o
 ldns-threshold-update: ldns-threshold-update.o
                $(LINK) -o $@ $+
 
+ldns-resolver: ldns-resolver.o
+               $(LINK) -o $@ $+
+
 ## implicit rule
 %.o:   $(srcdir)/%.c
        $(COMPILE) -c $<
diff --git a/parse.c b/parse.c
index d682752c9611063251d45a32ad9a87d0c53b8e52..933ccc185a2b32841ac0fbde99fa9a8ee72dc43e 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -102,9 +102,9 @@ ldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *li
 
                /* check if we hit the delim */
                for (d = del; *d; d++) {
-                        if (c == *d && i >= 1) {
+                       if (c == *d && i >= 1) {
                                goto tokenread;
-                        }
+                       }
                }
                if (c != '\0' && c != '\n') {
                        *t++ = c;
index dfdd138d2ceb46963dd1e9fca0947e37a248671b..9651cd8420e0bf4a764b5ac89354ef19e87d9a7c 100644 (file)
@@ -579,7 +579,14 @@ ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr)
        }
        gtr = ldns_fget_token_l(fp, word, LDNS_PARSE_NORMAL, 0, line_nr);
        while (gtr > 0) {
-               /* do something */
+               /* check comments */
+               if (word[0] == '#') {
+                       /* read the rest of the line, should be 1 word */
+                       gtr = ldns_fget_token_l(fp, word, LDNS_PARSE_NORMAL, 0, line_nr);
+                       /* prepare the next string for furhter parsing */
+                       gtr = ldns_fget_token_l(fp, word, LDNS_PARSE_NORMAL, 0, line_nr);
+                       continue;
+               }
                switch(expect) {
                        case LDNS_RESOLV_KEYWORD:
                                /* keyword */
@@ -594,18 +601,19 @@ ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr)
                                }
                                /* no keyword recognized */
                                if (expect == LDNS_RESOLV_KEYWORD) {
-                                               /* dprintf("[%s] unreg keyword\n", word); */
+                                       LDNS_FREE(word);
+                                       return NULL;
                                }
                                break;
                        case LDNS_RESOLV_DEFDOMAIN:
                                /* default domain dname */
                                tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, word);
                                if (!tmp) {
-                                       expect = LDNS_RESOLV_KEYWORD;
-                                       break;
+                                       LDNS_FREE(word);
+                                       return NULL;
                                }
 
-                               /* don't free, because we copy the pointer */
+                               /* DOn't free, because we copy the pointer */
                                ldns_resolver_set_domain(r, tmp);
                                expect = LDNS_RESOLV_KEYWORD;
                                break;
@@ -616,9 +624,10 @@ ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr)
                                        /* try ip4 */
                                        tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_A, word);
                                }
+                               /* could not parse it, exit */
                                if (!tmp) {
-                                       expect = LDNS_RESOLV_KEYWORD;
-                                       break;
+                                       LDNS_FREE(word);
+                                       return NULL;
                                }
                                (void)ldns_resolver_push_nameserver(r, tmp);
                                ldns_rdf_deep_free(tmp);
@@ -628,19 +637,14 @@ ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr)
                                /* 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_FREE(word);
+                                       return NULL;
                                }
 
                                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"); */
-                               expect = LDNS_RESOLV_KEYWORD;
-                               break;
                }
                gtr = ldns_fget_token_l(fp, word, LDNS_PARSE_NORMAL, 0, line_nr);
        }