X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/42bcfe2cae29f375af4cf2cd3ccfa196b77a3946..656d2e182686fed6d5b84ee711f2c771df3b14a7:/onak.c?ds=sidebyside diff --git a/onak.c b/onak.c index 8eccc9c..07e01a5 100644 --- a/onak.c +++ b/onak.c @@ -74,7 +74,8 @@ void usage(void) { puts("Usage:\n"); puts("\tonak [options] \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"); @@ -87,20 +88,28 @@ int main(int argc, char *argv[]) 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; @@ -113,21 +122,37 @@ int main(int argc, char *argv[]) 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; @@ -153,9 +178,11 @@ int main(int argc, char *argv[]) } 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])) { @@ -169,6 +196,8 @@ int main(int argc, char *argv[]) armor_openpgp_stream(stdout_putchar, NULL, packets); + free_packet_list(packets); + packets = NULL; } else { puts("Key not found"); } @@ -178,5 +207,7 @@ int main(int argc, char *argv[]) usage(); } + cleanupconfig(); + return rc; }