Change ',' to '#' in sed 's' command
[platform/upstream/rpm.git] / rpmsign.c
index 39c7e78..e29864e 100644 (file)
--- a/rpmsign.c
+++ b/rpmsign.c
@@ -4,6 +4,7 @@
 
 #include <popt.h>
 #include <rpm/rpmcli.h>
+#include <rpm/rpmsign.h>
 #include "cliutils.h"
 #include "debug.h"
 
@@ -19,15 +20,21 @@ enum modes {
 
 static int mode = 0;
 
-static struct poptOption optionsTable[] = {
-    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
-       N_("Common options for all rpm modes and executables:"), NULL },
+static struct poptOption signOptsTable[] = {
     { "addsign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_ADDSIGN,
        N_("sign package(s)"), NULL },
     { "resign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_RESIGN,
        N_("sign package(s) (identical to --addsign)"), NULL },
     { "delsign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_DELSIGN,
        N_("delete package signatures"), NULL },
+    POPT_TABLEEND
+};
+
+static struct poptOption optionsTable[] = {
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, signOptsTable, 0,
+       N_("Signature options:"), NULL },
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+       N_("Common options for all rpm modes and executables:"), NULL },
 
     POPT_AUTOALIAS
     POPT_AUTOHELP
@@ -91,7 +98,7 @@ static int checkPassPhrase(const char * passPhrase)
 }
 
 /* TODO: permit overriding macro setup on the command line */
-static int doSign(ARGV_const_t args)
+static int doSign(poptContext optCon)
 {
     int rc = EXIT_FAILURE;
     char * passPhrase = NULL;
@@ -106,13 +113,18 @@ static int doSign(ARGV_const_t args)
     passPhrase = getpass(_("Enter pass phrase: "));
     passPhrase = (passPhrase != NULL) ? rstrdup(passPhrase) : NULL;
     if (checkPassPhrase(passPhrase) == 0) {
+       const char *arg;
        fprintf(stderr, _("Pass phrase is good.\n"));
-       rc = rpmcliSign(args, 0, passPhrase);
+       rc = 0;
+       while ((arg = poptGetArg(optCon)) != NULL) {
+           rc += rpmPkgSign(arg, NULL, passPhrase);
+       }
     } else {
-       fprintf(stderr, _("Pass phrase check failed\n"));
+       fprintf(stderr, _("Pass phrase check failed or gpg key expired\n"));
     }
 
 exit:
+    free(passPhrase);
     free(name);
     return rc;
 }
@@ -121,25 +133,27 @@ int main(int argc, char *argv[])
 {
     int ec = EXIT_FAILURE;
     poptContext optCon = rpmcliInit(argc, argv, optionsTable);
-    ARGV_const_t args = NULL;
+    const char *arg;
     
     if (argc <= 1) {
        printUsage(optCon, stderr, 0);
        goto exit;
     }
 
-    args = (ARGV_const_t) poptGetArgs(optCon);
-    if (args == NULL) {
+    if (poptPeekArg(optCon) == NULL) {
        argerror(_("no arguments given"));
     }
 
     switch (mode) {
     case MODE_ADDSIGN:
     case MODE_RESIGN:
-       ec = doSign(args);
+       ec = doSign(optCon);
        break;
     case MODE_DELSIGN:
-       ec = rpmcliSign(args, 1, NULL);
+       ec = 0;
+       while ((arg = poptGetArg(optCon)) != NULL) {
+           ec += rpmPkgDelSign(arg);
+       }
        break;
     default:
        argerror(_("only one major mode may be specified"));