scheu       2002/06/27 10:22:32

  Modified:    java/src/org/apache/axis/encoding
                        SerializationContextImpl.java
               java/src/org/apache/axis/encoding/ser
                        BaseDeserializerFactory.java
                        BaseSerializerFactory.java
               java/src/org/apache/axis/utils ClassUtils.java
  Log:
  Add doPrivileged calls in ClassUtils for security.
  
  Removed some eaten exceptions.
  
  Revision  Changes    Path
  1.34      +2 -8      
xml-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java
  
  Index: SerializationContextImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- SerializationContextImpl.java     22 Jun 2002 16:40:56 -0000      1.33
  +++ SerializationContextImpl.java     27 Jun 2002 17:22:32 -0000      1.34
  @@ -1092,10 +1092,7 @@
           // Using the serialization factory, create a serializer
           Serializer ser = null;
           if ( serFactory != null ) {
  -            try {
  -                ser = (Serializer) serFactory.getSerializerAs(Constants.AXIS_SAX);
  -            } catch (JAXRPCException e) {
  -            }
  +            ser = (Serializer) serFactory.getSerializerAs(Constants.AXIS_SAX);
           }
           if (ser != null) {
               info = new SerializerInfo();
  @@ -1172,10 +1169,7 @@
           // Using the serialization factory, create a serializer
           Serializer ser = null;
           if ( serFactory != null ) {
  -            try {
  -                ser = (Serializer) serFactory.getSerializerAs(Constants.AXIS_SAX);
  -            } catch (JAXRPCException e) {
  -            }
  +            ser = (Serializer) serFactory.getSerializerAs(Constants.AXIS_SAX);
           }
           if (ser != null) {
               info = new SerializerInfo();
  
  
  
  1.7       +10 -9     
xml-axis/java/src/org/apache/axis/encoding/ser/BaseDeserializerFactory.java
  
  Index: BaseDeserializerFactory.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BaseDeserializerFactory.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BaseDeserializerFactory.java      20 Jun 2002 16:48:18 -0000      1.6
  +++ BaseDeserializerFactory.java      27 Jun 2002 17:22:32 -0000      1.7
  @@ -106,16 +106,17 @@
           Deserializer deser = null;
   
           // Need to add code to check against mechanisms vector.
  +
  +        // Try getting a specialized Deserializer
  +        deser = getSpecialized(mechanismType);
  +        
  +        // Try getting a general purpose Deserializer via constructor
  +        // invocation
  +        if (deser == null) {
  +            deser = getGeneralPurpose(mechanismType);
  +        }
  +        
           try {
  -            // Try getting a specialized Deserializer
  -            deser = getSpecialized(mechanismType);
  -            
  -            // Try getting a general purpose Deserializer via constructor
  -            // invocation
  -            if (deser == null) {
  -                deser = getGeneralPurpose(mechanismType);
  -            }
  -            
               // If not successfull, try newInstance
               if (deser == null) {
                   deser = (Deserializer) deserClass.newInstance();
  
  
  
  1.11      +10 -10    
xml-axis/java/src/org/apache/axis/encoding/ser/BaseSerializerFactory.java
  
  Index: BaseSerializerFactory.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BaseSerializerFactory.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- BaseSerializerFactory.java        20 Jun 2002 16:48:18 -0000      1.10
  +++ BaseSerializerFactory.java        27 Jun 2002 17:22:32 -0000      1.11
  @@ -127,16 +127,16 @@
           }
           ser = null;
   
  -        try {
  -            // Try getting a specialized Serializer
  -            ser = getSpecialized(mechanismType);
  -            
  -            // Try getting a general purpose Serializer via constructor
  -            // invocation
  -            if (ser == null) {
  -                ser = getGeneralPurpose(mechanismType);
  -            }
  -            
  +        // Try getting a specialized Serializer
  +        ser = getSpecialized(mechanismType);
  +        
  +        // Try getting a general purpose Serializer via constructor
  +        // invocation
  +        if (ser == null) {
  +            ser = getGeneralPurpose(mechanismType);
  +        }
  +
  +        try {            
               // If not successfull, try newInstance
               if (ser == null) {
                   ser = (Serializer) serClass.newInstance();
  
  
  
  1.2       +75 -25    xml-axis/java/src/org/apache/axis/utils/ClassUtils.java
  
  Index: ClassUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/ClassUtils.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ClassUtils.java   20 Jun 2002 16:48:19 -0000      1.1
  +++ ClassUtils.java   27 Jun 2002 17:22:32 -0000      1.2
  @@ -54,6 +54,9 @@
    */
   package org.apache.axis.utils;
   
  +import java.security.AccessController;
  +import java.security.PrivilegedAction;
  +
   /**
    * Utility methods for Class Loading.
    *
  @@ -119,10 +122,33 @@
        * @throws ClassNotFoundException if the class is not found
        */
       public static Class forName(
  -            String className, boolean init, ClassLoader loader)
  +            String _className, boolean init, ClassLoader _loader)
               throws ClassNotFoundException {
  +        
  +        // Create final vars for doPrivileged block
  +        final String className = _className;
  +        final ClassLoader loader = _loader;
           try {
  -            return Class.forName(className, true, loader);
  +            // Get the class within a doPrivleged block
  +            Object ret = 
  +                AccessController.doPrivileged(
  +                    new PrivilegedAction() {
  +                        public Object run() {
  +                            try {
  +                                return Class.forName(className, true, loader);
  +                            } catch (Throwable e) {
  +                                return e;
  +                            }
  +                        }
  +                    });
  +            // If the class was located, return it.  Otherwise throw exception
  +            if (ret instanceof Class) {
  +                return (Class) ret;
  +            } else if (ret instanceof ClassNotFoundException) {
  +                throw (ClassNotFoundException) ret;
  +            } else {
  +                throw new ClassNotFoundException(_className);
  +            }
           } catch (ClassNotFoundException cnfe) {
               return loadClass(className);
           }
  @@ -135,31 +161,55 @@
        * @return java class
        * @throws ClassNotFoundException if the class is not found
        */
  -    private static Class loadClass(String className)
  +    private static Class loadClass(String _className)
               throws ClassNotFoundException {
  -        try {
  -            // Check if the class is a registered class then
  -            // use the classloader for that class.
  -            ClassLoader classLoader = getClassLoader(className);
  -            return Class.forName(className, true, classLoader);
  -        } catch (ClassNotFoundException cnfe) {
  -        }
  +        // Create final vars for doPrivileged block
  +        final String className = _className;
   
  -        try {
  -            // Try the context class loader
  -            ClassLoader classLoader =
  -                    Thread.currentThread().getContextClassLoader();
  -            return Class.forName(className, true, classLoader);
  -        } catch (ClassNotFoundException cnfe2) {
  -            try {
  -                // Try the classloader that loaded this class.
  -                ClassLoader classLoader =
  -                        ClassUtils.class.getClassLoader();
  -                return Class.forName(className, true, classLoader);
  -            } catch (ClassNotFoundException cnfe3) {
  -                // Try the default class loader.
  -                return Class.forName(className);
  -            }
  +        // Get the class within a doPrivleged block
  +        Object ret = 
  +            AccessController.doPrivileged(
  +                    new PrivilegedAction() {
  +                        public Object run() {
  +                            try {
  +                                // Check if the class is a registered class then
  +                                // use the classloader for that class.
  +                                ClassLoader classLoader = getClassLoader(className);
  +                                return Class.forName(className, true, classLoader);
  +                            } catch (ClassNotFoundException cnfe) {
  +                            }
  +                            
  +                            try {
  +                                // Try the context class loader
  +                                ClassLoader classLoader =
  +                                    Thread.currentThread().getContextClassLoader();
  +                                return Class.forName(className, true, classLoader);
  +                            } catch (ClassNotFoundException cnfe2) {
  +                                try {
  +                                    // Try the classloader that loaded this class.
  +                                    ClassLoader classLoader =
  +                                        ClassUtils.class.getClassLoader();
  +                                    return Class.forName(className, true, 
classLoader);
  +                                } catch (ClassNotFoundException cnfe3) {
  +                                    // Try the default class loader.
  +                                    try {
  +                                        return Class.forName(className);
  +                                    } catch (Throwable e) {
  +                                        // Still not found, return exception
  +                                        return e;
  +                                    }
  +                                }
  +                            } 
  +                        }
  +                    });
  +
  +        // If the class was located, return it.  Otherwise throw exception
  +        if (ret instanceof Class) {
  +            return (Class) ret;
  +        } else if (ret instanceof ClassNotFoundException) {
  +            throw (ClassNotFoundException) ret;
  +        } else {
  +            throw new ClassNotFoundException(_className);
           }
       }
   }
  
  
  


Reply via email to