Author: remm Date: Fri Nov 4 23:09:45 2016 New Revision: 1768123 URL: http://svn.apache.org/viewvc?rev=1768123&view=rev Log: 60202: Add an available flag to realms, to indicate the state, or the realm backend. Update lockout realm to only register auth failures if the realm is available.
Modified: tomcat/trunk/java/org/apache/catalina/Realm.java tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java tomcat/trunk/java/org/apache/catalina/realm/DataSourceRealm.java tomcat/trunk/java/org/apache/catalina/realm/JDBCRealm.java tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java tomcat/trunk/java/org/apache/catalina/realm/LockOutRealm.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/Realm.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Realm.java?rev=1768123&r1=1768122&r2=1768123&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/Realm.java (original) +++ tomcat/trunk/java/org/apache/catalina/Realm.java Fri Nov 4 23:09:45 2016 @@ -231,4 +231,13 @@ public interface Realm { * @return principal roles */ public String[] getRoles(Principal principal); + + + /** + * Return the availability of the realm for authentication. + * @return <code>true</code> if the realm is able to perform authentication + */ + default public boolean isAvailable() { + return true; + } } Modified: tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java?rev=1768123&r1=1768122&r2=1768123&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java (original) +++ tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java Fri Nov 4 23:09:45 2016 @@ -418,4 +418,15 @@ public class CombinedRealm extends Realm throw uoe; } + + @Override + public boolean isAvailable() { + for (Realm realm : realms) { + if (!realm.isAvailable()) { + return false; + } + } + return true; + } + } Modified: tomcat/trunk/java/org/apache/catalina/realm/DataSourceRealm.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/DataSourceRealm.java?rev=1768123&r1=1768122&r2=1768123&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/realm/DataSourceRealm.java (original) +++ tomcat/trunk/java/org/apache/catalina/realm/DataSourceRealm.java Fri Nov 4 23:09:45 2016 @@ -107,6 +107,12 @@ public class DataSourceRealm extends Rea protected String userTable = null; + /** + * Last connection attempt. + */ + private volatile boolean connectionSuccess = true; + + // ------------------------------------------------------------- Properties @@ -270,6 +276,11 @@ public class DataSourceRealm extends Rea } + @Override + public boolean isAvailable() { + return connectionSuccess; + } + // -------------------------------------------------------- Package Methods @@ -378,8 +389,11 @@ public class DataSourceRealm extends Rea context = getServer().getGlobalNamingContext(); } DataSource dataSource = (DataSource)context.lookup(dataSourceName); - return dataSource.getConnection(); + Connection connection = dataSource.getConnection(); + connectionSuccess = true; + return connection; } catch (Exception e) { + connectionSuccess = false; // Log the problem for posterity containerLog.error(sm.getString("dataSourceRealm.exception"), e); } Modified: tomcat/trunk/java/org/apache/catalina/realm/JDBCRealm.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/JDBCRealm.java?rev=1768123&r1=1768122&r2=1768123&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/realm/JDBCRealm.java (original) +++ tomcat/trunk/java/org/apache/catalina/realm/JDBCRealm.java Fri Nov 4 23:09:45 2016 @@ -414,6 +414,12 @@ public class JDBCRealm } + @Override + public boolean isAvailable() { + return (dbConnection != null); + } + + /** * Close the specified database connection. * Modified: tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java?rev=1768123&r1=1768122&r2=1768123&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java (original) +++ tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java Fri Nov 4 23:09:45 2016 @@ -2379,6 +2379,12 @@ public class JNDIRealm extends RealmBase } + @Override + public boolean isAvailable() { + // Simple best effort check + return (context != null); + } + private DirContext createDirContext(Hashtable<String, String> env) throws NamingException { if (useStartTls) { return createTlsDirContext(env); Modified: tomcat/trunk/java/org/apache/catalina/realm/LockOutRealm.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/LockOutRealm.java?rev=1768123&r1=1768122&r2=1768123&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/realm/LockOutRealm.java (original) +++ tomcat/trunk/java/org/apache/catalina/realm/LockOutRealm.java Fri Nov 4 23:09:45 2016 @@ -212,7 +212,7 @@ public class LockOutRealm extends Combin */ private Principal filterLockedAccounts(String username, Principal authenticatedUser) { // Register all failed authentications - if (authenticatedUser == null) { + if (authenticatedUser == null && isAvailable()) { registerAuthFailure(username); } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1768123&r1=1768122&r2=1768123&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Fri Nov 4 23:09:45 2016 @@ -45,6 +45,15 @@ issues do not "pop up" wrt. others). --> <section name="Tomcat 9.0.0.M13" rtext="in development"> + <subsection name="Catalina"> + <changelog> + <update> + <bug>60202</bug>: Add an available flag to realms, to indicate the + state, or the realm backend. Update lockout realm to only register + auth failures if the realm is available. (remm) + </update> + </changelog> + </subsection> <subsection name="Coyote"> <changelog> <fix> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org