From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/11300 Path: news.gmane.org!.POSTED!not-for-mail From: Stefan Sedich Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH v3] Add RES_OPTIONS support for resolv.conf options overriding Date: Tue, 25 Apr 2017 12:45:57 -0700 Message-ID: <20170425194557.8520-1-stefan.sedich@gmail.com> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org X-Trace: blaine.gmane.org 1493149583 9614 195.159.176.226 (25 Apr 2017 19:46:23 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 25 Apr 2017 19:46:23 +0000 (UTC) Cc: Stefan Sedich To: musl@lists.openwall.com Original-X-From: musl-return-11315-gllmg-musl=m.gmane.org@lists.openwall.com Tue Apr 25 21:46:20 2017 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 1d36Pj-0002Ot-M2 for gllmg-musl@m.gmane.org; Tue, 25 Apr 2017 21:46:19 +0200 Original-Received: (qmail 16210 invoked by uid 550); 25 Apr 2017 19:46:23 -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 16179 invoked from network); 25 Apr 2017 19:46:22 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=VpminKhO2pRHV8niXm00VseAbbM7Th+C+rG0/DBPGwQ=; b=Wu7pvFraLx0nLe7jTg6OaczcXPzl31RsKorr+MVxLHT2vRGCNlfoJyuZ8Uk2rtTQ1S mSI3fMdnMK8AS2FhOC4+4zLC7MH0Jr3wPx5rBPncnbCm90QKrWONI4YRp4eY6yETTmMt 8H35T2YWjcLb+RlUwQ9th3oUVx/p90jPNxt/v2o1YvAnj0+V/ZtlScwkOmvlmxaGiIWt dKQJq2WiN/YU00bVf7eGdfppJv6HiAA1EVlGFdw+dHKISZ+2jTtdprpt5kM3Z+aEbxdn pBPnu7YyHBDPnX/c9QdKYlsinFLEHxibuX5KQhoPu2m5WT72QG0WkMz9bLQuMdv+tYb1 UCWA== 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=VpminKhO2pRHV8niXm00VseAbbM7Th+C+rG0/DBPGwQ=; b=mZUZMEsENwK3x0gUPqupkIyU7SCpg0tSM6pcufQAhG2/58NMx8rRpEK+diVP3kz+SO 0YWu1qs4UF+Mmhj832M4iFw+DbeS+ETz13M7zFtHyXlnNQdgbKXOy3LVPfgPcsTnOhoQ N4ZzJHcpygkLJs6Fs98WmQXbEFe0AghTopFtZA5dq5+8sxZ7gfyfSYxY8VVAIdvOEESy U2d2KE30oZ+VvK4bQOuj1iImoQdCHUU0DGGoP/KM4/EPOu+1+UbBj/USp3sQ+qyfPrwZ Tl58FDvwLjm9GGs/jVVlfhfKNeOu9e98SmIfPZvfCi4/u0UMW9b8a8H06+MOIg4H1ATE +s1w== X-Gm-Message-State: AN3rC/7Dx006CR4VC69gVd0FEchj6U+qY6OLB21+on9ubbndmnHXJjyg 9sH4jTMA+snzQA== X-Received: by 10.84.175.67 with SMTP id s61mr2162687plb.43.1493149570336; Tue, 25 Apr 2017 12:46:10 -0700 (PDT) X-Mailer: git-send-email 2.11.0 Xref: news.gmane.org gmane.linux.lib.musl.general:11300 Archived-At: Currently glibc supports using the RES_OPTIONS environment variable to customize the resolv.conf options on a per-process basis, this adds the same support to musl --- Changes in v3: - initialize res_opts_env src/network/resolvconf.c | 49 ++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src/network/resolvconf.c b/src/network/resolvconf.c index 4c3e4c4b..177c6877 100644 --- a/src/network/resolvconf.c +++ b/src/network/resolvconf.c @@ -5,6 +5,30 @@ #include #include +void __parse_resolv_opts(struct resolvconf *conf, char *opts) +{ + char *p, *z; + + p = strstr(opts, "ndots:"); + if (p && isdigit(p[6])) { + p += 6; + unsigned long x = strtoul(p, &z, 10); + if (z != p) conf->ndots = x > 15 ? 15 : x; + } + p = strstr(opts, "attempts:"); + if (p && isdigit(p[9])) { + p += 9; + unsigned long x = strtoul(p, &z, 10); + if (z != p) conf->attempts = x > 10 ? 10 : x; + } + p = strstr(opts, "timeout:"); + if (p && (isdigit(p[8]) || p[8]=='.')) { + p += 8; + unsigned long x = strtoul(p, &z, 10); + if (z != p) conf->timeout = x > 60 ? 60 : x; + } +} + int __get_resolv_conf(struct resolvconf *conf, char *search, size_t search_sz) { char line[256]; @@ -38,24 +62,7 @@ int __get_resolv_conf(struct resolvconf *conf, char *search, size_t search_sz) continue; } if (!strncmp(line, "options", 7) && isspace(line[7])) { - p = strstr(line, "ndots:"); - if (p && isdigit(p[6])) { - p += 6; - unsigned long x = strtoul(p, &z, 10); - if (z != p) conf->ndots = x > 15 ? 15 : x; - } - p = strstr(line, "attempts:"); - if (p && isdigit(p[9])) { - p += 9; - unsigned long x = strtoul(p, &z, 10); - if (z != p) conf->attempts = x > 10 ? 10 : x; - } - p = strstr(line, "timeout:"); - if (p && (isdigit(p[8]) || p[8]=='.')) { - p += 8; - unsigned long x = strtoul(p, &z, 10); - if (z != p) conf->timeout = x > 60 ? 60 : x; - } + __parse_resolv_opts(conf, line); continue; } if (!strncmp(line, "nameserver", 10) && isspace(line[10])) { @@ -89,5 +96,11 @@ no_resolv_conf: conf->nns = nns; + char *res_opts_env = NULL; + if (!libc.secure) res_opts_env = getenv("RES_OPTIONS"); + if (res_opts_env) { + __parse_resolv_opts(conf, res_opts_env); + } + return 0; } -- 2.11.0