diff --git a/src/other/debug.h b/src/other/debug.h index 158eb97c7a9f66bfe19ad9cefc0b7ddaefbf733c..cc41773dbddbbe024d6f8cba2c5fe32a53141ca6 100644 --- a/src/other/debug.h +++ b/src/other/debug.h @@ -9,9 +9,9 @@ //#define CUCKOO_DEBUG //#define CUCKOO_DEBUG_HASH //#define ZP_DEBUG -#define NS_DEBUG +//#define NS_DEBUG //#define ZDB_DEBUG -#define ZDB_DEBUG_INSERT_CHECK +//#define ZDB_DEBU G_INSERT_CHECK //#define ZN_DEBUG //#define ZP_DEBUG_PARSE //#define CUTE_DEBUG diff --git a/src/server/name-server.c b/src/server/name-server.c index 68a1f4f9f1b1fbd842dfabf0602893b8624978b3..1c7fb32261a06b844d79a1fc4ae0c42fe072022a 100644 --- a/src/server/name-server.c +++ b/src/server/name-server.c @@ -288,6 +288,7 @@ void ns_put_rrset( ldns_rr_list *rrset, const ldns_rdf *name, ldns_rr_list_push_rr(copied_rrs, rr); } ns_try_put_rrset(rrset_new, section, tc, pkt); + ldns_rr_list_free(rrset_new); } else { ns_try_put_rrset(rrset, section, tc, pkt); } @@ -638,9 +639,10 @@ void ns_answer( zdb_database *zdb, const ldns_rr *question, ldns_pkt *response, //const zn_node *node = ns_find_node_in_zone(zone, &qname, &labels_found); const zn_node *node = zdb_find_name_in_zone(zone, qname); int cname = 0; + ldns_rdf *qname_old = NULL; while (1) { - ldns_rdf *qname_old = ldns_rdf_clone(qname); + qname_old = ldns_rdf_clone(qname); uint labels = ldns_dname_label_count(qname); uint labels_found = labels; @@ -727,6 +729,7 @@ void ns_answer( zdb_database *zdb, const ldns_rr *question, ldns_pkt *response, } cname = 1; if (node == NULL) { + ldns_rdf_deep_free(qname_old); continue; // hm, infinite loop better than goto? :) } } @@ -738,6 +741,7 @@ void ns_answer( zdb_database *zdb, const ldns_rr *question, ldns_pkt *response, } ldns_rdf_deep_free(qname); + ldns_rdf_deep_free(qname_old); debug_ns("Size of response packet: %u\n", ldns_pkt_size(response)); } diff --git a/src/server/socket-manager.c b/src/server/socket-manager.c index 9dd775553e3a5fdb472704de7a1fa2247f202e0f..ad5bf64044519d5b88305e15bc13cb964fb16c99 100644 --- a/src/server/socket-manager.c +++ b/src/server/socket-manager.c @@ -334,6 +334,9 @@ void sm_destroy( sm_manager **manager ) } free((*manager)->workers); + // Destroy master worker + sm_worker_deinit(&(*manager)->master); + // Free dispatchers dpt_destroy(&(*manager)->master_dpt); dpt_destroy(&(*manager)->workers_dpt); diff --git a/src/zone/zone-database.c b/src/zone/zone-database.c index aaaad72f0ba7eb2783d5fb809c97c30aa6ccae5a..105621c417661444b90a41190dabbab3b53338dc 100644 --- a/src/zone/zone-database.c +++ b/src/zone/zone-database.c @@ -535,7 +535,7 @@ void zdb_adjust_additional_all( zdb_zone *zone, zn_node *node ) ldns_rdf *zdb_dname_list_find( ldns_rdf **list, size_t count, ldns_rdf *name ) { int i = 0; - int found; + int found = 0; while (i < count && (found = ldns_dname_match_wildcard(list[i], name)) != 1) { ++i; diff --git a/src/zone/zone-node.c b/src/zone/zone-node.c index 55679d1b3ce80bfaae0a1d92942ddaab6d3d68c2..4b703f8910d85b290b0a900ddcd6459ad5f7e025 100644 --- a/src/zone/zone-node.c +++ b/src/zone/zone-node.c @@ -222,7 +222,7 @@ int zn_add_referrer_node( zn_node *node, const zn_node *referrer ) int zn_has_additional( const zn_node *node ) { - return (zn_has_mx(node) + zn_has_ns(node)); + return (zn_has_mx(node) + zn_has_ns(node) + zn_has_srv(node)); } /*----------------------------------------------------------------------------*/ @@ -484,6 +484,7 @@ int zn_add_ref( zn_node *node, ldns_rdf *name, ldns_rr_type type, ar = zn_create_ar_rrsets_for_cname(ref_node); } if (ar == NULL) { + skip_destroy_list(&(node->ref.additional), NULL, zn_dtor_ar_rrsets); return -4; } @@ -494,7 +495,6 @@ int zn_add_ref( zn_node *node, ldns_rdf *name, ldns_rr_type type, zn_destroy_ar_rrsets(&ar); } zn_flags_set(&node->flags, flag); - debug_zn("Node %p has SRV flag: %d\n", node, zn_has_srv(node)); debug_zn("zn_add_ref(%p, %p, %s)\n", node, ref_rrset, ldns_rr_type2str(type)); @@ -738,6 +738,10 @@ void zn_destroy( zn_node **node ) if (zn_is_delegation_point(*node)) { ldns_rr_list_free((*node)->ref.glues); } + if ((*node)->referrers != NULL) { + da_destroy((*node)->referrers); + free((*node)->referrers); + } free(*node); *node = NULL; }