X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/ae384229c538b20b429ea640ec30071ae944c0e7..4843e5290f2e7060ca5777c64b96e680080644f2:/splitkeys.c diff --git a/splitkeys.c b/splitkeys.c new file mode 100644 index 0000000..a2daac6 --- /dev/null +++ b/splitkeys.c @@ -0,0 +1,69 @@ +/* + * splitkeys.c - Split a keyring into smaller chunks. + * + * Jonathan McDowell + * + * Copyright 2003 Project Purple + * + * $Id: splitkeys.c,v 1.1 2003/09/30 21:16:14 noodles Exp $ + */ + +#include +#include +#include +#include +#include + +#include "charfuncs.h" +#include "keystructs.h" +#include "mem.h" +#include "parsekey.h" + +int main(int argc, char *argv[]) +{ + struct openpgp_packet_list *packets = NULL; + struct openpgp_packet_list *list_end = NULL; + struct openpgp_packet_list *tmp = NULL; + int result = 0; + int maxkeys = 10000; + int outfd = -1; + int count = 0; + char splitfile[1024]; + + if (argc > 1) { + maxkeys = atoi(argv[1]); + if (maxkeys == 0) { + fprintf(stderr, + "Couldn't parse %s as a number of keys!\n", + argv[1]); + exit(1); + } + } + + do { + result = read_openpgp_stream(stdin_getchar, NULL, + &packets, maxkeys); + if (packets != NULL) { + list_end = packets; + while (list_end->next != NULL) { + tmp = list_end; + list_end = list_end->next; + if (list_end->next == NULL && + list_end->packet->tag == 6) { + tmp->next = NULL; + } + } + + snprintf(splitfile, 1023, "splitfile-%d.pgp", count); + outfd = open(splitfile, O_WRONLY | O_CREAT, 0664); + write_openpgp_stream(file_putchar, &outfd, + packets); + close(outfd); + free_packet_list(packets); + packets = list_end; + count++; + } + } while (packets != NULL); + + return 0; +}