RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/lib/ rpmchecksig.c rpmts.c signature.c rpm...

From: Jeff Johnson <jbj@rpm5.org>
Date: Sun 09 Sep 2007 - 21:06:52 CEST
Message-Id: <20070909190652.D17BC348459@rpm5.org>
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   09-Sep-2007 21:06:52
  Branch: HEAD                             Handle: 2007090920065002

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmchecksig.c rpmts.c signature.c
    rpm/rpmdb               hdrfmt.c rpmdb.c
    rpm/rpmio               librpmio.vers rpmio_internal.h rpmpgp.c rpmpgp.h
                            thkp.c tkey.c

  Log:
    - jbj: fix: headerUnload() size implies HEADER_MAGIC_NO, no hackery needed.
    - jbj: sum per-dig digest/signature stats into ts stats in rpmtsCleanDig.
    - jbj: initialize pgpVSFlags with pgpNewDig(vsflags).

  Summary:
    Revision    Changes     Path
    1.1631      +3  -0      rpm/CHANGES
    1.144       +3  -3      rpm/lib/rpmchecksig.c
    2.95        +12 -3      rpm/lib/rpmts.c
    2.190       +2  -2      rpm/lib/signature.c
    1.6         +2  -2      rpm/rpmdb/hdrfmt.c
    1.158       +4  -0      rpm/rpmdb/rpmdb.c
    2.11        +2  -0      rpm/rpmio/librpmio.vers
    2.80        +1  -0      rpm/rpmio/rpmio_internal.h
    2.58        +22 -1      rpm/rpmio/rpmpgp.c
    2.48        +59 -42     rpm/rpmio/rpmpgp.h
    2.11        +1  -1      rpm/rpmio/thkp.c
    2.17        +1  -1      rpm/rpmio/tkey.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1630 -r1.1631 CHANGES
  --- rpm/CHANGES	9 Sep 2007 17:56:41 -0000	1.1630
  +++ rpm/CHANGES	9 Sep 2007 19:06:50 -0000	1.1631
  @@ -1,4 +1,7 @@
   4.5 -> 5.0:
  +    - jbj: fix: headerUnload() size implies HEADER_MAGIC_NO, no hackery needed.
  +    - jbj: sum per-dig digest/signature stats into ts stats in rpmtsCleanDig.
  +    - jbj: initialize pgpVSFlags with pgpNewDig(vsflags).
       - jbj: add pgpVSFlags for pgpDig control disablers. ugh.
       - jbj: re-add rpmtsCleanDig() to preserve opaque rpmts.
       - jbj: add pgpStatsAccumulator, not fully wired yet.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmchecksig.c
  ============================================================================
  $ cvs diff -u -r1.143 -r1.144 rpmchecksig.c
  --- rpm/lib/rpmchecksig.c	9 Sep 2007 17:56:41 -0000	1.143
  +++ rpm/lib/rpmchecksig.c	9 Sep 2007 19:06:50 -0000	1.144
  @@ -154,7 +154,7 @@
       int rc = 1;
   
       if (headerGetEntry(sig, sigtag, &pkttyp, &pkt, &pktlen) && pkt != NULL) {
  -	pgpDig dig = pgpNewDig();
  +	pgpDig dig = pgpNewDig(0);
   
   	if (!pgpPrtPkts(pkt, pktlen, dig, 0)) {
   /*@-bounds@*/
  @@ -485,11 +485,11 @@
       if ((enc = b64encode(pkt, pktlen)) == NULL)
   	goto exit;
   
  -    dig = pgpNewDig();
  +    dig = pgpNewDig(0);
   
       /* Build header elements. */
       (void) pgpPrtPkts(pkt, pktlen, dig, 0);
  -    pubp = &dig->pubkey;
  +    pubp = pgpGetPubkey(dig);
   
       if (!memcmp(pubp->signid, zeros, sizeof(pubp->signid))
        || !memcmp(pubp->time, zeros, sizeof(pubp->time))
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmts.c
  ============================================================================
  $ cvs diff -u -r2.94 -r2.95 rpmts.c
  --- rpm/lib/rpmts.c	9 Sep 2007 17:56:41 -0000	2.94
  +++ rpm/lib/rpmts.c	9 Sep 2007 19:06:50 -0000	2.95
  @@ -715,8 +715,15 @@
   
   void rpmtsCleanDig(rpmts ts)
   {
  -    (void) rpmtsSetSig(ts, 0, 0, NULL, 0);	/* XXX headerFreeData */
  -    ts->dig = pgpFreeDig(ts->dig);
  +    if (ts && ts->dig) {
  +	int opx;
  +	opx = RPMTS_OP_DIGEST;
  +        (void) rpmswAdd(rpmtsOp(ts, opx), pgpStatsAccumulator(ts->dig, opx));
  +	opx = RPMTS_OP_SIGNATURE;
  +        (void) rpmswAdd(rpmtsOp(ts, opx), pgpStatsAccumulator(ts->dig, opx));
  +	(void) rpmtsSetSig(ts, 0, 0, NULL, 0);	/* XXX headerFreeData */
  +	ts->dig = pgpFreeDig(ts->dig);
  +    }
   }
   
   void rpmtsClean(rpmts ts)
  @@ -893,6 +900,8 @@
       if (ts != NULL) {
   	ovsflags = ts->vsflags;
   	ts->vsflags = vsflags;
  +	if (ts->dig)	/* XXX W2DO? */
  +	    (void) pgpSetVSFlags(ts->dig, vsflags);
       }
       return ovsflags;
   }
  @@ -1138,7 +1147,7 @@
   {
   /*@-mods@*/ /* FIX: hide lazy malloc for now */
       if (ts->dig == NULL)
  -	ts->dig = pgpNewDig();
  +	ts->dig = pgpNewDig(ts->vsflags);
   /*@=mods@*/
       if (ts->dig == NULL)
   	return NULL;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/signature.c
  ============================================================================
  $ cvs diff -u -r2.189 -r2.190 signature.c
  --- rpm/lib/signature.c	9 Sep 2007 17:56:41 -0000	2.189
  +++ rpm/lib/signature.c	9 Sep 2007 19:06:50 -0000	2.190
  @@ -224,7 +224,7 @@
   
   #ifdef	NOTYET
       /* Parse the signature, change signature tag as appropriate. */
  -    dig = pgpNewDig();
  +    dig = pgpNewDig(0);
   
       (void) pgpPrtPkts(*pktp, *pktlenp, dig, 0);
       sigp = pgpGetSignature(dig);
  @@ -359,7 +359,7 @@
       rpmMessage(RPMMESS_DEBUG, D_("Got %d bytes of GPG sig\n"), *pktlenp);
   
       /* Parse the signature, change signature tag as appropriate. */
  -    dig = pgpNewDig();
  +    dig = pgpNewDig(0);
   
       (void) pgpPrtPkts(*pktp, *pktlenp, dig, 0);
       sigp = pgpGetSignature(dig);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c	19 Aug 2007 17:43:04 -0000	1.5
  +++ rpm/rpmdb/hdrfmt.c	9 Sep 2007 19:06:51 -0000	1.6
  @@ -744,8 +744,8 @@
   	if (pktlen == 0 || tag != PGPTAG_SIGNATURE) {
   	    val = xstrdup(_("(not an OpenPGP signature)"));
   	} else {
  -	    pgpDig dig = pgpNewDig();
  -	    pgpDigParams sigp = &dig->signature;
  +	    pgpDig dig = pgpNewDig(0);
  +	    pgpDigParams sigp = pgpGetSignature(dig);
   	    size_t nb = 0;
   	    const char *tempstr;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.157 -r1.158 rpmdb.c
  --- rpm/rpmdb/rpmdb.c	8 Sep 2007 23:44:00 -0000	1.157
  +++ rpm/rpmdb/rpmdb.c	9 Sep 2007 19:06:51 -0000	1.158
  @@ -1865,7 +1865,9 @@
   	{   size_t len;
   	    data->data = headerUnload(mi->mi_h, &len);
   	    data->size = len;	/* XXX data->size is uint32_t */
  +#ifdef	DYING	/* XXX this is needed iff headerSizeof() is used instead. */
   	    data->size -= nb;	/* XXX HEADER_MAGIC_NO */
  +#endif
   	}
   
   	/* Check header digest/signature on blob export (if requested). */
  @@ -3324,7 +3326,9 @@
       (void) headerGetMagic(h, NULL, &nb);
       data->data = headerUnload(h, &len);
       data->size = len;	/* XXX data->size is uint32_t */
  +#ifdef	DYING	/* XXX this is needed iff headerSizeof() is used instead. */
       data->size -= nb;	/* XXX HEADER_MAGIC_NO */
  +#endif
   }
   
   		/* Check header digest/signature on blob export. */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/librpmio.vers
  ============================================================================
  $ cvs diff -u -r2.10 -r2.11 librpmio.vers
  --- rpm/rpmio/librpmio.vers	9 Sep 2007 17:56:42 -0000	2.10
  +++ rpm/rpmio/librpmio.vers	9 Sep 2007 19:06:52 -0000	2.11
  @@ -154,6 +154,7 @@
       pgpGetSigtype;
       pgpGetSig;
       pgpGetSiglen;
  +    pgpGetVSFlags;
       pgpHashTbl;
       pgpKeyServerPrefsTbl;
       pgpNewDig;
  @@ -171,6 +172,7 @@
       pgpPubkeyTbl;
       pgpReadPkts;
       pgpSetSig;
  +    pgpSetVSFlags;
       pgpSigTypeTbl;
       pgpStatsAccumulator;
       pgpSubTypeTbl;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio_internal.h
  ============================================================================
  $ cvs diff -u -r2.79 -r2.80 rpmio_internal.h
  --- rpm/rpmio/rpmio_internal.h	9 Sep 2007 17:56:42 -0000	2.79
  +++ rpm/rpmio/rpmio_internal.h	9 Sep 2007 19:06:52 -0000	2.80
  @@ -68,6 +68,7 @@
       const void * sig;		/*!< Package signature. */
       int32_t siglen;		/*!< Package signature length. */
   
  +    pgpVSFlags vsflags;		/*!< Digest/signature operation disablers. */
       struct rpmop_s dops;	/*!< Digest operation statistics. */
       struct rpmop_s sops;	/*!< Signature operation statistics. */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmpgp.c
  ============================================================================
  $ cvs diff -u -r2.57 -r2.58 rpmpgp.c
  --- rpm/rpmio/rpmpgp.c	9 Sep 2007 17:56:42 -0000	2.57
  +++ rpm/rpmio/rpmpgp.c	9 Sep 2007 19:06:52 -0000	2.58
  @@ -1034,9 +1034,10 @@
       return (rc ? -1 : pp->pktlen);
   }
   
  -pgpDig pgpNewDig(void)
  +pgpDig pgpNewDig(pgpVSFlags vsflags)
   {
       pgpDig dig = xcalloc(1, sizeof(*dig));
  +    dig->vsflags = vsflags;
       return dig;
   }
   
  @@ -1047,6 +1048,8 @@
   	int i;
   	dig->signature.userid = _free(dig->signature.userid);
   	dig->pubkey.userid = _free(dig->pubkey.userid);
  +	memset(&dig->dops, 0, sizeof(dig->dops));
  +	memset(&dig->sops, 0, sizeof(dig->sops));
   	dig->ppkts = _free(dig->ppkts);
   	dig->npkts = 0;
   	dig->signature.hash = _free(dig->signature.hash);
  @@ -1190,6 +1193,24 @@
       return sw;
   }
   
  +pgpVSFlags pgpGetVSFlags(pgpDig dig)
  +{
  +    pgpVSFlags vsflags = 0;
  +    if (dig != NULL)
  +	vsflags = dig->vsflags;
  +    return vsflags;
  +}
  +
  +pgpVSFlags pgpSetVSFlags(pgpDig dig, pgpVSFlags vsflags)
  +{
  +    pgpVSFlags ovsflags = 0;
  +    if (dig != NULL) {
  +	ovsflags = dig->vsflags;
  +	dig->vsflags = vsflags;
  +    }
  +    return ovsflags;
  +}
  +
   static int pgpGrabPkts(const byte * pkts, unsigned int pktlen,
   		/*@out@*/ byte *** pppkts, /*@out@*/ int * pnpkts)
   	/*@modifies *pppkts, *pnpkts @*/
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmpgp.h
  ============================================================================
  $ cvs diff -u -r2.47 -r2.48 rpmpgp.h
  --- rpm/rpmio/rpmpgp.h	9 Sep 2007 17:56:42 -0000	2.47
  +++ rpm/rpmio/rpmpgp.h	9 Sep 2007 19:06:52 -0000	2.48
  @@ -1320,11 +1320,55 @@
   	/*@*/;
   
   /**
  + * Bit(s) to control digest and signature verification.
  + */
  +typedef enum pgpVSFlags_e {
  +    RPMVSF_DEFAULT	= 0,
  +    RPMVSF_NOHDRCHK	= (1 <<  0),
  +    RPMVSF_NEEDPAYLOAD	= (1 <<  1),
  +    /* bit(s) 2-7 unused */
  +    RPMVSF_NOSHA1HEADER	= (1 <<  8),
  +    RPMVSF_NOMD5HEADER	= (1 <<  9),	/* unimplemented */
  +    RPMVSF_NODSAHEADER	= (1 << 10),
  +    RPMVSF_NORSAHEADER	= (1 << 11),
  +    /* bit(s) 12-15 unused */
  +    RPMVSF_NOSHA1	= (1 << 16),	/* unimplemented */
  +    RPMVSF_NOMD5	= (1 << 17),
  +    RPMVSF_NODSA	= (1 << 18),
  +    RPMVSF_NORSA	= (1 << 19)
  +    /* bit(s) 20-31 unused */
  +} pgpVSFlags;
  +
  +#define	_RPMVSF_NODIGESTS	\
  +  ( RPMVSF_NOSHA1HEADER |	\
  +    RPMVSF_NOMD5HEADER |	\
  +    RPMVSF_NOSHA1 |		\
  +    RPMVSF_NOMD5 )
  +
  +#define	_RPMVSF_NOSIGNATURES	\
  +  ( RPMVSF_NODSAHEADER |	\
  +    RPMVSF_NORSAHEADER |	\
  +    RPMVSF_NODSA |		\
  +    RPMVSF_NORSA )
  +
  +#define	_RPMVSF_NOHEADER	\
  +  ( RPMVSF_NOSHA1HEADER |	\
  +    RPMVSF_NOMD5HEADER |	\
  +    RPMVSF_NODSAHEADER |	\
  +    RPMVSF_NORSAHEADER )
  +
  +#define	_RPMVSF_NOPAYLOAD	\
  +  ( RPMVSF_NOSHA1 |		\
  +    RPMVSF_NOMD5 |		\
  +    RPMVSF_NODSA |		\
  +    RPMVSF_NORSA )
  +
  +/**
    * Create a container for parsed OpenPGP packates.
    * @return		container
    */
   /*@only@*/
  -pgpDig pgpNewDig(void)
  +pgpDig pgpNewDig(pgpVSFlags vsflags)
   	/*@*/;
   
   /**
  @@ -1416,49 +1460,22 @@
   void * pgpStatsAccumulator(pgpDig dig, int opx)
           /*@*/;
   
  -/** \ingroup rpmts
  - * Bit(s) to control digest and signature verification.
  +/**
  + * Get verify signatures flag(s).
  + * @param dig		container
  + * @return		verify signatures flags
    */
  -typedef enum pgpVSFlags_e {
  -    RPMVSF_DEFAULT	= 0,
  -    RPMVSF_NOHDRCHK	= (1 <<  0),
  -    RPMVSF_NEEDPAYLOAD	= (1 <<  1),
  -    /* bit(s) 2-7 unused */
  -    RPMVSF_NOSHA1HEADER	= (1 <<  8),
  -    RPMVSF_NOMD5HEADER	= (1 <<  9),	/* unimplemented */
  -    RPMVSF_NODSAHEADER	= (1 << 10),
  -    RPMVSF_NORSAHEADER	= (1 << 11),
  -    /* bit(s) 12-15 unused */
  -    RPMVSF_NOSHA1	= (1 << 16),	/* unimplemented */
  -    RPMVSF_NOMD5	= (1 << 17),
  -    RPMVSF_NODSA	= (1 << 18),
  -    RPMVSF_NORSA	= (1 << 19)
  -    /* bit(s) 20-31 unused */
  -} pgpVSFlags;
  -
  -#define	_RPMVSF_NODIGESTS	\
  -  ( RPMVSF_NOSHA1HEADER |	\
  -    RPMVSF_NOMD5HEADER |	\
  -    RPMVSF_NOSHA1 |		\
  -    RPMVSF_NOMD5 )
  -
  -#define	_RPMVSF_NOSIGNATURES	\
  -  ( RPMVSF_NODSAHEADER |	\
  -    RPMVSF_NORSAHEADER |	\
  -    RPMVSF_NODSA |		\
  -    RPMVSF_NORSA )
  -
  -#define	_RPMVSF_NOHEADER	\
  -  ( RPMVSF_NOSHA1HEADER |	\
  -    RPMVSF_NOMD5HEADER |	\
  -    RPMVSF_NODSAHEADER |	\
  -    RPMVSF_NORSAHEADER )
  +pgpVSFlags pgpGetVSFlags(pgpDig dig)
  +	/*@*/;
   
  -#define	_RPMVSF_NOPAYLOAD	\
  -  ( RPMVSF_NOSHA1 |		\
  -    RPMVSF_NOMD5 |		\
  -    RPMVSF_NODSA |		\
  -    RPMVSF_NORSA )
  +/**
  + * Set verify signatures flag(s).
  + * @param dig		container
  + * @param vsflags	new verify signatures flags
  + * @return		previous value
  + */
  +pgpVSFlags pgpSetVSFlags(pgpDig dig, pgpVSFlags vsflags)
  +	/*@modifies dig @*/;
   
   /**
    * Is buffer at beginning of an OpenPGP packet?
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/thkp.c
  ============================================================================
  $ cvs diff -u -r2.10 -r2.11 thkp.c
  --- rpm/rpmio/thkp.c	14 Jul 2007 22:35:36 -0000	2.10
  +++ rpm/rpmio/thkp.c	9 Sep 2007 19:06:52 -0000	2.11
  @@ -51,7 +51,7 @@
       int rc;
       int ec = 0;
   
  -    dig = pgpNewDig();
  +    dig = pgpNewDig(0);
       for (kip = keyids; *kip; kip += 2) {
   	pgpArmor pa;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/tkey.c
  ============================================================================
  $ cvs diff -u -r2.16 -r2.17 tkey.c
  --- rpm/rpmio/tkey.c	14 Jul 2007 22:40:49 -0000	2.16
  +++ rpm/rpmio/tkey.c	9 Sep 2007 19:06:52 -0000	2.17
  @@ -106,7 +106,7 @@
       int printing = 1;
       int rc;
   
  -    dig = pgpNewDig();
  +    dig = pgpNewDig(0);
   
       mpbzero(&dig->p);	mpbsethex(&dig->p, fips_p);
       mpbzero(&dig->q);	mpbsethex(&dig->q, fips_q);
  @@ .
Received on Sun Sep 9 21:06:52 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.