I'm running into a problem with mod_ldap on Windows. When I try to authenticate without passing in a username, I get a 500 server error. Since the browser doesn't get back a 401, it caches the user's credentials and I have to restart the browser session in order to attempt to login again. This is only happening on Windows, so I'm sure it's a difference (bug?) in the Microsoft LDAP SDK. Below is a proposed fix on top of Apache 2.2.4. I added the #if APR_HAS_MICROSOFT_LDAPSDK block. modules/ldap/util_ldap.c (line 933): /* try do the search */ if ((result = ldap_search_ext_s(ldc->ldap, (char *)basedn, scope, (char *)filter, attrs, 0, NULL, NULL, NULL, -1, &res)) == LDAP_SERVER_DOWN) { ldc->reason = "ldap_search_ext_s() for user failed with server down"; uldap_connection_unbind(ldc); goto start_over; } #if APR_HAS_MICROSOFT_LDAPSDK if ( result == LDAP_FILTER_ERROR ) { // no username was supplied, so fail with invalid credentials /* failure? if so - return */ ldc->reason = "ldap_search_ext_s() to search for user failed"; ldap_msgfree(res); uldap_connection_unbind(ldc); return LDAP_INVALID_CREDENTIALS; } #endif /* if there is an error (including LDAP_NO_SUCH_OBJECT) return now */ if (result != LDAP_SUCCESS) { ldc->reason = "ldap_search_ext_s() for user failed"; return result; } It would be great if this patch or something with similar affect could be included in the next Apache 2.2 release. Thanks. , Josh.
Unfortunately a platform specific #ifdef in util_ldap.c wouldn't be appropriate. The easiest fix would be to add another result check at the end of authn_ldap_check_password() in mod_authnz_ldap.c. However, the purpose of the #ifdef's there was to handle the fact that not all platforms supported the macro LDAP_SECURITY_ERROR() that checked a specific set of security related result codes. Adding a check for LDAP_FILTER_ERROR doesn't seem quite right since that result code isn't really a security code even though it would solve the problem for Win32. The other solution would be to abstract all of the LDAP result codes into a set of APR_LDAP_xxx codes which is probably too big of a changed for 2.2.x.
There is another alternative. The root of the problem is that the filter that is being built can be interpreted by the Windows SDK as invalid if the user id attribute is nothing. The function that creates the filter, authn_ldap_build_filter(), already has an #ifdef for the microsoft ldap sdk. Can you patch the code within the #ifdef to make sure that an invalid filter for the microsoft sdk is never produced? If so, then all of the error checking will just fall into place and there won't be a special case for Windows when checking for a failed login. In reality an invalid filter should result in a general error rather than an authentication failure. A truely invalid filter could be the result of a bad filter being passed in on the LDAP Url. If we added the special case to check for LDAP_INVALID_FILTER that was equivalent to a failed login, then a truely invalid filter would be reported incorrectly.
Is there a valid use case for ever accepting a blank username? A possible workaround might be to reject blank usernames entirely.
Please help us to refine our list of open and current defects; this is a mass update of old and inactive Bugzilla reports which reflect user error, already resolved defects, and still-existing defects in httpd. As repeatedly announced, the Apache HTTP Server Project has discontinued all development and patch review of the 2.2.x series of releases. The final release 2.2.34 was published in July 2017, and no further evaluation of bug reports or security risks will be considered or published for 2.2.x releases. All reports older than 2.4.x have been updated to status RESOLVED/LATER; no further action is expected unless the report still applies to a current version of httpd. If your report represented a question or confusion about how to use an httpd feature, an unexpected server behavior, problems building or installing httpd, or working with an external component (a third party module, browser etc.) we ask you to start by bringing your question to the User Support and Discussion mailing list, see [https://httpd.apache.org/lists.html#http-users] for details. Include a link to this Bugzilla report for completeness with your question. If your report was clearly a defect in httpd or a feature request, we ask that you retest using a modern httpd release (2.4.33 or later) released in the past year. If it can be reproduced, please reopen this bug and change the Version field above to the httpd version you have reconfirmed with. Your help in identifying defects or enhancements still applicable to the current httpd server software release is greatly appreciated.