colesce query and verify modes.
authorjbj <devnull@localhost>
Mon, 10 May 1999 23:41:04 +0000 (23:41 +0000)
committerjbj <devnull@localhost>
Mon, 10 May 1999 23:41:04 +0000 (23:41 +0000)
CVS patchset: 3055
CVS date: 1999/05/10 23:41:04

12 files changed:
CHANGES
Makefile.am
lib/messages.c
lib/query.c
lib/rpmlib.h
lib/verify.c
po/rpm.pot
rpm.c
rpm.spec
rpmio/messages.c
verify.c
verify.h [deleted file]

diff --git a/CHANGES b/CHANGES
index 4ad9295..5b07089 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,13 +7,14 @@
        - fix: optflags not implicitly set to canonical arch value.
        - fix: prefer pgp2.6.3 over pgp5 if both are installed.
        - make sure that rpm-the-package auto-requires glibc.
-       - add rpmputtext/rpmgettext to rpm packages.
+       - add rpmputtext/rpmgettext to rpm package.
        - fix: non-apache servers need "GET ... HTTP/1.0" by the book.
        - fix: %doc wrongly inherits lang from last entry in %files.
        - resurrect toplevel tar target.
        - spec file removal separate from source removal (Shing-Gene Yung).
        - add rpm prefix to MD5 routines to avoid name conflict on solaris.
        - fix: resurrect -Vp, -Vf and -Vg functionality.
+       - colesce query and verify modes.
 
 2.94 -> 2.95
        - fix: last update transaction set segfault bug in installer.
index ac5999e..481066b 100644 (file)
@@ -41,9 +41,9 @@ pkglib_SCRIPTS = find-provides find-requires mkinstalldirs \
 
 noinst_HEADERS = \
        acconfig.h      build.h         checksig.h      ftp.h   \
-       install.h       system.h        url.h           verify.h
+       install.h       system.h        url.h
 
-rpm_SOURCES =          build.c checksig.c ftp.c install.c rpm.c url.c verify.c
+rpm_SOURCES =          build.c checksig.c ftp.c install.c rpm.c url.c
 rpm_LDADD =            $(mylibs) @LIBMISC@
 
 $(PROGRAMS):           $(mylibs) @LIBMISC@
index 0824f30..c07853e 100644 (file)
@@ -29,7 +29,7 @@ int rpmIsVerbose(void)
     return (minLevel <= RPMMESS_VERBOSE);
 }
 
-void rpmMessage(int level, char * format, ...) {
+void rpmMessage(int level, const char * format, ...) {
     va_list args;
 
     va_start(args, format);
index 59a35ad..9c18823 100644 (file)
@@ -6,12 +6,8 @@
 
 #include "build/rpmbuild.h"
 #include "popt/popt.h"
-#include "../url.h"
+#include "url.h"
 
-static char * permsString(int mode);
-static void printHeader(Header h, int queryFlags, const char * queryFormat);
-static void showMatches(rpmdb db, dbiIndexSet matches, int queryFlags, 
-                       const char * queryFormat);
 static void printFileInfo(char * name, unsigned int size, unsigned short mode,
                          unsigned int mtime, unsigned short rdev,
                          char * owner, char * group, int uid, int gid,
@@ -28,28 +24,28 @@ static void printFileInfo(char * name, unsigned int size, unsigned short mode,
 /* ========== Query/Verify source popt args */
 static void rpmQVSourceArgCallback(poptContext con, enum poptCallbackReason reason,
                             const struct poptOption * opt, const char * arg, 
-                            struct rpmQVArguments* data) {
+                            QVA_t *qva) {
 
     switch (opt->val) {
-      case 'a': data->source |= RPMQV_ALL; data->sourceCount++; break;
-      case 'f': data->source |= RPMQV_PATH; data->sourceCount++; break;
-      case 'g': data->source |= RPMQV_GROUP; data->sourceCount++; break;
-      case 'p': data->source |= RPMQV_RPM; data->sourceCount++; break;
-      case POPT_WHATPROVIDES: data->source |= RPMQV_WHATPROVIDES; 
-                             data->sourceCount++; break;
-      case POPT_WHATREQUIRES: data->source |= RPMQV_WHATREQUIRES; 
-                             data->sourceCount++; break;
-      case POPT_TRIGGEREDBY: data->source |= RPMQV_TRIGGEREDBY;
-                             data->sourceCount++; break;
+      case 'a': qva->qva_source |= RPMQV_ALL; qva->qva_sourceCount++; break;
+      case 'f': qva->qva_source |= RPMQV_PATH; qva->qva_sourceCount++; break;
+      case 'g': qva->qva_source |= RPMQV_GROUP; qva->qva_sourceCount++; break;
+      case 'p': qva->qva_source |= RPMQV_RPM; qva->qva_sourceCount++; break;
+      case POPT_WHATPROVIDES: qva->qva_source |= RPMQV_WHATPROVIDES; 
+                             qva->qva_sourceCount++; break;
+      case POPT_WHATREQUIRES: qva->qva_source |= RPMQV_WHATREQUIRES; 
+                             qva->qva_sourceCount++; break;
+      case POPT_TRIGGEREDBY: qva->qva_source |= RPMQV_TRIGGEREDBY;
+                             qva->qva_sourceCount++; break;
 
 /* XXX SPECFILE is not verify sources */
       case POPT_SPECFILE:
-       data->source |= RPMQV_SPECFILE;
-       data->sourceCount++;
+       qva->qva_source |= RPMQV_SPECFILE;
+       qva->qva_sourceCount++;
        break;
       case POPT_QUERYBYNUMBER:
-       data->source |= RPMQV_DBOFFSET; 
-       data->sourceCount++;
+       qva->qva_source |= RPMQV_DBOFFSET; 
+       qva->qva_sourceCount++;
        break;
     }
 }
@@ -81,26 +77,27 @@ extern char *specedit;
 
 static void queryArgCallback(poptContext con, enum poptCallbackReason reason,
                             const struct poptOption * opt, const char * arg, 
-                            struct rpmQVArguments * data) {
-
+                            QVA_t *qva) {
     switch (opt->val) {
-      case 'c': data->flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break;
-      case 'd': data->flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break;
-      case 'l': data->flags |= QUERY_FOR_LIST; break;
-      case 's': data->flags |= QUERY_FOR_STATE | QUERY_FOR_LIST; break;
-      case POPT_DUMP: data->flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST; break;
+      case 'c': qva->qva_flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break;
+      case 'd': qva->qva_flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break;
+      case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
+      case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST; break;
+      case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST; break;
       case 'v': rpmIncreaseVerbosity();         break;
 
       case POPT_QUERYFORMAT:
-       if (data->queryFormat) {
-           int len = strlen(data->queryFormat) + strlen(arg) + 1;
-           data->queryFormat = realloc(data->queryFormat, len);
-           strcat(data->queryFormat, arg);
+      {        char *qf = (char *)qva->qva_queryFormat;
+       if (qf) {
+           int len = strlen(qf) + strlen(arg) + 1;
+           qf = realloc(qf, len);
+           strcat(qf, arg);
        } else {
-           data->queryFormat = malloc(strlen(arg) + 1);
-           strcpy(data->queryFormat, arg);
+           qf = malloc(strlen(arg) + 1);
+           strcpy(qf, arg);
        }
-       break;
+       qva->qva_queryFormat = qf;
+      }        break;
     }
 }
 
@@ -145,7 +142,11 @@ static int queryHeader(Header h, const char * chptr) {
     return 0;
 }
 
-static void printHeader(Header h, int queryFlags, const char * queryFormat) {
+int showQueryPackage(QVA_t *qva, rpmdb db, Header h)
+{
+    int queryFlags = qva->qva_flags;
+    const char *queryFormat = qva->qva_queryFormat;
+
     char * name, * version, * release;
     int_32 count, type;
     char * prefix = NULL;
@@ -298,6 +299,7 @@ static void printHeader(Header h, int queryFlags, const char * queryFormat) {
            }
        }
     }
+    return 0;  /* XXX FIXME: need real return code */
 }
 
 static char * permsString(int mode) {
@@ -419,28 +421,6 @@ static void printFileInfo(char * name, unsigned int size, unsigned short mode,
                sizefield, timefield, namefield);
 }
 
-static void showMatches(rpmdb db, dbiIndexSet matches, int queryFlags, 
-                       const char * queryFormat) {
-    int i;
-    Header h;
-
-    for (i = 0; i < dbiIndexSetCount(matches); i++) {
-       unsigned int recOffset = dbiIndexRecordOffset(matches, i);
-       if (recOffset) {
-           rpmMessage(RPMMESS_DEBUG, _("querying record number %d\n"),
-                       recOffset);
-           
-           h = rpmdbGetRecord(db, recOffset);
-           if (h == NULL) {
-               fprintf(stderr, _("error: could not read database record\n"));
-           } else {
-               printHeader(h, queryFlags, queryFormat);
-               headerFree(h);
-           }
-       }
-    }
-}
-
 extern char *  specedit;
 
 static void
@@ -501,33 +481,66 @@ printNewSpecfile(Spec spec)
     }
 }
 
-int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags, 
-            const char * arg, const char * queryFormat) {
+void rpmDisplayQueryTags(FILE * f) {
+    const struct headerTagTableEntry * t;
+    int i;
+    const struct headerSprintfExtension * ext = rpmHeaderFormats;
+
+    for (i = 0, t = rpmTagTable; i < rpmTagTableSize; i++, t++) {
+       fprintf(f, "%s\n", t->name + 7);
+    }
+
+    while (ext->name) {
+       if (ext->type == HEADER_EXT_TAG)
+           fprintf(f, "%s\n", ext->name + 7), ext++;
+       else if (ext->type == HEADER_EXT_MORE)
+           ext = ext->u.more;
+       else
+           ext++;
+    }
+}
+
+int showMatches(QVA_t *qva, rpmdb db, dbiIndexSet matches, QVF_t showPackage)
+{
+    Header h;
+    int ec = 0;
+    int i;
+
+    for (i = 0; i < dbiIndexSetCount(matches); i++) {
+       int rc;
+       unsigned int recOffset = dbiIndexRecordOffset(matches, i);
+       if (recOffset == 0)
+           continue;
+       rpmMessage(RPMMESS_DEBUG, _("record number %u\n"), recOffset);
+           
+       h = rpmdbGetRecord(db, recOffset);
+       if (h == NULL) {
+               fprintf(stderr, _("error: could not read database record\n"));
+               ec = 1;
+       } else {
+               if ((rc = showPackage(qva, db, h)) != 0)
+                   ec = rc;
+               headerFree(h);
+       }
+    }
+    return ec;
+}
+
+int rpmQueryVerify(QVA_t *qva, enum rpmQVSources source, const char * arg,
+       rpmdb db, QVF_t showPackage)
+{
+    dbiIndexSet matches;
     Header h;
     int offset;
     int rc;
     int isSource;
-    rpmdb db;
-    dbiIndexSet matches;
     int recNumber;
     int retcode = 0;
     char *end = NULL;
 
     switch (source) {
-    default:
-       if (rpmdbOpen(prefix, &db, O_RDONLY, 0644)) {
-           fprintf(stderr, _("rpmQuery: rpmdbOpen() failed\n"));
-           exit(1);
-       }
-       break;
-    case RPMQV_RPM:
-    case RPMQV_SPECFILE:
-       break;
-    }
-
-    switch (source) {
       case RPMQV_RPM:
-      { FD_t fd;
+      {        FD_t fd;
 
        fd = ufdOpen(arg, O_RDONLY, 0);
        if (fdFileno(fd) < 0) {
@@ -537,19 +550,20 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
            break;
        }
 
-       rc = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL);
+       retcode = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL);
 
        ufdClose(fd);
 
-       switch (rc) {
+       switch (retcode) {
        case 0:
            if (h == NULL) {
                fprintf(stderr, _("old format source packages cannot "
                        "be queried\n"));
-           } else {
-               printHeader(h, queryFlags, queryFormat);
-               headerFree(h);
+               retcode = 1;
+               break;
            }
+           retcode = showPackage(qva, db, h);
+           headerFree(h);
            break;
        case 1:
            fprintf(stderr, _("%s does not appear to be a RPM package\n"), arg);
@@ -562,6 +576,8 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
       } break;
 
       case RPMQV_SPECFILE:
+       if (showPackage != showQueryPackage)
+           return 1;
       { Spec spec = NULL;
        Package pkg;
        char * buildRoot = NULL;
@@ -597,22 +613,23 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
                fprintf(stdout, "====== %s\n", binRpm);
            free(binRpm);
 #endif
-           printHeader(pkg->header, queryFlags, queryFormat);
+           showPackage(qva, NULL, pkg->header);
        }
        freeSpec(spec);
       }        break;
 
       case RPMQV_ALL:
-       offset = rpmdbFirstRecNum(db);
-       while (offset) {
-           h = rpmdbGetRecord(db, offset);
-           if (h == NULL) {
-               fprintf(stderr, _("could not read database record!\n"));
-               return 1;
-           }
-           printHeader(h, queryFlags, queryFormat);
-           headerFree(h);
-           offset = rpmdbNextRecNum(db, offset);
+       for (offset = rpmdbFirstRecNum(db);
+            offset != 0;
+            offset = rpmdbNextRecNum(db, offset)) {
+               h = rpmdbGetRecord(db, offset);
+               if (h == NULL) {
+                   fprintf(stderr, _("could not read database record!\n"));
+                   return 1;
+               }
+               if ((rc = showPackage(qva, db, h)) != 0)
+                   retcode = rc;
+               headerFree(h);
        }
        break;
 
@@ -621,7 +638,7 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
            fprintf(stderr, _("group %s does not contain any packages\n"), arg);
            retcode = 1;
        } else {
-           showMatches(db, matches, queryFlags, queryFormat);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -631,7 +648,7 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
            fprintf(stderr, _("no package provides %s\n"), arg);
            retcode = 1;
        } else {
-           showMatches(db, matches, queryFlags, queryFormat);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -641,7 +658,7 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
            fprintf(stderr, _("no package triggers %s\n"), arg);
            retcode = 1;
        } else {
-           showMatches(db, matches, queryFlags, queryFormat);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -651,7 +668,7 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
            fprintf(stderr, _("no package requires %s\n"), arg);
            retcode = 1;
        } else {
-           showMatches(db, matches, queryFlags, queryFormat);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -671,7 +688,7 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
            }
            retcode = 1;
        } else {
-           showMatches(db, matches, queryFlags, queryFormat);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -682,13 +699,13 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
            fprintf(stderr, _("invalid package number: %s\n"), arg);
            return 1;
        }
-       rpmMessage(RPMMESS_DEBUG, _("showing package: %d\n"), recNumber);
+       rpmMessage(RPMMESS_DEBUG, _("package record number: %d\n"), recNumber);
        h = rpmdbGetRecord(db, recNumber);
        if (h == NULL)  {
            fprintf(stderr, _("record %d could not be read\n"), recNumber);
            retcode = 1;
        } else {
-           printHeader(h, queryFlags, queryFormat);
+           retcode = showPackage(qva, db, h);
            headerFree(h);
        }
        break;
@@ -702,39 +719,36 @@ int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags,
            retcode = 1;
            fprintf(stderr, _("error looking for package %s\n"), arg);
        } else {
-           showMatches(db, matches, queryFlags, queryFormat);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
     }
    
+    return retcode;
+}
+
+int rpmQuery(QVA_t *qva, enum rpmQVSources source, const char * arg)
+{
+    rpmdb db = NULL;
+    int rc;
+
     switch (source) {
-    default:
-       rpmdbClose(db);
-       break;
     case RPMQV_RPM:
     case RPMQV_SPECFILE:
        break;
+    default:
+       if (rpmdbOpen(qva->qva_prefix, &db, O_RDONLY, 0644)) {
+           fprintf(stderr, _("rpmQuery: rpmdbOpen() failed\n"));
+           return 1;
+       }
+       break;
     }
 
-    return retcode;
-}
+    rc = rpmQueryVerify(qva, source, arg, db, showQueryPackage);
 
-void rpmDisplayQueryTags(FILE * f) {
-    const struct headerTagTableEntry * t;
-    int i;
-    const struct headerSprintfExtension * ext = rpmHeaderFormats;
-
-    for (i = 0, t = rpmTagTable; i < rpmTagTableSize; i++, t++) {
-       fprintf(f, "%s\n", t->name + 7);
-    }
+    if (db)
+       rpmdbClose(db);
 
-    while (ext->name) {
-       if (ext->type == HEADER_EXT_TAG)
-           fprintf(f, "%s\n", ext->name + 7), ext++;
-       else if (ext->type == HEADER_EXT_MORE)
-           ext = ext->u.more;
-       else
-           ext++;
-    }
+    return rc;
 }
index 5ac2969..a30dd7a 100644 (file)
@@ -438,7 +438,7 @@ void rpmSetVerbosity(int level);
 int rpmGetVerbosity(void);
 int rpmIsVerbose(void);
 int rpmIsDebug(void);
-void rpmMessage(int level, char * format, ...);
+void rpmMessage(int level, const char * format, ...);
 
 /** rpmlead.c **/
 
@@ -600,12 +600,17 @@ enum rpmQVSources { RPMQV_PACKAGE = 0, RPMQV_PATH, RPMQV_ALL, RPMQV_RPM,
 extern struct poptOption rpmQVSourcePoptTable[];
 
 struct rpmQVArguments {
-    enum rpmQVSources source;
-    int sourceCount;           /* > 1 is an error */
-    int flags;
-    int verbose;
-    char * queryFormat;
+    enum rpmQVSources qva_source;
+    int        qva_sourceCount;        /* > 1 is an error */
+    int                qva_flags;
+    int                qva_verbose;
+    const char *qva_queryFormat;
+    const char *qva_prefix;
 };
+typedef        struct rpmQVArguments QVA_t;
+
+typedef        int (*QVF_t) (QVA_t *qva, rpmdb db, Header h);
+int showMatches(QVA_t *qva, rpmdb db, dbiIndexSet matches, QVF_t showPackage);
 
 #define QUERY_FOR_LIST         (1 << 1)
 #define QUERY_FOR_STATE                (1 << 2)
@@ -616,9 +621,22 @@ struct rpmQVArguments {
 extern char *specedit;
 extern struct poptOption rpmQueryPoptTable[];
 
-int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags, 
-            const char * arg, const char * queryFormat);
 void rpmDisplayQueryTags(FILE * f);
+int rpmQueryVerify(QVA_t *qva, enum rpmQVSources source, const char * arg,
+       rpmdb db, QVF_t showPackage);
+
+int showQueryPackage(QVA_t *qva, rpmdb db, Header h);
+int rpmQuery(QVA_t *qva, enum rpmQVSources source, const char * arg);
+
+#define VERIFY_FILES           (1 <<  9)
+#define VERIFY_DEPS            (1 << 10)
+#define VERIFY_SCRIPT          (1 << 11)
+#define VERIFY_MD5             (1 << 12)
+
+extern struct poptOption rpmVerifyPoptTable[];
+
+int showVerifyPackage(QVA_t *qva, rpmdb db, Header h);
+int rpmVerify(QVA_t *qva, enum rpmQVSources source, const char *arg);
 
 #ifdef __cplusplus
 }
index 7043bd6..3abc091 100644 (file)
@@ -6,6 +6,9 @@
 #include "misc.h"
 #include "install.h"
 
+#include "build/rpmbuild.h"
+#include "url.h"
+
 static int _ie = 0x44332211;
 static union _endian { int i; char b[4]; } *_endian = (union _endian *)&_ie;
 #define        IS_BIG_ENDIAN()         (_endian->b[0] == '\x44')
@@ -13,8 +16,32 @@ static union _endian { int i; char b[4]; } *_endian = (union _endian *)&_ie;
 
 #define S_ISDEV(m) (S_ISBLK((m)) || S_ISCHR((m)))
 
+#define        POPT_NOFILES    1000
+
+/* ========== Verify specific popt args */
+static void verifyArgCallback(poptContext con, enum poptCallbackReason reason,
+                            const struct poptOption * opt, const char * arg, 
+                            QVA_t *qva)
+{
+    switch (opt->val) {
+      case POPT_NOFILES: qva->qva_flags |= VERIFY_FILES; break;
+    }
+}
+
+static int noFiles = 0;
+struct poptOption rpmVerifyPoptTable[] = {
+       { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, 
+               verifyArgCallback, 0, NULL, NULL },
+       { "nofiles", '\0', 0, &noFiles, POPT_NOFILES,
+               N_("don't verify files in package"), NULL},
+       { 0, 0, 0, 0, 0,        NULL, NULL }
+};
+
+/* ======================================================================== */
+/* XXX static */
 int rpmVerifyFile(const char * prefix, Header h, int filenum, int * result, 
-                 int omitMask) {
+                 int omitMask)
+{
     char ** fileList, ** md5List, ** linktoList;
     int_32 * verifyFlags, flags;
     int_32 * sizeList, * mtimeList;
@@ -203,7 +230,152 @@ int rpmVerifyFile(const char * prefix, Header h, int filenum, int * result,
     return 0;
 }
 
-int rpmVerifyScript(const char * root, Header h, FD_t err) {
+/* XXX static */
+int rpmVerifyScript(const char * root, Header h, FD_t err)
+{
     return runInstScript(root, h, RPMTAG_VERIFYSCRIPT, RPMTAG_VERIFYSCRIPTPROG,
                     0, 0, err);
 }
+
+/* ======================================================================== */
+static int verifyHeader(QVA_t *qva, Header h)
+{
+    const char ** fileList;
+    int count, type;
+    int verifyResult;
+    int i, ec, rc;
+    int_32 * fileFlagsList;
+    int omitMask = 0;
+
+    ec = 0;
+    if (!(qva->qva_flags & VERIFY_MD5)) omitMask = RPMVERIFY_MD5;
+
+    if (headerGetEntry(h, RPMTAG_FILEFLAGS, NULL, (void **) &fileFlagsList, NULL) &&
+       headerGetEntry(h, RPMTAG_FILENAMES, &type, (void **) &fileList, &count)) {
+       for (i = 0; i < count; i++) {
+           if ((rc = rpmVerifyFile(qva->qva_prefix, h, i, &verifyResult, omitMask)) != 0) {
+               fprintf(stdout, _("missing    %s\n"), fileList[i]);
+           } else {
+               const char * size, * md5, * link, * mtime, * mode;
+               const char * group, * user, * rdev;
+               static const char * aok = ".";
+               static const char * unknown = "?";
+
+               if (!verifyResult) continue;
+           
+               rc = 1;
+
+#define        _verify(_RPMVERIFY_F, _C)       \
+       ((verifyResult & _RPMVERIFY_F) ? _C : aok)
+#define        _verifylink(_RPMVERIFY_F, _C)   \
+       ((verifyResult & RPMVERIFY_READLINKFAIL) ? unknown : \
+        (verifyResult & _RPMVERIFY_F) ? _C : aok)
+#define        _verifyfile(_RPMVERIFY_F, _C)   \
+       ((verifyResult & RPMVERIFY_READFAIL) ? unknown : \
+        (verifyResult & _RPMVERIFY_F) ? _C : aok)
+       
+               md5 = _verifyfile(RPMVERIFY_MD5, "5");
+               size = _verify(RPMVERIFY_FILESIZE, "S");
+               link = _verifylink(RPMVERIFY_LINKTO, "L");
+               mtime = _verify(RPMVERIFY_MTIME, "T");
+               rdev = _verify(RPMVERIFY_RDEV, "D");
+               user = _verify(RPMVERIFY_USER, "U");
+               group = _verify(RPMVERIFY_GROUP, "G");
+               mode = _verify(RPMVERIFY_MODE, "M");
+
+#undef _verify
+#undef _verifylink
+#undef _verifyfile
+
+               fprintf(stdout, "%s%s%s%s%s%s%s%s %c %s\n",
+                      size, mode, md5, rdev, link, user, group, mtime, 
+                      fileFlagsList[i] & RPMFILE_CONFIG ? 'c' : ' ', 
+                      fileList[i]);
+           }
+           if (rc)
+               ec = rc;
+       }
+       
+       free(fileList);
+    }
+    return ec;
+}
+
+static int verifyDependencies(rpmdb db, Header h) {
+    rpmTransactionSet rpmdep;
+    struct rpmDependencyConflict * conflicts;
+    int numConflicts;
+    const char * name, * version, * release;
+    int type, count, i;
+
+    rpmdep = rpmtransCreateSet(db, NULL);
+    rpmtransAddPackage(rpmdep, h, NULL, NULL, 0, NULL);
+
+    rpmdepCheck(rpmdep, &conflicts, &numConflicts);
+    rpmtransFree(rpmdep);
+
+    if (numConflicts) {
+       headerGetEntry(h, RPMTAG_NAME, &type, (void **) &name, &count);
+       headerGetEntry(h, RPMTAG_VERSION, &type, (void **) &version, &count);
+       headerGetEntry(h, RPMTAG_RELEASE, &type, (void **) &release, &count);
+       fprintf(stdout, _("Unsatisfied dependencies for %s-%s-%s: "),
+               name, version, release);
+       for (i = 0; i < numConflicts; i++) {
+           if (i) fprintf(stdout, ", ");
+           fprintf(stdout, "%s", conflicts[i].needsName);
+           if (conflicts[i].needsFlags) {
+               printDepFlags(stdout, conflicts[i].needsVersion, 
+                             conflicts[i].needsFlags);
+           }
+       }
+       fprintf(stdout, "\n");
+       rpmdepFreeConflicts(conflicts, numConflicts);
+       return 1;
+    }
+    return 0;
+}
+
+int showVerifyPackage(QVA_t *qva, rpmdb db, Header h)
+{
+    int ec, rc;
+    FD_t fdo;
+    ec = 0;
+    if ((qva->qva_flags & VERIFY_DEPS) &&
+       (rc = verifyDependencies(db, h)) != 0)
+           ec = rc;
+    if ((qva->qva_flags & VERIFY_FILES) &&
+       (rc = verifyHeader(qva, h)) != 0)
+           ec = rc;;
+    fdo = fdDup(STDOUT_FILENO);
+    if ((qva->qva_flags & VERIFY_SCRIPT) &&
+       (rc = rpmVerifyScript(qva->qva_prefix, h, fdo)) != 0)
+           ec = rc;
+    fdClose(fdo);
+    return ec;
+}
+
+int rpmVerify(QVA_t *qva, enum rpmQVSources source, const char *arg)
+{
+    rpmdb db = NULL;
+    int rc;
+
+    switch (source) {
+    case RPMQV_RPM:
+       if (!(qva->qva_flags & VERIFY_DEPS))
+           break;
+       /* fall thru */
+    default:
+       if (rpmdbOpen(qva->qva_prefix, &db, O_RDONLY, 0644)) {
+           fprintf(stderr, _("rpmVerify: rpmdbOpen() failed\n"));
+           return 1;
+       }
+       break;
+    }
+
+    rc = rpmQueryVerify(qva, source, arg, db, showVerifyPackage);
+
+    if (db)
+       rpmdbClose(db);
+
+    return rc;
+}
index e174dac..2b8d2f9 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 1999-05-07 15:39-0400\n"
+"POT-Creation-Date: 1999-05-10 19:38-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"
@@ -89,7 +89,7 @@ msgstr ""
 msgid "override build root"
 msgstr ""
 
-#: ../build.c:323 ../rpm.c:459
+#: ../build.c:323 ../rpm.c:458
 msgid "remove build tree when done"
 msgstr ""
 
@@ -109,7 +109,7 @@ msgstr ""
 msgid "remove specfile when done"
 msgstr ""
 
-#: ../build.c:333 ../rpm.c:457
+#: ../build.c:333 ../rpm.c:456
 msgid "skip straight to specified stage (only for c,i)"
 msgstr ""
 
@@ -325,7 +325,7 @@ msgstr ""
 msgid "cannot open file %s\n"
 msgstr ""
 
-#: ../install.c:202 ../lib/query.c:555 ../verify.c:218
+#: ../install.c:202 ../lib/query.c:569 ../verify.c:225
 #, c-format
 msgid "%s does not appear to be a RPM package\n"
 msgstr ""
@@ -363,7 +363,7 @@ msgstr ""
 msgid "installing binary packages\n"
 msgstr ""
 
-#: ../install.c:388 ../lib/query.c:700 ../verify.c:309
+#: ../install.c:388 ../lib/query.c:717 ../verify.c:333
 #, c-format
 msgid "package %s is not installed\n"
 msgstr ""
@@ -415,759 +415,759 @@ msgstr ""
 msgid "no copyright!\n"
 msgstr ""
 
-#: ../rpm.c:161
+#: ../rpm.c:160
 #, c-format
 msgid "rpm: %s\n"
 msgstr ""
 
-#: ../rpm.c:172
+#: ../rpm.c:171
 #, c-format
 msgid "RPM version %s\n"
 msgstr ""
 
-#: ../rpm.c:176
+#: ../rpm.c:175
 msgid "Copyright (C) 1998 - Red Hat Software"
 msgstr ""
 
-#: ../rpm.c:177
+#: ../rpm.c:176
 msgid ""
 "This may be freely redistributed under the terms of the GNU Public License"
 msgstr ""
 
-#: ../rpm.c:186
+#: ../rpm.c:185
 msgid "usage: rpm {--help}"
 msgstr ""
 
-#: ../rpm.c:187
+#: ../rpm.c:186
 msgid "       rpm {--version}"
 msgstr ""
 
-#: ../rpm.c:188
+#: ../rpm.c:187
 msgid "       rpm {--initdb}   [--dbpath <dir>]"
 msgstr ""
 
-#: ../rpm.c:189
+#: ../rpm.c:188
 msgid ""
 "       rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test]"
 msgstr ""
 
-#: ../rpm.c:190
+#: ../rpm.c:189
 msgid "                        [--replacepkgs] [--replacefiles] [--root <dir>]"
 msgstr ""
 
-#: ../rpm.c:191
+#: ../rpm.c:190
 msgid "                        [--excludedocs] [--includedocs] [--noscripts]"
 msgstr ""
 
-#: ../rpm.c:192
+#: ../rpm.c:191
 msgid ""
 "                        [--rcfile <file>] [--ignorearch] [--dbpath <dir>]"
 msgstr ""
 
-#: ../rpm.c:193
+#: ../rpm.c:192
 msgid ""
 "                        [--prefix <dir>] [--ignoreos] [--nodeps] [--allfiles]"
 msgstr ""
 
-#: ../rpm.c:194
+#: ../rpm.c:193
 msgid ""
 "                        [--ftpproxy <host>] [--ftpport <port>] [--justdb]"
 msgstr ""
 
-#: ../rpm.c:195 ../rpm.c:204 ../rpm.c:213
+#: ../rpm.c:194 ../rpm.c:203 ../rpm.c:212
 msgid "                        [--httpproxy <host>] [--httpport <port>] "
 msgstr ""
 
-#: ../rpm.c:196 ../rpm.c:206
+#: ../rpm.c:195 ../rpm.c:205
 msgid "                        [--noorder] [--relocate oldpath=newpath]"
 msgstr ""
 
-#: ../rpm.c:197
+#: ../rpm.c:196
 msgid ""
 "                        [--badreloc] [--notriggers] [--excludepath <path>]"
 msgstr ""
 
-#: ../rpm.c:198
+#: ../rpm.c:197
 msgid "                        [--ignoresize] file1.rpm ... fileN.rpm"
 msgstr ""
 
-#: ../rpm.c:199
+#: ../rpm.c:198
 msgid ""
 "       rpm {--upgrade -U} [-v] [--hash -h] [--percent] [--force] [--test]"
 msgstr ""
 
-#: ../rpm.c:200
+#: ../rpm.c:199
 msgid "                        [--oldpackage] [--root <dir>] [--noscripts]"
 msgstr ""
 
-#: ../rpm.c:201
+#: ../rpm.c:200
 msgid ""
 "                        [--excludedocs] [--includedocs] [--rcfile <file>]"
 msgstr ""
 
-#: ../rpm.c:202
+#: ../rpm.c:201
 msgid ""
 "                        [--ignorearch]  [--dbpath <dir>] [--prefix <dir>] "
 msgstr ""
 
-#: ../rpm.c:203
+#: ../rpm.c:202
 msgid "                        [--ftpproxy <host>] [--ftpport <port>]"
 msgstr ""
 
-#: ../rpm.c:205
+#: ../rpm.c:204
 msgid "                        [--ignoreos] [--nodeps] [--allfiles] [--justdb]"
 msgstr ""
 
-#: ../rpm.c:207
+#: ../rpm.c:206
 msgid ""
 "                        [--badreloc] [--excludepath <path>] [--ignoresize]"
 msgstr ""
 
-#: ../rpm.c:208
+#: ../rpm.c:207
 msgid "                        file1.rpm ... fileN.rpm"
 msgstr ""
 
-#: ../rpm.c:209
+#: ../rpm.c:208
 msgid "       rpm {--query -q} [-afpg] [-i] [-l] [-s] [-d] [-c] [-v] [-R]"
 msgstr ""
 
-#: ../rpm.c:210
+#: ../rpm.c:209
 msgid "                        [--scripts] [--root <dir>] [--rcfile <file>]"
 msgstr ""
 
-#: ../rpm.c:211
+#: ../rpm.c:210
 msgid "                        [--whatprovides] [--whatrequires] [--requires]"
 msgstr ""
 
-#: ../rpm.c:212
+#: ../rpm.c:211
 msgid ""
 "                        [--triggeredby] [--ftpuseport] [--ftpproxy <host>]"
 msgstr ""
 
-#: ../rpm.c:214
+#: ../rpm.c:213
 msgid ""
 "                        [--ftpport <port>] [--provides] [--triggers] [--dump]"
 msgstr ""
 
-#: ../rpm.c:215
+#: ../rpm.c:214
 msgid "                        [--changelog] [--dbpath <dir>] [targets]"
 msgstr ""
 
-#: ../rpm.c:216
+#: ../rpm.c:215
 msgid "       rpm {--verify -V -y} [-afpg] [--root <dir>] [--rcfile <file>]"
 msgstr ""
 
-#: ../rpm.c:217
+#: ../rpm.c:216
 msgid ""
 "                        [--dbpath <dir>] [--nodeps] [--nofiles] [--noscripts]"
 msgstr ""
 
-#: ../rpm.c:218
+#: ../rpm.c:217
 msgid "                        [--nomd5] [targets]"
 msgstr ""
 
-#: ../rpm.c:219
+#: ../rpm.c:218
 msgid "       rpm {--setperms} [-afpg] [target]"
 msgstr ""
 
-#: ../rpm.c:220
+#: ../rpm.c:219
 msgid "       rpm {--setugids} [-afpg] [target]"
 msgstr ""
 
-#: ../rpm.c:221
+#: ../rpm.c:220
 msgid "       rpm {--erase -e} [--root <dir>] [--noscripts] [--rcfile <file>]"
 msgstr ""
 
-#: ../rpm.c:222
+#: ../rpm.c:221
 msgid "                        [--dbpath <dir>] [--nodeps] [--allmatches]"
 msgstr ""
 
-#: ../rpm.c:223
+#: ../rpm.c:222
 msgid ""
 "                        [--justdb] [--notriggers] rpackage1 ... packageN"
 msgstr ""
 
-#: ../rpm.c:224
+#: ../rpm.c:223
 msgid ""
 "       rpm {-b|t}[plciba] [-v] [--short-circuit] [--clean] [--rcfile  <file>]"
 msgstr ""
 
-#: ../rpm.c:225
+#: ../rpm.c:224
 msgid "                        [--sign] [--nobuild] [--timecheck <s>] ]"
 msgstr ""
 
-#: ../rpm.c:226
+#: ../rpm.c:225
 msgid "                        [--target=platform1[,platform2...]]"
 msgstr ""
 
-#: ../rpm.c:227
+#: ../rpm.c:226
 msgid "                        [--rmsource] specfile"
 msgstr ""
 
-#: ../rpm.c:228
+#: ../rpm.c:227
 msgid "       rpm {--rmsource} [--rcfile <file>] [-v] specfile"
 msgstr ""
 
-#: ../rpm.c:229
+#: ../rpm.c:228
 msgid ""
 "       rpm {--rebuild} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm"
 msgstr ""
 
-#: ../rpm.c:230
+#: ../rpm.c:229
 msgid ""
 "       rpm {--recompile} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm"
 msgstr ""
 
-#: ../rpm.c:231
+#: ../rpm.c:230
 msgid "       rpm {--resign} [--rcfile <file>] package1 package2 ... packageN"
 msgstr ""
 
-#: ../rpm.c:232
+#: ../rpm.c:231
 msgid "       rpm {--addsign} [--rcfile <file>] package1 package2 ... packageN"
 msgstr ""
 
-#: ../rpm.c:233
+#: ../rpm.c:232
 msgid ""
 "       rpm {--checksig -K} [--nopgp] [--nogpg] [--nomd5] [--rcfile <file>]"
 msgstr ""
 
-#: ../rpm.c:234
+#: ../rpm.c:233
 msgid "                           package1 ... packageN"
 msgstr ""
 
-#: ../rpm.c:235
+#: ../rpm.c:234
 msgid "       rpm {--rebuilddb} [--rcfile <file>] [--dbpath <dir>]"
 msgstr ""
 
-#: ../rpm.c:236
+#: ../rpm.c:235
 msgid "       rpm {--querytags}"
 msgstr ""
 
-#: ../rpm.c:270
+#: ../rpm.c:269
 msgid "usage:"
 msgstr ""
 
-#: ../rpm.c:272
+#: ../rpm.c:271
 msgid "print this message"
 msgstr ""
 
-#: ../rpm.c:274
+#: ../rpm.c:273
 msgid "print the version of rpm being used"
 msgstr ""
 
-#: ../rpm.c:275
+#: ../rpm.c:274
 msgid "   all modes support the following arguments:"
 msgstr ""
 
-#: ../rpm.c:276
+#: ../rpm.c:275
 msgid "      --rcfile <file>     "
 msgstr ""
 
-#: ../rpm.c:277
+#: ../rpm.c:276
 msgid "use <file> instead of /etc/rpmrc and $HOME/.rpmrc"
 msgstr ""
 
-#: ../rpm.c:279
+#: ../rpm.c:278
 msgid "be a little more verbose"
 msgstr ""
 
-#: ../rpm.c:281
+#: ../rpm.c:280
 msgid "be incredibly verbose (for debugging)"
 msgstr ""
 
-#: ../rpm.c:283
+#: ../rpm.c:282
 msgid "query mode"
 msgstr ""
 
-#: ../rpm.c:284 ../rpm.c:346 ../rpm.c:410 ../rpm.c:438
+#: ../rpm.c:283 ../rpm.c:345 ../rpm.c:409 ../rpm.c:437
 msgid "      --root <dir>        "
 msgstr ""
 
-#: ../rpm.c:285 ../rpm.c:347 ../rpm.c:411 ../rpm.c:439 ../rpm.c:501
+#: ../rpm.c:284 ../rpm.c:346 ../rpm.c:410 ../rpm.c:438 ../rpm.c:500
 msgid "use <dir> as the top level directory"
 msgstr ""
 
-#: ../rpm.c:286 ../rpm.c:344 ../rpm.c:374 ../rpm.c:426 ../rpm.c:498
+#: ../rpm.c:285 ../rpm.c:343 ../rpm.c:373 ../rpm.c:425 ../rpm.c:497
 msgid "      --dbpath <dir>      "
 msgstr ""
 
-#: ../rpm.c:287 ../rpm.c:345 ../rpm.c:375 ../rpm.c:427 ../rpm.c:499
+#: ../rpm.c:286 ../rpm.c:344 ../rpm.c:374 ../rpm.c:426 ../rpm.c:498
 msgid "use <dir> as the directory for the database"
 msgstr ""
 
-#: ../rpm.c:288
+#: ../rpm.c:287
 msgid "      --queryformat <qfmt>"
 msgstr ""
 
-#: ../rpm.c:289
+#: ../rpm.c:288
 msgid "use <qfmt> as the header format (implies -i)"
 msgstr ""
 
-#: ../rpm.c:290
+#: ../rpm.c:289
 msgid ""
 "   install, upgrade and query (with -p) allow ftp URL's to be used in place"
 msgstr ""
 
-#: ../rpm.c:291
+#: ../rpm.c:290
 msgid "   of file names as well as the following options:"
 msgstr ""
 
-#: ../rpm.c:292
+#: ../rpm.c:291
 msgid "      --ftpproxy <host>   "
 msgstr ""
 
-#: ../rpm.c:293
+#: ../rpm.c:292
 msgid "hostname or IP of ftp proxy"
 msgstr ""
 
-#: ../rpm.c:294
+#: ../rpm.c:293
 msgid "      --ftpport <port>    "
 msgstr ""
 
-#: ../rpm.c:295
+#: ../rpm.c:294
 msgid "port number of ftp server (or proxy)"
 msgstr ""
 
-#: ../rpm.c:296
+#: ../rpm.c:295
 msgid "      --httpproxy <host>   "
 msgstr ""
 
-#: ../rpm.c:297
+#: ../rpm.c:296
 msgid "hostname or IP of http proxy"
 msgstr ""
 
-#: ../rpm.c:298
+#: ../rpm.c:297
 msgid "      --httpport <port>    "
 msgstr ""
 
-#: ../rpm.c:299
+#: ../rpm.c:298
 msgid "port number of http server (or proxy)"
 msgstr ""
 
-#: ../rpm.c:300
+#: ../rpm.c:299
 msgid "      Package specification options:"
 msgstr ""
 
-#: ../rpm.c:302
+#: ../rpm.c:301
 msgid "query all packages"
 msgstr ""
 
-#: ../rpm.c:303
+#: ../rpm.c:302
 msgid "        -f <file>+        "
 msgstr ""
 
-#: ../rpm.c:304
+#: ../rpm.c:303
 msgid "query package owning <file>"
 msgstr ""
 
-#: ../rpm.c:305
+#: ../rpm.c:304
 msgid "        -p <packagefile>+ "
 msgstr ""
 
-#: ../rpm.c:306
+#: ../rpm.c:305
 msgid "query (uninstalled) package <packagefile>"
 msgstr ""
 
-#: ../rpm.c:307
+#: ../rpm.c:306
 msgid "        --triggeredby <pkg>"
 msgstr ""
 
-#: ../rpm.c:308
+#: ../rpm.c:307
 msgid "query packages triggered by <pkg>"
 msgstr ""
 
-#: ../rpm.c:309
+#: ../rpm.c:308
 msgid "        --whatprovides <cap>"
 msgstr ""
 
-#: ../rpm.c:310
+#: ../rpm.c:309
 msgid "query packages which provide <cap> capability"
 msgstr ""
 
-#: ../rpm.c:311
+#: ../rpm.c:310
 msgid "        --whatrequires <cap>"
 msgstr ""
 
-#: ../rpm.c:312
+#: ../rpm.c:311
 msgid "query packages which require <cap> capability"
 msgstr ""
 
-#: ../rpm.c:313
+#: ../rpm.c:312
 msgid "      Information selection options:"
 msgstr ""
 
-#: ../rpm.c:315
+#: ../rpm.c:314
 msgid "display package information"
 msgstr ""
 
-#: ../rpm.c:317
+#: ../rpm.c:316
 msgid "display the package's change log"
 msgstr ""
 
-#: ../rpm.c:319
+#: ../rpm.c:318
 msgid "display package file list"
 msgstr ""
 
-#: ../rpm.c:321
+#: ../rpm.c:320
 msgid "show file states (implies -l)"
 msgstr ""
 
-#: ../rpm.c:323
+#: ../rpm.c:322
 msgid "list only documentation files (implies -l)"
 msgstr ""
 
-#: ../rpm.c:325
+#: ../rpm.c:324
 msgid "list only configuration files (implies -l)"
 msgstr ""
 
-#: ../rpm.c:327
+#: ../rpm.c:326
 msgid ""
 "show all verifiable information for each file (must be used with -l, -c, or "
 "-d)"
 msgstr ""
 
-#: ../rpm.c:329
+#: ../rpm.c:328
 msgid "list capabilities package provides"
 msgstr ""
 
-#: ../rpm.c:330
+#: ../rpm.c:329
 msgid "        --requires"
 msgstr ""
 
-#: ../rpm.c:332
+#: ../rpm.c:331
 msgid "list package dependencies"
 msgstr ""
 
-#: ../rpm.c:334
+#: ../rpm.c:333
 msgid "print the various [un]install scripts"
 msgstr ""
 
-#: ../rpm.c:336
+#: ../rpm.c:335
 msgid "show the trigger scripts contained in the package"
 msgstr ""
 
-#: ../rpm.c:340
+#: ../rpm.c:339
 msgid "    --pipe <cmd>          "
 msgstr ""
 
-#: ../rpm.c:341
+#: ../rpm.c:340
 msgid "send stdout to <cmd>"
 msgstr ""
 
-#: ../rpm.c:343
+#: ../rpm.c:342
 msgid ""
 "verify a package installation using the same same package specification "
 "options as -q"
 msgstr ""
 
-#: ../rpm.c:349 ../rpm.c:397 ../rpm.c:431
+#: ../rpm.c:348 ../rpm.c:396 ../rpm.c:430
 msgid "do not verify package dependencies"
 msgstr ""
 
-#: ../rpm.c:351
+#: ../rpm.c:350
 msgid "do not verify file md5 checksums"
 msgstr ""
 
-#: ../rpm.c:353
+#: ../rpm.c:352
 msgid "do not verify file attributes"
 msgstr ""
 
-#: ../rpm.c:356
+#: ../rpm.c:355
 msgid ""
 "set the file permissions to those in the package database using the same "
 "package specification options as -q"
 msgstr ""
 
-#: ../rpm.c:359
+#: ../rpm.c:358
 msgid ""
 "set the file owner and group to those in the package database using the same "
 "package specification options as -q"
 msgstr ""
 
-#: ../rpm.c:363
+#: ../rpm.c:362
 msgid "    --install <packagefile>"
 msgstr ""
 
-#: ../rpm.c:364
+#: ../rpm.c:363
 msgid "    -i <packagefile>      "
 msgstr ""
 
-#: ../rpm.c:365
+#: ../rpm.c:364
 msgid "install package"
 msgstr ""
 
-#: ../rpm.c:366
+#: ../rpm.c:365
 msgid "      --excludepath <path>"
 msgstr ""
 
-#: ../rpm.c:367
+#: ../rpm.c:366
 msgid "skip files in path <path>"
 msgstr ""
 
-#: ../rpm.c:368
+#: ../rpm.c:367
 msgid "      --relocate <oldpath>=<newpath>"
 msgstr ""
 
-#: ../rpm.c:369
+#: ../rpm.c:368
 msgid "relocate files from <oldpath> to <newpath>"
 msgstr ""
 
-#: ../rpm.c:371
+#: ../rpm.c:370
 msgid "relocate files even though the package doesn't allow it"
 msgstr ""
 
-#: ../rpm.c:372
+#: ../rpm.c:371
 msgid "      --prefix <dir>      "
 msgstr ""
 
-#: ../rpm.c:373
+#: ../rpm.c:372
 msgid "relocate the package to <dir>, if relocatable"
 msgstr ""
 
-#: ../rpm.c:377
+#: ../rpm.c:376
 msgid "do not install documentation"
 msgstr ""
 
-#: ../rpm.c:379
+#: ../rpm.c:378
 msgid "short hand for --replacepkgs --replacefiles"
 msgstr ""
 
-#: ../rpm.c:382
+#: ../rpm.c:381
 msgid "print hash marks as package installs (good with -v)"
 msgstr ""
 
-#: ../rpm.c:384
+#: ../rpm.c:383
 msgid "install all files, even configurations which might otherwise be skipped"
 msgstr ""
 
-#: ../rpm.c:387
+#: ../rpm.c:386
 msgid "don't verify package architecture"
 msgstr ""
 
-#: ../rpm.c:389
+#: ../rpm.c:388
 msgid "don't check disk space before installing"
 msgstr ""
 
-#: ../rpm.c:391
+#: ../rpm.c:390
 msgid "don't verify package operating system"
 msgstr ""
 
-#: ../rpm.c:393
+#: ../rpm.c:392
 msgid "install documentation"
 msgstr ""
 
-#: ../rpm.c:395 ../rpm.c:429
+#: ../rpm.c:394 ../rpm.c:428
 msgid "update the database, but do not modify the filesystem"
 msgstr ""
 
-#: ../rpm.c:399 ../rpm.c:433
+#: ../rpm.c:398 ../rpm.c:432
 msgid "do not reorder package installation to satisfy dependencies"
 msgstr ""
 
-#: ../rpm.c:401
+#: ../rpm.c:400
 msgid "don't execute any installation scripts"
 msgstr ""
 
-#: ../rpm.c:403 ../rpm.c:437
+#: ../rpm.c:402 ../rpm.c:436
 msgid "don't execute any scripts triggered by this package"
 msgstr ""
 
-#: ../rpm.c:405
+#: ../rpm.c:404
 msgid "print percentages as package installs"
 msgstr ""
 
-#: ../rpm.c:407
+#: ../rpm.c:406
 msgid "install even if the package replaces installed files"
 msgstr ""
 
-#: ../rpm.c:409
+#: ../rpm.c:408
 msgid "reinstall if the package is already present"
 msgstr ""
 
-#: ../rpm.c:413
+#: ../rpm.c:412
 msgid "don't install, but tell if it would work or not"
 msgstr ""
 
-#: ../rpm.c:415
+#: ../rpm.c:414
 msgid "    --upgrade <packagefile>"
 msgstr ""
 
-#: ../rpm.c:416
+#: ../rpm.c:415
 msgid "    -U <packagefile>      "
 msgstr ""
 
-#: ../rpm.c:417
+#: ../rpm.c:416
 msgid "upgrade package (same options as --install, plus)"
 msgstr ""
 
-#: ../rpm.c:419
+#: ../rpm.c:418
 msgid ""
 "upgrade to an old version of the package (--force on upgrades does this "
 "automatically)"
 msgstr ""
 
-#: ../rpm.c:421
+#: ../rpm.c:420
 msgid "    --erase <package>"
 msgstr ""
 
-#: ../rpm.c:423
+#: ../rpm.c:422
 msgid "erase (uninstall) package"
 msgstr ""
 
-#: ../rpm.c:425
+#: ../rpm.c:424
 msgid ""
 "remove all packages which match <package> (normally an error is generated if "
 "<package> specified multiple packages)"
 msgstr ""
 
-#: ../rpm.c:435
+#: ../rpm.c:434
 msgid "do not execute any package specific scripts"
 msgstr ""
 
-#: ../rpm.c:441
+#: ../rpm.c:440
 msgid "    -b<stage> <spec>      "
 msgstr ""
 
-#: ../rpm.c:442
+#: ../rpm.c:441
 msgid "    -t<stage> <tarball>   "
 msgstr ""
 
-#: ../rpm.c:443
+#: ../rpm.c:442
 msgid "build package, where <stage> is one of:"
 msgstr ""
 
-#: ../rpm.c:445
+#: ../rpm.c:444
 msgid "prep (unpack sources and apply patches)"
 msgstr ""
 
-#: ../rpm.c:447
+#: ../rpm.c:446
 #, c-format
 msgid "list check (do some cursory checks on %files)"
 msgstr ""
 
-#: ../rpm.c:449
+#: ../rpm.c:448
 msgid "compile (prep and compile)"
 msgstr ""
 
-#: ../rpm.c:451
+#: ../rpm.c:450
 msgid "install (prep, compile, install)"
 msgstr ""
 
-#: ../rpm.c:453
+#: ../rpm.c:452
 msgid "binary package (prep, compile, install, package)"
 msgstr ""
 
-#: ../rpm.c:455
+#: ../rpm.c:454
 msgid "bin/src package (prep, compile, install, package)"
 msgstr ""
 
-#: ../rpm.c:461
+#: ../rpm.c:460
 msgid "remove sources and spec file when done"
 msgstr ""
 
-#: ../rpm.c:463
+#: ../rpm.c:462
 msgid "generate PGP/GPG signature"
 msgstr ""
 
-#: ../rpm.c:464
+#: ../rpm.c:463
 msgid "      --buildroot <dir>   "
 msgstr ""
 
-#: ../rpm.c:465
+#: ../rpm.c:464
 msgid "use <dir> as the build root"
 msgstr ""
 
-#: ../rpm.c:466
+#: ../rpm.c:465
 msgid "      --target=<platform>+"
 msgstr ""
 
-#: ../rpm.c:467
+#: ../rpm.c:466
 msgid "build the packages for the build targets platform1...platformN."
 msgstr ""
 
-#: ../rpm.c:469
+#: ../rpm.c:468
 msgid "do not execute any stages"
 msgstr ""
 
-#: ../rpm.c:470
+#: ../rpm.c:469
 msgid "      --timecheck <secs>  "
 msgstr ""
 
-#: ../rpm.c:471
+#: ../rpm.c:470
 msgid "set the time check to <secs> seconds (0 disables)"
 msgstr ""
 
-#: ../rpm.c:473
+#: ../rpm.c:472
 msgid "    --rebuild <src_pkg>   "
 msgstr ""
 
-#: ../rpm.c:474
+#: ../rpm.c:473
 msgid ""
 "install source package, build binary package and remove spec file, sources, "
 "patches, and icons."
 msgstr ""
 
-#: ../rpm.c:475
+#: ../rpm.c:474
 msgid "    --rmsource <spec>     "
 msgstr ""
 
-#: ../rpm.c:476
+#: ../rpm.c:475
 msgid "remove sources and spec file"
 msgstr ""
 
-#: ../rpm.c:477
+#: ../rpm.c:476
 msgid "    --recompile <src_pkg> "
 msgstr ""
 
-#: ../rpm.c:478
+#: ../rpm.c:477
 msgid "like --rebuild, but don't build any package"
 msgstr ""
 
-#: ../rpm.c:479
+#: ../rpm.c:478
 msgid "    --resign <pkg>+       "
 msgstr ""
 
-#: ../rpm.c:480
+#: ../rpm.c:479
 msgid "sign a package (discard current signature)"
 msgstr ""
 
-#: ../rpm.c:481
+#: ../rpm.c:480
 msgid "    --addsign <pkg>+      "
 msgstr ""
 
-#: ../rpm.c:482
+#: ../rpm.c:481
 msgid "add a signature to a package"
 msgstr ""
 
-#: ../rpm.c:484
+#: ../rpm.c:483
 msgid "    --checksig <pkg>+     "
 msgstr ""
 
-#: ../rpm.c:485
+#: ../rpm.c:484
 msgid "verify package signature"
 msgstr ""
 
-#: ../rpm.c:487
+#: ../rpm.c:486
 msgid "skip any PGP signatures"
 msgstr ""
 
-#: ../rpm.c:489
+#: ../rpm.c:488
 msgid "skip any GPG signatures"
 msgstr ""
 
-#: ../rpm.c:491
+#: ../rpm.c:490
 msgid "skip any MD5 signatures"
 msgstr ""
 
-#: ../rpm.c:493
+#: ../rpm.c:492
 msgid "list the tags that can be used in a query format"
 msgstr ""
 
-#: ../rpm.c:495
+#: ../rpm.c:494
 msgid "make sure a valid database exists"
 msgstr ""
 
-#: ../rpm.c:497
+#: ../rpm.c:496
 msgid "rebuild database from existing database"
 msgstr ""
 
@@ -1475,7 +1475,7 @@ msgstr ""
 msgid "no packages given for install"
 msgstr ""
 
-#: ../rpm.c:1384
+#: ../rpm.c:1385
 msgid "extra arguments given for query of all packages"
 msgstr ""
 
@@ -1483,11 +1483,11 @@ msgstr ""
 msgid "no arguments given for query"
 msgstr ""
 
-#: ../rpm.c:1410
+#: ../rpm.c:1411
 msgid "extra arguments given for verify of all packages"
 msgstr ""
 
-#: ../rpm.c:1414
+#: ../rpm.c:1415
 msgid "no arguments given for verify"
 msgstr ""
 
@@ -1529,91 +1529,95 @@ msgstr ""
 msgid "failed to create %s\n"
 msgstr ""
 
-#: ../verify.c:26
+#: ../lib/verify.c:36 ../verify.c:29
 msgid "don't verify files in package"
 msgstr ""
 
-#: ../verify.c:46
+#: ../lib/verify.c:257 ../verify.c:49
 #, c-format
 msgid "missing    %s\n"
 msgstr ""
 
-#: ../verify.c:110
+#: ../lib/verify.c:321 ../verify.c:113
 #, c-format
 msgid "Unsatisfied dependencies for %s-%s-%s: "
 msgstr ""
 
-#: ../verify.c:156
+#: ../lib/query.c:514 ../verify.c:161
 #, c-format
-msgid "verifying record number %u\n"
+msgid "record number %u\n"
 msgstr ""
 
-#: ../lib/query.c:435 ../verify.c:161
+#: ../lib/query.c:518 ../verify.c:165
 msgid "error: could not read database record\n"
 msgstr ""
 
-#: ../lib/query.c:534 ../verify.c:202
+#: ../lib/query.c:742 ../verify.c:197
+msgid "rpmQuery: rpmdbOpen() failed\n"
+msgstr ""
+
+#: ../lib/query.c:547 ../verify.c:209
 #, c-format
 msgid "open of %s failed\n"
 msgstr ""
 
-#: ../lib/query.c:558 ../verify.c:221
+#: ../verify.c:228
 #, c-format
-msgid "query of %s failed\n"
+msgid "verify of %s failed\n"
 msgstr ""
 
-#: ../lib/query.c:610 ../verify.c:236
+#: ../lib/query.c:627 ../verify.c:243
 msgid "could not read database record!\n"
 msgstr ""
 
-#: ../lib/query.c:621 ../verify.c:247
+#: ../lib/query.c:638 ../verify.c:254
 #, c-format
 msgid "group %s does not contain any packages\n"
 msgstr ""
 
-#: ../lib/query.c:631 ../verify.c:257
+#: ../lib/query.c:648 ../verify.c:264
 #, c-format
 msgid "no package provides %s\n"
 msgstr ""
 
-#: ../lib/query.c:641 ../verify.c:267
+#: ../lib/query.c:658 ../verify.c:274
 #, c-format
 msgid "no package triggers %s\n"
 msgstr ""
 
-#: ../lib/query.c:651 ../verify.c:277
+#: ../lib/query.c:668 ../verify.c:284
 #, c-format
 msgid "no package requires %s\n"
 msgstr ""
 
-#: ../lib/query.c:666 ../verify.c:292
+#: ../lib/query.c:683 ../verify.c:299
 #, c-format
 msgid "file %s: %s\n"
 msgstr ""
 
-#: ../lib/query.c:669 ../verify.c:295
+#: ../lib/query.c:686 ../verify.c:302
 #, c-format
 msgid "file %s is not owned by any package\n"
 msgstr ""
 
-#: ../lib/query.c:703 ../verify.c:312
+#: ../lib/query.c:699 ../verify.c:315
 #, c-format
-msgid "error looking for package %s\n"
+msgid "invalid package number: %s\n"
 msgstr ""
 
-#: ../lib/query.c:682 ../verify.c:322
+#: ../lib/query.c:702 ../verify.c:318
 #, c-format
-msgid "invalid package number: %s\n"
+msgid "package record number: %d\n"
 msgstr ""
 
-#: ../verify.c:325
+#: ../lib/query.c:705 ../verify.c:321
 #, c-format
-msgid "verifying package: %d\n"
+msgid "record %d could not be read\n"
 msgstr ""
 
-#: ../lib/query.c:688 ../verify.c:328
+#: ../lib/query.c:720 ../verify.c:336
 #, c-format
-msgid "record %d could not be read\n"
+msgid "error looking for package %s\n"
 msgstr ""
 
 #: ../build/build.c:83 ../build/pack.c:248
@@ -2786,125 +2790,116 @@ msgstr ""
 msgid "unknown error %d encountered while manipulating package %s-%s-%s"
 msgstr ""
 
-#: ../lib/query.c:61
+#: ../lib/query.c:57
 msgid "query package owning file"
 msgstr ""
 
-#: ../lib/query.c:63
+#: ../lib/query.c:59
 msgid "query packages in group"
 msgstr ""
 
-#: ../lib/query.c:65
+#: ../lib/query.c:61
 msgid "query a package file"
 msgstr ""
 
-#: ../lib/query.c:69
+#: ../lib/query.c:65
 msgid "query a spec file"
 msgstr ""
 
-#: ../lib/query.c:71
+#: ../lib/query.c:67
 msgid "query the pacakges triggered by the package"
 msgstr ""
 
-#: ../lib/query.c:73
+#: ../lib/query.c:69
 msgid "query the packages which require a capability"
 msgstr ""
 
-#: ../lib/query.c:75
+#: ../lib/query.c:71
 msgid "query the packages which provide a capability"
 msgstr ""
 
-#: ../lib/query.c:111
+#: ../lib/query.c:108
 msgid "list all configuration files"
 msgstr ""
 
-#: ../lib/query.c:113
+#: ../lib/query.c:110
 msgid "list all documentation files"
 msgstr ""
 
-#: ../lib/query.c:115
+#: ../lib/query.c:112
 msgid "dump basic file information"
 msgstr ""
 
-#: ../lib/query.c:117
+#: ../lib/query.c:114
 msgid "list files in package"
 msgstr ""
 
-#: ../lib/query.c:121
+#: ../lib/query.c:118
 msgid "use the following query format"
 msgstr ""
 
-#: ../lib/query.c:123
+#: ../lib/query.c:120
 msgid "substitute i18n sections from the following catalogue"
 msgstr ""
 
-#: ../lib/query.c:126
+#: ../lib/query.c:123
 msgid "display the states of the listed files"
 msgstr ""
 
-#: ../lib/query.c:128
+#: ../lib/query.c:125
 msgid "display a verbose file listing"
 msgstr ""
 
-#: ../lib/query.c:139
+#: ../lib/query.c:136
 #, c-format
 msgid "error in format: %s\n"
 msgstr ""
 
-#: ../lib/query.c:176
+#: ../lib/query.c:177
 msgid "(contains no files)"
 msgstr ""
 
-#: ../lib/query.c:229
+#: ../lib/query.c:230
 msgid "normal        "
 msgstr ""
 
-#: ../lib/query.c:231
+#: ../lib/query.c:232
 msgid "replaced      "
 msgstr ""
 
-#: ../lib/query.c:233
+#: ../lib/query.c:234
 msgid "net shared    "
 msgstr ""
 
-#: ../lib/query.c:235
+#: ../lib/query.c:236
 msgid "not installed "
 msgstr ""
 
-#: ../lib/query.c:237
+#: ../lib/query.c:238
 #, c-format
 msgid "(unknown %3d) "
 msgstr ""
 
-#: ../lib/query.c:241
+#: ../lib/query.c:242
 msgid "(no state)    "
 msgstr ""
 
-#: ../lib/query.c:257 ../lib/query.c:287
+#: ../lib/query.c:258 ../lib/query.c:288
 msgid "package has neither file owner or id lists"
 msgstr ""
 
-#: ../lib/query.c:430
-#, c-format
-msgid "querying record number %d\n"
-msgstr ""
-
-#: ../lib/query.c:519
-msgid "rpmQuery: rpmdbOpen() failed\n"
-msgstr ""
-
-#: ../lib/query.c:547
+#: ../lib/query.c:560
 msgid "old format source packages cannot be queried\n"
 msgstr ""
 
-#: ../lib/query.c:577
+#: ../lib/query.c:572
 #, c-format
-msgid "query of specfile %s failed, can't parse\n"
+msgid "query of %s failed\n"
 msgstr ""
 
-#: ../lib/query.c:685
+#: ../lib/query.c:593
 #, c-format
-msgid "showing package: %d\n"
+msgid "query of specfile %s failed, can't parse\n"
 msgstr ""
 
 #: ../lib/rebuilddb.c:18
@@ -3335,10 +3330,14 @@ msgstr ""
 msgid "removal of %s failed: %s"
 msgstr ""
 
-#: ../lib/verify.c:179
+#: ../lib/verify.c:206
 msgid "package lacks both user name and id lists (this should never happen)"
 msgstr ""
 
-#: ../lib/verify.c:197
+#: ../lib/verify.c:224
 msgid "package lacks both group name and id lists (this should never happen)"
 msgstr ""
+
+#: ../lib/verify.c:369
+msgid "rpmVerify: rpmdbOpen() failed\n"
+msgstr ""
diff --git a/rpm.c b/rpm.c
index 70d3bce..df24014 100755 (executable)
--- a/rpm.c
+++ b/rpm.c
@@ -7,7 +7,6 @@
 #include "install.h"
 #include "lib/signature.h"
 #include "popt/popt.h"
-#include "verify.h"
 
 #define GETOPT_REBUILD         1003
 #define GETOPT_RECOMPILE       1004
@@ -503,6 +502,7 @@ static void printHelp(void) {
 
 int main(int argc, char ** argv) {
     enum modes bigMode = MODE_UNKNOWN;
+    QVA_t *qva = &rpmQVArgs;
     enum rpmQVSources QVSource = RPMQV_PACKAGE;
     int arg;
     int installFlags = 0, uninstallFlags = 0, interfaceFlags = 0;
@@ -615,8 +615,8 @@ int main(int argc, char ** argv) {
 
     poptResetContext(optCon);
 
-    if (rpmQVArgs.queryFormat) free(rpmQVArgs.queryFormat);
-    memset(&rpmQVArgs, 0, sizeof(rpmQVArgs));
+    if (qva->qva_queryFormat) xfree(qva->qva_queryFormat);
+    memset(qva, 0, sizeof(*qva));
     if (buildArgs.buildRootOverride) xfree(buildArgs.buildRootOverride);
     if (buildArgs.targets) free(buildArgs.targets);
     memset(&buildArgs, 0, sizeof(buildArgs));
@@ -918,11 +918,11 @@ int main(int argc, char ** argv) {
            bigMode = MODE_QUERYTAGS;
     }
 
-    if (rpmQVArgs.sourceCount) {
-       if (QVSource != RPMQV_PACKAGE || rpmQVArgs.sourceCount > 1)
+    if (qva->qva_sourceCount) {
+       if (QVSource != RPMQV_PACKAGE || qva->qva_sourceCount > 1)
            argerror(_("one type of query/verify may be performed at a "
                        "time"));
-       QVSource = rpmQVArgs.source;
+       QVSource = qva->qva_source;
     }
 
     if (buildArgs.buildRootOverride && bigMode != MODE_BUILD &&
@@ -940,10 +940,10 @@ int main(int argc, char ** argv) {
        bigMode != MODE_RECOMPILE && bigMode != MODE_TARBUILD) 
        argerror(_("--timecheck may only be used during package builds"));
     
-    if (bigMode != MODE_QUERY && rpmQVArgs.flags) 
+    if (bigMode != MODE_QUERY && qva->qva_flags) 
        argerror(_("unexpected query specifiers"));
 
-    if (bigMode != MODE_QUERY && rpmQVArgs.queryFormat) 
+    if (bigMode != MODE_QUERY && qva->qva_queryFormat) 
        argerror(_("unexpected query specifiers"));
 
     if (bigMode != MODE_QUERY && bigMode != MODE_VERIFY &&
@@ -1379,18 +1379,17 @@ int main(int argc, char ** argv) {
        break;
 
       case MODE_QUERY:
+       qva->qva_prefix = rootdir;
        if (QVSource == RPMQV_ALL) {
            if (poptPeekArg(optCon))
                argerror(_("extra arguments given for query of all packages"));
 
-           ec = rpmQuery(rootdir, RPMQV_ALL, rpmQVArgs.flags, NULL, 
-                        rpmQVArgs.queryFormat);
+           ec = rpmQuery(qva, RPMQV_ALL, NULL);
        } else {
            if (!poptPeekArg(optCon))
                argerror(_("no arguments given for query"));
            while ((pkg = poptGetArg(optCon)))
-               ec = rpmQuery(rootdir, QVSource, rpmQVArgs.flags, pkg, 
-                            rpmQVArgs.queryFormat);
+               ec = rpmQuery(qva, QVSource, pkg);
        }
        break;
 
@@ -1399,21 +1398,23 @@ int main(int argc, char ** argv) {
 #ifdef DELETE
        if (!noFiles) verifyFlags |= VERIFY_FILES;
 #else
-       verifyFlags &= ~rpmQVArgs.flags;
+       verifyFlags &= ~qva->qva_flags;
 #endif
        if (noDeps)     verifyFlags &= ~VERIFY_DEPS;
        if (noScripts)  verifyFlags &= ~VERIFY_SCRIPT;
        if (noMd5)      verifyFlags &= ~VERIFY_MD5;
 
+       qva->qva_prefix = rootdir;
+       qva->qva_flags = verifyFlags;
        if (QVSource == RPMQV_ALL) {
            if (poptPeekArg(optCon))
                argerror(_("extra arguments given for verify of all packages"));
-           ec = rpmVerify(rootdir, RPMQV_ALL, verifyFlags, NULL);
+           ec = rpmVerify(qva, RPMQV_ALL, NULL);
        } else {
            if (!poptPeekArg(optCon))
                argerror(_("no arguments given for verify"));
            while ((pkg = poptGetArg(optCon)))
-               ec = rpmVerify(rootdir, QVSource, verifyFlags, pkg);
+               ec = rpmVerify(qva, QVSource, pkg);
        }
        break;
     }
@@ -1426,7 +1427,7 @@ int main(int argc, char ** argv) {
     }
 
     /* keeps memory leak checkers quiet */
-    if (rpmQVArgs.queryFormat) free(rpmQVArgs.queryFormat);
+    if (qva->qva_queryFormat) xfree(qva->qva_queryFormat);
 
     return ec;
 }
index 256bf92..ca69603 100644 (file)
--- a/rpm.spec
+++ b/rpm.spec
@@ -2,7 +2,7 @@ Summary: The Red Hat package management system.
 Name: rpm
 %define version 3.0.1
 Version: %{version}
-Release: 7
+Release: 8
 Group: System Environment/Base
 Source: ftp://ftp.rpm.org/pub/rpm/dist/rpm-3.0.x/rpm-%{version}.tar.gz
 Copyright: GPL
index 0824f30..c07853e 100644 (file)
@@ -29,7 +29,7 @@ int rpmIsVerbose(void)
     return (minLevel <= RPMMESS_VERBOSE);
 }
 
-void rpmMessage(int level, char * format, ...) {
+void rpmMessage(int level, const char * format, ...) {
     va_list args;
 
     va_start(args, format);
index 2ba1801..d0ed728 100644 (file)
--- a/verify.c
+++ b/verify.c
@@ -4,17 +4,20 @@
 
 #include "install.h"
 #include "url.h"
-#include "verify.h"
+
+#if DEAD
+typedef        int (*QVF_t) (QVA_t *qva, rpmdb db, Header h);
+#endif
 
 #define        POPT_NOFILES    1000
 
 /* ========== Verify specific popt args */
 static void verifyArgCallback(poptContext con, enum poptCallbackReason reason,
                             const struct poptOption * opt, const char * arg, 
-                            struct rpmQVArguments * data)
+                            QVA_t *qva)
 {
     switch (opt->val) {
-      case POPT_NOFILES: data->flags |= VERIFY_FILES; break;
+      case POPT_NOFILES: qva->qva_flags |= VERIFY_FILES; break;
     }
 }
 
@@ -28,7 +31,7 @@ struct poptOption rpmVerifyPoptTable[] = {
 };
 
 /* ======================================================================== */
-static int verifyHeader(const char * prefix, Header h, int verifyFlags) {
+static int verifyHeader(QVA_t *qva, Header h) {
     const char ** fileList;
     int count, type;
     int verifyResult;
@@ -37,12 +40,12 @@ static int verifyHeader(const char * prefix, Header h, int verifyFlags) {
     int omitMask = 0;
 
     ec = 0;
-    if (!(verifyFlags & VERIFY_MD5)) omitMask = RPMVERIFY_MD5;
+    if (!(qva->qva_flags & VERIFY_MD5)) omitMask = RPMVERIFY_MD5;
 
     if (headerGetEntry(h, RPMTAG_FILEFLAGS, NULL, (void **) &fileFlagsList, NULL) &&
        headerGetEntry(h, RPMTAG_FILENAMES, &type, (void **) &fileList, &count)) {
        for (i = 0; i < count; i++) {
-           if ((rc = rpmVerifyFile(prefix, h, i, &verifyResult, omitMask)) != 0) {
+           if ((rc = rpmVerifyFile(qva->qva_prefix, h, i, &verifyResult, omitMask)) != 0) {
                fprintf(stdout, _("missing    %s\n"), fileList[i]);
            } else {
                const char * size, * md5, * link, * mtime, * mode;
@@ -124,72 +127,76 @@ static int verifyDependencies(rpmdb db, Header h) {
     return 0;
 }
 
-static int verifyPackage(const char * root, rpmdb db, Header h, int verifyFlags) {
+static int showVerifyPackage(QVA_t *qva, rpmdb db, Header h) {
     int ec, rc;
     FD_t fdo;
     ec = 0;
-    if ((verifyFlags & VERIFY_DEPS) &&
+    if ((qva->qva_flags & VERIFY_DEPS) &&
        (rc = verifyDependencies(db, h)) != 0)
            ec = rc;
-    if ((verifyFlags & VERIFY_FILES) &&
-       (rc = verifyHeader(root, h, verifyFlags)) != 0)
+    if ((qva->qva_flags & VERIFY_FILES) &&
+       (rc = verifyHeader(qva, h)) != 0)
            ec = rc;;
     fdo = fdDup(STDOUT_FILENO);
-    if ((verifyFlags & VERIFY_SCRIPT) &&
-       (rc = rpmVerifyScript(root, h, fdo)) != 0)
+    if ((qva->qva_flags & VERIFY_SCRIPT) &&
+       (rc = rpmVerifyScript(qva->qva_prefix, h, fdo)) != 0)
            ec = rc;
     fdClose(fdo);
     return ec;
 }
 
-static int verifyMatches(const char * prefix, rpmdb db, dbiIndexSet matches,
-                         int verifyFlags) {
-    int ec, rc;
-    int i;
+#if DELETE_ME
+int
+showMatches(QVA_t *qva, rpmdb db, dbiIndexSet matches, QVF_t showPackage)
+{
     Header h;
+    int ec = 0;
+    int i;
 
-    ec = 0;
     for (i = 0; i < dbiIndexSetCount(matches); i++) {
+       int rc;
        unsigned int recOffset = dbiIndexRecordOffset(matches, i);
        if (recOffset == 0)
            continue;
-       rpmMessage(RPMMESS_DEBUG, _("verifying record number %u\n"),
-               recOffset);
+       rpmMessage(RPMMESS_DEBUG, _("record number %u\n"), recOffset);
            
        h = rpmdbGetRecord(db, recOffset);
        if (h == NULL) {
                fprintf(stderr, _("error: could not read database record\n"));
                ec = 1;
        } else {
-               if ((rc = verifyPackage(prefix, db, h, verifyFlags)) != 0)
+               if ((rc = showPackage(qva, db, h)) != 0)
                    ec = rc;
                headerFree(h);
        }
     }
     return ec;
 }
+#endif
 
-int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
-             const char *arg)
+int rpmVerify(QVA_t *qva, enum rpmQVSources source, const char *arg)
 {
+    QVF_t showPackage = showVerifyPackage;
+    rpmdb db = NULL;
+    dbiIndexSet matches;
     Header h;
     int offset;
     int rc;
     int isSource;
-    rpmdb db = NULL;
-    dbiIndexSet matches;
     int recNumber;
     int retcode = 0;
     char *end = NULL;
 
     switch (source) {
     case RPMQV_RPM:
-       if (!(verifyFlags & VERIFY_DEPS))
+       if (!(qva->qva_flags & VERIFY_DEPS))
            break;
        /* fall thru */
     default:
-       if (rpmdbOpen(prefix, &db, O_RDONLY, 0644))
-           return 1;   /* XXX was exit(EXIT_FAILURE) */
+       if (rpmdbOpen(qva->qva_prefix, &db, O_RDONLY, 0644)) {
+           fprintf(stderr, _("rpmQuery: rpmdbOpen() failed\n"));
+           return 1;
+       }
        break;
     }
 
@@ -211,14 +218,14 @@ int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
 
        switch (retcode) {
        case 0:
-           retcode = verifyPackage(prefix, db, h, verifyFlags);
+           retcode = showPackage(qva, db, h);
            headerFree(h);
            break;
        case 1:
            fprintf(stderr, _("%s does not appear to be a RPM package\n"), arg);
            /* fallthrough */
        case 2:
-           fprintf(stderr, _("query of %s failed\n"), arg);
+           fprintf(stderr, _("verify of %s failed\n"), arg);
            retcode = 1;
            break;
        }
@@ -234,20 +241,20 @@ int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
                h = rpmdbGetRecord(db, offset);
                if (h == NULL) {
                    fprintf(stderr, _("could not read database record!\n"));
-                   return 1;   /* XXX was exit(EXIT_FAILURE) */
+                   return 1;
                }
-               
-               if ((rc = verifyPackage(prefix, db, h, verifyFlags)) != 0)
+               if ((rc = showPackage(qva, db, h)) != 0)
                    retcode = rc;
                headerFree(h);
        }
        break;
+
       case RPMQV_GROUP:
        if (rpmdbFindByGroup(db, arg, &matches)) {
-           fprintf(stderr, _("group %s does not contain any packages\n"), 
-                       arg);
+           fprintf(stderr, _("group %s does not contain any packages\n"), arg);
+           retcode = 1;
        } else {
-           retcode = verifyMatches(prefix, db, matches, verifyFlags);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -257,7 +264,7 @@ int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
            fprintf(stderr, _("no package provides %s\n"), arg);
            retcode = 1;
        } else {
-           retcode = verifyMatches(prefix, db, matches, verifyFlags);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -267,7 +274,7 @@ int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
            fprintf(stderr, _("no package triggers %s\n"), arg);
            retcode = 1;
        } else {
-           retcode = verifyMatches(prefix, db, matches, verifyFlags);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -277,7 +284,7 @@ int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
            fprintf(stderr, _("no package requires %s\n"), arg);
            retcode = 1;
        } else {
-           retcode = verifyMatches(prefix, db, matches, verifyFlags);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -297,21 +304,7 @@ int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
            }
            retcode = 1;
        } else {
-           retcode = verifyMatches(prefix, db, matches, verifyFlags);
-           dbiFreeIndexRecord(matches);
-       }
-       break;
-
-      case RPMQV_PACKAGE:
-       rc = rpmdbFindByLabel(db, arg, &matches);
-       if (rc == 1) {
-           retcode = 1;
-           fprintf(stderr, _("package %s is not installed\n"), arg);
-       } else if (rc == 2) {
-           retcode = 1;
-           fprintf(stderr, _("error looking for package %s\n"), arg);
-       } else {
-           retcode = verifyMatches(prefix, db, matches, verifyFlags);
+           retcode = showMatches(qva, db, matches, showPackage);
            dbiFreeIndexRecord(matches);
        }
        break;
@@ -322,21 +315,35 @@ int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
            fprintf(stderr, _("invalid package number: %s\n"), arg);
            return 1;
        }
-       rpmMessage(RPMMESS_DEBUG, _("verifying package: %d\n"), recNumber);
+       rpmMessage(RPMMESS_DEBUG, _("package record number: %d\n"), recNumber);
        h = rpmdbGetRecord(db, recNumber);
        if (h == NULL)  {
            fprintf(stderr, _("record %d could not be read\n"), recNumber);
            retcode = 1;
        } else {
-           rc = verifyMatches(prefix, db, matches, verifyFlags);
+           retcode = showPackage(qva, db, h);
            headerFree(h);
        }
        break;
+
+      case RPMQV_PACKAGE:
+       rc = rpmdbFindByLabel(db, arg, &matches);
+       if (rc == 1) {
+           retcode = 1;
+           fprintf(stderr, _("package %s is not installed\n"), arg);
+       } else if (rc == 2) {
+           retcode = 1;
+           fprintf(stderr, _("error looking for package %s\n"), arg);
+       } else {
+           retcode = showMatches(qva, db, matches, showPackage);
+           dbiFreeIndexRecord(matches);
+       }
+       break;
     }
    
-    switch(source) {
+    switch (source) {
     case RPMQV_RPM:
-       if (!(verifyFlags & VERIFY_DEPS))
+       if (!(qva->qva_flags & VERIFY_DEPS))
            break;
        /* fall thru */
     default:
diff --git a/verify.h b/verify.h
deleted file mode 100644 (file)
index 0ee4d1a..0000000
--- a/verify.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef H_VERIFY
-#define H_VERIFY
-
-#include <rpmlib.h>
-
-#define VERIFY_FILES           (1 << 1)
-#define VERIFY_DEPS            (1 << 2)
-#define VERIFY_SCRIPT          (1 << 3)
-#define VERIFY_MD5             (1 << 4)
-
-extern struct poptOption rpmVerifyPoptTable[];
-
-int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags,
-       const char *arg);
-
-#endif