X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/d9432fa0982c0f7a736bf00c04969dedca347ea3..HEAD:/onak.c diff --git a/onak.c b/onak.c index 4ba3a7a..6baea3d 100644 --- a/onak.c +++ b/onak.c @@ -3,9 +3,20 @@ * * This is the main swiss army knife binary. * - * Jonathan McDowell - * - * Copyright 2002 Project Purple + * Copyright 2002 Jonathan McDowell + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include @@ -57,11 +68,19 @@ void find_keys(char *search, uint64_t keyid, bool ishex, } } +/** + * @brief Context for the keyserver dumping function + */ struct dump_ctx { + /** Keys we've dumped so far to this file */ int count; + /** Maximum keys to dump per file */ int maxcount; + /** File descriptor for the current dump file */ int fd; + /** Number of the current dump file */ int filenum; + /** Base filename to use for dump files */ char *filebase; }; @@ -277,7 +296,17 @@ int main(int argc, char *argv[]) } } else if ((argc - optind) == 2) { search = argv[optind+1]; - if (search != NULL) { + if (search != NULL && strlen(search) == 42 && + search[0] == '0' && search[1] == 'x') { + /* + * Fingerprint. Truncate to last 64 bits for + * now. + */ + keyid = strtoull(&search[26], &end, 16); + if (end != NULL && *end == 0) { + ishex = true; + } + } else if (search != NULL) { keyid = strtoul(search, &end, 16); if (*search != 0 && end != NULL && @@ -301,7 +330,8 @@ int main(int argc, char *argv[]) unsigned char *photo = NULL; size_t length = 0; - if (getphoto(keys, 0, &photo, &length)) { + if (getphoto(keys, 0, &photo, + &length) == ONAK_E_OK) { fwrite(photo, 1, length,