RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/build/ pack.c rpm/lib/ package.c poptALL.c psm.c rpmche...

From: Jeff Johnson <jbj@rpm5.org>
Date: Fri 17 Aug 2007 - 18:04:52 CEST
Message-Id: <20070817160452.50D6E348456@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:   17-Aug-2007 18:04:52
  Branch: HEAD                             Handle: 2007081717045001

  Modified files:
    rpm                     system.h
    rpm/build               pack.c
    rpm/lib                 package.c poptALL.c psm.c rpmchecksig.c rpmlead.c
                            rpmlead.h rpmlib.h signature.c

  Log:
    make rpmlead more opaque.

  Summary:
    Revision    Changes     Path
    2.222       +1  -0      rpm/build/pack.c
    2.149       +1  -4      rpm/lib/package.c
    2.42        +9  -1      rpm/lib/poptALL.c
    2.219       +1  -0      rpm/lib/psm.c
    1.130       +7  -14     rpm/lib/rpmchecksig.c
    2.45        +12 -4      rpm/lib/rpmlead.c
    2.19        +38 -2      rpm/lib/rpmlead.h
    2.430       +0  -28     rpm/lib/rpmlib.h
    2.180       +1  -0      rpm/lib/signature.c
    2.83        +2  -0      rpm/system.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/build/pack.c
  ============================================================================
  $ cvs diff -u -r2.221 -r2.222 pack.c
  --- rpm/build/pack.c	17 Aug 2007 05:36:04 -0000	2.221
  +++ rpm/build/pack.c	17 Aug 2007 16:04:50 -0000	2.222
  @@ -22,6 +22,7 @@
   #include "buildio.h"
   
   #include "signature.h"
  +#define	_RPMLEAD_INTERNAL
   #include "rpmlead.h"
   #include "debug.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/package.c
  ============================================================================
  $ cvs diff -u -r2.148 -r2.149 package.c
  --- rpm/lib/package.c	17 Aug 2007 09:54:18 -0000	2.148
  +++ rpm/lib/package.c	17 Aug 2007 16:04:50 -0000	2.149
  @@ -779,7 +779,6 @@
       pgpDig dig;
       char buf[8*BUFSIZ];
       ssize_t count;
  -    struct rpmlead * l = alloca(sizeof(*l));
       Header sigh = NULL;
       int_32 sigtag;
       int_32 sigtype;
  @@ -814,10 +813,8 @@
       /* Snapshot current I/O counters (cached persistent I/O reuses counters) */
       (void) rpmswAdd(opsave, fdstat_op(fd, FDSTAT_READ));
   
  -    memset(l, 0, sizeof(*l));
  -
   if (!_nolead) {
  -    rc = readLead(fd, l, &msg);
  +    rc = readLead(fd, NULL, &msg);
       switch (rc) {
       default:
   	rpmError(RPMERR_READLEAD, "%s: %s\n", fn, msg);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/poptALL.c
  ============================================================================
  $ cvs diff -u -r2.41 -r2.42 poptALL.c
  --- rpm/lib/poptALL.c	1 Aug 2007 19:03:01 -0000	2.41
  +++ rpm/lib/poptALL.c	17 Aug 2007 16:04:50 -0000	2.42
  @@ -26,18 +26,26 @@
   /*@access headerTagIndices @*/		/* XXX rpmcliFini */
   /*@access headerTagTableEntry @*/	/* XXX rpmcliFini */
   
  -int _nolead = 0;
  +/*@unchecked@*/
  +extern int _nolead;
  +
  +/*@unchecked@*/
   int _nosigh = 0;
  +
  +/*@unchecked@*/
   extern int _newmagic;
   
   /*@unchecked@*/
   static int _debug = 0;
   
  +#if defined(POPT_ARGFLAG_RANDOM)
  +/** @todo Eliminate. */
   /*@unchecked@*/
   extern int _rsegfault;
   
   /*@unchecked@*/
   extern int _wsegfault;
  +#endif
   
   /*@-exportheadervar@*/
   /*@unchecked@*/
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/psm.c
  ============================================================================
  $ cvs diff -u -r2.218 -r2.219 psm.c
  --- rpm/lib/psm.c	9 Aug 2007 17:30:49 -0000	2.218
  +++ rpm/lib/psm.c	17 Aug 2007 16:04:51 -0000	2.219
  @@ -27,6 +27,7 @@
   #define	_RPMTS_INTERNAL		/* XXX ts->notify */
   #include "rpmts.h"
   
  +#define	_RPMLEAD_INTERNAL
   #include "rpmlead.h"		/* writeLead proto */
   #include "signature.h"		/* signature constants */
   #include "misc.h"		/* XXX stripTrailingChar() */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmchecksig.c
  ============================================================================
  $ cvs diff -u -r1.129 -r1.130 rpmchecksig.c
  --- rpm/lib/rpmchecksig.c	17 Aug 2007 09:54:18 -0000	1.129
  +++ rpm/lib/rpmchecksig.c	17 Aug 2007 16:04:51 -0000	1.130
  @@ -14,6 +14,7 @@
   
   #include "rpmts.h"
   
  +#define	_RPMLEAD_INTERNAL
   #include "rpmlead.h"
   #include "signature.h"
   #include "misc.h"	/* XXX for makeTempFile() */
  @@ -184,7 +185,7 @@
   {
       FD_t fd = NULL;
       FD_t ofd = NULL;
  -    struct rpmlead lead, *l = &lead;
  +    struct rpmlead *lead = NULL;
       int_32 sigtag;
       const char *fn, *tfn;
       const char *sigtarget = NULL;
  @@ -209,12 +210,8 @@
   	if (manageFile(&fd, &fn, O_RDONLY, 0))
   	    goto exit;
   
  -/*@-boundswrite@*/
  -	memset(l, 0, sizeof(*l));
  -/*@=boundswrite@*/
  -
   if (!_nolead) {
  -	rc = readLead(fd, l, &msg);
  +	rc = readLead(fd, &lead, &msg);
   	if (rc != RPMRC_OK) {
   	    rpmError(RPMERR_READLEAD, "%s: %s\n", fn, msg);
   	    msg = _free(msg);
  @@ -379,8 +376,8 @@
   	    goto exit;
   
   if (!_nolead) {
  -	l->signature_type = RPMSIGTYPE_HEADERSIG;
  -	rc = writeLead(ofd, l);
  +	lead->signature_type = RPMSIGTYPE_HEADERSIG;
  +	rc = writeLead(ofd, lead);
   	if (rc != RPMRC_OK) {
   	    rpmError(RPMERR_WRITELEAD, _("%s: writeLead failed: %s\n"), tfn,
   		Fstrerror(ofd));
  @@ -420,6 +417,7 @@
       if (fd)	(void) manageFile(&fd, NULL, 0, res);
       if (ofd)	(void) manageFile(&ofd, NULL, 0, res);
   
  +    lead = _free(lead);
       sigh = rpmFreeSignature(sigh);
   
       if (sigtarget) {
  @@ -739,7 +737,6 @@
   		const char * fn)
   {
       int res2, res3;
  -    struct rpmlead lead, *l = &lead;
       char result[1024];
       char buf[8192], * b;
       char missingKeys[7164], * m;
  @@ -760,13 +757,9 @@
       int nosignatures = !(qva->qva_flags & VERIFY_SIGNATURE);
   
       {
  -/*@-boundswrite@*/
  -	memset(l, 0, sizeof(*l));
  -/*@=boundswrite@*/
  -	l->signature_type = RPMSIGTYPE_HEADERSIG;
   
   if (!_nolead) {
  -	rc = readLead(fd, l, &msg);
  +	rc = readLead(fd, NULL, &msg);
   	if (rc != RPMRC_OK) {
   	    rpmError(RPMERR_READLEAD, "%s: %s\n", fn, msg);
   	    msg = _free(msg);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmlead.c
  ============================================================================
  $ cvs diff -u -r2.44 -r2.45 rpmlead.c
  --- rpm/lib/rpmlead.c	17 Aug 2007 09:54:18 -0000	2.44
  +++ rpm/lib/rpmlead.c	17 Aug 2007 16:04:51 -0000	2.45
  @@ -14,9 +14,13 @@
   #include <rpmio.h>
   
   #include "signature.h"
  +#define	_RPMLEAD_INTERNAL
   #include "rpmlead.h"
   #include "debug.h"
   
  +/*@unchecked@*/
  +int _nolead = SUPPORT_RPMLEAD;
  +
   /*@unchecked@*/ /*@observer@*/
   static unsigned char lead_magic[] = {
       RPMLEAD_MAGIC0, RPMLEAD_MAGIC1, RPMLEAD_MAGIC2, RPMLEAD_MAGIC3
  @@ -46,17 +50,16 @@
       return RPMRC_OK;
   }
   
  -rpmRC readLead(FD_t fd, struct rpmlead *lead, const char **msg)
  +rpmRC readLead(FD_t fd, struct rpmlead ** leadp, const char ** msg)
   {
  +    struct rpmlead * lead = xcalloc(1, sizeof(*lead));
       char buf[BUFSIZ];
       rpmRC rc = RPMRC_FAIL;		/* assume failure */
       int xx;
   
       buf[0] = '\0';
  +    if (leadp != NULL) *leadp = NULL;
   
  -/*@-boundswrite@*/
  -    memset(lead, 0, sizeof(*lead));
  -/*@=boundswrite@*/
       /*@-type@*/ /* FIX: remove timed read */
       if ((xx = timedRead(fd, (char *)lead, sizeof(*lead))) != sizeof(*lead)) {
   	if (Ferror(fd)) {
  @@ -105,6 +108,11 @@
       rc = RPMRC_OK;
   
   exit:
  +    if (rc == RPMRC_OK && leadp != NULL)
  +	*leadp = lead;
  +    else
  +	lead = _free(lead);
  +	
       if (msg != NULL) {
   	buf[sizeof(buf)-1] = '\0';
   	*msg = xstrdup(buf);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmlead.h
  ============================================================================
  $ cvs diff -u -r2.18 -r2.19 rpmlead.h
  --- rpm/lib/rpmlead.h	17 Aug 2007 09:54:18 -0000	2.18
  +++ rpm/lib/rpmlead.h	17 Aug 2007 16:04:51 -0000	2.19
  @@ -5,10 +5,45 @@
    * \file lib/rpmlead.h
    * Routines to read and write an rpm lead structure for a a package.
    */
  +
  +#if defined(_RPMLEAD_INTERNAL)
  +
  +#define	RPMLEAD_BINARY 0
  +#define	RPMLEAD_SOURCE 1
  +
  +#define	RPMLEAD_MAGIC0 0xed
  +#define	RPMLEAD_MAGIC1 0xab
  +#define	RPMLEAD_MAGIC2 0xee
  +#define	RPMLEAD_MAGIC3 0xdb
  +
  +#define	RPMLEAD_SIZE 96		/*!< Don't rely on sizeof(struct) */
  +
  +/** \ingroup lead
  + * The lead data structure.
  + * The lead needs to be 8 byte aligned.
  + * @deprecated The lead (except for signature_type) is legacy.
  + * @todo Don't use any information from lead.
  + */
  +struct rpmlead {
  +    unsigned char magic[4];
  +    unsigned char major;
  +    unsigned char minor;
  +    short type;
  +    short archnum;
  +    char name[66];
  +    short osnum;
  +    short signature_type;	/*!< Signature header type (RPMSIG_HEADERSIG) */
  +/*@unused@*/ char reserved[16];	/*!< Pad to 96 bytes -- 8 byte aligned! */
  +} ;
  +#endif
  +
   #ifdef __cplusplus
   extern "C" {
   #endif
   
  +/*@unchecked@*/
  +extern int _nolead;
  +
   /** \ingroup lead
    * Write lead to file handle.
    * @param fd		file handle
  @@ -22,11 +57,12 @@
   /** \ingroup lead
    * Read lead from file handle.
    * @param fd		file handle
  - * @retval lead		package lead
  + * @retval *leadp	package lead
    * @retval *msg		failure msg
    * @return		rpmRC return code
    */
  -rpmRC readLead(FD_t fd, /*@out@*/ struct rpmlead *lead, const char ** msg)
  +rpmRC readLead(FD_t fd, /*@null@*/ /*@out@*/ struct rpmlead ** leadp,
  +		const char ** msg)
   	/*@modifies fd, *lead, *msg @*/;
   
   #ifdef __cplusplus
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmlib.h
  ============================================================================
  $ cvs diff -u -r2.429 -r2.430 rpmlib.h
  --- rpm/lib/rpmlib.h	3 Aug 2007 20:46:39 -0000	2.429
  +++ rpm/lib/rpmlib.h	17 Aug 2007 16:04:51 -0000	2.430
  @@ -982,34 +982,6 @@
   }
   #endif
   
  -#define	RPMLEAD_BINARY 0
  -#define	RPMLEAD_SOURCE 1
  -
  -#define	RPMLEAD_MAGIC0 0xed
  -#define	RPMLEAD_MAGIC1 0xab
  -#define	RPMLEAD_MAGIC2 0xee
  -#define	RPMLEAD_MAGIC3 0xdb
  -
  -#define	RPMLEAD_SIZE 96		/*!< Don't rely on sizeof(struct) */
  -
  -/** \ingroup lead
  - * The lead data structure.
  - * The lead needs to be 8 byte aligned.
  - * @deprecated The lead (except for signature_type) is legacy.
  - * @todo Don't use any information from lead.
  - */
  -struct rpmlead {
  -    unsigned char magic[4];
  -    unsigned char major;
  -    unsigned char minor;
  -    short type;
  -    short archnum;
  -    char name[66];
  -    short osnum;
  -    short signature_type;	/*!< Signature header type (RPMSIG_HEADERSIG) */
  -/*@unused@*/ char reserved[16];	/*!< Pad to 96 bytes -- 8 byte aligned! */
  -} ;
  -
   /* ==================================================================== */
   /** \name RPMK */
   /*@{*/
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/signature.c
  ============================================================================
  $ cvs diff -u -r2.179 -r2.180 signature.c
  --- rpm/lib/signature.c	17 Aug 2007 09:54:19 -0000	2.179
  +++ rpm/lib/signature.c	17 Aug 2007 16:04:51 -0000	2.180
  @@ -13,6 +13,7 @@
   
   #include "misc.h"	/* XXX for dosetenv() and makeTempFile() */
   #include "legacy.h"	/* XXX for mdbinfile() */
  +#define	_RPMLEAD_INTERNAL
   #include "rpmlead.h"
   #include "signature.h"
   #include "header_internal.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/system.h
  ============================================================================
  $ cvs diff -u -r2.82 -r2.83 system.h
  --- rpm/system.h	14 Aug 2007 17:42:01 -0000	2.82
  +++ rpm/system.h	17 Aug 2007 16:04:50 -0000	2.83
  @@ -720,6 +720,8 @@
   #define SUPPORT_RPMV3_VERIFY_RSA	1
   #define SUPPORT_RPMV3_VERIFY_DSA	1
   
  +#define	SUPPORT_RPMLEAD		0	/* XXX default is add lead. */
  +
   /**
    * Turn off pgp/pgp5 signing (hasn't been looked at seriously for years).
    */
  @@ .
Received on Fri Aug 17 18:04:52 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.