Justin Künzel created DIRAPI-316:
------------------------------------

             Summary: LdapNetworkConnection.setTimeOut() doesnt work
                 Key: DIRAPI-316
                 URL: https://issues.apache.org/jira/browse/DIRAPI-316
             Project: Directory Client API
          Issue Type: Bug
    Affects Versions: 1.0.0
         Environment: Windows, Linux
            Reporter: Justin Künzel


LdapNetworkConnection.setTimeOut() doesnt work as expected, it doesnt runs into 
a timeout exception with these value, instead of this you have to use
{code:java}
((LdapNetworkConnection) conn).getConfig().setTimeout(TIMEOUT_LIMIT_SECONDS * 
1000L);{code}
 

Not working code:

 
{code:java}
try (LdapConnection conn = new LdapNetworkConnection(host, port)) {
    //set timeout of 3 seconds
    conn.setTimeout(3000);

    conn.bind("uid=" + username + ",cn=users,cn=accounts,dc=example,dc=com", 
password);

    SearchRequest req = new SearchRequestImpl();
    req.setTimeLimit(TIMEOUT_LIMIT_SECONDS);
    req.setScope(SearchScope.SUBTREE);
    req.addAttributes("memberOf");
    req.setBase(new Dn("cn=users,cn=accounts,dc=example,dc=com"));
    req.setFilter("(&(uid=" + username + ")(memberOf=cn=" + privilege + 
",cn=privileges,cn=pbac,dc=example,dc=com))");

    SearchCursor cursor = conn.search(req);

    if (cursor.next()) {
        //seems fine so far
    } else {
        group = -1;
        throw new BadCredentialsException("You don't have access to JCroft. 
Please ask the ops for access!");
    }
    req.abandon();

    SearchRequest req2 = new SearchRequestImpl();
    req2.setTimeLimit(TIMEOUT_LIMIT_SECONDS);
    req2.setScope(SearchScope.SUBTREE);
    req2.addAttributes("memberOf");
    req2.setBase(new Dn("cn=users,cn=accounts,dc=example,dc=com"));
    req2.setFilter("(&(uid=" + username + ")(memberOf=cn=" + privilege2 + 
",cn=privileges,cn=pbac,dc=example,dc=com))");

    SearchCursor cursor2 = conn.search(req2);

    if (cursor2.next()) {
        group = 1;
    } else {
        group = 0;
    }

    conn.unBind();
} catch (InvalidConnectionException e) {
    throw new BadCredentialsException("LDAP server is down. Please try again 
later.");
} catch (IOException e) {
    e.printStackTrace();
    throw new BadCredentialsException(ERROR_WHILE_AUTHENTIFICATING);
} catch (LdapAuthenticationException ex) {
    throw new BadCredentialsException("Your credentials were not accepted!");
}
{code}
 

Working example:
{code:java}
try (LdapConnection conn = new LdapNetworkConnection(host, port)) {
    //set timeout of 3 seconds
    ((LdapNetworkConnection) conn).getConfig().setTimeout(3 * 1000L);

    conn.bind("uid=" + username + ",cn=users,cn=accounts,dc=example,dc=com", 
password);

    SearchRequest req = new SearchRequestImpl();
    req.setTimeLimit(TIMEOUT_LIMIT_SECONDS);
    req.setScope(SearchScope.SUBTREE);
    req.addAttributes("memberOf");
    req.setBase(new Dn("cn=users,cn=accounts,dc=example,dc=com"));
    req.setFilter("(&(uid=" + username + ")(memberOf=cn=" + privilege + 
",cn=privileges,cn=pbac,dc=example,dc=com))");

    SearchCursor cursor = conn.search(req);

    if (cursor.next()) {
        //seems fine so far
    } else {
        group = -1;
        throw new BadCredentialsException("You don't have access to JCroft. 
Please ask the ops for access!");
    }
    req.abandon();

    SearchRequest req2 = new SearchRequestImpl();
    req2.setTimeLimit(TIMEOUT_LIMIT_SECONDS);
    req2.setScope(SearchScope.SUBTREE);
    req2.addAttributes("memberOf");
    req2.setBase(new Dn("cn=users,cn=accounts,dc=example,dc=com"));
    req2.setFilter("(&(uid=" + username + ")(memberOf=cn=" + privilege2 + 
",cn=privileges,cn=pbac,dc=example,dc=com))");

    SearchCursor cursor2 = conn.search(req2);

    if (cursor2.next()) {
        group = 1;
    } else {
        group = 0;
    }

    conn.unBind();
} catch (InvalidConnectionException e) {
    throw new BadCredentialsException("LDAP server is down. Please try again 
later.");
} catch (IOException e) {
    e.printStackTrace();
    throw new BadCredentialsException(ERROR_WHILE_AUTHENTIFICATING);
} catch (LdapAuthenticationException ex) {
    throw new BadCredentialsException("Your credentials were not accepted!");
}
{code}
 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to