/*
* keydb_pg.c - Routines to store and fetch keys in a PostGres database.
*
- * Jonathan McDowell <noodles@earth.li>
+ * Copyright 2002-2004 Jonathan McDowell <noodles@earth.li>
*
- * Copyright 2002-2004 Project Purple
+ * 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 <postgresql/libpq-fe.h>
/**
* keydb_fetchchar - Fetches a char from a file.
*/
-static int keydb_fetchchar(void *fd, size_t count, unsigned char *c)
+static int keydb_fetchchar(void *fd, size_t count, void *c)
{
return (!lo_read(dbconn, *(int *) fd, (char *) c, count));
}
/**
* keydb_putchar - Puts a char to a file.
*/
-static int keydb_putchar(void *fd, size_t count, unsigned char *c)
+static int keydb_putchar(void *fd, size_t count, void *c)
{
return !(lo_write(dbconn, *(int *) fd, (char *) c, count));
}
if (keyid > 0xFFFFFFFF) {
snprintf(statement, 1023,
- "SELECT keydata FROM onak_keys WHERE keyid = '%llX'",
+ "SELECT keydata FROM onak_keys WHERE keyid = '%"
+ PRIX64 "'",
keyid);
} else {
snprintf(statement, 1023,
"SELECT keydata FROM onak_keys WHERE keyid "
- "LIKE '%%%llX'",
+ "LIKE '%%%" PRIX64 "'",
keyid);
}
result = PQexec(dbconn, statement);
}
snprintf(statement, 1023,
- "SELECT keydata FROM onak_keys WHERE keyid = '%llX'",
+ "SELECT keydata FROM onak_keys WHERE keyid = '%"
+ PRIX64 "'",
keyid);
result = PQexec(dbconn, statement);
PQclear(result);
snprintf(statement, 1023,
- "DELETE FROM onak_keys WHERE keyid = '%llX'",
+ "DELETE FROM onak_keys WHERE keyid = '%" PRIX64 "'",
keyid);
result = PQexec(dbconn, statement);
PQclear(result);
snprintf(statement, 1023,
- "DELETE FROM onak_sigs WHERE signee = '%llX'",
+ "DELETE FROM onak_sigs WHERE signee = '%" PRIX64 "'",
keyid);
result = PQexec(dbconn, statement);
PQclear(result);
snprintf(statement, 1023,
- "DELETE FROM onak_uids WHERE keyid = '%llX'",
+ "DELETE FROM onak_uids WHERE keyid = '%" PRIX64 "'",
keyid);
result = PQexec(dbconn, statement);
} else if (PQresultStatus(result) != PGRES_TUPLES_OK) {
logthing(LOGTHING_ERROR,
- "Problem retrieving key (%llX) from DB.",
+ "Problem retrieving key (%" PRIX64
+ ") from DB.",
keyid);
}
char *primary = NULL;
char *safeuid = NULL;
int i;
+ uint64_t keyid;
if (!intrans) {
result = PQexec(dbconn, "BEGIN");
PQclear(result);
}
+ get_keyid(publickey, &keyid);
+
/*
* Delete the key if we already have it.
*
* it definitely needs updated.
*/
if (update) {
- pg_delete_key(get_keyid(publickey), true);
+ pg_delete_key(keyid, true);
}
next = publickey->next;
snprintf(statement, 1023,
"INSERT INTO onak_keys (keyid, keydata) VALUES "
- "('%llX', '%d')",
- get_keyid(publickey),
+ "('%" PRIX64 "', '%d')",
+ keyid,
key_oid);
result = PQexec(dbconn, statement);
snprintf(statement, 1023,
"INSERT INTO onak_uids "
"(keyid, uid, pri) "
- "VALUES ('%llX', '%s', '%c')",
- get_keyid(publickey),
+ "VALUES ('%" PRIX64 "', '%s', '%c')",
+ keyid,
safeuid,
(uids[i] == primary) ? 't' : 'f');
result = PQexec(dbconn, statement);
packets = packets->next) {
snprintf(statement, 1023,
"INSERT INTO onak_sigs (signer, signee) "
- "VALUES ('%llX', '%llX')",
+ "VALUES ('%" PRIX64 "', '%" PRIX64 "')",
sig_keyid(packets->packet),
- get_keyid(publickey));
+ keyid);
result = PQexec(dbconn, statement);
PQclear(result);
}
char *uid = NULL;
snprintf(statement, 1023,
- "SELECT uid FROM onak_uids WHERE keyid = '%llX' AND pri = 't'",
+ "SELECT uid FROM onak_uids WHERE keyid = '%" PRIX64
+ "' AND pri = 't'",
keyid);
result = PQexec(dbconn, statement);
uid = strdup(PQgetvalue(result, 0, 0));
} else if (PQresultStatus(result) != PGRES_TUPLES_OK) {
logthing(LOGTHING_ERROR,
- "Problem retrieving key (%llX) from DB.",
+ "Problem retrieving key (%" PRIX64
+ ") from DB.",
keyid);
}
}
snprintf(statement, 1023,
- "SELECT DISTINCT signer FROM onak_sigs WHERE signee = '%llX'",
+ "SELECT DISTINCT signer FROM onak_sigs WHERE signee = '%"
+ PRIX64 "'",
keyid);
result = PQexec(dbconn, statement);
struct openpgp_publickey *key = NULL;
PGresult *result = NULL;
char *oids = NULL;
- char statement[1024];
int fd = -1;
int i = 0;
int numkeys = 0;