in modules/jretools/src/main/java/org/apache/harmony/jretools/keytool/ArgumentsParser.java [180:484]
static KeytoolParameters parseArgs(String[] args)
throws NumberFormatException, KeytoolException, IOException {
if (args == null || args.length == 0) {
return null;
}
KeytoolParameters param = new KeytoolParameters();
// look for known options and get their values.
try {
for (int i = 0; i < args.length; i++) {
// commands
if (args[i].compareToIgnoreCase(sGenkey) == 0) {
param.setCommand(Command.GENKEY);
continue;
}
if (args[i].compareToIgnoreCase(sSelfcert) == 0) {
param.setCommand(Command.SELFCERT);
continue;
}
if (args[i].compareToIgnoreCase(sImport) == 0) {
param.setCommand(Command.IMPORT);
continue;
}
if (args[i].compareToIgnoreCase(sExport) == 0) {
param.setCommand(Command.EXPORT);
continue;
}
if (args[i].compareToIgnoreCase(sStorepasswd) == 0) {
param.setCommand(Command.STOREPASSWD);
continue;
}
if (args[i].compareToIgnoreCase(sKeypasswd) == 0) {
param.setCommand(Command.KEYPASSWD);
continue;
}
if (args[i].compareToIgnoreCase(sCertreq) == 0) {
param.setCommand(Command.CERTREQ);
continue;
}
if (args[i].compareToIgnoreCase(sCheck) == 0) {
param.setCommand(Command.CHECK);
continue;
}
if (args[i].compareToIgnoreCase(sConvert) == 0) {
param.setCommand(Command.CONVERT);
continue;
}
if (args[i].compareToIgnoreCase(sVerify) == 0) {
param.setCommand(Command.VERIFY);
continue;
}
if (args[i].compareToIgnoreCase(sPrintcert) == 0) {
param.setCommand(Command.PRINTCERT);
continue;
}
if (args[i].compareToIgnoreCase(sKeyclone) == 0) {
param.setCommand(Command.KEYCLONE);
continue;
}
if (args[i].compareToIgnoreCase(sDelete) == 0) {
param.setCommand(Command.DELETE);
continue;
}
if (args[i].compareToIgnoreCase(sList) == 0) {
param.setCommand(Command.LIST);
continue;
}
if (args[i].compareToIgnoreCase(sHelp) == 0) {
param.setCommand(Command.HELP);
if (args.length == i + 2){
param.setHelpTopic(args[++i]);
}
continue;
}
// additional options
if (args[i].compareToIgnoreCase(sKeystore) == 0) {
param.setStorePath(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sStoretype) == 0) {
param.setStoreType(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sProvider) == 0) {
param.setProvider(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sCertProvider) == 0) {
param.setCertProvider(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sKeyProvider) == 0) {
param.setKeyProvider(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sMdProvider) == 0) {
param.setMdProvider(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sSigProvider) == 0) {
param.setSigProvider(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sKsProvider) == 0) {
param.setKsProvider(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sConvKsProvider) == 0) {
param.setConvKsProvider(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sAlias) == 0) {
param.setAlias(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sKeyalg) == 0) {
param.setKeyAlg(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sSigalg) == 0) {
param.setSigAlg(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sDname) == 0) {
param.setDName(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sFile) == 0) {
param.setFileName(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sIssuerAlias) == 0) {
param.setIssuerAlias(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sStorepass) == 0) {
param.setStorePass(args[++i].toCharArray());
continue;
}
if (args[i].compareToIgnoreCase(sKeypass) == 0) {
param.setKeyPass(args[++i].toCharArray());
continue;
}
if (args[i].compareToIgnoreCase(sIssuerPass) == 0) {
param.setIssuerPass(args[++i].toCharArray());
continue;
}
if (args[i].compareToIgnoreCase(sCRLfile) == 0) {
param.setCrlFile(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sDestAlias) == 0) {
param.setDestAlias(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sNew) == 0) {
param.setNewPasswd(args[++i].toCharArray());
continue;
}
if (args[i].compareToIgnoreCase(sConvStorePath) == 0) {
param.setConvertedKeyStorePath(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sConvStoreType) == 0) {
param.setConvertedKeyStoreType(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sConvStorePass) == 0) {
param.setConvertedKeyStorePass(args[++i].toCharArray());
continue;
}
if (args[i].compareToIgnoreCase(sCAcertsPath) == 0) {
param.setCacertsPath(args[++i]);
continue;
}
if (args[i].compareToIgnoreCase(sCAcertsPass) == 0) {
param.setCacertsPass(args[++i].toCharArray());
continue;
}
if (args[i].compareToIgnoreCase(sKeysize) == 0) {
param.setKeySize((new Integer(args[++i])).intValue());
if (param.getKeySize() <= 0) {
throw new KeytoolException("Key size"
+ " must be more than zero.");
}
continue;
}
if (args[i].compareToIgnoreCase(sValidity) == 0) {
param.setValidity((new Integer(args[++i])).intValue());
if (param.getValidity() <= 0) {
throw new KeytoolException("Validity"
+ " must be more than zero.");
}
continue;
}
if (args[i].compareToIgnoreCase(sX509Version) == 0) {
param.setX509version((new Integer(args[++i])).intValue());
if (param.getX509version() < 1
|| param.getX509version() > 3) {
throw new KeytoolException(
"Certificate version must be " + "1, 2 or 3");
}
continue;
}
if (args[i].compareToIgnoreCase(sCertSerial) == 0) {
param.setCertSerialNr((new Integer(args[++i])).intValue());
if (param.getCertSerialNr() <= 0) {
throw new KeytoolException("Certificate serial number"
+ " must be more than zero.");
}
continue;
}
// flags
if (args[i].compareToIgnoreCase(sNoprompt) == 0) {
param.setNoPrompt(true);
continue;
}
if (args[i].compareToIgnoreCase(sTrustcacerts) == 0) {
param.setTrustCACerts(true);
continue;
}
if (args[i].compareToIgnoreCase(sRfc) == 0) {
param.setRfc(true);
continue;
}
if (args[i].compareToIgnoreCase(sV) == 0) {
param.setVerbose(true);
continue;
}
if (args[i].compareToIgnoreCase(sSecretkey) == 0) {
param.setSecretKey(true);
continue;
}
if (args[i].compareToIgnoreCase(sCA) == 0) {
param.setCA(true);
continue;
}
if (args[i].compareToIgnoreCase(sConvKeyEntries) == 0) {
param.setConvertKeyEntries(true);
continue;
}
System.out.println("Illegal option: " + args[i]);
return null;
}
} catch (ArrayIndexOutOfBoundsException e) {
// ignore the last option if its value is not provided
}
Command cmd = param.getCommand();
// check whether -v and -rfc options are used separately with -list.
if (cmd == Command.LIST && param.isRfc() && param.isVerbose()) {
throw new KeytoolException("There must not be both -v and -rfc "
+ "options specified");
}
// skip the store password setting if -printcert or -help commands were
// given.
if (cmd == Command.PRINTCERT || cmd == Command.HELP) {
return param;
}
// if the store password has not been entered, prompt for it
if (param.getStorePass() == null) {
// get path to the store
String storePath = (param.getStorePath() != null) ? param
.getStorePath() : KeytoolParameters.defaultKeystorePath;
// get store password
String prompt = "Enter keystore password: ";
System.out.print(prompt);
charsRead = in.read(readData);
char[] storePass;
File storeFile = new File(storePath);
if (storeFile.isDirectory()) {
throw new KeytoolException("The keystore path " + storePath
+ " points to a directory.");
}
// Allow short passwords to unlock existing stores and
// disallow passwords shorter than minPwdLength symbols for new
// ones.
// Check whether the file exists
if (!storeFile.exists()) {
// check of password length and additional prompts for
// password are made here
storePass = promptLongerPassword(prompt);
} else {
// if the store exists don't check the length
storePass = new char[charsRead - newLineLength];// remove "\r\n"
System.arraycopy(readData, 0, storePass, 0, charsRead
- newLineLength);
}
if (storePass.length != 0) {
param.setStorePass(storePass);
} else {
param.setStorePass(null);
}
}
return param;
}