+7 November 2012: Wouter
+ - Fixup ldns-testpkts, identical to ldns/examples.
+
30 October 2012: Wouter
- Fix bug #477: unbound-anchor segfaults if EDNS is blocked.
/* Reads one entry from file. Returns entry or NULL on error. */
struct entry*
read_entry(FILE* in, const char* name, int *lineno, uint32_t* default_ttl,
- ldns_rdf** origin, ldns_rdf** prev_rr)
+ ldns_rdf** origin, ldns_rdf** prev_rr, int skip_whitespace)
{
struct entry* current = NULL;
char line[MAX_LINE];
/* it must be a RR, parse and add to packet. */
ldns_rr* n = NULL;
ldns_status status;
+ char* rrstr = line;
+ if (skip_whitespace)
+ rrstr = parse;
if(add_section == LDNS_SECTION_QUESTION)
status = ldns_rr_new_question_frm_str(
- &n, parse, *origin, prev_rr);
- else status = ldns_rr_new_frm_str(&n, parse,
+ &n, rrstr, *origin, prev_rr);
+ else status = ldns_rr_new_frm_str(&n, rrstr,
*default_ttl, *origin, prev_rr);
if(status != LDNS_STATUS_OK)
error("%s line %d:\n\t%s: %s", name, *lineno,
- ldns_get_errorstr_by_id(status), parse);
+ ldns_get_errorstr_by_id(status), rrstr);
ldns_pkt_push_rr(cur_reply->reply, add_section, n);
}
/* reads the canned reply file and returns a list of structs */
struct entry*
-read_datafile(const char* name)
+read_datafile(const char* name, int skip_whitespace)
{
struct entry* list = NULL;
struct entry* last = NULL;
}
while((current = read_entry(in, name, &lineno, &default_ttl,
- &origin, &prev_rr)))
+ &origin, &prev_rr, skip_whitespace)))
{
if(last)
last->next = current;
/**
* reads the canned reply file and returns a list of structs
* does an exit on error.
+ * @param skip_withespace: skip leftside whitespace.
*/
-struct entry* read_datafile(const char* name);
+struct entry* read_datafile(const char* name, int skip_whitespace);
/**
* Delete linked list of entries.
* later it stores the $ORIGIN value last seen. Often &NULL or the zone
* name on first call.
* @param prev_rr: previous rr name for correcter parsing. &NULL on first call.
+ * @param skip_whitespace: skip leftside whitespace.
* @return: The entry read (malloced) or NULL if no entry could be read.
*/
struct entry* read_entry(FILE* in, const char* name, int *lineno,
- uint32_t* default_ttl, ldns_rdf** origin, ldns_rdf** prev_rr);
+ uint32_t* default_ttl, ldns_rdf** origin, ldns_rdf** prev_rr,
+ int skip_whitespace);
/**
* finds entry in list, or returns NULL.
/* set position before line; read entry */
(*lineno)--;
fseeko(in, pos, SEEK_SET);
- entry = read_entry(in, name, lineno, ttl, or, prev);
+ entry = read_entry(in, name, lineno, ttl, or, prev, 1);
if(!entry)
fatal_exit("%d: bad entry", *lineno);
entry->next = NULL;
}
if(readentry) {
- mom->match = read_entry(in, name, lineno, ttl, or, prev);
+ mom->match = read_entry(in, name, lineno, ttl, or, prev, 1);
if(!mom->match) {
free(mom);
return NULL;
struct alloc_cache alloc;
ldns_buffer* buf = ldns_buffer_new(65535);
struct entry* e;
- struct entry* list = read_datafile(fname);
+ struct entry* list = read_datafile(fname, 1);
struct module_env env;
struct val_env ve;
uint32_t now = time(NULL);
struct alloc_cache alloc;
ldns_buffer* buf = ldns_buffer_new(65535);
struct entry* e;
- struct entry* list = read_datafile(fname);
+ struct entry* list = read_datafile(fname, 1);
struct module_env env;
if(!list)
struct alloc_cache alloc;
ldns_buffer* buf = ldns_buffer_new(65535);
struct entry* e;
- struct entry* list = read_datafile(fname);
+ struct entry* list = read_datafile(fname, 1);
if(!list)
fatal_exit("could not read %s: %s", fname, strerror(errno));