craigmcc 02/04/08 10:46:08 Modified: catalina/src/share/org/apache/catalina/servlets LocalStrings.properties ManagerServlet.java webapps/manager manager.xml webapps/manager/WEB-INF web.xml Log: Implement a lookup mechanism to enumerate the security roles (and corresponding descriptions) defined in the user database. This will be useful, for example, in deployment tools that wish to create <security-role-ref> elements in the web.xml file that link role names used in the web application to those that are actually defined in the container. Revision Changes Path 1.15 +3 -0 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/LocalStrings.properties Index: LocalStrings.properties =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/LocalStrings.properties,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- LocalStrings.properties 12 Mar 2002 21:14:15 -0000 1.14 +++ LocalStrings.properties 8 Apr 2002 17:46:08 -0000 1.15 @@ -34,6 +34,7 @@ managerServlet.removed=OK - Removed application at context path {0} managerServlet.resourcesAll=OK - Listed global resources of all types managerServlet.resourcesType=OK - Listed global resources of type {0} +managerServlet.rolesList=OK - Listed security roles managerServlet.sessiondefaultmax=Default maximum session inactive interval {0} minutes managerServlet.sessiontimeout={0} minutes:{1} sessions managerServlet.sessions=OK - Session information for application at context path {0} @@ -42,6 +43,8 @@ managerServlet.stopped=OK - Stopped application at context path {0} managerServlet.undeployed=OK - Undeployed application at context path {0} managerServlet.unknownCommand=FAIL - Unknown command {0} +managerServlet.userDatabaseError=FAIL - Cannot resolve user database reference +managerServlet.userDatabaseMissing=FAIL - No user database is available webdavservlet.jaxpfailed=JAXP initialization failed directory.filename=Filename directory.lastModified=Last Modified 1.19 +63 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java Index: ManagerServlet.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- ManagerServlet.java 13 Mar 2002 01:26:49 -0000 1.18 +++ ManagerServlet.java 8 Apr 2002 17:46:08 -0000 1.19 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v 1.18 2002/03/13 01:26:49 craigmcc Exp $ - * $Revision: 1.18 $ - * $Date: 2002/03/13 01:26:49 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v 1.19 2002/04/08 17:46:08 craigmcc Exp $ + * $Revision: 1.19 $ + * $Date: 2002/04/08 17:46:08 $ * * ==================================================================== * @@ -73,8 +73,11 @@ import java.io.PrintWriter; import java.net.URL; import java.util.Enumeration; +import java.util.Iterator; +import javax.naming.InitialContext; import javax.naming.NameClassPair; import javax.naming.NamingEnumeration; +import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; @@ -88,9 +91,11 @@ import org.apache.catalina.Deployer; import org.apache.catalina.Globals; import org.apache.catalina.Host; +import org.apache.catalina.Role; import org.apache.catalina.Server; import org.apache.catalina.ServerFactory; import org.apache.catalina.Session; +import org.apache.catalina.UserDatabase; import org.apache.catalina.Wrapper; import org.apache.catalina.core.StandardServer; import org.apache.catalina.util.StringManager; @@ -137,6 +142,9 @@ * <li><b>/resources?type=xxxx</b> - Enumerate the available global JNDI * resources, optionally limited to those of the specified type * (fully qualified Java class name), if available.</li> + * <li><b>/roles</b> - Enumerate the available security role names and + * descriptions from the user database connected to the <code>users</code> + * resource reference. * <li><b>/sessions?path=/xxx</b> - List session information about the web * application attached to context path <code>/xxx</code> for this * virtual host.</li> @@ -188,7 +196,7 @@ * </ul> * * @author Craig R. McClanahan - * @version $Revision: 1.18 $ $Date: 2002/03/13 01:26:49 $ + * @version $Revision: 1.19 $ $Date: 2002/04/08 17:46:08 $ */ public class ManagerServlet @@ -327,6 +335,8 @@ remove(writer, path); } else if (command.equals("/resources")) { resources(writer, type); + } else if (command.equals("/roles")) { + roles(writer); } else if (command.equals("/sessions")) { sessions(writer, path); } else if (command.equals("/start")) { @@ -782,6 +792,55 @@ writer.println(sm.getString("managerServlet.exception", t.toString())); } + + } + + + /** + * Render a list of security role names (and corresponding descriptions) + * from the <code>org.apache.catalina.UserDatabase</code> resource that is + * connected to the <code>users</code> resource reference. Typically, this + * will be the global user database, but can be adjusted if you have + * different user databases for different virtual hosts. + * + * @param writer Writer to render to + */ + protected void roles(PrintWriter writer) { + + if (debug >= 1) { + log("roles: List security roles from user database"); + } + + // Look up the UserDatabase instance we should use + UserDatabase database = null; + try { + InitialContext ic = new InitialContext(); + database = (UserDatabase) ic.lookup("java:comp/env/users"); + } catch (NamingException e) { + writer.println(sm.getString("managerServlet.userDatabaseError")); + log("java:comp/env/users", e); + return; + } + if (database == null) { + writer.println(sm.getString("managerServlet.userDatabaseMissing")); + return; + } + + // Enumerate the available roles + writer.println(sm.getString("managerServlet.rolesList")); + Iterator roles = database.getRoles(); + if (roles != null) { + while (roles.hasNext()) { + Role role = (Role) roles.next(); + writer.print(role.getRolename()); + writer.print(':'); + if (role.getDescription() != null) { + writer.print(role.getDescription()); + } + writer.println(); + } + } + } 1.2 +6 -1 jakarta-tomcat-4.0/webapps/manager/manager.xml Index: manager.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/manager/manager.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- manager.xml 27 Oct 2001 22:17:14 -0000 1.1 +++ manager.xml 8 Apr 2002 17:46:08 -0000 1.2 @@ -2,11 +2,16 @@ Context configuration file for the Tomcat Manager Web App - $Id: manager.xml,v 1.1 2001/10/27 22:17:14 craigmcc Exp $ + $Id: manager.xml,v 1.2 2002/04/08 17:46:08 craigmcc Exp $ --> <Context path="/manager" docBase="../server/webapps/manager" debug="0" privileged="true"> + + <!-- Link to the user database we will get roles from --> + <ResourceLink name="users" global="UserDatabase" + type="org.apache.catalina.UserDatabase"/> + </Context> 1.5 +14 -0 jakarta-tomcat-4.0/webapps/manager/WEB-INF/web.xml Index: web.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/manager/WEB-INF/web.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- web.xml 4 Apr 2002 20:30:34 -0000 1.4 +++ web.xml 8 Apr 2002 17:46:08 -0000 1.5 @@ -27,6 +27,20 @@ <url-pattern>/*</url-pattern> </servlet-mapping> + <!-- Define reference to the user database for looking up roles --> + <resource-env-ref> + <description> + Link to the UserDatabase instance from which we request lists of + defined role names. Typically, this will be connected to the global + user database with a ResourceLink element in server.xml or the context + configuration file for the Manager web application. + </description> + <resource-env-ref-name>users</resource-env-ref-name> + <resource-env-ref-type> + org.apache.catalina.UserDatabase + </resource-env-ref-type> + </resource-env-ref> + <!-- Define a Security Constraint on this Application --> <security-constraint> <web-resource-collection>
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>