From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS3215 2.6.0.0/16 X-Spam-Status: No, score=-4.2 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,NICE_REPLY_A, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (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) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 386501F8C6 for ; Thu, 15 Jul 2021 05:18:21 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 59B4F3AA7C83 for ; Thu, 15 Jul 2021 05:18:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 59B4F3AA7C83 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1626326300; bh=LnHhBmSc+azR/DVBxlGTIr4e+0NAYMJOcSi3hq+OgDE=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=yEjY+rkf/aU11EeN2lhZgM1GswY4X2253m4j7/+x/B/6Ryx1E2Jpi7kc0q5qiRcZT Ll5oezfLf1g0J/SrGSoc7zpCLckZN4aSKNWvdg+S6PkRCdsnBPWhqlLPohxqzkLI1J zw2srdWD0FKu00rNtfmNfuwcfST5AR+d8zVAG6vE= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id C6B7D39A28D1 for ; Thu, 15 Jul 2021 05:02:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C6B7D39A28D1 Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-344-h_gDLYxGNWS-grspkJHJAw-1; Thu, 15 Jul 2021 01:02:03 -0400 X-MC-Unique: h_gDLYxGNWS-grspkJHJAw-1 Received: by mail-qk1-f200.google.com with SMTP id r190-20020a375dc70000b02903acea04c19fso2895205qkb.8 for ; Wed, 14 Jul 2021 22:02:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=LnHhBmSc+azR/DVBxlGTIr4e+0NAYMJOcSi3hq+OgDE=; b=R0ILkvG/WpOb6W7mAlxX+1U8AtOtR8esO47HX0sV91sJHm1rhP6IYoypqETh4H0RHz xDGCeAS/soQpGg0yFUUyAfT6jYd8IzptgzYvMn0T9acy0vBHq1Buho0LyUtLx5jso2W4 Acyv2oEyufP5RH5GrIPCM4QQvHTHey7MlRNjan9k9EGfnYIY0TPdh5C1+zCYe0xcxpBs 6iLmJl7LqakPDfFVvcqb38niVf2YPd9+oGpx7ZGoWnwn4ddkd0UuTNxp3jti8IaGu+qp UklD7E5auxdogGrdrJNRhY7hPuKnxm9+ME9pJttThIrsG44MVsPD8lIHHS7RedMvfCow Wfug== X-Gm-Message-State: AOAM53088NWGXZoh2LJyWtxTyYQuie7x3mcug/RQUw3+bWkDqjytGdyr 3OEfLh9/FC4Gk1k/3htg09no4RhOGSHY5YXxVeRxlc7/DDOiZvKqDGN2fhd1itoSMA8HgQu+Nv5 X2VcHlViIa83cmvUN/LmUC7OFe67D5v2rIwGQJGrSvM9KXToeBwZhEA1Eng3lslkhRlm2Sw== X-Received: by 2002:a05:620a:4d5:: with SMTP id 21mr1931080qks.397.1626325322291; Wed, 14 Jul 2021 22:02:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwaLgpqCdEUT5TJYlRQB8itwT46YtEnh6FcFeFtpWcheHHAhotBV+PwcAzw06W53DmbGHeY/Q== X-Received: by 2002:a05:620a:4d5:: with SMTP id 21mr1931053qks.397.1626325322061; Wed, 14 Jul 2021 22:02:02 -0700 (PDT) Received: from [192.168.1.16] (198-84-214-74.cpe.teksavvy.com. [198.84.214.74]) by smtp.gmail.com with ESMTPSA id p197sm2080953qka.81.2021.07.14.22.02.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 14 Jul 2021 22:02:01 -0700 (PDT) Subject: Re: [PATCH 23/30] resolv: Move res_queriesmatch to its own file and into libc To: Florian Weimer , libc-alpha@sourceware.org References: Organization: Red Hat Message-ID: Date: Thu, 15 Jul 2021 01:02:00 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Carlos O'Donell via Libc-alpha Reply-To: Carlos O'Donell Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org Sender: "Libc-alpha" On 7/8/21 11:06 AM, Florian Weimer via Libc-alpha wrote: > And reformat it to GNU style. > > The treatment of this function matches res_nameinquery, for the > reasons stated there. OK for glibc 2.34. Tested without regression on x86_64 and i686. Reviewed-by: Carlos O'Donell Tested-by: Carlos O'Donell > --- > include/resolv.h | 3 +- > resolv/Makefile | 1 + > resolv/Versions | 1 + > resolv/res_queriesmatch.c | 129 +++++++++++++++++++++++++++++++++++++ > resolv/res_send.c | 65 ++----------------- > resolv/resolv-deprecated.c | 7 ++ > 6 files changed, 146 insertions(+), 60 deletions(-) > create mode 100644 resolv/res_queriesmatch.c > > diff --git a/include/resolv.h b/include/resolv.h > index 4d328fe914..3590b6f496 100644 > --- a/include/resolv.h > +++ b/include/resolv.h > @@ -54,7 +54,6 @@ libresolv_hidden_proto (__p_type) > libresolv_hidden_proto (__loc_ntoa) > libresolv_hidden_proto (__fp_nquery) > libresolv_hidden_proto (__fp_query) > -libresolv_hidden_proto (__res_queriesmatch) OK. > libresolv_hidden_proto (__b64_ntop) > libresolv_hidden_proto (__dn_count_labels) > > @@ -68,6 +67,8 @@ extern __typeof (res_hnok) __libc_res_hnok; > libc_hidden_proto (__libc_res_hnok) > extern __typeof (__res_nameinquery) __libc_res_nameinquery; > libc_hidden_proto (__libc_res_nameinquery) > +extern __typeof (__res_queriesmatch) __libc_res_queriesmatch; > +libc_hidden_proto (__libc_res_queriesmatch) OK. > > # endif /* _RESOLV_H_ && !_ISOMAC */ > #endif > diff --git a/resolv/Makefile b/resolv/Makefile > index c4c59dcac0..83ba39cb52 100644 > --- a/resolv/Makefile > +++ b/resolv/Makefile > @@ -53,6 +53,7 @@ routines := \ > res_init \ > res_libc \ > res_nameinquery \ > + res_queriesmatch \ OK. > res_randomid \ > resolv_conf \ > resolv_context \ > diff --git a/resolv/zs b/resolv/Versions > index f3482793dd..5bbda96230 100644 > --- a/resolv/Versions > +++ b/resolv/Versions > @@ -77,6 +77,7 @@ libc { > __libc_res_dnok; > __libc_res_hnok; > __libc_res_nameinquery; > + __libc_res_queriesmatch; OK. > __ns_name_compress; > __ns_name_ntop; > __ns_name_pack; > diff --git a/resolv/res_queriesmatch.c b/resolv/res_queriesmatch.c > new file mode 100644 > index 0000000000..4b56d33193 > --- /dev/null > +++ b/resolv/res_queriesmatch.c > @@ -0,0 +1,129 @@ > +/* Check if two DNS packets contain the same query. OK. > + Copyright (C) 2016-2021 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +/* > + * Copyright (c) 1985, 1989, 1993 > + * The Regents of the University of California. All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * 4. Neither the name of the University nor the names of its contributors > + * may be used to endorse or promote products derived from this software > + * without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > + * SUCH DAMAGE. > + */ > + > +/* > + * Portions Copyright (c) 1993 by Digital Equipment Corporation. > + * > + * Permission to use, copy, modify, and distribute this software for any > + * purpose with or without fee is hereby granted, provided that the above > + * copyright notice and this permission notice appear in all copies, and that > + * the name of Digital Equipment Corporation not be used in advertising or > + * publicity pertaining to distribution of the document or software without > + * specific, written prior permission. > + * > + * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL > + * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES > + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT > + * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL > + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR > + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS > + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS > + * SOFTWARE. > + */ > + > +/* > + * Portions Copyright (c) 1996-1999 by Internet Software Consortium. > + * > + * Permission to use, copy, modify, and distribute this software for any > + * purpose with or without fee is hereby granted, provided that the above > + * copyright notice and this permission notice appear in all copies. > + * > + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS > + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES > + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE > + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL > + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR > + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS > + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS > + * SOFTWARE. > + */ > + > +#include > + > +/* Author: paul vixie, 29may94. */ > +int > +__libc_res_queriesmatch (const unsigned char *buf1, const unsigned char *eom1, > + const unsigned char *buf2, const unsigned char *eom2) OK. > +{ > + if (eom1 - buf1 < HFIXEDSZ || eom2 - buf2 < HFIXEDSZ) > + return -1; OK. Rewrite. Looks correct. > + > + /* Only header section present in replies to dynamic update > + packets. */ > + if ((((HEADER *) buf1)->opcode == ns_o_update) && > + (((HEADER *) buf2)->opcode == ns_o_update)) > + return 1; OK. > + > + /* Note that we initially do not convert QDCOUNT to the host byte > + order. We can compare it with the second buffer's QDCOUNT > + value without doing this. */ > + int qdcount = ((HEADER *) buf1)->qdcount; > + if (qdcount != ((HEADER *) buf2)->qdcount) > + return 0; OK. > + > + qdcount = htons (qdcount); > + const unsigned char *cp = buf1 + HFIXEDSZ; OK. > + > + while (qdcount-- > 0) > + { > + char tname[MAXDNAME+1]; > + int n, ttype, tclass; > + > + n = __libc_dn_expand (buf1, eom1, cp, tname, sizeof tname); > + if (n < 0) > + return -1; > + cp += n; > + if (eom1 - cp < 4) > + return -1; OK. Rewrite and expand. Looks correct. > + NS_GET16 (ttype, cp); > + NS_GET16 (tclass, cp); > + if (!__libc_res_nameinquery (tname, ttype, tclass, buf2, eom2)) > + return 0; OK. > + } > + return 1; > +} > +libc_hidden_def (__libc_res_queriesmatch) > diff --git a/resolv/res_send.c b/resolv/res_send.c > index a5a33e6f3b..b502ef5132 100644 > --- a/resolv/res_send.c > +++ b/resolv/res_send.c > @@ -248,61 +248,6 @@ mask_ad_bit (struct resolv_context *ctx, void *buf) > ((HEADER *) buf)->ad = 0; > } > > -/* int > - * res_queriesmatch(buf1, eom1, buf2, eom2) > - * is there a 1:1 mapping of (name,type,class) > - * in (buf1,eom1) and (buf2,eom2)? > - * returns: > - * -1 : format error > - * 0 : not a 1:1 mapping > - * >0 : is a 1:1 mapping > - * author: > - * paul vixie, 29may94 > - */ > -int > -res_queriesmatch(const u_char *buf1, const u_char *eom1, > - const u_char *buf2, const u_char *eom2) > -{ > - if (buf1 + HFIXEDSZ > eom1 || buf2 + HFIXEDSZ > eom2) > - return (-1); > - > - /* > - * Only header section present in replies to > - * dynamic update packets. > - */ > - if ((((HEADER *)buf1)->opcode == ns_o_update) && > - (((HEADER *)buf2)->opcode == ns_o_update)) > - return (1); > - > - /* Note that we initially do not convert QDCOUNT to the host byte > - order. We can compare it with the second buffer's QDCOUNT > - value without doing this. */ > - int qdcount = ((HEADER*)buf1)->qdcount; > - if (qdcount != ((HEADER*)buf2)->qdcount) > - return (0); > - > - qdcount = htons (qdcount); > - const u_char *cp = buf1 + HFIXEDSZ; > - > - while (qdcount-- > 0) { > - char tname[MAXDNAME+1]; > - int n, ttype, tclass; > - > - n = __libc_dn_expand (buf1, eom1, cp, tname, sizeof tname); > - if (n < 0) > - return (-1); > - cp += n; > - if (cp + 2 * INT16SZ > eom1) > - return (-1); > - NS_GET16(ttype, cp); > - NS_GET16(tclass, cp); > - if (!__libc_res_nameinquery (tname, ttype, tclass, buf2, eom2)) > - return (0); > - } > - return (1); > -} > -libresolv_hidden_def (res_queriesmatch) > - OK. Remove. > int > __res_context_send (struct resolv_context *ctx, > const unsigned char *buf, int buflen, > @@ -1239,13 +1184,15 @@ send_dg(res_state statp, > int matching_query = 0; /* Default to no matching query. */ > if (!recvresp1 > && anhp->id == hp->id > - && res_queriesmatch (buf, buf + buflen, > - *thisansp, *thisansp + *thisanssizp)) > + && __libc_res_queriesmatch (buf, buf + buflen, > + *thisansp, > + *thisansp + *thisanssizp)) OK. > matching_query = 1; > if (!recvresp2 > && anhp->id == hp2->id > - && res_queriesmatch (buf2, buf2 + buflen2, > - *thisansp, *thisansp + *thisanssizp)) > + && __libc_res_queriesmatch (buf2, buf2 + buflen2, > + *thisansp, > + *thisansp + *thisanssizp)) OK. > matching_query = 2; > if (matching_query == 0) > /* Spurious UDP packet. Drop it and continue > diff --git a/resolv/resolv-deprecated.c b/resolv/resolv-deprecated.c > index 0fe9e4fda6..a2953db963 100644 > --- a/resolv/resolv-deprecated.c > +++ b/resolv/resolv-deprecated.c > @@ -47,3 +47,10 @@ res_nameinquery (const char *name, int type, int class, > { > return __libc_res_nameinquery (name, type, class, buf, eom); > } > + > +int > +res_queriesmatch (const unsigned char *buf1, const unsigned char *eom1, > + const unsigned char *buf2, const unsigned char *eom2) > +{ > + return __libc_res_queriesmatch (buf1, eom1, buf2, eom2); OK. Add forwarder. > +} > -- Cheers, Carlos.