hello all,

On Monday 31 July 2006 08:14, Mark Wielaard wrote:
> Hi Matt,
>
> On Sun, 2006-07-30 at 16:35 -0400, Matthew Wringe wrote:
> > The attached patch, already committed, fixes this problem. There should
> > be no other tests regressions from this patch.
>
> Thanks. Also added to the release and generics branch now.
>
> It seems we also need the patch from Raif mentioned in
> http://gcc.gnu.org/PR28192 to get a completely clean providers/engines
> mauve test run. Raif, can you let me know when you commit that patch and
> whether or not you think it should go onto the release branch?

done as per attached patch.

yes; it would be nice to have this in the upcoming release  -what's its 
codename again?


TIA + cheers;
rsn
Index: Provider.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/security/Provider.java,v
retrieving revision 1.12
diff -u -r1.12 Provider.java
--- Provider.java	28 Jul 2006 18:48:36 -0000	1.12
+++ Provider.java	31 Jul 2006 01:17:07 -0000
@@ -1,5 +1,5 @@
 /* Provider.java -- Security provider information
-   Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2002, 2006 Free Software Foundation, Inc.

 This file is part of GNU Classpath.

@@ -41,20 +41,19 @@
 import java.util.Properties;

 /**
- * This class represents a Java security architecture service provider.
- * The services provided by a such a provider can range from security
- * algorithms to key generation.
+ * This class represents a Java security architecture service provider. The
+ * services provided by a such a provider can range from security algorithms to
+ * key generation.
  * <p>
- * Providers are installed by name and version number.  There is one
- * standard provider supplied with the class library.  This is the
- * "GNU" provider, which can also be accessed by the alias "SUN" for
- * compatibility with the JDK.
- *
- * @version 0.0
- *
+ * Providers are installed by name and version number. See the static
+ * initializer of the [EMAIL PROTECTED] java.security.Security} class for the default
+ * security providers installed by this class library.
+ *
  * @author Aaron M. Renn ([EMAIL PROTECTED])
  */
-public abstract class Provider extends Properties implements Serializable
+public abstract class Provider
+    extends Properties
+    implements Serializable
 {
   private static final long serialVersionUID = -4298000515446427739L;

@@ -119,57 +118,81 @@
   }

   /**
-   * Sets the key property to have the specified value.
+   * Maps a key property to a designated value.
    * <p>
-   * <bold>NOT IMPLEMENTED YET</bold>[
-   * First, if there is a security manager, its <code>checkSecurityAccess</code>
-   * method is called with the string "putProviderProperty."+name, where name is
-   * the provider name, to see if it's ok to set this provider's property
-   * values.
-   * If the default implementation of <code>checkSecurityAccess</code> is used
-   * (that is, that method is not overriden), then this results in a call to the
-   * security manager's <code>checkPermission</code> method with a
-   * <code>SecurityPermission("putProviderProperty."+name)</code>
-   * permission.<br>]
-   *
+   * If there is an installed [EMAIL PROTECTED] SecurityManager} object in the underlying
+   * VM, its [EMAIL PROTECTED] SecurityManager#checkSecurityAccess(String)} method is
+   * called with the string <code>"putProviderProperty." + name</code>, where
+   * <code>name</code> is this provider's name. For the default implementation
+   * this translates into a [EMAIL PROTECTED] SecurityManager#checkPermission(Permission)}
+   * for a <code>SecurityPermission("putProviderProperty." + name)</code>.
+   *
    * @param key The property key.
    * @param value The property value.
-   *
    * @return The previous value of the specified property (<code>key</code>),
    *         or <code>null</code> if it did not have one.
-   * @throws SecurityException If a security manager exists and its
-   * [EMAIL PROTECTED] java.lang.SecurityManager.checkSecurityAccess(java.lang.String)}
-   * method denies access to set property values.
+   * @throws SecurityException If a security manager is installed and its
+   *           [EMAIL PROTECTED] SecurityManager#checkSecurityAccess(String)} method
+   *           disallows adding properties at run-time.
    * @since Classpath 0.4+cvs, JDK 1.2
-   * @see java.lang.Object.equals(Object)
-   * @see java.util.Hashtable.get(Object)
+   * @see java.lang.Object#equals(Object)
+   * @see java.util.Hashtable#get(Object)
    */
   public Object put(Object key, Object value)
   {
-    return super.put(key, value);
+    SecurityManager sm = System.getSecurityManager();
+    if (sm != null)
+      sm.checkSecurityAccess("putProviderProperty." + this.name);
+    return super.put(toCanonicalKey(key), value);
   }
-
+
+  // overrides same in java.util.Hashtable
+  public Object get(Object key)
+  {
+    return super.get(toCanonicalKey(key));
+  }
+
   /**
    * This method removes the specified key entry (and its associated value)
-   * from the property mapping list.
+   * from the property mapping collection.
+   * <p>
+   * If there is an installed [EMAIL PROTECTED] SecurityManager} object in the underlying
+   * VM, its [EMAIL PROTECTED] SecurityManager#checkSecurityAccess(String)} method is
+   * called with the string <code>"removeProviderProperty." + name</code>, where
+   * <code>name</code> is this provider's name. For the default implementation
+   * this translates into a [EMAIL PROTECTED] SecurityManager#checkPermission(Permission)}
+   * for a <code>SecurityPermission("removeProviderProperty." + name)</code>.
    *
    * @param key The key to remove
-   *
    * @return The previous value for this key, or <code>null</code> if no
    * previous value.
    */
   public Object remove(Object key)
   {
-    return super.remove(key);
+    SecurityManager sm = System.getSecurityManager();
+    if (sm != null)
+      sm.checkSecurityAccess("removeProviderProperty." + this.name);
+    return super.remove(toCanonicalKey(key));
   }

   /**
-   * This method clears the entire property list such that it no longer
+   * This method clears the entire property collection such that it no longer
    * contains the properties used to look up the services provided by
-   * the <code>Provider</code>.
+   * this <code>Provider</code>.
+   * <p>
+   * If there is an installed [EMAIL PROTECTED] SecurityManager} object in the underlying
+   * VM, its [EMAIL PROTECTED] SecurityManager#checkSecurityAccess(String)} method is
+   * called with the string <code>"clearProviderProperties." + name</code>,
+   * where <code>name</code> is this provider's name. For the default
+   * implementation this translates into a
+   * [EMAIL PROTECTED] SecurityManager#checkPermission(Permission)} for a
+   * <code>SecurityPermission("clearProviderProperties." + name)</code>.
    */
   public void clear()
   {
+    SecurityManager sm = System.getSecurityManager();
+    if (sm != null)
+      sm.checkSecurityAccess("clearProviderProperties." + this.name);
     super.clear();
   }

@@ -185,5 +208,11 @@
     return (getClass().getName() + ": name=" + getName() + " version=" +
 	    version);
   }
-
+
+  private Object toCanonicalKey(Object key)
+  {
+    if (key.getClass().isAssignableFrom(String.class)) // is it ours?
+      return ((String) key).toUpperCase(); // use default locale
+    return key;
+  }
 }

Reply via email to