Bug 41435

Summary: Authentication fails with 500 Server Error
Product: Apache httpd-2 Reporter: jfenlason
Component: mod_ldapAssignee: Apache HTTPD Bugs Mailing List <bugs>
Status: RESOLVED LATER    
Severity: normal CC: dstusynski
Priority: P2 Keywords: MassUpdate
Version: 2.2.4   
Target Milestone: ---   
Hardware: Other   
OS: other   
Bug Depends on:    
Bug Blocks: 59347    

Description jfenlason 2007-01-22 10:42:40 UTC
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.
Comment 1 Brad Nicholes 2007-01-22 11:56:09 UTC
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.
Comment 2 Brad Nicholes 2007-01-31 14:47:16 UTC
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.
Comment 3 Graham Leggett 2007-11-27 08:45:17 UTC
Is there a valid use case for ever accepting a blank username? A possible
workaround might be to reject blank usernames entirely.
Comment 4 William A. Rowe Jr. 2018-11-07 21:08:16 UTC
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.