981
981
#define KEYSERVER_ARGS_KEEP " -o \"%O\" \"%I\""
982
982
#define KEYSERVER_ARGS_NOKEEP " -o \"%o\" \"%i\""
985
keyserver_spawn(enum ks_action action,strlist_t list,KEYDB_SEARCH_DESC *desc,
986
int count,int *prog,unsigned char **fpr,size_t *fpr_len,
987
struct keyserver_spec *keyserver)
985
/* Check whether a key matches the search description. The filter
986
returns 0 if the key shall be imported. Note that this kind of
987
filter is not related to the iobuf filters. */
989
keyserver_retrieval_filter (PKT_public_key *pk, PKT_secret_key *sk, void *arg)
991
KEYDB_SEARCH_DESC *desc = arg;
993
byte fpr[MAX_FINGERPRINT_LEN];
996
/* Secret keys are not expected from a keyserver. Do not import. */
998
return G10ERR_GENERAL;
1000
fingerprint_from_pk (pk, fpr, &fpr_len);
1001
keyid_from_pk (pk, keyid);
1003
/* Compare requested and returned fingerprints if available. */
1004
if (desc->mode == KEYDB_SEARCH_MODE_FPR20)
1006
if (fpr_len != 20 || memcmp (fpr, desc->u.fpr, 20))
1007
return G10ERR_GENERAL;
1009
else if (desc->mode == KEYDB_SEARCH_MODE_FPR16)
1011
if (fpr_len != 16 || memcmp (fpr, desc->u.fpr, 16))
1012
return G10ERR_GENERAL;
1014
else if (desc->mode == KEYDB_SEARCH_MODE_LONG_KID)
1016
if (keyid[0] != desc->u.kid[0] || keyid[1] != desc->u.kid[1])
1017
return G10ERR_GENERAL;
1019
else if (desc->mode == KEYDB_SEARCH_MODE_SHORT_KID)
1021
if (keyid[1] != desc->u.kid[1])
1022
return G10ERR_GENERAL;
1030
keyserver_spawn (enum ks_action action, strlist_t list, KEYDB_SEARCH_DESC *desc,
1031
int count, int *prog, unsigned char **fpr, size_t *fpr_len,
1032
struct keyserver_spec *keyserver)
989
1034
int ret=0,i,gotversion=0,outofband=0;
1504
1549
but we better protect against rogue keyservers. */
1506
1551
import_keys_stream (spawn->fromchild, stats_handle, fpr, fpr_len,
1507
(opt.keyserver_options.import_options
1508
| IMPORT_NO_SECKEY));
1552
(opt.keyserver_options.import_options
1553
| IMPORT_NO_SECKEY),
1554
keyserver_retrieval_filter, desc);
1510
1556
import_print_stats(stats_handle);
1511
1557
import_release_stats_handle(stats_handle);
1540
keyserver_work(enum ks_action action,strlist_t list,KEYDB_SEARCH_DESC *desc,
1541
int count,unsigned char **fpr,size_t *fpr_len,
1542
struct keyserver_spec *keyserver)
1587
keyserver_work (enum ks_action action, strlist_t list, KEYDB_SEARCH_DESC *desc,
1588
int count, unsigned char **fpr, size_t *fpr_len,
1589
struct keyserver_spec *keyserver)
1712
1762
return keyserver_work(KS_GET,NULL,&desc,1,NULL,NULL,keyserver);
1715
/* code mostly stolen from do_export_stream */
1766
/* Code mostly stolen from do_export_stream */
1717
1768
keyidlist(strlist_t users,KEYDB_SEARCH_DESC **klist,int *count,int fakev3)
1719
int rc=0,ndesc,num=100;
1720
1773
KBNODE keyblock=NULL,node;
1721
1774
KEYDB_HANDLE kdbhd;
1722
1775
KEYDB_SEARCH_DESC *desc;
2046
2099
rc=import_keys_stream (key, NULL, fpr, fpr_len,
2047
2100
(opt.keyserver_options.import_options
2048
| IMPORT_NO_SECKEY));
2101
| IMPORT_NO_SECKEY), NULL, NULL);
2050
2103
opt.no_armor=armor_status;