uid_t uid;
gid_t gid;
/* initialize, but not to 0 (root) */
- memset(&uid, -12, sizeof(uid));
- memset(&gid, -12, sizeof(gid));
+ memset(&uid, 112, sizeof(uid));
+ memset(&gid, 112, sizeof(gid));
log_assert(cfg);
/* daemonize last to be able to print error to user */
At NLnet Labs, Jelte Jansen and Mark Santcroos reviewed the unbound C sources.
Jakob Schlyter - for advice on secure settings, random numbers and blacklists.
+
+Ondřej Surý - running coverity analysis tool on 0.9 dev version.
preparing for code-reuse.
- move context into own header file.
- context query structure.
+ - removed unused variable pwd from checkconf.
+ - removed unused assignment from outside netw.
+ - check timeval length of string.
+ - fixup error in val_utils getsigner.
+ - fixup same (*var) error in netblocktostr.
+ - fixup memleak on parse error in localzone.
+ - fixup memleak on packet parse error.
+ - put ; after union in parser.y.
+ - small hardening in iter_operate against iq==NULL.
+ - hardening, if error reply with rcode=0 (noerror) send servfail.
+ - fixup same (*var) error in find_rrset in msgparse, was harmless.
+ - check return value of evtimer_add().
3 December 2007: Wouter
- changed checkconf/ to smallapp/ to make room for more support tools.
iter_deinit(struct module_env* env, int id)
{
struct iter_env* iter_env;
- if(!env || !env->modinfo || !env->modinfo[id])
+ if(!env || !env->modinfo[id])
return;
iter_env = (struct iter_env*)env->modinfo[id];
free(iter_env->target_fetch_policy);
/* not interested */
verbose(VERB_ALGO, "subq error, but not interested");
log_query_info(VERB_ALGO, "superq", &super->qinfo);
- delegpt_log(VERB_ALGO, super_iq->dp);
+ if(super_iq->dp)
+ delegpt_log(VERB_ALGO, super_iq->dp);
log_assert(0);
return;
}
process_request(qstate, iq, ie, id);
return;
}
- if(event == module_event_pass) {
+ if(iq && event == module_event_pass) {
iter_handle(qstate, iq, ie, id);
return;
}
- if(outbound) {
+ if(iq && outbound) {
process_response(qstate, iq, ie, id, outbound, event);
return;
}
if(!r)
return;
slabhash_delete(&r->table);
+ /* slabhash delete also does free(r), since table is first in struct*/
}
struct rrset_cache* rrset_cache_adjust(struct rrset_cache *r,
t = local_zone_redirect;
else {
log_err("bad lz_enter_zone type %s %s", name, type);
+ free(nm);
return NULL;
}
if(!(z=lz_enter_zone_dname(zones, nm, len, labs, t, dclass))) {
if(status != LDNS_STATUS_OK) {
log_err("error converting RR '%s' to wireformat: %s",
str, ldns_get_errorstr_by_id(status));
+ free(*nm);
+ *nm = NULL;
return 0;
}
ldns_buffer_flip(rdata);
query_dname_compare(z->name, nm) != 0) {
log_err("local-data in redirect zone must reside at top of zone"
", not at %s", rrstr);
+ free(nm);
return 0;
}
nmlabs = dname_count_size_labels(nm, &nmlen);
if(rep && rep->security == sec_status_secure)
secure = 1;
else secure = 0;
+ if(!rep && rcode == LDNS_RCODE_NOERROR)
+ rcode = LDNS_RCODE_SERVFAIL;
/* send the reply */
if(rcode) {
error_encode(r->query_reply.c->buffer, rcode, &m->s.qinfo,
sq = lookup_serviced(outnet, buff, dnssec, addr, addrlen);
if(sq) {
/* see if it is a duplicate notification request for cb_arg */
- if((cb = callback_list_find(sq, callback_arg, arg_compare))) {
+ if(callback_list_find(sq, callback_arg, arg_compare)) {
return sq;
}
}
}
if(cfg->username && cfg->username[0]) {
- struct passwd *pwd;
- if((pwd = getpwnam(cfg->username)) == NULL)
+ if(getpwnam(cfg->username) == NULL)
fatal_exit("user '%s' does not exist.", cfg->username);
endpwent();
}
uint32_t t;
struct tm tm;
memset(&tm, 0, sizeof(tm));
+ if(strlen(str) < 14)
+ return 0;
if(sscanf(str, "%4d%2d%2d%2d%2d%2d", &tm.tm_year, &tm.tm_mon,
&tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6)
return 0;
%}
%union {
char* str;
-}
+};
%token SPACE LETTER NEWLINE COMMENT COLON ANY ZONESTR
%token <str> STRING
ldns_pkt_section section, struct regional* region)
{
uint16_t covtype;
- if(rrset_prev) {
+ if(*rrset_prev) {
/* check if equal to previous item */
if(type == *prev_type && dclass == *prev_dclass &&
dnamelen == *prev_dnamelen &&
if(!*data)
return 0;
/* copy & decompress */
- if(!parse_rr_copy(pkt, pset, *data))
+ if(!parse_rr_copy(pkt, pset, *data)) {
+ if(!region) free(*data);
return 0;
+ }
return 1;
}
return 0;
}
*net = atoi(s+1);
- if(net == 0 && strcmp(s+1, "0") != 0) {
+ if(*net == 0 && strcmp(s+1, "0") != 0) {
log_err("cannot parse netblock: '%s'", str);
return 0;
}
log_assert(tv);
if(timer->ev_timer->enabled)
comm_timer_disable(timer);
- evtimer_add(&timer->ev_timer->ev, tv);
+ if(evtimer_add(&timer->ev_timer->ev, tv) != 0)
+ log_err("comm_timer_set: evtimer_add failed.");
timer->ev_timer->enabled = 1;
}
for(i=skip; i<rep->an_numrrsets; i++) {
val_find_rrset_signer(rep->rrsets[i],
signer_name, signer_len);
- if(signer_name)
+ if(*signer_name)
return;
}
*signer_name = NULL;
val_deinit(struct module_env* env, int id)
{
struct val_env* val_env;
- if(!env || !env->modinfo || !env->modinfo[id])
+ if(!env || !env->modinfo[id])
return;
val_env = (struct val_env*)env->modinfo[id];
anchors_delete(env->anchors);