Start ripping gpg/pgp on signature verify paths.
CVS patchset: 5123 CVS date: 2001/10/19 13:51:20
This commit is contained in:
parent
ca1d809cb1
commit
e2a8424075
|
@ -10,9 +10,11 @@
|
|||
|
||||
-unrecogcomments # XXX ignore doxygen markings
|
||||
|
||||
|
||||
#-deepbreak # shortcut 485 occurences
|
||||
|
||||
+strict # lclint level
|
||||
-includenest 16 # getting deep, sigh
|
||||
|
||||
# --- not-yet at strict level
|
||||
-bitwisesigned # pita
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
-unrecogcomments # XXX ignore doxygen markings
|
||||
|
||||
+strict # lclint level
|
||||
-includenest 16 # getting deep, sigh
|
||||
|
||||
# --- +partial artifacts
|
||||
-declundef
|
||||
|
|
10
lib/rpmlib.h
10
lib/rpmlib.h
|
@ -1756,17 +1756,15 @@ typedef enum rpmVerifySignatureReturn_e {
|
|||
* @param file file name of header+payload
|
||||
* @param sigTag type of signature
|
||||
* @param sig signature itself
|
||||
* @param count no. of bytes in signature
|
||||
* @param siglen no. of bytes in signature
|
||||
* @retval result detailed text result of signature verification
|
||||
* @return result of signature verification
|
||||
*/
|
||||
rpmVerifySignatureReturn rpmVerifySignature(const char *file,
|
||||
int_32 sigTag, const void * sig, int count,
|
||||
int_32 sigTag, const void * sig, int siglen,
|
||||
const rpmDigest dig, /*@out@*/ char * result)
|
||||
/*@globals rpmGlobalMacroContext,
|
||||
fileSystem, internalState @*/
|
||||
/*@modifies *result,
|
||||
fileSystem, internalState @*/;
|
||||
/*@globals fileSystem @*/
|
||||
/*@modifies *result, fileSystem @*/;
|
||||
|
||||
/** \ingroup signature
|
||||
* Destroy signature header from package.
|
||||
|
|
265
lib/signature.c
265
lib/signature.c
|
@ -3,25 +3,12 @@
|
|||
* \file lib/signature.c
|
||||
*/
|
||||
|
||||
/* signature.c - RPM signature functions */
|
||||
|
||||
/* NOTES
|
||||
*
|
||||
* Things have been cleaned up wrt PGP. We can now handle
|
||||
* signatures of any length (which means you can use any
|
||||
* size key you like). We also honor PGPPATH finally.
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
||||
#if HAVE_ASM_BYTEORDER_H
|
||||
#include <asm/byteorder.h>
|
||||
#endif
|
||||
|
||||
#include "rpmio_internal.h"
|
||||
#include <rpmlib.h>
|
||||
#include <rpmmacro.h> /* XXX for rpmGetPath() */
|
||||
|
||||
#include "rpmpgp.h"
|
||||
#include "misc.h" /* XXX for dosetenv() and makeTempFile() */
|
||||
#include "rpmlead.h"
|
||||
#include "signature.h"
|
||||
|
@ -69,7 +56,7 @@ int rpmLookupSignatureType(int action)
|
|||
|
||||
const char * rpmDetectPGPVersion(pgpVersion * pgpVer)
|
||||
{
|
||||
/* Actually this should support having more then one pgp version. */
|
||||
/* Actually this should support having more then one pgp version. */
|
||||
/* At the moment only one version is possible since we only */
|
||||
/* have one %_pgpbin and one %_pgp_path. */
|
||||
|
||||
|
@ -79,7 +66,7 @@ const char * rpmDetectPGPVersion(pgpVersion * pgpVer)
|
|||
if (saved_pgp_version == PGP_UNKNOWN) {
|
||||
char *pgpvbin;
|
||||
struct stat st;
|
||||
|
||||
|
||||
if (!(pgpbin && pgpbin[0] != '%')) {
|
||||
pgpbin = _free(pgpbin);
|
||||
saved_pgp_version = -1;
|
||||
|
@ -111,7 +98,7 @@ const char * rpmDetectPGPVersion(pgpVersion * pgpVer)
|
|||
* @return rpmRC return code
|
||||
*/
|
||||
static inline rpmRC checkSize(FD_t fd, int siglen, int pad, int datalen)
|
||||
/*@globals fileSystem@*/
|
||||
/*@globals fileSystem @*/
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
struct stat st;
|
||||
|
@ -218,7 +205,7 @@ int rpmWriteSignature(FD_t fd, Header h)
|
|||
static byte buf[8] = "\000\000\000\000\000\000\000\000";
|
||||
int sigSize, pad;
|
||||
int rc;
|
||||
|
||||
|
||||
rc = headerWrite(fd, h, HEADER_MAGIC_YES);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@ -247,7 +234,7 @@ Header rpmFreeSignature(Header h)
|
|||
static int makePGPSignature(const char * file, /*@out@*/ void ** sig,
|
||||
/*@out@*/ int_32 * size, /*@null@*/ const char * passPhrase)
|
||||
/*@globals rpmGlobalMacroContext,
|
||||
fileSystem@*/
|
||||
fileSystem @*/
|
||||
/*@modifies *sig, *size, fileSystem @*/
|
||||
{
|
||||
char * sigfile = alloca(1024);
|
||||
|
@ -259,7 +246,7 @@ static int makePGPSignature(const char * file, /*@out@*/ void ** sig,
|
|||
|
||||
inpipe[0] = inpipe[1] = 0;
|
||||
(void) pipe(inpipe);
|
||||
|
||||
|
||||
if (!(pid = fork())) {
|
||||
const char *pgp_path = rpmExpand("%{_pgp_path}", NULL);
|
||||
const char *name = rpmExpand("+myname=\"%{_pgp_name}\"", NULL);
|
||||
|
@ -318,7 +305,7 @@ static int makePGPSignature(const char * file, /*@out@*/ void ** sig,
|
|||
*size = st.st_size;
|
||||
rpmMessage(RPMMESS_DEBUG, _("PGP sig size: %d\n"), *size);
|
||||
*sig = xmalloc(*size);
|
||||
|
||||
|
||||
{ FD_t fd;
|
||||
int rc = 0;
|
||||
fd = Fopen(sigfile, "r.fdio");
|
||||
|
@ -337,7 +324,7 @@ static int makePGPSignature(const char * file, /*@out@*/ void ** sig,
|
|||
}
|
||||
|
||||
rpmMessage(RPMMESS_DEBUG, _("Got %d bytes of PGP sig\n"), *size);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -349,7 +336,7 @@ static int makePGPSignature(const char * file, /*@out@*/ void ** sig,
|
|||
static int makeGPGSignature(const char * file, /*@out@*/ void ** sig,
|
||||
/*@out@*/ int_32 * size, /*@null@*/ const char * passPhrase)
|
||||
/*@globals rpmGlobalMacroContext,
|
||||
fileSystem@*/
|
||||
fileSystem @*/
|
||||
/*@modifies *sig, *size, fileSystem @*/
|
||||
{
|
||||
char * sigfile = alloca(1024);
|
||||
|
@ -362,7 +349,7 @@ static int makeGPGSignature(const char * file, /*@out@*/ void ** sig,
|
|||
|
||||
inpipe[0] = inpipe[1] = 0;
|
||||
(void) pipe(inpipe);
|
||||
|
||||
|
||||
if (!(pid = fork())) {
|
||||
const char *gpg_path = rpmExpand("%{_gpg_path}", NULL);
|
||||
const char *name = rpmExpand("%{_gpg_name}", NULL);
|
||||
|
@ -404,7 +391,7 @@ static int makeGPGSignature(const char * file, /*@out@*/ void ** sig,
|
|||
*size = st.st_size;
|
||||
rpmMessage(RPMMESS_DEBUG, _("GPG sig size: %d\n"), *size);
|
||||
*sig = xmalloc(*size);
|
||||
|
||||
|
||||
{ FD_t fd;
|
||||
int rc = 0;
|
||||
fd = Fopen(sigfile, "r.fdio");
|
||||
|
@ -423,7 +410,7 @@ static int makeGPGSignature(const char * file, /*@out@*/ void ** sig,
|
|||
}
|
||||
|
||||
rpmMessage(RPMMESS_DEBUG, _("Got %d bytes of GPG sig\n"), *size);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -435,7 +422,7 @@ int rpmAddSignature(Header h, const char * file, int_32 sigTag,
|
|||
byte buf[16];
|
||||
void *sig;
|
||||
int ret = -1;
|
||||
|
||||
|
||||
switch (sigTag) {
|
||||
case RPMSIGTAG_SIZE:
|
||||
(void) stat(file, &st);
|
||||
|
@ -469,7 +456,7 @@ int rpmAddSignature(Header h, const char * file, int_32 sigTag,
|
|||
/*@-globuse@*/
|
||||
static rpmVerifySignatureReturn
|
||||
verifySizeSignature(const char * datafile, int_32 size, /*@out@*/ char * result)
|
||||
/*@globals fileSystem@*/
|
||||
/*@globals fileSystem @*/
|
||||
/*@modifies *result, fileSystem @*/
|
||||
{
|
||||
struct stat st;
|
||||
|
@ -487,84 +474,81 @@ verifySizeSignature(const char * datafile, int_32 size, /*@out@*/ char * result)
|
|||
}
|
||||
/*@=globuse@*/
|
||||
|
||||
#define X(_x) (unsigned)((_x) & 0xff)
|
||||
|
||||
/*@-globuse@*/
|
||||
static rpmVerifySignatureReturn
|
||||
verifyMD5Signature(const char * datafile, const byte * sig,
|
||||
/*@out@*/ char * result, md5func fn)
|
||||
/*@globals fileSystem@*/
|
||||
verifyMD5Signature(const char * datafile, const byte * sig, int siglen,
|
||||
const rpmDigest dig, /*@out@*/ char * result, md5func fn)
|
||||
/*@globals fileSystem @*/
|
||||
/*@modifies *result, fileSystem @*/
|
||||
{
|
||||
byte md5sum[16];
|
||||
char * t = result;
|
||||
byte * md5sum = NULL;
|
||||
size_t md5len = 0;
|
||||
int res = RPMSIG_BAD;
|
||||
|
||||
memset(md5sum, 0, sizeof(md5sum));
|
||||
/*@-noeffectuncon@*/ /* FIX: check rc */
|
||||
(void) fn(datafile, md5sum);
|
||||
/*@=noeffectuncon@*/
|
||||
if (memcmp(md5sum, sig, 16)) {
|
||||
sprintf(result, "MD5 sum mismatch\n"
|
||||
"Expected: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
|
||||
"%02x%02x%02x%02x%02x\n"
|
||||
"Saw : %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
|
||||
"%02x%02x%02x%02x%02x\n",
|
||||
X(sig[0]), X(sig[1]), X(sig[2]), X(sig[3]),
|
||||
X(sig[4]), X(sig[5]), X(sig[6]), X(sig[7]),
|
||||
X(sig[8]), X(sig[9]), X(sig[10]), X(sig[11]),
|
||||
X(sig[12]), X(sig[13]), X(sig[14]), X(sig[15]),
|
||||
X(md5sum[0]), X(md5sum[1]), X(md5sum[2]), X(md5sum[3]),
|
||||
X(md5sum[4]), X(md5sum[5]), X(md5sum[6]), X(md5sum[7]),
|
||||
X(md5sum[8]), X(md5sum[9]), X(md5sum[10]), X(md5sum[11]),
|
||||
X(md5sum[12]), X(md5sum[13]), X(md5sum[14]), X(md5sum[15]) );
|
||||
return RPMSIG_BAD;
|
||||
/*@-branchstate@*/
|
||||
if (dig != NULL) {
|
||||
/*@-type@*/
|
||||
DIGEST_CTX ctx = rpmDigestDup(dig->md5ctx);
|
||||
(void) rpmDigestFinal(ctx, (void **)&md5sum, &md5len, 0);
|
||||
/*@=type@*/
|
||||
} else {
|
||||
int xx;
|
||||
md5len = 16;
|
||||
md5sum = xcalloc(1, md5len);
|
||||
xx = fn(datafile, md5sum);
|
||||
}
|
||||
/*@=branchstate@*/
|
||||
|
||||
sprintf(result, "MD5 sum OK: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
|
||||
"%02x%02x%02x%02x%02x\n",
|
||||
X(md5sum[0]), X(md5sum[1]), X(md5sum[2]), X(md5sum[3]),
|
||||
X(md5sum[4]), X(md5sum[5]), X(md5sum[6]), X(md5sum[7]),
|
||||
X(md5sum[8]), X(md5sum[9]), X(md5sum[10]), X(md5sum[11]),
|
||||
X(md5sum[12]), X(md5sum[13]), X(md5sum[14]), X(md5sum[15]) );
|
||||
if (md5len != siglen || memcmp(md5sum, sig, md5len)) {
|
||||
res = RPMSIG_BAD;
|
||||
t = stpcpy(t, " Expected: ");
|
||||
(void) pgpHexCvt(t, sig, siglen);
|
||||
t += strlen(t);
|
||||
t = stpcpy(t, " Actual: ");
|
||||
} else {
|
||||
res = RPMSIG_OK;
|
||||
t = stpcpy(t, "MD5 sum OK: ");
|
||||
}
|
||||
(void) pgpHexCvt(t, md5sum, md5len);
|
||||
|
||||
return RPMSIG_OK;
|
||||
md5sum = _free(md5sum);
|
||||
|
||||
return res;
|
||||
}
|
||||
/*@=globuse@*/
|
||||
|
||||
static rpmVerifySignatureReturn
|
||||
verifyPGPSignature(const char * datafile, const byte * sig, int count,
|
||||
/*@unused@*/ const rpmDigest dig, /*@out@*/ char * result)
|
||||
/*@globals rpmGlobalMacroContext,
|
||||
fileSystem, internalState@*/
|
||||
/*@modifies *result, fileSystem, internalState @*/
|
||||
verifyPGPSignature(/*@unused@*/ const char * datafile,
|
||||
/*@unused@*/ const byte * sig,
|
||||
/*@unused@*/ int siglen,
|
||||
const rpmDigest dig, /*@out@*/ char * result)
|
||||
/*@modifies *result */
|
||||
{
|
||||
int pid, status, outpipe[2];
|
||||
int res, resbc;
|
||||
|
||||
*result = '\0';
|
||||
|
||||
/*@-type@*/
|
||||
if (rsavrfy(&dig->rsa_pk, &dig->rsahm, &dig->c)) {
|
||||
res = resbc = RPMSIG_OK;
|
||||
} else {
|
||||
res = resbc = RPMSIG_BAD;
|
||||
}
|
||||
/*@=type@*/
|
||||
|
||||
#ifdef DYING
|
||||
{ int pid, status, outpipe[2];
|
||||
/*@only@*/ /*@null@*/ const char * sigfile = NULL;
|
||||
byte buf[BUFSIZ];
|
||||
FILE *file;
|
||||
int res = RPMSIG_OK;
|
||||
const char *path;
|
||||
pgpVersion pgpVer;
|
||||
int rc;
|
||||
|
||||
/*@-type@*/
|
||||
rc = rsavrfy(&dig->rsa_pk, &dig->rsahm, &dig->c);
|
||||
|
||||
if (rc == 0 || rpmIsVerbose()) {
|
||||
|
||||
fprintf(stderr, "=============================== RSA verify %s: rc %d\n",
|
||||
datafile, rc);
|
||||
(void) pgpPrtPkts(sig, count, dig, 1);
|
||||
printf("\t n = "); (void)fflush(stdout); mp32println(dig->rsa_pk.n.size, dig->rsa_pk.n.modl);
|
||||
printf("\t e = "); (void)fflush(stdout); mp32println(dig->rsa_pk.e.size, dig->rsa_pk.e.data);
|
||||
printf("\t c = "); (void)fflush(stdout); mp32println(dig->c.size, dig->c.data);
|
||||
printf("\t m = "); (void)fflush(stdout); mp32println(dig->rsahm.size, dig->rsahm.data);
|
||||
}
|
||||
/*@=type@*/
|
||||
|
||||
/* What version do we have? */
|
||||
if ((path = rpmDetectPGPVersion(&pgpVer)) == NULL) {
|
||||
errno = ENOENT;
|
||||
rpmError(RPMERR_EXEC,
|
||||
rpmError(RPMERR_EXEC,
|
||||
_("Could not run pgp. Use --nopgp to skip PGP checks.\n"));
|
||||
_exit(RPMERR_EXEC);
|
||||
}
|
||||
|
@ -584,13 +568,13 @@ fprintf(stderr, "=============================== RSA verify %s: rc %d\n",
|
|||
}
|
||||
sfd = Fopen(sigfile, "w.fdio");
|
||||
if (sfd != NULL && !Ferror(sfd)) {
|
||||
(void) Fwrite(sig, sizeof(char), count, sfd);
|
||||
(void) Fwrite(sig, sizeof(char), siglen, sfd);
|
||||
(void) Fclose(sfd);
|
||||
}
|
||||
#else
|
||||
{ FD_t sfd;
|
||||
if (!makeTempFile(NULL, &sigfile, &sfd)) {
|
||||
(void) Fwrite(sig, sizeof(*sig), count, sfd);
|
||||
(void) Fwrite(sig, sizeof(*sig), siglen, sfd);
|
||||
(void) Fclose(sfd);
|
||||
sfd = NULL;
|
||||
}
|
||||
|
@ -639,7 +623,7 @@ fprintf(stderr, "=============================== RSA verify %s: rc %d\n",
|
|||
break;
|
||||
}
|
||||
|
||||
rpmError(RPMERR_EXEC,
|
||||
rpmError(RPMERR_EXEC,
|
||||
_("Could not run pgp. Use --nopgp to skip PGP checks.\n"));
|
||||
_exit(RPMERR_EXEC);
|
||||
}
|
||||
|
@ -673,41 +657,53 @@ fprintf(stderr, "=============================== RSA verify %s: rc %d\n",
|
|||
if (!res && (!WIFEXITED(status) || WEXITSTATUS(status))) {
|
||||
res = RPMSIG_BAD;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (res != resbc) {
|
||||
fprintf(stderr, "=============================== RSA verify %s: rc %d\n",
|
||||
datafile, resbc);
|
||||
(void) pgpPrtPkts(sig, siglen, dig, 1);
|
||||
printf("\t n = "); (void) fflush(stdout);
|
||||
mp32println(dig->rsa_pk.n.size, dig->rsa_pk.n.modl);
|
||||
printf("\t e = "); (void) fflush(stdout);
|
||||
mp32println(dig->rsa_pk.e.size, dig->rsa_pk.e.data);
|
||||
printf("\t c = "); (void) fflush(stdout);
|
||||
mp32println(dig->c.size, dig->c.data);
|
||||
printf("\t m = "); (void)fflush(stdout);
|
||||
mp32println(dig->rsahm.size, dig->rsahm.data);
|
||||
}
|
||||
#endif /* DYING */
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static rpmVerifySignatureReturn
|
||||
verifyGPGSignature(const char * datafile, const byte * sig, int count,
|
||||
/*@unused@*/ const rpmDigest dig, /*@out@*/ char * result)
|
||||
/*@globals rpmGlobalMacroContext,
|
||||
fileSystem, internalState@*/
|
||||
/*@modifies *result, fileSystem, internalState @*/
|
||||
verifyGPGSignature(/*@unused@*/ const char * datafile,
|
||||
/*@unused@*/ const byte * sig,
|
||||
/*@unused@*/ int siglen,
|
||||
const rpmDigest dig, /*@out@*/ char * result)
|
||||
/*@modifies *result @*/
|
||||
{
|
||||
int res, resbc;
|
||||
|
||||
*result = '\0';
|
||||
|
||||
/*@-type@*/
|
||||
if (dsavrfy(&dig->p, &dig->q, &dig->g, &dig->hm, &dig->y, &dig->r, &dig->s))
|
||||
res = resbc = RPMSIG_OK;
|
||||
else
|
||||
res = resbc = RPMSIG_BAD;
|
||||
/*@=type@*/
|
||||
|
||||
#ifdef DYING
|
||||
{
|
||||
int pid, status, outpipe[2];
|
||||
/*@only@*/ /*@null@*/ const char * sigfile = NULL;
|
||||
byte buf[BUFSIZ];
|
||||
FILE *file;
|
||||
int res = RPMSIG_OK;
|
||||
int rc;
|
||||
|
||||
|
||||
/*@-type@*/
|
||||
rc = dsavrfy(&dig->p, &dig->q, &dig->g, &dig->hm,
|
||||
&dig->y, &dig->r, &dig->s);
|
||||
|
||||
if (rc == 0 || rpmIsVerbose()) {
|
||||
|
||||
fprintf(stderr, "=============================== DSA verify %s: rc %d\n",
|
||||
datafile, rc);
|
||||
(void) pgpPrtPkts(sig, count, dig, 1);
|
||||
printf("\t p = "); (void)fflush(stdout); mp32println(dig->p.size, dig->p.modl);
|
||||
printf("\t q = "); (void)fflush(stdout); mp32println(dig->q.size, dig->q.modl);
|
||||
printf("\t g = "); (void)fflush(stdout); mp32println(dig->g.size, dig->g.data);
|
||||
printf("\t y = "); (void)fflush(stdout); mp32println(dig->y.size, dig->y.data);
|
||||
printf("\t r = "); (void)fflush(stdout); mp32println(dig->r.size, dig->r.data);
|
||||
printf("\t s = "); (void)fflush(stdout); mp32println(dig->s.size, dig->s.data);
|
||||
printf("\thm = "); (void)fflush(stdout); mp32println(dig->hm.size, dig->hm.data);
|
||||
}
|
||||
/*@=type@*/
|
||||
|
||||
/* Write out the signature */
|
||||
|
@ -718,13 +714,13 @@ fprintf(stderr, "=============================== DSA verify %s: rc %d\n",
|
|||
}
|
||||
sfd = Fopen(sigfile, "w.fdio");
|
||||
if (sfd != NULL && !Ferror(sfd)) {
|
||||
(void) Fwrite(sig, sizeof(char), count, sfd);
|
||||
(void) Fwrite(sig, sizeof(char), siglen, sfd);
|
||||
(void) Fclose(sfd);
|
||||
}
|
||||
#else
|
||||
{ FD_t sfd;
|
||||
if (!makeTempFile(NULL, &sigfile, &sfd)) {
|
||||
(void) Fwrite(sig, sizeof(*sig), count, sfd);
|
||||
(void) Fwrite(sig, sizeof(*sig), siglen, sfd);
|
||||
(void) Fclose(sfd);
|
||||
sfd = NULL;
|
||||
}
|
||||
|
@ -748,10 +744,10 @@ fprintf(stderr, "=============================== DSA verify %s: rc %d\n",
|
|||
(void) dosetenv("GNUPGHOME", gpg_path, 1);
|
||||
|
||||
(void) execlp("gpg", "gpg",
|
||||
"--batch", "--no-verbose",
|
||||
"--batch", "--no-verbose",
|
||||
"--verify", sigfile, datafile,
|
||||
NULL);
|
||||
rpmError(RPMERR_EXEC,
|
||||
rpmError(RPMERR_EXEC,
|
||||
_("Could not run gpg. Use --nogpg to skip GPG checks.\n"));
|
||||
_exit(RPMERR_EXEC);
|
||||
}
|
||||
|
@ -768,20 +764,43 @@ fprintf(stderr, "=============================== DSA verify %s: rc %d\n",
|
|||
}
|
||||
(void) fclose(file);
|
||||
}
|
||||
|
||||
|
||||
(void) waitpid(pid, &status, 0);
|
||||
if (sigfile) (void) unlink(sigfile);
|
||||
sigfile = _free(sigfile);
|
||||
if (!res && (!WIFEXITED(status) || WEXITSTATUS(status))) {
|
||||
res = RPMSIG_BAD;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (res != resbc) {
|
||||
fprintf(stderr, "=============================== DSA verify %s: rc %d\n",
|
||||
datafile, resbc);
|
||||
(void) pgpPrtPkts(sig, siglen, dig, 1);
|
||||
printf("\t p = "); (void) fflush(stdout);
|
||||
mp32println(dig->p.size, dig->p.modl);
|
||||
printf("\t q = "); (void) fflush(stdout);
|
||||
mp32println(dig->q.size, dig->q.modl);
|
||||
printf("\t g = "); (void) fflush(stdout);
|
||||
mp32println(dig->g.size, dig->g.data);
|
||||
printf("\t y = "); (void) fflush(stdout);
|
||||
mp32println(dig->y.size, dig->y.data);
|
||||
printf("\t r = "); (void) fflush(stdout);
|
||||
mp32println(dig->r.size, dig->r.data);
|
||||
printf("\t s = "); (void) fflush(stdout);
|
||||
mp32println(dig->s.size, dig->s.data);
|
||||
printf("\thm = "); (void) fflush(stdout);
|
||||
mp32println(dig->hm.size, dig->hm.data);
|
||||
}
|
||||
#endif
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static int checkPassPhrase(const char * passPhrase, const int sigTag)
|
||||
/*@globals rpmGlobalMacroContext,
|
||||
fileSystem@*/
|
||||
fileSystem @*/
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int passPhrasePipe[2];
|
||||
|
@ -890,7 +909,7 @@ char * rpmGetPassPhrase(const char * prompt, const int sigTag)
|
|||
}
|
||||
break;
|
||||
case RPMSIGTAG_PGP5: /* XXX legacy */
|
||||
case RPMSIGTAG_PGP:
|
||||
case RPMSIGTAG_PGP:
|
||||
{ const char *name = rpmExpand("%{_pgp_name}", NULL);
|
||||
aok = (name && *name != '%');
|
||||
name = _free(name);
|
||||
|
@ -920,21 +939,21 @@ char * rpmGetPassPhrase(const char * prompt, const int sigTag)
|
|||
|
||||
rpmVerifySignatureReturn
|
||||
rpmVerifySignature(const char * file, int_32 sigTag, const void * sig,
|
||||
int count, const rpmDigest dig, char * result)
|
||||
int siglen, const rpmDigest dig, char * result)
|
||||
{
|
||||
switch (sigTag) {
|
||||
case RPMSIGTAG_SIZE:
|
||||
return verifySizeSignature(file, *(int_32 *)sig, result);
|
||||
/*@notreached@*/ break;
|
||||
case RPMSIGTAG_MD5:
|
||||
return verifyMD5Signature(file, sig, result, mdbinfile);
|
||||
return verifyMD5Signature(file, sig, siglen, dig, result, mdbinfile);
|
||||
/*@notreached@*/ break;
|
||||
case RPMSIGTAG_PGP5: /* XXX legacy */
|
||||
case RPMSIGTAG_PGP:
|
||||
return verifyPGPSignature(file, sig, count, dig, result);
|
||||
return verifyPGPSignature(file, sig, siglen, dig, result);
|
||||
/*@notreached@*/ break;
|
||||
case RPMSIGTAG_GPG:
|
||||
return verifyGPGSignature(file, sig, count, dig, result);
|
||||
return verifyGPGSignature(file, sig, siglen, dig, result);
|
||||
/*@notreached@*/ break;
|
||||
case RPMSIGTAG_LEMD5_1:
|
||||
case RPMSIGTAG_LEMD5_2:
|
||||
|
|
54
po/rpm.pot
54
po/rpm.pot
|
@ -6,7 +6,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2001-10-18 21:28-0400\n"
|
||||
"POT-Creation-Date: 2001-10-19 09:47-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -3302,123 +3302,123 @@ msgstr ""
|
|||
msgid "Unable to open %s for reading: %s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:125
|
||||
#: lib/signature.c:112
|
||||
msgid "file is not regular -- skipping size check\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:134
|
||||
#: lib/signature.c:121
|
||||
#, c-format
|
||||
msgid "Expected size: %12d = lead(%d)+sigs(%d)+pad(%d)+data(%d)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:139
|
||||
#: lib/signature.c:126
|
||||
#, c-format
|
||||
msgid " Actual size: %12d\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:159
|
||||
#: lib/signature.c:146
|
||||
msgid "No signature\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:163
|
||||
#: lib/signature.c:150
|
||||
msgid "Old PGP signature\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:176
|
||||
#: lib/signature.c:163
|
||||
msgid "Old (internal-only) signature! How did you get that!?\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:232
|
||||
#: lib/signature.c:219
|
||||
#, c-format
|
||||
msgid "Signature: size(%d)+pad(%d)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:294
|
||||
#: lib/signature.c:281
|
||||
#, c-format
|
||||
msgid "Couldn't exec pgp (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:307
|
||||
#: lib/signature.c:294
|
||||
msgid "pgp failed\n"
|
||||
msgstr ""
|
||||
|
||||
#. PGP failed to write signature
|
||||
#. Just in case
|
||||
#: lib/signature.c:314
|
||||
#: lib/signature.c:301
|
||||
msgid "pgp failed to write signature\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:319
|
||||
#: lib/signature.c:306
|
||||
#, c-format
|
||||
msgid "PGP sig size: %d\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:334 lib/signature.c:420
|
||||
#: lib/signature.c:321 lib/signature.c:407
|
||||
msgid "unable to read the signature\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:339
|
||||
#: lib/signature.c:326
|
||||
#, c-format
|
||||
msgid "Got %d bytes of PGP sig\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:380 lib/signature.c:822
|
||||
#: lib/signature.c:367 lib/signature.c:841
|
||||
msgid "Couldn't exec gpg\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:393
|
||||
#: lib/signature.c:380
|
||||
msgid "gpg failed\n"
|
||||
msgstr ""
|
||||
|
||||
#. GPG failed to write signature
|
||||
#. Just in case
|
||||
#: lib/signature.c:400
|
||||
#: lib/signature.c:387
|
||||
msgid "gpg failed to write signature\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:405
|
||||
#: lib/signature.c:392
|
||||
#, c-format
|
||||
msgid "GPG sig size: %d\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:425
|
||||
#: lib/signature.c:412
|
||||
#, c-format
|
||||
msgid "Got %d bytes of GPG sig\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:453
|
||||
#: lib/signature.c:440
|
||||
msgid "Generating signature using PGP.\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:459
|
||||
#: lib/signature.c:446
|
||||
msgid "Generating signature using GPG.\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:568 lib/signature.c:643
|
||||
#: lib/signature.c:552 lib/signature.c:627
|
||||
msgid "Could not run pgp. Use --nopgp to skip PGP checks.\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:755
|
||||
#: lib/signature.c:751
|
||||
msgid "Could not run gpg. Use --nogpg to skip GPG checks.\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:851
|
||||
#: lib/signature.c:870
|
||||
msgid "Couldn't exec pgp\n"
|
||||
msgstr ""
|
||||
|
||||
#. @notreached@
|
||||
#. This case should have been screened out long ago.
|
||||
#: lib/signature.c:855 lib/signature.c:908
|
||||
#: lib/signature.c:874 lib/signature.c:927
|
||||
#, c-format
|
||||
msgid "Invalid %%_signature spec in macro file\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:888
|
||||
#: lib/signature.c:907
|
||||
#, c-format
|
||||
msgid "You must set \"%%_gpg_name\" in your macro file\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/signature.c:900
|
||||
#: lib/signature.c:919
|
||||
#, c-format
|
||||
msgid "You must set \"%%_pgp_name\" in your macro file\n"
|
||||
msgstr ""
|
||||
|
|
|
@ -2155,7 +2155,10 @@ static int gzdFlush(FD_t fd)
|
|||
/*@globals fileSystem @*/
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
return gzflush(gzdFileno(fd), Z_SYNC_FLUSH); /* XXX W2DO? */
|
||||
gzFile *gzfile;
|
||||
gzfile = gzdFileno(fd);
|
||||
if (gzfile == NULL) return -2;
|
||||
return gzflush(gzfile, Z_SYNC_FLUSH); /* XXX W2DO? */
|
||||
}
|
||||
/*@=globuse@*/
|
||||
|
||||
|
@ -2170,10 +2173,13 @@ static ssize_t gzdRead(void * cookie, /*@out@*/ char * buf, size_t count)
|
|||
ssize_t rc;
|
||||
|
||||
if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */
|
||||
|
||||
gzfile = gzdFileno(fd);
|
||||
if (gzfile == NULL) return -2; /* XXX can't happen */
|
||||
|
||||
fdstat_enter(fd, FDSTAT_READ);
|
||||
/*@-compdef@*/ /* LCL: *buf is undefined */
|
||||
rc = gzread(gzfile, buf, count);
|
||||
/*@-compdef@*/
|
||||
/*@-modfilesys@*/
|
||||
DBGIO(fd, (stderr, "==>\tgzdRead(%p,%p,%u) rc %lx %s\n", cookie, buf, (unsigned)count, (unsigned long)rc, fdbg(fd)));
|
||||
/*@=modfilesys@*/
|
||||
|
@ -2208,6 +2214,8 @@ static ssize_t gzdWrite(void * cookie, const char * buf, size_t count)
|
|||
if (fd->digest && count > 0) (void) rpmDigestUpdate(fd->digest, buf, count);
|
||||
|
||||
gzfile = gzdFileno(fd);
|
||||
if (gzfile == NULL) return -2; /* XXX can't happen */
|
||||
|
||||
fdstat_enter(fd, FDSTAT_WRITE);
|
||||
rc = gzwrite(gzfile, (void *)buf, count);
|
||||
/*@-modfilesys@*/
|
||||
|
@ -2243,7 +2251,10 @@ static inline int gzdSeek(void * cookie, _libio_pos_t pos, int whence)
|
|||
|
||||
if (fd == NULL) return -2;
|
||||
assert(fd->bytesRemain == -1); /* XXX FIXME */
|
||||
|
||||
gzfile = gzdFileno(fd);
|
||||
if (gzfile == NULL) return -2; /* XXX can't happen */
|
||||
|
||||
fdstat_enter(fd, FDSTAT_SEEK);
|
||||
rc = gzseek(gzfile, p, whence);
|
||||
/*@-modfilesys@*/
|
||||
|
@ -2274,8 +2285,8 @@ static int gzdClose( /*@only@*/ void * cookie)
|
|||
int rc;
|
||||
|
||||
gzfile = gzdFileno(fd);
|
||||
if (gzfile == NULL) return -2; /* XXX can't happen */
|
||||
|
||||
if (gzfile == NULL) return -2;
|
||||
fdstat_enter(fd, FDSTAT_CLOSE);
|
||||
rc = gzclose(gzfile);
|
||||
|
||||
|
|
Loading…
Reference in New Issue