puts("Usage:\n");
puts("\tonak [options] <command> <parameters>\n");
puts("\tCommands:\n");
- puts("\tadd - read armored OpenPGP keys from stdin and add to the keyserver");
+ puts("\tadd - read armored OpenPGP keys from stdin and add to the"
+ " keyserver");
puts("\tdelete - delete a given key from the keyserver");
puts("\tget - retrieves the key requested from the keyserver");
puts("\tindex - search for a key and list it");
struct openpgp_packet_list *list_end = NULL;
struct openpgp_publickey *keys = NULL;
int rc = EXIT_SUCCESS;
+ int result = 0;
char *search = NULL;
char *end = NULL;
uint64_t keyid = 0;
bool ishex = false;
bool verbose = false;
+ bool update = false;
bool binary = false;
+ bool fingerprint = false;
int optchar;
-
- while ((optchar = getopt(argc, argv, "bv")) != -1 ) {
+ while ((optchar = getopt(argc, argv, "bfuv")) != -1 ) {
switch (optchar) {
case 'b':
binary = true;
break;
+ case 'f':
+ fingerprint = true;
+ break;
+ case 'u':
+ update = true;
+ break;
case 'v':
verbose = true;
break;
}
}
+ readconfig();
+
if ((argc - optind) < 1) {
usage();
} else if (!strcmp("add", argv[optind])) {
if (binary) {
- read_openpgp_stream(stdin_getchar, NULL, &packets);
+ result = read_openpgp_stream(stdin_getchar, NULL,
+ &packets);
+ if (verbose) {
+ fprintf(stderr,
+ "read_openpgp_stream: %d\n", result);
+ }
} else {
dearmor_openpgp_stream(stdin_getchar, NULL, &packets);
}
if (packets != NULL) {
- parse_keys(packets, &keys);
+ result = parse_keys(packets, &keys);
free_packet_list(packets);
packets = NULL;
if (verbose) {
- fprintf(stderr, "Finished reading keys.\n");
+ fprintf(stderr, "Finished reading %d keys.\n",
+ result);
}
-
+
initdb();
fprintf(stderr, "Got %d new keys.\n",
update_keys(&keys, verbose));
+ if (keys != NULL && update) {
+ flatten_publickey(keys,
+ &packets,
+ &list_end);
+ armor_openpgp_stream(stdout_putchar,
+ NULL,
+ packets);
+ free_packet_list(packets);
+ packets = NULL;
+ }
cleanupdb();
} else {
rc = 1;
}
initdb();
if (!strcmp("index", argv[optind])) {
- find_keys(search, keyid, ishex, false, false, false);
+ find_keys(search, keyid, ishex, fingerprint,
+ false, false);
} else if (!strcmp("vindex", argv[optind])) {
- find_keys(search, keyid, ishex, false, false, true);
+ find_keys(search, keyid, ishex, fingerprint,
+ false, true);
} else if (!strcmp("delete", argv[optind])) {
delete_key(getfullkeyid(keyid), false);
} else if (!strcmp("get", argv[optind])) {
armor_openpgp_stream(stdout_putchar,
NULL,
packets);
+ free_packet_list(packets);
+ packets = NULL;
} else {
puts("Key not found");
}
usage();
}
+ cleanupconfig();
+
return rc;
}