X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb_hkp.c;h=79d5c4b302e30d433a63664092fedba9895b2bc4;hb=42977c5361ef21c99bc157e9c7edbba49243014f;hp=7c7b31a4a50e75bc7acc290bb6333e81c8c07cf7;hpb=8e0907be1d73011075a99a0c029c56664e12843e;p=onak.git diff --git a/keydb_hkp.c b/keydb_hkp.c index 7c7b31a..79d5c4b 100644 --- a/keydb_hkp.c +++ b/keydb_hkp.c @@ -13,16 +13,18 @@ * 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. + * this program. If not, see . */ +#include +#include #include #include #include -#include #include +#include "build-config.h" + #include "armor.h" #include "charfuncs.h" #include "keydb.h" @@ -31,11 +33,11 @@ #include "mem.h" #include "onak-conf.h" #include "parsekey.h" -#include "version.h" struct onak_hkp_dbctx { + struct onak_db_config *config; /* Our DB config info */ CURL *curl; - char hkpbase[1024]; + char hkpbase[512]; }; static int hkp_parse_url(struct onak_hkp_dbctx *privctx, const char *url) @@ -48,11 +50,11 @@ static int hkp_parse_url(struct onak_hkp_dbctx *privctx, const char *url) proto[0] = host[0] = 0; port = 0; - matched = sscanf(url, "%5[a-z]://%256[a-zA-Z0-9.]:%u", proto, host, + matched = sscanf(url, "%5[a-z]://%256[a-zA-Z0-9.-]:%u", proto, host, &port); if (matched < 2) { proto[0] = 0; - matched = sscanf(url, "%256[a-zA-Z0-9.]:%u", host, &port); + sscanf(url, "%256[a-zA-Z0-9.-]:%u", host, &port); } if (host[0] == 0) { @@ -163,7 +165,7 @@ static int hkp_fetch_key_id(struct onak_dbctx *dbctx, * hkp_fetch_key_fp - Given a fingerprint fetch the key from HKP server. */ static int hkp_fetch_key_fp(struct onak_dbctx *dbctx, - uint8_t *fp, size_t fpsize, + struct openpgp_fingerprint *fingerprint, struct openpgp_publickey **publickey, bool intrans) { @@ -171,19 +173,19 @@ static int hkp_fetch_key_fp(struct onak_dbctx *dbctx, char keyurl[1024]; int i, ofs; - if (fpsize > MAX_FINGERPRINT_LEN) { + if (fingerprint->length > MAX_FINGERPRINT_LEN) { return 0; } ofs = snprintf(keyurl, sizeof(keyurl), "%s/lookup?op=get&search=0x", privctx->hkpbase); - if ((ofs + fpsize * 2 + 1)> sizeof(keyurl)) { + if ((ofs + fingerprint->length * 2 + 1)> sizeof(keyurl)) { return 0; } - for (i = 0; i < fpsize; i++) { - ofs += sprintf(&keyurl[ofs], "%02X", fp[i]); + for (i = 0; i < fingerprint->length; i++) { + ofs += sprintf(&keyurl[ofs], "%02X", fingerprint->fp[i]); } return (hkp_fetch_key_url(dbctx, keyurl, publickey, intrans)); @@ -269,13 +271,13 @@ static int hkp_store_key(struct onak_dbctx *dbctx, /** * delete_key - Given a keyid delete the key from storage. - * @keyid: The keyid to delete. + * @fp: The fingerprint of the key to delete. * @intrans: If we're already in a transaction. * * No op for HKP. */ static int hkp_delete_key(struct onak_dbctx *dbctx, - uint64_t keyid, bool intrans) + struct openpgp_fingerprint *fp, bool intrans) { return -1; } @@ -319,7 +321,6 @@ static void hkp_endtrans(struct onak_dbctx *dbctx) */ #define NEED_KEYID2UID 1 #define NEED_GETKEYSIGS 1 -#define NEED_GETFULLKEYID 1 #define NEED_UPDATEKEYS 1 #include "keydb.c" @@ -346,7 +347,7 @@ static void hkp_cleanupdb(struct onak_dbctx *dbctx) * * We initialize CURL here. */ -struct onak_dbctx *keydb_hkp_init(bool readonly) +struct onak_dbctx *keydb_hkp_init(struct onak_db_config *dbcfg, bool readonly) { struct onak_dbctx *dbctx; struct onak_hkp_dbctx *privctx; @@ -357,6 +358,7 @@ struct onak_dbctx *keydb_hkp_init(bool readonly) return NULL; } + dbctx->config = dbcfg; dbctx->priv = privctx = malloc(sizeof(*privctx)); dbctx->cleanupdb = hkp_cleanupdb; dbctx->starttrans = hkp_starttrans; @@ -370,12 +372,13 @@ struct onak_dbctx *keydb_hkp_init(bool readonly) dbctx->getkeysigs = generic_getkeysigs; dbctx->cached_getkeysigs = generic_cached_getkeysigs; dbctx->keyid2uid = generic_keyid2uid; - dbctx->getfullkeyid = generic_getfullkeyid; dbctx->iterate_keys = hkp_iterate_keys; - if (!hkp_parse_url(privctx, config.db_dir)) { + if (!hkp_parse_url(privctx, dbcfg->location)) { exit(EXIT_FAILURE); } + logthing(LOGTHING_INFO, "Using %s as HKP forwarding URL.", + privctx->hkpbase); curl_global_init(CURL_GLOBAL_DEFAULT); privctx->curl = curl_easy_init(); if (privctx->curl == NULL) {