From patchwork Tue Sep 5 16:05:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 810213 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-84191-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="o/VM7meT"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xms5t0Xbbz9ryk for ; Wed, 6 Sep 2017 02:06:25 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; q=dns; s=default; b=fx+whuXaL7QmW9EdFCXNBMQ7HFhMmWcxLAq2IQULKO9 4L0QmAuAl0nKR2oXwKdomvc17XuPF7h4N+wHWEu8oju4oiARvyNrX8no7m7rcr2c iiAGu0r1XSQURo7Eon1qKz9d7qbvtU/sB50ohGtu/nYlcIjNTltSXOBhoOt6c900 = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; s=default; bh=ompHDxv7UiGT45NLsoewRIWHarw=; b=o/VM7meTeSH1OhRSD foCzYXV0Cl5aSQVgPXQyJaad/LsJRiozW44eOx5LD8Cf8fBgnGNCC0fY/zgxlWZ8 IIKT4zOodSFX6q+7Rq8v0rmmpUFL7apDXK6iZCJ6Mjw8yZGXx0Izo5bamtKr8L8J q2POE1W18WfpBmFTSlC9nMdVBE= Received: (qmail 117717 invoked by alias); 5 Sep 2017 16:06:17 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 117650 invoked by uid 89); 5 Sep 2017 16:06:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy=canon X-HELO: smtpo.poczta.interia.pl X-Interia-R: Interia X-Interia-R-IP: 89.64.33.181 X-Interia-R-Helo: From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: libc-alpha@sourceware.org Cc: =?utf-8?q?=C5=81ukasz_Stelmach?= Subject: [RFC][PATCH 1/4][BZ 17083] getaddrinfo: Add comments for #else and #endif directives Date: Tue, 5 Sep 2017 18:05:27 +0200 Message-Id: <20170905160530.19525-2-stlman@poczta.fm> In-Reply-To: <20170905160530.19525-1-stlman@poczta.fm> References: <20170905160530.19525-1-stlman@poczta.fm> MIME-Version: 1.0 X-Interia-Antivirus: OK X-IPL-POID: 4 X-IPL-SAS-SPAS: -0.6 X-IPL-SAS-UREP: 0 X-IPL-SAS-UREP-PRIV: 0 X-IPL-Envelope-To: stlman@poczta.fm Add comments after #else and #endif directives to help matching them with appropriate #ifdef lines. Fix a typo in a comment block. Signed-off-by: Łukasz Stelmach --- sysdeps/posix/getaddrinfo.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index ce099bdf9c..4b4e192e89 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -90,7 +90,7 @@ extern int __idna_to_ascii_lz (const char *input, char **output, int flags); extern int __idna_to_unicode_lzlz (const char *input, char **output, int flags); # include -#endif +#endif /* HAVE_LIBIDN */ struct gaih_service { @@ -129,14 +129,14 @@ static const struct gaih_typeproto gaih_inet_typeproto[] = { SOCK_DGRAM, IPPROTO_UDP, 0, true, "udp" }, #if defined SOCK_DCCP && defined IPPROTO_DCCP { SOCK_DCCP, IPPROTO_DCCP, 0, false, "dccp" }, -#endif +#endif /* SOCK_DCCP && IPPROTO_DCCP */ #ifdef IPPROTO_UDPLITE { SOCK_DGRAM, IPPROTO_UDPLITE, 0, false, "udplite" }, -#endif +#endif /* IPPROTO_UDPLITE */ #ifdef IPPROTO_SCTP { SOCK_STREAM, IPPROTO_SCTP, 0, false, "sctp" }, { SOCK_SEQPACKET, IPPROTO_SCTP, 0, false, "sctp" }, -#endif +#endif /* IPPROTO_SCTP */ { SOCK_RAW, 0, GAI_PROTO_PROTOANY|GAI_PROTO_NOSERVICE, true, "raw" }, { 0, 0, 0, false, "" } }; @@ -505,7 +505,7 @@ gaih_inet (const char *name, const struct gaih_service *service, malloc_name = true; } } -#endif +#endif /* HAVE_LIBIDN */ if (__inet_aton (name, (struct in_addr *) at->addr) != 0) { @@ -753,7 +753,7 @@ gaih_inet (const char *name, const struct gaih_service *service, goto free_and_return; } } -#endif +#endif /* USE_NSCD */ if (__nss_hosts_database == NULL) no_more = __nss_database_lookup ("hosts", NULL, @@ -1060,11 +1060,11 @@ gaih_inet (const char *name, const struct gaih_service *service, canon = out; } else -#endif +#endif /* HAVE_LIBIDN */ { #ifdef HAVE_LIBIDN make_copy: -#endif +#endif /* HAVE_LIBIDN */ if (canonbuf != NULL) /* We already allocated the string using malloc, but the buffer is now owned by canon. */ @@ -1193,9 +1193,9 @@ struct sort_result_combo #if __BYTE_ORDER == __BIG_ENDIAN # define htonl_c(n) n -#else +#else /* __BYTE_ORDER == __BIG_ENDIAN */ # define htonl_c(n) __bswap_constant_32 (n) -#endif +#endif /* __BYTE_ORDER == __BIG_ENDIAN */ static const struct scopeentry { @@ -1297,7 +1297,7 @@ static const struct prefixentry default_labels[] = }, 96, 4 }, /* The next two entries differ from RFC 3484. We need to treat IPv6 site-local addresses special because they are never NATed, - unlike site-locale IPv4 addresses. If this would not happen, on + unlike site-local IPv4 addresses. If this would not happen, on machines which have only IPv4 and IPv6 site-local addresses, the sorting would prefer the IPv6 site-local addresses, causing unnecessary delays when trying to connect to a global IPv6 address @@ -1715,7 +1715,7 @@ check_gaiconf_mtime (const struct stat64 *st) && st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec); } -#else +#else /* _STATBUF_ST_NSEC */ static time_t gaiconf_mtime; @@ -1731,7 +1731,7 @@ check_gaiconf_mtime (const struct stat64 *st) return st->st_mtime == gaiconf_mtime; } -#endif +#endif /* _STATBUF_ST_NSEC */ libc_freeres_fn(fini) @@ -2228,7 +2228,7 @@ getaddrinfo (const char *name, const char *service, #ifdef HAVE_LIBIDN |AI_IDN|AI_CANONIDN|AI_IDN_ALLOW_UNASSIGNED |AI_IDN_USE_STD3_ASCII_RULES -#endif +#endif /* HAVE_LIBIDN */ |AI_NUMERICSERV|AI_ALL)) return EAI_BADFLAGS; From patchwork Tue Sep 5 16:05:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 810214 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-84192-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="mtaSXjI9"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xms630JZPz9ryk for ; Wed, 6 Sep 2017 02:06:34 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; q=dns; s=default; b=Id6Civnfgzhd1e+6ElCpMansZPv7XwVRb5tpRqAzKDb T9xGC2SqNy7eWLT/gqWWjc6xbqm2YKqucl3z39k1HpNeFlzZATBemubQwvkEOA9R P/+zo0CFTr7IlcOUU2zAC2UpNyEI4iLVFBkoukGrRKEzxqRdqJxOMLVxZtjZkcL0 = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; s=default; bh=F/6Pl2vdltD/sf5aaZ+mXC5WOTA=; b=mtaSXjI9Py9RzPtHZ eh/SOy+N8rQfZaQOx3dnGsup8jhxXu1NdCPH/Egqw14PhchI4JZDvzFKcCWtExd1 Te/0fvKEEjub3JQr+j7LQmib4wCfY50d5HbQ91NCvQzn7VYbJi+xBEOQn/B9vGlB muVZGfAeNR6CsSKUx3cEivwY8A= Received: (qmail 117912 invoked by alias); 5 Sep 2017 16:06:18 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 117847 invoked by uid 89); 5 Sep 2017 16:06:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy=1727 X-HELO: smtpo.poczta.interia.pl X-Interia-R: Interia X-Interia-R-IP: 89.64.33.181 X-Interia-R-Helo: From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: libc-alpha@sourceware.org Cc: =?utf-8?q?=C5=81ukasz_Stelmach?= Subject: [RFC][PATCH 2/4][BZ 17083] NSS: Parse zone identifier of IPv6 addresses in /etc/hosts Date: Tue, 5 Sep 2017 18:05:28 +0200 Message-Id: <20170905160530.19525-3-stlman@poczta.fm> In-Reply-To: <20170905160530.19525-1-stlman@poczta.fm> References: <20170905160530.19525-1-stlman@poczta.fm> MIME-Version: 1.0 X-Interia-Antivirus: OK X-IPL-POID: 4 X-IPL-SAS-SPAS: -0.6 X-IPL-SAS-UREP: 0 X-IPL-SAS-UREP-PRIV: 0 X-IPL-Envelope-To: stlman@poczta.fm Parse link-local IPv6 addresses in /etc/hosts, which contain zone identifiers as described in RFC 4007. Signed-off-by: Łukasz Stelmach --- nss/nss_files/files-hosts.c | 54 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c index bccb6a5780..28eb73fb2d 100644 --- a/nss/nss_files/files-hosts.c +++ b/nss/nss_files/files-hosts.c @@ -33,8 +33,8 @@ #define DATABASE "hosts" #define NEED_H_ERRNO -#define EXTRA_ARGS , af, flags -#define EXTRA_ARGS_DECL , int af, int flags +#define EXTRA_ARGS , af, flags, in6_zone_id +#define EXTRA_ARGS_DECL , int af, int flags, uint32_t *in6_zone_id #define ENTDATA hostent_data struct hostent_data @@ -53,6 +53,9 @@ LINE_PARSER STRING_FIELD (addr, isspace, 1); + if (in6_zone_id != NULL) + *in6_zone_id = 0; + /* Parse address. */ if (inet_pton (af == AF_UNSPEC ? AF_INET : af, addr, entdata->host_addr) > 0) @@ -80,6 +83,40 @@ LINE_PARSER else if (af == AF_UNSPEC && inet_pton (AF_INET6, addr, entdata->host_addr) > 0) af = AF_INET6; + else if (strchr(addr, SCOPE_DELIMITER) != NULL) + { + /* Parse a zone identifier RFC 4007 11. */ + struct addrinfo hints; + struct addrinfo *res; + struct sockaddr_in6 *sa; + int ret; + + /* Only IPv6 link-local addresses can have zone identifiers. */ + af = AF_INET6; + + memset(&hints, 0, sizeof(struct addrinfo)); + /* Don't perform any lookups. */ + hints.ai_flags = AI_NUMERICHOST; + hints.ai_family = AF_INET6; + + ret = getaddrinfo(addr, NULL, &hints, &res); + if (ret != 0) + return 0; + + sa = (struct sockaddr_in6*)res->ai_addr; + + /* Zone identifiers makes sense only for link-local addresses. */ + if (!IN6_IS_ADDR_LINKLOCAL(sa->sin6_addr.s6_addr)) { + freeaddrinfo(res); + return 0; + } + + if (in6_zone_id != NULL) + *in6_zone_id = sa->sin6_scope_id; + + memcpy(entdata->host_addr, &sa->sin6_addr, IN6ADDRSZ); + freeaddrinfo(res); + } else /* Illegal address: ignore line. */ return 0; @@ -99,14 +136,14 @@ LINE_PARSER #define EXTRA_ARGS_VALUE \ , (res_use_inet6 () ? AF_INET6 : AF_INET), \ - (res_use_inet6 () ? AI_V4MAPPED : 0) + (res_use_inet6 () ? AI_V4MAPPED : 0), NULL #include "files-XXX.c" #undef EXTRA_ARGS_VALUE /* We only need to consider IPv4 mapped addresses if the input to the gethostbyaddr() function is an IPv6 address. */ #define EXTRA_ARGS_VALUE \ - , af, (len == IN6ADDRSZ ? AI_V4MAPPED : 0) + , af, (len == IN6ADDRSZ ? AI_V4MAPPED : 0), NULL DB_LOOKUP (hostbyaddr, ,,, { if (result->h_length == (int) len @@ -135,7 +172,7 @@ _nss_files_gethostbyname3_r (const char *name, int af, struct hostent *result, int flags = (res_use_inet6 () ? AI_V4MAPPED : 0); while ((status = internal_getent (stream, result, buffer, buflen, errnop, - herrnop, af, flags)) + herrnop, af, flags, NULL)) == NSS_STATUS_SUCCESS) { LOOKUP_NAME_CASE (h_name, h_aliases) @@ -163,7 +200,7 @@ _nss_files_gethostbyname3_r (const char *name, int af, struct hostent *result, again: while ((status = internal_getent (stream, &tmp_result_buf, tmp_buffer, tmp_buflen, errnop, herrnop, af, - flags)) + flags, NULL)) == NSS_STATUS_SUCCESS) { int matches = 1; @@ -385,12 +422,13 @@ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, /* Align the buffer for the next record. */ uintptr_t pad = (-(uintptr_t) buffer % __alignof__ (struct hostent_data)); + uint32_t in6_zone_id = 0; buffer += pad; buflen = buflen > pad ? buflen - pad : 0; struct hostent result; status = internal_getent (stream, &result, buffer, buflen, errnop, - herrnop, AF_UNSPEC, 0); + herrnop, AF_UNSPEC, 0, &in6_zone_id); if (status != NSS_STATUS_SUCCESS) break; @@ -448,7 +486,7 @@ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, got_canon = true; (*pat)->family = result.h_addrtype; memcpy ((*pat)->addr, result.h_addr_list[0], result.h_length); - (*pat)->scopeid = 0; + (*pat)->scopeid = in6_zone_id; pat = &((*pat)->next); From patchwork Tue Sep 5 16:05:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 810216 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-84194-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="kjgi/jUh"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xms6N2Wq3z9ryk for ; Wed, 6 Sep 2017 02:06:52 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; q=dns; s=default; b=ei51AYKVQqOcLtLhWzpLwpo4MUkSTMxvt0oO+vGX8DO dObI6+Fj8Tppzt64O1ke2cI0W16EOCz0kXL1fjEiEaCk90Jn0OnSMoxMvPJ0ctvH gIsJhGBCduba2773URqoiTP1M3daD8/L8a8EteUcZtNQ7IVUpZIGnwbQ76037f00 = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; s=default; bh=ojimxtpv1GGVbbROBH5aKgT9Isg=; b=kjgi/jUhK0EgAK2mE yrGXd6xuBAblVhBaoGDQXtmJztf8iMpjW5hw6ozI1x2BUJBuvzTu+tCMFFArdZXX PbrJ49WaKjRRApgZAZiwYXrKtmEDewSYGxbeihPhxiBmQ91tpYF0FxiVvYYy61Ko hsBUqoxplaRk39liQaEet8ClqM= Received: (qmail 118266 invoked by alias); 5 Sep 2017 16:06:20 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 118214 invoked by uid 89); 5 Sep 2017 16:06:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy=t_a, T_A X-HELO: smtpo.poczta.interia.pl X-Interia-R: Interia X-Interia-R-IP: 89.64.33.181 X-Interia-R-Helo: From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: libc-alpha@sourceware.org Cc: =?utf-8?q?=C5=81ukasz_Stelmach?= Subject: [RFC][PATCH 3/4][BZ 17083] NSS: Introduce gethostbyname5_r function Date: Tue, 5 Sep 2017 18:05:29 +0200 Message-Id: <20170905160530.19525-4-stlman@poczta.fm> In-Reply-To: <20170905160530.19525-1-stlman@poczta.fm> References: <20170905160530.19525-1-stlman@poczta.fm> MIME-Version: 1.0 X-Interia-Antivirus: OK X-IPL-POID: 4 X-IPL-SAS-SPAS: -0.6 X-IPL-SAS-UREP: 0 X-IPL-SAS-UREP-PRIV: 0 X-IPL-Envelope-To: stlman@poczta.fm Add af (address family) to the list of arguments of gethostbyname4_r function in files, dns, nis and nisplus module and rename the function to gethostbyname5_r. Pass the af value to the underlying parsing functions. Define gethostbyname4_r as a wrapper for the former passing af set to AF_UNSPEC. Signed-off-by: Łukasz Stelmach --- nis/Versions | 3 ++- nis/nss_nis/nis-hosts.c | 13 +++++++++++-- nis/nss_nisplus/nisplus-hosts.c | 13 +++++++++++-- nss/Versions | 1 + nss/nss_files/files-hosts.c | 13 +++++++++++-- resolv/Versions | 2 +- resolv/nss_dns/dns-host.c | 32 ++++++++++++++++++++++++++++++-- 7 files changed, 67 insertions(+), 10 deletions(-) diff --git a/nis/Versions b/nis/Versions index ef9a512417..537f0aa3c0 100644 --- a/nis/Versions +++ b/nis/Versions @@ -96,6 +96,7 @@ libnss_nis { _nss_nis_setnetgrent; _nss_nis_setprotoent; _nss_nis_setpwent; _nss_nis_setrpcent; _nss_nis_setservent; _nss_nis_setspent; _nss_nis_initgroups_dyn; _nss_nis_gethostbyname4_r; + _nss_nis_gethostbyname5_r; } } @@ -126,6 +127,6 @@ libnss_nisplus { _nss_nisplus_setnetent; _nss_nisplus_setnetgrent; _nss_nisplus_setprotoent; _nss_nisplus_setpwent; _nss_nisplus_setrpcent; _nss_nisplus_setservent; _nss_nisplus_setspent; _nss_nisplus_initgroups_dyn; - _nss_nisplus_gethostbyname4_r; + _nss_nisplus_gethostbyname4_r; _nss_nisplus_gethostbyname5_r; } } diff --git a/nis/nss_nis/nis-hosts.c b/nis/nss_nis/nis-hosts.c index f64dbdaecb..3a156aa7ee 100644 --- a/nis/nss_nis/nis-hosts.c +++ b/nis/nss_nis/nis-hosts.c @@ -454,7 +454,7 @@ _nss_nis_gethostbyaddr_r (const void *addr, socklen_t addrlen, int af, enum nss_status -_nss_nis_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, +_nss_nis_gethostbyname5_r (const char *name, int af, struct gaih_addrtuple **pat, char *buffer, size_t buflen, int *errnop, int *herrnop, int32_t *ttlp) { @@ -530,7 +530,7 @@ _nss_nis_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, buflen -= pad; struct hostent host; - int parse_res = parse_line (result, &host, data, buflen, errnop, AF_UNSPEC, + int parse_res = parse_line (result, &host, data, buflen, errnop, af, 0); if (__glibc_unlikely (parse_res < 1)) { @@ -565,3 +565,12 @@ _nss_nis_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, return NSS_STATUS_SUCCESS; } + +enum nss_status +_nss_nis_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, + char *buffer, size_t buflen, int *errnop, + int *herrnop, int32_t *ttlp) +{ + return _nss_nis_gethostbyname5_r (name, AF_UNSPEC, pat, buffer, buflen, + errnop, herrnop, ttlp); +} diff --git a/nis/nss_nisplus/nisplus-hosts.c b/nis/nss_nisplus/nisplus-hosts.c index 31dfd31fbd..d9c5d7a974 100644 --- a/nis/nss_nisplus/nisplus-hosts.c +++ b/nis/nss_nisplus/nisplus-hosts.c @@ -579,13 +579,13 @@ _nss_nisplus_gethostbyaddr_r (const void *addr, socklen_t addrlen, int af, enum nss_status -_nss_nisplus_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, +_nss_nisplus_gethostbyname5_r (const char *name, int af, struct gaih_addrtuple **pat, char *buffer, size_t buflen, int *errnop, int *herrnop, int32_t *ttlp) { struct hostent host; - enum nss_status status = internal_gethostbyname2_r (name, AF_UNSPEC, &host, + enum nss_status status = internal_gethostbyname2_r (name, af, &host, buffer, buflen, errnop, herrnop, 0); if (__glibc_likely (status == NSS_STATUS_SUCCESS)) @@ -617,3 +617,12 @@ _nss_nisplus_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, return status; } + +enum nss_status +_nss_nisplus_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, + char *buffer, size_t buflen, int *errnop, + int *herrnop, int32_t *ttlp) +{ + return _nss_nisplus_gethostbyname5_r (name, AF_UNSPEC, pat, buffer, + buflen, errnop, herrnop, ttlp); +} diff --git a/nss/Versions b/nss/Versions index 50268ed9b5..72adf4c806 100644 --- a/nss/Versions +++ b/nss/Versions @@ -44,6 +44,7 @@ libnss_files { _nss_files_gethostbyname2_r; _nss_files_gethostbyname3_r; _nss_files_gethostbyname4_r; + _nss_files_gethostbyname5_r; _nss_files_gethostbyname_r; _nss_files_gethostent_r; diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c index 28eb73fb2d..c6067cc641 100644 --- a/nss/nss_files/files-hosts.c +++ b/nss/nss_files/files-hosts.c @@ -404,7 +404,7 @@ _nss_files_gethostbyname2_r (const char *name, int af, struct hostent *result, } enum nss_status -_nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, +_nss_files_gethostbyname5_r (const char *name, int af, struct gaih_addrtuple **pat, char *buffer, size_t buflen, int *errnop, int *herrnop, int32_t *ttlp) { @@ -428,7 +428,7 @@ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, struct hostent result; status = internal_getent (stream, &result, buffer, buflen, errnop, - herrnop, AF_UNSPEC, 0, &in6_zone_id); + herrnop, af, 0, &in6_zone_id); if (status != NSS_STATUS_SUCCESS) break; @@ -518,3 +518,12 @@ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, return status; } + +enum nss_status +_nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, + char *buffer, size_t buflen, int *errnop, + int *herrnop, int32_t *ttlp) +{ + return _nss_files_gethostbyname5_r (name, AF_UNSPEC, pat, buffer, buflen, + errnop, herrnop, ttlp); +} diff --git a/resolv/Versions b/resolv/Versions index b05778d965..2ae1048908 100644 --- a/resolv/Versions +++ b/resolv/Versions @@ -96,7 +96,7 @@ libnss_dns { _nss_dns_gethostbyname_r; _nss_dns_getnetbyaddr_r; _nss_dns_getnetbyname_r; _nss_dns_getcanonname_r; _nss_dns_gethostbyaddr2_r; - _nss_dns_gethostbyname4_r; + _nss_dns_gethostbyname4_r; _nss_dns_gethostbyname5_r; } } diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c index 7cd54ab504..dddb8f4bef 100644 --- a/resolv/nss_dns/dns-host.c +++ b/resolv/nss_dns/dns-host.c @@ -308,7 +308,7 @@ _nss_dns_gethostbyname_r (const char *name, struct hostent *result, enum nss_status -_nss_dns_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, +_nss_dns_gethostbyname5_r (const char *name, int af, struct gaih_addrtuple **pat, char *buffer, size_t buflen, int *errnop, int *herrnop, int32_t *ttlp) { @@ -344,10 +344,28 @@ _nss_dns_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, int nans2p = 0; int resplen2 = 0; int ans2p_malloced = 0; + int type; int olderr = errno; enum nss_status status; - int n = __res_context_search (ctx, name, C_IN, T_QUERY_A_AND_AAAA, + + switch (af) { + case AF_UNSPEC: + type = T_QUERY_A_AND_AAAA; + break; + case AF_INET: + type = T_A; + break; + case AF_INET6: + type = T_AAAA; + break; + default: + *herrnop = NO_DATA; + *errnop = EAFNOSUPPORT; + return NSS_STATUS_UNAVAIL; + } + + int n = __res_context_search (ctx, name, C_IN, type, host_buffer.buf->buf, 2048, &host_buffer.ptr, &ans2p, &nans2p, &resplen2, &ans2p_malloced); if (n >= 0) @@ -397,6 +415,16 @@ _nss_dns_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, } +enum nss_status +_nss_dns_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, + char *buffer, size_t buflen, int *errnop, + int *herrnop, int32_t *ttlp) +{ + return _nss_dns_gethostbyname5_r (name, AF_UNSPEC, pat, buffer, buflen, + errnop, herrnop,ttlp); +} + + extern enum nss_status _nss_dns_gethostbyaddr2_r (const void *addr, socklen_t len, int af, struct hostent *result, From patchwork Tue Sep 5 16:05:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 810215 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-84193-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="f5XSvK7H"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xms6D3HWBz9t16 for ; Wed, 6 Sep 2017 02:06:44 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; q=dns; s=default; b=g2xQKDAYdCLOx5sh1QpNzFlQNI3CrcT6P38fcvionow cncQ4pWi2aESfYdx1g7NU/ZIlAVV7kQkDXSomSUcPSKaa3E/FPxslAt8T70Pvjz0 yIJ+DRkibQ9NMhoxhHEbnwPXudeE/KRh2dBGvqoBHKWWRvdQOYyEA6LoKS2xqcCY = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; s=default; bh=4aDEJy7oChnVIM4x8f6y43UIyTI=; b=f5XSvK7HbjoQiXnJQ x6Vmw+esDetIA1lhvE3cK4Ed7kEXKrTBluYvX8oBwjmcfaUa7gz08B8ehatIRz46 UIo8kvDcVM86p+NvO9jigOzME1I54QpfSaBCVgNWGaCBApW/YPfnp+NdDUTCkP/9 VLHAnHW2G4CBNBptbok6XfWLMk= Received: (qmail 118119 invoked by alias); 5 Sep 2017 16:06:19 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 118097 invoked by uid 89); 5 Sep 2017 16:06:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.2 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy=AAAA, Hx-languages-length:1898, aaaa, HContent-Transfer-Encoding:8bit X-HELO: smtpo.poczta.interia.pl X-Interia-R: Interia X-Interia-R-IP: 89.64.33.181 X-Interia-R-Helo: From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: libc-alpha@sourceware.org Cc: =?utf-8?q?=C5=81ukasz_Stelmach?= Subject: [RFC][PATCH 4/4][BZ 17083] getaddrinfo: Use the new getaddrinfo5_r NSS function Date: Tue, 5 Sep 2017 18:05:30 +0200 Message-Id: <20170905160530.19525-5-stlman@poczta.fm> In-Reply-To: <20170905160530.19525-1-stlman@poczta.fm> References: <20170905160530.19525-1-stlman@poczta.fm> MIME-Version: 1.0 X-Interia-Antivirus: OK X-IPL-POID: 4 X-IPL-SAS-SPAS: -0.6 X-IPL-SAS-UREP: 0 X-IPL-SAS-UREP-PRIV: 0 X-IPL-Envelope-To: stlman@poczta.fm Signed-off-by: Łukasz Stelmach --- sysdeps/posix/getaddrinfo.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 4b4e192e89..38e231091a 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -302,6 +302,10 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req, } +typedef enum nss_status (*nss_gethostbyname5_r) + (const char *name, int af, struct gaih_addrtuple **pat, + char *buffer, size_t buflen, int *errnop, + int *h_errnop, int32_t *ttlp); typedef enum nss_status (*nss_gethostbyname4_r) (const char *name, struct gaih_addrtuple **pat, char *buffer, size_t buflen, int *errnop, @@ -777,19 +781,27 @@ gaih_inet (const char *name, const struct gaih_service *service, no_data = 0; nss_gethostbyname4_r fct4 = NULL; + /* gethostbyname5_r accepts af argument and returns + gaih_addrtupple. What more do we need? */ + nss_gethostbyname5_r fct5 = __nss_lookup_function (nip, "gethostbyname5_r"); /* gethostbyname4_r sends out parallel A and AAAA queries and is thus only suitable for PF_UNSPEC. */ - if (req->ai_family == PF_UNSPEC) + if (req->ai_family == PF_UNSPEC && fct5 == NULL) fct4 = __nss_lookup_function (nip, "gethostbyname4_r"); - - if (fct4 != NULL) + if (fct5 != NULL || fct4 != NULL) { while (1) { - status = DL_CALL_FCT (fct4, (name, pat, - tmpbuf->data, tmpbuf->length, - &errno, &h_errno, - NULL)); + if (fct5 != NULL) + status = DL_CALL_FCT (fct5, (name, req->ai_family, pat, + tmpbuf->data, tmpbuf->length, + &errno, &h_errno, + NULL)); + else + status = DL_CALL_FCT (fct4, (name, pat, + tmpbuf->data, tmpbuf->length, + &errno, &h_errno, + NULL)); if (status == NSS_STATUS_SUCCESS) break; if (status != NSS_STATUS_TRYAGAIN