The branch stable/13 has been updated by bapt:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=3c5d1c587c59e58a3b9f85b93ecee7156c219972

commit 3c5d1c587c59e58a3b9f85b93ecee7156c219972
Author:     Moritz Schmitt <[email protected]>
AuthorDate: 2021-04-27 01:59:12 +0000
Commit:     Baptiste Daroussin <[email protected]>
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 {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to