summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Nagy <mnagy@redhat.com>2009-04-07 18:47:23 +0200
committerMartin Nagy <mnagy@redhat.com>2009-04-23 16:45:53 +0200
commitf221f70dfe242e56743fc1c5814de9bdcb7ee527 (patch)
tree620b5faf882f619e80d6674ae2c30e7ae7dd35cc
parentfa6b0eac58ca1aac81b538095bec5522ce3388a2 (diff)
downloadldap_driver_testing-f221f70dfe242e56743fc1c5814de9bdcb7ee527.tar.gz
ldap_driver_testing-f221f70dfe242e56743fc1c5814de9bdcb7ee527.tar.xz
ldap_driver_testing-f221f70dfe242e56743fc1c5814de9bdcb7ee527.zip
Fix rdata parsing.
-rw-r--r--src/cache.c8
-rw-r--r--src/cache.h2
-rw-r--r--src/ldap_driver.c6
-rw-r--r--src/ldap_helper.c16
-rw-r--r--src/ldap_helper.h2
5 files changed, 19 insertions, 15 deletions
diff --git a/src/cache.c b/src/cache.c
index 683f3fd..40a2289 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -165,7 +165,7 @@ destroy_ldap_cache(ldap_cache_t **cachep)
isc_result_t
cached_ldap_rdatalist_get(isc_mem_t *mctx, ldap_cache_t *cache,
ldap_db_t *ldap_db, dns_name_t *name,
- ldapdb_rdatalist_t *rdatalist)
+ dns_name_t *origin, ldapdb_rdatalist_t *rdatalist)
{
isc_result_t result;
ldapdb_rdatalist_t rdlist;
@@ -176,7 +176,8 @@ cached_ldap_rdatalist_get(isc_mem_t *mctx, ldap_cache_t *cache,
REQUIRE(cache != NULL);
if (cache->rbt == NULL)
- return ldapdb_rdatalist_get(mctx, ldap_db, name, rdatalist);
+ return ldapdb_rdatalist_get(mctx, ldap_db, name, origin,
+ rdatalist);
CONTROLED_LOCK(&cache->mutex);
result = dns_rbt_findname(cache->rbt, name, 0, NULL, (void *)&node);
@@ -200,7 +201,8 @@ cached_ldap_rdatalist_get(isc_mem_t *mctx, ldap_cache_t *cache,
if (!in_cache) {
INIT_LIST(rdlist);
- result = ldapdb_rdatalist_get(mctx, ldap_db, name, &rdlist);
+ result = ldapdb_rdatalist_get(mctx, ldap_db, name, origin,
+ &rdlist);
/* TODO: Cache entries that are not found. */
if (result != ISC_R_SUCCESS)
goto cleanup;
diff --git a/src/cache.h b/src/cache.h
index a8f0558..74e4937 100644
--- a/src/cache.h
+++ b/src/cache.h
@@ -46,7 +46,7 @@ destroy_ldap_cache(ldap_cache_t **cachep);
isc_result_t
cached_ldap_rdatalist_get(isc_mem_t *mctx, ldap_cache_t *cache,
ldap_db_t *ldap_db, dns_name_t *name,
- ldapdb_rdatalist_t *rdatalist);
+ dns_name_t *origin, ldapdb_rdatalist_t *rdatalist);
/*
* Discard 'name' from the cache. If caching is not really turned on or 'name'
diff --git a/src/ldap_driver.c b/src/ldap_driver.c
index faa0b95..b27c6f4 100644
--- a/src/ldap_driver.c
+++ b/src/ldap_driver.c
@@ -315,7 +315,8 @@ findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
result = cached_ldap_rdatalist_get(ldapdb->common.mctx,
ldapdb->ldap_cache, ldapdb->ldap_db,
- name, &rdatalist);
+ name, &ldapdb->common.origin,
+ &rdatalist);
if (result == ISC_R_NOMEMORY)
return ISC_R_NOMEMORY;
@@ -372,7 +373,8 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
result = cached_ldap_rdatalist_get(ldapdb->common.mctx,
ldapdb->ldap_cache, ldapdb->ldap_db,
- name, &rdatalist);
+ name, &ldapdb->common.origin,
+ &rdatalist);
INSIST(result != DNS_R_PARTIALMATCH); /* XXX Not yet implemented */
if (result != ISC_R_SUCCESS && result != DNS_R_PARTIALMATCH)
diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index aaa593d..60b2675 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -192,7 +192,7 @@ static isc_result_t findrdatatype_or_create(isc_mem_t *mctx,
ldapdb_rdatalist_t *rdatalist, ldap_entry_t *entry,
dns_rdatatype_t rdtype, dns_rdatalist_t **rdlistp);
static isc_result_t add_soa_record(isc_mem_t *mctx, ldap_instance_t *ldap_inst,
- dns_name_t *name, ldap_entry_t *entry,
+ dns_name_t *origin, ldap_entry_t *entry,
ldapdb_rdatalist_t *rdatalist);
static dns_rdataclass_t get_rdataclass(ldap_entry_t *ldap_entry);
static dns_ttl_t get_ttl(ldap_entry_t *ldap_entry);
@@ -751,7 +751,7 @@ free_rdatalist(isc_mem_t *mctx, dns_rdatalist_t *rdlist)
isc_result_t
ldapdb_rdatalist_get(isc_mem_t *mctx, ldap_db_t *ldap_db, dns_name_t *name,
- ldapdb_rdatalist_t *rdatalist)
+ dns_name_t *origin, ldapdb_rdatalist_t *rdatalist)
{
isc_result_t result;
ldap_instance_t *ldap_inst;
@@ -789,7 +789,7 @@ ldapdb_rdatalist_get(isc_mem_t *mctx, ldap_db_t *ldap_db, dns_name_t *name,
entry != NULL;
entry = NEXT(entry, link)) {
- result = add_soa_record(mctx, ldap_inst, name, entry,
+ result = add_soa_record(mctx, ldap_inst, origin, entry,
rdatalist);
if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND)
goto cleanup;
@@ -807,8 +807,8 @@ ldapdb_rdatalist_get(isc_mem_t *mctx, ldap_db_t *ldap_db, dns_name_t *name,
result == ISC_R_SUCCESS;
result = get_next_rdatatext(attr, string)) {
CHECK(parse_rdata(mctx, ldap_inst, rdclass,
- rdtype, name, str_buf(string),
- &rdata));
+ rdtype, origin,
+ str_buf(string), &rdata));
APPEND(rdlist->rdata, rdata, link);
rdata = NULL;
}
@@ -867,7 +867,7 @@ get_ttl(ldap_entry_t *ldap_entry)
static isc_result_t
get_soa_record(ldap_entry_t *entry, ld_string_t *target)
{
- isc_result_t result;
+ isc_result_t result = ISC_R_NOTFOUND;
ldap_value_list_t values;
const char *soa_attrs[] = {
@@ -891,7 +891,7 @@ cleanup:
}
static isc_result_t
-add_soa_record(isc_mem_t *mctx, ldap_instance_t *ldap_inst, dns_name_t *name,
+add_soa_record(isc_mem_t *mctx, ldap_instance_t *ldap_inst, dns_name_t *origin,
ldap_entry_t *entry, ldapdb_rdatalist_t *rdatalist)
{
isc_result_t result;
@@ -906,7 +906,7 @@ add_soa_record(isc_mem_t *mctx, ldap_instance_t *ldap_inst, dns_name_t *name,
rdclass = get_rdataclass(entry);
CHECK(get_soa_record(entry, string));
- CHECK(parse_rdata(mctx, ldap_inst, rdclass, dns_rdatatype_soa, name,
+ CHECK(parse_rdata(mctx, ldap_inst, rdclass, dns_rdatatype_soa, origin,
str_buf(string), &rdata));
CHECK(findrdatatype_or_create(mctx, rdatalist, entry, dns_rdatatype_soa,
diff --git a/src/ldap_helper.h b/src/ldap_helper.h
index a0e4aea..84d1885 100644
--- a/src/ldap_helper.h
+++ b/src/ldap_helper.h
@@ -67,7 +67,7 @@ void free_rdatalist(isc_mem_t *mctx, dns_rdatalist_t *rdlist);
*/
isc_result_t ldapdb_rdatalist_get(isc_mem_t *mctx, ldap_db_t *ldap_db,
- dns_name_t *name,
+ dns_name_t *name, dns_name_t *origin,
ldapdb_rdatalist_t *rdatalist);
/*
* ldapdb_rdatalist_get