< prev index next >
src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java
Print this page
rev 15253 : 8130302: jarsigner and keytool -providerClass needs be re-examined for modules
@@ -116,11 +116,12 @@
List<String> ckaliases = new ArrayList<>(); // aliases in -verify
char[] storepass; // keystore password
boolean protectedPath; // protected authentication path
String storetype; // keystore type
String providerName; // provider name
- Vector<String> providers = null; // list of providers
+ List<String> providers = null; // list of provider names
+ List<String> providerClasses = null; // list of provider classes
// arguments for provider constructors
HashMap<String,String> providerArgs = new HashMap<>();
char[] keypass; // private key password
String sigfile; // name of .SF file
String sigalg; // name of signature algorithm
@@ -171,36 +172,33 @@
public void run(String args[]) {
try {
args = parseArgs(args);
// Try to load and install the specified providers
+ try {
if (providers != null) {
+ for (String provName: providers) {
+ KeyStoreUtil.loadProviderByName(provName,
+ providerArgs.get(provName), debug);
+ }
+ }
+ if (providerClasses != null) {
ClassLoader cl = ClassLoader.getSystemClassLoader();
- Enumeration<String> e = providers.elements();
- while (e.hasMoreElements()) {
- String provName = e.nextElement();
- Class<?> provClass;
- if (cl != null) {
- provClass = cl.loadClass(provName);
- } else {
- provClass = Class.forName(provName);
+ for (String provClass: providerClasses) {
+ KeyStoreUtil.loadProviderByClass(provClass,
+ providerArgs.get(provClass), cl, debug);
}
-
- Object obj = provClass.newInstance();
- if (!(obj instanceof Provider)) {
+ }
+ } catch (IllegalArgumentException e) {
MessageFormat form = new MessageFormat(rb.getString
("provName.not.a.provider"));
- Object[] source = {provName};
- throw new Exception(form.format(source));
- }
- Provider p = (Provider) obj;
- String provArg = providerArgs.get(provName);
- if (provArg != null) {
- p = p.configure(provArg);
- }
- Security.addProvider(p);
+ Object[] source = {e.getMessage()};
+ Exception ex = new Exception(form.format(source));
+ if (e.getCause() != null) {
+ ex.initCause(e.getCause());
}
+ throw ex;
}
if (verify) {
try {
loadKeyStore(keystore, false);
@@ -333,15 +331,14 @@
if (++n == args.length) usageNoArg();
storetype = args[n];
} else if (collator.compare(flags, "-providerName") ==0) {
if (++n == args.length) usageNoArg();
providerName = args[n];
- } else if ((collator.compare(flags, "-provider") == 0) ||
- (collator.compare(flags, "-providerClass") == 0)) {
+ } else if (collator.compare(flags, "-provider") == 0) {
if (++n == args.length) usageNoArg();
if (providers == null) {
- providers = new Vector<String>(3);
+ providers = new ArrayList<>(3);
}
providers.add(args[n]);
if (args.length > (n+1)) {
flags = args[n+1];
@@ -349,10 +346,25 @@
if (args.length == (n+2)) usageNoArg();
providerArgs.put(args[n], args[n+2]);
n += 2;
}
}
+ } else if (collator.compare(flags, "-providerClass") == 0) {
+ if (++n == args.length) usageNoArg();
+ if (providerClasses == null) {
+ providerClasses = new ArrayList<>(3);
+ }
+ providerClasses.add(args[n]);
+
+ if (args.length > (n+1)) {
+ flags = args[n+1];
+ if (collator.compare(flags, "-providerArg") == 0) {
+ if (args.length == (n+2)) usageNoArg();
+ providerArgs.put(args[n], args[n+2]);
+ n += 2;
+ }
+ }
} else if (collator.compare(flags, "-protected") ==0) {
protectedPath = true;
} else if (collator.compare(flags, "-certchain") ==0) {
if (++n == args.length) usageNoArg();
altCertChain = args[n];
@@ -582,13 +594,18 @@
System.out.println();
System.out.println(rb.getString
(".providerName.name.provider.name"));
System.out.println();
System.out.println(rb.getString
- (".providerClass.class.name.of.cryptographic.service.provider.s"));
+ (".provider.option"));
+ System.out.println(rb.getString
+ (".providerArg.option.1"));
+ System.out.println();
+ System.out.println(rb.getString
+ (".providerClass.option"));
System.out.println(rb.getString
- (".providerArg.arg.master.class.file.and.constructor.argument"));
+ (".providerArg.option.2"));
System.out.println();
System.out.println(rb.getString
(".strict.treat.warnings.as.errors"));
System.out.println();
System.out.println(rb.getString
< prev index next >