diff options
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/httpauthd.c | 2 | ||||
-rw-r--r-- | daemon/ldap.c | 25 |
2 files changed, 20 insertions, 7 deletions
diff --git a/daemon/httpauthd.c b/daemon/httpauthd.c index d3efbe9..e5b8dcb 100644 --- a/daemon/httpauthd.c +++ b/daemon/httpauthd.c @@ -362,7 +362,7 @@ int main(int argc, char* argv[]) } /* Start a new thread if neccessary */ - if(fd != 0 && threads[i].tid == 0) + if(fd != -1 && threads[i].tid == 0) { threads[i].fd = fd; r = pthread_create(&(threads[i].tid), NULL, httpauth_thread, diff --git a/daemon/ldap.c b/daemon/ldap.c index 37ef27a..3befc4b 100644 --- a/daemon/ldap.c +++ b/daemon/ldap.c @@ -650,6 +650,7 @@ static void save_ldap_connection(ldap_context_t* ctx, LDAP* ld) case LDAP_SERVER_DOWN: case LDAP_LOCAL_ERROR: case LDAP_NO_MEMORY: + discard_ldap_connection(ctx, ld); break; default: @@ -667,13 +668,13 @@ static void save_ldap_connection(ldap_context_t* ctx, LDAP* ld) break; }; +} - if(ld != NULL) - { - ldap_unbind_s(ld); - ctx->pool_mark--; - ha_messagex(LOG_DEBUG, "ldap: discarding connection (total %d)", ctx->pool_mark); - } +static discard_ldap_connection(ldap_context_t* ctx, LDAP* ld) +{ + ldap_unbind_s(ld); + ctx->pool_mark--; + ha_messagex(LOG_DEBUG, "ldap: discarding connection (total %d)", ctx->pool_mark); } static int retrieve_user_entry(ldap_context_t* ctx, const ha_request_t* req, LDAP* ld, @@ -968,6 +969,18 @@ static int basic_ldap_response(ldap_context_t* ctx, const char* header, /* It worked! */ ha_messagex(LOG_NOTICE, "ldap: validated basic user using bind: %s", basic.user); found = 1; + + /* Now we have to rebind the connection back to the main user */ + r = ldap_simple_bind_s(ld, ctx->user ? ctx->user : "", + ctx->password ? ctx->password : ""); + if(r != LDAP_SUCCESS) + { + report_ldap("ldap: couldn't rebind LDAP connection back to auth credentials", r); + + /* Discard the connection since it's useless to us */ + discard_ldap_connection(ctx, ld); + ld = NULL; + } } |