* keydb_db4.c - Routines to store and fetch keys in a DB4 database.
*
* Copyright 2002-2008 Jonathan McDowell <noodles@earth.li>
+ *
+ * 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 <sys/types.h>
FILE *numdb = NULL;
int ret = 0;
int i = 0;
- u_int32_t flags = 0;
+ uint32_t flags = 0;
struct stat statbuf;
int maxlocks;
worddb_data[ 8] = (keyid >> 24) & 0xFF;
worddb_data[ 9] = (keyid >> 16) & 0xFF;
worddb_data[10] = (keyid >> 8) & 0xFF;
- worddb_data[11] = keyid & 0xFF;
+ worddb_data[11] = keyid & 0xFF;
ret = cursor->c_get(cursor,
&key,
if (ret == 0) {
ret = cursor->c_del(cursor, 0);
- if (ret != 0) {
- logthing(LOGTHING_ERROR,
- "Problem deleting word: %s",
- db_strerror(ret));
- }
}
if (ret != 0) {
logthing(LOGTHING_ERROR,
- "Problem deleting word: %s",
- db_strerror(ret));
+ "Problem deleting word: %s "
+ "(0x%016" PRIX64 ")",
+ db_strerror(ret),
+ keyid);
if (ret == DB_LOCK_DEADLOCK) {
deadlock = true;
}
ret = cursor->c_close(cursor);
cursor = NULL;
+ ret = skshashdb->cursor(skshashdb,
+ txn,
+ &cursor,
+ 0); /* flags */
+ get_skshash(publickey, &hash);
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ key.data = hash.hash;
+ key.size = sizeof(hash.hash);
+ data.data = &keyid;
+ data.size = sizeof(keyid);
+
+ ret = cursor->c_get(cursor,
+ &key,
+ &data,
+ DB_GET_BOTH);
+
+ if (ret == 0) {
+ ret = cursor->c_del(cursor, 0);
+ }
+
+ if (ret != 0) {
+ logthing(LOGTHING_ERROR,
+ "Problem deleting skshash: %s "
+ "(0x%016" PRIX64 ")",
+ db_strerror(ret),
+ keyid);
+ if (ret == DB_LOCK_DEADLOCK) {
+ deadlock = true;
+ }
+ }
+
+ ret = cursor->c_close(cursor);
+ cursor = NULL;
+
/*
* Free our UID and word lists.
*/
if (ret == 0) {
ret = cursor->c_del(cursor, 0);
- if (ret != 0) {
- logthing(LOGTHING_ERROR,
- "Problem deleting short keyid: %s",
- db_strerror(ret));
- }
}
if (ret != 0) {
logthing(LOGTHING_ERROR,
- "Problem deleting short keyid: %s",
- db_strerror(ret));
+ "Problem deleting short keyid: %s "
+ "(0x%016" PRIX64 ")",
+ db_strerror(ret),
+ keyid);
if (ret == DB_LOCK_DEADLOCK) {
deadlock = true;
}
if (ret == 0) {
ret = cursor->c_del(cursor, 0);
- if (ret != 0) {
- logthing(LOGTHING_ERROR,
- "Problem deleting short"
- " keyid: %s",
- db_strerror(ret));
- }
}
if (ret != 0) {
logthing(LOGTHING_ERROR,
- "Problem deleting short keyid: %s",
- db_strerror(ret));
+ "Problem deleting short keyid: %s "
+ "(0x%016" PRIX64 ")",
+ db_strerror(ret),
+ keyid);
if (ret == DB_LOCK_DEADLOCK) {
deadlock = true;
}
}
- if (!deadlock) {
- get_skshash(publickey, &hash);
-
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
- key.data = hash.hash;
- key.size = sizeof(hash.hash);
- data.data = &keyid;
- data.size = sizeof(keyid);
-
- ret = cursor->c_get(cursor,
- &key,
- &data,
- DB_GET_BOTH);
-
- if (ret == 0) {
- ret = cursor->c_del(cursor, 0);
- }
-
- if (ret != 0) {
- logthing(LOGTHING_ERROR,
- "Problem deleting skshash: %s",
- db_strerror(ret));
- if (ret == DB_LOCK_DEADLOCK) {
- deadlock = true;
- }
- }
-
- ret = cursor->c_close(cursor);
- cursor = NULL;
- }
-
if (!deadlock) {
key.data = &keyid;
key.size = sizeof(keyid);
bool deadlock = false;
struct skshash hash;
- keyid = get_keyid(publickey);
+ get_keyid(publickey, &keyid);
if (!intrans) {
db4_starttrans();