X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=rpmqv.c;h=da5f2ca1328384026b383e35ba756611a37a75a4;hb=505aac517c1319c6b5c122a4e2cf34b6c0089d34;hp=8d4bdf0f0c845c29bd6ddef2af20912586e88f74;hpb=fbd92df7544462a88cd8c752ffe07263dc8bb858;p=platform%2Fupstream%2Frpm.git diff --git a/rpmqv.c b/rpmqv.c index 8d4bdf0..da5f2ca 100644 --- a/rpmqv.c +++ b/rpmqv.c @@ -1,23 +1,20 @@ #include "system.h" const char *__progname; -#define _AUTOHELP - #include #include /* RPMSIGTAG, rpmReadPackageFile .. */ -#include #include -#include #include #include -#if defined(IAM_RPMK) -#include "lib/signature.h" -#endif #include "cliutils.h" #include "debug.h" +#if defined(IAM_RPMQ) || defined(IAM_RPMV) +#define IAM_RPMQV +#endif + enum modes { MODE_QUERY = (1 << 0), @@ -28,23 +25,11 @@ enum modes { MODE_ERASE = (1 << 2), #define MODES_IE (MODE_INSTALL | MODE_ERASE) - MODE_CHECKSIG = (1 << 6), - MODE_RESIGN = (1 << 7), -#define MODES_K (MODE_CHECKSIG | MODE_RESIGN) - - MODE_INITDB = (1 << 10), - MODE_REBUILDDB = (1 << 12), - MODE_VERIFYDB = (1 << 13), -#define MODES_DB (MODE_INITDB | MODE_REBUILDDB | MODE_VERIFYDB) - - MODE_UNKNOWN = 0 }; -#define MODES_FOR_DBPATH (MODES_IE | MODES_QV | MODES_DB) #define MODES_FOR_NODEPS (MODES_IE | MODE_VERIFY) #define MODES_FOR_TEST (MODES_IE) -#define MODES_FOR_ROOT (MODES_IE | MODES_QV | MODES_DB | MODES_K) static int quiet; @@ -55,25 +40,17 @@ static struct poptOption optionsTable[] = { { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0, N_("Query/Verify package selection options:"), NULL }, +#endif +#ifdef IAM_RPMQ { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQueryPoptTable, 0, N_("Query options (with -q or --query):"), NULL }, +#endif +#ifdef IAM_RPMV { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmVerifyPoptTable, 0, N_("Verify options (with -V or --verify):"), NULL }, -#endif /* IAM_RPMQV */ - -#ifdef IAM_RPMK - { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmSignPoptTable, 0, - N_("Signature options:"), - NULL }, -#endif /* IAM_RPMK */ - -#ifdef IAM_RPMDB - { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmDatabasePoptTable, 0, - N_("Database options:"), - NULL }, -#endif /* IAM_RPMDB */ +#endif #ifdef IAM_RPMEIU { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmInstallPoptTable, 0, @@ -105,18 +82,6 @@ int main(int argc, char *argv[]) struct rpmInstallArguments_s * ia = &rpmIArgs; #endif -#if defined(IAM_RPMDB) - struct rpmDatabaseArguments_s * da = &rpmDBArgs; -#endif - -#if defined(IAM_RPMK) - QVA_t ka = &rpmQVKArgs; -#endif - -#if defined(IAM_RPMK) - char * passPhrase = ""; -#endif - poptContext optCon; int ec = 0; #ifdef IAM_RPMEIU @@ -136,42 +101,14 @@ int main(int argc, char *argv[]) switch (bigMode) { case MODE_QUERY: qva->qva_mode = 'q'; break; case MODE_VERIFY: qva->qva_mode = 'V'; break; - case MODE_CHECKSIG: qva->qva_mode = 'K'; break; - case MODE_RESIGN: qva->qva_mode = 'R'; break; case MODE_INSTALL: case MODE_ERASE: - case MODE_INITDB: - case MODE_REBUILDDB: - case MODE_VERIFYDB: case MODE_UNKNOWN: default: break; } #endif -#ifdef IAM_RPMDB - if (bigMode == MODE_UNKNOWN || (bigMode & MODES_DB)) { - if (da->init) { - if (bigMode != MODE_UNKNOWN) - argerror(_("only one major mode may be specified")); - else - bigMode = MODE_INITDB; - } else - if (da->rebuild) { - if (bigMode != MODE_UNKNOWN) - argerror(_("only one major mode may be specified")); - else - bigMode = MODE_REBUILDDB; - } else - if (da->verify) { - if (bigMode != MODE_UNKNOWN) - argerror(_("only one major mode may be specified")); - else - bigMode = MODE_VERIFYDB; - } - } -#endif /* IAM_RPMDB */ - #ifdef IAM_RPMQV if (bigMode == MODE_UNKNOWN || (bigMode & MODES_QV)) { switch (qva->qva_mode) { @@ -180,7 +117,7 @@ int main(int argc, char *argv[]) } if (qva->qva_sourceCount) { - if (qva->qva_sourceCount > 2) + if (qva->qva_sourceCount > 1) argerror(_("one type of query/verify may be performed at a " "time")); } @@ -210,31 +147,10 @@ int main(int argc, char *argv[]) } #endif /* IAM_RPMEIU */ -#ifdef IAM_RPMK - if (bigMode == MODE_UNKNOWN || (bigMode & MODES_K)) { - switch (ka->qva_mode) { - case RPMSIGN_NONE: - ka->sign = 0; - break; - case RPMSIGN_IMPORT_PUBKEY: - case RPMSIGN_CHK_SIGNATURE: - bigMode = MODE_CHECKSIG; - ka->sign = 0; - break; - case RPMSIGN_ADD_SIGNATURE: - case RPMSIGN_NEW_SIGNATURE: - case RPMSIGN_DEL_SIGNATURE: - bigMode = MODE_RESIGN; - ka->sign = (ka->qva_mode != RPMSIGN_DEL_SIGNATURE); - break; - } - } -#endif /* IAM_RPMK */ - #if defined(IAM_RPMEIU) if (!( bigMode == MODE_INSTALL ) && (ia->probFilter & (RPMPROB_FILTER_REPLACEPKG | RPMPROB_FILTER_OLDPACKAGE))) - argerror(_("only installation, upgrading, rmsource and rmspec may be forced")); + argerror(_("only installation and upgrading may be forced")); if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_FORCERELOCATE)) argerror(_("files may only be relocated during package installation")); @@ -250,13 +166,13 @@ int main(int argc, char *argv[]) if (ia->prefix && ia->prefix[0] != '/') argerror(_("arguments to --prefix must begin with a /")); - if (bigMode != MODE_INSTALL && (ia->installInterfaceFlags & INSTALL_HASH)) + if (!(bigMode & MODES_IE) && (ia->installInterfaceFlags & INSTALL_HASH)) argerror(_("--hash (-h) may only be specified during package " - "installation")); + "installation and erasure")); - if (bigMode != MODE_INSTALL && (ia->installInterfaceFlags & INSTALL_PERCENT)) + if (!(bigMode & MODES_IE) && (ia->installInterfaceFlags & INSTALL_PERCENT)) argerror(_("--percent may only be specified during package " - "installation")); + "installation and erasure")); if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_REPLACEPKG)) argerror(_("--replacepkgs may only be specified during package " @@ -312,19 +228,13 @@ int main(int argc, char *argv[]) if (ia->noDeps & (bigMode & ~MODES_FOR_NODEPS)) argerror(_("--nodeps may only be specified during package " - "building, rebuilding, recompilation, installation," - "erasure, and verification")); + "installation, erasure, and verification")); if ((ia->transFlags & RPMTRANS_FLAG_TEST) && (bigMode & ~MODES_FOR_TEST)) - argerror(_("--test may only be specified during package installation, " - "erasure, and building")); + argerror(_("--test may only be specified during package installation " + "and erasure")); #endif /* IAM_RPMEIU */ - if (rpmcliRootDir && rpmcliRootDir[1] && (bigMode & ~MODES_FOR_ROOT)) - argerror(_("--root (-r) may only be specified during " - "installation, erasure, querying, and " - "database rebuilds")); - if (rpmcliRootDir && rpmcliRootDir[0] != '/') { argerror(_("arguments to --root (-r) must begin with a /")); } @@ -332,87 +242,12 @@ int main(int argc, char *argv[]) if (quiet) rpmSetVerbosity(RPMLOG_WARNING); -#if defined(IAM_RPMK) - if (ka->sign) { - if (bigMode == MODE_RESIGN) { - const char ** av; - struct stat sb; - int errors = 0; - - if ((av = poptGetArgs(optCon)) == NULL) { - fprintf(stderr, _("no files to sign\n")); - errors++; - } else - while (*av) { - if (stat(*av, &sb)) { - fprintf(stderr, _("cannot access file %s\n"), *av); - errors++; - } - av++; - } - - if (errors) { - ec = errors; - goto exit; - } - - if (poptPeekArg(optCon)) { - int sigTag = rpmLookupSignatureType(RPMLOOKUPSIG_QUERY); - switch (sigTag) { - case 0: - break; - case RPMSIGTAG_PGP: - case RPMSIGTAG_GPG: - case RPMSIGTAG_DSA: - case RPMSIGTAG_RSA: - passPhrase = rpmGetPassPhrase(_("Enter pass phrase: "), sigTag); - if (passPhrase == NULL) { - fprintf(stderr, _("Pass phrase check failed\n")); - ec = EXIT_FAILURE; - goto exit; - } - fprintf(stderr, _("Pass phrase is good.\n")); - passPhrase = xstrdup(passPhrase); - break; - default: - fprintf(stderr, - _("Invalid %%_signature spec in macro file.\n")); - ec = EXIT_FAILURE; - goto exit; - break; - } - } - } else { - argerror(_("--sign may only be used during package building")); - } - } else { - /* Make rpmLookupSignatureType() return 0 ("none") from now on */ - (void) rpmLookupSignatureType(RPMLOOKUPSIG_DISABLE); - } -#endif /* IAM_RPMK */ - if (rpmcliPipeOutput && initPipe()) exit(EXIT_FAILURE); ts = rpmtsCreate(); (void) rpmtsSetRootDir(ts, rpmcliRootDir); switch (bigMode) { -#ifdef IAM_RPMDB - case MODE_INITDB: - ec = rpmtsInitDB(ts, 0644); - break; - - case MODE_REBUILDDB: - { rpmVSFlags vsflags = rpmExpandNumeric("%{_vsflags_rebuilddb}"); - rpmVSFlags ovsflags = rpmtsSetVSFlags(ts, vsflags); - ec = rpmtsRebuildDB(ts); - vsflags = rpmtsSetVSFlags(ts, ovsflags); - } break; - case MODE_VERIFYDB: - ec = rpmtsVerifyDB(ts); - break; -#endif /* IAM_RPMDB */ - #ifdef IAM_RPMEIU case MODE_ERASE: if (ia->noDeps) ia->installInterfaceFlags |= UNINSTALL_NODEPS; @@ -466,9 +301,7 @@ int main(int argc, char *argv[]) if (!poptPeekArg(optCon) && !(qva->qva_source == RPMQV_ALL)) argerror(_("no arguments given for query")); - qva->qva_specQuery = rpmspecQuery; ec = rpmcliQuery(ts, qva, (ARGV_const_t) poptGetArgs(optCon)); - qva->qva_specQuery = NULL; break; case MODE_VERIFY: @@ -483,35 +316,10 @@ int main(int argc, char *argv[]) } break; #endif /* IAM_RPMQV */ -#ifdef IAM_RPMK - case MODE_CHECKSIG: - { rpmVerifyFlags verifyFlags = - (VERIFY_FILEDIGEST|VERIFY_DIGEST|VERIFY_SIGNATURE); - - verifyFlags &= ~ka->qva_flags; - ka->qva_flags = (rpmQueryFlags) verifyFlags; - } - case MODE_RESIGN: - if (!poptPeekArg(optCon)) - argerror(_("no arguments given")); - ka->passPhrase = passPhrase; - ec = rpmcliSign(ts, ka, (ARGV_const_t) poptGetArgs(optCon)); - break; -#endif /* IAM_RPMK */ - #if !defined(IAM_RPMQV) case MODE_QUERY: case MODE_VERIFY: #endif -#if !defined(IAM_RPMK) - case MODE_CHECKSIG: - case MODE_RESIGN: -#endif -#if !defined(IAM_RPMDB) - case MODE_INITDB: - case MODE_REBUILDDB: - case MODE_VERIFYDB: -#endif #if !defined(IAM_RPMEIU) case MODE_INSTALL: case MODE_ERASE: @@ -524,19 +332,20 @@ int main(int argc, char *argv[]) break; } -exit: - ts = rpmtsFree(ts); - finishPipe(); + rpmtsFree(ts); + if (finishPipe()) + ec = EXIT_FAILURE; #ifdef IAM_RPMQV - qva->qva_queryFormat = _free(qva->qva_queryFormat); + free(qva->qva_queryFormat); #endif #ifdef IAM_RPMEIU - if (ia->relocations != NULL) - for (i = 0; i < ia->numRelocations; i++) - ia->relocations[i].oldPath = _free(ia->relocations[i].oldPath); - ia->relocations = _free(ia->relocations); + if (ia->relocations != NULL) { + for (i = 0; i < ia->numRelocations; i++) + free(ia->relocations[i].oldPath); + free(ia->relocations); + } #endif rpmcliFini(optCon);