X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=onak.c;h=3a4c4e8d01ecc3ac952e69dbdfcdb68fdc0f76a1;hb=e57492c98069420201b291d1596116fb8dd437f0;hp=2da86c915cae8708a192c7f0668cda6bc6eb6076;hpb=ae384229c538b20b429ea640ec30071ae944c0e7;p=onak.git diff --git a/onak.c b/onak.c index 2da86c9..3a4c4e8 100644 --- a/onak.c +++ b/onak.c @@ -7,7 +7,7 @@ * * Copyright 2002 Project Purple * - * $Id: onak.c,v 1.17 2003/09/30 20:40:11 noodles Exp $ + * $Id: onak.c,v 1.20 2004/05/27 01:25:37 noodles Exp $ */ #include @@ -26,6 +26,7 @@ #include "merge.h" #include "onak-conf.h" #include "parsekey.h" +#include "photoid.h" void find_keys(char *search, uint64_t keyid, bool ishex, bool fingerprint, bool exact, bool verbose) @@ -71,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; @@ -83,11 +85,14 @@ int main(int argc, char *argv[]) bool fingerprint = false; int optchar; - while ((optchar = getopt(argc, argv, "bfuv")) != -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; @@ -101,13 +106,13 @@ int main(int argc, char *argv[]) } } - readconfig(); + readconfig(configfile); initlogthing("onak", config.logfile); if ((argc - optind) < 1) { usage(); } else if (!strcmp("dump", argv[optind])) { - initdb(); + initdb(true); dumpdb("keydump"); cleanupdb(); } else if (!strcmp("add", argv[optind])) { @@ -126,7 +131,7 @@ int main(int argc, char *argv[]) logthing(LOGTHING_INFO, "Finished reading %d keys.", result); - initdb(); + initdb(false); logthing(LOGTHING_NOTICE, "Got %d new keys.", update_keys(&keys)); if (keys != NULL && update) { @@ -162,13 +167,34 @@ int main(int argc, char *argv[]) ishex = true; } } - initdb(); + initdb(false); if (!strcmp("index", argv[optind])) { find_keys(search, keyid, ishex, fingerprint, false, false); } else if (!strcmp("vindex", argv[optind])) { 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])) {