From 92dc15f7ffe5400e2beae7c099d1c9e99678b557 Mon Sep 17 00:00:00 2001 From: jbj Date: Fri, 7 May 1999 18:33:35 +0000 Subject: [PATCH] fix: resurrect -Vp, -Vf and -Vg functionality. CVS patchset: 3052 CVS date: 1999/05/07 18:33:35 --- CHANGES | 2 + lib/query.c | 137 ++++++------ lib/rpmlib.h | 29 +-- po/rpm.pot | 692 ++++++++++++++++++++++++++++++----------------------------- rpm.c | 119 +++++----- rpm.spec | 2 +- verify.c | 250 ++++++++++++++------- verify.h | 15 +- 8 files changed, 688 insertions(+), 558 deletions(-) diff --git a/CHANGES b/CHANGES index d9bc2c2..4ad9295 100644 --- a/CHANGES +++ b/CHANGES @@ -7,11 +7,13 @@ - 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. - 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. 2.94 -> 2.95 - fix: last update transaction set segfault bug in installer. diff --git a/lib/query.c b/lib/query.c index a5cab38..59a35ad 100644 --- a/lib/query.c +++ b/lib/query.c @@ -6,7 +6,7 @@ #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); @@ -25,19 +25,46 @@ static void printFileInfo(char * name, unsigned int size, unsigned short mode, #define POPT_DUMP 1005 #define POPT_SPECFILE 1006 -static void queryArgCallback(poptContext con, enum poptCallbackReason reason, +/* ========== Query/Verify source popt args */ +static void rpmQVSourceArgCallback(poptContext con, enum poptCallbackReason reason, const struct poptOption * opt, const char * arg, - struct rpmQueryArguments * data); + struct rpmQVArguments* data) { + + 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; + +/* XXX SPECFILE is not verify sources */ + case POPT_SPECFILE: + data->source |= RPMQV_SPECFILE; + data->sourceCount++; + break; + case POPT_QUERYBYNUMBER: + data->source |= RPMQV_DBOFFSET; + data->sourceCount++; + break; + } +} -struct poptOption rpmQuerySourcePoptTable[] = { +struct poptOption rpmQVSourcePoptTable[] = { { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, - queryArgCallback, 0, NULL, NULL }, + rpmQVSourceArgCallback, 0, NULL, NULL }, { "file", 'f', 0, 0, 'f', N_("query package owning file"), "FILE" }, { "group", 'g', 0, 0, 'g', N_("query packages in group"), "GROUP" }, { "package", 'p', 0, 0, 'p', N_("query a package file"), NULL }, + { "querybynumber", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, + POPT_QUERYBYNUMBER, NULL, NULL }, { "specfile", '\0', 0, 0, POPT_SPECFILE, N_("query a spec file"), NULL }, { "triggeredby", '\0', 0, 0, POPT_TRIGGEREDBY, @@ -49,34 +76,12 @@ struct poptOption rpmQuerySourcePoptTable[] = { { 0, 0, 0, 0, 0, NULL, NULL } }; -struct poptOption rpmQueryPoptTable[] = { - { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, - queryArgCallback, 0, NULL, NULL }, - { "configfiles", 'c', 0, 0, 'c', - N_("list all configuration files"), NULL }, - { "docfiles", 'd', 0, 0, 'd', - N_("list all documetnation files"), NULL }, - { "dump", '\0', 0, 0, POPT_DUMP, - N_("dump basic file information"), NULL }, - { "list", 'l', 0, 0, 'l', - N_("list files in package"), NULL }, - { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0, - POPT_QUERYFORMAT, NULL, NULL }, - { "querybynumber", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, - POPT_QUERYBYNUMBER, NULL, NULL }, - { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT, - N_("use the following query format"), "QUERYFORMAT" }, - { "state", 's', 0, 0, 's', - N_("display the states of the listed files"), NULL }, - { "verbose", 'v', 0, 0, 'v', - N_("display a verbose file listing"), NULL }, - { 0, 0, 0, 0, 0, NULL, NULL } -}; +/* ========== Query specific popt args */ +extern char *specedit; static void queryArgCallback(poptContext con, enum poptCallbackReason reason, const struct poptOption * opt, const char * arg, - struct rpmQueryArguments * data) { - int len; + struct rpmQVArguments * data) { switch (opt->val) { case 'c': data->flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break; @@ -84,25 +89,11 @@ static void queryArgCallback(poptContext con, enum poptCallbackReason reason, 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 'a': data->source |= QUERY_ALL; data->sourceCount++; break; - case 'f': data->source |= QUERY_PATH; data->sourceCount++; break; - case 'g': data->source |= QUERY_GROUP; data->sourceCount++; break; - case 'p': data->source |= QUERY_RPM; data->sourceCount++; break; case 'v': rpmIncreaseVerbosity(); break; - case POPT_SPECFILE: data->source |= QUERY_SPECFILE; data->sourceCount++; break; - case POPT_WHATPROVIDES: data->source |= QUERY_WHATPROVIDES; - data->sourceCount++; break; - case POPT_WHATREQUIRES: data->source |= QUERY_WHATREQUIRES; - data->sourceCount++; break; - case POPT_QUERYBYNUMBER: data->source |= QUERY_DBOFFSET; - data->sourceCount++; break; - case POPT_TRIGGEREDBY: data->source |= QUERY_TRIGGEREDBY; - data->sourceCount++; break; case POPT_QUERYFORMAT: if (data->queryFormat) { - len = strlen(data->queryFormat) + strlen(arg) + 1; + int len = strlen(data->queryFormat) + strlen(arg) + 1; data->queryFormat = realloc(data->queryFormat, len); strcat(data->queryFormat, arg); } else { @@ -113,6 +104,32 @@ static void queryArgCallback(poptContext con, enum poptCallbackReason reason, } } +struct poptOption rpmQueryPoptTable[] = { + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, + queryArgCallback, 0, NULL, NULL }, + { "configfiles", 'c', 0, 0, 'c', + N_("list all configuration files"), NULL }, + { "docfiles", 'd', 0, 0, 'd', + N_("list all documentation files"), NULL }, + { "dump", '\0', 0, 0, POPT_DUMP, + N_("dump basic file information"), NULL }, + { "list", 'l', 0, 0, 'l', + N_("list files in package"), NULL }, + { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0, + POPT_QUERYFORMAT, NULL, NULL }, + { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT, + N_("use the following query format"), "QUERYFORMAT" }, + { "specedit", '\0', POPT_ARG_STRING, &specedit, 0, + N_("substitute i18n sections from the following catalogue"), + "METACATALOGUE" }, + { "state", 's', 0, 0, 's', + N_("display the states of the listed files"), NULL }, + { "verbose", 'v', 0, 0, 'v', + N_("display a verbose file listing"), NULL }, + { 0, 0, 0, 0, 0, NULL, NULL } +}; + +/* ======================================================================== */ static int queryHeader(Header h, const char * chptr) { char * str; char * error; @@ -484,7 +501,7 @@ printNewSpecfile(Spec spec) } } -int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, +int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags, const char * arg, const char * queryFormat) { Header h; int offset; @@ -503,13 +520,13 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, exit(1); } break; - case QUERY_RPM: - case QUERY_SPECFILE: + case RPMQV_RPM: + case RPMQV_SPECFILE: break; } switch (source) { - case QUERY_RPM: + case RPMQV_RPM: { FD_t fd; fd = ufdOpen(arg, O_RDONLY, 0); @@ -544,7 +561,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, } } break; - case QUERY_SPECFILE: + case RPMQV_SPECFILE: { Spec spec = NULL; Package pkg; char * buildRoot = NULL; @@ -585,7 +602,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, freeSpec(spec); } break; - case QUERY_ALL: + case RPMQV_ALL: offset = rpmdbFirstRecNum(db); while (offset) { h = rpmdbGetRecord(db, offset); @@ -599,7 +616,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, } break; - case QUERY_GROUP: + case RPMQV_GROUP: if (rpmdbFindByGroup(db, arg, &matches)) { fprintf(stderr, _("group %s does not contain any packages\n"), arg); retcode = 1; @@ -609,7 +626,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, } break; - case QUERY_WHATPROVIDES: + case RPMQV_WHATPROVIDES: if (rpmdbFindByProvides(db, arg, &matches)) { fprintf(stderr, _("no package provides %s\n"), arg); retcode = 1; @@ -619,7 +636,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, } break; - case QUERY_TRIGGEREDBY: + case RPMQV_TRIGGEREDBY: if (rpmdbFindByTriggeredBy(db, arg, &matches)) { fprintf(stderr, _("no package triggers %s\n"), arg); retcode = 1; @@ -629,7 +646,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, } break; - case QUERY_WHATREQUIRES: + case RPMQV_WHATREQUIRES: if (rpmdbFindByRequiredBy(db, arg, &matches)) { fprintf(stderr, _("no package requires %s\n"), arg); retcode = 1; @@ -639,7 +656,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, } break; - case QUERY_PATH: + case RPMQV_PATH: if (rpmdbFindByFile(db, arg, &matches)) { int myerrno = 0; if (access(arg, F_OK) != 0) @@ -659,7 +676,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, } break; - case QUERY_DBOFFSET: + case RPMQV_DBOFFSET: recNumber = strtoul(arg, &end, 10); if ((*end) || (end == arg) || (recNumber == ULONG_MAX)) { fprintf(stderr, _("invalid package number: %s\n"), arg); @@ -676,7 +693,7 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, } break; - case QUERY_PACKAGE: + case RPMQV_PACKAGE: rc = rpmdbFindByLabel(db, arg, &matches); if (rc == 1) { retcode = 1; @@ -695,8 +712,8 @@ int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, default: rpmdbClose(db); break; - case QUERY_RPM: - case QUERY_SPECFILE: + case RPMQV_RPM: + case RPMQV_SPECFILE: break; } diff --git a/lib/rpmlib.h b/lib/rpmlib.h index 4c645df..5ac2969 100644 --- a/lib/rpmlib.h +++ b/lib/rpmlib.h @@ -592,9 +592,20 @@ int rpmGetFilesystemList(const char *** listptr, int * num); int rpmGetFilesystemUsage(const char ** filelist, int_32 * fssizes, int numFiles, uint_32 ** usagesPtr, int flags); -enum rpmQuerySources { QUERY_PACKAGE = 0, QUERY_PATH, QUERY_ALL, QUERY_RPM, - QUERY_GROUP, QUERY_WHATPROVIDES, QUERY_WHATREQUIRES, - QUERY_DBOFFSET, QUERY_TRIGGEREDBY, QUERY_SPECFILE }; +/* XXX SPECFILE is not verify sources */ +enum rpmQVSources { RPMQV_PACKAGE = 0, RPMQV_PATH, RPMQV_ALL, RPMQV_RPM, + RPMQV_GROUP, RPMQV_WHATPROVIDES, RPMQV_WHATREQUIRES, + RPMQV_TRIGGEREDBY, RPMQV_DBOFFSET, RPMQV_SPECFILE }; + +extern struct poptOption rpmQVSourcePoptTable[]; + +struct rpmQVArguments { + enum rpmQVSources source; + int sourceCount; /* > 1 is an error */ + int flags; + int verbose; + char * queryFormat; +}; #define QUERY_FOR_LIST (1 << 1) #define QUERY_FOR_STATE (1 << 2) @@ -602,18 +613,10 @@ enum rpmQuerySources { QUERY_PACKAGE = 0, QUERY_PATH, QUERY_ALL, QUERY_RPM, #define QUERY_FOR_CONFIG (1 << 4) #define QUERY_FOR_DUMPFILES (1 << 8) -extern struct poptOption rpmQuerySourcePoptTable[]; +extern char *specedit; extern struct poptOption rpmQueryPoptTable[]; -struct rpmQueryArguments { - int flags; - enum rpmQuerySources source; - int sourceCount; /* > 1 is an error */ - char * queryFormat; - int verbose; -}; - -int rpmQuery(const char * prefix, enum rpmQuerySources source, int queryFlags, +int rpmQuery(const char * prefix, enum rpmQVSources source, int queryFlags, const char * arg, const char * queryFormat); void rpmDisplayQueryTags(FILE * f); diff --git a/po/rpm.pot b/po/rpm.pot index 033fb97..bd5eae2 100644 --- a/po/rpm.pot +++ b/po/rpm.pot @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 1999-05-06 18:35-0400\n" +"POT-Creation-Date: 1999-05-07 14:21-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -89,7 +89,7 @@ msgstr "" msgid "override build root" msgstr "" -#: ../build.c:323 ../rpm.c:454 +#: ../build.c:323 ../rpm.c:459 msgid "remove build tree when done" msgstr "" @@ -109,7 +109,7 @@ msgstr "" msgid "remove specfile when done" msgstr "" -#: ../build.c:333 ../rpm.c:452 +#: ../build.c:333 ../rpm.c:457 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:538 +#: ../install.c:202 ../lib/query.c:555 ../verify.c:218 #, 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:683 ../verify.c:243 +#: ../install.c:388 ../lib/query.c:700 ../verify.c:309 #, c-format msgid "package %s is not installed\n" msgstr "" @@ -415,1075 +415,1079 @@ msgstr "" msgid "no copyright!\n" msgstr "" -#: ../rpm.c:156 +#: ../rpm.c:161 #, c-format msgid "rpm: %s\n" msgstr "" -#: ../rpm.c:167 +#: ../rpm.c:172 #, c-format msgid "RPM version %s\n" msgstr "" -#: ../rpm.c:171 +#: ../rpm.c:176 msgid "Copyright (C) 1998 - Red Hat Software" msgstr "" -#: ../rpm.c:172 +#: ../rpm.c:177 msgid "" "This may be freely redistributed under the terms of the GNU Public License" msgstr "" -#: ../rpm.c:181 +#: ../rpm.c:186 msgid "usage: rpm {--help}" msgstr "" -#: ../rpm.c:182 +#: ../rpm.c:187 msgid " rpm {--version}" msgstr "" -#: ../rpm.c:183 +#: ../rpm.c:188 msgid " rpm {--initdb} [--dbpath ]" msgstr "" -#: ../rpm.c:184 +#: ../rpm.c:189 msgid "" " rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test]" msgstr "" -#: ../rpm.c:185 +#: ../rpm.c:190 msgid " [--replacepkgs] [--replacefiles] [--root ]" msgstr "" -#: ../rpm.c:186 +#: ../rpm.c:191 msgid " [--excludedocs] [--includedocs] [--noscripts]" msgstr "" -#: ../rpm.c:187 +#: ../rpm.c:192 msgid "" " [--rcfile ] [--ignorearch] [--dbpath ]" msgstr "" -#: ../rpm.c:188 +#: ../rpm.c:193 msgid "" " [--prefix ] [--ignoreos] [--nodeps] [--allfiles]" msgstr "" -#: ../rpm.c:189 +#: ../rpm.c:194 msgid "" " [--ftpproxy ] [--ftpport ] [--justdb]" msgstr "" -#: ../rpm.c:190 ../rpm.c:199 ../rpm.c:208 +#: ../rpm.c:195 ../rpm.c:204 ../rpm.c:213 msgid " [--httpproxy ] [--httpport ] " msgstr "" -#: ../rpm.c:191 ../rpm.c:201 +#: ../rpm.c:196 ../rpm.c:206 msgid " [--noorder] [--relocate oldpath=newpath]" msgstr "" -#: ../rpm.c:192 +#: ../rpm.c:197 msgid "" " [--badreloc] [--notriggers] [--excludepath ]" msgstr "" -#: ../rpm.c:193 +#: ../rpm.c:198 msgid " [--ignoresize] file1.rpm ... fileN.rpm" msgstr "" -#: ../rpm.c:194 +#: ../rpm.c:199 msgid "" " rpm {--upgrade -U} [-v] [--hash -h] [--percent] [--force] [--test]" msgstr "" -#: ../rpm.c:195 +#: ../rpm.c:200 msgid " [--oldpackage] [--root ] [--noscripts]" msgstr "" -#: ../rpm.c:196 +#: ../rpm.c:201 msgid "" " [--excludedocs] [--includedocs] [--rcfile ]" msgstr "" -#: ../rpm.c:197 +#: ../rpm.c:202 msgid "" " [--ignorearch] [--dbpath ] [--prefix ] " msgstr "" -#: ../rpm.c:198 +#: ../rpm.c:203 msgid " [--ftpproxy ] [--ftpport ]" msgstr "" -#: ../rpm.c:200 +#: ../rpm.c:205 msgid " [--ignoreos] [--nodeps] [--allfiles] [--justdb]" msgstr "" -#: ../rpm.c:202 +#: ../rpm.c:207 msgid "" " [--badreloc] [--excludepath ] [--ignoresize]" msgstr "" -#: ../rpm.c:203 +#: ../rpm.c:208 msgid " file1.rpm ... fileN.rpm" msgstr "" -#: ../rpm.c:204 +#: ../rpm.c:209 msgid " rpm {--query -q} [-afpg] [-i] [-l] [-s] [-d] [-c] [-v] [-R]" msgstr "" -#: ../rpm.c:205 +#: ../rpm.c:210 msgid " [--scripts] [--root ] [--rcfile ]" msgstr "" -#: ../rpm.c:206 +#: ../rpm.c:211 msgid " [--whatprovides] [--whatrequires] [--requires]" msgstr "" -#: ../rpm.c:207 +#: ../rpm.c:212 msgid "" " [--triggeredby] [--ftpuseport] [--ftpproxy ]" msgstr "" -#: ../rpm.c:209 +#: ../rpm.c:214 msgid "" " [--ftpport ] [--provides] [--triggers] [--dump]" msgstr "" -#: ../rpm.c:210 +#: ../rpm.c:215 msgid " [--changelog] [--dbpath ] [targets]" msgstr "" -#: ../rpm.c:211 +#: ../rpm.c:216 msgid " rpm {--verify -V -y} [-afpg] [--root ] [--rcfile ]" msgstr "" -#: ../rpm.c:212 +#: ../rpm.c:217 msgid "" " [--dbpath ] [--nodeps] [--nofiles] [--noscripts]" msgstr "" -#: ../rpm.c:213 +#: ../rpm.c:218 msgid " [--nomd5] [targets]" msgstr "" -#: ../rpm.c:214 +#: ../rpm.c:219 msgid " rpm {--setperms} [-afpg] [target]" msgstr "" -#: ../rpm.c:215 +#: ../rpm.c:220 msgid " rpm {--setugids} [-afpg] [target]" msgstr "" -#: ../rpm.c:216 +#: ../rpm.c:221 msgid " rpm {--erase -e} [--root ] [--noscripts] [--rcfile ]" msgstr "" -#: ../rpm.c:217 +#: ../rpm.c:222 msgid " [--dbpath ] [--nodeps] [--allmatches]" msgstr "" -#: ../rpm.c:218 +#: ../rpm.c:223 msgid "" " [--justdb] [--notriggers] rpackage1 ... packageN" msgstr "" -#: ../rpm.c:219 +#: ../rpm.c:224 msgid "" " rpm {-b|t}[plciba] [-v] [--short-circuit] [--clean] [--rcfile ]" msgstr "" -#: ../rpm.c:220 +#: ../rpm.c:225 msgid " [--sign] [--nobuild] [--timecheck ] ]" msgstr "" -#: ../rpm.c:221 +#: ../rpm.c:226 msgid " [--target=platform1[,platform2...]]" msgstr "" -#: ../rpm.c:222 +#: ../rpm.c:227 msgid " [--rmsource] specfile" msgstr "" -#: ../rpm.c:223 +#: ../rpm.c:228 msgid " rpm {--rmsource} [--rcfile ] [-v] specfile" msgstr "" -#: ../rpm.c:224 +#: ../rpm.c:229 msgid "" " rpm {--rebuild} [--rcfile ] [-v] source1.rpm ... sourceN.rpm" msgstr "" -#: ../rpm.c:225 +#: ../rpm.c:230 msgid "" " rpm {--recompile} [--rcfile ] [-v] source1.rpm ... sourceN.rpm" msgstr "" -#: ../rpm.c:226 +#: ../rpm.c:231 msgid " rpm {--resign} [--rcfile ] package1 package2 ... packageN" msgstr "" -#: ../rpm.c:227 +#: ../rpm.c:232 msgid " rpm {--addsign} [--rcfile ] package1 package2 ... packageN" msgstr "" -#: ../rpm.c:228 +#: ../rpm.c:233 msgid "" " rpm {--checksig -K} [--nopgp] [--nogpg] [--nomd5] [--rcfile ]" msgstr "" -#: ../rpm.c:229 +#: ../rpm.c:234 msgid " package1 ... packageN" msgstr "" -#: ../rpm.c:230 +#: ../rpm.c:235 msgid " rpm {--rebuilddb} [--rcfile ] [--dbpath ]" msgstr "" -#: ../rpm.c:231 +#: ../rpm.c:236 msgid " rpm {--querytags}" msgstr "" -#: ../rpm.c:265 +#: ../rpm.c:270 msgid "usage:" msgstr "" -#: ../rpm.c:267 +#: ../rpm.c:272 msgid "print this message" msgstr "" -#: ../rpm.c:269 +#: ../rpm.c:274 msgid "print the version of rpm being used" msgstr "" -#: ../rpm.c:270 +#: ../rpm.c:275 msgid " all modes support the following arguments:" msgstr "" -#: ../rpm.c:271 +#: ../rpm.c:276 msgid " --rcfile " msgstr "" -#: ../rpm.c:272 +#: ../rpm.c:277 msgid "use instead of /etc/rpmrc and $HOME/.rpmrc" msgstr "" -#: ../rpm.c:274 +#: ../rpm.c:279 msgid "be a little more verbose" msgstr "" -#: ../rpm.c:276 +#: ../rpm.c:281 msgid "be incredibly verbose (for debugging)" msgstr "" -#: ../rpm.c:278 +#: ../rpm.c:283 msgid "query mode" msgstr "" -#: ../rpm.c:279 ../rpm.c:341 ../rpm.c:405 ../rpm.c:433 +#: ../rpm.c:284 ../rpm.c:346 ../rpm.c:410 ../rpm.c:438 msgid " --root " msgstr "" -#: ../rpm.c:280 ../rpm.c:342 ../rpm.c:406 ../rpm.c:434 ../rpm.c:496 +#: ../rpm.c:285 ../rpm.c:347 ../rpm.c:411 ../rpm.c:439 ../rpm.c:501 msgid "use as the top level directory" msgstr "" -#: ../rpm.c:281 ../rpm.c:339 ../rpm.c:369 ../rpm.c:421 ../rpm.c:493 +#: ../rpm.c:286 ../rpm.c:344 ../rpm.c:374 ../rpm.c:426 ../rpm.c:498 msgid " --dbpath " msgstr "" -#: ../rpm.c:282 ../rpm.c:340 ../rpm.c:370 ../rpm.c:422 ../rpm.c:494 +#: ../rpm.c:287 ../rpm.c:345 ../rpm.c:375 ../rpm.c:427 ../rpm.c:499 msgid "use as the directory for the database" msgstr "" -#: ../rpm.c:283 +#: ../rpm.c:288 msgid " --queryformat " msgstr "" -#: ../rpm.c:284 +#: ../rpm.c:289 msgid "use as the header format (implies -i)" msgstr "" -#: ../rpm.c:285 +#: ../rpm.c:290 msgid "" " install, upgrade and query (with -p) allow ftp URL's to be used in place" msgstr "" -#: ../rpm.c:286 +#: ../rpm.c:291 msgid " of file names as well as the following options:" msgstr "" -#: ../rpm.c:287 +#: ../rpm.c:292 msgid " --ftpproxy " msgstr "" -#: ../rpm.c:288 +#: ../rpm.c:293 msgid "hostname or IP of ftp proxy" msgstr "" -#: ../rpm.c:289 +#: ../rpm.c:294 msgid " --ftpport " msgstr "" -#: ../rpm.c:290 +#: ../rpm.c:295 msgid "port number of ftp server (or proxy)" msgstr "" -#: ../rpm.c:291 +#: ../rpm.c:296 msgid " --httpproxy " msgstr "" -#: ../rpm.c:292 +#: ../rpm.c:297 msgid "hostname or IP of http proxy" msgstr "" -#: ../rpm.c:293 +#: ../rpm.c:298 msgid " --httpport " msgstr "" -#: ../rpm.c:294 +#: ../rpm.c:299 msgid "port number of http server (or proxy)" msgstr "" -#: ../rpm.c:295 +#: ../rpm.c:300 msgid " Package specification options:" msgstr "" -#: ../rpm.c:297 +#: ../rpm.c:302 msgid "query all packages" msgstr "" -#: ../rpm.c:298 +#: ../rpm.c:303 msgid " -f + " msgstr "" -#: ../rpm.c:299 +#: ../rpm.c:304 msgid "query package owning " msgstr "" -#: ../rpm.c:300 +#: ../rpm.c:305 msgid " -p + " msgstr "" -#: ../rpm.c:301 +#: ../rpm.c:306 msgid "query (uninstalled) package " msgstr "" -#: ../rpm.c:302 +#: ../rpm.c:307 msgid " --triggeredby " msgstr "" -#: ../rpm.c:303 +#: ../rpm.c:308 msgid "query packages triggered by " msgstr "" -#: ../rpm.c:304 +#: ../rpm.c:309 msgid " --whatprovides " msgstr "" -#: ../rpm.c:305 +#: ../rpm.c:310 msgid "query packages which provide capability" msgstr "" -#: ../rpm.c:306 +#: ../rpm.c:311 msgid " --whatrequires " msgstr "" -#: ../rpm.c:307 +#: ../rpm.c:312 msgid "query packages which require capability" msgstr "" -#: ../rpm.c:308 +#: ../rpm.c:313 msgid " Information selection options:" msgstr "" -#: ../rpm.c:310 +#: ../rpm.c:315 msgid "display package information" msgstr "" -#: ../rpm.c:312 +#: ../rpm.c:317 msgid "display the package's change log" msgstr "" -#: ../rpm.c:314 +#: ../rpm.c:319 msgid "display package file list" msgstr "" -#: ../rpm.c:316 +#: ../rpm.c:321 msgid "show file states (implies -l)" msgstr "" -#: ../rpm.c:318 +#: ../rpm.c:323 msgid "list only documentation files (implies -l)" msgstr "" -#: ../rpm.c:320 +#: ../rpm.c:325 msgid "list only configuration files (implies -l)" msgstr "" -#: ../rpm.c:322 +#: ../rpm.c:327 msgid "" "show all verifiable information for each file (must be used with -l, -c, or " "-d)" msgstr "" -#: ../rpm.c:324 +#: ../rpm.c:329 msgid "list capabilities package provides" msgstr "" -#: ../rpm.c:325 +#: ../rpm.c:330 msgid " --requires" msgstr "" -#: ../rpm.c:327 +#: ../rpm.c:332 msgid "list package dependencies" msgstr "" -#: ../rpm.c:329 +#: ../rpm.c:334 msgid "print the various [un]install scripts" msgstr "" -#: ../rpm.c:331 +#: ../rpm.c:336 msgid "show the trigger scripts contained in the package" msgstr "" -#: ../rpm.c:335 +#: ../rpm.c:340 msgid " --pipe " msgstr "" -#: ../rpm.c:336 +#: ../rpm.c:341 msgid "send stdout to " msgstr "" -#: ../rpm.c:338 +#: ../rpm.c:343 msgid "" "verify a package installation using the same same package specification " "options as -q" msgstr "" -#: ../rpm.c:344 ../rpm.c:392 ../rpm.c:426 +#: ../rpm.c:349 ../rpm.c:397 ../rpm.c:431 msgid "do not verify package dependencies" msgstr "" -#: ../rpm.c:346 +#: ../rpm.c:351 msgid "do not verify file md5 checksums" msgstr "" -#: ../rpm.c:348 +#: ../rpm.c:353 msgid "do not verify file attributes" msgstr "" -#: ../rpm.c:351 +#: ../rpm.c:356 msgid "" "set the file permissions to those in the package database using the same " "package specification options as -q" msgstr "" -#: ../rpm.c:354 +#: ../rpm.c:359 msgid "" "set the file owner and group to those in the package database using the same " "package specification options as -q" msgstr "" -#: ../rpm.c:358 +#: ../rpm.c:363 msgid " --install " msgstr "" -#: ../rpm.c:359 +#: ../rpm.c:364 msgid " -i " msgstr "" -#: ../rpm.c:360 +#: ../rpm.c:365 msgid "install package" msgstr "" -#: ../rpm.c:361 +#: ../rpm.c:366 msgid " --excludepath " msgstr "" -#: ../rpm.c:362 +#: ../rpm.c:367 msgid "skip files in path " msgstr "" -#: ../rpm.c:363 +#: ../rpm.c:368 msgid " --relocate =" msgstr "" -#: ../rpm.c:364 +#: ../rpm.c:369 msgid "relocate files from to " msgstr "" -#: ../rpm.c:366 +#: ../rpm.c:371 msgid "relocate files even though the package doesn't allow it" msgstr "" -#: ../rpm.c:367 +#: ../rpm.c:372 msgid " --prefix " msgstr "" -#: ../rpm.c:368 +#: ../rpm.c:373 msgid "relocate the package to , if relocatable" msgstr "" -#: ../rpm.c:372 +#: ../rpm.c:377 msgid "do not install documentation" msgstr "" -#: ../rpm.c:374 +#: ../rpm.c:379 msgid "short hand for --replacepkgs --replacefiles" msgstr "" -#: ../rpm.c:377 +#: ../rpm.c:382 msgid "print hash marks as package installs (good with -v)" msgstr "" -#: ../rpm.c:379 +#: ../rpm.c:384 msgid "install all files, even configurations which might otherwise be skipped" msgstr "" -#: ../rpm.c:382 +#: ../rpm.c:387 msgid "don't verify package architecture" msgstr "" -#: ../rpm.c:384 +#: ../rpm.c:389 msgid "don't check disk space before installing" msgstr "" -#: ../rpm.c:386 +#: ../rpm.c:391 msgid "don't verify package operating system" msgstr "" -#: ../rpm.c:388 +#: ../rpm.c:393 msgid "install documentation" msgstr "" -#: ../rpm.c:390 ../rpm.c:424 +#: ../rpm.c:395 ../rpm.c:429 msgid "update the database, but do not modify the filesystem" msgstr "" -#: ../rpm.c:394 ../rpm.c:428 +#: ../rpm.c:399 ../rpm.c:433 msgid "do not reorder package installation to satisfy dependencies" msgstr "" -#: ../rpm.c:396 +#: ../rpm.c:401 msgid "don't execute any installation scripts" msgstr "" -#: ../rpm.c:398 ../rpm.c:432 +#: ../rpm.c:403 ../rpm.c:437 msgid "don't execute any scripts triggered by this package" msgstr "" -#: ../rpm.c:400 +#: ../rpm.c:405 msgid "print percentages as package installs" msgstr "" -#: ../rpm.c:402 +#: ../rpm.c:407 msgid "install even if the package replaces installed files" msgstr "" -#: ../rpm.c:404 +#: ../rpm.c:409 msgid "reinstall if the package is already present" msgstr "" -#: ../rpm.c:408 +#: ../rpm.c:413 msgid "don't install, but tell if it would work or not" msgstr "" -#: ../rpm.c:410 +#: ../rpm.c:415 msgid " --upgrade " msgstr "" -#: ../rpm.c:411 +#: ../rpm.c:416 msgid " -U " msgstr "" -#: ../rpm.c:412 +#: ../rpm.c:417 msgid "upgrade package (same options as --install, plus)" msgstr "" -#: ../rpm.c:414 +#: ../rpm.c:419 msgid "" "upgrade to an old version of the package (--force on upgrades does this " "automatically)" msgstr "" -#: ../rpm.c:416 +#: ../rpm.c:421 msgid " --erase " msgstr "" -#: ../rpm.c:418 +#: ../rpm.c:423 msgid "erase (uninstall) package" msgstr "" -#: ../rpm.c:420 +#: ../rpm.c:425 msgid "" "remove all packages which match (normally an error is generated if " " specified multiple packages)" msgstr "" -#: ../rpm.c:430 +#: ../rpm.c:435 msgid "do not execute any package specific scripts" msgstr "" -#: ../rpm.c:436 +#: ../rpm.c:441 msgid " -b " msgstr "" -#: ../rpm.c:437 +#: ../rpm.c:442 msgid " -t " msgstr "" -#: ../rpm.c:438 +#: ../rpm.c:443 msgid "build package, where is one of:" msgstr "" -#: ../rpm.c:440 +#: ../rpm.c:445 msgid "prep (unpack sources and apply patches)" msgstr "" -#: ../rpm.c:442 +#: ../rpm.c:447 #, c-format msgid "list check (do some cursory checks on %files)" msgstr "" -#: ../rpm.c:444 +#: ../rpm.c:449 msgid "compile (prep and compile)" msgstr "" -#: ../rpm.c:446 +#: ../rpm.c:451 msgid "install (prep, compile, install)" msgstr "" -#: ../rpm.c:448 +#: ../rpm.c:453 msgid "binary package (prep, compile, install, package)" msgstr "" -#: ../rpm.c:450 +#: ../rpm.c:455 msgid "bin/src package (prep, compile, install, package)" msgstr "" -#: ../rpm.c:456 +#: ../rpm.c:461 msgid "remove sources and spec file when done" msgstr "" -#: ../rpm.c:458 +#: ../rpm.c:463 msgid "generate PGP/GPG signature" msgstr "" -#: ../rpm.c:459 +#: ../rpm.c:464 msgid " --buildroot " msgstr "" -#: ../rpm.c:460 +#: ../rpm.c:465 msgid "use as the build root" msgstr "" -#: ../rpm.c:461 +#: ../rpm.c:466 msgid " --target=+" msgstr "" -#: ../rpm.c:462 +#: ../rpm.c:467 msgid "build the packages for the build targets platform1...platformN." msgstr "" -#: ../rpm.c:464 +#: ../rpm.c:469 msgid "do not execute any stages" msgstr "" -#: ../rpm.c:465 +#: ../rpm.c:470 msgid " --timecheck " msgstr "" -#: ../rpm.c:466 +#: ../rpm.c:471 msgid "set the time check to seconds (0 disables)" msgstr "" -#: ../rpm.c:468 +#: ../rpm.c:473 msgid " --rebuild " msgstr "" -#: ../rpm.c:469 +#: ../rpm.c:474 msgid "" "install source package, build binary package and remove spec file, sources, " "patches, and icons." msgstr "" -#: ../rpm.c:470 +#: ../rpm.c:475 msgid " --rmsource " msgstr "" -#: ../rpm.c:471 +#: ../rpm.c:476 msgid "remove sources and spec file" msgstr "" -#: ../rpm.c:472 +#: ../rpm.c:477 msgid " --recompile " msgstr "" -#: ../rpm.c:473 +#: ../rpm.c:478 msgid "like --rebuild, but don't build any package" msgstr "" -#: ../rpm.c:474 +#: ../rpm.c:479 msgid " --resign + " msgstr "" -#: ../rpm.c:475 +#: ../rpm.c:480 msgid "sign a package (discard current signature)" msgstr "" -#: ../rpm.c:476 +#: ../rpm.c:481 msgid " --addsign + " msgstr "" -#: ../rpm.c:477 +#: ../rpm.c:482 msgid "add a signature to a package" msgstr "" -#: ../rpm.c:479 +#: ../rpm.c:484 msgid " --checksig + " msgstr "" -#: ../rpm.c:480 +#: ../rpm.c:485 msgid "verify package signature" msgstr "" -#: ../rpm.c:482 +#: ../rpm.c:487 msgid "skip any PGP signatures" msgstr "" -#: ../rpm.c:484 +#: ../rpm.c:489 msgid "skip any GPG signatures" msgstr "" -#: ../rpm.c:486 +#: ../rpm.c:491 msgid "skip any MD5 signatures" msgstr "" -#: ../rpm.c:488 +#: ../rpm.c:493 msgid "list the tags that can be used in a query format" msgstr "" -#: ../rpm.c:490 +#: ../rpm.c:495 msgid "make sure a valid database exists" msgstr "" -#: ../rpm.c:492 +#: ../rpm.c:497 msgid "rebuild database from existing database" msgstr "" -#: ../rpm.c:625 ../rpm.c:631 ../rpm.c:638 ../rpm.c:644 ../rpm.c:653 -#: ../rpm.c:660 ../rpm.c:707 ../rpm.c:713 ../rpm.c:777 ../rpm.c:785 -#: ../rpm.c:792 ../rpm.c:801 ../rpm.c:808 ../rpm.c:816 ../rpm.c:852 -#: ../rpm.c:907 ../rpm.c:914 +#: ../rpm.c:631 ../rpm.c:637 ../rpm.c:644 ../rpm.c:650 ../rpm.c:659 +#: ../rpm.c:666 ../rpm.c:713 ../rpm.c:719 ../rpm.c:779 ../rpm.c:787 +#: ../rpm.c:794 ../rpm.c:803 ../rpm.c:810 ../rpm.c:818 ../rpm.c:854 +#: ../rpm.c:909 ../rpm.c:916 msgid "only one major mode may be specified" msgstr "" -#: ../rpm.c:646 +#: ../rpm.c:652 msgid "-u and --uninstall are deprecated and no longer work.\n" msgstr "" -#: ../rpm.c:648 +#: ../rpm.c:654 msgid "Use -e or --erase instead.\n" msgstr "" -#: ../rpm.c:664 +#: ../rpm.c:670 msgid "--build (-b) requires one of a,b,i,c,p,l as its sole argument" msgstr "" -#: ../rpm.c:668 +#: ../rpm.c:674 msgid "--tarbuild (-t) requires one of a,b,i,c,p,l as its sole argument" msgstr "" -#: ../rpm.c:720 ../rpm.c:727 ../rpm.c:735 ../rpm.c:743 ../rpm.c:753 -#: ../rpm.c:761 ../rpm.c:769 ../rpm.c:921 +#: ../rpm.c:727 ../rpm.c:733 ../rpm.c:740 ../rpm.c:747 ../rpm.c:755 +#: ../rpm.c:763 ../rpm.c:771 ../rpm.c:923 msgid "one type of query/verify may be performed at a time" msgstr "" -#: ../rpm.c:824 +#: ../rpm.c:826 msgid "arguments to --dbpath must begin with a /" msgstr "" -#: ../rpm.c:858 +#: ../rpm.c:860 msgid "relocations must begin with a /" msgstr "" -#: ../rpm.c:860 +#: ../rpm.c:862 msgid "relocations must contain a =" msgstr "" -#: ../rpm.c:863 +#: ../rpm.c:865 msgid "relocations must have a / following the =" msgstr "" -#: ../rpm.c:872 +#: ../rpm.c:874 msgid "exclude paths must begin with a /" msgstr "" -#: ../rpm.c:881 +#: ../rpm.c:883 #, c-format msgid "Internal error in argument processing (%d) :-(\n" msgstr "" -#: ../rpm.c:934 +#: ../rpm.c:936 msgid "--dbpath given for operation that does not use a database" msgstr "" -#: ../rpm.c:939 +#: ../rpm.c:941 msgid "--timecheck may only be used during package builds" msgstr "" -#: ../rpm.c:942 ../rpm.c:945 +#: ../rpm.c:944 ../rpm.c:947 msgid "unexpected query specifiers" msgstr "" -#: ../rpm.c:949 +#: ../rpm.c:951 msgid "unexpected query source" msgstr "" -#: ../rpm.c:955 +#: ../rpm.c:957 msgid "only installation, upgrading, rmsource and rmspec may be forced" msgstr "" -#: ../rpm.c:958 +#: ../rpm.c:960 msgid "files may only be relocated during package installation" msgstr "" -#: ../rpm.c:961 +#: ../rpm.c:963 msgid "only one of --prefix or --relocate may be used" msgstr "" -#: ../rpm.c:964 +#: ../rpm.c:966 msgid "" "--relocate and --excludepath may only be used when installing new packages" msgstr "" -#: ../rpm.c:967 +#: ../rpm.c:969 msgid "--prefix may only be used when installing new packages" msgstr "" -#: ../rpm.c:970 +#: ../rpm.c:972 msgid "arguments to --prefix must begin with a /" msgstr "" -#: ../rpm.c:973 +#: ../rpm.c:975 msgid "--hash (-h) may only be specified during package installation" msgstr "" -#: ../rpm.c:977 +#: ../rpm.c:979 msgid "--percent may only be specified during package installation" msgstr "" -#: ../rpm.c:981 +#: ../rpm.c:983 msgid "--replacefiles may only be specified during package installation" msgstr "" -#: ../rpm.c:985 +#: ../rpm.c:987 msgid "--replacepkgs may only be specified during package installation" msgstr "" -#: ../rpm.c:989 +#: ../rpm.c:991 msgid "--excludedocs may only be specified during package installation" msgstr "" -#: ../rpm.c:993 +#: ../rpm.c:995 msgid "--includedocs may only be specified during package installation" msgstr "" -#: ../rpm.c:997 +#: ../rpm.c:999 msgid "only one of --excludedocs and --includedocs may be specified" msgstr "" -#: ../rpm.c:1001 +#: ../rpm.c:1003 msgid "--ignorearch may only be specified during package installation" msgstr "" -#: ../rpm.c:1005 +#: ../rpm.c:1007 msgid "--ignoreos may only be specified during package installation" msgstr "" -#: ../rpm.c:1009 +#: ../rpm.c:1011 msgid "--ignoresize may only be specified during package installation" msgstr "" -#: ../rpm.c:1013 +#: ../rpm.c:1015 msgid "--allmatches may only be specified during package erasure" msgstr "" -#: ../rpm.c:1017 +#: ../rpm.c:1019 msgid "--allfiles may only be specified during package installation" msgstr "" -#: ../rpm.c:1021 +#: ../rpm.c:1023 msgid "--justdb may only be specified during package installation and erasure" msgstr "" -#: ../rpm.c:1026 +#: ../rpm.c:1028 msgid "" "--noscripts may only be specified during package installation, erasure, and " "verification" msgstr "" -#: ../rpm.c:1030 +#: ../rpm.c:1032 msgid "" "--notriggers may only be specified during package installation, erasure, and " "verification" msgstr "" -#: ../rpm.c:1036 +#: ../rpm.c:1038 msgid "" "--nodeps may only be specified during package building, installation, " "erasure, and verification" msgstr "" -#: ../rpm.c:1040 +#: ../rpm.c:1043 msgid "--nofiles may only be specified during package verification" msgstr "" -#: ../rpm.c:1045 +#: ../rpm.c:1049 msgid "" "--test may only be specified during package installation, erasure, and " "building" msgstr "" -#: ../rpm.c:1050 +#: ../rpm.c:1054 msgid "" "--root (-r) may only be specified during installation, erasure, querying, " "and database rebuilds" msgstr "" -#: ../rpm.c:1055 +#: ../rpm.c:1059 msgid "arguments to --root (-r) must begin with a /" msgstr "" -#: ../rpm.c:1059 +#: ../rpm.c:1063 msgid "--clean may only be used with -b and -t" msgstr "" -#: ../rpm.c:1062 +#: ../rpm.c:1066 msgid "--rmsource may only be used with -b and -t" msgstr "" -#: ../rpm.c:1065 +#: ../rpm.c:1069 msgid "--short-circuit may only be used during package building" msgstr "" -#: ../rpm.c:1069 +#: ../rpm.c:1073 msgid "--short-circuit may only be used with -bc, -bi, -bs, -tc -ti, or -ts" msgstr "" -#: ../rpm.c:1075 +#: ../rpm.c:1079 msgid "--oldpackage may only be used during upgrades" msgstr "" -#: ../rpm.c:1080 +#: ../rpm.c:1084 msgid "" "ftp options can only be used during package queries, installs, and upgrades" msgstr "" -#: ../rpm.c:1086 +#: ../rpm.c:1090 msgid "" "http options can only be used during package queries, installs, and upgrades" msgstr "" -#: ../rpm.c:1090 +#: ../rpm.c:1094 msgid "--nopgp may only be used during signature checking" msgstr "" -#: ../rpm.c:1093 +#: ../rpm.c:1097 msgid "--nogpg may only be used during signature checking" msgstr "" -#: ../rpm.c:1096 +#: ../rpm.c:1100 msgid "" "--nomd5 may only be used during signature checking and package verification" msgstr "" -#: ../rpm.c:1122 +#: ../rpm.c:1126 #, c-format msgid "cannot access file %s\n" msgstr "" -#: ../rpm.c:1139 +#: ../rpm.c:1143 msgid "pgp not found: " msgstr "" -#: ../rpm.c:1142 +#: ../rpm.c:1146 msgid "Use `%%_signature pgp5' instead of `%%_signature pgp' in macro file.\n" msgstr "" -#: ../rpm.c:1149 +#: ../rpm.c:1153 msgid "pgp version 5 not found: " msgstr "" -#: ../rpm.c:1152 +#: ../rpm.c:1156 msgid "Use `%%_signature pgp' instead of `%%_signature pgp5' in macro file.\n" msgstr "" -#: ../rpm.c:1158 +#: ../rpm.c:1162 msgid "Enter pass phrase: " msgstr "" -#: ../rpm.c:1159 +#: ../rpm.c:1163 msgid "Pass phrase check failed\n" msgstr "" -#: ../rpm.c:1162 +#: ../rpm.c:1166 msgid "Pass phrase is good.\n" msgstr "" -#: ../rpm.c:1169 +#: ../rpm.c:1173 msgid "Invalid %%_signature spec in macro file.\n" msgstr "" -#: ../rpm.c:1174 +#: ../rpm.c:1178 msgid "--sign may only be used during package building" msgstr "" -#: ../rpm.c:1191 +#: ../rpm.c:1195 msgid "exec failed\n" msgstr "" -#: ../rpm.c:1210 +#: ../rpm.c:1214 msgid "unexpected arguments to --querytags " msgstr "" -#: ../rpm.c:1221 +#: ../rpm.c:1225 msgid "no packages given for signature check" msgstr "" -#: ../rpm.c:1229 +#: ../rpm.c:1233 msgid "no packages given for signing" msgstr "" -#: ../rpm.c:1238 +#: ../rpm.c:1242 msgid "no packages files given for rebuild" msgstr "" -#: ../rpm.c:1295 +#: ../rpm.c:1299 msgid "no spec files given for build" msgstr "" -#: ../rpm.c:1297 +#: ../rpm.c:1301 msgid "no tar files given for build" msgstr "" -#: ../rpm.c:1309 +#: ../rpm.c:1313 msgid "no packages given for uninstall" msgstr "" -#: ../rpm.c:1358 +#: ../rpm.c:1362 msgid "no packages given for install" msgstr "" -#: ../rpm.c:1380 +#: ../rpm.c:1384 msgid "extra arguments given for query of all packages" msgstr "" -#: ../rpm.c:1386 +#: ../rpm.c:1390 msgid "no arguments given for query" msgstr "" -#: ../rpm.c:1404 +#: ../rpm.c:1410 +msgid "extra arguments given for verify of all packages" +msgstr "" + +#: ../rpm.c:1414 msgid "no arguments given for verify" msgstr "" @@ -1525,54 +1529,93 @@ msgstr "" msgid "failed to create %s\n" msgstr "" -#: ../verify.c:29 +#: ../verify.c:26 +msgid "don't verify files in package" +msgstr "" + +#: ../verify.c:46 #, c-format msgid "missing %s\n" msgstr "" -#: ../verify.c:93 +#: ../verify.c:110 #, c-format msgid "Unsatisfied dependencies for %s-%s-%s: " msgstr "" -#: ../verify.c:139 +#: ../verify.c:156 #, c-format msgid "verifying record number %u\n" msgstr "" -#: ../lib/query.c:418 ../verify.c:144 +#: ../lib/query.c:435 ../verify.c:161 msgid "error: could not read database record\n" msgstr "" -#: ../lib/query.c:593 ../verify.c:179 +#: ../lib/query.c:534 ../verify.c:202 +#, c-format +msgid "open of %s failed\n" +msgstr "" + +#: ../lib/query.c:558 ../verify.c:221 +#, c-format +msgid "query of %s failed\n" +msgstr "" + +#: ../lib/query.c:610 ../verify.c:236 msgid "could not read database record!\n" msgstr "" -#: ../lib/query.c:517 ../verify.c:198 +#: ../lib/query.c:621 ../verify.c:247 #, c-format -msgid "open of %s failed\n" +msgid "group %s does not contain any packages\n" msgstr "" -#: ../verify.c:214 +#: ../lib/query.c:631 ../verify.c:257 #, c-format -msgid "%s is not an RPM\n" +msgid "no package provides %s\n" msgstr "" -#: ../lib/query.c:604 ../verify.c:222 +#: ../lib/query.c:641 ../verify.c:267 #, c-format -msgid "group %s does not contain any packages\n" +msgid "no package triggers %s\n" +msgstr "" + +#: ../lib/query.c:651 ../verify.c:277 +#, c-format +msgid "no package requires %s\n" +msgstr "" + +#: ../lib/query.c:666 ../verify.c:292 +#, c-format +msgid "file %s: %s\n" msgstr "" -#: ../lib/query.c:652 ../verify.c:232 +#: ../lib/query.c:669 ../verify.c:295 #, c-format msgid "file %s is not owned by any package\n" msgstr "" -#: ../lib/query.c:686 ../verify.c:245 +#: ../lib/query.c:703 ../verify.c:312 #, c-format msgid "error looking for package %s\n" msgstr "" +#: ../lib/query.c:682 ../verify.c:322 +#, c-format +msgid "invalid package number: %s\n" +msgstr "" + +#: ../verify.c:325 +#, c-format +msgid "verifying package: %d\n" +msgstr "" + +#: ../lib/query.c:688 ../verify.c:328 +#, c-format +msgid "record %d could not be read\n" +msgstr "" + #: ../build/build.c:83 ../build/pack.c:248 msgid "Unable to open temp file" msgstr "" @@ -2743,158 +2786,127 @@ msgstr "" msgid "unknown error %d encountered while manipulating package %s-%s-%s" msgstr "" -#: ../lib/query.c:36 +#: ../lib/query.c:61 msgid "query package owning file" msgstr "" -#: ../lib/query.c:38 +#: ../lib/query.c:63 msgid "query packages in group" msgstr "" -#: ../lib/query.c:40 +#: ../lib/query.c:65 msgid "query a package file" msgstr "" -#: ../lib/query.c:42 +#: ../lib/query.c:69 msgid "query a spec file" msgstr "" -#: ../lib/query.c:44 +#: ../lib/query.c:71 msgid "query the pacakges triggered by the package" msgstr "" -#: ../lib/query.c:46 +#: ../lib/query.c:73 msgid "query the packages which require a capability" msgstr "" -#: ../lib/query.c:48 +#: ../lib/query.c:75 msgid "query the packages which provide a capability" msgstr "" -#: ../lib/query.c:56 +#: ../lib/query.c:111 msgid "list all configuration files" msgstr "" -#: ../lib/query.c:58 -msgid "list all documetnation files" +#: ../lib/query.c:113 +msgid "list all documentation files" msgstr "" -#: ../lib/query.c:60 +#: ../lib/query.c:115 msgid "dump basic file information" msgstr "" -#: ../lib/query.c:62 +#: ../lib/query.c:117 msgid "list files in package" msgstr "" -#: ../lib/query.c:68 +#: ../lib/query.c:121 msgid "use the following query format" msgstr "" -#: ../lib/query.c:70 +#: ../lib/query.c:123 +msgid "substitute i18n sections from the following catalogue" +msgstr "" + +#: ../lib/query.c:126 msgid "display the states of the listed files" msgstr "" -#: ../lib/query.c:72 +#: ../lib/query.c:128 msgid "display a verbose file listing" msgstr "" -#: ../lib/query.c:122 +#: ../lib/query.c:139 #, c-format msgid "error in format: %s\n" msgstr "" -#: ../lib/query.c:159 +#: ../lib/query.c:176 msgid "(contains no files)" msgstr "" -#: ../lib/query.c:212 +#: ../lib/query.c:229 msgid "normal " msgstr "" -#: ../lib/query.c:214 +#: ../lib/query.c:231 msgid "replaced " msgstr "" -#: ../lib/query.c:216 +#: ../lib/query.c:233 msgid "net shared " msgstr "" -#: ../lib/query.c:218 +#: ../lib/query.c:235 msgid "not installed " msgstr "" -#: ../lib/query.c:220 +#: ../lib/query.c:237 #, c-format msgid "(unknown %3d) " msgstr "" -#: ../lib/query.c:224 +#: ../lib/query.c:241 msgid "(no state) " msgstr "" -#: ../lib/query.c:240 ../lib/query.c:270 +#: ../lib/query.c:257 ../lib/query.c:287 msgid "package has neither file owner or id lists" msgstr "" -#: ../lib/query.c:413 +#: ../lib/query.c:430 #, c-format msgid "querying record number %d\n" msgstr "" -#: ../lib/query.c:502 +#: ../lib/query.c:519 msgid "rpmQuery: rpmdbOpen() failed\n" msgstr "" -#: ../lib/query.c:530 +#: ../lib/query.c:547 msgid "old format source packages cannot be queried\n" msgstr "" -#: ../lib/query.c:541 -#, c-format -msgid "query of %s failed\n" -msgstr "" - -#: ../lib/query.c:560 +#: ../lib/query.c:577 #, c-format msgid "query of specfile %s failed, can't parse\n" msgstr "" -#: ../lib/query.c:614 -#, c-format -msgid "no package provides %s\n" -msgstr "" - -#: ../lib/query.c:624 -#, c-format -msgid "no package triggers %s\n" -msgstr "" - -#: ../lib/query.c:634 -#, c-format -msgid "no package requires %s\n" -msgstr "" - -#: ../lib/query.c:649 -#, c-format -msgid "file %s: %s\n" -msgstr "" - -#: ../lib/query.c:665 -#, c-format -msgid "invalid package number: %s\n" -msgstr "" - -#: ../lib/query.c:668 +#: ../lib/query.c:685 #, c-format msgid "showing package: %d\n" msgstr "" -#: ../lib/query.c:671 -#, c-format -msgid "record %d could not be read\n" -msgstr "" - #: ../lib/rebuilddb.c:18 #, c-format msgid "rebuilding database in rootdir %s\n" diff --git a/rpm.c b/rpm.c index cfe3c79..b072265 100755 --- a/rpm.c +++ b/rpm.c @@ -49,7 +49,9 @@ static int incldocs; static int initdb; static int justdb; static int noDeps; +#ifdef DELETE static int noFiles; +#endif static int noGpg; static int noMd5; static int noOrder; @@ -73,7 +75,7 @@ static int test; static int rpm_version; -static struct rpmQueryArguments queryArgs; +static struct rpmQVArguments rpmQVArgs; static struct rpmBuildArguments buildArgs; /* the structure describing the options we take and the defaults */ @@ -108,7 +110,9 @@ static struct poptOption optionsTable[] = { { "install", '\0', 0, 0, GETOPT_INSTALL, NULL, NULL}, { "justdb", '\0', 0, &justdb, 0, NULL, NULL}, { "nodeps", '\0', 0, &noDeps, 0, NULL, NULL}, +#ifdef DELETE { "nofiles", '\0', 0, &noFiles, 0, NULL, NULL}, +#endif { "nogpg", '\0', 0, &noGpg, 0, NULL, NULL}, { "nomd5", '\0', 0, &noMd5, 0, NULL, NULL}, { "noorder", '\0', 0, &noOrder, 0, NULL, NULL}, @@ -133,7 +137,6 @@ static struct poptOption optionsTable[] = { { "root", 'r', POPT_ARG_STRING, &rootdir, 0, NULL, NULL}, { "showrc", '\0', 0, &showrc, GETOPT_SHOWRC, NULL, NULL}, { "sign", '\0', 0, &signIt, 0, NULL, NULL}, - { "specedit", '\0', POPT_ARG_STRING, &specedit, 0, NULL, NULL}, { "tarball", 't', POPT_ARG_STRING, 0, 't', NULL, NULL}, { "test", '\0', 0, &test, 0, NULL, NULL}, { "timecheck", '\0', POPT_ARG_STRING, 0, GETOPT_TIMECHECK, NULL, NULL}, @@ -144,9 +147,11 @@ static struct poptOption optionsTable[] = { { NULL, 'y', 0, 0, 'V', NULL, NULL}, { "version", '\0', 0, &rpm_version, 0, NULL, NULL}, { NULL, '\0', POPT_ARG_INCLUDE_TABLE, - rpmQuerySourcePoptTable, 0, (void *) &queryArgs, NULL }, + rpmQVSourcePoptTable, 0, (void *) &rpmQVArgs, NULL }, + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, + rpmQueryPoptTable, 0, (void *) &rpmQVArgs, NULL }, { NULL, '\0', POPT_ARG_INCLUDE_TABLE, - rpmQueryPoptTable, 0, (void *) &queryArgs, NULL }, + rpmVerifyPoptTable, 0, (void *) &rpmQVArgs, NULL }, { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmBuildPoptTable, 0, (void *) &buildArgs, NULL }, { 0, 0, 0, 0, 0, NULL, NULL } @@ -498,8 +503,7 @@ static void printHelp(void) { int main(int argc, char ** argv) { enum modes bigMode = MODE_UNKNOWN; - enum rpmQuerySources querySource = QUERY_PACKAGE; - enum verifysources verifySource = VERIFY_PACKAGE; + enum rpmQVSources QVSource = RPMQV_PACKAGE; int arg; int installFlags = 0, uninstallFlags = 0, interfaceFlags = 0; int gotDbpath = 0, verifyFlags; @@ -545,7 +549,9 @@ int main(int argc, char ** argv) { initdb = 0; justdb = 0; noDeps = 0; +#ifdef DELETE noFiles = 0; +#endif noGpg = 0; noMd5 = 0; noOrder = 0; @@ -609,8 +615,8 @@ int main(int argc, char ** argv) { poptResetContext(optCon); - if (queryArgs.queryFormat) free(queryArgs.queryFormat); - memset(&queryArgs, 0, sizeof(queryArgs)); + if (rpmQVArgs.queryFormat) free(rpmQVArgs.queryFormat); + memset(&rpmQVArgs, 0, sizeof(rpmQVArgs)); if (buildArgs.buildRootOverride) xfree(buildArgs.buildRootOverride); if (buildArgs.targets) free(buildArgs.targets); memset(&buildArgs, 0, sizeof(buildArgs)); @@ -715,62 +721,58 @@ int main(int argc, char ** argv) { upgrade = 1; break; +#ifdef DYING case 'p': - if (querySource != QUERY_PACKAGE && querySource != QUERY_RPM) + if (QVSource != RPMQV_PACKAGE && QVSource != RPMQV_RPM) argerror(_("one type of query/verify may be performed at a " "time")); - querySource = QUERY_RPM; - verifySource = VERIFY_RPM; + QVSource = RPMQV_RPM; break; case 'g': - if (querySource != QUERY_PACKAGE && querySource != QUERY_GROUP) + if (QVSource != RPMQV_PACKAGE && QVSource != RPMQV_GROUP) argerror(_("one type of query/verify may be performed at a " "time")); - querySource = QUERY_GROUP; - verifySource = VERIFY_GRP; + QVSource = RPMQV_GROUP; break; case 'f': - if (querySource != QUERY_PACKAGE && querySource != QUERY_PATH) + if (QVSource != RPMQV_PACKAGE && QVSource != RPMQV_PATH) argerror(_("one type of query/verify may be performed at a " "time")); - querySource = QUERY_PATH; - verifySource = VERIFY_PATH; + QVSource = RPMQV_PATH; break; case 'a': - if (querySource != QUERY_PACKAGE && querySource != QUERY_ALL) + if (QVSource != RPMQV_PACKAGE && QVSource != RPMQV_ALL) argerror(_("one type of query/verify may be performed at a " "time")); - querySource = QUERY_ALL; - verifySource = VERIFY_EVERY; + QVSource = RPMQV_ALL; break; -#ifdef FOO case GETOPT_WHATREQUIRES: - if (querySource != QUERY_PACKAGE && - querySource != QUERY_WHATREQUIRES) + if (QVSource != RPMQV_PACKAGE && + QVSource != RPMQV_WHATREQUIRES) argerror(_("one type of query/verify may be performed at a " "time")); - querySource = QUERY_WHATREQUIRES; + QVSource = RPMQV_WHATREQUIRES; break; case GETOPT_WHATPROVIDES: - if (querySource != QUERY_PACKAGE && - querySource != QUERY_WHATPROVIDES) + if (QVSource != RPMQV_PACKAGE && + QVSource != RPMQV_WHATPROVIDES) argerror(_("one type of query/verify may be performed at a " "time")); - querySource = QUERY_WHATPROVIDES; + QVSource = RPMQV_WHATPROVIDES; break; case GETOPT_TRIGGEREDBY: - if (querySource != QUERY_PACKAGE && - querySource != QUERY_TRIGGEREDBY) + if (QVSource != RPMQV_PACKAGE && + QVSource != RPMQV_TRIGGEREDBY) argerror(_("one type of query/verify may be performed at a " "time")); - querySource = QUERY_TRIGGEREDBY; + QVSource = RPMQV_TRIGGEREDBY; break; -#endif +#endif /* DYING */ case GETOPT_REBUILD: if (bigMode != MODE_UNKNOWN && bigMode != MODE_REBUILD) @@ -916,11 +918,11 @@ int main(int argc, char ** argv) { bigMode = MODE_QUERYTAGS; } - if (queryArgs.sourceCount) { - if (querySource != QUERY_PACKAGE || queryArgs.sourceCount > 1) + if (rpmQVArgs.sourceCount) { + if (QVSource != RPMQV_PACKAGE || rpmQVArgs.sourceCount > 1) argerror(_("one type of query/verify may be performed at a " "time")); - querySource = queryArgs.source; + QVSource = rpmQVArgs.source; } if (buildArgs.buildRootOverride && bigMode != MODE_BUILD && @@ -938,14 +940,14 @@ 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 && queryArgs.flags) + if (bigMode != MODE_QUERY && rpmQVArgs.flags) argerror(_("unexpected query specifiers")); - if (bigMode != MODE_QUERY && queryArgs.queryFormat) + if (bigMode != MODE_QUERY && rpmQVArgs.queryFormat) argerror(_("unexpected query specifiers")); if (bigMode != MODE_QUERY && bigMode != MODE_VERIFY && - querySource != QUERY_PACKAGE) + QVSource != RPMQV_PACKAGE) argerror(_("unexpected query source")); if (!(bigMode == MODE_INSTALL || @@ -1036,9 +1038,11 @@ int main(int argc, char ** argv) { argerror(_("--nodeps may only be specified during package " "building, installation, erasure, and verification")); +#ifdef DELETE if (bigMode != MODE_VERIFY && noFiles) argerror(_("--nofiles may only be specified during package " "verification")); +#endif if (bigMode != MODE_INSTALL && bigMode != MODE_UNINSTALL && bigMode != MODE_BUILD && bigMode != MODE_TARBUILD && test ) @@ -1075,14 +1079,14 @@ int main(int argc, char ** argv) { argerror(_("--oldpackage may only be used during upgrades")); if ((ftpProxy || ftpPort) && !(bigMode == MODE_INSTALL || - ((bigMode == MODE_QUERY && querySource == QUERY_RPM)) || - ((bigMode == MODE_VERIFY && querySource == VERIFY_RPM)))) + ((bigMode == MODE_QUERY && QVSource == RPMQV_RPM)) || + ((bigMode == MODE_VERIFY && QVSource == RPMQV_RPM)))) argerror(_("ftp options can only be used during package queries, " "installs, and upgrades")); if ((httpProxy || httpPort) && !(bigMode == MODE_INSTALL || - ((bigMode == MODE_QUERY && querySource == QUERY_RPM)) || - ((bigMode == MODE_VERIFY && querySource == VERIFY_RPM)))) + ((bigMode == MODE_QUERY && QVSource == RPMQV_RPM)) || + ((bigMode == MODE_VERIFY && QVSource == RPMQV_RPM)))) argerror(_("http options can only be used during package queries, " "installs, and upgrades")); @@ -1375,34 +1379,41 @@ int main(int argc, char ** argv) { break; case MODE_QUERY: - if (querySource == QUERY_ALL) { + if (QVSource == RPMQV_ALL) { if (poptPeekArg(optCon)) argerror(_("extra arguments given for query of all packages")); - ec = rpmQuery(rootdir, QUERY_ALL, queryArgs.flags, NULL, - queryArgs.queryFormat); + ec = rpmQuery(rootdir, RPMQV_ALL, rpmQVArgs.flags, NULL, + rpmQVArgs.queryFormat); } else { if (!poptPeekArg(optCon)) argerror(_("no arguments given for query")); while ((pkg = poptGetArg(optCon))) - ec = rpmQuery(rootdir, querySource, queryArgs.flags, pkg, - queryArgs.queryFormat); + ec = rpmQuery(rootdir, QVSource, rpmQVArgs.flags, pkg, + rpmQVArgs.queryFormat); } break; case MODE_VERIFY: - verifyFlags = 0; + verifyFlags = (VERIFY_FILES|VERIFY_DEPS|VERIFY_SCRIPT|VERIFY_MD5); +#ifdef DELETE if (!noFiles) verifyFlags |= VERIFY_FILES; - if (!noDeps) verifyFlags |= VERIFY_DEPS; - if (!noScripts) verifyFlags |= VERIFY_SCRIPT; - if (!noMd5) verifyFlags |= VERIFY_MD5; +#else + verifyFlags &= ~rpmQVArgs.flags; +#endif + if (noDeps) verifyFlags &= ~VERIFY_DEPS; + if (noScripts) verifyFlags &= ~VERIFY_SCRIPT; + if (noMd5) verifyFlags &= ~VERIFY_MD5; - if (verifySource == VERIFY_EVERY) { - ec = doVerify(rootdir, VERIFY_EVERY, NULL, verifyFlags); + if (QVSource == RPMQV_ALL) { + if (poptPeekArg(optCon)) + argerror(_("extra arguments given for verify of all packages")); + ec = rpmVerify(rootdir, RPMQV_ALL, verifyFlags, NULL); } else { if (!poptPeekArg(optCon)) argerror(_("no arguments given for verify")); - ec = doVerify(rootdir, verifySource, poptGetArgs(optCon), verifyFlags); + while ((pkg = poptGetArg(optCon))) + ec = rpmVerify(rootdir, QVSource, verifyFlags, pkg); } break; } @@ -1415,7 +1426,7 @@ int main(int argc, char ** argv) { } /* keeps memory leak checkers quiet */ - if (queryArgs.queryFormat) free(queryArgs.queryFormat); + if (rpmQVArgs.queryFormat) free(rpmQVArgs.queryFormat); return ec; } diff --git a/rpm.spec b/rpm.spec index 919eff9..256bf92 100644 --- 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: 6 +Release: 7 Group: System Environment/Base Source: ftp://ftp.rpm.org/pub/rpm/dist/rpm-3.0.x/rpm-%{version}.tar.gz Copyright: GPL diff --git a/verify.c b/verify.c index 85517d5..2ba1801 100644 --- a/verify.c +++ b/verify.c @@ -6,11 +6,28 @@ #include "url.h" #include "verify.h" -static int verifyHeader(const char * prefix, Header h, int verifyFlags); -static int verifyMatches(const char * prefix, rpmdb db, dbiIndexSet matches, - int verifyFlags); -static int verifyDependencies(rpmdb db, Header h); +#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) +{ + switch (opt->val) { + case POPT_NOFILES: data->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 } +}; +/* ======================================================================== */ static int verifyHeader(const char * prefix, Header h, int verifyFlags) { const char ** fileList; int count, type; @@ -152,25 +169,65 @@ static int verifyMatches(const char * prefix, rpmdb db, dbiIndexSet matches, return ec; } -int doVerify(const char * prefix, enum verifysources source, const char ** argv, - int verifyFlags) { +int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags, + const char *arg) +{ Header h; int offset; - int ec, rc; + int rc; int isSource; - rpmdb db; + rpmdb db = NULL; dbiIndexSet matches; + int recNumber; + int retcode = 0; + char *end = NULL; - ec = 0; - if (source == VERIFY_RPM && !(verifyFlags & VERIFY_DEPS)) { - db = NULL; - } else { - if (rpmdbOpen(prefix, &db, O_RDONLY, 0644)) { + switch (source) { + case RPMQV_RPM: + if (!(verifyFlags & VERIFY_DEPS)) + break; + /* fall thru */ + default: + if (rpmdbOpen(prefix, &db, O_RDONLY, 0644)) return 1; /* XXX was exit(EXIT_FAILURE) */ - } + break; } - if (source == VERIFY_EVERY) { + switch (source) { + case RPMQV_RPM: + { FD_t fd; + + fd = ufdOpen(arg, O_RDONLY, 0); + if (fdFileno(fd) < 0) { + fprintf(stderr, _("open of %s failed\n"), arg); + ufdClose(fd); + retcode = 1; + break; + } + + retcode = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL); + + ufdClose(fd); + + switch (retcode) { + case 0: + retcode = verifyPackage(prefix, db, h, verifyFlags); + 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); + retcode = 1; + break; + } + } break; + + case RPMQV_SPECFILE: /* XXX FIXME */ + break; + + case RPMQV_ALL: for (offset = rpmdbFirstRecNum(db); offset != 0; offset = rpmdbNextRecNum(db, offset)) { @@ -181,84 +238,113 @@ int doVerify(const char * prefix, enum verifysources source, const char ** argv, } if ((rc = verifyPackage(prefix, db, h, verifyFlags)) != 0) - ec = rc; + retcode = rc; headerFree(h); } - } else { - while (*argv) { - const char *arg = *argv++; - - rc = 0; - switch (source) { - case VERIFY_RPM: - { FD_t fd; - - fd = ufdOpen(arg, O_RDONLY, 0); - if (fd == NULL) { - fprintf(stderr, _("open of %s failed\n"), arg); - break; - } - - if (fdFileno(fd) >= 0) { - rc = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL); - } + break; + case RPMQV_GROUP: + if (rpmdbFindByGroup(db, arg, &matches)) { + fprintf(stderr, _("group %s does not contain any packages\n"), + arg); + } else { + retcode = verifyMatches(prefix, db, matches, verifyFlags); + dbiFreeIndexRecord(matches); + } + break; - ufdClose(fd); + case RPMQV_WHATPROVIDES: + if (rpmdbFindByProvides(db, arg, &matches)) { + fprintf(stderr, _("no package provides %s\n"), arg); + retcode = 1; + } else { + retcode = verifyMatches(prefix, db, matches, verifyFlags); + dbiFreeIndexRecord(matches); + } + break; - switch (rc) { - case 0: - rc = verifyPackage(prefix, db, h, verifyFlags); - headerFree(h); - break; - case 1: - fprintf(stderr, _("%s is not an RPM\n"), arg); - break; - } - } break; - - case VERIFY_GRP: - if (rpmdbFindByGroup(db, arg, &matches)) { - fprintf(stderr, - _("group %s does not contain any packages\n"), - arg); - } else { - rc = verifyMatches(prefix, db, matches, verifyFlags); - dbiFreeIndexRecord(matches); - } - break; + case RPMQV_TRIGGEREDBY: + if (rpmdbFindByTriggeredBy(db, arg, &matches)) { + fprintf(stderr, _("no package triggers %s\n"), arg); + retcode = 1; + } else { + retcode = verifyMatches(prefix, db, matches, verifyFlags); + dbiFreeIndexRecord(matches); + } + break; - case VERIFY_PATH: - if (rpmdbFindByFile(db, arg, &matches)) { - fprintf(stderr, _("file %s is not owned by any package\n"), - arg); - } else { - rc = verifyMatches(prefix, db, matches, verifyFlags); - dbiFreeIndexRecord(matches); - } - break; + case RPMQV_WHATREQUIRES: + if (rpmdbFindByRequiredBy(db, arg, &matches)) { + fprintf(stderr, _("no package requires %s\n"), arg); + retcode = 1; + } else { + retcode = verifyMatches(prefix, db, matches, verifyFlags); + dbiFreeIndexRecord(matches); + } + break; - case VERIFY_PACKAGE: - rc = rpmdbFindByLabel(db, arg, &matches); - if (rc == 1) - fprintf(stderr, _("package %s is not installed\n"), arg); - else if (rc == 2) { - fprintf(stderr, _("error looking for package %s\n"), arg); - } else { - rc = verifyMatches(prefix, db, matches, verifyFlags); - dbiFreeIndexRecord(matches); - } + case RPMQV_PATH: + if (rpmdbFindByFile(db, arg, &matches)) { + int myerrno = 0; + if (access(arg, F_OK) != 0) + myerrno = errno; + switch (myerrno) { + default: + fprintf(stderr, _("file %s: %s\n"), arg, strerror(myerrno)); break; - - case VERIFY_EVERY: + case 0: + fprintf(stderr, _("file %s is not owned by any package\n"), arg); break; } - if (rc) - ec = rc; + 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); + dbiFreeIndexRecord(matches); } + break; + + case RPMQV_DBOFFSET: + recNumber = strtoul(arg, &end, 10); + if ((*end) || (end == arg) || (recNumber == ULONG_MAX)) { + fprintf(stderr, _("invalid package number: %s\n"), arg); + return 1; + } + rpmMessage(RPMMESS_DEBUG, _("verifying package: %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); + headerFree(h); + } + break; } - if (source != VERIFY_RPM) { - rpmdbClose(db); + switch(source) { + case RPMQV_RPM: + if (!(verifyFlags & VERIFY_DEPS)) + break; + /* fall thru */ + default: + if (db) { + rpmdbClose(db); + db = NULL; + } + break; } - return ec; + return retcode; } diff --git a/verify.h b/verify.h index 4b01be4..0ee4d1a 100644 --- a/verify.h +++ b/verify.h @@ -3,15 +3,14 @@ #include -#define VERIFY_FILES (1 << 0) -#define VERIFY_DEPS (1 << 1) -#define VERIFY_SCRIPT (1 << 2) -#define VERIFY_MD5 (1 << 3) +#define VERIFY_FILES (1 << 1) +#define VERIFY_DEPS (1 << 2) +#define VERIFY_SCRIPT (1 << 3) +#define VERIFY_MD5 (1 << 4) -enum verifysources { VERIFY_PATH, VERIFY_PACKAGE, VERIFY_EVERY, VERIFY_RPM, - VERIFY_GRP }; +extern struct poptOption rpmVerifyPoptTable[]; -int doVerify(const char * prefix, enum verifysources source, const char ** argv, - int verifyFlags); +int rpmVerify(const char * prefix, enum rpmQVSources source, int verifyFlags, + const char *arg); #endif -- 2.7.4