diff options
author | Adam Tkac <atkac@redhat.com> | 2009-02-16 17:17:48 +0100 |
---|---|---|
committer | Martin Nagy <mnagy@redhat.com> | 2009-02-18 18:20:53 +0100 |
commit | c724705f8310f59525d08f9e0c5721c4db5beb2b (patch) | |
tree | d0bc77ff3cd7face9af9dad52bfc1c9d9086098e | |
parent | f494715142cd581b31ec3c9c809986133255ab59 (diff) | |
download | ldap_driver_testing-c724705f8310f59525d08f9e0c5721c4db5beb2b.tar.gz ldap_driver_testing-c724705f8310f59525d08f9e0c5721c4db5beb2b.tar.xz ldap_driver_testing-c724705f8310f59525d08f9e0c5721c4db5beb2b.zip |
Fixed find function, hopefully.
-rw-r--r-- | ldap_driver.c | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/ldap_driver.c b/ldap_driver.c index 25a98fc..1e10d83 100644 --- a/ldap_driver.c +++ b/ldap_driver.c @@ -293,7 +293,7 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version, ldapdb_t *ldapdb = (ldapdb_t *) db; isc_result_t result; ldapdbnode_t *node = NULL; - dns_rdatalist_t *rdlist; + dns_rdatalist_t *rdlist = NULL; isc_boolean_t is_cname = ISC_FALSE; ldapdb_rdatalist_t rdatalist; @@ -318,21 +318,11 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version, if (result != ISC_R_SUCCESS && result != DNS_R_PARTIALMATCH) return result; - result = ldapdbnode_create(ldapdb->common.mctx, name, &node); - if (result != ISC_R_SUCCESS) { - ldapdb_rdatalist_destroy(ldapdb->common.mctx, &rdatalist); - return result; - } - - memcpy(&node->rdatalist, &rdatalist, sizeof(rdatalist)); - - result = ldapdb_rdatalist_findrdatatype(&node->rdatalist, type, - &rdlist); - + result = ldapdb_rdatalist_findrdatatype(&rdatalist, type, &rdlist); if (result != ISC_R_SUCCESS) { /* No exact rdtype match. Check CNAME */ - rdlist = HEAD(node->rdatalist); + rdlist = HEAD(rdatalist); while (rdlist != NULL && rdlist->type != dns_rdatatype_cname) rdlist = NEXT(rdlist, link); @@ -348,21 +338,30 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version, goto cleanup; } - /* dns_rdatalist_tordataset returns success only */ - result = dns_rdatalist_tordataset(rdlist, rdataset); - INSIST(result == ISC_R_SUCCESS); - /* XXX currently we implemented only exact authoritative matches */ - result = dns_name_dupwithoffsets(name, ldapdb->common.mctx, foundname); + result = dns_name_copy(name, foundname, NULL); if (result != ISC_R_SUCCESS) goto cleanup; - *nodep = node; + if (rdataset != NULL) { + /* dns_rdatalist_tordataset returns success only */ + result = dns_rdatalist_tordataset(rdlist, rdataset); + INSIST(result == ISC_R_SUCCESS); + } + + if (nodep != NULL) { + result = ldapdbnode_create(ldapdb->common.mctx, name, &node); + if (result != ISC_R_SUCCESS) { + goto cleanup; + } + memcpy(&node->rdatalist, &rdatalist, sizeof(rdatalist)); + *nodep = node; + } return (is_cname == ISC_TRUE) ? DNS_R_CNAME : ISC_R_SUCCESS; cleanup: - detachnode(db, ((dns_dbnode_t **) &node)); + ldapdb_rdatalist_destroy(ldapdb->common.mctx, &rdatalist); return result; } |