jfarcand    2004/11/22 08:35:18

  Modified:    catalina/src/share/org/apache/catalina/connector
                        CoyoteInputStream.java InputBuffer.java
                        OutputBuffer.java RequestFacade.java Response.java
                        ResponseFacade.java
               catalina/src/share/org/apache/catalina/core
                        ApplicationContextFacade.java
                        ApplicationDispatcher.java
                        ApplicationFilterChain.java StandardWrapper.java
               catalina/src/share/org/apache/catalina/security
                        SecurityUtil.java
               catalina/src/share/org/apache/catalina/session
                        PersistentManagerBase.java StandardManager.java
                        StandardSession.java
  Log:
  Port patch from Tomcat 5.0: When the package protection is not used, do not 
create the doPrivileged objects .
  
  Revision  Changes    Path
  1.2       +6 -5      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/CoyoteInputStream.java
  
  Index: CoyoteInputStream.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/CoyoteInputStream.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CoyoteInputStream.java    23 Jun 2004 08:24:57 -0000      1.1
  +++ CoyoteInputStream.java    22 Nov 2004 16:35:17 -0000      1.2
  @@ -24,6 +24,7 @@
   
   import javax.servlet.ServletInputStream;
   
  +import org.apache.catalina.security.SecurityUtil;
   
   /**
    * This class handles reading bytes.
  @@ -65,7 +66,7 @@
   
       public int read()
           throws IOException {    
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               
               try{
                   Integer result = 
  @@ -94,7 +95,7 @@
   
       public int available() throws IOException {
           
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               try{
                   Integer result = 
                       (Integer)AccessController.doPrivileged(
  @@ -122,7 +123,7 @@
   
       public int read(final byte[] b) throws IOException {
           
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               try{
                   Integer result = 
                       (Integer)AccessController.doPrivileged(
  @@ -153,7 +154,7 @@
       public int read(final byte[] b, final int off, final int len)
           throws IOException {
               
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               try{
                   Integer result = 
                       (Integer)AccessController.doPrivileged(
  @@ -193,7 +194,7 @@
        */
       public void close() throws IOException {
           
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               try{
                   AccessController.doPrivileged(
                       new PrivilegedExceptionAction(){
  
  
  
  1.4       +2 -1      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/InputBuffer.java
  
  Index: InputBuffer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/InputBuffer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InputBuffer.java  29 Aug 2004 16:46:09 -0000      1.3
  +++ InputBuffer.java  22 Nov 2004 16:35:17 -0000      1.4
  @@ -23,6 +23,7 @@
   import java.security.PrivilegedExceptionAction;
   import java.util.HashMap;
   
  +import org.apache.catalina.security.SecurityUtil;
   import org.apache.coyote.Request;
   import org.apache.tomcat.util.buf.B2CConverter;
   import org.apache.tomcat.util.buf.ByteChunk;
  @@ -465,7 +466,7 @@
               enc = DEFAULT_ENCODING;
           conv = (B2CConverter) encoders.get(enc);
           if (conv == null) {
  -            if (System.getSecurityManager() != null){
  +            if (SecurityUtil.isPackageProtectionEnabled()){
                   try{
                       conv = (B2CConverter)AccessController.doPrivileged(
                               new PrivilegedExceptionAction(){
  
  
  
  1.4       +2 -1      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/OutputBuffer.java
  
  Index: OutputBuffer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/OutputBuffer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- OutputBuffer.java 25 Jun 2004 23:56:25 -0000      1.3
  +++ OutputBuffer.java 22 Nov 2004 16:35:18 -0000      1.4
  @@ -24,6 +24,7 @@
   import java.security.PrivilegedExceptionAction;
   import java.util.HashMap;
   
  +import org.apache.catalina.security.SecurityUtil;
   import org.apache.coyote.ActionCode;
   import org.apache.coyote.Response;
   import org.apache.tomcat.util.buf.ByteChunk;
  @@ -558,7 +559,7 @@
           conv = (C2BConverter) encoders.get(enc);
           if (conv == null) {
               
  -            if (System.getSecurityManager() != null){
  +            if (SecurityUtil.isPackageProtectionEnabled()){
                   try{
                       conv = (C2BConverter)AccessController.doPrivileged(
                               new PrivilegedExceptionAction(){
  
  
  
  1.8       +6 -4      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/RequestFacade.java
  
  Index: RequestFacade.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/RequestFacade.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- RequestFacade.java        1 Nov 2004 22:38:44 -0000       1.7
  +++ RequestFacade.java        22 Nov 2004 16:35:18 -0000      1.8
  @@ -34,6 +34,8 @@
   import org.apache.catalina.util.StringManager;
   
   
  +import org.apache.catalina.security.SecurityUtil;
  +
   /**
    * Facade class that wraps a Coyote request object.  
    * All methods are delegated to the wrapped request.
  @@ -372,7 +374,7 @@
            * Clone the returned array only if there is a security manager
            * in place, so that performance won't suffer in the nonsecure case
            */
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               ret = (String[]) AccessController.doPrivileged(
                   new GetParameterValuePrivilegedAction(name));
               if (ret != null) {
  @@ -595,7 +597,7 @@
            * Clone the returned array only if there is a security manager
            * in place, so that performance won't suffer in the nonsecure case
            */
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               ret = (Cookie[])AccessController.doPrivileged(
                   new GetCookiesPrivilegedAction());
               if (ret != null) {
  @@ -813,7 +815,7 @@
                               sm.getString("requestFacade.nullRequest"));
           }
   
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               return (HttpSession)AccessController.
                   doPrivileged(new GetSessionPrivilegedAction(create));
           } else {
  
  
  
  1.10      +5 -4      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/Response.java
  
  Index: Response.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/Response.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- Response.java     16 Sep 2004 15:28:29 -0000      1.9
  +++ Response.java     22 Nov 2004 16:35:18 -0000      1.10
  @@ -44,6 +44,7 @@
   import org.apache.catalina.util.CharsetMapper;
   import org.apache.catalina.util.DateTool;
   import org.apache.catalina.util.StringManager;
  +import org.apache.catalina.security.SecurityUtil;
   import org.apache.tomcat.util.buf.CharChunk;
   import org.apache.tomcat.util.buf.UEncoder;
   import org.apache.tomcat.util.http.FastHttpDateFormat;
  @@ -930,7 +931,7 @@
           cookies.add(cookie);
   
           final StringBuffer sb = new StringBuffer();
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               AccessController.doPrivileged(new PrivilegedAction() {
                   public Object run(){
                       ServerCookie.appendCookieValue
  @@ -1349,7 +1350,7 @@
           if (hreq.isRequestedSessionIdFromCookie())
               return (false);
           
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return ((Boolean)
                   AccessController.doPrivileged(new PrivilegedAction() {
   
  @@ -1452,7 +1453,7 @@
                       
                       String encodedURI = null;
                       final String frelativePath = relativePath;
  -                    if (System.getSecurityManager() != null ){
  +                    if (SecurityUtil.isPackageProtectionEnabled() ){
                           try{
                               encodedURI = 
(String)AccessController.doPrivileged( 
                                   new PrivilegedExceptionAction(){             
                   
  
  
  
  1.9       +4 -3      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java
  
  Index: ResponseFacade.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ResponseFacade.java       1 Nov 2004 23:34:04 -0000       1.8
  +++ ResponseFacade.java       22 Nov 2004 16:35:18 -0000      1.9
  @@ -30,6 +30,7 @@
   import javax.servlet.http.HttpServletResponse;
   
   import org.apache.catalina.util.StringManager;
  +import org.apache.catalina.security.SecurityUtil;
   
   /**
    * Facade class that wraps a Coyote response object. 
  @@ -205,7 +206,7 @@
           if (isCommitted())
               return;
           
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               AccessController.doPrivileged(new 
SetContentTypePrivilegedAction(type));
           } else {
               response.setContentType(type);            
  @@ -243,7 +244,7 @@
               //                (/*sm.getString("responseFacade.finished")*/);
               return;
   
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               try{
                   AccessController.doPrivileged(new 
PrivilegedExceptionAction(){
   
  
  
  
  1.13      +32 -25    
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationContextFacade.java
  
  Index: ApplicationContextFacade.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationContextFacade.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ApplicationContextFacade.java     1 Oct 2004 01:18:12 -0000       1.12
  +++ ApplicationContextFacade.java     22 Nov 2004 16:35:18 -0000      1.13
  @@ -35,6 +35,8 @@
   import javax.servlet.ServletContext;
   import javax.servlet.ServletException;
   
  +import org.apache.catalina.security.SecurityUtil;
  +
   
   /**
    * Facade object which masks the internal <code>ApplicationContext</code>
  @@ -118,7 +120,7 @@
   
       public ServletContext getContext(String uripath) {
           ServletContext theContext = null;
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               theContext = (ServletContext)
                   doPrivileged("getContext", new Object[]{uripath});
           } else {
  @@ -143,7 +145,7 @@
   
   
       public String getMimeType(String file) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (String)doPrivileged("getMimeType", new Object[]{file});
           } else {
               return context.getMimeType(file);
  @@ -152,7 +154,7 @@
   
   
       public Set getResourcePaths(String path) {
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               return (Set)doPrivileged("getResourcePaths", new Object[]{path});
           } else {
               return context.getResourcePaths(path);
  @@ -179,7 +181,7 @@
   
   
       public InputStream getResourceAsStream(String path) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (InputStream) doPrivileged("getResourceAsStream", 
                                                 new Object[]{path});
           } else {
  @@ -189,7 +191,7 @@
   
   
       public RequestDispatcher getRequestDispatcher(final String path) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (RequestDispatcher) doPrivileged("getRequestDispatcher", 
                                                       new Object[]{path});
           } else {
  @@ -199,7 +201,7 @@
   
   
       public RequestDispatcher getNamedDispatcher(String name) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (RequestDispatcher) doPrivileged("getNamedDispatcher", 
                                                       new Object[]{name});
           } else {
  @@ -210,7 +212,7 @@
   
       public Servlet getServlet(String name)
           throws ServletException {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               try {
                   return (Servlet) invokeMethod(context, "getServlet", 
                                                 new Object[]{name});
  @@ -227,7 +229,7 @@
   
   
       public Enumeration getServlets() {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (Enumeration) doPrivileged("getServlets", null);
           } else {
               return context.getServlets();
  @@ -236,7 +238,7 @@
   
   
       public Enumeration getServletNames() {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (Enumeration) doPrivileged("getServletNames", null);
           } else {
               return context.getServletNames();
  @@ -245,7 +247,7 @@
   
   
       public void log(String msg) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               doPrivileged("log", new Object[]{msg} );
           } else {
               context.log(msg);
  @@ -254,7 +256,7 @@
   
   
       public void log(Exception exception, String msg) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               doPrivileged("log", new Class[]{Exception.class, String.class}, 
                            new Object[]{exception,msg});
           } else {
  @@ -264,7 +266,7 @@
   
   
       public void log(String message, Throwable throwable) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               doPrivileged("log", new Class[]{String.class, Throwable.class}, 
                            new Object[]{message, throwable});
           } else {
  @@ -274,7 +276,7 @@
   
   
       public String getRealPath(String path) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (String) doPrivileged("getRealPath", new Object[]{path});
           } else {
               return context.getRealPath(path);
  @@ -283,7 +285,7 @@
   
   
       public String getServerInfo() {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (String) doPrivileged("getServerInfo", null);
           } else {
               return context.getServerInfo();
  @@ -292,7 +294,7 @@
   
   
       public String getInitParameter(String name) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (String) doPrivileged("getInitParameter", 
                                            new Object[]{name});
           } else {
  @@ -302,7 +304,7 @@
   
   
       public Enumeration getInitParameterNames() {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (Enumeration) doPrivileged("getInitParameterNames", null);
           } else {
               return context.getInitParameterNames();
  @@ -311,7 +313,7 @@
   
   
       public Object getAttribute(String name) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return doPrivileged("getAttribute", new Object[]{name});
           } else {
               return context.getAttribute(name);
  @@ -320,7 +322,7 @@
   
   
       public Enumeration getAttributeNames() {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (Enumeration) doPrivileged("getAttributeNames", null);
           } else {
               return context.getAttributeNames();
  @@ -329,7 +331,7 @@
   
   
       public void setAttribute(String name, Object object) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               doPrivileged("setAttribute", new Object[]{name,object});
           } else {
               context.setAttribute(name, object);
  @@ -338,7 +340,7 @@
   
   
       public void removeAttribute(String name) {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               doPrivileged("removeAttribute", new Object[]{name});
           } else {
               context.removeAttribute(name);
  @@ -347,7 +349,7 @@
   
   
       public String getServletContextName() {
  -        if (System.getSecurityManager() != null) {
  +        if (SecurityUtil.isPackageProtectionEnabled()) {
               return (String) doPrivileged("getServletContextName", null);
           } else {
               return context.getServletContextName();
  @@ -401,7 +403,7 @@
        */
       private Object invokeMethod(ApplicationContext appContext,
                                   final String methodName, 
  -                                final Object[] params) 
  +                                Object[] params) 
           throws Throwable{
   
           try{
  @@ -416,6 +418,8 @@
           } catch (Exception ex){
               handleException(ex, methodName);
               return null;
  +        } finally {
  +            params = null;
           }
       }
       
  @@ -428,7 +432,7 @@
        */    
       private Object doPrivileged(final String methodName, 
                                   final Class[] clazz,
  -                                final Object[] params){
  +                                Object[] params){
   
           try{
               Method method = context.getClass()
  @@ -441,6 +445,8 @@
                   throw new RuntimeException(t.getMessage());
               }
               return null;
  +        } finally {
  +            params = null;
           }
       }
       
  @@ -459,7 +465,7 @@
                      IllegalAccessException,
                      InvocationTargetException {
                                        
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
              return AccessController.doPrivileged(new 
PrivilegedExceptionAction(){
                   public Object run() throws IllegalAccessException, 
InvocationTargetException{
                       return method.invoke(context,  params);
  @@ -472,6 +478,7 @@
   
       
       /**
  +     *
        * Throw the real exception.
        * @param ex The current exception
        */
  
  
  
  1.41      +2 -2      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java
  
  Index: ApplicationDispatcher.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- ApplicationDispatcher.java        28 Sep 2004 13:32:27 -0000      1.40
  +++ ApplicationDispatcher.java        22 Nov 2004 16:35:18 -0000      1.41
  @@ -50,7 +50,7 @@
   import org.apache.commons.logging.LogFactory;
   import org.apache.tomcat.util.IntrospectionUtils;
   
  -
  +import org.apache.catalina.security.SecurityUtil;
   /**
    * Standard implementation of <code>RequestDispatcher</code> that allows a
    * request to be forwarded to a different resource to create the ultimate
  
  
  
  1.13      +23 -8     
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java
  
  Index: ApplicationFilterChain.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ApplicationFilterChain.java       1 Oct 2004 01:18:12 -0000       1.12
  +++ ApplicationFilterChain.java       22 Nov 2004 16:35:18 -0000      1.13
  @@ -111,6 +111,22 @@
        */
       private InstanceSupport support = null;
   
  +    
  +    /**
  +     * Static class array used when the SecurityManager is turned on and 
  +     * <code>doFilter</code is invoked.
  +     */
  +    private static Class[] classType = new Class[]{ServletRequest.class, 
  +                                                   ServletResponse.class,
  +                                                   FilterChain.class};
  +                                                   
  +    /**
  +     * Static class array used when the SecurityManager is turned on and 
  +     * <code>service</code is invoked.
  +     */                                                 
  +    private static Class[] classTypeUsedInService = new Class[]{
  +                                                         
ServletRequest.class,
  +                                                         
ServletResponse.class};
   
       // ---------------------------------------------------- FilterChain 
Methods
   
  @@ -176,12 +192,12 @@
                       final ServletResponse res = response;
                       Principal principal = 
                           ((HttpServletRequest) req).getUserPrincipal();
  -                    Class[] classType = new Class[]{ServletRequest.class, 
  -                                                    ServletResponse.class,
  -                                                    FilterChain.class};
  +
                       Object[] args = new Object[]{req, res, this};
                       SecurityUtil.doAsPrivilege
                           ("doFilter", filter, classType, args);
  +                    
  +                    args = null;
                   } else {  
                       filter.doFilter(request, response, this);
                   }
  @@ -225,14 +241,13 @@
                       final ServletResponse res = response;
                       Principal principal = 
                           ((HttpServletRequest) req).getUserPrincipal();
  -                    Class[] classType = new Class[]{ServletRequest.class, 
  -                                                     ServletResponse.class};
                       Object[] args = new Object[]{req, res};
                       SecurityUtil.doAsPrivilege("service",
                                                  servlet,
  -                                               classType, 
  +                                               classTypeUsedInService, 
                                                  args,
  -                                               principal);                   
                                
  +                                               principal);   
  +                    args = null;
                   } else {  
                       servlet.service((HttpServletRequest) request,
                                       (HttpServletResponse) response);
  
  
  
  1.56      +21 -7     
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
  
  Index: StandardWrapper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- StandardWrapper.java      28 Oct 2004 16:42:37 -0000      1.55
  +++ StandardWrapper.java      22 Nov 2004 16:35:18 -0000      1.56
  @@ -243,7 +243,21 @@
       private StandardWrapperValve swValve;
       private long loadTime=0;
       private int classLoadTime=0;
  -
  +    
  +    /**
  +     * Static class array used when the SecurityManager is turned on and 
  +     * <code>Servlet.init</code> is invoked.
  +     */
  +    private static Class[] classType = new Class[]{ServletConfig.class};
  +    
  +    
  +    /**
  +     * Static class array used when the SecurityManager is turned on and 
  +     * <code>Servlet.service</code>  is invoked.
  +     */                                                 
  +    private static Class[] classTypeUsedInService = new Class[]{
  +                                                         
ServletRequest.class,
  +                                                         
ServletResponse.class};
       // ------------------------------------------------------------- 
Properties
   
   
  @@ -960,7 +974,7 @@
               // Load the specified servlet class from the appropriate class 
loader
               Class classClass = null;
               try {
  -                if (System.getSecurityManager() != null){
  +                if (SecurityUtil.isPackageProtectionEnabled()){
                       final ClassLoader fclassLoader = classLoader;
                       final String factualClass = actualClass;
                       try{
  @@ -1043,12 +1057,13 @@
                                                     servlet);
   
                   if( System.getSecurityManager() != null) {
  -                    Class[] classType = new Class[]{ServletConfig.class};
  +
                       Object[] args = new Object[]{((ServletConfig)facade)};
                       SecurityUtil.doAsPrivilege("init",
                                                  servlet,
                                                  classType,
                                                  args);
  +                    args = null;
                   } else {
                       servlet.init(facade);
                   }
  @@ -1062,13 +1077,12 @@
                       DummyResponse res = new DummyResponse();
   
                       if( System.getSecurityManager() != null) {
  -                        Class[] classType = new Class[]{ServletRequest.class,
  -                                                        
ServletResponse.class};
                           Object[] args = new Object[]{req, res};
                           SecurityUtil.doAsPrivilege("service",
                                                      servlet,
  -                                                   classType,
  +                                                   classTypeUsedInService,
                                                      args);
  +                        args = null;
                       } else {
                           servlet.service(req, res);
                       }
  
  
  
  1.15      +18 -0     
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/security/SecurityUtil.java
  
  Index: SecurityUtil.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/security/SecurityUtil.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SecurityUtil.java 26 Oct 2004 02:02:37 -0000      1.14
  +++ SecurityUtil.java 22 Nov 2004 16:35:18 -0000      1.15
  @@ -68,6 +68,10 @@
       
       private static String PACKAGE = "org.apache.catalina.security";
       
  +    private static boolean packageDefinitionEnabled =  
  +         (System.getProperty("package.definition") == null && 
  +           System.getProperty("package.access")  == null) ? false : true;
  +    
       /**
        * The string resources for this package.
        */
  @@ -363,4 +367,18 @@
       public static void remove(Object cachedObject){
           objectCache.remove(cachedObject);
       }
  +    
  +    
  +    /**
  +     * Return the <code>SecurityManager</code> only if Security is enabled 
AND
  +     * package protection mechanism is enabled.
  +     */
  +    public static boolean isPackageProtectionEnabled(){
  +        if (packageDefinitionEnabled && System.getSecurityManager() !=  
null){
  +            return true;
  +        }
  +        return false;
  +    }
  +    
  +    
   }
  
  
  
  1.25      +11 -9     
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java
  
  Index: PersistentManagerBase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- PersistentManagerBase.java        22 Nov 2004 14:50:23 -0000      1.24
  +++ PersistentManagerBase.java        22 Nov 2004 16:35:18 -0000      1.25
  @@ -34,7 +34,7 @@
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   
  -
  +import org.apache.catalina.security.SecurityUtil;
   /**
    * Extends the <b>ManagerBase</b> class to implement most of the
    * functionality required by a Manager which supports any kind of
  @@ -512,7 +512,7 @@
               return;
   
           try {     
  -            if (System.getSecurityManager() != null){
  +            if (SecurityUtil.isPackageProtectionEnabled()){
                   try{
                       AccessController.doPrivileged(new 
PrivilegedStoreClear());
                   }catch(PrivilegedActionException ex){
  @@ -628,9 +628,10 @@
   
           String[] ids = null;
           try {
  -            if (System.getSecurityManager() != null){
  +            if (SecurityUtil.isPackageProtectionEnabled()){
                   try{
  -                    ids = (String[])AccessController.doPrivileged(new 
PrivilegedStoreKeys());
  +                    ids = (String[])
  +                        AccessController.doPrivileged(new 
PrivilegedStoreKeys());
                   }catch(PrivilegedActionException ex){
                       Exception exception = ex.getException();
                       log.error("Exception in the Store during load: "
  @@ -686,7 +687,7 @@
        */    
       protected void removeSession(String id){
           try {
  -            if (System.getSecurityManager() != null){
  +            if (SecurityUtil.isPackageProtectionEnabled()){
                   try{
                       AccessController.doPrivileged(new 
PrivilegedStoreRemove(id));
                   }catch(PrivilegedActionException ex){
  @@ -754,9 +755,10 @@
   
           Session session = null;
           try {
  -            if (System.getSecurityManager() != null){
  +            if (SecurityUtil.isPackageProtectionEnabled()){
                   try{
  -                    session = (Session) AccessController.doPrivileged(new 
PrivilegedStoreLoad(id));
  +                    session = (Session) 
  +                      AccessController.doPrivileged(new 
PrivilegedStoreLoad(id));
                   }catch(PrivilegedActionException ex){
                       Exception exception = ex.getException();
                       log.error("Exception in the Store during swapIn: "
  @@ -835,7 +837,7 @@
           }
   
           try {
  -            if (System.getSecurityManager() != null){
  +            if (SecurityUtil.isPackageProtectionEnabled()){
                   try{
                       AccessController.doPrivileged(new 
PrivilegedStoreSave(session));
                   }catch(PrivilegedActionException ex){
  
  
  
  1.27      +4 -4      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- StandardManager.java      22 Nov 2004 14:50:23 -0000      1.26
  +++ StandardManager.java      22 Nov 2004 16:35:18 -0000      1.27
  @@ -45,7 +45,7 @@
   import org.apache.catalina.util.CustomObjectInputStream;
   import org.apache.catalina.util.LifecycleSupport;
   
  -
  +import org.apache.catalina.security.SecurityUtil;
   /**
    * Standard implementation of the <b>Manager</b> interface that provides
    * simple session persistence across restarts of this component (such as
  @@ -302,7 +302,7 @@
        * @exception IOException if an input/output error occurs
        */
       public void load() throws ClassNotFoundException, IOException {
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               try{
                   AccessController.doPrivileged( new PrivilegedDoLoad() );
               } catch (PrivilegedActionException ex){
  @@ -446,7 +446,7 @@
        * @exception IOException if an input/output error occurs
        */
       public void unload() throws IOException {
  -        if (System.getSecurityManager() != null){
  +        if (SecurityUtil.isPackageProtectionEnabled()){
               try{
                   AccessController.doPrivileged( new PrivilegedDoUnload() );
               } catch (PrivilegedActionException ex){
  
  
  
  1.49      +3 -3      
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java
  
  Index: StandardSession.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- StandardSession.java      7 Sep 2004 20:57:02 -0000       1.48
  +++ StandardSession.java      22 Nov 2004 16:35:18 -0000      1.49
  @@ -52,7 +52,7 @@
   import org.apache.catalina.util.Enumerator;
   import org.apache.catalina.util.StringManager;
   
  -
  +import org.apache.catalina.security.SecurityUtil;
   /**
    * Standard implementation of the <b>Session</b> interface.  This object is
    * serializable, so that it can be stored in persistent storage or 
transferred
  @@ -518,7 +518,7 @@
       public HttpSession getSession() {
   
           if (facade == null){
  -            if (System.getSecurityManager() != null){
  +            if (SecurityUtil.isPackageProtectionEnabled()){
                   final StandardSession fsession = this;
                   facade = 
(StandardSessionFacade)AccessController.doPrivileged(new PrivilegedAction(){
                       public Object run(){
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to