X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=onak.c;h=3a4c4e8d01ecc3ac952e69dbdfcdb68fdc0f76a1;hb=f1e930585a5eb8ef184f5a0ad1e85759e01e60d0;hp=90c6926c95d7fb1db15ad18cbaff91d4aad4f808;hpb=ec599f57d8843b2e34270c2083db71e99d76d952;p=onak.git diff --git a/onak.c b/onak.c index 90c6926..3a4c4e8 100644 --- a/onak.c +++ b/onak.c @@ -6,6 +6,8 @@ * Jonathan McDowell * * Copyright 2002 Project Purple + * + * $Id: onak.c,v 1.20 2004/05/27 01:25:37 noodles Exp $ */ #include @@ -14,36 +16,17 @@ #include #include "armor.h" +#include "charfuncs.h" #include "keydb.h" #include "keyid.h" #include "keyindex.h" #include "keystructs.h" +#include "log.h" #include "mem.h" #include "merge.h" #include "onak-conf.h" #include "parsekey.h" - -int stdin_getchar(void *ctx, size_t count, unsigned char *c) -{ - int ic; - - do { - ic = getchar(); - *c = ic; - c++; - } while ((ic != EOF) && (--count > 0)); - return (ic == EOF); -} - -int stdout_putchar(void *ctx, size_t count, unsigned char *c) -{ - int i; - - for (i = 0; i < count; i++) { - putchar(c[i]); - } - return 0; -} +#include "photoid.h" void find_keys(char *search, uint64_t keyid, bool ishex, bool fingerprint, bool exact, bool verbose) @@ -77,6 +60,8 @@ void usage(void) { puts("\tadd - read armored OpenPGP keys from stdin and add to the" " keyserver"); puts("\tdelete - delete a given key from the keyserver"); + puts("\tdump - dump all the keys from the keyserver to a file or" + " files\n\t starting keydump*"); puts("\tget - retrieves the key requested from the keyserver"); puts("\tindex - search for a key and list it"); puts("\tvindex - search for a key and list it and its signatures"); @@ -87,6 +72,7 @@ int main(int argc, char *argv[]) struct openpgp_packet_list *packets = NULL; struct openpgp_packet_list *list_end = NULL; struct openpgp_publickey *keys = NULL; + char *configfile = NULL; int rc = EXIT_SUCCESS; int result = 0; char *search = NULL; @@ -96,34 +82,45 @@ int main(int argc, char *argv[]) bool verbose = false; bool update = false; bool binary = false; + bool fingerprint = false; int optchar; - while ((optchar = getopt(argc, argv, "buv")) != -1 ) { + while ((optchar = getopt(argc, argv, "bc:fuv")) != -1 ) { switch (optchar) { case 'b': binary = true; break; + case 'c': + configfile = strdup(optarg); + break; + case 'f': + fingerprint = true; + break; case 'u': update = true; break; case 'v': verbose = true; + setlogthreshold(LOGTHING_INFO); break; } } - readconfig(); + readconfig(configfile); + initlogthing("onak", config.logfile); if ((argc - optind) < 1) { usage(); + } else if (!strcmp("dump", argv[optind])) { + initdb(true); + dumpdb("keydump"); + cleanupdb(); } else if (!strcmp("add", argv[optind])) { if (binary) { result = read_openpgp_stream(stdin_getchar, NULL, - &packets); - if (verbose) { - fprintf(stderr, - "read_openpgp_stream: %d\n", result); - } + &packets, 0); + logthing(LOGTHING_INFO, + "read_openpgp_stream: %d", result); } else { dearmor_openpgp_stream(stdin_getchar, NULL, &packets); } @@ -131,14 +128,12 @@ int main(int argc, char *argv[]) result = parse_keys(packets, &keys); free_packet_list(packets); packets = NULL; - if (verbose) { - fprintf(stderr, "Finished reading %d keys.\n", + logthing(LOGTHING_INFO, "Finished reading %d keys.", result); - } - initdb(); - fprintf(stderr, "Got %d new keys.\n", - update_keys(&keys, verbose)); + initdb(false); + logthing(LOGTHING_NOTICE, "Got %d new keys.", + update_keys(&keys)); if (keys != NULL && update) { flatten_publickey(keys, &packets, @@ -152,7 +147,7 @@ int main(int argc, char *argv[]) cleanupdb(); } else { rc = 1; - fprintf(stderr, "No keys read.\n"); + logthing(LOGTHING_NOTICE, "No keys read."); } if (keys != NULL) { @@ -160,7 +155,7 @@ int main(int argc, char *argv[]) keys = NULL; } else { rc = 1; - fprintf(stderr, "No changes.\n"); + logthing(LOGTHING_NOTICE, "No changes."); } } else if ((argc - optind) == 2) { search = argv[optind+1]; @@ -172,21 +167,46 @@ int main(int argc, char *argv[]) ishex = true; } } - initdb(); + initdb(false); 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("getphoto", argv[optind])) { + if (!ishex) { + puts("Can't get a key on uid text." + " You must supply a keyid."); + } else if (fetch_key(keyid, &keys, false)) { + struct openpgp_packet *photo = NULL; + FILE *photof = NULL; + photo = getphoto(keys, 0); + if (photo != NULL) { + photof = fopen("keyphoto.jpg", "w"); + fwrite(photo->data+19, + 1, + (photo->length - 19), + photof); + fclose(photof); + } + free_publickey(keys); + keys = NULL; + } else { + puts("Key not found"); + } } else if (!strcmp("delete", argv[optind])) { delete_key(getfullkeyid(keyid), false); } else if (!strcmp("get", argv[optind])) { - if (fetch_key(keyid, &keys, false)) { - if (verbose) { - fprintf(stderr, "Got key.\n"); - } + if (!ishex) { + puts("Can't get a key on uid text." + " You must supply a keyid."); + } else if (fetch_key(keyid, &keys, false)) { + logthing(LOGTHING_INFO, "Got key."); flatten_publickey(keys, &packets, &list_end); + free_publickey(keys); armor_openpgp_stream(stdout_putchar, NULL, packets); @@ -201,6 +221,7 @@ int main(int argc, char *argv[]) usage(); } + cleanuplogthing(); cleanupconfig(); return rc;