From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1Vl4Fm-0007Ek-GY for mharc-grub-devel@gnu.org; Mon, 25 Nov 2013 17:03:38 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48917) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vl4Ff-0007DJ-PV for grub-devel@gnu.org; Mon, 25 Nov 2013 17:03:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vl4FW-0001sd-SG for grub-devel@gnu.org; Mon, 25 Nov 2013 17:03:31 -0500 Received: from mail-yh0-x235.google.com ([2607:f8b0:4002:c01::235]:38895) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vl4FW-0001ri-HR for grub-devel@gnu.org; Mon, 25 Nov 2013 17:03:22 -0500 Received: by mail-yh0-f53.google.com with SMTP id b20so3299457yha.26 for ; Mon, 25 Nov 2013 14:03:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type; bh=StDixtWR22sh2EKWNRZZRwqL1wf6mGr4Hmaqks5YvjE=; b=sp8TRaWGP2tD/ndbWoVzVVwpY9iWu0Q7xUnZn02r1MpjsIQBtYeTztuasX9TD1Kgdw aKArP8GBnMHE5pNmkPzljBNcn6puGTGSkDNjGOIQz7ta2WGFturt1k009gP1UOa0Hq2n 4g1ajCyQ44t0n9Jv7NWvwwoTOrm0Tif08inyVm1RKT0QwUbE3Wl8F8V4lKBuI6jXaAGT 6BlwW+5A00bIMEibsO4efJMmdbtYLG1wlF7IQ89eyR0jfYmcJyu+P3TOhkilB6Ll3Jom Mrow/KRCiefADIM9QibWaoMXmlfPV0rlclUhYk766VAEhiZHFLzZc3qOktvr1r9kmKJ6 YhQw== X-Received: by 10.236.119.102 with SMTP id m66mr149843yhh.90.1385417001972; Mon, 25 Nov 2013 14:03:21 -0800 (PST) Received: from [10.0.0.14] (c-50-169-245-128.hsd1.nh.comcast.net. [50.169.245.128]) by mx.google.com with ESMTPSA id r64sm17197849yhc.23.2013.11.25.14.03.21 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 25 Nov 2013 14:03:21 -0800 (PST) Message-ID: <5293C927.8080208@gmail.com> Date: Mon, 25 Nov 2013 17:03:19 -0500 From: SevenBits User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.1 MIME-Version: 1.0 To: The development of GNU GRUB Subject: Re: PATCH: added GRUB command to get and set (U)EFI firmware variables References: <5293C281.4080601@gmail.com> In-Reply-To: X-Enigmail-Version: 1.6 Content-Type: multipart/alternative; boundary="------------000409050309060306000507" X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:4002:c01::235 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Nov 2013 22:03:36 -0000 This is a multi-part message in MIME format. --------------000409050309060306000507 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Thanks for your quick reply. I just have a couple of questions. How do you prefer I allow the user to specify the vendor UUID? By typing it in via the keyboard? And secondly, by saying it needs "readable aliases for known types" do you mean that there should be a function to set an integer, one to set a boolean, etc? Regarding the patch format, I'll tidy that up and send a proper one. - -- SevenBits On 11/25/2013 04:41 PM, Vladimir 'phcoder' Serbinenko wrote: > please resend as proper and not as reverse patch. Anotjer issie that can be > seen from description alone is that you don't allow to specify vendor uuid. > it would be needed and slso it needs readable aliases for known types > On Nov 25, 2013 10:35 PM, "SevenBits" wrote: > >> Hello everyone, >> >> This patch adds two GRUB two commands to allow the user to get and set >> the values of (U)EFI firmware variables. When dealing with (U)EFI >> firmware with GRUB I decided this would be a useful tool to have for >> both developers and end-users. >> >> The first command, setefivariable, takes two parameters: the name of the >> variable to set and its value. The second, getefivariable, also takes >> two parameters: the name of the variable to retrieve and the name of the >> GRUB environment variable in which you want to store the result. This >> can then be checked using GRUB's built in 'if' statement and scripting >> capability to allow unique booting capabilities based on whether, for >> example, secure boot is enabled or the (U)EFI firmware is in setup mode. >> >> Have a look and let me know what you think! The patch follows. >> >> -- SevenBits >> >> diff --git a/grub/grub-core/Makefile.core.def >> b/grub-orig/grub-core/Makefile.core.def >> index 177d6d6..5cd84b1 100644 >> --- a/grub/grub-core/Makefile.core.def >> +++ b/grub-orig/grub-core/Makefile.core.def >> @@ -1004,13 +1004,6 @@ module = { >> }; >> >> module = { >> - name = setvariable; >> - common = commands/efi/setvariable.c; >> - enable = i386_efi; >> - enable = x86_64_efi; >> -}; >> - >> -module = { >> name = pcidump; >> common = commands/pcidump.c; >> enable = pci; >> diff --git a/grub/grub-core/commands/efi/setvariable.c >> b/grub/grub-core/commands/efi/setvariable.c >> deleted file mode 100644 >> index b0d0967..0000000 >> --- a/grub/grub-core/commands/efi/setvariable.c >> +++ /dev/null >> @@ -1,96 +0,0 @@ >> -/* setvariable.c - get and set efi firmware variables */ >> -/* >> - * GRUB -- GRand Unified Bootloader >> - * Copyright (C) 2013 Free Software Foundation, Inc. >> - * >> - * GRUB is free software: you can redistribute it and/or modify >> - * it under the terms of the GNU General Public License as published by >> - * the Free Software Foundation, either version 3 of the License, or >> - * (at your option) any later version. >> - * >> - * GRUB is distributed in the hope that it will be useful, >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> - * GNU General Public License for more details. >> - * >> - * You should have received a copy of the GNU General Public License >> - * along with GRUB. If not, see . >> - */ >> - >> -#include >> -#include >> -#include >> -#include >> -#include >> -#include >> -#include >> -#include >> - >> -GRUB_MOD_LICENSE ("GPLv3+"); >> - >> -static grub_err_t >> -grub_cmd_setefivariable (grub_command_t cmd __attribute__ ((unused)), >> - int argc, char *argv[]) >> -{ >> - grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; >> - if (argc == 0) >> - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable name >> expected")); >> - else if (argc == 1) >> - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable name >> value expected")); >> - >> - grub_err_t status; >> - grub_size_t arg_size = (grub_strlen(argv[1]) + 1) * sizeof(char); >> - >> - status = grub_efi_set_variable (argv[0], &global, argv[1], arg_size); >> - if (status != GRUB_ERR_NONE) >> - { >> - grub_printf ("couldn't set efi variable"); >> - return status; >> - } >> - return 0; >> -} >> - >> -static grub_err_t >> -grub_cmd_getefivariable (grub_command_t cmd __attribute__ ((unused)), >> - int argc, char *argv[]) >> -{ >> - grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; >> - if (argc == 0) >> - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable name >> expected")); >> - else if (argc == 1) >> - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable name >> value expected")); >> - >> - grub_size_t var_size; >> - grub_err_t status; >> - char *value = (char*)grub_efi_get_variable (argv[0], &global, >> &var_size); >> - status = grub_env_set (argv[1], value); >> - if (status != GRUB_ERR_NONE) >> - { >> - grub_printf ("couldn't set environment variable"); >> - return status; >> - } >> - return 0; >> -} >> - >> -static grub_command_t cmd_setefivariable, cmd_getefivariable; >> - >> -GRUB_MOD_INIT(loadbios) >> -{ >> - cmd_setefivariable = grub_register_command ("setefivariable", >> grub_cmd_setefivariable, >> - N_("NAME VALUE"), >> - N_("Set an EFI firmware variable " >> - "which can be stored and retrieved " >> - "from between sessions.")); >> - >> - cmd_getefivariable = grub_register_command ("getefivariable", >> grub_cmd_getefivariable, >> - N_("NAME ENV_VARIABLE"), >> - N_("Gets an EFI firmware variable " >> - "and stores it as a GRUB environment " >> - "variable named ENV_VARIABLE.")); >> -} >> - >> -GRUB_MOD_FINI(loadbios) >> -{ >> - grub_unregister_command (cmd_setefivariable); >> - grub_unregister_command (cmd_getefivariable); >> -} >> >> _______________________________________________ >> Grub-devel mailing list >> Grub-devel@gnu.org >> https://lists.gnu.org/mailman/listinfo/grub-devel >> > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJSk8knAAoJEFbRvtGxmFPETq0H/jbN5WRHRImN93zuXaAhLBqf cwyRPAJFdyIIGGRrqqRS/KMITDO2eVSsiEwbCQxPAfqGFhFq64hOYJxTlJRBNoUf bM4g34e26x0rH338EFFnFe/8KZSV9dMf/dByKCh1yXLa9F74CYC211tAuwCcG1lr cm+k71B7wvBn9szPgrXkcvqDbnAJ2arDgabzkqUGIPYpdMYdeCHVzM5uFMAaqLPA VPAdZSfhbvZgaA41XIsSx6YjMf2PQPNqDKg/Vn3BuzxpD+OnuxVCdwGkX5+rdnCr ejG+pJLqYK2qymcJEkMW1mnYyMOjV5Layp+3P69BBUf+Xc53Z9Du8cDM2Inz4oA= =voXE -----END PGP SIGNATURE----- --------------000409050309060306000507 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Thanks for your quick reply.

I just have a couple of questions. How do you prefer I allow the user to specify the vendor UUID? By typing it in via the keyboard? And secondly, by saying it needs "readable aliases for known types" do you mean that there should be a function to set an integer, one to set a boolean, etc?

Regarding the patch format, I'll tidy that up and send a proper one.

- -- SevenBits

On 11/25/2013 04:41 PM, Vladimir 'phcoder' Serbinenko wrote:
> please resend as proper and not as reverse patch. Anotjer issie that can be
> seen from description alone is that you don't allow to specify vendor uuid.
> it would be needed and slso it needs readable aliases for known types
> On Nov 25, 2013 10:35 PM, "SevenBits" <sevenbitstech@gmail.com> wrote:
>
>> Hello everyone,
>>
>> This patch adds two GRUB two commands to allow the user to get and set
>> the values of (U)EFI firmware variables. When dealing with (U)EFI
>> firmware with GRUB I decided this would be a useful tool to have for
>> both developers and end-users.
>>
>> The first command, setefivariable, takes two parameters: the name of the
>> variable to set and its value. The second, getefivariable, also takes
>> two parameters: the name of the variable to retrieve and the name of the
>> GRUB environment variable in which you want to store the result. This
>> can then be checked using GRUB's built in 'if' statement and scripting
>> capability to allow unique booting capabilities based on whether, for
>> example, secure boot is enabled or the (U)EFI firmware is in setup mode.
>>
>> Have a look and let me know what you think! The patch follows.
>>
>> -- SevenBits
>>
>> diff --git a/grub/grub-core/Makefile.core.def
>> b/grub-orig/grub-core/Makefile.core.def
>> index 177d6d6..5cd84b1 100644
>> --- a/grub/grub-core/Makefile.core.def
>> +++ b/grub-orig/grub-core/Makefile.core.def
>> @@ -1004,13 +1004,6 @@ module = {
>>  };
>>
>>  module = {
>> -  name = setvariable;
>> -  common = commands/efi/setvariable.c;
>> -  enable = i386_efi;
>> -  enable = x86_64_efi;
>> -};
>> -
>> -module = {
>>    name = pcidump;
>>    common = commands/pcidump.c;
>>    enable = pci;
>> diff --git a/grub/grub-core/commands/efi/setvariable.c
>> b/grub/grub-core/commands/efi/setvariable.c
>> deleted file mode 100644
>> index b0d0967..0000000
>> --- a/grub/grub-core/commands/efi/setvariable.c
>> +++ /dev/null
>> @@ -1,96 +0,0 @@
>> -/* setvariable.c - get and set efi firmware variables */
>> -/*
>> - *  GRUB  --  GRand Unified Bootloader
>> - *  Copyright (C) 2013  Free Software Foundation, Inc.
>> - *
>> - *  GRUB is free software: you can redistribute it and/or modify
>> - *  it under the terms of the GNU General Public License as published by
>> - *  the Free Software Foundation, either version 3 of the License, or
>> - *  (at your option) any later version.
>> - *
>> - *  GRUB is distributed in the hope that it will be useful,
>> - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
>> - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> - *  GNU General Public License for more details.
>> - *
>> - *  You should have received a copy of the GNU General Public License
>> - *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
>> - */
>> -
>> -#include <grub/env.h>
>> -#include <grub/dl.h>
>> -#include <grub/misc.h>
>> -#include <grub/file.h>
>> -#include <grub/efi/efi.h>
>> -#include <grub/pci.h>
>> -#include <grub/command.h>
>> -#include <grub/i18n.h>
>> -
>> -GRUB_MOD_LICENSE ("GPLv3+");
>> -
>> -static grub_err_t
>> -grub_cmd_setefivariable (grub_command_t cmd __attribute__ ((unused)),
>> -           int argc, char *argv[])
>> -{
>> -    grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
>> -    if (argc == 0)
>> -        return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable name
>> expected"));
>> -    else if (argc == 1)
>> -        return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable name
>> value expected"));
>> -
>> -    grub_err_t status;
>> -    grub_size_t arg_size = (grub_strlen(argv[1]) + 1) * sizeof(char);
>> -
>> -    status = grub_efi_set_variable (argv[0], &global, argv[1], arg_size);
>> -    if (status != GRUB_ERR_NONE)
>> -    {
>> -        grub_printf ("couldn't set efi variable");
>> -        return status;
>> -    }
>> -    return 0;
>> -}
>> -
>> -static grub_err_t
>> -grub_cmd_getefivariable (grub_command_t cmd __attribute__ ((unused)),
>> -                 int argc, char *argv[])
>> -{
>> -    grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
>> -    if (argc == 0)
>> -        return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable name
>> expected"));
>> -    else if (argc == 1)
>> -        return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable name
>> value expected"));
>> -
>> -    grub_size_t var_size;
>> -    grub_err_t status;
>> -    char *value = (char*)grub_efi_get_variable (argv[0], &global,
>> &var_size);
>> -    status = grub_env_set (argv[1], value);
>> -    if (status != GRUB_ERR_NONE)
>> -    {
>> -        grub_printf ("couldn't set environment variable");
>> -        return status;
>> -    }
>> -    return 0;
>> -}
>> -
>> -static grub_command_t cmd_setefivariable, cmd_getefivariable;
>> -
>> -GRUB_MOD_INIT(loadbios)
>> -{
>> -  cmd_setefivariable = grub_register_command ("setefivariable",
>> grub_cmd_setefivariable,
>> -                    N_("NAME VALUE"),
>> -                    N_("Set an EFI firmware variable "
>> -                          "which can be stored and retrieved "
>> -                          "from between sessions."));
>> -
>> -  cmd_getefivariable = grub_register_command ("getefivariable",
>> grub_cmd_getefivariable,
>> -                    N_("NAME ENV_VARIABLE"),
>> -                    N_("Gets an EFI firmware variable "
>> -                          "and stores it as a GRUB environment "
>> -                          "variable named ENV_VARIABLE."));
>> -}
>> -
>> -GRUB_MOD_FINI(loadbios)
>> -{
>> -  grub_unregister_command (cmd_setefivariable);
>> -  grub_unregister_command (cmd_getefivariable);
>> -}
>>
>> _______________________________________________
>> Grub-devel mailing list
>> Grub-devel@gnu.org
>> https://lists.gnu.org/mailman/listinfo/grub-devel
>>
>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJSk8knAAoJEFbRvtGxmFPETq0H/jbN5WRHRImN93zuXaAhLBqf
cwyRPAJFdyIIGGRrqqRS/KMITDO2eVSsiEwbCQxPAfqGFhFq64hOYJxTlJRBNoUf
bM4g34e26x0rH338EFFnFe/8KZSV9dMf/dByKCh1yXLa9F74CYC211tAuwCcG1lr
cm+k71B7wvBn9szPgrXkcvqDbnAJ2arDgabzkqUGIPYpdMYdeCHVzM5uFMAaqLPA
VPAdZSfhbvZgaA41XIsSx6YjMf2PQPNqDKg/Vn3BuzxpD+OnuxVCdwGkX5+rdnCr
ejG+pJLqYK2qymcJEkMW1mnYyMOjV5Layp+3P69BBUf+Xc53Z9Du8cDM2Inz4oA=
=voXE
-----END PGP SIGNATURE-----

--------------000409050309060306000507--