summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2010-09-29 10:29:18 +0300
committerPanu Matilainen <pmatilai@redhat.com>2010-09-29 10:48:19 +0300
commit825691afb2a8e2c0b3c6a031950f3c7855dc4c6e (patch)
tree45ed5e2435acee8d13d2bede521cd4c9f31642ff
parent17b433ce8c8613199e40b3b27e9ca5398a2027e3 (diff)
downloadrpm-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.c72
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;
}