Verify signatures of signatures unless --skip-sig is specified.
This commit is contained in:
parent
f8401f760c
commit
0d711431c7
2 changed files with 38 additions and 14 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2013-10-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Verify signatures of signatures unless --skip-sig is specified.
|
||||||
|
|
||||||
2013-10-21 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-10-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* grub-core/kern/misc.c (grub_vsnprintf_real): Remove needless explicit
|
* grub-core/kern/misc.c (grub_vsnprintf_real): Remove needless explicit
|
||||||
|
|
|
@ -29,9 +29,22 @@
|
||||||
#include <grub/pubkey.h>
|
#include <grub/pubkey.h>
|
||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/kernel.h>
|
#include <grub/kernel.h>
|
||||||
|
#include <grub/extcmd.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
OPTION_SKIP_SIG = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct grub_arg_option options[] =
|
||||||
|
{
|
||||||
|
{"skip-sig", 's', 0,
|
||||||
|
N_("Skip signature-checking of the signature file."), 0, ARG_TYPE_NONE},
|
||||||
|
{0, 0, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
read_packet_header (grub_file_t sig, grub_uint8_t *out_type, grub_size_t *len)
|
read_packet_header (grub_file_t sig, grub_uint8_t *out_type, grub_size_t *len)
|
||||||
{
|
{
|
||||||
|
@ -544,8 +557,8 @@ grub_verify_signature (grub_file_t f, grub_file_t sig,
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_trust (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_trust (grub_extcmd_context_t ctxt,
|
||||||
int argc, char **args)
|
int argc, char **args)
|
||||||
{
|
{
|
||||||
grub_file_t pkf;
|
grub_file_t pkf;
|
||||||
struct grub_public_key *pk = NULL;
|
struct grub_public_key *pk = NULL;
|
||||||
|
@ -553,7 +566,9 @@ grub_cmd_trust (grub_command_t cmd __attribute__ ((unused)),
|
||||||
if (argc < 1)
|
if (argc < 1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
|
||||||
|
|
||||||
grub_file_filter_disable_all ();
|
grub_file_filter_disable_compression ();
|
||||||
|
if (ctxt->state[OPTION_SKIP_SIG].set)
|
||||||
|
grub_file_filter_disable_pubkey ();
|
||||||
pkf = grub_file_open (args[0]);
|
pkf = grub_file_open (args[0]);
|
||||||
if (!pkf)
|
if (!pkf)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
@ -625,7 +640,7 @@ grub_cmd_distrust (grub_command_t cmd __attribute__ ((unused)),
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_verify_signature (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_verify_signature (grub_extcmd_context_t ctxt,
|
||||||
int argc, char **args)
|
int argc, char **args)
|
||||||
{
|
{
|
||||||
grub_file_t f, sig;
|
grub_file_t f, sig;
|
||||||
|
@ -642,7 +657,9 @@ grub_cmd_verify_signature (grub_command_t cmd __attribute__ ((unused)),
|
||||||
if (argc > 2)
|
if (argc > 2)
|
||||||
{
|
{
|
||||||
grub_file_t pkf;
|
grub_file_t pkf;
|
||||||
grub_file_filter_disable_all ();
|
grub_file_filter_disable_compression ();
|
||||||
|
if (ctxt->state[OPTION_SKIP_SIG].set)
|
||||||
|
grub_file_filter_disable_pubkey ();
|
||||||
pkf = grub_file_open (args[2]);
|
pkf = grub_file_open (args[2]);
|
||||||
if (!pkf)
|
if (!pkf)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
@ -790,7 +807,8 @@ struct gcry_pk_spec *grub_crypto_pk_dsa;
|
||||||
struct gcry_pk_spec *grub_crypto_pk_ecdsa;
|
struct gcry_pk_spec *grub_crypto_pk_ecdsa;
|
||||||
struct gcry_pk_spec *grub_crypto_pk_rsa;
|
struct gcry_pk_spec *grub_crypto_pk_rsa;
|
||||||
|
|
||||||
static grub_command_t cmd, cmd_trust, cmd_distrust, cmd_list;
|
static grub_extcmd_t cmd, cmd_trust;
|
||||||
|
static grub_command_t cmd_distrust, cmd_list;
|
||||||
|
|
||||||
GRUB_MOD_INIT(verify)
|
GRUB_MOD_INIT(verify)
|
||||||
{
|
{
|
||||||
|
@ -835,12 +853,14 @@ GRUB_MOD_INIT(verify)
|
||||||
if (!val)
|
if (!val)
|
||||||
grub_env_set ("check_signatures", grub_pk_trusted ? "enforce" : "no");
|
grub_env_set ("check_signatures", grub_pk_trusted ? "enforce" : "no");
|
||||||
|
|
||||||
cmd = grub_register_command ("verify_detached", grub_cmd_verify_signature,
|
cmd = grub_register_extcmd ("verify_detached", grub_cmd_verify_signature, 0,
|
||||||
N_("FILE SIGNATURE_FILE [PUBKEY_FILE]"),
|
N_("[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]"),
|
||||||
N_("Verify detached signature."));
|
N_("Verify detached signature."),
|
||||||
cmd_trust = grub_register_command ("trust", grub_cmd_trust,
|
options);
|
||||||
N_("PUBKEY_FILE"),
|
cmd_trust = grub_register_extcmd ("trust", grub_cmd_trust, 0,
|
||||||
N_("Add PKFILE to trusted keys."));
|
N_("[-s|--skip-sig] PUBKEY_FILE"),
|
||||||
|
N_("Add PKFILE to trusted keys."),
|
||||||
|
options);
|
||||||
cmd_list = grub_register_command ("list_trusted", grub_cmd_list,
|
cmd_list = grub_register_command ("list_trusted", grub_cmd_list,
|
||||||
0,
|
0,
|
||||||
N_("List trusted keys."));
|
N_("List trusted keys."));
|
||||||
|
@ -852,8 +872,8 @@ GRUB_MOD_INIT(verify)
|
||||||
GRUB_MOD_FINI(verify)
|
GRUB_MOD_FINI(verify)
|
||||||
{
|
{
|
||||||
grub_file_filter_unregister (GRUB_FILE_FILTER_PUBKEY);
|
grub_file_filter_unregister (GRUB_FILE_FILTER_PUBKEY);
|
||||||
grub_unregister_command (cmd);
|
grub_unregister_extcmd (cmd);
|
||||||
grub_unregister_command (cmd_trust);
|
grub_unregister_extcmd (cmd_trust);
|
||||||
grub_unregister_command (cmd_list);
|
grub_unregister_command (cmd_list);
|
||||||
grub_unregister_command (cmd_distrust);
|
grub_unregister_command (cmd_distrust);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue