From e0878672e314f2b7080e26fac5676f2b77773c2c Mon Sep 17 00:00:00 2001 From: root Date: Sun, 7 Jul 1996 22:11:13 +0000 Subject: [PATCH] mods for new Header-style signatures CVS patchset: 729 CVS date: 1996/07/07 22:11:13 --- build/pack.c | 32 +++++++++++++++++--------------- rpm.c | 21 +++++++++++++++------ 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/build/pack.c b/build/pack.c index a644e4e..473511b 100644 --- a/build/pack.c +++ b/build/pack.c @@ -25,8 +25,7 @@ #include "files.h" #include "reqprov.h" -static int writeMagic(int fd, char *name, unsigned short type, - unsigned short sigtype); +static int writeMagic(int fd, char *name, unsigned short type); static int cpio_gzip(int fd, char *tempdir, char *writePtr, int *archiveSize); static int generateRPM(char *name, /* name-version-release */ char *filename, /* output filename */ @@ -45,16 +44,11 @@ static int generateRPM(char *name, /* name-version-release */ char *fileList, /* list of files for cpio */ char *passPhrase) { - unsigned short sigtype; + int_32 sigtype; char *sigtarget, *archiveTemp; int fd, ifd, count, archiveSize; unsigned char buffer[8192]; - - /* Figure out the signature type */ - if ((sigtype = sigLookupType()) == RPMSIG_BAD) { - error(RPMERR_BADSIGTYPE, "Bad signature type in rpmrc"); - return RPMERR_BADSIGTYPE; - } + Header sig; /* Write the archive to a temp file so we can get the size */ archiveTemp = tempnam("/var/tmp", "rpmbuild"); @@ -79,7 +73,7 @@ static int generateRPM(char *name, /* name-version-release */ unlink(archiveTemp); return 1; } - writeHeader(fd, header); + writeHeader(fd, header, HEADER_MAGIC); ifd = open(archiveTemp, O_RDONLY, 0644); while ((count = read(ifd, buffer, sizeof(buffer))) > 0) { if (count == -1) { @@ -110,7 +104,7 @@ static int generateRPM(char *name, /* name-version-release */ unlink(filename); return 1; } - if (writeMagic(fd, name, type, sigtype)) { + if (writeMagic(fd, name, type)) { close(fd); unlink(sigtarget); unlink(filename); @@ -118,14 +112,23 @@ static int generateRPM(char *name, /* name-version-release */ } /* Generate the signature */ + sigtype = sigLookupType(); message(MESS_VERBOSE, "Generating signature: %d\n", sigtype); fflush(stdout); - if (makeSignature(sigtarget, sigtype, fd, passPhrase)) { + sig = newSignature(); + addSignature(sig, sigtarget, SIGTAG_SIZE, passPhrase); + addSignature(sig, sigtarget, SIGTAG_MD5, passPhrase); + if (sigtype>0) { + addSignature(sig, sigtarget, sigtype, passPhrase); + } + if (writeSignature(fd, sig)) { close(fd); unlink(sigtarget); unlink(filename); + freeSignature(sig); return 1; } + freeSignature(sig); /* Append the header and archive */ ifd = open(sigtarget, O_RDONLY); @@ -157,8 +160,7 @@ static int generateRPM(char *name, /* name-version-release */ } static int writeMagic(int fd, char *name, - unsigned short type, - unsigned short sigtype) + unsigned short type) { struct rpmlead lead; @@ -168,7 +170,7 @@ static int writeMagic(int fd, char *name, lead.type = type; lead.archnum = getArchNum(); lead.osnum = getOsNum(); - lead.signature_type = sigtype; + lead.signature_type = RPMSIG_HEADERSIG; /* New-style signature */ strncpy(lead.name, name, sizeof(lead.name)); writeLead(fd, &lead); diff --git a/rpm.c b/rpm.c index 3ad027f..8c9186d 100755 --- a/rpm.c +++ b/rpm.c @@ -687,13 +687,22 @@ int main(int argc, char ** argv) { if (signIt) { if (bigMode == MODE_REBUILD || bigMode == MODE_BUILD || bigMode == MODE_RESIGN) { - if ((optind != argc) && (sigLookupType() == RPMSIG_MD5_PGP)) { - if (!(passPhrase = getPassPhrase("Enter pass phrase: "))) { - fprintf(stderr, _("Pass phrase check failed\n")); + if (optind != argc) { + switch (sigLookupType()) { + case SIGTAG_PGP: + if (!(passPhrase = getPassPhrase("Enter pass phrase: "))) { + fprintf(stderr, _("Pass phrase check failed\n")); + exit(1); + } else { + fprintf(stderr, _("Pass phrase is good.\n")); + passPhrase = strdup(passPhrase); + } + break; + case 0: + break; + default: + fprintf(stderr, "Invalid signature spec in rc file\n"); exit(1); - } else { - fprintf(stderr, _("Pass phrase is good.\n")); - passPhrase = strdup(passPhrase); } } } else { -- 2.7.4