/* Delete.java -- delete command. Copyright (C) 2004 Free Software Foundation, Inc. This file is part of GNU Crypto. GNU Crypto is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Crypto is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package gnu.crypto.tool.keytool; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.cert.CertificateFactory; import javax.security.auth.callback.Callback; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; class Delete extends Command { // Constructors. // ------------------------------------------------------------------------- Delete (Command previous) { super (previous); } // Instance methods. // ------------------------------------------------------------------------- public void run() throws Exception { KeyStore store = null; KeyStore store2 = null; CertificateFactory cert = null; if (provider != null) { store = KeyStore.getInstance (storeType, provider); cert = CertificateFactory.getInstance (certType, provider); if (secretStore != null) store2 = KeyStore.getInstance (storeType, provider); } else { store = KeyStore.getInstance (storeType); cert = CertificateFactory.getInstance (certType); if (secretStore != null) store2 = KeyStore.getInstance (storeType, provider); } NameCallback aliasIn = new NameCallback ("alias: ", alias); PasswordCallback pass = new PasswordCallback ("keystore password: ", false); PasswordCallback pass2 = new PasswordCallback ("secret keystore password: ", false); Callback[] cb = null; if (store2 != null) { if (alias.equals (DEFAULT_ALIAS)) cb = new Callback[] { aliasIn, pass, pass2 }; else cb = new Callback[] { pass, pass2 }; } else { if (alias.equals (DEFAULT_ALIAS)) cb = new Callback[] { aliasIn, pass }; else cb = new Callback[] { pass }; } handler.handle (cb); if (storeFile.equals ("-")) { if (verbose > 0) println ("Loading keystore from standard input"); store.load (System.in, pass.getPassword()); } else { if (verbose > 0) println ("Loading keystore from " + storeFile); FileInputStream in = new FileInputStream (storeFile); store.load (in, pass.getPassword()); in.close(); } if (store2 != null) { if (secretStore.equals ("-")) { if (verbose > 0) println ("Loading secret keystore from standard input"); store2.load (System.in, pass2.getPassword()); } else { if (verbose > 0) println ("Loading secret keystore from " + storeFile); FileInputStream in = new FileInputStream (storeFile); store.load (in, pass.getPassword()); in.close(); } } String alias = this.alias; if (alias.equals (DEFAULT_ALIAS)) alias = aliasIn.getName(); if (!store.containsAlias (alias)) throw new Exception ("no such alias: " + alias); store.deleteEntry (alias); OutputStream out = null; if (outFile != null) out = (outFile.equals ("-") ? (OutputStream) System.out : (OutputStream) new FileOutputStream (outFile)); else out = (storeFile.equals ("-") ? (OutputStream) System.out : (OutputStream) new FileOutputStream (storeFile)); if (verbose > 0) println ("Writing keystore to " + (out == System.out ? "standard output" : (outFile == null ? storeFile : outFile))); store.store (out, pass.getPassword()); if (out != System.out) { out.flush(); out.close(); } if (store2 != null) { if (!store2.containsAlias (alias)) throw new Exception ("no such alias: " + alias); store2.deleteEntry (alias); } if (store2 != null) { out = null; if (outFile != null) out = (outFile.equals ("-") ? (OutputStream) System.out : (OutputStream) new FileOutputStream (outFile)); else out = (storeFile.equals ("-") ? (OutputStream) System.out : (OutputStream) new FileOutputStream (storeFile)); if (verbose > 0) println ("Writing secret keystore to " + (out == System.out ? "standard output" : (outFile == null ? storeFile : outFile))); store2.store (out, pass.getPassword()); if (out != System.out) { out.flush(); out.close(); } } } public String toString() { return "delete"; } }