This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Security provider fallback
- From: Mark Wielaard <mark at klomp dot org>
- To: java-patches at gcc dot gnu dot org
- Date: 06 Jun 2003 17:46:03 +0200
- Subject: 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;
}
/**