Hello,
Move data structures for parser from ldap_qresult_t to ldap_entry_t.
The target branch is master.
--
Petr^2 Spacek
From b32ba3f02460eb3e9d81c53b6774bb34b2ff08bb Mon Sep 17 00:00:00 2001
From: Petr Spacek
Date: Mon, 22 Jul 2013 15:18:55 +0200
Subject: [PATCH] Move data structures for parser from ldap_qresult_t to
ldap_entry_t.
Signed-off-by: Petr Spacek
---
src/ldap_entry.c | 18 +--
src/ldap_entry.h | 11 +++
src/ldap_helper.c | 96 ---
3 files changed, 61 insertions(+), 64 deletions(-)
diff --git a/src/ldap_entry.c b/src/ldap_entry.c
index 986126dd10fdfdd93666362b87433138615d9bca..96ff183d85330f65c4c1a739c194cc59beebc338 100644
--- a/src/ldap_entry.c
+++ b/src/ldap_entry.c
@@ -198,8 +198,6 @@ ldap_entry_create(isc_mem_t *mctx, LDAP *ld, LDAPMessage *ldap_entry,
INIT_LIST(entry->attrs);
INIT_LINK(entry, link);
- result = ISC_R_SUCCESS;
-
for (attribute = ldap_first_attribute(ld, ldap_entry, &ber);
attribute != NULL;
attribute = ldap_next_attribute(ld, ldap_entry, ber)) {
@@ -221,14 +219,21 @@ ldap_entry_create(isc_mem_t *mctx, LDAP *ld, LDAPMessage *ldap_entry,
CLEANUP_WITH(ISC_R_FAILURE);
}
+ CHECKED_MEM_GET(mctx, entry->rdata_target_mem, MINTSIZ);
+ CHECK(isc_lex_create(mctx, TOKENSIZ, &entry->lex));
+
*entryp = entry;
cleanup:
if (ber != NULL)
ber_free(ber, 0);
if (result != ISC_R_SUCCESS) {
- if (entry != NULL)
+ if (entry != NULL) {
ldap_attributelist_destroy(mctx, &entry->attrs);
+ SAFE_MEM_PUT(mctx, entry->rdata_target_mem, MINTSIZ);
+ if (entry->lex != NULL)
+isc_lex_destroy(&entry->lex);
+ }
SAFE_MEM_PUT_PTR(mctx, entry);
SAFE_MEM_PUT_PTR(mctx, attr);
}
@@ -250,6 +255,13 @@ ldap_entry_destroy(isc_mem_t *mctx, ldap_entry_t **entryp)
ldap_attributelist_destroy(mctx, &entry->attrs);
if (entry->dn != NULL)
ldap_memfree(entry->dn);
+ if (entry->lex != NULL) {
+ isc_lex_close(entry->lex);
+ isc_lex_destroy(&entry->lex);
+ }
+ if (entry->rdata_target_mem != NULL)
+ isc_mem_put(mctx, entry->rdata_target_mem, MINTSIZ);
+
SAFE_MEM_PUT_PTR(mctx, entry);
*entryp = NULL;
diff --git a/src/ldap_entry.h b/src/ldap_entry.h
index a71be0a32ee7b4179799052bf2b6dc13c7cfa076..6311b694f720929231ce44addfc18acc6c251617 100644
--- a/src/ldap_entry.h
+++ b/src/ldap_entry.h
@@ -22,6 +22,7 @@
#ifndef _LD_LDAP_ENTRY_H_
#define _LD_LDAP_ENTRY_H_
+#include
#include
#include
@@ -51,6 +52,11 @@ struct ldap_entry {
ldap_attribute_t *lastattr;
ldap_attributelist_t attrs;
LINK(ldap_entry_t) link;
+
+ /* Parsing. */
+ isc_lex_t *lex;
+ isc_buffer_t rdata_target;
+ unsigned char *rdata_target_mem;
};
/* Represents LDAP attribute and it's values */
@@ -70,6 +76,11 @@ struct ldap_attribute {
typedef unsigned char ldap_entryclass_t;
+/* Max type length definitions, from lib/dns/master.c */
+#define MINTSIZ (65535 - 12 - 1 - 2 - 2 - 4 - 2)
+#define TOKENSIZ (8*1024)
+
+
isc_result_t
ldap_entrylist_create(isc_mem_t *mctx, LDAP *ld, LDAPMessage *msg,
ldap_entrylist_t *entrylist) ATTR_NONNULLS;
diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index 5fd82fb4b9f72eb9cf2129810bfaaa2186d5d84b..8ba8a398ae013c9b7603a783ea14c94e80c2 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -38,7 +38,6 @@
#include
#include
-#include
#include
#include
#include
@@ -82,11 +81,6 @@
#include "rbt_helper.h"
#include "fwd_register.h"
-
-/* Max type length definitions, from lib/dns/master.c */
-#define MINTSIZ (65535 - 12 - 1 - 2 - 2 - 4 - 2)
-#define TOKENSIZ (8*1024)
-
const enum_txt_assoc_t forwarder_policy_txts[] = {
{ dns_fwdpolicy_none, "none" },
{ dns_fwdpolicy_first, "first" },
@@ -199,11 +193,6 @@ struct ldap_qresult {
ld_string_t *query_string;
LDAPMessage *result;
ldap_entrylist_t ldap_entries;
-
- /* Parsing. */
- isc_lex_t *lex;
- isc_buffer_t rdata_target;
- unsigned char *rdata_target_mem;
};
/*
@@ -284,17 +273,13 @@ static void destroy_ldap_connection(ldap_connection_t **ldap_connp) ATTR_NONNULL
static isc_result_t findrdatatype_or_create(isc_mem_t *mctx,
ldapdb_rdatalist_t *rdatalist, dns_rdataclass_t rdclass,
dns_rdatatype_t rdtype, dns_ttl_t ttl, dns_rdatalist_t **rdlistp) ATTR_NONNULLS;
-static isc_result_t add_soa_record(isc_mem_t *mctx, ldap_qresult_t *qresult,
- dns_name_t *origin, ldap_entry_t *entry,
- ldapdb_rdatalist_t *rdatalist, const char *fake_mname) ATTR_NONNULLS;
-static isc_result_t parse_rdata(isc_mem_t *mctx, ldap_qresult_t *qresult,
+static isc_result_t add_soa_record(isc_mem_t *mctx, dns_name_t *origin,
+ ldap_entry_t *entry, ldapdb_rdatalist_t *rdatalist,
+ const char *fake_mname) ATTR_NONNULLS;
+static isc_result_t parse_rdata(isc_mem_t *mctx, ldap_entry_t *entry,
dns_rdataclass_t rdclass, dns_rdatatype_t rdtype,
dns_name_t *origin, const char *rdata_text,
dns_rdata_t **rdatap) ATTR_NONNULLS;
-static isc_result_t ldap_parse_rrentry(isc_mem_t *mctx, ldap_ent