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:
Frederic Wang 2020-10-28 14:33:29 +00:00
Родитель 9ef65719fc
Коммит bdcea0a95f
2 изменённых файлов: 94 добавлений и 0 удалений

Просмотреть файл

@ -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"