From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1k7Sed-0007a0-NC for mharc-grub-devel@gnu.org; Sun, 16 Aug 2020 20:05:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7Seb-0007WY-ED for grub-devel@gnu.org; Sun, 16 Aug 2020 20:05:33 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:40387) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7SeZ-00063p-Ka for grub-devel@gnu.org; Sun, 16 Aug 2020 20:05:33 -0400 Received: by mail-pj1-x102b.google.com with SMTP id d4so6835471pjx.5 for ; Sun, 16 Aug 2020 17:05:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficientek-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=m2f6+tcZdZoMdubz0xsNmkqzoV9of4tZwl6S+QwMJuM=; b=cFrJi6KEcTdS9CrNczDnSboO1K77gEgIt6uRtMT2W5lB1mf2a8nOukC4Kqa8K7mj35 5p6cxfxrTYlOK5OGt8Ni1gPAJT0MYRTQYzhIlal5JavN/rPUKmpI6kUC+9KzGcOoPHDt 6n46fT93jGv1XpGqm1eSDpNuppn0r0VlDOq128SmJkybn5VP+H3pmGZJeul6G0337gkI nPMN0HAV5L2zWyeZMPVkhdlEbJP8/SpVoVG5jtdEYsEhTPRfv2Q6onuQP9jeMKdW9BKS SniL2tNOclVR1aUMlNs+nV1RoZ+/JX80V79Lrg63YJlXW/6ZqNqSU+uHvmSxKoa4xSTj 40yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=m2f6+tcZdZoMdubz0xsNmkqzoV9of4tZwl6S+QwMJuM=; b=tAWptavhH1UJKoa9CoQfA3KaamVE87MCATm4z3CAVdoXiD6CC4nVPzgaQJ92tWP2pk CiC4cmfKyFeqSUVs7f1AfbXb+TFpEjYJVnTOUeL/PN2Mv/PQ09og/jc5dz4z5Z+3r+AX lctzdn5CVlU9wjPWuS1cTeM4x7r2Rb8z75IG+e5Rc0hW7xdxFjTCjJqk2Jdqw/hdP4Kz Yww/WF4rMZAYo0mcohgrwyOhdsrPCZ5OU0Hd0a3ZXNCUCI7FasfK+mn8rHYxrHuv+QGU TmCH7Of7kKaroLOcDEYrilEL9syjUTRA8tHeX/Miv+7d7C+HBVMmRBXRHbs6Z26rAWiJ UIqA== X-Gm-Message-State: AOAM53117e63jvvR/MWvFxXopyvniblu/vPXxpfp96WehL59sbsYpuq/ cteOWTo0YCPJX+9HUrxEDUOpNM42ROt5Tw== X-Google-Smtp-Source: ABdhPJz4cnth1ka9azxA1i3l4LBEJzPF+tuMA3cLiTpyB2IFIBhH1waamrLKH/1FBy50hwWkhc15xA== X-Received: by 2002:a17:902:ed4a:: with SMTP id y10mr9433122plb.106.1597622729892; Sun, 16 Aug 2020 17:05:29 -0700 (PDT) Received: from crass-HP-ZBook-15-G2.lan ([136.49.44.103]) by smtp.gmail.com with ESMTPSA id h19sm14967000pjv.41.2020.08.16.17.05.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 16 Aug 2020 17:05:29 -0700 (PDT) From: Glenn Washburn To: grub-devel@gnu.org Cc: Glenn Washburn Subject: [CRYPTOMOUNT-TEST 2/7] cryptodisk: Allow cryptomount password to be specified as argument. Date: Sun, 16 Aug 2020 19:05:13 -0500 Message-Id: <20200817000518.4006518-3-development@efficientek.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=development@efficientek.com; helo=mail-pj1-x102b.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Aug 2020 00:05:33 -0000 Signed-off-by: Glenn Washburn --- grub-core/disk/cryptodisk.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c index 031e9dd97..5502a6958 100644 --- a/grub-core/disk/cryptodisk.c +++ b/grub-core/disk/cryptodisk.c @@ -41,6 +41,7 @@ static const struct grub_arg_option options[] = /* TRANSLATORS: It's still restricted to cryptodisks only. */ {"all", 'a', 0, N_("Mount all."), 0, 0}, {"boot", 'b', 0, N_("Mount all volumes with `boot' flag set."), 0, 0}, + {"password", 'p', 0, N_("Password to open volumes."), 0, ARG_TYPE_STRING}, {"header", 'H', 0, N_("Read header from file"), 0, ARG_TYPE_STRING}, {"keyfile", 'k', 0, N_("Key file"), 0, ARG_TYPE_STRING}, {"keyfile-offset", 'O', 0, N_("Key file offset (bytes)"), 0, ARG_TYPE_INT}, @@ -1102,13 +1103,13 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) if (argc < 1 && !state[1].set && !state[2].set) return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required"); - if (state[3].set) /* Detached header */ + if (state[4].set) /* Detached header */ { if (state[0].set) return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Cannot use UUID lookup with detached header")); - hdr = grub_file_open (state[3].arg, + hdr = grub_file_open (state[4].arg, GRUB_FILE_TYPE_CRYPTODISK_DETACHED_HEADER); if (!hdr) return grub_errno; @@ -1119,7 +1120,12 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) have_it = 0; key = NULL; - if (state[4].set) /* keyfile */ + if (state[3].set) /* password */ + { + key = (grub_uint8_t *) state[3].arg; + key_size = grub_strlen(state[3].arg); + } + else if (state[5].set) /* keyfile */ { const char *p = NULL; grub_file_t keyfile; @@ -1127,9 +1133,9 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) grub_size_t requested_keyfile_size = 0; - if (state[5].set) /* keyfile-offset */ + if (state[6].set) /* keyfile-offset */ { - keyfile_offset = grub_strtoul (state[5].arg, &p, 0); + keyfile_offset = grub_strtoul (state[6].arg, &p, 0); if (grub_errno != GRUB_ERR_NONE) return grub_errno; @@ -1143,9 +1149,9 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) keyfile_offset = 0; } - if (state[6].set) /* keyfile-size */ + if (state[7].set) /* keyfile-size */ { - requested_keyfile_size = grub_strtoul (state[6].arg, &p, 0); + requested_keyfile_size = grub_strtoul (state[7].arg, &p, 0); if (*p != '\0') return grub_error (GRUB_ERR_BAD_ARGUMENT, @@ -1165,7 +1171,7 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) N_("Key file size is 0\n")); } - keyfile = grub_file_open (state[4].arg, + keyfile = grub_file_open (state[5].arg, GRUB_FILE_TYPE_CRYPTODISK_ENCRYPTION_KEY); if (!keyfile) return grub_errno; @@ -1197,7 +1203,7 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) key = keyfile_buffer; } - if (state[0].set) + if (state[0].set) /* -u uuid */ { grub_cryptodisk_t dev; @@ -1218,7 +1224,7 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) return grub_error (GRUB_ERR_BAD_ARGUMENT, "no such cryptodisk found"); return GRUB_ERR_NONE; } - else if (state[1].set || (argc == 0 && state[2].set)) + else if (state[1].set || (argc == 0 && state[2].set)) /* -a || -b */ { search_uuid = NULL; check_boot = state[2].set; @@ -1403,8 +1409,8 @@ GRUB_MOD_INIT (cryptodisk) { grub_disk_dev_register (&grub_cryptodisk_dev); cmd = grub_register_extcmd ("cryptomount", grub_cmd_cryptomount, 0, - N_("SOURCE [-H file] [-k keyfile] [-O keyoffset]" - " [-S keysize]|-u UUID|-a|-b"), + N_("SOURCE [-H file] [-k keyfile|-p password] " + "[-O keyoffset] [-S keysize]|-u UUID|-a|-b"), N_("Mount a crypto device."), options); grub_procfs_register ("luks_script", &luks_script); } -- 2.25.1