X-Git-Url: https://the.earth.li/gitweb/?p=onak.git;a=blobdiff_plain;f=keydb_hkp.c;h=b4540e15ab915d5cf01542a72cb87964106c4040;hp=8bb8c02bd2e3a5b5ccc504ecd36d856ad12899bb;hb=adc800dbc424a1e246dd4a82a0c2e88eeda25531;hpb=83ae316a7b14e55418349e87d1a1942a0627ae14 diff --git a/keydb_hkp.c b/keydb_hkp.c index 8bb8c02..b4540e1 100644 --- a/keydb_hkp.c +++ b/keydb_hkp.c @@ -13,14 +13,14 @@ * 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 "armor.h" @@ -34,8 +34,9 @@ #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 +49,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; - 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 +164,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 +172,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)); @@ -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; @@ -373,9 +375,11 @@ struct onak_dbctx *keydb_hkp_init(bool readonly) 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) {