From nobody Thu Mar 06 15:40:00 2025 X-Original-To: dev-commits-src-branches@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 4Z7tsF2dZ6z5pnZb; Thu, 06 Mar 2025 15:40:01 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z7tsD5BjPz3l96; Thu, 06 Mar 2025 15:40:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741275600; 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=lKQOoiccHI8r78Tdda0IXEWyFRA2xJVcFQwJYGvPUbU=; b=vRMjj7WqaxCCHGzyvBpxzt/2nvccsAWdPPaueJQ4kKKDCXtIdCp+OfNbbkX0hdQG8KcGiZ 6Sy9cs9IMceOStXXXN9sjdm+yzElP9nKxvJwaA6fM3HEkB0VFOTFLmL8xzUJeI2NIV6Sfl 0TC2TUUEZrKApovK+SV7Ym5Os/AFEZLj0KZ/YVSCWNFLYwabV3602n9Ehg9InSg3w7c81v a5W0NAi8eLELXHiKF1+5XQWw3dc7mTAU7KbqE6EeysxtfEtMi9oUtiJytAvoMKM50RBqe8 BaF0xJ1wF6CFDKrO6mL9vJxTTfmf5eXWOPgtvIXwpUvCJ42kTWdiZEZxuuLsCw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1741275600; a=rsa-sha256; cv=none; b=DowBUXZqg6PLcZkMLjKcsnz4PjyOZfaPsU86H61T/9lEbbp2ViCKLLCT2VRdy3S4I9DkPE 2xBrGBBXshA/oHW00+1jDwYmK6XMOpl/JPBF9TDz82ERAHD2TztWIoCzSUA3fsDnwwOb8D 6WpG8b/6Nn3pW+pjvTgmgEcsslxKOqzcWltGITUTWnLL6iqatBQscQVdlFOdulVoImUCm+ o8Q1sl4HstGyeT/HtaEVBD913zOcbFsUyKtr6R5Kv/amE37vjNjs5fT7F2i4EgUa0HR61R 8E9P+QuuXEr7EtCrvEOnhEXUiSdcxnCAYmNlzWrT31gcPxigX8/4He+gOSayBQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741275600; 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=lKQOoiccHI8r78Tdda0IXEWyFRA2xJVcFQwJYGvPUbU=; b=NROgu4lYl69YFKDVegYjCmOQ6YOgp8fuUGhU2FbBFt+HZbE2sxcYHl+N2zBxR5e+qY1sS+ KkbVkj3pYgiV3XxxN4duquaEuV/CG1+23OLevETeulp6bWZ+E/DRzfrXCiqvxmfemYvkQz IMoqQhmCN11W1i6Hwi6CT5uxc8tjQ1J6W/1Fqflq5rbeHG2hBHt4zYU7QX2lRLbk4haQ1N 4hiCkYiOoBepr++4QpiYq3MQn/nkRbqIXr3d0605dU5baflj70D6MowPxWwZjYUB8HFdob ljStfg3FtT2LPg5Y572JoLtnXn8LjB1RvR9vesKT+lBh5P+OObwcpze8qZsj0g== 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 4Z7tsD4mBwzwRr; Thu, 06 Mar 2025 15:40:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 526Fe08T029896; Thu, 6 Mar 2025 15:40:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 526Fe0qT029873; Thu, 6 Mar 2025 15:40:00 GMT (envelope-from git) Date: Thu, 6 Mar 2025 15:40:00 GMT Message-Id: <202503061540.526Fe0qT029873@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Baptiste Daroussin Subject: git: 2b8f8ede6e6b - stable/14 - pkg(7): support configuration overwrite like pkg(8) List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 2b8f8ede6e6b83805ceeb33d51f08282ab4445b4 Auto-Submitted: auto-generated The branch stable/14 has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=2b8f8ede6e6b83805ceeb33d51f08282ab4445b4 commit 2b8f8ede6e6b83805ceeb33d51f08282ab4445b4 Author: Baptiste Daroussin AuthorDate: 2025-01-15 08:18:46 +0000 Commit: Baptiste Daroussin CommitDate: 2025-03-06 15:38:16 +0000 pkg(7): support configuration overwrite like pkg(8) with pkg(8) it is possible to overwrite a configuration like adding FreeBSD { enabled: false } in /usr/local/etc/pkg/repo/overwrite.conf which allows to change any value which can have been reviously configured in anything in /etc/pkg/*.conf now the bootstrap supports the same MFC After: 3 weeks (cherry picked from commit 5c341fe5123d4aa6961066542de63dd4431d004d) --- usr.sbin/pkg/config.c | 55 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c index 521360c642d6..e02da1461294 100644 --- a/usr.sbin/pkg/config.c +++ b/usr.sbin/pkg/config.c @@ -354,51 +354,79 @@ parse_signature_type(struct repository *repo, const char *st) else { warnx("Signature type %s is not supported for bootstraping," " ignoring repository %s", st, repo->name); - repo_free(repo); - return false; + return (false); } return (true); } +static struct repository * +find_repository(const char *name) +{ + struct repository *repo; + STAILQ_FOREACH(repo, &repositories, next) { + if (strcmp(repo->name, name) == 0) + return (repo); + } + return (NULL); +} + static void parse_repo(const ucl_object_t *o) { const ucl_object_t *cur; - const char *key; + const char *key, *reponame; ucl_object_iter_t it = NULL; + bool newrepo = false; + struct repository *repo; + + reponame = ucl_object_key(o); + repo = find_repository(reponame); + if (repo == NULL) { + repo = calloc(1, sizeof(struct repository)); + if (repo == NULL) + err(EXIT_FAILURE, "calloc"); - struct repository *repo = calloc(1, sizeof(struct repository)); - if (repo == NULL) - err(EXIT_FAILURE, "calloc"); - - repo->name = strdup(ucl_object_key(o)); - if (repo->name == NULL) - err(EXIT_FAILURE, "strdup"); + repo->name = strdup(reponame); + if (repo->name == NULL) + err(EXIT_FAILURE, "strdup"); + newrepo = true; + } while ((cur = ucl_iterate_object(o, &it, true))) { key = ucl_object_key(cur); if (key == NULL) continue; if (strcasecmp(key, "url") == 0) { + free(repo->url); repo->url = strdup(ucl_object_tostring(cur)); if (repo->url == NULL) err(EXIT_FAILURE, "strdup"); } else if (strcasecmp(key, "mirror_type") == 0) { parse_mirror_type(repo, ucl_object_tostring(cur)); } else if (strcasecmp(key, "signature_type") == 0) { - if (!parse_signature_type(repo, ucl_object_tostring(cur))) + if (!parse_signature_type(repo, ucl_object_tostring(cur))) { + if (newrepo) + repo_free(repo); + else + STAILQ_REMOVE(&repositories, repo, repository, next); return; + } } else if (strcasecmp(key, "fingerprints") == 0) { + free(repo->fingerprints); repo->fingerprints = strdup(ucl_object_tostring(cur)); if (repo->fingerprints == NULL) err(EXIT_FAILURE, "strdup"); } else if (strcasecmp(key, "pubkey") == 0) { + free(repo->pubkey); repo->pubkey = strdup(ucl_object_tostring(cur)); if (repo->pubkey == NULL) err(EXIT_FAILURE, "strdup"); } else if (strcasecmp(key, "enabled") == 0) { if ((cur->type != UCL_BOOLEAN) || !ucl_object_toboolean(cur)) { - repo_free(repo); + if (newrepo) + repo_free(repo); + else + STAILQ_REMOVE(&repositories, repo, repository, next); return; } } @@ -408,7 +436,8 @@ parse_repo(const ucl_object_t *o) repo_free(repo); return; } - STAILQ_INSERT_TAIL(&repositories, repo, next); + if (newrepo) + STAILQ_INSERT_TAIL(&repositories, repo, next); return; }