~ubuntu-branches/ubuntu/vivid/gnupg2/vivid-proposed

« back to all changes in this revision

Viewing changes to g10/keyserver.c

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2014-06-26 14:50:31 UTC
  • mfrom: (14.1.12 sid)
  • Revision ID: package-import@ubuntu.com-20140626145031-tpg2xmbtvomb8erd
Tags: 2.0.24-1ubuntu1
* Merge from Debian, remaining changes:
  - Drop sh prefix from openpgp test environment as it leads to exec
    invocations of sh /bin/bash leading to syntax errors from sh.  Fixes
    FTBFS detected in Ubuntu saucy archive rebuild.
  - Add udev rules to give gpg access to some smartcard readers;
    Debian #543217.
  - debian/gnupg2.udev: udev rules to set ACLs on SCM smartcard readers.
  - Add upstart user job for gpg-agent.

Show diffs side-by-side

added added

removed removed

Lines of Context:
485
485
    {
486
486
      const char *str;
487
487
 
488
 
      str = gcry_pk_algo_name (map_pk_openpgp_to_gcry (keyrec->type));
 
488
      str = openpgp_pk_algo_name (keyrec->type);
489
489
      if(str && strcmp (str, "?"))
490
490
        printf("%s ",str);
491
491
      else
981
981
#define KEYSERVER_ARGS_KEEP " -o \"%O\" \"%I\""
982
982
#define KEYSERVER_ARGS_NOKEEP " -o \"%o\" \"%i\""
983
983
 
984
 
static int
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)
 
984
 
 
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. */
 
988
static int
 
989
keyserver_retrieval_filter (PKT_public_key *pk, PKT_secret_key *sk, void *arg)
 
990
{
 
991
  KEYDB_SEARCH_DESC *desc = arg;
 
992
  u32 keyid[2];
 
993
  byte fpr[MAX_FINGERPRINT_LEN];
 
994
  size_t fpr_len = 0;
 
995
 
 
996
  /* Secret keys are not expected from a keyserver.  Do not import.  */
 
997
  if (sk)
 
998
    return G10ERR_GENERAL;
 
999
 
 
1000
  fingerprint_from_pk (pk, fpr, &fpr_len);
 
1001
  keyid_from_pk (pk, keyid);
 
1002
 
 
1003
  /* Compare requested and returned fingerprints if available. */
 
1004
  if (desc->mode == KEYDB_SEARCH_MODE_FPR20)
 
1005
    {
 
1006
      if (fpr_len != 20 || memcmp (fpr, desc->u.fpr, 20))
 
1007
        return G10ERR_GENERAL;
 
1008
    }
 
1009
  else if (desc->mode == KEYDB_SEARCH_MODE_FPR16)
 
1010
    {
 
1011
      if (fpr_len != 16 || memcmp (fpr, desc->u.fpr, 16))
 
1012
        return G10ERR_GENERAL;
 
1013
    }
 
1014
  else if (desc->mode == KEYDB_SEARCH_MODE_LONG_KID)
 
1015
    {
 
1016
      if (keyid[0] != desc->u.kid[0] || keyid[1] != desc->u.kid[1])
 
1017
        return G10ERR_GENERAL;
 
1018
    }
 
1019
  else if (desc->mode == KEYDB_SEARCH_MODE_SHORT_KID)
 
1020
    {
 
1021
      if (keyid[1] != desc->u.kid[1])
 
1022
        return G10ERR_GENERAL;
 
1023
    }
 
1024
 
 
1025
  return 0;
 
1026
}
 
1027
 
 
1028
 
 
1029
static int
 
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)
988
1033
{
989
1034
  int ret=0,i,gotversion=0,outofband=0;
990
1035
  strlist_t temp;
1504
1549
             but we better protect against rogue keyservers. */
1505
1550
 
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);
1509
1555
 
1510
1556
          import_print_stats(stats_handle);
1511
1557
          import_release_stats_handle(stats_handle);
1536
1582
  return ret;
1537
1583
}
1538
1584
 
 
1585
 
1539
1586
static int
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)
1543
1590
{
1544
 
  int rc=0,ret=0;
 
1591
  int rc = 0;
 
1592
  int ret = 0;
1545
1593
 
1546
1594
  if(!keyserver)
1547
1595
    {
1606
1654
#endif /* ! DISABLE_KEYSERVER_HELPERS*/
1607
1655
}
1608
1656
 
 
1657
 
1609
1658
int
1610
1659
keyserver_export(strlist_t users)
1611
1660
{
1638
1687
  return rc;
1639
1688
}
1640
1689
 
 
1690
 
1641
1691
int
1642
1692
keyserver_import(strlist_t users)
1643
1693
{
1712
1762
  return keyserver_work(KS_GET,NULL,&desc,1,NULL,NULL,keyserver);
1713
1763
}
1714
1764
 
1715
 
/* code mostly stolen from do_export_stream */
 
1765
 
 
1766
/* Code mostly stolen from do_export_stream */
1716
1767
static int
1717
1768
keyidlist(strlist_t users,KEYDB_SEARCH_DESC **klist,int *count,int fakev3)
1718
1769
{
1719
 
  int rc=0,ndesc,num=100;
 
1770
  int rc = 0;
 
1771
  int num = 100;
 
1772
  int ndesc;
1720
1773
  KBNODE keyblock=NULL,node;
1721
1774
  KEYDB_HANDLE kdbhd;
1722
1775
  KEYDB_SEARCH_DESC *desc;
2045
2098
 
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);
2049
2102
 
2050
2103
      opt.no_armor=armor_status;
2051
2104