This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Security provider fallback


Hi,

This is another patch from the past.
http://gcc.gnu.org/ml/java-patches/2003-q1/msg00632.html
I wish I had committed it back then since it would have helped some of
my users know that there was something wrong with their gcj/security
file installation. (My application needs a SHA-1 implementation).

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.

OK to commit it now to mainline and branch?

Cheers,

Mark
Index: java/security/Security.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/security/Security.java,v
retrieving revision 1.11
diff -u -r1.11 Security.java
--- java/security/Security.java	31 Dec 2002 22:50:10 -0000	1.11
+++ java/security/Security.java	2 Mar 2003 18:11:22 -0000
@@ -56,13 +56,30 @@
 public final class Security extends Object
 {
   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.
@@ -70,17 +87,21 @@
   {
   }
 
-  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;
@@ -108,19 +129,20 @@
 	        exception = x;
 	      }
 	    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 probibly shouldn't ignore these, once the security
-	// properties file is actually installed somewhere.
-      }
     catch (IOException ignored)
       {
+	result = false;
       }
+
+    return result;
   }
 
   /**

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]