Blame rpmkeys.c

2ff057
#include "system.h"
2ff057
2ff057
#include <popt.h>
2ff057
#include <rpm/rpmcli.h>
2ff057
#include "cliutils.h"
2ff057
#include "debug.h"
2ff057
2ff057
enum modes {
2ff057
    MODE_CHECKSIG	= (1 << 0),
2ff057
    MODE_IMPORTKEY	= (1 << 1),
2ff057
    MODE_DELKEY		= (1 << 2),
2ff057
    MODE_LISTKEY	= (1 << 3),
2ff057
};
2ff057
2ff057
static int mode = 0;
2ff057
static int test = 0;
2ff057
2ff057
static struct poptOption keyOptsTable[] = {
2ff057
    { "checksig", 'K', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_CHECKSIG,
2ff057
	N_("verify package signature(s)"), NULL },
2ff057
    { "import", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_IMPORTKEY,
2ff057
	N_("import an armored public key"), NULL },
2ff057
    { "test", '\0', POPT_ARG_NONE, &test, 0,
2ff057
	N_("don't import, but tell if it would work or not"), NULL },
2ff057
#if 0
2ff057
    { "delete-key", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_DELKEY,
2ff057
	N_("list keys from RPM keyring"), NULL },
2ff057
    { "list-keys", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_LISTKEY,
2ff057
	N_("list keys from RPM keyring"), NULL },
2ff057
#endif
2ff057
    POPT_TABLEEND
2ff057
};
2ff057
2ff057
static struct poptOption optionsTable[] = {
2ff057
    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, keyOptsTable, 0,
2ff057
	N_("Keyring options:"), NULL },
2ff057
    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
2ff057
	N_("Common options for all rpm modes and executables:"), NULL },
2ff057
2ff057
    POPT_AUTOALIAS
2ff057
    POPT_AUTOHELP
2ff057
    POPT_TABLEEND
2ff057
};
2ff057
2ff057
int main(int argc, char *argv[])
2ff057
{
2ff057
    int ec = EXIT_FAILURE;
2ff057
    poptContext optCon = NULL;
2ff057
    rpmts ts = NULL;
2ff057
    ARGV_const_t args = NULL;
2ff057
2ff057
    xsetprogname(argv[0]); /* Portability call -- see system.h */
2ff057
    
2ff057
    optCon = rpmcliInit(argc, argv, optionsTable);
2ff057
2ff057
    if (argc < 2) {
2ff057
	printUsage(optCon, stderr, 0);
2ff057
	goto exit;
2ff057
    }
2ff057
2ff057
    args = (ARGV_const_t) poptGetArgs(optCon);
2ff057
2ff057
    if (mode != MODE_LISTKEY && args == NULL)
2ff057
	argerror(_("no arguments given"));
2ff057
2ff057
    ts = rpmtsCreate();
2ff057
    rpmtsSetRootDir(ts, rpmcliRootDir);
2ff057
2ff057
    switch (mode) {
2ff057
    case MODE_CHECKSIG:
2ff057
	ec = rpmcliVerifySignatures(ts, args);
2ff057
	break;
2ff057
    case MODE_IMPORTKEY:
2ff057
	if (test)
2ff057
	    rpmtsSetFlags(ts, (rpmtsFlags(ts)|RPMTRANS_FLAG_TEST));
2ff057
	ec = rpmcliImportPubkeys(ts, args);
2ff057
	break;
2ff057
    /* XXX TODO: actually implement these... */
2ff057
    case MODE_DELKEY:
2ff057
    case MODE_LISTKEY:
2ff057
	break;
2ff057
    default:
2ff057
	argerror(_("only one major mode may be specified"));
2ff057
    }
2ff057
2ff057
exit:
2ff057
    rpmtsFree(ts);
2ff057
    rpmcliFini(optCon);
2ff057
    return ec;
2ff057
}