diff options
author | Martin Nagy <mnagy@redhat.com> | 2009-03-25 17:59:54 +0100 |
---|---|---|
committer | Martin Nagy <mnagy@redhat.com> | 2009-03-25 17:59:54 +0100 |
commit | 743aed3ee3952c13f79289d1a7b8efe2aeaa20bf (patch) | |
tree | 698ef5b696dba655c11399be7bcd85f96094890c | |
parent | 571bf6b7f2fd9ca6551b207e60f486473c45ba96 (diff) | |
download | ldap_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.c | 69 | ||||
-rw-r--r-- | ldap_helper.c | 5 | ||||
-rw-r--r-- | str.c | 40 | ||||
-rw-r--r-- | str.h | 4 | ||||
-rw-r--r-- | util.h | 13 |
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, ®ion); 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, ®ion); @@ -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, ®ion); + + return str_cat_isc_region(dest, ®ion); +} + /* * 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) { @@ -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); @@ -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) |