#include <popt.h>
#include <rpm/rpmcli.h>
+#include <rpm/rpmsign.h>
#include "cliutils.h"
#include "debug.h"
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
}
/* 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;
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;
}
{
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"));