summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Nagy <mnagy@redhat.com>2009-03-25 17:59:54 +0100
committerMartin Nagy <mnagy@redhat.com>2009-03-25 17:59:54 +0100
commit743aed3ee3952c13f79289d1a7b8efe2aeaa20bf (patch)
tree698ef5b696dba655c11399be7bcd85f96094890c
parent571bf6b7f2fd9ca6551b207e60f486473c45ba96 (diff)
downloadldap_driver_testing-743aed3ee3952c13f79289d1a7b8efe2aeaa20bf.tar.gz
ldap_driver_testing-743aed3ee3952c13f79289d1a7b8efe2aeaa20bf.tar.xz
ldap_driver_testing-743aed3ee3952c13f79289d1a7b8efe2aeaa20bf.zip
Refactoring related to isc_buffer_t.
-rw-r--r--ldap_convert.c69
-rw-r--r--ldap_helper.c5
-rw-r--r--str.c40
-rw-r--r--str.h4
-rw-r--r--util.h13
5 files changed, 78 insertions, 53 deletions
diff --git a/ldap_convert.c b/ldap_convert.c
index 2c02f28..24da32f 100644
--- a/ldap_convert.c
+++ b/ldap_convert.c
@@ -70,37 +70,23 @@ isc_result_t
dn_to_dnsname(isc_mem_t *mctx, const char *dn, dns_name_t *target)
{
isc_result_t result;
- ld_string_t *str;
- isc_buffer_t source_buffer;
- isc_buffer_t target_buffer;
- dns_name_t tmp_name;
- unsigned char target_base[DNS_NAME_MAXWIRE];
+ DECLARE_BUFFERED_NAME(name);
+ ld_string_t *str = NULL;
+ isc_buffer_t buffer;
REQUIRE(mctx != NULL);
REQUIRE(dn != NULL);
- str = NULL;
- result = ISC_R_SUCCESS;
-
- /* Convert the DN into a DNS name. */
+ INIT_BUFFERED_NAME(name);
CHECK(str_new(mctx, &str));
- CHECK(dn_to_text(dn, str));
-
- /* TODO: fix this */
- isc_buffer_init(&source_buffer, str_buf(str), str_len(str) - 1);
- isc_buffer_add(&source_buffer, str_len(str) - 1);
- isc_buffer_init(&target_buffer, target_base, sizeof(target_base));
- /* Now create a dns_name_t struct. */
- dns_name_init(&tmp_name, NULL);
- dns_name_setbuffer(&tmp_name, &target_buffer);
-
- CHECK(dns_name_fromtext(&tmp_name, &source_buffer, dns_rootname, 0,
- NULL));
+ CHECK(dn_to_text(dn, str));
+ str_to_isc_buffer(str, &buffer);
+ CHECK(dns_name_fromtext(&name, &buffer, dns_rootname, 0, NULL));
cleanup:
if (result != ISC_R_FAILURE)
- result = dns_name_dupwithoffsets(&tmp_name, mctx, target);
+ result = dns_name_dupwithoffsets(&name, mctx, target);
str_destroy(&str);
@@ -206,14 +192,6 @@ isc_result_t
dnsname_to_dn(ldap_db_t *ldap_db, dns_name_t *name, ld_string_t *target)
{
isc_result_t result;
-
- DECLARE_BUFFERED_NAME(zone);
-
- dns_name_t labels;
-
- dns_namereln_t reln;
- int order;
- unsigned int common_labels;
int label_count;
const char *zone_dn = NULL;
@@ -221,34 +199,33 @@ dnsname_to_dn(ldap_db_t *ldap_db, dns_name_t *name, ld_string_t *target)
REQUIRE(name != NULL);
REQUIRE(target != NULL);
+ /* Find the DN of the zone we belong to. */
+ {
+ DECLARE_BUFFERED_NAME(zone);
+ int dummy;
+ unsigned int common_labels;
- INIT_BUFFERED_NAME(zone);
-
- dns_name_init(&labels, NULL);
+ INIT_BUFFERED_NAME(zone);
- /* Find the DN of the zone we belong to. */
- CHECK(get_zone_dn(ldap_db, name, &zone_dn, &zone));
+ CHECK(get_zone_dn(ldap_db, name, &zone_dn, &zone));
- reln = dns_name_fullcompare(name, &zone, &order, &common_labels);
- INSIST(reln == dns_namereln_subdomain || reln == dns_namereln_equal);
- label_count = dns_name_countlabels(name);
- label_count -= common_labels;
+ dns_name_fullcompare(name, &zone, &dummy, &common_labels);
+ label_count = dns_name_countlabels(name) - common_labels;
+ }
str_clear(target);
if (label_count > 0) {
- isc_buffer_t buffer;
- char target_base[DNS_NAME_MAXTEXT];
- isc_region_t region;
+ DECLARE_BUFFER(buffer, DNS_NAME_MAXTEXT);
+ dns_name_t labels;
- isc_buffer_init(&buffer, target_base, sizeof(target_base));
+ INIT_BUFFER(buffer);
+ dns_name_init(&labels, NULL);
dns_name_getlabelsequence(name, 0, label_count, &labels);
CHECK(dns_name_totext(&labels, ISC_TRUE, &buffer));
- isc_buffer_usedregion(&buffer, &region);
CHECK(str_cat_char(target, "idnsName="));
- CHECK(str_cat_char_len(target, (char *)region.base,
- region.length));
+ CHECK(str_cat_isc_buffer(target, &buffer));
CHECK(str_cat_char(target, ", "));
}
CHECK(str_cat_char(target, zone_dn));
diff --git a/ldap_helper.c b/ldap_helper.c
index 7c0dcb8..73862e2 100644
--- a/ldap_helper.c
+++ b/ldap_helper.c
@@ -1622,12 +1622,11 @@ ldap_rdata_to_char_array(isc_mem_t *mctx, dns_rdata_t *rdata_head,
rdata = rdata_head;
for (i = 0; i < rdata_count && rdata != NULL; i++) {
- isc_buffer_t buffer;
+ DECLARE_BUFFER(buffer, MINTSIZ);
isc_region_t region;
- char data[MINTSIZ];
/* Convert rdata to text. */
- isc_buffer_init(&buffer, data, MINTSIZ);
+ INIT_BUFFER(buffer);
CHECK(dns_rdata_totext(rdata, NULL, &buffer));
isc_buffer_usedregion(&buffer, &region);
diff --git a/str.c b/str.c
index 684f73a..53d02e9 100644
--- a/str.c
+++ b/str.c
@@ -24,8 +24,10 @@
* Review all the REQUIRE() macros.
*/
+#include <isc/buffer.h>
#include <isc/mem.h>
#include <isc/mutex.h>
+#include <isc/region.h>
#include <isc/util.h>
#include <dns/result.h>
@@ -342,6 +344,30 @@ cleanup:
return result;
}
+isc_result_t
+str_cat_isc_region(ld_string_t *dest, const isc_region_t *region)
+{
+ REQUIRE(dest != NULL);
+ REQUIRE(region != NULL);
+
+ return str_cat_char_len(dest, (char *)region->base, region->length);
+}
+
+isc_result_t
+str_cat_isc_buffer(ld_string_t *dest, const isc_buffer_t *buffer)
+{
+ isc_region_t region;
+ isc_buffer_t *deconst_buffer;
+
+ REQUIRE(dest != NULL);
+ REQUIRE(ISC_BUFFER_VALID(buffer));
+
+ DE_CONST(buffer, deconst_buffer);
+ isc_buffer_usedregion(deconst_buffer, &region);
+
+ return str_cat_isc_region(dest, &region);
+}
+
/*
* Concatenate string src to string dest.
*/
@@ -412,6 +438,20 @@ str_toupper(ld_string_t *str)
*ptr = toupper((unsigned char)*ptr);
}
+void
+str_to_isc_buffer(const ld_string_t *src, isc_buffer_t *dest)
+{
+ size_t len;
+
+ REQUIRE(src != NULL);
+ REQUIRE(dest != NULL);
+
+ len = str_len_internal(src) - 1;
+
+ isc_buffer_init(dest, src->data, len);
+ isc_buffer_add(dest, len);
+}
+
int
str_casecmp_char(const ld_string_t *s1, const char *s2)
{
diff --git a/str.h b/str.h
index 08305b6..4fdf177 100644
--- a/str.h
+++ b/str.h
@@ -52,11 +52,15 @@ void str_clear(ld_string_t *dest);
isc_result_t str_init_char(ld_string_t *dest, const char *src);
isc_result_t str_cat_char(ld_string_t *dest, const char *src);
isc_result_t str_cat_char_len(ld_string_t *dest, const char *src, size_t len);
+isc_result_t str_cat_isc_region(ld_string_t *dest, const isc_region_t *region);
+isc_result_t str_cat_isc_buffer(ld_string_t *dest, const isc_buffer_t *buffer);
isc_result_t str_cat(ld_string_t *dest, const ld_string_t *src);
isc_result_t str_sprintf(ld_string_t *dest, const char *format, ...);
isc_result_t str_vsprintf(ld_string_t *dest, const char *format, va_list ap);
void str_toupper(ld_string_t *str);
+void str_to_isc_buffer(const ld_string_t *src, isc_buffer_t *dest);
+
int str_casecmp_char(const ld_string_t *s1, const char *s2);
isc_result_t str_new_split(isc_mem_t *mctx, ld_split_t **splitp);
diff --git a/util.h b/util.h
index 114bab8..96abc51 100644
--- a/util.h
+++ b/util.h
@@ -62,15 +62,20 @@
isc_mem_putanddetach(&(target_ptr)->mctx, target_ptr, \
sizeof(*(target_ptr)))
+#define DECLARE_BUFFER(name, len) \
+ isc_buffer_t name; \
+ unsigned char name##__base[len]
+
+#define INIT_BUFFER(name) \
+ isc_buffer_init(&name, name##__base, sizeof(name##__base))
+
#define DECLARE_BUFFERED_NAME(name) \
dns_name_t name; \
- isc_buffer_t name##__buffer; \
- unsigned char name##__base[DNS_NAME_MAXWIRE]
+ DECLARE_BUFFER(name##__buffer, DNS_NAME_MAXWIRE)
#define INIT_BUFFERED_NAME(name) \
do { \
- isc_buffer_init(&name##__buffer, name##__base, \
- sizeof(name##__base)); \
+ INIT_BUFFER(name##__buffer); \
dns_name_init(&name, NULL); \
dns_name_setbuffer(&name, &name##__buffer); \
} while (0)