From nobody Wed Mar 02 21:57:33 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 8B3C419E0C7E; Wed, 2 Mar 2022 21:57:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4K87Jc1Jbtz3Kf1; Wed, 2 Mar 2022 21:57:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646258256; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=54nWYNG6R77hG8JROSdIfQafiYx/DoAZaBdEzCWwnI4=; b=jSUa7+3rz/Hae7QnC957M2zKRCvkRKqyjTGK8WgzDJK0JZ43lsM2TK/inJKDiKO9JKdyXg HaVZhlYm3of0Lw0naDr3n1BvUArL5+5Yiav6K1x7WUgngCNvA1Jl6O2f+uKrARqVZdpByS A/GgWkqAGCRhkgpFTLrq/U+/0Z9IKGtREMzILiDs2aE0fNRyPNFe1eanZkR9y+jG6zGlIv Za3zne8udU20STZKuPoFWn1PxS9IOyASxoC4Wj+kPWNJOhSlDjxqKrc3mOKdYCyA571XkS X8VtWS5CIR2bEwrGW7MkEw2kDWE9xiJ/vWG+Zp0YUW8wVoWUNzcV9T4ZYfv3mA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 19932346B; Wed, 2 Mar 2022 21:57:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 222LvYg2065396; Wed, 2 Mar 2022 21:57:34 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 222LvXFo065395; Wed, 2 Mar 2022 21:57:33 GMT (envelope-from git) Date: Wed, 2 Mar 2022 21:57:33 GMT Message-Id: <202203022157.222LvXFo065395@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Eric van Gyzen Subject: git: 36a9057e043b - stable/13 - efivar: Add --quiet to not report errors List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vangyzen X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 36a9057e043b068f4edb58e42f3999bca4c34ed1 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646258256; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=54nWYNG6R77hG8JROSdIfQafiYx/DoAZaBdEzCWwnI4=; b=SZFLmYRS2IDsKKCMaaxTe1lBlQ1zfutAlBt3WbvqHa7kPdANehM4LgP74ZrnQnFHBRRA7b VCV8dgckjBKE7Z4kVjKaV5aXyU8jtCClkQ53JXsClqMy/CjOxCgCItOXxM+9Lx4mn029Nw DFaLVtWVf/tGcuiwH1uhpajq7VlwMsPJLleZ1SOfk5mXuYO4Xd8r4YDw90pwTF6MYiPXzl 5I9fqJvzwGVdsmxnYhe0S5GfJUFON7mWBjV1foxnlVEnFkgvBwULed6DJiTJilDvXZjGr1 uh5X4trSdAOipjCDF+lsDuwOgldrXwDmLljbvAC4Cpq8LGS2nEUJ/KCyWShVKg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1646258256; a=rsa-sha256; cv=none; b=rb8k55N+8Ig/tCk9CBZgFNHEHQHLhNHqKRbnUAnNFBBHroDttoIvH5hEKGVSb9KfYw5HeZ Fr0a150bgPCIp6GrfVk6tfpAWBdO2r+4CnkcfiSxfFKSiu1qeqZaQlHe3QyyYYH27VkkuD 7wMUoIxq2uX8pWheI+KS67QJqMUUEy9AMppZnxgl2IxxkgLZb6cAdGmlxPFBkEMmR6TCb8 NK59fiOylsOa+TWa7+wmlwv+yAX8DPV39Kar7LFodOI1AvDolrpjCjqzMBICY1oJS4jH5g XHOf9eXIkD/GtpHIRbFWoIHloa0Yn/0ZU80tsTyrwJiQ6+tfBTFyEp4GPy50YA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by vangyzen: URL: https://cgit.FreeBSD.org/src/commit/?id=36a9057e043b068f4edb58e42f3999bca4c34ed1 commit 36a9057e043b068f4edb58e42f3999bca4c34ed1 Author: Warner Losh AuthorDate: 2021-04-09 22:35:08 +0000 Commit: Eric van Gyzen CommitDate: 2022-03-02 21:56:31 +0000 efivar: Add --quiet to not report errors Add -q/--quiet flag to the command line. With it, errors are not reported at all. Instead nothing is printed and the exit code is non-zero. Reviewed by: markj Sponsored by: Netflix, Inc Differential Revision: https://reviews.freebsd.org/D29619 (cherry picked from commit 3c0dcbfc8501155af2c5461de10fd01c615524a0) --- usr.sbin/efivar/efivar.8 | 10 +++++--- usr.sbin/efivar/efivar.c | 62 +++++++++++++++++++++++++++++++++++++----------- 2 files changed, 55 insertions(+), 17 deletions(-) diff --git a/usr.sbin/efivar/efivar.8 b/usr.sbin/efivar/efivar.8 index e6f34501dfde..ac359737915f 100644 --- a/usr.sbin/efivar/efivar.8 +++ b/usr.sbin/efivar/efivar.8 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2017-2019 Netflix, Inc. +.\" Copyright (c) 2017-2021 Netflix, Inc. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 18, 2020 +.Dd April 7, 2021 .Dt EFIVAR 8 .Os .Sh NAME @@ -32,7 +32,7 @@ .Nd UEFI environment variable interaction .Sh SYNOPSIS .Nm -.Op Fl abdDHlLNpRtuw +.Op Fl abdDHlLNpqRtuw .Op Fl n Ar name .Op Fl f Ar file .Op Fl -append @@ -51,6 +51,7 @@ .Op Fl -no-name .Op Fl -print .Op Fl -print-decimal +.Op Fl -quiet .Op Fl -raw-guid .Op Fl -utf8 .Op Fl -write @@ -155,6 +156,9 @@ Decode the variable as if it were a UEFI Boot Option, including information abou Do not display the variable name. .It Fl p Fl -print Print the value of the variable. +.It Fl q Fl -quiet +When an error occurs, exit with a non-zero value without outputting any error messages. +Otherwise, produce the normal output and exit with a zero status. .It Fl R Fl -raw-guid Do not substitute well known names for GUID numeric values in output. .It Fl u Fl -utf8 diff --git a/usr.sbin/efivar/efivar.c b/usr.sbin/efivar/efivar.c index c1d36b9bb0ba..cbf4050a787d 100644 --- a/usr.sbin/efivar/efivar.c +++ b/usr.sbin/efivar/efivar.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2016 Netflix, Inc. + * Copyright (c) 2016-2021 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -33,6 +33,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include #include #include @@ -60,6 +62,7 @@ static struct option longopts[] = { { "no-name", no_argument, NULL, 'N' }, { "print", no_argument, NULL, 'p' }, // { "print-decimal", no_argument, NULL, 'd' }, /* unimplemnted clash with linux version */ + { "quiet", no_argument, NULL, 'q' }, { "raw-guid", no_argument, NULL, 'R' }, { "utf8", no_argument, NULL, 'u' }, { "write", no_argument, NULL, 'w' }, @@ -69,6 +72,7 @@ static struct option longopts[] = { static int aflag, Aflag, bflag, dflag, Dflag, gflag, Hflag, Nflag, lflag, Lflag, Rflag, wflag, pflag, uflag, load_opt_flag; +static bool quiet; static char *varname; static char *fromfile; static u_long attrib = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS; @@ -77,13 +81,40 @@ static void usage(void) { - errx(1, "efivar [-abdDHlLNpRtuw] [-n name] [-f file] [--append] [--ascii]\n" + errx(1, "efivar [-abdDHlLNpqRtuw] [-n name] [-f file] [--append] [--ascii]\n" "\t[--attributes] [--binary] [--delete] [--fromfile file] [--hex]\n" "\t[--list-guids] [--list] [--load-option] [--name name] [--no-name]\n" "\t[--print] [--print-decimal] [--raw-guid] [--utf8] [--write]\n" + "\t[--quiet]\n" "\tname[=value]"); } +static void +rep_err(int eval, const char *fmt, ...) +{ + va_list ap; + + if (quiet) + exit(eval); + + va_start(ap, fmt); + verr(eval, fmt, ap); + va_end(ap); +} + +static void +rep_errx(int eval, const char *fmt, ...) +{ + va_list ap; + + if (quiet) + exit(eval); + + va_start(ap, fmt); + verrx(eval, fmt, ap); + va_end(ap); +} + static void breakdown_name(char *name, efi_guid_t *guid, char **vname) { @@ -91,11 +122,11 @@ breakdown_name(char *name, efi_guid_t *guid, char **vname) cp = strrchr(name, '-'); if (cp == NULL) - errx(1, "Invalid name: %s", name); + rep_errx(1, "Invalid name: %s", name); *vname = cp + 1; *cp = '\0'; if (efi_name_to_guid(name, guid) < 0) - errx(1, "Invalid guid %s", name); + rep_errx(1, "Invalid guid %s", name); } static uint8_t * @@ -124,7 +155,7 @@ append_variable(char *name, char *val) breakdown_name(name, &guid, &vname); data = get_value(val, &datalen); if (efi_append_variable(guid, vname, data, datalen, attrib) < 0) - err(1, "efi_append_variable"); + rep_err(1, "efi_append_variable"); } static void @@ -135,7 +166,7 @@ delete_variable(char *name) breakdown_name(name, &guid, &vname); if (efi_del_variable(guid, vname) < 0) - err(1, "efi_del_variable"); + rep_err(1, "efi_del_variable"); } static void @@ -149,7 +180,7 @@ write_variable(char *name, char *val) breakdown_name(name, &guid, &vname); data = get_value(val, &datalen); if (efi_set_variable(guid, vname, data, datalen, attrib) < 0) - err(1, "efi_set_variable"); + rep_err(1, "efi_set_variable"); } static void @@ -195,18 +226,18 @@ print_var(efi_guid_t *guid, char *name) fd = open(fromfile, O_RDONLY); if (fd < 0) - err(1, "open %s", fromfile); + rep_err(1, "open %s", fromfile); data = malloc(64 * 1024); if (data == NULL) - err(1, "malloc"); + rep_err(1, "malloc"); datalen = read(fd, data, 64 * 1024); if (datalen <= 0) - err(1, "read"); + rep_err(1, "read"); close(fd); } else { rv = efi_get_variable(*guid, name, &data, &datalen, &att); if (rv < 0) - err(1, "fetching %s-%s", gname, name); + rep_err(1, "fetching %s-%s", gname, name); } @@ -253,7 +284,7 @@ print_variables(void) print_var(guid, name); if (rv < 0) - err(1, "Error listing names"); + rep_err(1, "Error listing names"); } static void @@ -272,7 +303,7 @@ parse_args(int argc, char **argv) { int ch, i; - while ((ch = getopt_long(argc, argv, "aAbdDf:gHlLNn:OpRt:uw", + while ((ch = getopt_long(argc, argv, "aAbdDf:gHlLNn:OpqRt:uw", longopts, NULL)) != -1) { switch (ch) { case 'a': @@ -314,6 +345,9 @@ parse_args(int argc, char **argv) case 'p': pflag++; break; + case 'q': + quiet = true; + break; case 'R': Rflag++; break; @@ -331,7 +365,7 @@ parse_args(int argc, char **argv) fromfile = strdup(optarg); break; case 0: - errx(1, "unknown or unimplemented option\n"); + rep_errx(1, "unknown or unimplemented option\n"); break; default: usage();