X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb_file.c;h=f7351225622e65074f434a77527b2cd890ac27c3;hb=71ad017abe933ba0dc7ed1b005074c4a5ab9978a;hp=243e59ef83cb60344d189ac0877c71dc7c145646;hpb=d55ec9e986e5c0c7345ae0e6a1449c4292291b32;p=onak.git diff --git a/keydb_file.c b/keydb_file.c index 243e59e..f735122 100644 --- a/keydb_file.c +++ b/keydb_file.c @@ -4,6 +4,8 @@ * Jonathan McDowell * * Copyright 2002 Project Purple + * + * $Id: keydb_file.c,v 1.11 2004/03/23 12:33:46 noodles Exp $ */ #include @@ -15,6 +17,7 @@ #include #include +#include "charfuncs.h" #include "keydb.h" #include "keyid.h" #include "keystructs.h" @@ -23,28 +26,12 @@ #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) { } @@ -96,13 +83,15 @@ int fetch_key(uint64_t keyid, struct openpgp_publickey **publickey, 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); } @@ -128,7 +117,7 @@ int store_key(struct openpgp_publickey *publickey, bool intrans, bool update) 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); @@ -138,8 +127,10 @@ int store_key(struct openpgp_publickey *publickey, bool intrans, bool update) 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); @@ -157,7 +148,7 @@ int delete_key(uint64_t keyid, bool intrans) { 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); @@ -178,6 +169,21 @@ int fetch_key_text(const char *search, struct openpgp_publickey **publickey) 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. */