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: [email protected]
For additional commands, e-mail: [email protected]