RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  j...@rpm5.org
  Module: rpm                              Date:   23-Jun-2010 08:51:55
  Branch: HEAD                             Handle: 2010062306515401

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmchecksig.c
    rpm/rpmdb               pkgio.c

  Log:
    - pgp: retrieve pubkey from package header (if present).

  Summary:
    Revision    Changes     Path
    1.3398      +1  -0      rpm/CHANGES
    1.238       +25 -0      rpm/lib/rpmchecksig.c
    1.118       +17 -2      rpm/rpmdb/pkgio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3397 -r1.3398 CHANGES
  --- rpm/CHANGES       23 Jun 2010 06:47:29 -0000      1.3397
  +++ rpm/CHANGES       23 Jun 2010 06:51:54 -0000      1.3398
  @@ -1,6 +1,7 @@
   5.3.2 -> 5.4a1:
   
   5.3.1 -> 5.3.2:
  +    - jbj: pgp: retrieve pubkey from package header (if present).
       - jbj: pgp: add pgpArmorUnwrap to parse a pubkey from a buffer.
       - jbj: change to last (from first) pubkey in header argv array.
       - jbj: i18n: update po files (Translation Project).
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmchecksig.c
  ============================================================================
  $ cvs diff -u -r1.237 -r1.238 rpmchecksig.c
  --- rpm/lib/rpmchecksig.c     22 May 2010 00:46:18 -0000      1.237
  +++ rpm/lib/rpmchecksig.c     23 Jun 2010 06:51:55 -0000      1.238
  @@ -921,6 +921,7 @@
       HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
       unsigned char buf[4*BUFSIZ];
       ssize_t count;
  +    unsigned ix;
       rpmRC rc;
       int xx;
   
  @@ -940,6 +941,30 @@
   
        dig->nbytes += headerSizeof(h);
   
  +     /* Fish out the autosign pubkey (if present). */
  +     he->tag = RPMTAG_PUBKEYS;
  +     xx = headerGet(h, he, 0);
  +     if (xx && he->p.argv != NULL && he->c > 0)
  +     switch (he->t) {
  +     default:
  +         break;
  +     case RPM_STRING_ARRAY_TYPE:
  +         ix = he->c - 1; /* XXX FIXME: assumes last pubkey */
  +         dig->pub = _free(dig->pub);
  +         dig->publen = 0;
  +         {   rpmiob iob = rpmiobNew(0);
  +             iob = rpmiobAppend(iob, he->p.argv[ix], 0);
  +             xx = pgpArmorUnwrap(iob,(rpmuint8_t **)&dig->pub, &dig->publen);
  +             iob = rpmiobFree(iob);
  +         }
  +         if (xx != PGPARMOR_PUBKEY) {
  +             dig->pub = _free(dig->pub);
  +             dig->publen = 0;
  +         }
  +         break;
  +     }
  +     he->p.ptr = _free(he->p.ptr);
  +
        if (headerIsEntry(h, RPMTAG_HEADERIMMUTABLE)) {
            unsigned char * hmagic = NULL;
            size_t nmagic = 0;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.c
  ============================================================================
  $ cvs diff -u -r1.117 -r1.118 pkgio.c
  --- rpm/rpmdb/pkgio.c 23 Jun 2010 04:55:13 -0000      1.117
  +++ rpm/rpmdb/pkgio.c 23 Jun 2010 06:51:55 -0000      1.118
  @@ -281,6 +281,21 @@
   fprintf(stderr, "\t%s: rpmdb  %p[%u]\n", __FUNCTION__, hkp->pkt, 
hkp->pktlen);
       }
   
  +    /* Try autosign package pubkey (if present). */
  +    if (hkp->pkt == NULL && dig->pub && dig->publen > 0) {
  +     uint8_t keyid[8];
  +
  +        xx = pgpPubkeyFingerprint(dig->pub, dig->publen, keyid);
  +     if (!memcmp(sigp->signid, keyid, sizeof(keyid))) {
  +         hkp->pkt = (uint8_t *) dig->pub;    dig->pub = NULL;
  +         hkp->pktlen = dig->publen;          dig->publen = 0;
  +         pubkeysource = xstrdup("package");
  +validate = -1;       /* XXX rpmhkpValidate is prerequisite for rpmhkpFindKey 
*/
  +if (_rpmhkp_debug)
  +fprintf(stderr, "\t%s: auto   %p[%u]\n", __FUNCTION__, hkp->pkt, 
hkp->pktlen);
  +     }
  +    }
  +
       /* Try keyserver lookup. */
       if (hkp->pkt == NULL) {
        const char * fn = rpmExpand("%{_hkp_keyserver_query}", "0x",
  @@ -321,10 +336,10 @@
   #endif
   
       /* Was a matching pubkey found? */
  -if (_rpmhkp_debug)
  -fprintf(stderr, "\t%s: match  %p[%u]\n", __FUNCTION__, hkp->pkt, 
hkp->pktlen);
       if (hkp->pkt == NULL || hkp->pktlen == 0)
        goto exit;
  +if (_rpmhkp_debug)
  +fprintf(stderr, "\t%s: match  %p[%u]\n", __FUNCTION__, hkp->pkt, 
hkp->pktlen);
   
       /* Split the result into packet array. */
   hkp->pkts = _free(hkp->pkts);        /* XXX memleaks */
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to