diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2010-09-29 10:29:18 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2010-09-29 10:48:19 +0300 |
commit | 825691afb2a8e2c0b3c6a031950f3c7855dc4c6e (patch) | |
tree | 45ed5e2435acee8d13d2bede521cd4c9f31642ff | |
parent | 17b433ce8c8613199e40b3b27e9ca5398a2027e3 (diff) | |
download | rpm-825691afb2a8e2c0b3c6a031950f3c7855dc4c6e.tar.gz rpm-825691afb2a8e2c0b3c6a031950f3c7855dc4c6e.tar.bz2 rpm-825691afb2a8e2c0b3c6a031950f3c7855dc4c6e.zip |
Split internal header signature and digest generation to separate functions
- These have fairly little in common in reality: one is always
automatically created on package generation, the other is optional
extra step requiring passphrases and all sorts of other things.
- The switch-cases are now fairly hysterical but leaving them for
later spring-clean to keep changes minimal for this step.
- No functional changes (supposedly ;)
-rw-r--r-- | lib/signature.c | 72 |
1 files changed, 46 insertions, 26 deletions
diff --git a/lib/signature.c b/lib/signature.c index c82d2298c..7aa8f8cdf 100644 --- a/lib/signature.c +++ b/lib/signature.c @@ -461,6 +461,49 @@ static int makeHDRSignature(Header sigh, const char * file, rpmSigTag sigTag, uint8_t * pkt = NULL; size_t pktlen; char * fn = NULL; + int ret = -1; /* assume failure. */ + + switch (sigTag) { + case RPMSIGTAG_DSA: + case RPMSIGTAG_RSA: + fd = Fopen(file, "r.fdio"); + if (fd == NULL || Ferror(fd)) + goto exit; + h = headerRead(fd, HEADER_MAGIC_YES); + if (h == NULL) + goto exit; + (void) Fclose(fd); + fd = rpmMkTempFile(NULL, &fn); + if (fd == NULL || Ferror(fd)) + goto exit; + if (headerWrite(fd, h, HEADER_MAGIC_YES)) + goto exit; + (void) Fclose(fd); fd = NULL; + if (makeGPGSignature(fn, &sigTag, &pkt, &pktlen, passPhrase) + || !sighdrPut(sigh, sigTag, RPM_BIN_TYPE, pkt, pktlen)) + goto exit; + ret = 0; + break; + default: + goto exit; + break; + } + +exit: + if (fn) { + (void) unlink(fn); + free(fn); + } + free(pkt); + h = headerFree(h); + if (fd != NULL) (void) Fclose(fd); + return ret; +} + +static int makeHDRDigest(Header sigh, const char * file, rpmSigTag sigTag) +{ + Header h = NULL; + FD_t fd = NULL; char * SHA1 = NULL; int ret = -1; /* assume failure. */ @@ -501,37 +544,12 @@ static int makeHDRSignature(Header sigh, const char * file, rpmSigTag sigTag, goto exit; ret = 0; break; - case RPMSIGTAG_DSA: - case RPMSIGTAG_RSA: - fd = Fopen(file, "r.fdio"); - if (fd == NULL || Ferror(fd)) - goto exit; - h = headerRead(fd, HEADER_MAGIC_YES); - if (h == NULL) - goto exit; - (void) Fclose(fd); - fd = rpmMkTempFile(NULL, &fn); - if (fd == NULL || Ferror(fd)) - goto exit; - if (headerWrite(fd, h, HEADER_MAGIC_YES)) - goto exit; - (void) Fclose(fd); fd = NULL; - if (makeGPGSignature(fn, &sigTag, &pkt, &pktlen, passPhrase) - || !sighdrPut(sigh, sigTag, RPM_BIN_TYPE, pkt, pktlen)) - goto exit; - ret = 0; - break; default: goto exit; break; } exit: - if (fn) { - (void) unlink(fn); - free(fn); - } - free(pkt); free(SHA1); h = headerFree(h); if (fd != NULL) (void) Fclose(fd); @@ -586,9 +604,11 @@ int rpmAddSignature(Header sigh, const char * file, rpmSigTag sigTag, } break; case RPMSIGTAG_RSA: case RPMSIGTAG_DSA: - case RPMSIGTAG_SHA1: ret = makeHDRSignature(sigh, file, sigTag, passPhrase); break; + case RPMSIGTAG_SHA1: + ret = makeHDRDigest(sigh, file, sigTag); + break; default: break; } |