X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/4b8483ae278577a3adc8d84da81d77019704466f..49ce386ea134b5f0c35c6d087cf22b1673431366:/lookup.c?ds=inline diff --git a/lookup.c b/lookup.c index 8f37fd2..d6017d2 100644 --- a/lookup.c +++ b/lookup.c @@ -17,7 +17,9 @@ #include "getcgi.h" #include "keydb.h" #include "keyindex.h" +#include "log.h" #include "mem.h" +#include "onak-conf.h" #include "parsekey.h" #define OP_UNKNOWN 0 @@ -25,29 +27,32 @@ #define OP_INDEX 2 #define OP_VINDEX 3 -int putnextchar(void *ctx, unsigned char c) +int putnextchar(void *ctx, size_t count, unsigned char *c) { - return putchar(c); + return printf("%.*s", (int) count, c); } void find_keys(char *search, uint64_t keyid, bool ishex, bool fingerprint, bool exact, bool verbose) { struct openpgp_publickey *publickey = NULL; - bool found = false; + int count = 0; if (ishex) { - if (fetch_key(keyid, &publickey)) { - if (publickey != NULL) { - key_index(publickey, verbose, fingerprint, - true); - free_publickey(publickey); - found = true; - } - } + count = fetch_key(keyid, &publickey, false); + } else { + count = fetch_key_text(search, &publickey); } - if (!found) { + if (publickey != NULL) { + key_index(publickey, verbose, fingerprint, true); + free_publickey(publickey); + } else if (count == 0) { puts("Key not found."); + } else { + printf("Found %d keys, but maximum number to return is %d.\n", + count, + config.maxkeys); + puts("Try again with a more specific search."); } } @@ -78,6 +83,7 @@ int main(int argc, char *argv[]) } } else if (!strcmp(params[i], "search")) { search = params[i+1]; + params[i+1] = NULL; if (search != NULL) { keyid = strtoul(search, &end, 16); if (*search != 0 && @@ -95,23 +101,31 @@ int main(int argc, char *argv[]) exact = true; } } + free(params[i]); + params[i] = NULL; + if (params[i+1] != NULL) { + free(params[i+1]); + params[i+1] = NULL; + } + } + if (params != NULL) { + free(params); + params = NULL; } -// puts("HTTP/1.0 200 OK"); -// puts("Server: onak 0.0.1"); - puts("Content-Type: text/html\n"); - puts("\n
"); flatten_publickey(publickey, &packets, @@ -136,9 +150,17 @@ int main(int argc, char *argv[]) puts("Unknown operation!"); } cleanupdb(); + cleanuplogthing(); + cleanupconfig(); } puts("
"); - puts("Produced by onak 0.0.1 by Jonathan McDowell"); - puts("\n"); + puts("Produced by onak " VERSION " by Jonathan McDowell"); + end_html(); + + if (search != NULL) { + free(search); + search = NULL; + } + return (EXIT_SUCCESS); }