RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/lib/ rpmts.c rpm/rpmdb/ librpmdb.vers pkgi...

From: Jeff Johnson <jbj@rpm5.org>
Date: Sat 29 Sep 2007 - 19:06:26 CEST
Message-Id: <20070929170626.0713E34845F@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:   29-Sep-2007 19:06:26
  Branch: HEAD                             Handle: 2007092918062500

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmts.c
    rpm/rpmdb               librpmdb.vers pkgio.c rpmdb.h sqlite.c

  Log:
    - move rpmtsFindPubkey() and rpmtsOp() to rpmdb for forward linkage.

  Summary:
    Revision    Changes     Path
    1.1647      +1  -0      rpm/CHANGES
    2.101       +0  -259    rpm/lib/rpmts.c
    1.18        +2  -0      rpm/rpmdb/librpmdb.vers
    1.7         +237 -21    rpm/rpmdb/pkgio.c
    1.65        +8  -6      rpm/rpmdb/rpmdb.h
    1.14        +1  -1      rpm/rpmdb/sqlite.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1646 -r1.1647 CHANGES
  --- rpm/CHANGES	29 Sep 2007 16:23:39 -0000	1.1646
  +++ rpm/CHANGES	29 Sep 2007 17:06:25 -0000	1.1647
  @@ -1,4 +1,5 @@
   4.5 -> 5.0:
  +    - jbj: move rpmtsFindPubkey() and rpmtsOp() to rpmdb for forward linkage.
       - jbj: add _RPMTS_PRINT to keep rpmrollback.c happy.
       - jbj: rearrange package.c internals to new locations.
       - jbj: start eliminating rpmtsSetSig by inlining.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmts.c
  ============================================================================
  $ cvs diff -u -r2.100 -r2.101 rpmts.c
  --- rpm/lib/rpmts.c	29 Sep 2007 16:23:39 -0000	2.100
  +++ rpm/lib/rpmts.c	29 Sep 2007 17:06:25 -0000	2.101
  @@ -3,9 +3,6 @@
    * Routine(s) to handle a "rpmts" transaction sets.
    */
   #include "system.h"
  -#if defined(HAVE_KEYUTILS_H)
  -#include <keyutils.h>
  -#endif
   
   #include "rpmio_internal.h"	/* XXX for pgp and beecrypt */
   #include <rpmlib.h>
  @@ -240,204 +237,6 @@
   }
   /*@=compdef@*/
   
  -rpmRC rpmtsFindPubkey(rpmts ts, void * _dig)
  -{
  -    pgpDig dig = (_dig ? _dig : rpmtsDig(ts));
  -    const void * sig = pgpGetSig(dig);
  -    pgpDigParams sigp = pgpGetSignature(dig);
  -    pgpDigParams pubp = pgpGetPubkey(dig);
  -    rpmRC res = RPMRC_NOKEY;
  -    const char * pubkeysource = NULL;
  -#if defined(HAVE_KEYUTILS_H)
  -    int krcache = 1;	/* XXX assume pubkeys are cached in keyutils keyring. */
  -#endif
  -    int xx;
  -
  -    if (sig == NULL || dig == NULL || sigp == NULL || pubp == NULL)
  -	goto exit;
  -
  -#if 0
  -fprintf(stderr, "==> find sig id %08x %08x ts pubkey id %08x %08x\n",
  -pgpGrab(sigp->signid, 4), pgpGrab(sigp->signid+4, 4),
  -pgpGrab(ts->pksignid, 4), pgpGrab(ts->pksignid+4, 4));
  -#endif
  -
  -    /* Lazy free of previous pubkey if pubkey does not match this signature. */
  -    if (memcmp(sigp->signid, ts->pksignid, sizeof(ts->pksignid))) {
  -#if 0
  -fprintf(stderr, "*** free pkt %p[%d] id %08x %08x\n", ts->pkpkt, ts->pkpktlen, pgpGrab(ts->pksignid, 4), pgpGrab(ts->pksignid+4, 4));
  -#endif
  -	ts->pkpkt = _free(ts->pkpkt);
  -	ts->pkpktlen = 0;
  -	memset(ts->pksignid, 0, sizeof(ts->pksignid));
  -    }
  -
  -#if defined(HAVE_KEYUTILS_H)
  -	/* Try keyutils keyring lookup. */
  -    if (krcache && ts->pkpkt == NULL) {
  -	key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
  -	const char * krprefix = "rpm:gpg:pubkey:";
  -	char krfp[32];
  -	char * krn = alloca(strlen(krprefix) + sizeof("12345678"));
  -	long key;
  -
  -	snprintf(krfp, sizeof(krfp), "%08X", pgpGrab(sigp->signid+4, 4));
  -	krfp[sizeof(krfp)-1] = '\0';
  -	*krn = '\0';
  -	(void) stpcpy( stpcpy(krn, krprefix), krfp);
  -
  -	key = keyctl_search(keyring, "user", krn, 0);
  -	xx = keyctl_read(key, NULL, 0);
  -	if (xx > 0) {
  -	    ts->pkpktlen = xx;
  -	    ts->pkpkt = NULL;
  -	    xx = keyctl_read_alloc(key, (void **)&ts->pkpkt);
  -	    if (xx > 0) {
  -		pubkeysource = xstrdup(krn);
  -		krcache = 0;	/* XXX don't bother caching. */
  -	    } else {
  -		ts->pkpkt = _free(ts->pkpkt);
  -		ts->pkpktlen = 0;
  -	    }
  -        }
  -    }
  -#endif
  -
  -    /* Try rpmdb keyring lookup. */
  -    if (ts->pkpkt == NULL) {
  -	int hx = -1;
  -	int ix = -1;
  -	rpmdbMatchIterator mi;
  -	Header h;
  -
  -	/* Retrieve the pubkey that matches the signature. */
  -	mi = rpmtsInitIterator(ts, RPMTAG_PUBKEYS, sigp->signid, sizeof(sigp->signid));
  -	while ((h = rpmdbNextIterator(mi)) != NULL) {
  -	    const char ** pubkeys;
  -	    int_32 pt, pc;
  -
  -	    if (!headerGetEntry(h, RPMTAG_PUBKEYS, &pt, &pubkeys, &pc))
  -		continue;
  -	    hx = rpmdbGetIteratorOffset(mi);
  -	    ix = rpmdbGetIteratorFileNum(mi);
  -/*@-boundsread@*/
  -	    if (ix >= pc
  -	     || b64decode(pubkeys[ix], (void **) &ts->pkpkt, &ts->pkpktlen))
  -		ix = -1;
  -/*@=boundsread@*/
  -	    pubkeys = headerFreeData(pubkeys, pt);
  -	    break;
  -	}
  -	mi = rpmdbFreeIterator(mi);
  -
  -/*@-branchstate@*/
  -	if (ix >= 0) {
  -	    char hnum[32];
  -	    sprintf(hnum, "h#%d", hx);
  -	    pubkeysource = xstrdup(hnum);
  -	} else {
  -	    ts->pkpkt = _free(ts->pkpkt);
  -	    ts->pkpktlen = 0;
  -	}
  -/*@=branchstate@*/
  -    }
  -
  -    /* Try keyserver lookup. */
  -    if (ts->pkpkt == NULL) {
  -	const char * fn = rpmExpand("%{_hkp_keyserver_query}",
  -			pgpHexStr(sigp->signid, sizeof(sigp->signid)), NULL);
  -
  -	xx = 0;
  -	if (fn && *fn != '%') {
  -	    xx = (pgpReadPkts(fn,&ts->pkpkt,&ts->pkpktlen) != PGPARMOR_PUBKEY);
  -	}
  -	fn = _free(fn);
  -/*@-branchstate@*/
  -	if (xx) {
  -	    ts->pkpkt = _free(ts->pkpkt);
  -	    ts->pkpktlen = 0;
  -	} else {
  -	    /* Save new pubkey in local ts keyring for delayed import. */
  -	    pubkeysource = xstrdup("keyserver");
  -	}
  -/*@=branchstate@*/
  -    }
  -
  -#ifdef	NOTNOW
  -    /* Try filename from macro lookup. */
  -    if (ts->pkpkt == NULL) {
  -	const char * fn = rpmExpand("%{_gpg_pubkey}", NULL);
  -
  -	xx = 0;
  -	if (fn && *fn != '%')
  -	    xx = (pgpReadPkts(fn,&ts->pkpkt,&ts->pkpktlen) != PGPARMOR_PUBKEY);
  -	fn = _free(fn);
  -	if (xx) {
  -	    ts->pkpkt = _free(ts->pkpkt);
  -	    ts->pkpktlen = 0;
  -	} else {
  -	    pubkeysource = xstrdup("macro");
  -	}
  -    }
  -#endif
  -
  -    /* Was a matching pubkey found? */
  -    if (ts->pkpkt == NULL || ts->pkpktlen == 0)
  -	goto exit;
  -
  -    /* Retrieve parameters from pubkey packet(s). */
  -    xx = pgpPrtPkts(ts->pkpkt, ts->pkpktlen, dig, 0);
  -
  -    /* Do the parameters match the signature? */
  -    if (sigp->pubkey_algo == pubp->pubkey_algo
  -#ifdef	NOTYET
  -     && sigp->hash_algo == pubp->hash_algo
  -#endif
  -     &&	!memcmp(sigp->signid, pubp->signid, sizeof(sigp->signid)) )
  -    {
  -
  -	/* XXX Verify any pubkey signatures. */
  -
  -#if defined(HAVE_KEYUTILS_H)
  -	/* Save the pubkey in the keyutils keyring. */
  -	if (krcache) {
  -	    key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
  -	    const char * krprefix = "rpm:gpg:pubkey:";
  -	    char krfp[32];
  -	    char * krn = alloca(strlen(krprefix) + sizeof("12345678"));
  -
  -	    snprintf(krfp, sizeof(krfp), "%08X", pgpGrab(sigp->signid+4, 4));
  -	    krfp[sizeof(krfp)-1] = '\0';
  -	    *krn = '\0';
  -	    (void) stpcpy( stpcpy(krn, krprefix), krfp);
  -	    (void) add_key("user", krn, ts->pkpkt, ts->pkpktlen, keyring);
  -	}
  -#endif
  -
  -	/* Pubkey packet looks good, save the signer id. */
  -/*@-boundsread@*/
  -	memcpy(ts->pksignid, pubp->signid, sizeof(ts->pksignid));
  -/*@=boundsread@*/
  -
  -	if (pubkeysource)
  -	    rpmMessage(RPMMESS_DEBUG, "========== %s pubkey id %08x %08x (%s)\n",
  -		(sigp->pubkey_algo == PGPPUBKEYALGO_DSA ? "DSA" :
  -		(sigp->pubkey_algo == PGPPUBKEYALGO_RSA ? "RSA" : "???")),
  -		pgpGrab(sigp->signid, 4), pgpGrab(sigp->signid+4, 4),
  -		pubkeysource);
  -
  -	res = RPMRC_OK;
  -    }
  -
  -exit:
  -    pubkeysource = _free(pubkeysource);
  -    if (res != RPMRC_OK) {
  -	ts->pkpkt = _free(ts->pkpkt);
  -	ts->pkpktlen = 0;
  -    }
  -    return res;
  -}
  -
   int rpmtsCloseSDB(rpmts ts)
   {
       int rc = 0;
  @@ -715,21 +514,6 @@
       return ps;
   }
   
  -#ifdef	DYING
  -void rpmtsCleanDig(rpmts ts)
  -{
  -    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);
  -    }
  -}
  -#endif
  -
   void rpmtsClean(rpmts ts)
   {
       rpmtsi pi; rpmte p;
  @@ -1103,38 +887,6 @@
       return otid;
   }
   
  -#ifdef	DYING
  -int rpmtsSetSig(rpmts ts,
  -		int_32 sigtag, int_32 sigtype, const void * sig, int_32 siglen)
  -{
  -    int ret = 0;
  -    if (ts != NULL) {
  -	const void * osig = pgpGetSig(rpmtsDig(ts));
  -	int_32 osigtype = pgpGetSigtype(rpmtsDig(ts));
  -	if (osig && osigtype)
  -	    osig = headerFreeData(osig, osigtype);
  -	ret = pgpSetSig(rpmtsDig(ts), sigtag, sigtype, sig, siglen);
  -    }
  -    return ret;
  -}
  -
  -pgpDig rpmtsDig(rpmts ts)
  -{
  -/*@-mods@*/ /* FIX: hide lazy malloc for now */
  -    if (ts->dig == NULL) {
  -	ts->dig = pgpNewDig(0);
  -	(void) pgpSetFindPubkey(ts->dig, (int (*)(void *, void *))rpmtsFindPubkey, ts);
  -    }
  -/*@=mods@*/
  -    return ts->dig;
  -}
  -
  -pgpDigParams rpmtsPubkey(const rpmts ts)
  -{
  -    return pgpGetPubkey(rpmtsDig(ts));
  -}
  -#endif
  -
   rpmdb rpmtsGetRdb(rpmts ts)
   {
       rpmdb rdb = NULL;
  @@ -1511,17 +1263,6 @@
       return (ts != NULL ? ts->prefcolor : 0);
   }
   
  -rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
  -{
  -    rpmop op = NULL;
  -
  -    if (ts != NULL && opx >= 0 && opx < RPMTS_OP_MAX)
  -	op = ts->ops + opx;
  -/*@-usereleased -compdef @*/
  -    return op;
  -/*@=usereleased =compdef @*/
  -}
  -
   int rpmtsSetNotifyCallback(rpmts ts,
   		rpmCallbackFunction notify, rpmCallbackData notifyData)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/librpmdb.vers
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 librpmdb.vers
  --- rpm/rpmdb/librpmdb.vers	29 Sep 2007 16:23:40 -0000	1.17
  +++ rpm/rpmdb/librpmdb.vers	29 Sep 2007 17:06:25 -0000	1.18
  @@ -87,6 +87,8 @@
       rpmTags;
       rpmtsCleanDig;
       rpmtsDig;
  +    rpmtsFindPubkey;
  +    rpmtsOp;
       rpmtsPubkey;
       rpmtsSetSig;
       sqlitevec;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 pkgio.c
  --- rpm/rpmdb/pkgio.c	29 Sep 2007 16:23:40 -0000	1.6
  +++ rpm/rpmdb/pkgio.c	29 Sep 2007 17:06:25 -0000	1.7
  @@ -11,9 +11,16 @@
   
   #include <netinet/in.h>
   
  +#if defined(HAVE_KEYUTILS_H)
  +#include <keyutils.h>
  +#endif
  +
   #include <rpmio_internal.h>
   #include <rpmlib.h>
   
  +#include <rpmdb.h>		/* XXX rpmtsFindPubkey */
  +#include <rpmmacro.h>
  +
   #define	_RPMTS_INTERNAL
   #include "rpmts.h"
   
  @@ -29,17 +36,229 @@
   
   /*===============================================*/
   
  -void rpmtsCleanDig(rpmts ts)
  +rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
   {
  -    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);
  +    rpmop op = NULL;
  +
  +    if (ts != NULL && opx >= 0 && opx < RPMTS_OP_MAX)
  +	op = ts->ops + opx;
  +/*@-usereleased -compdef @*/
  +    return op;
  +/*@=usereleased =compdef @*/
  +}
  +
  +pgpDigParams rpmtsPubkey(const rpmts ts)
  +{
  +    return pgpGetPubkey(rpmtsDig(ts));
  +}
  +
  +rpmRC rpmtsFindPubkey(rpmts ts, void * _dig)
  +{
  +    pgpDig dig = (_dig ? _dig : rpmtsDig(ts));
  +    const void * sig = pgpGetSig(dig);
  +    pgpDigParams sigp = pgpGetSignature(dig);
  +    pgpDigParams pubp = pgpGetPubkey(dig);
  +    rpmRC res = RPMRC_NOKEY;
  +    const char * pubkeysource = NULL;
  +#if defined(HAVE_KEYUTILS_H)
  +    int krcache = 1;	/* XXX assume pubkeys are cached in keyutils keyring. */
  +#endif
  +    int xx;
  +
  +    if (sig == NULL || dig == NULL || sigp == NULL || pubp == NULL)
  +	goto exit;
  +
  +#if 0
  +fprintf(stderr, "==> find sig id %08x %08x ts pubkey id %08x %08x\n",
  +pgpGrab(sigp->signid, 4), pgpGrab(sigp->signid+4, 4),
  +pgpGrab(ts->pksignid, 4), pgpGrab(ts->pksignid+4, 4));
  +#endif
  +
  +    /* Lazy free of previous pubkey if pubkey does not match this signature. */
  +    if (memcmp(sigp->signid, ts->pksignid, sizeof(ts->pksignid))) {
  +#if 0
  +fprintf(stderr, "*** free pkt %p[%d] id %08x %08x\n", ts->pkpkt, ts->pkpktlen, pgpGrab(ts->pksignid, 4), pgpGrab(ts->pksignid+4, 4));
  +#endif
  +	ts->pkpkt = _free(ts->pkpkt);
  +	ts->pkpktlen = 0;
  +	memset(ts->pksignid, 0, sizeof(ts->pksignid));
  +    }
  +
  +#if defined(HAVE_KEYUTILS_H)
  +	/* Try keyutils keyring lookup. */
  +    if (krcache && ts->pkpkt == NULL) {
  +	key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
  +	const char * krprefix = "rpm:gpg:pubkey:";
  +	char krfp[32];
  +	char * krn = alloca(strlen(krprefix) + sizeof("12345678"));
  +	long key;
  +
  +	snprintf(krfp, sizeof(krfp), "%08X", pgpGrab(sigp->signid+4, 4));
  +	krfp[sizeof(krfp)-1] = '\0';
  +	*krn = '\0';
  +	(void) stpcpy( stpcpy(krn, krprefix), krfp);
  +
  +	key = keyctl_search(keyring, "user", krn, 0);
  +	xx = keyctl_read(key, NULL, 0);
  +	if (xx > 0) {
  +	    ts->pkpktlen = xx;
  +	    ts->pkpkt = NULL;
  +	    xx = keyctl_read_alloc(key, (void **)&ts->pkpkt);
  +	    if (xx > 0) {
  +		pubkeysource = xstrdup(krn);
  +		krcache = 0;	/* XXX don't bother caching. */
  +	    } else {
  +		ts->pkpkt = _free(ts->pkpkt);
  +		ts->pkpktlen = 0;
  +	    }
  +        }
  +    }
  +#endif
  +
  +    /* Try rpmdb keyring lookup. */
  +    if (ts->pkpkt == NULL) {
  +	int hx = -1;
  +	int ix = -1;
  +	rpmdbMatchIterator mi;
  +	Header h;
  +
  +	/* Retrieve the pubkey that matches the signature. */
  +	mi = rpmtsInitIterator(ts, RPMTAG_PUBKEYS, sigp->signid, sizeof(sigp->signid));
  +	while ((h = rpmdbNextIterator(mi)) != NULL) {
  +	    const char ** pubkeys;
  +	    int_32 pt, pc;
  +
  +	    if (!headerGetEntry(h, RPMTAG_PUBKEYS, &pt, &pubkeys, &pc))
  +		continue;
  +	    hx = rpmdbGetIteratorOffset(mi);
  +	    ix = rpmdbGetIteratorFileNum(mi);
  +/*@-boundsread@*/
  +	    if (ix >= pc
  +	     || b64decode(pubkeys[ix], (void **) &ts->pkpkt, &ts->pkpktlen))
  +		ix = -1;
  +/*@=boundsread@*/
  +	    pubkeys = headerFreeData(pubkeys, pt);
  +	    break;
  +	}
  +	mi = rpmdbFreeIterator(mi);
  +
  +/*@-branchstate@*/
  +	if (ix >= 0) {
  +	    char hnum[32];
  +	    sprintf(hnum, "h#%d", hx);
  +	    pubkeysource = xstrdup(hnum);
  +	} else {
  +	    ts->pkpkt = _free(ts->pkpkt);
  +	    ts->pkpktlen = 0;
  +	}
  +/*@=branchstate@*/
  +    }
  +
  +    /* Try keyserver lookup. */
  +    if (ts->pkpkt == NULL) {
  +	const char * fn = rpmExpand("%{_hkp_keyserver_query}",
  +			pgpHexStr(sigp->signid, sizeof(sigp->signid)), NULL);
  +
  +	xx = 0;
  +	if (fn && *fn != '%') {
  +	    xx = (pgpReadPkts(fn,&ts->pkpkt,&ts->pkpktlen) != PGPARMOR_PUBKEY);
  +	}
  +	fn = _free(fn);
  +/*@-branchstate@*/
  +	if (xx) {
  +	    ts->pkpkt = _free(ts->pkpkt);
  +	    ts->pkpktlen = 0;
  +	} else {
  +	    /* Save new pubkey in local ts keyring for delayed import. */
  +	    pubkeysource = xstrdup("keyserver");
  +	}
  +/*@=branchstate@*/
  +    }
  +
  +#ifdef	NOTNOW
  +    /* Try filename from macro lookup. */
  +    if (ts->pkpkt == NULL) {
  +	const char * fn = rpmExpand("%{_gpg_pubkey}", NULL);
  +
  +	xx = 0;
  +	if (fn && *fn != '%')
  +	    xx = (pgpReadPkts(fn,&ts->pkpkt,&ts->pkpktlen) != PGPARMOR_PUBKEY);
  +	fn = _free(fn);
  +	if (xx) {
  +	    ts->pkpkt = _free(ts->pkpkt);
  +	    ts->pkpktlen = 0;
  +	} else {
  +	    pubkeysource = xstrdup("macro");
  +	}
  +    }
  +#endif
  +
  +    /* Was a matching pubkey found? */
  +    if (ts->pkpkt == NULL || ts->pkpktlen == 0)
  +	goto exit;
  +
  +    /* Retrieve parameters from pubkey packet(s). */
  +    xx = pgpPrtPkts(ts->pkpkt, ts->pkpktlen, dig, 0);
  +
  +    /* Do the parameters match the signature? */
  +    if (sigp->pubkey_algo == pubp->pubkey_algo
  +#ifdef	NOTYET
  +     && sigp->hash_algo == pubp->hash_algo
  +#endif
  +     &&	!memcmp(sigp->signid, pubp->signid, sizeof(sigp->signid)) )
  +    {
  +
  +	/* XXX Verify any pubkey signatures. */
  +
  +#if defined(HAVE_KEYUTILS_H)
  +	/* Save the pubkey in the keyutils keyring. */
  +	if (krcache) {
  +	    key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
  +	    const char * krprefix = "rpm:gpg:pubkey:";
  +	    char krfp[32];
  +	    char * krn = alloca(strlen(krprefix) + sizeof("12345678"));
  +
  +	    snprintf(krfp, sizeof(krfp), "%08X", pgpGrab(sigp->signid+4, 4));
  +	    krfp[sizeof(krfp)-1] = '\0';
  +	    *krn = '\0';
  +	    (void) stpcpy( stpcpy(krn, krprefix), krfp);
  +	    (void) add_key("user", krn, ts->pkpkt, ts->pkpktlen, keyring);
  +	}
  +#endif
  +
  +	/* Pubkey packet looks good, save the signer id. */
  +/*@-boundsread@*/
  +	memcpy(ts->pksignid, pubp->signid, sizeof(ts->pksignid));
  +/*@=boundsread@*/
  +
  +	if (pubkeysource)
  +	    rpmMessage(RPMMESS_DEBUG, "========== %s pubkey id %08x %08x (%s)\n",
  +		(sigp->pubkey_algo == PGPPUBKEYALGO_DSA ? "DSA" :
  +		(sigp->pubkey_algo == PGPPUBKEYALGO_RSA ? "RSA" : "???")),
  +		pgpGrab(sigp->signid, 4), pgpGrab(sigp->signid+4, 4),
  +		pubkeysource);
  +
  +	res = RPMRC_OK;
       }
  +
  +exit:
  +    pubkeysource = _free(pubkeysource);
  +    if (res != RPMRC_OK) {
  +	ts->pkpkt = _free(ts->pkpkt);
  +	ts->pkpktlen = 0;
  +    }
  +    return res;
  +}
  +
  +pgpDig rpmtsDig(rpmts ts)
  +{
  +/*@-mods@*/ /* FIX: hide lazy malloc for now */
  +    if (ts->dig == NULL) {
  +        ts->dig = pgpNewDig(0);
  +        (void) pgpSetFindPubkey(ts->dig, (int (*)(void *, void *))rpmtsFindPubkey, ts);
  +    }
  +/*@=mods@*/
  +    return ts->dig;
   }
   
   int rpmtsSetSig(rpmts ts,
  @@ -56,20 +275,17 @@
       return ret;
   }
   
  -pgpDig rpmtsDig(rpmts ts)
  +void rpmtsCleanDig(rpmts ts)
   {
  -/*@-mods@*/ /* FIX: hide lazy malloc for now */
  -    if (ts->dig == NULL) {
  -        ts->dig = pgpNewDig(0);
  -        (void) pgpSetFindPubkey(ts->dig, (int (*)(void *, void *))rpmtsFindPubkey, ts);
  +    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);
       }
  -/*@=mods@*/
  -    return ts->dig;
  -}
  -
  -pgpDigParams rpmtsPubkey(const rpmts ts)
  -{
  -    return pgpGetPubkey(rpmtsDig(ts));
   }
   
   /*===============================================*/
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.h
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 rpmdb.h
  --- rpm/rpmdb/rpmdb.h	19 Aug 2007 21:12:23 -0000	1.64
  +++ rpm/rpmdb/rpmdb.h	29 Sep 2007 17:06:25 -0000	1.65
  @@ -839,11 +839,6 @@
   
   /*@=exportlocal@*/
   
  -/** \ingroup rpmdb
  - */
  -unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi)
  -	/*@*/;
  -
   /** \ingroup dbi
    * Destroy set of index database items.
    * @param set	set of index database items
  @@ -1030,7 +1025,7 @@
   	/*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/;
   
   /** \ingroup rpmdb
  - * Return header join key for current position of rpm database iterator.
  + * Return header instance join key for current position of rpmdb iterator.
    * @param mi		rpm database iterator
    * @return		current header join key
    */
  @@ -1038,6 +1033,13 @@
   	/*@*/;
   
   /** \ingroup rpmdb
  + * Return header tag index join key for current position of rpmdb iterator.
  + * @param mi		rpm database iterator
  + */
  +unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi)
  +	/*@*/;
  +
  +/** \ingroup rpmdb
    * Return number of elements in rpm database iterator.
    * @param mi		rpm database iterator
    * @return		number of elements
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/sqlite.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sqlite.c
  --- rpm/rpmdb/sqlite.c	1 Aug 2007 17:58:37 -0000	1.13
  +++ rpm/rpmdb/sqlite.c	29 Sep 2007 17:06:25 -0000	1.14
  @@ -988,7 +988,7 @@
       if (dbi->dbi_perms) {
           if ((0644 /* = SQLite hard-coded default */ & dbi->dbi_perms) != dbi->dbi_perms) {
               /* add requested permission bits which are still missing (semantic) */
  -            chmod(dbfname, dbi->dbi_perms);
  +            Chmod(dbfname, dbi->dbi_perms);
           }
           umask(umask_safed);
       }
  @@ .
Received on Sat Sep 29 19:06:26 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.