glenn       01/02/03 16:49:41

  Modified:    catalina/src/share/org/apache/catalina/core
                        ApplicationContext.java
  Log:
  Implement SecurityManager
  
  Revision  Changes    Path
  1.14      +92 -25    
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationContext.java
  
  Index: ApplicationContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationContext.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ApplicationContext.java   2001/01/25 19:09:15     1.13
  +++ ApplicationContext.java   2001/02/04 00:49:41     1.14
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationContext.java,v
 1.13 2001/01/25 19:09:15 remm Exp $
  - * $Revision: 1.13 $
  - * $Date: 2001/01/25 19:09:15 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationContext.java,v
 1.14 2001/02/04 00:49:41 glenn Exp $
  + * $Revision: 1.14 $
  + * $Date: 2001/02/04 00:49:41 $
    *
    * ====================================================================
    *
  @@ -69,6 +69,10 @@
   import java.io.File;
   import java.net.MalformedURLException;
   import java.net.URL;
  +import java.security.AccessController;
  +import java.security.PrivilegedAction;
  +import java.security.PrivilegedExceptionAction;
  +import java.security.PrivilegedActionException;
   import java.util.ArrayList;
   import java.util.Arrays;
   import java.util.Enumeration;
  @@ -107,12 +111,60 @@
    *
    * @author Craig R. McClanahan
    * @author Remy Maucherat
  - * @version $Revision: 1.13 $ $Date: 2001/01/25 19:09:15 $
  + * @version $Revision: 1.14 $ $Date: 2001/02/04 00:49:41 $
    */
   
   public final class ApplicationContext
       implements ServletContext {
   
  +    protected class PrivilegedGetRequestDispatcher implements PrivilegedAction {
  +        private String contextPath;
  +        private String relativeURI;
  +        private String queryString;                                       
  +
  +        PrivilegedGetRequestDispatcher(String contextPath, String relativeURI,
  +         String queryString)
  +        {                                    
  +            this.contextPath = contextPath;
  +            this.relativeURI = relativeURI;
  +            this.queryString = queryString;
  +        }                                 
  +                                          
  +        public Object run() {
  +         HttpRequestBase request = new HttpRequestBase();
  +            request.setContext(context);       
  +            request.setContextPath(context.getPath());
  +            request.setRequestURI(contextPath + relativeURI);
  +            request.setQueryString(queryString);
  +            Wrapper wrapper = (Wrapper) context.map(request, true);
  +            if (wrapper == null)               
  +                return (null);  
  +
  +            // Construct a RequestDispatcher to process this request
  +            HttpServletRequest hrequest = (HttpServletRequest) request.getRequest();
  +            return (RequestDispatcher) new ApplicationDispatcher(wrapper,
  +                hrequest.getServletPath(),     
  +                hrequest.getPathInfo(),   
  +                hrequest.getQueryString(),
  +                null);
  +        }                                    
  +    }
  +
  +    protected class PrivilegedGetResource implements PrivilegedExceptionAction {
  +     private String path;
  +     private DirContext resources;
  +
  +        PrivilegedGetResource(String path, DirContext resources)
  +        {
  +            this.path = path;
  +            this.resources = resources;
  +        }
  +         
  +        public Object run() throws Exception {
  +            return new URL("jndi", null, 0, path,
  +                   new DirContextURLStreamHandler(resources));
  +        }
  +    }
   
       // ----------------------------------------------------------- Constructors
   
  @@ -128,7 +180,6 @@
        super();
        this.context = context;
           this.basePath = basePath;
  -
       }
   
   
  @@ -397,25 +448,31 @@
               relativeURI = path.substring(0, question);
               queryString = path.substring(question + 1);
           }
  -        HttpRequestBase request = new HttpRequestBase();
  -        request.setContext(context);
  -        request.setContextPath(context.getPath());
  -        request.setRequestURI(contextPath + relativeURI);
  -        request.setQueryString(queryString);
  -        Wrapper wrapper = (Wrapper) context.map(request, true);
  -        if (wrapper == null)
  -            return (null);
  +     if( System.getSecurityManager() != null ) {
  +         PrivilegedGetRequestDispatcher dp =
  +             new PrivilegedGetRequestDispatcher(contextPath,
  +                     relativeURI,queryString);
  +         return (RequestDispatcher)AccessController.doPrivileged(dp);
  +     }
   
  -        // Construct a RequestDispatcher to process this request
  -        HttpServletRequest hrequest =
  -            (HttpServletRequest) request.getRequest();
  -        ApplicationDispatcher dispatcher =
  -          new ApplicationDispatcher(wrapper,
  -                                    hrequest.getServletPath(),
  -                                    hrequest.getPathInfo(),
  -                                    hrequest.getQueryString(),
  -                                    null);
  -        return ((RequestDispatcher) dispatcher);
  +     // The remaining code is duplicated in PrivilegedGetRequestDispatcher,
  +     // we need to make sure they stay in sync
  +     HttpRequestBase request = new HttpRequestBase();
  +     request.setContext(context);   
  +     request.setContextPath(context.getPath());
  +     request.setRequestURI(contextPath + relativeURI);
  +     request.setQueryString(queryString);
  +     Wrapper wrapper = (Wrapper) context.map(request, true);
  +     if (wrapper == null)           
  +         return (null);  
  +
  +     // Construct a RequestDispatcher to process this request
  +     HttpServletRequest hrequest = (HttpServletRequest) request.getRequest();
  +        return (RequestDispatcher) new ApplicationDispatcher(wrapper,
  +                        hrequest.getServletPath(), 
  +                        hrequest.getPathInfo(),    
  +                        hrequest.getQueryString(),
  +                        null);                   
   
       }
   
  @@ -432,14 +489,24 @@
        *  in the correct form
        */
       public URL getResource(String path) throws MalformedURLException {
  -
        DirContext resources = context.getResources();
        if (resources != null) {
               try {
                   resources.lookup(path);
  -                return new URL("jndi", null, 0, path, 
  +             if( System.getSecurityManager() != null ) {
  +                 try {
  +                     PrivilegedGetResource dp =
  +                         new PrivilegedGetResource(path,resources);
  +                     return (URL)AccessController.doPrivileged(dp);
  +                 } catch( PrivilegedActionException pe) {
  +                     throw pe.getException();
  +                 }
  +             } else {
  +                    return new URL("jndi", null, 0, path, 
                                  new DirContextURLStreamHandler(resources));
  +             }
               } catch (Exception e) {
  +             e.printStackTrace();
               }
           }
           return (null);
  
  
  

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

Reply via email to