diff options
Diffstat (limited to 'g10/keyserver.c')
-rw-r--r-- | g10/keyserver.c | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/g10/keyserver.c b/g10/keyserver.c index 2df47a0c5..48a6a9b73 100644 --- a/g10/keyserver.c +++ b/g10/keyserver.c @@ -90,6 +90,10 @@ parse_keyserver_options(char *options) opt.keyserver_options.refresh_add_fake_v3_keyids=1; else if(strcasecmp(tok,"no-refresh-add-fake-v3-keyids")==0) opt.keyserver_options.refresh_add_fake_v3_keyids=0; + else if(strcasecmp(tok,"auto-key-retrieve")==0) + opt.keyserver_options.refresh_add_fake_v3_keyids=1; + else if(strcasecmp(tok,"no-auto-key-retrieve")==0) + opt.keyserver_options.refresh_add_fake_v3_keyids=0; else if(strlen(tok)>0) add_to_strlist(&opt.keyserver_options.other,tok); @@ -676,22 +680,37 @@ keyserver_import(STRLIST users) return rc; } -int -keyserver_import_keyid(u32 *keyid) +int +keyserver_import_fprint(const byte *fprint,size_t fprint_len) { - STRLIST sl=NULL; - char key[17]; - int ret; + KEYDB_SEARCH_DESC desc; + + memset(&desc,0,sizeof(desc)); + + if(fprint_len==16) + desc.mode=KEYDB_SEARCH_MODE_FPR16; + else if(fprint_len==20) + desc.mode=KEYDB_SEARCH_MODE_FPR20; + else + return -1; - sprintf(key,"%08lX%08lX",(ulong)keyid[0],(ulong)keyid[1]); + memcpy(desc.u.fpr,fprint,fprint_len); - add_to_strlist(&sl,key); + return keyserver_work(GET,NULL,&desc,1); +} - ret=keyserver_import(sl); +int +keyserver_import_keyid(u32 *keyid) +{ + KEYDB_SEARCH_DESC desc; - free_strlist(sl); + memset(&desc,0,sizeof(desc)); - return ret; + desc.mode=KEYDB_SEARCH_MODE_LONG_KID; + desc.u.kid[0]=keyid[0]; + desc.u.kid[1]=keyid[1]; + + return keyserver_work(GET,NULL,&desc,1); } /* code mostly stolen from do_export_stream */ |