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