- 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.
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@
return (minLevel <= RPMMESS_VERBOSE);
}
-void rpmMessage(int level, char * format, ...) {
+void rpmMessage(int level, const char * format, ...) {
va_list args;
va_start(args, format);
#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,
/* ========== 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;
}
}
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;
}
}
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;
}
}
}
+ return 0; /* XXX FIXME: need real return code */
}
static char * permsString(int 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
}
}
-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) {
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);
} break;
case RPMQV_SPECFILE:
+ if (showPackage != showQueryPackage)
+ return 1;
{ Spec spec = NULL;
Package pkg;
char * buildRoot = NULL;
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;
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;
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;
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;
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;
}
retcode = 1;
} else {
- showMatches(db, matches, queryFlags, queryFormat);
+ retcode = showMatches(qva, db, matches, showPackage);
dbiFreeIndexRecord(matches);
}
break;
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;
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;
}
int rpmGetVerbosity(void);
int rpmIsVerbose(void);
int rpmIsDebug(void);
-void rpmMessage(int level, char * format, ...);
+void rpmMessage(int level, const char * format, ...);
/** rpmlead.c **/
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)
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
}
#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')
#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;
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;
+}
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"
msgid "override build root"
msgstr ""
-#: ../build.c:323 ../rpm.c:459
+#: ../build.c:323 ../rpm.c:458
msgid "remove build tree when done"
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 ""
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 ""
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 ""
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 ""
msgid "no packages given for install"
msgstr ""
-#: ../rpm.c:1384
+#: ../rpm.c:1385
msgid "extra arguments given for query of all packages"
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 ""
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
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
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 ""
#include "install.h"
#include "lib/signature.h"
#include "popt/popt.h"
-#include "verify.h"
#define GETOPT_REBUILD 1003
#define GETOPT_RECOMPILE 1004
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;
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));
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 &&
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 &&
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;
#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;
}
}
/* keeps memory leak checkers quiet */
- if (rpmQVArgs.queryFormat) free(rpmQVArgs.queryFormat);
+ if (qva->qva_queryFormat) xfree(qva->qva_queryFormat);
return ec;
}
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
return (minLevel <= RPMMESS_VERBOSE);
}
-void rpmMessage(int level, char * format, ...) {
+void rpmMessage(int level, const char * format, ...) {
va_list args;
va_start(args, format);
#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;
}
}
};
/* ======================================================================== */
-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;
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;
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;
}
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;
}
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;
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;
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;
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;
}
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;
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:
+++ /dev/null
-#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