* Jonathan McDowell <noodles@earth.li>
*
* Copyright 2002 Project Purple
+ *
+ * $Id: keydb_file.c,v 1.11 2004/03/23 12:33:46 noodles Exp $
*/
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
+#include "charfuncs.h"
#include "keydb.h"
#include "keyid.h"
#include "keystructs.h"
#include "onak-conf.h"
#include "parsekey.h"
-/**
- * keydb_fetchchar - Fetches a char from a file.
- */
-static int keydb_fetchchar(void *fd, size_t count, unsigned char *c)
-{
- return !(read( *(int *) fd, c, count));
-}
-
-/**
- * keydb_putchar - Puts a char to a file.
- */
-static int keydb_putchar(void *fd, size_t count, unsigned char *c)
-{
- return !(write( *(int *) fd, c, count));
-}
-
/**
* initdb - Initialize the key database.
*
* This is just a no-op for flat file access.
*/
-void initdb(void)
+void initdb(bool readonly)
{
}
char keyfile[1024];
int fd = -1;
- snprintf(keyfile, 1023, "%s/0x%llX", config.file_dbpath,
+ snprintf(keyfile, 1023, "%s/0x%llX", config.db_dir,
keyid & 0xFFFFFFFF);
fd = open(keyfile, O_RDONLY); // | O_SHLOCK);
if (fd > -1) {
- read_openpgp_stream(keydb_fetchchar, &fd, &packets);
+ read_openpgp_stream(file_fetchchar, &fd, &packets, 0);
parse_keys(packets, publickey);
+ free_packet_list(packets);
+ packets = NULL;
close(fd);
}
char keyfile[1024];
int fd = -1;
- snprintf(keyfile, 1023, "%s/0x%llX", config.file_dbpath,
+ snprintf(keyfile, 1023, "%s/0x%llX", config.db_dir,
get_keyid(publickey) & 0xFFFFFFFF);
fd = open(keyfile, O_WRONLY | O_CREAT, 0664); // | O_EXLOCK);
flatten_publickey(publickey, &packets, &list_end);
publickey -> next = next;
- write_openpgp_stream(keydb_putchar, &fd, packets);
+ write_openpgp_stream(file_putchar, &fd, packets);
close(fd);
+ free_packet_list(packets);
+ packets = NULL;
}
return (fd > -1);
{
char keyfile[1024];
- snprintf(keyfile, 1023, "%s/0x%llX", config.file_dbpath,
+ snprintf(keyfile, 1023, "%s/0x%llX", config.db_dir,
keyid & 0xFFFFFFFF);
return unlink(keyfile);
return 0;
}
+/**
+ * dumpdb - dump the key database
+ * @filenamebase: The base filename to use for the dump.
+ *
+ * Dumps the database into one or more files, which contain pure OpenPGP
+ * that can be reimported into onak or gpg. filenamebase provides a base
+ * file name for the dump; several files may be created, all of which will
+ * begin with this string and then have a unique number and a .pgp
+ * extension.
+ * */
+int dumpdb(char *filenamebase)
+{
+ return 0;
+}
+
/*
* Include the basic keydb routines.
*/