| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 84c3990 commit a71df76
10 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -187,6 +187,19 @@ Make built-in language features like `eval` and `new Function` that generate | |||
| 187 | 187 | code from strings throw an exception instead. This does not affect the Node.js | |
| 188 | 188 | `vm` module. | |
| 189 | 189 | ||
| 190 | + ### `--dns-result-order=order` | ||
| 191 | + <!-- YAML | ||
| 192 | + added: REPLACEME | ||
| 193 | + --> | ||
| 194 | + | ||
| 195 | + Set the default value of `verbatim` in [`dns.lookup()`][] and | ||
| 196 | + [`dnsPromises.lookup()`][]. The value could be: | ||
| 197 | + * `ipv4first`: sets default `verbatim` `false`. | ||
| 198 | + * `verbatim`: sets default `verbatim` `true`. | ||
| 199 | + | ||
| 200 | + The default is `ipv4first` and [`dns.setDefaultResultOrder()`][] have higher | ||
| 201 | + priority than `--dns-result-order`. | ||
| 202 | + | ||
| 190 | 203 | ### `--enable-fips` | |
| 191 | 204 | <!-- YAML | |
| 192 | 205 | added: v6.0.0 | |
@@ -1377,6 +1390,7 @@ Node.js options that are allowed are: | |||
| 1377 | 1390 | * `--conditions`, `-C` | |
| 1378 | 1391 | * `--diagnostic-dir` | |
| 1379 | 1392 | * `--disable-proto` | |
| 1393 | + * `--dns-result-order` | ||
| 1380 | 1394 | * `--enable-fips` | |
| 1381 | 1395 | * `--enable-source-maps` | |
| 1382 | 1396 | * `--experimental-abortcontroller` | |
@@ -1765,6 +1779,9 @@ $ node --max-old-space-size=1536 index.js | |||
| 1765 | 1779 | [`NODE_OPTIONS`]: #cli_node_options_options | |
| 1766 | 1780 | [`NO_COLOR`]: https://no-color.org | |
| 1767 | 1781 | [`SlowBuffer`]: buffer.md#buffer_class_slowbuffer | |
| 1782 | + [`dns.lookup()`]: dns.md#dns_dns_lookup_hostname_options_callback | ||
| 1783 | + [`dns.setDefaultResultOrder()`]: dns.md#dns_dns_setdefaultresultorder_order | ||
| 1784 | + [`dnsPromises.lookup()`]: dns.md#dns_dnspromises_lookup_hostname_options | ||
| 1768 | 1785 | [`process.setUncaughtExceptionCaptureCallback()`]: process.md#process_process_setuncaughtexceptioncapturecallback_fn | |
| 1769 | 1786 | [`tls.DEFAULT_MAX_VERSION`]: tls.md#tls_tls_default_max_version | |
| 1770 | 1787 | [`tls.DEFAULT_MIN_VERSION`]: tls.md#tls_tls_default_min_version | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -184,8 +184,9 @@ changes: | |||
| 184 | 184 | addresses in the order the DNS resolver returned them. When `false`, | |
| 185 | 185 | IPv4 addresses are placed before IPv6 addresses. | |
| 186 | 186 | **Default:** currently `false` (addresses are reordered) but this is | |
| 187 | - expected to change in the not too distant future. | ||
| 188 | - New code should use `{ verbatim: true }`. | ||
| 187 | + expected to change in the not too distant future. Default value is | ||
| 188 | + configurable using [`dns.setDefaultResultOrder()`][] or | ||
| 189 | + [`--dns-result-order`][]. New code should use `{ verbatim: true }`. | ||
| 189 | 190 | * `callback` {Function} | |
| 190 | 191 | * `err` {Error} | |
| 191 | 192 | * `address` {string} A string representation of an IPv4 or IPv6 address. | |
@@ -629,6 +630,23 @@ array of host names. | |||
| 629 | 630 | On error, `err` is an [`Error`][] object, where `err.code` is | |
| 630 | 631 | one of the [DNS error codes][]. | |
| 631 | 632 | ||
| 633 | + ## `dns.setDefaultResultOrder(order)` | ||
| 634 | + <!-- YAML | ||
| 635 | + added: REPLACEME | ||
| 636 | + --> | ||
| 637 | + | ||
| 638 | + * `order` {string} must be `'ipv4first'` or `'verbatim'`. | ||
| 639 | + | ||
| 640 | + Set the default value of `verbatim` in [`dns.lookup()`][] and | ||
| 641 | + [`dnsPromises.lookup()`][]. The value could be: | ||
| 642 | + * `ipv4first`: sets default `verbatim` `false`. | ||
| 643 | + * `verbatim`: sets default `verbatim` `true`. | ||
| 644 | + | ||
| 645 | + The default is `ipv4first` and [`dns.setDefaultResultOrder()`][] have higher | ||
| 646 | + priority than [`--dns-result-order`][]. When using [worker threads][], | ||
| 647 | + [`dns.setDefaultResultOrder()`][] from the main thread won't affect the default | ||
| 648 | + dns orders in workers. | ||
| 649 | + | ||
| 632 | 650 | ## `dns.setServers(servers)` | |
| 633 | 651 | <!-- YAML | |
| 634 | 652 | added: v0.11.3 | |
@@ -777,8 +795,9 @@ added: v10.6.0 | |||
| 777 | 795 | IPv6 addresses in the order the DNS resolver returned them. When `false`, | |
| 778 | 796 | IPv4 addresses are placed before IPv6 addresses. | |
| 779 | 797 | **Default:** currently `false` (addresses are reordered) but this is | |
| 780 | - expected to change in the not too distant future. | ||
| 781 | - New code should use `{ verbatim: true }`. | ||
| 798 | + expected to change in the not too distant future. Default value is | ||
| 799 | + configurable using [`dns.setDefaultResultOrder()`][] or | ||
| 800 | + [`--dns-result-order`][]. New code should use `{ verbatim: true }`. | ||
| 782 | 801 | ||
| 783 | 802 | Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or | |
| 784 | 803 | AAAA (IPv6) record. All `option` properties are optional. If `options` is an | |
@@ -1132,6 +1151,23 @@ array of host names. | |||
| 1132 | 1151 | On error, the `Promise` is rejected with an [`Error`][] object, where `err.code` | |
| 1133 | 1152 | is one of the [DNS error codes](#dns_error_codes). | |
| 1134 | 1153 | ||
| 1154 | + ### `dnsPromises.setDefaultResultOrder(order)` | ||
| 1155 | + <!-- YAML | ||
| 1156 | + added: REPLACEME | ||
| 1157 | + --> | ||
| 1158 | + | ||
| 1159 | + * `order` {string} must be `'ipv4first'` or `'verbatim'`. | ||
| 1160 | + | ||
| 1161 | + Set the default value of `verbatim` in [`dns.lookup()`][] and | ||
| 1162 | + [`dnsPromises.lookup()`][]. The value could be: | ||
| 1163 | + * `ipv4first`: sets default `verbatim` `false`. | ||
| 1164 | + * `verbatim`: sets default `verbatim` `true`. | ||
| 1165 | + | ||
| 1166 | + The default is `ipv4first` and [`dnsPromises.setDefaultResultOrder()`][] have | ||
| 1167 | + higher priority than [`--dns-result-order`][]. When using [worker threads][], | ||
| 1168 | + [`dnsPromises.setDefaultResultOrder()`][] from the main thread won't affect the | ||
| 1169 | + default dns orders in workers. | ||
| 1170 | + | ||
| 1135 | 1171 | ### `dnsPromises.setServers(servers)` | |
| 1136 | 1172 | <!-- YAML | |
| 1137 | 1173 | added: v10.6.0 | |
@@ -1241,6 +1277,7 @@ uses. For instance, _they do not use the configuration from `/etc/hosts`_. | |||
| 1241 | 1277 | [Implementation considerations section]: #dns_implementation_considerations | |
| 1242 | 1278 | [RFC 5952]: https://tools.ietf.org/html/rfc5952#section-6 | |
| 1243 | 1279 | [RFC 8482]: https://tools.ietf.org/html/rfc8482 | |
| 1280 | + [`--dns-result-order`]: cli.md#cli_dns_result_order_order | ||
| 1244 | 1281 | [`Error`]: errors.md#errors_class_error | |
| 1245 | 1282 | [`UV_THREADPOOL_SIZE`]: cli.md#cli_uv_threadpool_size_size | |
| 1246 | 1283 | [`dgram.createSocket()`]: dgram.md#dgram_dgram_createsocket_options_callback | |
@@ -1260,6 +1297,7 @@ uses. For instance, _they do not use the configuration from `/etc/hosts`_. | |||
| 1260 | 1297 | [`dns.resolveSrv()`]: #dns_dns_resolvesrv_hostname_callback | |
| 1261 | 1298 | [`dns.resolveTxt()`]: #dns_dns_resolvetxt_hostname_callback | |
| 1262 | 1299 | [`dns.reverse()`]: #dns_dns_reverse_ip_callback | |
| 1300 | + [`dns.setDefaultResultOrder()`]: #dns_dns_setdefaultresultorder_order | ||
| 1263 | 1301 | [`dns.setServers()`]: #dns_dns_setservers_servers | |
| 1264 | 1302 | [`dnsPromises.getServers()`]: #dns_dnspromises_getservers | |
| 1265 | 1303 | [`dnsPromises.lookup()`]: #dns_dnspromises_lookup_hostname_options | |
@@ -1277,7 +1315,9 @@ uses. For instance, _they do not use the configuration from `/etc/hosts`_. | |||
| 1277 | 1315 | [`dnsPromises.resolveSrv()`]: #dns_dnspromises_resolvesrv_hostname | |
| 1278 | 1316 | [`dnsPromises.resolveTxt()`]: #dns_dnspromises_resolvetxt_hostname | |
| 1279 | 1317 | [`dnsPromises.reverse()`]: #dns_dnspromises_reverse_ip | |
| 1318 | + [`dnsPromises.setDefaultResultOrder()`]: #dns_dnspromises_setdefaultresultorder_order | ||
| 1280 | 1319 | [`dnsPromises.setServers()`]: #dns_dnspromises_setservers_servers | |
| 1281 | 1320 | [`socket.connect()`]: net.md#net_socket_connect_options_connectlistener | |
| 1282 | 1321 | [`util.promisify()`]: util.md#util_util_promisify_original | |
| 1283 | 1322 | [supported `getaddrinfo` flags]: #dns_supported_getaddrinfo_flags | |
| 1323 | + [worker threads]: worker_threads.md | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -41,6 +41,8 @@ const { | |||
| 41 | 41 | Resolver, | |
| 42 | 42 | validateHints, | |
| 43 | 43 | emitInvalidHostnameWarning, | |
| 44 | + getDefaultVerbatim, | ||
| 45 | + setDefaultResultOrder, | ||
| 44 | 46 | } = require('internal/dns/utils'); | |
| 45 | 47 | const { | |
| 46 | 48 | ERR_INVALID_ARG_TYPE, | |
@@ -96,7 +98,7 @@ function lookup(hostname, options, callback) { | |||
| 96 | 98 | let hints = 0; | |
| 97 | 99 | let family = -1; | |
| 98 | 100 | let all = false; | |
| 99 | - let verbatim = false; | ||
| 101 | + let verbatim = getDefaultVerbatim(); | ||
| 100 | 102 | ||
| 101 | 103 | // Parse arguments | |
| 102 | 104 | if (hostname) { | |
@@ -113,7 +115,9 @@ function lookup(hostname, options, callback) { | |||
| 113 | 115 | hints = options.hints >>> 0; | |
| 114 | 116 | family = options.family >>> 0; | |
| 115 | 117 | all = options.all === true; | |
| 116 | - verbatim = options.verbatim === true; | ||
| 118 | + if (typeof options.verbatim === 'boolean') { | ||
| 119 | + verbatim = options.verbatim === true; | ||
| 120 | + } | ||
| 117 | 121 | ||
| 118 | 122 | validateHints(hints); | |
| 119 | 123 | } else { | |
@@ -286,6 +290,7 @@ module.exports = { | |||
| 286 | 290 | lookupService, | |
| 287 | 291 | ||
| 288 | 292 | Resolver, | |
| 293 | + setDefaultResultOrder, | ||
| 289 | 294 | setServers: defaultResolverSetServers, | |
| 290 | 295 | ||
| 291 | 296 | // uv_getaddrinfo flags | |
@@ -330,6 +335,7 @@ ObjectDefineProperties(module.exports, { | |||
| 330 | 335 | if (promises === null) { | |
| 331 | 336 | promises = require('internal/dns/promises'); | |
| 332 | 337 | promises.setServers = defaultResolverSetServers; | |
| 338 | + promises.setDefaultResultOrder = setDefaultResultOrder; | ||
| 333 | 339 | } | |
| 334 | 340 | return promises; | |
| 335 | 341 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,5 +1,4 @@ | |||
| 1 | 1 | 'use strict'; | |
| 2 | - | ||
| 3 | 2 | const { | |
| 4 | 3 | ArrayPrototypeMap, | |
| 5 | 4 | ObjectCreate, | |
@@ -14,6 +13,7 @@ const { | |||
| 14 | 13 | validateHints, | |
| 15 | 14 | validateTimeout, | |
| 16 | 15 | emitInvalidHostnameWarning, | |
| 16 | + getDefaultVerbatim, | ||
| 17 | 17 | } = require('internal/dns/utils'); | |
| 18 | 18 | const { codes, dnsException } = require('internal/errors'); | |
| 19 | 19 | const { toASCII } = require('internal/idna'); | |
@@ -103,7 +103,7 @@ function lookup(hostname, options) { | |||
| 103 | 103 | var hints = 0; | |
| 104 | 104 | var family = -1; | |
| 105 | 105 | var all = false; | |
| 106 | - var verbatim = false; | ||
| 106 | + var verbatim = getDefaultVerbatim(); | ||
| 107 | 107 | ||
| 108 | 108 | // Parse arguments | |
| 109 | 109 | if (hostname && typeof hostname !== 'string') { | |
@@ -112,7 +112,9 @@ function lookup(hostname, options) { | |||
| 112 | 112 | hints = options.hints >>> 0; | |
| 113 | 113 | family = options.family >>> 0; | |
| 114 | 114 | all = options.all === true; | |
| 115 | - verbatim = options.verbatim === true; | ||
| 115 | + if (typeof options.verbatim === 'boolean') { | ||
| 116 | + verbatim = options.verbatim === true; | ||
| 117 | + } | ||
| 116 | 118 | ||
| 117 | 119 | validateHints(hints); | |
| 118 | 120 | } else { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -13,9 +13,11 @@ const { | |||
| 13 | 13 | ||
| 14 | 14 | const errors = require('internal/errors'); | |
| 15 | 15 | const { isIP } = require('internal/net'); | |
| 16 | + const { getOptionValue } = require('internal/options'); | ||
| 16 | 17 | const { | |
| 17 | 18 | validateArray, | |
| 18 | 19 | validateInt32, | |
| 20 | + validateOneOf, | ||
| 19 | 21 | validateString, | |
| 20 | 22 | } = require('internal/validators'); | |
| 21 | 23 | const { | |
@@ -184,6 +186,23 @@ function emitInvalidHostnameWarning(hostname) { | |||
| 184 | 186 | ); | |
| 185 | 187 | } | |
| 186 | 188 | ||
| 189 | + let dnsOrder = getOptionValue('--dns-result-order') || 'ipv4first'; | ||
| 190 | + | ||
| 191 | + function getDefaultVerbatim() { | ||
| 192 | + switch (dnsOrder) { | ||
| 193 | + case 'verbatim': | ||
| 194 | + return true; | ||
| 195 | + case 'ipv4first': | ||
| 196 | + default: | ||
| 197 | + return false; | ||
| 198 | + } | ||
| 199 | + } | ||
| 200 | + | ||
| 201 | + function setDefaultResultOrder(value) { | ||
| 202 | + validateOneOf(value, 'dnsOrder', ['verbatim', 'ipv4first']); | ||
| 203 | + dnsOrder = value; | ||
| 204 | + } | ||
| 205 | + | ||
| 187 | 206 | module.exports = { | |
| 188 | 207 | bindDefaultResolver, | |
| 189 | 208 | getDefaultResolver, | |
@@ -192,4 +211,6 @@ module.exports = { | |||
| 192 | 211 | validateTimeout, | |
| 193 | 212 | Resolver, | |
| 194 | 213 | emitInvalidHostnameWarning, | |
| 214 | + getDefaultVerbatim, | ||
| 215 | + setDefaultResultOrder, | ||
| 195 | 216 | }; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -298,6 +298,13 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { | |||
| 298 | 298 | " (default: current working directory)", | |
| 299 | 299 | &EnvironmentOptions::diagnostic_dir, | |
| 300 | 300 | kAllowedInEnvironment); | |
| 301 | + AddOption("--dns-result-order", | ||
| 302 | + "set default value of verbatim in dns.lookup. Options are " | ||
| 303 | + "'ipv4first' (IPv4 addresses are placed before IPv6 addresses) " | ||
| 304 | + "'verbatim' (addresses are in the order the DNS resolver " | ||
| 305 | + "returned)", | ||
| 306 | + &EnvironmentOptions::dns_result_order, | ||
| 307 | + kAllowedInEnvironment); | ||
| 301 | 308 | AddOption("--enable-source-maps", | |
| 302 | 309 | "Source Map V3 support for stack traces", | |
| 303 | 310 | &EnvironmentOptions::enable_source_maps, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -101,6 +101,7 @@ class EnvironmentOptions : public Options { | |||
| 101 | 101 | public: | |
| 102 | 102 | bool abort_on_uncaught_exception = false; | |
| 103 | 103 | std::vector<std::string> conditions; | |
| 104 | + std::string dns_result_order; | ||
| 104 | 105 | bool enable_source_maps = false; | |
| 105 | 106 | bool experimental_json_modules = false; | |
| 106 | 107 | bool experimental_modules = false; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,51 @@ | |||
| 1 | + // Flags: --expose-internals --dns-result-order=ipv4first | ||
| 2 | + 'use strict'; | ||
| 3 | + const common = require('../common'); | ||
| 4 | + const assert = require('assert'); | ||
| 5 | + const { internalBinding } = require('internal/test/binding'); | ||
| 6 | + const cares = internalBinding('cares_wrap'); | ||
| 7 | + const { promisify } = require('util'); | ||
| 8 | + | ||
| 9 | + // Test that --dns-result-order=ipv4first works as expected. | ||
| 10 | + | ||
| 11 | + const originalGetaddrinfo = cares.getaddrinfo; | ||
| 12 | + const calls = []; | ||
| 13 | + cares.getaddrinfo = common.mustCallAtLeast((...args) => { | ||
| 14 | + calls.push(args); | ||
| 15 | + originalGetaddrinfo(...args); | ||
| 16 | + }, 1); | ||
| 17 | + | ||
| 18 | + const dns = require('dns'); | ||
| 19 | + const dnsPromises = dns.promises; | ||
| 20 | + | ||
| 21 | + let verbatim; | ||
| 22 | + | ||
| 23 | + // We want to test the parameter of verbatim only so that we | ||
| 24 | + // ignore possible errors here. | ||
| 25 | + function allowFailed(fn) { | ||
| 26 | + return fn.catch((_err) => { | ||
| 27 | + // | ||
| 28 | + }); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + (async () => { | ||
| 32 | + let callsLength = 0; | ||
| 33 | + const checkParameter = (expected) => { | ||
| 34 | + assert.strictEqual(calls.length, callsLength + 1); | ||
| 35 | + verbatim = calls[callsLength][4]; | ||
| 36 | + assert.strictEqual(verbatim, expected); | ||
| 37 | + callsLength += 1; | ||
| 38 | + }; | ||
| 39 | + | ||
| 40 | + await allowFailed(promisify(dns.lookup)('example.org')); | ||
| 41 | + checkParameter(false); | ||
| 42 | + | ||
| 43 | + await allowFailed(dnsPromises.lookup('example.org')); | ||
| 44 | + checkParameter(false); | ||
| 45 | + | ||
| 46 | + await allowFailed(promisify(dns.lookup)('example.org', {})); | ||
| 47 | + checkParameter(false); | ||
| 48 | + | ||
| 49 | + await allowFailed(dnsPromises.lookup('example.org', {})); | ||
| 50 | + checkParameter(false); | ||
| 51 | + })().then(common.mustCall()); | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,51 @@ | |||
| 1 | + // Flags: --expose-internals --dns-result-order=verbatim | ||
| 2 | + 'use strict'; | ||
| 3 | + const common = require('../common'); | ||
| 4 | + const assert = require('assert'); | ||
| 5 | + const { internalBinding } = require('internal/test/binding'); | ||
| 6 | + const cares = internalBinding('cares_wrap'); | ||
| 7 | + const { promisify } = require('util'); | ||
| 8 | + | ||
| 9 | + // Test that --dns-result-order=verbatim works as expected. | ||
| 10 | + | ||
| 11 | + const originalGetaddrinfo = cares.getaddrinfo; | ||
| 12 | + const calls = []; | ||
| 13 | + cares.getaddrinfo = common.mustCallAtLeast((...args) => { | ||
| 14 | + calls.push(args); | ||
| 15 | + originalGetaddrinfo(...args); | ||
| 16 | + }, 1); | ||
| 17 | + | ||
| 18 | + const dns = require('dns'); | ||
| 19 | + const dnsPromises = dns.promises; | ||
| 20 | + | ||
| 21 | + let verbatim; | ||
| 22 | + | ||
| 23 | + // We want to test the parameter of verbatim only so that we | ||
| 24 | + // ignore possible errors here. | ||
| 25 | + function allowFailed(fn) { | ||
| 26 | + return fn.catch((_err) => { | ||
| 27 | + // | ||
| 28 | + }); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + (async () => { | ||
| 32 | + let callsLength = 0; | ||
| 33 | + const checkParameter = (expected) => { | ||
| 34 | + assert.strictEqual(calls.length, callsLength + 1); | ||
| 35 | + verbatim = calls[callsLength][4]; | ||
| 36 | + assert.strictEqual(verbatim, expected); | ||
| 37 | + callsLength += 1; | ||
| 38 | + }; | ||
| 39 | + | ||
| 40 | + await allowFailed(promisify(dns.lookup)('example.org')); | ||
| 41 | + checkParameter(true); | ||
| 42 | + | ||
| 43 | + await allowFailed(dnsPromises.lookup('example.org')); | ||
| 44 | + checkParameter(true); | ||
| 45 | + | ||
| 46 | + await allowFailed(promisify(dns.lookup)('example.org', {})); | ||
| 47 | + checkParameter(true); | ||
| 48 | + | ||
| 49 | + await allowFailed(dnsPromises.lookup('example.org', {})); | ||
| 50 | + checkParameter(true); | ||
| 51 | + })().then(common.mustCall()); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments