Think we found a fix: adding a passivator to LDAP config in 
deployerConfigContext.xml. Thanks, Travis!


        <bean id="abstractConnectionPool" abstract="true"
                  class="org.ldaptive.pool.BlockingConnectionPool"
                  init-method="initialize"
                  p:poolConfig-ref="ldapPoolConfig"
                  p:blockWaitTime="${ldap.pool.blockWaitTime}"
                  p:validator-ref="searchValidator"
                  p:pruneStrategy-ref="pruneStrategy"
                  p:passivator-ref="bindPassivator" />

        <bean id="bindPassivator" class="org.ldaptive.pool.BindPassivator"
                  c:br-ref="bindRequest"/>

        <bean id="bindRequest" class="org.ldaptive.BindRequest"
                  p:dn="${ldap.managerDn}">
                <property name="credential">
                        <bean class="org.ldaptive.Credential"
                                c:password="${ldap.managerPassword}" />
                </property>
        </bean>

Note: we're not using <ldaptive:bind-search-authenticator>, as it's missing a 
few pieces necessary for connection pool config/validation.

Tom.

> On Feb 24, 2017, at 3:59 PM, Tom Poage <[email protected]> wrote:
> 
> This issue looks to have just bit us with 4.2.x, as well.
> 
> A network configuration error led to losing two of our four CAS servers at a 
> busy time of day. Some fraction of the users needed to re-login, so there was 
> a natural increase in LDAP pool connections. Every time the validator ran, 
> each connection in the pool failed validation, forcing the creation of a new 
> set of connections. We didn't notice this behavior earlier but, now that we 
> look at it, it's been there all along.
> 
> Tom.
> 
> 
>> On Feb 13, 2017, at 2:11 AM, Ben Howell-Thomas 
>> <[email protected]> wrote:
>> 
>> Hi,
>> 
>> I think I may have found an issue but per guidelines posting here first.
>> 
>> When CAS is configured to authenticate with LDAP using Direct Bind and LDAP 
>> is locked down to not allow anonymous binds/searches or for users to see 
>> anything other than their own entry, then we get unexpected failures trying 
>> to log in.
>> 
>> For wrong passwords or locked accounts, every second attempt [with a given 
>> Ldap connection from the pool] would fail.  Actually, it would also fail for 
>> a valid account with the correct password if it was on the same connection 
>> as a failed login attempt, and the regular connection validator would 
>> similarly fail.
>> 
>> What's happening in Ldaptive is as follows :
>>      • Before a bind attempt, a SearchValidator checks the connection is 
>> still valid
>>      • To make the bind attempt, org.ldaptive.provider.jndi.JndiConnection 
>> sets the principal and credentials on the connection's environment variable
>>      • This connection is then returned to the pool, still containing the 
>> principal and credentials from the previous attempt.
>>      • Before the next login/bind attempt using that connection, 
>> SearchValidator tries to validate the connection again but fails, because 
>> it's no longer trying with the configured cas.properties 
>> cas.authn.ldap.bindDn property but with whatever user DN was used in the 
>> previous step
>>      • Since the SearchValidator fails, the connection is closed and an 
>> exception is returned, so CAS denies access by default (even if we should 
>> show the Account Locked page).
>> I asked the Ldaptive mailing list about this which put me on to the 
>> org.ldaptive.pool.BindPassivator class which reconnects to LDAP with the 
>> configured DN and credentials, effectively resetting the connection to what 
>> it should be after each bind request.  That way the connection is returned 
>> to the pool ready to be used again.
>> 
>> Adding the following to our version of 
>> LdapAuthenticationConfiguration.getDirectBindAuthenticator() implemented a 
>> BindPassivator to restore expected behaviour :
>> 
>> /*
>> * Binding (which we do both when validating connections and authenticating 
>> users) using pooled connections is "tricky"
>> * according to the Ldaptive mailing list.  The connection must be returned 
>> to the pool ready for the next connection 
>> * to use (ie not binded as the previous user). Set a BindPassivator to clean 
>> the connection when it's returned to the pool.
>> */
>> ConnectionPool cp = 
>> pooledBindAuthenticationHandler.getConnectionFactory().getConnectionPool();
>> BindRequest br = new BindRequest(l.getBindDn(), new 
>> Credential(l.getBindCredential()));
>> cp.setPassivator(new BindPassivator(br));
>> 
>> Another workaround of course would be to change the LDAP configuration.
>> 
>> thanks,
>> 
>> Ben 
>> 
>> # ps some relevant LDAP settings for reference
>> cas.authn.ldap[0].type=DIRECT
>> cas.authn.ldap[0].useSsl=false
>> cas.authn.ldap[0].useStartTls=false
>> cas.authn.ldap[0].connectTimeout=5000
>> cas.authn.ldap[0].subtreeSearch=false
>> cas.authn.ldap[0].bindDn=uid=cas,ou=Administrators,dc=domain,dc=com
>> cas.authn.ldap[0].bindCredential=password
>> cas.authn.ldap[0].minPoolSize=3
>> cas.authn.ldap[0].maxPoolSize=10
>> cas.authn.ldap[0].validateOnCheckout=true
>> cas.authn.ldap[0].validatePeriodically=true
>> cas.authn.ldap[0].validatePeriod=600
>> cas.authn.ldap[0].failFast=true
>> cas.authn.ldap[0].idleTime=500
>> cas.authn.ldap[0].prunePeriod=600
>> cas.authn.ldap[0].blockWaitTime=5000
>> 
>> This email is sent on behalf of Northgate Public Services (UK) Limited and 
>> its associated companies including Rave Technologies (India) Pvt Limited 
>> (together "Northgate Public Services") and is strictly confidential and 
>> intended solely for the addressee(s). 
>> If you are not the intended recipient of this email you must: (i) not 
>> disclose, copy or distribute its contents to any other person nor use its 
>> contents in any way or you may be acting unlawfully;  (ii) contact Northgate 
>> Public Services immediately on +44(0)1908 264500 quoting the name of the 
>> sender and the addressee then delete it from your system.
>> Northgate Public Services has taken reasonable precautions to ensure that no 
>> viruses are contained in this email, but does not accept any responsibility 
>> once this email has been transmitted.  You should scan attachments (if any) 
>> for viruses.
>> 
>> Northgate Public Services (UK) Limited, registered in England and Wales 
>> under number 00968498 with a registered address of Peoplebuilding 2, 
>> Peoplebuilding Estate, Maylands Avenue, Hemel Hempstead, Hertfordshire, HP2 
>> 4NN.  Rave Technologies (India) Pvt Limited, registered in India under 
>> number 117068 with a registered address of 2nd Floor, Ballard House, Adi 
>> Marzban Marg, Ballard Estate, Mumbai, Maharashtra, India, 400001.
>> 
>> -- 
>> - CAS gitter chatroom: https://gitter.im/apereo/cas
>> - CAS mailing list guidelines: 
>> https://apereo.github.io/cas/Mailing-Lists.html
>> - CAS documentation website: https://apereo.github.io/cas
>> - CAS project website: https://github.com/apereo/cas
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "CAS Community" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/a/apereo.org/d/msgid/cas-user/CAD0p8psvuk%2Br_kUnBhM4MP9sK8%2Bm80VFGF5sqRNbzxYUn0Az1A%40mail.gmail.com.
> 
> -- 
> - CAS gitter chatroom: https://gitter.im/apereo/cas
> - CAS mailing list guidelines: https://apereo.github.io/cas/Mailing-Lists.html
> - CAS documentation website: https://apereo.github.io/cas
> - CAS project website: https://github.com/apereo/cas
> --- 
> You received this message because you are subscribed to the Google Groups 
> "CAS Community" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/a/apereo.org/d/msgid/cas-user/9BE363E2-1316-406C-A3EB-D97AA60A3247%40ucdavis.edu.

-- 
- CAS gitter chatroom: https://gitter.im/apereo/cas
- CAS mailing list guidelines: https://apereo.github.io/cas/Mailing-Lists.html
- CAS documentation website: https://apereo.github.io/cas
- CAS project website: https://github.com/apereo/cas
--- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/0B015CD4-0BCE-413E-9EBF-E45E12D28DF7%40ucdavis.edu.

Reply via email to