* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
* USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
+ * The development of Dynamically Loadable Zones (DLZ) for BIND 9 was
* conceived and contributed by Rob Butler.
*
* Permission to use, copy, modify, and distribute this software for any
*/
typedef struct {
-
#ifdef ISC_PLATFORM_USETHREADS
db_list_t *db; /*%< handle to a list of DB */
#else
char *cred; /*%< password for simple authentication method */
int protocol; /*%< LDAP communication protocol version */
char *hosts; /*%< LDAP server hosts */
-
} ldap_instance_t;
/* forward references */
*/
/*% checks that the LDAP URL parameters make sense */
-
static isc_result_t
dlz_ldap_checkURL(char *URL, int attrCnt, const char *msg) {
-
isc_result_t result = ISC_R_SUCCESS;
int ldap_result;
LDAPURLDesc *ldap_url = NULL;
}
cleanup:
-
if (ldap_url != NULL)
ldap_free_urldesc(ldap_url);
- return result;
+ return (result);
}
-/*% Connects / reconnects to LDAP server */
+/*% Connects / reconnects to LDAP server */
static isc_result_t
dlz_ldap_connect(ldap_instance_t *dbi, dbinstance_t *dbc) {
-
isc_result_t result;
int ldap_result;
/* initialize. */
dbc->dbconn = ldap_init(dbi->hosts, LDAP_PORT);
if (dbc->dbconn == NULL)
- return ISC_R_NOMEMORY;
+ return (ISC_R_NOMEMORY);
/* set protocol version. */
ldap_result = ldap_set_option((LDAP *) dbc->dbconn,
goto cleanup;
}
- return ISC_R_SUCCESS;
+ return (ISC_R_SUCCESS);
cleanup:
dbc->dbconn = NULL;
}
- return result;
+ return (result);
}
#ifdef ISC_PLATFORM_USETHREADS
* multithreaded operation.
*/
static void
-ldap_destroy_dblist(db_list_t *dblist)
-{
-
+ldap_destroy_dblist(db_list_t *dblist) {
dbinstance_t *ndbi = NULL;
dbinstance_t *dbi = NULL;
* This function is only used when the driver is compiled for
* multithreaded operation.
*/
-
static dbinstance_t *
-ldap_find_avail_conn(db_list_t *dblist)
-{
+ldap_find_avail_conn(db_list_t *dblist) {
dbinstance_t *dbi = NULL;
dbinstance_t *head;
int count = 0;
while (count < dbc_search_limit) {
/* try to lock on the mutex */
if (isc_mutex_trylock(&dbi->instance_lock) == ISC_R_SUCCESS)
- return dbi; /* success, return the DBI for use. */
+ return (dbi); /* success, return the DBI for use. */
/* not successful, keep trying */
dbi = ISC_LIST_NEXT(dbi, link);
"LDAP driver unable to find available connection "
"after searching %d times",
count);
- return NULL;
+ return (NULL);
}
-
#endif /* ISC_PLATFORM_USETHREADS */
static isc_result_t
isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
"LDAP no entries to process.");
- return ISC_R_FAILURE;
+ return (ISC_R_FAILURE);
}
/* loop through all entries returned */
while (entry != NULL) {
-
/* reset for this loop */
ttl = 0;
len = 0;
attribute = attrs[i];
/* determine how much space we need for data string */
- for (j=0; attrs[j] != NULL; j++) {
+ for (j = 0; attrs[j] != NULL; j++) {
/* get the list of values for this attribute. */
vals = ldap_get_values(dbc, entry, attrs[j]);
/* skip empty attributes. */
len = len + strlen(vals[0]) + 1;
/* free vals for next loop */
ldap_value_free(vals);
- } /* end for (j=0; attrs[j] != NULL, j++) loop */
+ } /* end for (j = 0; attrs[j] != NULL, j++) loop */
/* allocate memory for data string */
data = isc_mem_allocate(ns_g_mctx, len + 1);
/* loop through the attributes in the order specified. */
while (attribute != NULL) {
-
/* get the list of values for this attribute. */
vals = ldap_get_values(dbc, entry, attribute);
isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
"LDAP driver unable "
- "to retrieve dns type");
+ "to retrieve DNS type");
result = ISC_R_FAILURE;
goto cleanup;
}
+
if (strlen(data) < 1) {
isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
"LDAP driver unable "
- "to retrieve dns data");
+ "to retrieve DNS data");
result = ISC_R_FAILURE;
goto cleanup;
}
+
if (allnodes == isc_boolean_true) {
if (strcasecmp(host, "~") == 0)
result = dns_sdlz_putnamedrr(
} /* end while (entry != NULL) */
cleanup:
-
/* de-allocate memory */
if (vals != NULL)
ldap_value_free(vals);
if (data != NULL)
isc_mem_free(ns_g_mctx, data);
- return result;
+ return (result);
}
/*%
/* if DBI is null, can't do anything else */
if (dbi == NULL)
- return ISC_R_FAILURE;
+ return (ISC_R_FAILURE);
/* set fields */
if (zone != NULL) {
goto cleanup;
}
- for (i=0; i < 3; i++) {
+ for (i = 0; i < 3; i++) {
/*
* dbi->dbconn may be null if trying to reconnect on a
goto cleanup;
break;
} /* close switch(ldap_result) */
- } /* end for (int i=0 i < 3; i++) */
+ } /* end for (int i = 0 i < 3; i++) */
if (result != ISC_R_SUCCESS)
goto cleanup;
result = ISC_R_UNEXPECTED;
}
-
cleanup:
/* it's always good to cleanup after yourself */
isc_mem_free(ns_g_mctx, querystring );
/* return result */
- return result;
+ return (result);
}
/*
* DLZ methods
*/
-
static isc_result_t
dlz_ldap_allowzonexfr(void *driverarg, void *dbdata, const char *name,
const char *client)
/* check to see if we are authoritative for the zone first */
result = dlz_ldap_findzone(driverarg, dbdata, name);
if (result != ISC_R_SUCCESS) {
- return result;
+ return (result);
}
/* get all the zone data */
- return ldap_get_results(name, NULL, client, ALLOWXFR, dbdata, NULL);
+ result = ldap_get_results(name, NULL, client, ALLOWXFR, dbdata, NULL);
+ return (result);
}
static isc_result_t
dns_sdlzallnodes_t *allnodes)
{
UNUSED(driverarg);
- return ldap_get_results(zone, NULL, NULL, ALLNODES, dbdata, allnodes);
+ return (ldap_get_results(zone, NULL, NULL, ALLNODES, dbdata, allnodes));
}
static isc_result_t
dns_sdlzlookup_t *lookup)
{
UNUSED(driverarg);
- return ldap_get_results(zone, NULL, NULL, AUTHORITY, dbdata, lookup);
+ return (ldap_get_results(zone, NULL, NULL, AUTHORITY, dbdata, lookup));
}
static isc_result_t
-dlz_ldap_findzone(void *driverarg, void *dbdata, const char *name)
-{
+dlz_ldap_findzone(void *driverarg, void *dbdata, const char *name) {
UNUSED(driverarg);
- return ldap_get_results(name, NULL, NULL, FINDZONE, dbdata, NULL);
+ return (ldap_get_results(name, NULL, NULL, FINDZONE, dbdata, NULL));
}
static isc_result_t
dlz_ldap_lookup(const char *zone, const char *name, void *driverarg,
void *dbdata, dns_sdlzlookup_t *lookup)
{
+ isc_result_t result;
UNUSED(driverarg);
+
if (strcmp(name, "*") == 0)
- return ldap_get_results(zone, "~", NULL,
- LOOKUP, dbdata, lookup);
+ result = ldap_get_results(zone, "~", NULL, LOOKUP,
+ dbdata, lookup);
else
- return ldap_get_results(zone, name, NULL,
- LOOKUP, dbdata, lookup);
+ result = ldap_get_results(zone, name, NULL, LOOKUP,
+ dbdata, lookup);
+ return (result);
}
dlz_ldap_create(const char *dlzname, unsigned int argc, char *argv[],
void *driverarg, void **dbdata)
{
-
isc_result_t result;
ldap_instance_t *ldap_inst = NULL;
dbinstance_t *dbi = NULL;
case 12:
result = dlz_ldap_checkURL(argv[11], 0, "allow zone transfer");
if (result != ISC_R_SUCCESS)
- return result;
+ return (result);
case 11:
result = dlz_ldap_checkURL(argv[10], 3, "all nodes");
if (result != ISC_R_SUCCESS)
- return result;
+ return (result);
case 10:
if (strlen(argv[9]) > 0) {
result = dlz_ldap_checkURL(argv[9], 3, "authority");
if (result != ISC_R_SUCCESS)
- return result;
+ return (result);
}
case 9:
result = dlz_ldap_checkURL(argv[8], 3, "lookup");
if (result != ISC_R_SUCCESS)
- return result;
+ return (result);
result = dlz_ldap_checkURL(argv[7], 0, "find zone");
if (result != ISC_R_SUCCESS)
- return result;
+ return (result);
break;
default:
/* not really needed, should shut up compiler. */
return(ISC_R_SUCCESS);
cleanup:
-
dlz_ldap_destroy(NULL, ldap_inst);
return(ISC_R_FAILURE);
}
void
-dlz_ldap_destroy(void *driverarg, void *dbdata)
-{
-
+dlz_ldap_destroy(void *driverarg, void *dbdata) {
UNUSED(driverarg);
if (dbdata != NULL) {
-
#ifdef ISC_PLATFORM_USETHREADS
-
/* cleanup the list of DBI's */
ldap_destroy_dblist((db_list_t *)
((ldap_instance_t *)dbdata)->db);
#else /* ISC_PLATFORM_USETHREADS */
-
- /* release connection */
if (((ldap_instance_t *)dbdata)->db->dbconn != NULL)
ldap_unbind_s((LDAP *)
((ldap_instance_t *)dbdata)->db->dbconn);
/* destroy single DB instance */
destroy_sqldbinstance(((ldap_instance_t *)dbdata)->db);
-
#endif /* ISC_PLATFORM_USETHREADS */
if (((ldap_instance_t *)dbdata)->hosts != NULL)
result = ISC_R_UNEXPECTED;
}
-
- return result;
+ return (result);
}
/*%
*/
void
dlz_ldap_clear(void) {
-
/*
* Write debugging message to log
*/