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