summaryrefslogtreecommitdiffstats
path: root/ldap_convert.c
diff options
context:
space:
mode:
authorMartin Nagy <mnagy@redhat.com>2009-02-13 10:48:29 +0100
committerMartin Nagy <mnagy@redhat.com>2009-02-18 18:20:42 +0100
commitffa6b87e86b10b69791f3ac19e47eadefe94da46 (patch)
treecc05b3292d6349ebbbef4522edad87b3e57c8ace /ldap_convert.c
parent719309ac5dd0bd875bb1854f291785c1efc16400 (diff)
downloadldap_driver-ffa6b87e86b10b69791f3ac19e47eadefe94da46.tar.gz
ldap_driver-ffa6b87e86b10b69791f3ac19e47eadefe94da46.tar.xz
ldap_driver-ffa6b87e86b10b69791f3ac19e47eadefe94da46.zip
Add dnsname_to_dn().
This function will take dns_name_t as a parameter and in turn return a suitable DN.
Diffstat (limited to 'ldap_convert.c')
-rw-r--r--ldap_convert.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/ldap_convert.c b/ldap_convert.c
index 41d0474..06e8176 100644
--- a/ldap_convert.c
+++ b/ldap_convert.c
@@ -178,3 +178,53 @@ count_rdns(char **exploded)
return ret;
}
+
+isc_result_t
+dnsname_to_dn(isc_mem_t *mctx, dns_name_t *name, const char *root_dn,
+ ld_string_t *target)
+{
+ isc_result_t result;
+ isc_buffer_t target_buffer;
+ char target_base[DNS_NAME_MAXTEXT + 1];
+ ld_string_t *str;
+ ld_split_t *split;
+ unsigned int split_count;
+
+ REQUIRE(mctx != NULL);
+ REQUIRE(name != NULL);
+ REQUIRE(target != NULL);
+
+ str = NULL;
+ split = NULL;
+ CHECK(str_new(mctx, &str));
+ CHECK(str_new_split(mctx, &split));
+ isc_buffer_init(&target_buffer, target_base, sizeof(target_base));
+ CHECK(dns_name_totext(name, isc_boolean_true, &target_buffer));
+
+ target_base[isc_buffer_usedlength(&target_buffer)] = '\0';
+ CHECK(str_init_char(str, target_base));
+ CHECK(str_split(str, '.', split));
+ split_count = str_split_count(split);
+
+ for (unsigned int i = 0; i < split_count - 1; i++) {
+ CHECK(str_cat_char(target, "idnsName="));
+ CHECK(str_cat_char(target, str_split_get(split, i)));
+ if (split_count - i > 2)
+ CHECK(str_cat_char(target, ", "));
+ }
+
+ CHECK(str_cat_char(target, "."));
+ CHECK(str_cat_char(target, str_split_get(split, split_count - 1)));
+
+ if (root_dn != NULL) {
+ CHECK(str_cat_char(target, ", "));
+ CHECK(str_cat_char(target, root_dn));
+ }
+
+ log_error("%s", str_buf(target));
+cleanup:
+ str_destroy_split(&split);
+ str_destroy(&str);
+
+ return result;
+}