Modify eu-strip option to perform strip in post script of rpm package & add option...
[platform/upstream/rpm.git] / rpmqv.c
diff --git a/rpmqv.c b/rpmqv.c
index e8335d6..da5f2ca 100644 (file)
--- a/rpmqv.c
+++ b/rpmqv.c
@@ -3,19 +3,18 @@ const char *__progname;
 
 #include <rpm/rpmcli.h>
 #include <rpm/rpmlib.h>                        /* RPMSIGTAG, rpmReadPackageFile .. */
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
-#include <rpm/rpmdb.h>
 #include <rpm/rpmps.h>
 #include <rpm/rpmts.h>
 
-#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),
@@ -26,24 +25,11 @@ enum modes {
     MODE_ERASE         = (1 <<  2),
 #define        MODES_IE (MODE_INSTALL | MODE_ERASE)
 
-    MODE_CHECKSIG      = (1 <<  6),
-    MODE_RESIGN                = (1 <<  7),
-    MODE_KEYRING       = (1 <<  8),
-#define        MODES_K  (MODE_CHECKSIG | MODE_RESIGN | MODE_KEYRING)
-
-    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;
 
@@ -54,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,
@@ -104,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
@@ -135,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) {
@@ -179,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"));
     }
@@ -209,30 +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_IMPORT_PUBKEY:
-           bigMode = MODE_KEYRING;
-           break;
-       case RPMSIGN_CHK_SIGNATURE:
-           bigMode = MODE_CHECKSIG;
-           break;
-       case RPMSIGN_ADD_SIGNATURE:
-       case RPMSIGN_NEW_SIGNATURE:
-           ka->sign = 1;
-           /* fallthrough */
-       case RPMSIGN_DEL_SIGNATURE:
-           bigMode = MODE_RESIGN;
-           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"));
 
@@ -248,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 "
@@ -310,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 /"));
     }
@@ -330,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;
@@ -464,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:
@@ -481,42 +316,10 @@ int main(int argc, char *argv[])
     }  break;
 #endif /* IAM_RPMQV */
 
-#ifdef IAM_RPMK
-    case MODE_KEYRING:
-       if (!poptPeekArg(optCon))
-           argerror(_("no arguments given"));
-       ec = rpmcliImportPubkeys(ts, (ARGV_const_t) poptGetArgs(optCon));
-       break;
-    case MODE_CHECKSIG:
-    {  rpmVerifyFlags verifyFlags =
-               (VERIFY_FILEDIGEST|VERIFY_DIGEST|VERIFY_SIGNATURE);
-
-       verifyFlags &= ~rpmcliQueryFlags;
-       ka->qva_flags = (rpmQueryFlags) verifyFlags;
-       ec = rpmcliVerifySignatures(ts, ka, (ARGV_const_t) poptGetArgs(optCon));
-       break;
-    }  
-    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:
@@ -529,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);