]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Security.java (secprops): Initialize.
authorMark Wielaard <mark@klomp.org>
Sat, 7 Jun 2003 18:38:09 +0000 (18:38 +0000)
committerMark Wielaard <mark@gcc.gnu.org>
Sat, 7 Jun 2003 18:38:09 +0000 (18:38 +0000)
       * java/security/Security.java (secprops): Initialize.
       (loadProviders): Return boolean.
       (static): Check result of loadProvider calls. If necessary
       display WARNING and fallback to Gnu provider.

From-SVN: r67597

libjava/ChangeLog
libjava/java/security/Security.java

index 10e54f5f7deea56627234948328a5ce618bc39b0..d4c8e4099a0d9e40d6199a965418a34e85ac371f 100644 (file)
@@ -1,3 +1,10 @@
+2003-06-06  Mark Wielaard  <mark@klomp.org>
+
+       * java/security/Security.java (secprops): Initialize.
+       (loadProviders): Return boolean.
+       (static): Check result of loadProvider calls. If necessary
+       display WARNING and fallback to Gnu provider.
+
 2002-06-06  James Clark  <jjc@jclark.com>
 
        Fix for PR libgcj/8738:
index 0f1827ea02c0b02da3e0727d6ae3ecb84abe5cfa..56335bf85c378d3408b5a9eaf3ad7de7d40478ec 100644 (file)
@@ -64,12 +64,29 @@ public final class Security extends Object
   private static final String ALG_ALIAS = "Alg.Alias.";
 
   private static Vector providers = new Vector();
-  private static Properties secprops;
+  private static Properties secprops = new Properties();
   static
   {
     String base = System.getProperty("gnu.classpath.home.url");
-    loadProviders(base, System.getProperty("gnu.classpath.vm.shortname"));
-    loadProviders(base, "classpath");
+    String vendor = System.getProperty("gnu.classpath.vm.shortname");
+    
+    // Try VM specific security file
+    boolean loaded = loadProviders(base, vendor);
+    
+    // Append classpath standard provider if possible
+    if (!loadProviders(base, "classpath") && !loaded && providers.size() == 0)
+      {
+       // No providers found and both security files failed to load properly.
+       System.err.println
+         ("WARNING: could not properly read security provider files:");
+       System.err.println
+         ("         " + base + "/security/" + vendor + ".security");
+       System.err.println
+         ("         " + base + "/security/" + "classpath" + ".security");
+       System.err.println
+         ("         Falling back to standard GNU security provider");
+       providers.addElement(new gnu.java.security.provider.Gnu());
+      }
   }
 
   // This class can't be instantiated.
@@ -77,16 +94,21 @@ public final class Security extends Object
   {
   }
 
-  private static void loadProviders(String baseUrl, String vendor)
+  /**
+   * Tries to load the vender specific security providers from the given
+   * base URL. Returns true if the resource could be read and completely
+   * parsed successfully, false otherwise.
+   */
+  private static boolean loadProviders(String baseUrl, String vendor)
   {
     if (baseUrl == null || vendor == null)
-      return;
+      return false;
 
+    boolean result = true;
     String secfilestr = baseUrl + "/security/" + vendor + ".security";
     try
       {
        InputStream fin = new URL(secfilestr).openStream();
-       secprops = new Properties();
        secprops.load(fin);
 
        int i = 1;
@@ -112,19 +134,20 @@ public final class Security extends Object
              }
 
            if (exception != null)
-             System.err.println (
-                 "Error loading security provider " + name + ": " + exception);
+             {
+               System.err.println ("WARNING: Error loading security provider "
+                                   + name + ": " + exception);
+               result = false;
+             }
            i++;
          }
       }
-    catch (FileNotFoundException ignored)
-      {
-        // Actually we probably shouldn't ignore these, once the security
-       // properties file is actually installed somewhere.
-      }
     catch (IOException ignored)
       {
+       result = false;
       }
+
+    return false;
   }
 
   /**