Start ripping gpg/pgp on signature verify paths.
authorjbj <devnull@localhost>
Fri, 19 Oct 2001 13:51:20 +0000 (13:51 +0000)
committerjbj <devnull@localhost>
Fri, 19 Oct 2001 13:51:20 +0000 (13:51 +0000)
CVS patchset: 5123
CVS date: 2001/10/19 13:51:20

.lclintrc
lib/.lclintrc
lib/rpmlib.h
lib/signature.c
po/rpm.pot
rpmio/rpmio.c

index f34adeb..c89fa38 100644 (file)
--- a/.lclintrc
+++ b/.lclintrc
 
 -unrecogcomments       # XXX ignore doxygen markings
 
+
 #-deepbreak            # shortcut 485 occurences
 
 +strict                        # lclint level
+-includenest 16                # getting deep, sigh
 
 # --- not-yet at strict level
 -bitwisesigned         # pita
index 7bb3a9f..3710a9a 100644 (file)
@@ -11,6 +11,7 @@
 -unrecogcomments       # XXX ignore doxygen markings
 
 +strict                        # lclint level
+-includenest 16                # getting deep, sigh
 
 # --- +partial artifacts
 -declundef
index 34e9094..c2a3a47 100644 (file)
@@ -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.
index c71a16a..e58c9b0 100644 (file)
@@ -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];
-
-    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;
+    char * t = result;
+    byte * md5sum = NULL;
+    size_t md5len = 0;
+    int res = 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:
index 5fb7477..9ca22d4 100644 (file)
@@ -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 ""
index 36478fc..1696419 100644 (file)
@@ -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);