From: Miek Gieben Date: Tue, 1 Mar 2005 13:53:32 +0000 (+0000) Subject: deep_clone X-Git-Tag: release-0.50~323 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e4b0915899daae4382a723ce2d94567202d8cfb9;p=thirdparty%2Fldns.git deep_clone --- diff --git a/TODO b/TODO index 6da427b0..d05b97cd 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,7 @@ Current TODO list Implementation: --------------- -o Deep clone / deep free +o deep free o check all conversion routines on missing types - wire2host - host2wire @@ -12,10 +12,15 @@ o network code - tsig? o printing of signatures dates/times o DNSSEC - - signing? + - signing o Make a shared library and test compile some programs o Thread safety o ssl autoconf +o create a bunch of small programs: + mx + dig + host + ? Documentation: @@ -24,16 +29,15 @@ o Crypto interface for dnssec o Doxygen o Manpages o Introduction -o Tuturial +o Tutorial o Webpage o Mailing list(s) To ponder and discuss: ---------------------- o Second layer (higher level convenience functions)? (Later) - o Higherlevel functions, like search for this RR with this name in - these RRlists. Give me all RR's of this zone with this type. etc. + (some are already implemented) o Dependency on openSSL? o ldns_lookup_by_name works for types, classes should be shielded, only use ldns_get_class_by_name/type -o rr_list or rr in dnssec functions or both? + diff --git a/dnssec.c b/dnssec.c index 02793820..921c5d49 100644 --- a/dnssec.c +++ b/dnssec.c @@ -121,7 +121,7 @@ ldns_verify_rrsig(ldns_rr_list *rrset, ldns_rr *rrsig, ldns_rr_list *keys) ldns_rr_list *rrset_clone; /* clone the rrset so that we can fiddle with it */ - rrset_clone = ldns_rr_list_clone(rrset); + rrset_clone = ldns_rr_list_deep_clone(rrset); /* create the buffers which will certainly hold the raw data */ rawsig_buf = ldns_buffer_new(MAX_PACKETLEN); diff --git a/ldns/rdata.h b/ldns/rdata.h index c9b3d09f..e734cdc0 100644 --- a/ldns/rdata.h +++ b/ldns/rdata.h @@ -109,7 +109,7 @@ uint8_t *ldns_rdf_data(const ldns_rdf *); void ldns_rdf_free(ldns_rdf *); void ldns_rdf_free_data(ldns_rdf *); struct sockaddr_storage * ldns_rdf2native_sockaddr_storage(ldns_rdf *); -ldns_rdf *ldns_rdf_clone(const ldns_rdf *); +ldns_rdf *ldns_rdf_deep_clone(const ldns_rdf *); int ldns_rdf_compare(const ldns_rdf *, const ldns_rdf *); uint8_t ldns_rdf2native_int8(ldns_rdf *); uint16_t ldns_rdf2native_int16(ldns_rdf *); diff --git a/ldns/rr.h b/ldns/rr.h index c0dd84f2..fdc86f5b 100644 --- a/ldns/rr.h +++ b/ldns/rr.h @@ -270,12 +270,12 @@ size_t ldns_rr_uncompressed_size(const ldns_rr *); int ldns_rr_compare(const ldns_rr *rr1, const ldns_rr *rr2); void ldns_rr_list_sort(ldns_rr_list *); -ldns_rr *ldns_rr_clone(ldns_rr *rr); +ldns_rr *ldns_rr_deep_clone(ldns_rr *rr); ldns_rr *ldns_rr_new_frm_str(const char *); ldns_rr *ldns_rr_list_pop_rr(ldns_rr_list *); ldns_rr *ldns_rr_set_pop_rr(ldns_rr_list *); ldns_rr_list *ldns_rr_list_cat(ldns_rr_list *, ldns_rr_list *); -ldns_rr_list *ldns_rr_list_clone(ldns_rr_list *); +ldns_rr_list *ldns_rr_list_deep_clone(ldns_rr_list *); void ldns_rr_list2canonical(ldns_rr_list *); void ldns_rr2canonical(ldns_rr *); diff --git a/rdata.c b/rdata.c index 87b03c56..cfb9b967 100644 --- a/rdata.c +++ b/rdata.c @@ -219,7 +219,7 @@ ldns_rdf_new_frm_data(ldns_rdf_type type, uint16_t size, const void *data) * \return a new rdf structure */ ldns_rdf * -ldns_rdf_clone(const ldns_rdf *r) +ldns_rdf_deep_clone(const ldns_rdf *r) { return (ldns_rdf_new_frm_data( ldns_rdf_get_type(r), diff --git a/resolver.c b/resolver.c index 52859541..29786802 100644 --- a/resolver.c +++ b/resolver.c @@ -373,7 +373,7 @@ ldns_resolver_send(ldns_resolver *r, ldns_rdf *name, ldns_rr_type type, ldns_rr_ } /* prepare a question pkt from the parameters * and then send this */ - query_pkt = ldns_pkt_query_new(ldns_rdf_clone(name), type, class, flags); + query_pkt = ldns_pkt_query_new(ldns_rdf_deep_clone(name), type, class, flags); if (!query_pkt) { printf("Failed to generate pkt\n"); return NULL; @@ -416,7 +416,7 @@ ldns_axfr_start(ldns_resolver *resolver, } /* Create the query */ - query = ldns_pkt_query_new(ldns_rdf_clone(domain), + query = ldns_pkt_query_new(ldns_rdf_deep_clone(domain), LDNS_RR_TYPE_AXFR, class, 0); @@ -498,7 +498,7 @@ ldns_axfr_next(ldns_resolver *resolver) resolver->_cur_axfr_pkt = NULL; return ldns_axfr_next(resolver); } - cur_rr = ldns_rr_clone(ldns_rr_list_rr(ldns_pkt_answer(resolver->_cur_axfr_pkt), resolver->_axfr_i)); + cur_rr = ldns_rr_deep_clone(ldns_rr_list_rr(ldns_pkt_answer(resolver->_cur_axfr_pkt), resolver->_axfr_i)); resolver->_axfr_i++; if (ldns_rr_get_type(cur_rr) == LDNS_RR_TYPE_SOA) { resolver->_axfr_soa_count++; diff --git a/rr.c b/rr.c index 1d3192e8..1de1bc8e 100644 --- a/rr.c +++ b/rr.c @@ -931,7 +931,7 @@ ldns_get_rr_class_by_name(const char *name) } ldns_rr * -ldns_rr_clone(ldns_rr *rr) +ldns_rr_deep_clone(ldns_rr *rr) { uint16_t i; ldns_rr *new_rr; @@ -940,13 +940,13 @@ ldns_rr_clone(ldns_rr *rr) if (!new_rr) { return NULL; } - ldns_rr_set_owner(new_rr, ldns_rdf_clone(ldns_rr_owner(rr))); + ldns_rr_set_owner(new_rr, ldns_rdf_deep_clone(ldns_rr_owner(rr))); ldns_rr_set_ttl(new_rr, ldns_rr_ttl(rr)); ldns_rr_set_type(new_rr, ldns_rr_get_type(rr)); ldns_rr_set_class(new_rr, ldns_rr_get_class(rr)); for (i = 0; i < ldns_rr_rd_count(rr); i++) { - ldns_rr_push_rdf(new_rr, ldns_rdf_clone(ldns_rr_rdf(rr, i))); + ldns_rr_push_rdf(new_rr, ldns_rdf_deep_clone(ldns_rr_rdf(rr, i))); } return new_rr; @@ -958,7 +958,7 @@ ldns_rr_clone(ldns_rr *rr) * \return the cloned rr list */ ldns_rr_list * -ldns_rr_list_clone(ldns_rr_list *rrlist) +ldns_rr_list_deep_clone(ldns_rr_list *rrlist) { uint16_t i; ldns_rr_list *new_list; @@ -969,7 +969,7 @@ ldns_rr_list_clone(ldns_rr_list *rrlist) } for (i = 0; i < ldns_rr_list_rr_count(rrlist); i++) { ldns_rr_list_push_rr(new_list, - ldns_rr_clone(ldns_rr_list_rr(rrlist, i))); + ldns_rr_deep_clone(ldns_rr_list_rr(rrlist, i))); } return new_list; }