зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1673315 Add a test to ensure loopback host names cannot be overridden, r=valentin,necko-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D94712
This commit is contained in:
Родитель
9ef65719fc
Коммит
bdcea0a95f
|
@ -0,0 +1,92 @@
|
|||
"use strict";
|
||||
|
||||
const dns = Cc["@mozilla.org/network/dns-service;1"].getService(
|
||||
Ci.nsIDNSService
|
||||
);
|
||||
const override = Cc["@mozilla.org/network/native-dns-override;1"].getService(
|
||||
Ci.nsINativeDNSResolverOverride
|
||||
);
|
||||
const defaultOriginAttributes = {};
|
||||
const threadManager = Cc["@mozilla.org/thread-manager;1"].getService(
|
||||
Ci.nsIThreadManager
|
||||
);
|
||||
const mainThread = threadManager.currentThread;
|
||||
|
||||
class Listener {
|
||||
constructor() {
|
||||
this.promise = new Promise(resolve => {
|
||||
this.resolve = resolve;
|
||||
});
|
||||
}
|
||||
|
||||
onLookupComplete(inRequest, inRecord, inStatus) {
|
||||
this.resolve([inRequest, inRecord, inStatus]);
|
||||
}
|
||||
|
||||
async addresses() {
|
||||
let [inRequest, inRecord, inStatus] = await this.promise;
|
||||
let addresses = [];
|
||||
if (!inRecord) {
|
||||
return addresses; // returns []
|
||||
}
|
||||
inRecord.QueryInterface(Ci.nsIDNSAddrRecord);
|
||||
while (inRecord.hasMore()) {
|
||||
addresses.push(inRecord.getNextAddrAsString());
|
||||
}
|
||||
return addresses;
|
||||
}
|
||||
|
||||
then() {
|
||||
return this.promise.then.apply(this.promise, arguments);
|
||||
}
|
||||
}
|
||||
Listener.prototype.QueryInterface = ChromeUtils.generateQI(["nsIDNSListener"]);
|
||||
|
||||
["localhost", "vhost.localhost"].forEach(domain => {
|
||||
add_task(async function test_() {
|
||||
let listener1 = new Listener();
|
||||
const overrides = ["1.2.3.4", "5.6.7.8"];
|
||||
overrides.forEach(ip_address => {
|
||||
override.addIPOverride(domain, ip_address);
|
||||
});
|
||||
|
||||
// Verify that loopback host names are not overridden.
|
||||
dns.asyncResolve(
|
||||
domain,
|
||||
Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
|
||||
0,
|
||||
null,
|
||||
listener1,
|
||||
mainThread,
|
||||
defaultOriginAttributes
|
||||
);
|
||||
Assert.deepEqual(
|
||||
await listener1.addresses(),
|
||||
["127.0.0.1", "::1"],
|
||||
`${domain} is not overridden`
|
||||
);
|
||||
|
||||
// Verify that if localhost hijacking is enabled, the overrides
|
||||
// registered above are taken into account.
|
||||
Services.prefs.setBoolPref("network.proxy.allow_hijacking_localhost", true);
|
||||
let listener2 = new Listener();
|
||||
dns.asyncResolve(
|
||||
domain,
|
||||
Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
|
||||
0,
|
||||
null,
|
||||
listener2,
|
||||
mainThread,
|
||||
defaultOriginAttributes
|
||||
);
|
||||
Assert.deepEqual(
|
||||
await listener2.addresses(),
|
||||
overrides,
|
||||
`${domain} is overridden`
|
||||
);
|
||||
Services.prefs.clearUserPref("network.proxy.allow_hijacking_localhost");
|
||||
|
||||
dns.clearCache(false);
|
||||
override.clearOverrides();
|
||||
});
|
||||
});
|
|
@ -440,6 +440,8 @@ skip-if = asan || tsan || os == 'win' || os =='android'
|
|||
[test_defaultURI.js]
|
||||
[test_port_remapping.js]
|
||||
[test_dns_override.js]
|
||||
[test_dns_override_for_localhost.js]
|
||||
skip-if = socketprocess_networking # Bug 1640105
|
||||
[test_no_cookies_after_last_pb_exit.js]
|
||||
[test_trr_httpssvc.js]
|
||||
skip-if = os == "android"
|
||||
|
|
Загрузка…
Ссылка в новой задаче