tools: ndnsec-delete reports success or failure
Change-Id: I9b53fcc030fbca34acdf0c7dc3afc8ae8e8d523d
Refs: #2275
diff --git a/tools/ndnsec/delete.hpp b/tools/ndnsec/delete.hpp
index 629440f..bd871bc 100644
--- a/tools/ndnsec/delete.hpp
+++ b/tools/ndnsec/delete.hpp
@@ -32,12 +32,13 @@
using namespace ndn;
namespace po = boost::program_options;
- // bool deleteId = true;
bool isDeleteKey = false;
bool isDeleteCert = false;
std::string name;
- po::options_description description("General Usage\n ndnsec delete [-h] [-k|c] name\nGeneral options");
+ po::options_description description("General Usage\n"
+ "ndnsec delete [-h] [-k|c] name\n"
+ "General options");
description.add_options()
("help,h", "produce help message")
("delete-key,k", "(Optional) delete a key if specified.")
@@ -53,57 +54,78 @@
p.add("name", 1);
po::variables_map vm;
- try
- {
- po::store(po::command_line_parser(argc, argv).options(description).positional(p).run(),
- vm);
- po::notify(vm);
- }
- catch (const std::exception& e)
- {
- std::cerr << "ERROR: " << e.what() << std::endl;
- std::cerr << description << std::endl;
- return 1;
- }
+ try {
+ po::store(po::command_line_parser(argc, argv).options(description).positional(p).run(),
+ vm);
+ po::notify(vm);
+ }
+ catch (const std::exception& e) {
+ std::cerr << "ERROR: " << e.what() << std::endl;
+ std::cerr << description << std::endl;
+ return 2;
+ }
- if (vm.count("help") != 0)
- {
- std::cerr << description << std::endl;;
- return 0;
- }
+ if (vm.count("help") != 0) {
+ std::cerr << description << std::endl;;
+ return 0;
+ }
- if (vm.count("name") == 0)
- {
- std::cerr << "ERROR: name must be specified" << std::endl;
- std::cerr << description << std::endl;
- return 1;
- }
+ if (vm.count("name") == 0) {
+ std::cerr << "ERROR: name must be specified" << std::endl;
+ std::cerr << description << std::endl;
+ return 2;
+ }
if (vm.count("delete-cert") != 0 || vm.count("delete-cert2") != 0)
- {
- isDeleteCert = true;
- // deleteId = false;
- }
+ isDeleteCert = true;
+
else if (vm.count("delete-key") != 0 || vm.count("delete-key2") != 0)
- {
- isDeleteKey = true;
- // deleteId = false;
- }
+ isDeleteKey = true;
KeyChain keyChain;
- if (isDeleteCert)
- {
+ try {
+ if (isDeleteCert) {
+ if (!keyChain.doesCertificateExist(name)) {
+ std::cerr << "ERROR: Certificate does not exist: " << name << std::endl;
+ return 1;
+ }
+
keyChain.deleteCertificate(name);
+ std::cerr << "OK: Delete certificate: " << name << std::endl;
}
- else if (isDeleteKey)
- {
+ else if (isDeleteKey) {
+ if (!keyChain.doesPublicKeyExist(name) &&
+ !keyChain.doesKeyExistInTpm(name, KEY_CLASS_PRIVATE)) {
+ std::cerr << "ERROR: Key does not exist: " << name << std::endl;
+ return 1;
+ }
+
keyChain.deleteKey(name);
+ std::cerr << "OK: Delete key: " << name << std::endl;
}
- else
- {
+ else {
+ if (!keyChain.doesIdentityExist(name)) {
+ std::cerr << "ERROR: Identity does not exist: " << name << std::endl;
+ return 1;
+ }
+
keyChain.deleteIdentity(name);
+ std::cerr << "OK: Delete identity: " << name << std::endl;
}
+ }
+ catch (const SecPublicInfo::Error& e) {
+ std::cerr << "ERROR: Cannot delete the item: " << e.what() << std::endl;
+ return 2;
+ }
+ catch (const SecTpm::Error& e) {
+ std::cerr << "ERROR: Cannot delete the item: " << e.what() << std::endl;
+ return 2;
+ }
+ catch (const KeyChain::Error& e) {
+ std::cerr << "ERROR: " << e.what() << std::endl;
+ return 2;
+ }
return 0;
}