git: 3c5d1c587c59 - stable/13 - Make pkg(7) use environment variables specified in pkg.conf
Baptiste Daroussin
bapt at FreeBSD.org
Wed May 5 07:24:00 UTC 2021
The branch stable/13 has been updated by bapt:
URL: https://cgit.FreeBSD.org/src/commit/?id=3c5d1c587c59e58a3b9f85b93ecee7156c219972
commit 3c5d1c587c59e58a3b9f85b93ecee7156c219972
Author: Moritz Schmitt <moritz at schmi.tt>
AuthorDate: 2021-04-27 01:59:12 +0000
Commit: Baptiste Daroussin <bapt at FreeBSD.org>
CommitDate: 2021-05-05 07:17:14 +0000
Make pkg(7) use environment variables specified in pkg.conf
Modify /usr/sbin/pkg to use environment variables specified in pkg.conf.
This allows control over underlying libraries like fetch(3), which can
be configured by setting HTTP_PROXY.
Differential Revision: https://reviews.freebsd.org/D29820
(cherry picked from commit e869d3c60147bbb226b5ad97d2ef73391aeebafa)
---
usr.sbin/pkg/config.c | 29 +++++++++++++++++++++++++----
usr.sbin/pkg/config.h | 2 ++
2 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index 3a5434639d6d..2bcfd9c405f3 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
#include <paths.h>
#include <stdbool.h>
#include <unistd.h>
+#include <ctype.h>
#include "config.h"
@@ -136,6 +137,15 @@ static struct config_entry c[] = {
NULL,
false,
false
+ },
+ [PKG_ENV] = {
+ PKG_CONFIG_OBJECT,
+ "PKG_ENV",
+ NULL,
+ NULL,
+ NULL,
+ false,
+ false,
}
};
@@ -207,11 +217,11 @@ static void
config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
{
struct sbuf *buf = sbuf_new_auto();
- const ucl_object_t *cur, *seq;
- ucl_object_iter_t it = NULL, itseq = NULL;
+ const ucl_object_t *cur, *seq, *tmp;
+ ucl_object_iter_t it = NULL, itseq = NULL, it_obj = NULL;
struct config_entry *temp_config;
struct config_value *cv;
- const char *key;
+ const char *key, *evkey;
int i;
size_t j;
@@ -226,7 +236,7 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
if (conftype == CONFFILE_PKG) {
for (j = 0; j < strlen(key); ++j)
- sbuf_putc(buf, key[j]);
+ sbuf_putc(buf, toupper(key[j]));
sbuf_finish(buf);
} else if (conftype == CONFFILE_REPO) {
if (strcasecmp(key, "url") == 0)
@@ -287,6 +297,17 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
temp_config[i].value =
strdup(ucl_object_toboolean(cur) ? "yes" : "no");
break;
+ case PKG_CONFIG_OBJECT:
+ if (strcmp(c[i].key, "PKG_ENV") == 0) {
+ while ((tmp =
+ ucl_iterate_object(cur, &it_obj, true))) {
+ evkey = ucl_object_key(tmp);
+ if (evkey != NULL && *evkey != '\0') {
+ setenv(evkey, ucl_object_tostring_forced(tmp), 1);
+ }
+ }
+ }
+ break;
default:
/* Normal string value. */
temp_config[i].value = strdup(ucl_object_tostring(cur));
diff --git a/usr.sbin/pkg/config.h b/usr.sbin/pkg/config.h
index afcd728abd92..87efd3c29e94 100644
--- a/usr.sbin/pkg/config.h
+++ b/usr.sbin/pkg/config.h
@@ -44,6 +44,7 @@ typedef enum {
FINGERPRINTS,
REPOS_DIR,
PUBKEY,
+ PKG_ENV,
CONFIG_SIZE
} pkg_config_key;
@@ -51,6 +52,7 @@ typedef enum {
PKG_CONFIG_STRING=0,
PKG_CONFIG_BOOL,
PKG_CONFIG_LIST,
+ PKG_CONFIG_OBJECT
} pkg_config_t;
typedef enum {
More information about the dev-commits-src-branches
mailing list