From nobody Mon Aug 4 19:46:43 2025 X-Original-To: dev-commits-src-main@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 4bwnBD3vdjz63RcJ; Mon, 04 Aug 2025 19:46:44 +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 4bwnBC5wzMz4KZl; Mon, 04 Aug 2025 19:46:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1754336803; 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=F5j09gzKguwAxaYcEP+hP00OVBfKnhKwWjKmJVLwbv0=; b=Gubiq/m+xle7Dg8VR1g3pmDTaB1DurbAMshpWDrrrF0/0bAy7FPW4kyZcKHcRQIlP5xOIy Ohtt9JLsFI8T0hQXqQ543kt3XZu6ufv2svJYZUt8kf07K4D2+FCZaIXAqEurY/rvm3brXO SmPcULBufdo5m8N3ne4aZe4LAbtd3C7RA3NBVLNEAWJRnU+BevgPvs4EB13LC7xS661yrP HhzqwSrr1u4Oi5zdk+QY0fA1F2fuP2IIhLEbwZK1SYcirHXpcyzggZK+DMr8xoKSR781yX ReH17ijTFv74lgWZosXNTpwo1Tr2+k+fDJBLl/ZEZGqznJUvrYKf8lQb/p3wKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1754336803; 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=F5j09gzKguwAxaYcEP+hP00OVBfKnhKwWjKmJVLwbv0=; b=m+YbLkzjzYD9dMaXtKgcvkIqpoA3LHr48pdyXcmkwdk35yX70KOqrD/7RGNaFiG0ck+sBO qhtmDh/1wTEW79yvyX8F3L7lekkG81EKT5mWS6EbyJXd3KTGyruNvMEsMgDK5T921Sw9GT uKZg3iZBfzRAU1ukPosDkwe5cwn8pdJjTPGijMNzON56uHJGLLfSR/P2JDf9g6m9JAsWt2 sN6jvCu3foN1lzIxTqEqyIY4D6muZSQZdnjQurtHzEnAqKxbhojOfQ+uyzCogJNSiPg9uT A//TfyTTFJWKLEryQx44Z8jZ96CxWrcm4QOFkR2WJiqD/a/Msmu5Q+EmRkIigw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1754336803; a=rsa-sha256; cv=none; b=K/nUlU6rI/sjTKvnwaRkfbx83RzV2k2cCP5xYXmccT/zijiPmbARatDfpahDkJo0bS6w4C 0cAOAu7uJzJdtKb3JRSrGLMzHWW0fwzOKG7jbNCPzgG6XRtFgmiNrMBWQqSssphmoCG2cS eJ4vPWRw7qukQqqv4S8t5/+Uukz8UyjMdloc4SRXU6xhWznOt9UOcgQ4uQZe57ImJX9VVc o5SwdGmzilSFNLFyKI3Srrya4IIP/tJ+HyNGJZxOPLAtS15MBC8TWY46f8h2QC90fUMHsh 6lxqEU+Ol3d5oi/TghZg7djGyoIZksHj/NAcBgV1fBeN6lglXjMYKin4lcOdiQ== 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 4bwnBC5Qwbz12f5; Mon, 04 Aug 2025 19:46:43 +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 574JkhVW098926; Mon, 4 Aug 2025 19:46:43 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 574Jkhbi098923; Mon, 4 Aug 2025 19:46:43 GMT (envelope-from git) Date: Mon, 4 Aug 2025 19:46:43 GMT Message-Id: <202508041946.574Jkhbi098923@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: 4c5e0172767d - main - ctld: Replace the auth_name linked list with an unordered_set<> List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4c5e0172767d6a61d50c475023b81dc3e2049465 Auto-Submitted: auto-generated The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=4c5e0172767d6a61d50c475023b81dc3e2049465 commit 4c5e0172767d6a61d50c475023b81dc3e2049465 Author: John Baldwin AuthorDate: 2025-08-04 19:38:06 +0000 Commit: John Baldwin CommitDate: 2025-08-04 19:38:06 +0000 ctld: Replace the auth_name linked list with an unordered_set<> Retire the struct auth_name type entirely and change the ag_names member of struct auth_group to be an unordered_set<> of std::string objects. Sponsored by: Chelsio Communications Pull Request: https://github.com/freebsd/freebsd-src/pull/1794 --- usr.sbin/ctld/ctld.cc | 51 ++++----------------------------------------------- usr.sbin/ctld/ctld.hh | 12 ++---------- 2 files changed, 6 insertions(+), 57 deletions(-) diff --git a/usr.sbin/ctld/ctld.cc b/usr.sbin/ctld/ctld.cc index 558ddb8ac6aa..3ddccbfdb20e 100644 --- a/usr.sbin/ctld/ctld.cc +++ b/usr.sbin/ctld/ctld.cc @@ -226,57 +226,18 @@ auth_new_chap_mutual(struct auth_group *ag, const char *user, bool auth_name_new(struct auth_group *ag, const char *name) { - struct auth_name *an; - - an = reinterpret_cast(calloc(1, sizeof(*an))); - if (an == NULL) - log_err(1, "calloc"); - an->an_auth_group = ag; - an->an_initiator_name = checked_strdup(name); - TAILQ_INSERT_TAIL(&ag->ag_names, an, an_next); + /* Silently ignore duplicates. */ + ag->ag_names.emplace(name); return (true); } -static void -auth_name_delete(struct auth_name *an) -{ - TAILQ_REMOVE(&an->an_auth_group->ag_names, an, an_next); - - free(an->an_initiator_name); - free(an); -} - -bool -auth_name_defined(const struct auth_group *ag) -{ - if (TAILQ_EMPTY(&ag->ag_names)) - return (false); - return (true); -} - -const struct auth_name * -auth_name_find(const struct auth_group *ag, const char *name) -{ - const struct auth_name *auth_name; - - TAILQ_FOREACH(auth_name, &ag->ag_names, an_next) { - if (strcmp(auth_name->an_initiator_name, name) == 0) - return (auth_name); - } - - return (NULL); -} - bool auth_name_check(const struct auth_group *ag, const char *initiator_name) { - if (!auth_name_defined(ag)) + if (ag->ag_names.empty()) return (true); - if (auth_name_find(ag, initiator_name) == NULL) - return (false); - - return (true); + return (ag->ag_names.count(initiator_name) != 0); } bool @@ -420,7 +381,6 @@ auth_group_create(struct conf *conf, const char *name, char *label) if (name != NULL) ag->ag_name = checked_strdup(name); ag->ag_label = label; - TAILQ_INIT(&ag->ag_names); TAILQ_INIT(&ag->ag_portals); ag->ag_conf = conf; TAILQ_INSERT_TAIL(&conf->conf_auth_groups, ag, ag_next); @@ -456,13 +416,10 @@ auth_group_new(struct conf *conf, struct target *target) void auth_group_delete(struct auth_group *ag) { - struct auth_name *auth_name, *auth_name_tmp; struct auth_portal *auth_portal, *auth_portal_tmp; TAILQ_REMOVE(&ag->ag_conf->conf_auth_groups, ag, ag_next); - TAILQ_FOREACH_SAFE(auth_name, &ag->ag_names, an_next, auth_name_tmp) - auth_name_delete(auth_name); TAILQ_FOREACH_SAFE(auth_portal, &ag->ag_portals, ap_next, auth_portal_tmp) auth_portal_delete(auth_portal); diff --git a/usr.sbin/ctld/ctld.hh b/usr.sbin/ctld/ctld.hh index a2cedeaf77da..339793e90bf1 100644 --- a/usr.sbin/ctld/ctld.hh +++ b/usr.sbin/ctld/ctld.hh @@ -44,6 +44,7 @@ #include #include #include +#include #define DEFAULT_CONFIG_PATH "/etc/ctl.conf" #define DEFAULT_PIDFILE "/var/run/ctld.pid" @@ -72,12 +73,6 @@ private: std::string a_mutual_secret; }; -struct auth_name { - TAILQ_ENTRY(auth_name) an_next; - struct auth_group *an_auth_group; - char *an_initiator_name; -}; - struct auth_portal { TAILQ_ENTRY(auth_portal) ap_next; struct auth_group *ap_auth_group; @@ -99,7 +94,7 @@ struct auth_group { char *ag_label; int ag_type; std::unordered_map ag_auths; - TAILQ_HEAD(, auth_name) ag_names; + std::unordered_set ag_names; TAILQ_HEAD(, auth_portal) ag_portals; }; @@ -288,9 +283,6 @@ const struct auth *auth_find(const struct auth_group *ag, bool auth_name_new(struct auth_group *ag, const char *initiator_name); -bool auth_name_defined(const struct auth_group *ag); -const struct auth_name *auth_name_find(const struct auth_group *ag, - const char *initiator_name); bool auth_name_check(const struct auth_group *ag, const char *initiator_name);