cscvs to tla changeset 100
authorJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:47:59 +0000 (23:47 +0000)
committerJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:47:59 +0000 (23:47 +0000)
Author: noodles
Date: 2003/09/30 21:16:14
Adding splitkeys for spliting up keyrings.

Makefile
splitkeys.c [new file with mode: 0644]

index 791708866050adc49e6f8088431238bafb6502c2..cd9de0f509a8f2a22cd88e9f0f63073889e2269d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 #
 # Makefile for onak.
 #
-# $Id: Makefile,v 1.16 2003/06/06 14:02:39 noodles Exp $
+# $Id: Makefile,v 1.17 2003/09/30 21:16:14 noodles Exp $
 #
 
 CC = gcc
@@ -23,7 +23,10 @@ SRCS = armor.c parsekey.c merge.c keyid.c md5.c sha.c main.c getcgi.c stats.c \
        keyindex.c mem.c lookup.c add.c keydb_$(DBTYPE).c ll.c hash.c \
        gpgwww.c onak-conf.c charfuncs.c sendsync.c log.c
 
-all: .depend $(PROGS) testparse maxpath sixdegrees
+all: .depend $(PROGS) testparse maxpath sixdegrees splitkeys
+
+splitkeys: splitkeys.o $(CORE_OBJS)
+       $(LINK) -o splitkeys splitkeys.o $(CORE_OBJS) $(LIBS)
 
 testparse: main.o $(OBJS)
        $(LINK) -o testparse main.o $(OBJS) $(LIBS)
diff --git a/splitkeys.c b/splitkeys.c
new file mode 100644 (file)
index 0000000..a2daac6
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * splitkeys.c - Split a keyring into smaller chunks.
+ *
+ * Jonathan McDowell <noodles@earth.li>
+ * 
+ * Copyright 2003 Project Purple
+ *
+ * $Id: splitkeys.c,v 1.1 2003/09/30 21:16:14 noodles Exp $
+ */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#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;
+}