summaryrefslogtreecommitdiffstats
path: root/src/util/sss_ldap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/sss_ldap.c')
-rw-r--r--src/util/sss_ldap.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/util/sss_ldap.c b/src/util/sss_ldap.c
index 060aacf9e..878ed4a63 100644
--- a/src/util/sss_ldap.c
+++ b/src/util/sss_ldap.c
@@ -590,3 +590,85 @@ done:
talloc_free(filter);
return ret;
}
+
+int sss_ldap_set_debug(int *old_debug)
+{
+ const char *dbg;
+ static const char dbg_var[] = "SSSD_DEBUG_LDAP_SEARCH";
+ int ret;
+ int new_debug;
+ int ldap_old_debug;
+ char *endptr;
+
+ dbg = getenv(dbg_var);
+ if (!dbg){
+ DEBUG(SSSDBG_TRACE_LIBS, ("No extra LDAP debugging set\n"));
+ return EOK;
+ }
+
+ errno = 0;
+ new_debug = strtol(dbg, &endptr, 0);
+ if (errno != 0) {
+ ret = errno;
+ DEBUG(SSSDBG_OP_FAILURE,
+ ("strtol failed on [%s]: [%d][%s].\n", dbg, ret, strerror(ret)));
+ return ret;
+ }
+
+ if (*endptr != '\0') {
+ DEBUG(SSSDBG_OP_FAILURE,
+ ("Found additional characters [%s] in debug level [%s].\n",
+ endptr, dbg));
+ return EINVAL;
+ }
+
+ ret = reopen_stderr_for_libldap(NULL);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_OP_FAILURE, ("Could not redirect stderr to log file\n"));
+ return ret;
+ }
+
+ ret = ldap_get_option(NULL, LDAP_OPT_DEBUG_LEVEL,
+ &ldap_old_debug);
+ if (ret != LDAP_OPT_SUCCESS) {
+ DEBUG(SSSDBG_OP_FAILURE, ("Could not save old LDAP debug level\n"));
+ return EIO;
+ }
+
+ DEBUG(8, ("LDAP debug level was %#X setting to %#X\n",
+ ldap_old_debug, new_debug));
+
+ ret = ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL,
+ &new_debug);
+ if (ret != LDAP_OPT_SUCCESS) {
+ DEBUG(SSSDBG_OP_FAILURE, ("Could not set LDAP debugging\n"));
+ return EIO;
+ }
+
+ if (old_debug) *old_debug = ldap_old_debug;
+
+ return EOK;
+}
+
+int sss_ldap_reset_debug(int ldap_old_debug)
+{
+ int ret;
+
+ ret = reopen_stderr_after_libldap();
+ if (ret != EOK) {
+ DEBUG(SSSDBG_OP_FAILURE,
+ ("Could not redirect stderr back to /dev/null\n"));
+ return ret;
+ }
+
+ ret = ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL,
+ &ldap_old_debug);
+ if (ret != LDAP_SUCCESS) {
+ DEBUG(SSSDBG_OP_FAILURE, ("Could not reset LDAP debugging\n"));
+ return EIO;
+ }
+
+ DEBUG(SSSDBG_TRACE_LIBS,
+ ("Resetting LDAP debug level to %#X\n", ldap_old_debug));
+ return EOK;
+}