From patchwork Wed Nov 16 10:29:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bernhard Nortmann X-Patchwork-Id: 695525 X-Patchwork-Delegate: joe.hershberger@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3tJgh901hPz9t25 for ; Wed, 16 Nov 2016 21:38:01 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 977DEA7564; Wed, 16 Nov 2016 11:37:59 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tEVD6dheXVsM; Wed, 16 Nov 2016 11:37:59 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2247DA755F; Wed, 16 Nov 2016 11:37:59 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 85385A755F for ; Wed, 16 Nov 2016 11:37:56 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qrRmiMamgtbL for ; Wed, 16 Nov 2016 11:37:56 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mout.web.de (mout.web.de [212.227.17.12]) by theia.denx.de (Postfix) with ESMTPS id 1177CA7549 for ; Wed, 16 Nov 2016 11:37:54 +0100 (CET) Received: from olymp.nortmann.local ([79.244.38.141]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LtFUV-1cnlKv2y8R-012q7r; Wed, 16 Nov 2016 11:31:10 +0100 From: Bernhard Nortmann To: u-boot@lists.denx.de Date: Wed, 16 Nov 2016 11:29:58 +0100 Message-Id: <1479292229-17256-4-git-send-email-bernhard.nortmann@web.de> X-Mailer: git-send-email 2.7.3 In-Reply-To: <1479292229-17256-1-git-send-email-bernhard.nortmann@web.de> References: <1479292229-17256-1-git-send-email-bernhard.nortmann@web.de> X-Provags-ID: V03:K0:yBoWmWuQX9riUb1NRM7eCwjxDZOzrtj16UVSmua3Gcr8Nm1ZTC8 RDa7VwwjDW+A/vJ6fO8OeIt2EFAtGV0Wi2Yn2eQUUv7oZv3QVha4YcxEeHrcU560Nk0SW+G GCRbr+jR/dQBWW9G2HI9QWsY9DDpChgEiqqpcsdC9xOkvyA7VnSSyleSz/ntJlGo0oUmMOq 5njY/WKLlgzPQWgwWYq1Q== X-UI-Out-Filterresults: notjunk:1; V01:K0:nO0khT+/1pw=:t+iN4bWeunEv4bClkkijq9 b6o756/QIaNYpnF1xdrMjSOkrysGGphl0upykdaymcL8Giu0oqIKaqPpf/GfrL6g4Z7uciE9U UnVRLfT+dVbBBNltfAypegfuLXkomSVEyuttdOEzG7raJHTMFMVQNAWalp/RSjLtHGkCOjdqf ASjKnaK/3Z9gJe3ZSpLb3o2Pav9Peg3L1WmeFDZsMmvtSeas0FB+/z74ZBMakHrmTgR5WIxTD 4XPEgHdFuhfwpUc1BYj0FXTbzROEW6jTkFDVhALljf/uFj0+CXE92UED2+mYbQrpEwlw8Mj0d OFBYPOi9DHkO0GrgDTyQuTiB+qSmTUEfe0536UjoOTr824o5avT9oe7dQpkeVE1MMcTicgw9c pI7O3ty51bURv+Xs8vqqfk5/cZK9IYRa1n2LAWr4Tx6ia6vTPoeRpdEsE7i85xcK/WY0VmK3h 15JkBOqgpVsEWb5TAF0zBTTxmCCByRBopu5UaKsgQGgEVg6QgrPGPphp8YLpgOaAlmxpsZUd0 5RsnXKJfb9pec2RjfqBvCKSUjiT4IcqpXv0K/O9ZyAWREmEvD1wKtVetQNHCzA+xVHYWi57FM iWlzrXPFF70AFeFnc1W9DSEU2dtO5Vt6eYJPTiG/n6gIPY7rRrwk+DB3MkP+qxgAQwArjlXgj 9IutZ+dOLngjDdU9o8/lsbTuLa4vd6EWlqNePxVTlgjlRi4i7BqEXRPygnKn4vQ6vczCai4zV 8nhJAXA0j0XfSYNzF8LCZ8X6DoPeNiQtMeF7Ra/xPGbBhBYgCl39XlNmA7k= Cc: Stefan Roese , Joe Hershberger , Lubomir Rintel , Jagan Teki , Stuart Longland , Bernhard Nortmann Subject: [U-Boot] [RFC PATCH v2 3/7] env: Introduce "export" operation and (access flag) restriction X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This patch introduces a new "export" environment operation (env_op_export) and the corresponding access flag ENV_FLAGS_VARACCESS_PREVENT_EXPORT; so that env_flags_validate() may now check requests to export specific variables. In turn, hexport_r() makes uses of this ability to suppress the export of variables that are flagged accordingly. Note that env_flags_validate() and hexport_r() will respect H_FORCE and H_PROGRAMMATIC flags, allowing to bypass the export filtering. H_PROGRAMMATIC gets used within env_print() to make sure all variables are listed. This is necessary because env_print() is essentially an "export to text" operation. Signed-off-by: Bernhard Nortmann Reviewed-by: Simon Glass --- Changes in v2: - Removed too narrow (flag & H_FORCE) expression, use "flag" directly cmd/nvedit.c | 3 ++- common/env_flags.c | 8 +++++++- include/env_flags.h | 3 ++- include/search.h | 1 + lib/hashtable.c | 3 +++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cmd/nvedit.c b/cmd/nvedit.c index 9ca5cb5..9a78e1d 100644 --- a/cmd/nvedit.c +++ b/cmd/nvedit.c @@ -101,7 +101,8 @@ static int env_print(char *name, int flag) } /* print whole list */ - len = hexport_r(&env_htab, '\n', flag, &res, 0, 0, NULL); + len = hexport_r(&env_htab, '\n', + flag | H_PROGRAMMATIC, &res, 0, 0, NULL); if (len > 0) { puts(res); diff --git a/common/env_flags.c b/common/env_flags.c index 1087f4e..f39d952 100644 --- a/common/env_flags.c +++ b/common/env_flags.c @@ -510,7 +510,7 @@ int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op, newval = newval ? : ""; /* validate the value to match the variable type */ - if (op != env_op_delete) { + if (op != env_op_delete && op != env_op_export) { enum env_flags_vartype type = (enum env_flags_vartype) (ENV_FLAGS_VARTYPE_BIN_MASK & item->flags); @@ -560,6 +560,12 @@ int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op, return 1; } break; + case env_op_export: + if (item->flags & ENV_FLAGS_VARACCESS_PREVENT_EXPORT) { + printf("## Don't export \"%s\"\n", name); + return 1; + } + break; } return 0; diff --git a/include/env_flags.h b/include/env_flags.h index 0dcec06..7e2362a 100644 --- a/include/env_flags.h +++ b/include/env_flags.h @@ -173,6 +173,7 @@ int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op, #define ENV_FLAGS_VARACCESS_PREVENT_CREATE 0x00000010 #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR 0x00000020 #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR 0x00000040 -#define ENV_FLAGS_VARACCESS_BIN_MASK 0x00000078 +#define ENV_FLAGS_VARACCESS_PREVENT_EXPORT 0x00000080 +#define ENV_FLAGS_VARACCESS_BIN_MASK 0x000000F8 #endif /* __ENV_FLAGS_H__ */ diff --git a/include/search.h b/include/search.h index 402dfd8..3df4d09 100644 --- a/include/search.h +++ b/include/search.h @@ -23,6 +23,7 @@ enum env_op { env_op_create, env_op_delete, env_op_overwrite, + env_op_export, }; /* Action which shall be performed in the call to hsearch. */ diff --git a/lib/hashtable.c b/lib/hashtable.c index f088477..399c4bb 100644 --- a/lib/hashtable.c +++ b/lib/hashtable.c @@ -621,6 +621,9 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep, int flag, if ((flag & H_HIDE_DOT) && ep->key[0] == '.') continue; + if (env_flags_validate(ep, NULL, env_op_export, flag)) + continue; /* don't export */ + list[n++] = ep; totlen += strlen(ep->key) + 2;