isc_result_t new_ldap_cache(isc_mem_t *mctx, ldap_cache_t **cachep, const char * const *argv) { isc_result_t result; ldap_cache_t *cache = NULL; unsigned int cache_ttl; setting_t cache_settings[] = { { "cache_ttl", default_uint(120) }, end_of_settings }; REQUIRE(cachep != NULL && *cachep == NULL); cache_settings[0].target = &cache_ttl; CHECK(set_settings(cache_settings, argv)); CHECKED_MEM_GET_PTR(mctx, cache); ZERO_PTR(cache); isc_mem_attach(mctx, &cache->mctx); isc_interval_set(&cache->cache_ttl, cache_ttl, 0); if (cache_ttl) { CHECK(dns_rbt_create(mctx, cache_node_deleter, NULL, &cache->rbt)); CHECK(isc_mutex_init(&cache->mutex)); } *cachep = cache; return ISC_R_SUCCESS; cleanup: if (cache != NULL) destroy_ldap_cache(&cache); return result; }
#include <string.h> #include <strings.h> #include "log.h" #include "settings.h" #include "str.h" #include "util.h" #include "types.h" #include "ldap_helper.h" #include "zone_register.h" isc_boolean_t verbose_checks = ISC_FALSE; /* log each failure in CHECK() macro */ /** Built-in defaults. */ static const setting_t settings_default[] = { { "default_ttl", default_uint(86400) }, /* Seconds */ { "uri", no_default_string }, /* User have to set this */ { "connections", default_uint(2) }, { "reconnect_interval", default_uint(60) }, { "zone_refresh", default_string("") }, /* No longer supported */ { "timeout", default_uint(10) }, { "cache_ttl", default_string("") }, /* No longer supported */ { "timeout", default_uint(10) }, { "base", no_default_string }, /* User have to set this */ { "auth_method", default_string("none") }, { "bind_dn", default_string("") }, { "password", default_string("") }, { "krb5_principal", default_string("") }, { "sasl_mech", default_string("GSSAPI") }, { "sasl_user", default_string("") }, { "sasl_auth_name", default_string("") },