summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Tkac <atkac@redhat.com>2009-02-16 17:17:48 +0100
committerMartin Nagy <mnagy@redhat.com>2009-02-18 18:20:53 +0100
commitc724705f8310f59525d08f9e0c5721c4db5beb2b (patch)
treed0bc77ff3cd7face9af9dad52bfc1c9d9086098e
parentf494715142cd581b31ec3c9c809986133255ab59 (diff)
downloadldap_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.c39
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;
}