From 07355f503a9b0a3ab7a051e2931499a4c5898b15 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Fri, 6 Jun 2014 19:20:07 +0200 Subject: accept trailing . and empty domain names trailing . should be accepted in domain name strings by convention (RFC 1034), host name lookup accepts "." but rejects empty "", res_* interfaces also accept empty name following existing practice. --- src/network/res_mkquery.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/network/res_mkquery.c') diff --git a/src/network/res_mkquery.c b/src/network/res_mkquery.c index 7c49709e..ec4568ac 100644 --- a/src/network/res_mkquery.c +++ b/src/network/res_mkquery.c @@ -10,13 +10,16 @@ int __res_mkquery(int op, const char *dname, int class, int type, int id, i, j; unsigned char q[280]; struct timespec ts; - size_t l = strnlen(dname, 254); + size_t l = strnlen(dname, 255); + int n; - if (l-1>=253 || buflen<18+l || op>15u || class>255u || type>255u) + if (l && dname[l-1]=='.') l--; + n = 17+l+!!l; + if (l>253 || buflen15u || class>255u || type>255u) return -1; /* Construct query template - ID will be filled later */ - memset(q, 0, 18+l); + memset(q, 0, n); q[2] = op*8 + 1; q[5] = 1; memcpy((char *)q+13, dname, l); @@ -34,8 +37,8 @@ int __res_mkquery(int op, const char *dname, int class, int type, q[0] = id/256; q[1] = id; - memcpy(buf, q, 18+l); - return 18+l; + memcpy(buf, q, n); + return n; } weak_alias(__res_mkquery, res_mkquery); -- cgit v1.2.1