From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id C72F23857810; Wed, 19 Jan 2022 07:55:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C72F23857810 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/cygwin-3_3-branch] Cygwin: resolver: Fix to match response ID with request ID X-Act-Checkin: newlib-cygwin X-Git-Author: Anton Lavrentiev via Cygwin-patches X-Git-Refname: refs/heads/cygwin-3_3-branch X-Git-Oldrev: b4ed35e2d75f9b4c0a77e26346e8647eaa739c6c X-Git-Newrev: 09f8c704f8bf7e2e806d90a22b8ab9e6cdd2d4a9 Message-Id: <20220119075512.C72F23857810@sourceware.org> Date: Wed, 19 Jan 2022 07:55:12 +0000 (GMT) X-BeenThere: cygwin-cvs@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component git logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Jan 2022 07:55:12 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D09f8c704f8b= f7e2e806d90a22b8ab9e6cdd2d4a9 commit 09f8c704f8bf7e2e806d90a22b8ab9e6cdd2d4a9 Author: Anton Lavrentiev via Cygwin-patches Date: Tue Jan 18 17:39:15 2022 -0500 Cygwin: resolver: Fix to match response ID with request ID =20 In case when the native OS resolver is used (via os_query) the returned response ID is always 0. It should actually match the ID passed in to res_send() in the DNS request header. This patch fixes that Diff: --- winsup/cygwin/libc/minires-os-if.c | 6 +++++- winsup/cygwin/libc/minires.c | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/libc/minires-os-if.c b/winsup/cygwin/libc/minire= s-os-if.c index a71c37414..1dac816eb 100644 --- a/winsup/cygwin/libc/minires-os-if.c +++ b/winsup/cygwin/libc/minires-os-if.c @@ -189,10 +189,14 @@ static int cygwin_query(res_state statp, const char *= DomName, int Class, int Ty DWORD section; int len, counts[4] =3D {0, 0, 0, 0}, debug =3D statp->options & RES_DEBU= G; unsigned char * dnptrs[256], * ptr; + unsigned short Id =3D 0; =20 dnptrs[0] =3D AnsPtr; dnptrs[1] =3D NULL; =20 + if (AnsLength >=3D 2) + memcpy(&Id, AnsPtr, 2); + memset(AnsPtr, 0, AnsLength); =20 if (Class !=3D ns_c_in) { @@ -294,7 +298,7 @@ static int cygwin_query(res_state statp, const char * D= omName, int Class, int Ty done: if (HFIXEDSZ <=3D AnsLength) { ptr =3D AnsPtr; - PUTSHORT(0, ptr); /* Id */ + PUTSHORT(Id, ptr); PUTSHORT((QR << 8) + RA + RD, ptr); for (section =3D 0; section < DIM(counts); section++) { PUTSHORT(counts[section], ptr); diff --git a/winsup/cygwin/libc/minires.c b/winsup/cygwin/libc/minires.c index 1f9da9461..eab71449f 100644 --- a/winsup/cygwin/libc/minires.c +++ b/winsup/cygwin/libc/minires.c @@ -448,6 +448,8 @@ int res_nsend( res_state statp, const unsigned char * M= sgPtr, ptr +=3D len; GETSHORT(Type, ptr); GETSHORT(Class, ptr); + if (AnsLength >=3D 2) + memcpy(AnsPtr, MsgPtr, 2); return ((os_query_t *) statp->os_query)(statp, DomName, Class, Type,= AnsPtr, AnsLength); } else { @@ -701,8 +703,11 @@ int res_nquery( res_state statp, const char * DomName,= int Class, int Type, statp->res_h_errno =3D NETDB_SUCCESS; =20 /* If a hook exists to a native implementation, use it */ - if (statp->os_query) + if (statp->os_query) { + if (AnsLength >=3D 2) + memset(AnsPtr, 0/*Id*/, 2); return ((os_query_t *) statp->os_query)(statp, DomName, Class, Type, A= nsPtr, AnsLength); + } =20 if ((len =3D res_nmkquery (statp, QUERY, DomName, Class, Type, 0, 0, 0, packet, PACKETSZ)) < 0)