static void ldap_free (ldap_t *st) /* {{{ */
{
- if(st == NULL)
+ if (st == NULL)
return;
sfree (st->cacert);
sfree (st->host);
sfree (st->name);
sfree (st->url);
- if(st->ld)
- ldap_memfree(st->ld);
+ if (st->ld)
+ ldap_memfree (st->ld);
sfree (st);
} /* }}} void ldap_free */
+
/* initialize ldap for each host */
static int ldap_init_host (ldap_t *st) /* {{{ */
{
rc = ldap_initialize (&ld, st->url);
if (rc != LDAP_SUCCESS)
{
- char errbuf[1024];
- sstrerror (errno, errbuf, sizeof (errbuf));
- ERROR ("ldap_initialize failed: %s", errbuf);
+ ERROR ("openldap plugin: ldap_initialize failed: %s",
+ ldap_err2string (rc));
st->state = 0;
return (-1);
}
ldap_set_option (st->ld, LDAP_OPT_PROTOCOL_VERSION, &st->version);
- if(st->cacert != NULL)
+ ldap_set_option (st->ld, LDAP_OPT_TIMEOUT,
+ &(const struct timeval){st->timeout, 0});
+
+ if (st->cacert != NULL)
ldap_set_option (st->ld, LDAP_OPT_X_TLS_CACERTFILE, st->cacert);
- if(st->verifyhost == 0)
+ if (st->verifyhost == 0)
{
int never = LDAP_OPT_X_TLS_NEVER;
ldap_set_option (st->ld, LDAP_OPT_X_TLS_REQUIRE_CERT, &never);
}
- if(st->starttls != 0)
+ if (st->starttls != 0)
{
- rc = ldap_start_tls_s(ld, NULL, NULL);
+ rc = ldap_start_tls_s (ld, NULL, NULL);
if (rc != LDAP_SUCCESS)
{
ERROR ("openldap plugin: Failed to start tls on %s: %s",
st->url, ldap_err2string (rc));
st->state = 0;
- ldap_unbind_ext_s(st->ld, NULL, NULL);
+ ldap_unbind_ext_s (st->ld, NULL, NULL);
return (-1);
}
}
cred.bv_val = "";
cred.bv_len = 0;
- rc = ldap_sasl_bind_s(st->ld, NULL, NULL, &cred, NULL, NULL, NULL);
+ rc = ldap_sasl_bind_s (st->ld, NULL, NULL, &cred, NULL, NULL, NULL);
if (rc != LDAP_SUCCESS)
{
ERROR ("openldap plugin: Failed to bind to %s: %s",
st->url, ldap_err2string (rc));
st->state = 0;
- ldap_unbind_ext_s(st->ld, NULL, NULL);
+ ldap_unbind_ext_s (st->ld, NULL, NULL);
return (-1);
}
else
return (status);
}
+ st->starttls = 0;
+ st->timeout = -1;
st->verifyhost = 1;
st->version = LDAP_VERSION3;
LDAPURLDesc *ludpp;
int rc;
- if ((rc = ldap_url_parse( st->url, &ludpp)) != 0)
+ if ((rc = ldap_url_parse (st->url, &ludpp)) != 0)
{
ERROR ("openldap plugin: Instance `%s': "
"Invalid URL: `%s'",
st->host = strdup (ludpp->lud_host);
}
- ldap_free_urldesc(ludpp);
+ ldap_free_urldesc (ludpp);
}
if (status == 0)
/* }}} End of configuration handling functions */
+static int ldap_init (void) /* {{{ */
+{
+ /* Initialize LDAP library while still single-threaded as recommended in
+ * ldap_initialize(3) */
+ int debug_level;
+ ldap_get_option (NULL, LDAP_OPT_DEBUG_LEVEL, &debug_level);
+ return (0);
+} /* }}} int ldap_init */
+
void module_register (void) /* {{{ */
{
plugin_register_complex_config ("openldap", ldap_config);
+ plugin_register_init ("openldap", ldap_init);
} /* }}} void module_register */