From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12649 Path: news.gmane.org!.POSTED!not-for-mail From: William Pitcock Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH] resolv.conf parser: concatenate multiple search domain lines Date: Fri, 30 Mar 2018 10:51:59 +0000 Message-ID: <20180330105159.19583-1-nenolod@dereferenced.org> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org X-Trace: blaine.gmane.org 1522407058 15140 195.159.176.226 (30 Mar 2018 10:50:58 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 30 Mar 2018 10:50:58 +0000 (UTC) Cc: William Pitcock To: musl@lists.openwall.com Original-X-From: musl-return-12663-gllmg-musl=m.gmane.org@lists.openwall.com Fri Mar 30 12:50:54 2018 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1f1rcS-0003nh-R0 for gllmg-musl@m.gmane.org; Fri, 30 Mar 2018 12:50:53 +0200 Original-Received: (qmail 3093 invoked by uid 550); 30 Mar 2018 10:52:54 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 2032 invoked from network); 30 Mar 2018 10:52:53 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dereferenced-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=lMCyMVTG7QfevsPS0xo78seChE667rI6nvpnkQrwZ5c=; b=o6UXkhR60NAH50WctR9vrjYvrUr2WhLq1Lzx2XLvCMxQGrof/qyWJQvYsfaIkgntQC Qw0lR6+lyycg4x4XHJtEkCPFVlDyhqt9nYOmjh02iPDdyGnoQDKQsHXEtunoIhst4rI6 6a95zBTyEokw2+E2A+UcpPs7kD+vX1ubcCumm+k8TOTaCQ/Oc0u9ylzzGLYuTZlebnuz AEs7yI297demPUdNKdxIBdymnw/N8V5uYwzlz0nLpiRSU0lmGKEv+bCoeNB5CQcQEDBb Jf2gVL2lcRIPmXaxOqiiKdET6uLIc2FVaAbNPEnCBJtwoddx/9MPsTd0r8Rfs8Mzqm74 vaDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=lMCyMVTG7QfevsPS0xo78seChE667rI6nvpnkQrwZ5c=; b=QCevCvmVatVT8jSQI6hux9alDzPjmmRIcuoQgSEINhaQDnBCaWZt0tXm8D+JTPSkyQ F1uLUQ2tvZ+kVAL1WoOe/wxXbkOcDFVae1Dh/GsiPzoIHE0RV/WPCtKeifRQORxspPwh bUbJrt9LF9ZG0NRMgToWFBfI8YTruxbqjFxUhpJhEjk3we9naPvDEUhXZe6VUd2r0coQ y82hOzyhUnStB8tsz5Pz50Ve+RvxgTj7wHJuz2cmtWjrrEe3NpSG3eJ998fO5GLS6N9O 6mTse2aREBbpm/AZKVbV6gxL0kGgx6lK5nIVtpH6CZW478q+C6BqyW2qLEcax8IuGo7s gkjg== X-Gm-Message-State: AElRT7GIre9WkBg3ggWPs6xrxaPZbmK1AMdHKPxCYdFHW0QWP9OVI7wj xOQmHn1lEH6JeWEhfAQKp9X3bfgr X-Google-Smtp-Source: AIpwx49lL6oAEBMRk7kyzAKBPqpws3qMpW/W3RtnEsKeGU3bi3wwRzzYo58E1Vzl30z3jEAPOnVHew== X-Received: by 2002:a9d:2bf0:: with SMTP id u103-v6mr6806857ota.164.1522407161690; Fri, 30 Mar 2018 03:52:41 -0700 (PDT) X-Mailer: git-send-email 2.16.2 Xref: news.gmane.org gmane.linux.lib.musl.general:12649 Archived-At: Programs such as Docker and Kubernetes write multiple domain search lines, such as search serious-business.big-data.prod.foo.com search big-data.prod.foo.com search prod.foo.com instead of search serious-business.big-data.prod.foo.com big-data.prod.foo.com prod.foo.com Accordingly, we concatenate the namelist together so that the search path is not truncated. (Sorry, not sorry, for ruining the "omg Alpine sucks at DNS" talk at Kubecon) --- src/network/lookup_name.c | 2 +- src/network/resolvconf.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/network/lookup_name.c b/src/network/lookup_name.c index 209c20f0..c83c11c5 100644 --- a/src/network/lookup_name.c +++ b/src/network/lookup_name.c @@ -172,7 +172,7 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static static int name_from_dns_search(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family) { - char search[256]; + char search[2048]; struct resolvconf conf; size_t l, dots; char *p, *z; diff --git a/src/network/resolvconf.c b/src/network/resolvconf.c index 4c3e4c4b..72ed4082 100644 --- a/src/network/resolvconf.c +++ b/src/network/resolvconf.c @@ -9,6 +9,7 @@ int __get_resolv_conf(struct resolvconf *conf, char *search, size_t search_sz) { char line[256]; unsigned char _buf[256]; + char *search_base = search; FILE *f, _f; int nns = 0; @@ -74,9 +75,13 @@ int __get_resolv_conf(struct resolvconf *conf, char *search, size_t search_sz) continue; for (p=line+7; isspace(*p); p++); size_t l = strlen(p); + ptrdiff_t m = search - search_base; /* This can never happen anyway with chosen buffer sizes. */ - if (l >= search_sz) continue; + if (l + m >= search_sz) continue; memcpy(search, p, l+1); + /* We concatenate the search list as domain1 domain2\0 */ + search += l; + *search++ = ' '; } __fclose_ca(f); -- 2.16.2