From nobody Wed Nov 02 16:04:30 2022 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 4N2Wt72Dn8z4gFs4; Wed, 2 Nov 2022 16:04:31 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4N2Wt668rTz3gSd; Wed, 2 Nov 2022 16:04:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1667405070; 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=nMEkRE+ATF41I5HEdMGk14d8JDDJVXlc3Z47/mkTqgo=; b=P8L7VviK9Yh7G08pgg1ozZ6RZyR4pXIdOdkcfCZwOUg+XoS+yd4L5JurSPcOBzX0UiFoF/ CRTmeYEPpJduUwAPp9h9ZKJ045ANiHXavA+HhqtSdp4EJCxR/Zv/gQ44HuT2hTgFhjlxNU bZGL5bjD8LGQz8nNWdqcQ2qYzPwA8f56TrNUqewAE0WPjfB+cHt5aY/Tbj7XddN3AOPSMm zaMiBG72rtEoTR6noDNwAZUQeNQzgZ9rMFwuVmpAaDXWOHGuusjJZNCvuDqGL10/KFVP0m kTUkq/cxbOezxZXEXKcDwlWDTeWonJvx6NnDZKI5Z5sVMouhhiR+N24GYxxSiw== 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 4N2Wt650Grz12hb; Wed, 2 Nov 2022 16:04:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 2A2G4UQs080124; Wed, 2 Nov 2022 16:04:30 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2A2G4UJK080123; Wed, 2 Nov 2022 16:04:30 GMT (envelope-from git) Date: Wed, 2 Nov 2022 16:04:30 GMT Message-Id: <202211021604.2A2G4UJK080123@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mike Karels Subject: git: 144361386696 - main - getaddrinfo: distinguish missing addrs from unresolvable names 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: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: karels X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 144361386696582c04592f200a4c2e3339c81a25 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1667405070; 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=nMEkRE+ATF41I5HEdMGk14d8JDDJVXlc3Z47/mkTqgo=; b=KH98u6kLCfyPNDZCy/wK6CSkW7zt0JGnbXW+pGtQV7mVcCxIgjQOxNY9KF/SnIiDtrqh7m D5nq3RCpMwksKAk9YdtMHDiEUyj7+Z2w7NRhXw8zrzBVZKmQ/SXupJJbU+o4k+7ZKJwtcH n9/jXira+gF8tvQ94GtUHNzO3IzQb1eYZyrJFvusXWgXueYqPZmEdK7qF1jJW0W/8D28Ss jVWdb3cHEjVfkG8C8mBle2t/JkqWSIxD8/kgHBN6DoO+nFJtoOGFxg9HKLwfG58rh3soD4 /AbRUrKOLiq6Pwc01z8XlcTQD+GlzIF13GriDfGHMiEDHAdZgxlvWqYqRfJqYQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1667405070; a=rsa-sha256; cv=none; b=V8FrkWYcNKB+ZO0mrKhYXZkrVvPtHYru3dxfYRhEOHImAjD8Z2irF8Q7IaVA7H3klj1Nm3 2p3ST5ePChnxNEP0E/JL5ulh9E20oGv49PKl9+e12ohDdjTWD/dnImrwHkrgYhv5XZgzOX sVOuaDrDQtw7304JpmD7AgFnY909eQNj0KkVujvBdw7s82Nu/89zDfgrfGlzbj3oX0O8Ay yIq8l6H0i1oX5wcjdA+dstTdMd9EdPvEgdYTKDTvtyndFVz8GTLT8rqDrZwCxeIC0eJ1Dt dIypVdR5qPFW+1X/G3jsIQ4gZkZ5wTEdUi7MUC2nKXhji/Eb7lsG9BhBGlR8TA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by karels: URL: https://cgit.FreeBSD.org/src/commit/?id=144361386696582c04592f200a4c2e3339c81a25 commit 144361386696582c04592f200a4c2e3339c81a25 Author: Mike Karels AuthorDate: 2022-11-02 15:57:59 +0000 Commit: Mike Karels CommitDate: 2022-11-02 16:03:31 +0000 getaddrinfo: distinguish missing addrs from unresolvable names Rework getaddrinfo(3) to return different error values for unresolvable names (same as before, EAI_NONAME) and those without a requested addr (EAI_ADDRFAMILY) when using DNS. This is implemented via an added error in the nsswitch layer, NS_ADDRFAMILY, which is used only by getaddrinfo(). The error is passed through nsdispatch(3), but that routine has no changes to handle this error. The error originates in the getaddrinfo DNS layer called via nsdispatch(), and is processed by the search layer that calls nsdispatch(). While here, add a little style to returns near those that were modified. Reviewed in https://reviews.freebsd.org/D37139 with related changes. Reviewed by: bz MFC after: 1 month --- include/nsswitch.h | 1 + lib/libc/net/getaddrinfo.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/nsswitch.h b/include/nsswitch.h index f7131292dd78..2be7a59fd1b9 100644 --- a/include/nsswitch.h +++ b/include/nsswitch.h @@ -53,6 +53,7 @@ #define NS_NOTFOUND (1<<2) /* source responded 'no such entry' */ #define NS_TRYAGAIN (1<<3) /* source busy, may respond to retry */ #define NS_RETURN (1<<4) /* stop search, e.g. for ERANGE */ +#define NS_ADDRFAMILY (1<<5) /* no addr for fam, getaddrinfo only */ #define NS_TERMINATE (NS_SUCCESS|NS_RETURN) /* flags that end search */ #define NS_STATUSMASK 0x000000ff /* bitmask to get the status flags */ diff --git a/lib/libc/net/getaddrinfo.c b/lib/libc/net/getaddrinfo.c index a33f240bc376..7d8770b4f99f 100644 --- a/lib/libc/net/getaddrinfo.c +++ b/lib/libc/net/getaddrinfo.c @@ -1953,6 +1953,9 @@ explore_fqdn(const struct addrinfo *pai, const char *hostname, case NS_NOTFOUND: error = EAI_NONAME; goto free; + case NS_ADDRFAMILY: + error = EAI_ADDRFAMILY; + goto free; case NS_SUCCESS: error = 0; for (cur = result; cur; cur = cur->ai_next) { @@ -2341,7 +2344,9 @@ _dns_getaddrinfo(void *rv, void *cb_data, va_list ap) if (res_searchN(hostname, &q, res) < 0) { free(buf); free(buf2); - return NS_NOTFOUND; + if (res->res_h_errno == NO_DATA) + return (NS_ADDRFAMILY); + return (NS_NOTFOUND); } /* prefer IPv6 */ if (q.next) { @@ -2363,15 +2368,16 @@ _dns_getaddrinfo(void *rv, void *cb_data, va_list ap) if (sentinel.ai_next == NULL) switch (res->res_h_errno) { case HOST_NOT_FOUND: + return (NS_NOTFOUND); case NO_DATA: - return NS_NOTFOUND; + return (NS_ADDRFAMILY); case TRY_AGAIN: - return NS_TRYAGAIN; + return (NS_TRYAGAIN); default: - return NS_UNAVAIL; + return (NS_UNAVAIL); } *((struct addrinfo **)rv) = sentinel.ai_next; - return NS_SUCCESS; + return (NS_SUCCESS); } static void