This is an automated email from the git hooks/post-receive script.
richard pushed a change to branch maint-11.0.10 in repository torbutton.
at 67d19b6a Bug 14939: Support IPv6 addresses in Tor Circuit Display
This branch includes the following new commits:
new 67d19b6a Bug 14939: Support IPv6 addresses in Tor Circuit Display
The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference.
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch maint-11.0.10 in repository torbutton.
commit 67d19b6ad93263224673377191930bb9c7d05b32 Author: Illia Volochii illia.volochii@gmail.com AuthorDate: Mon Nov 1 20:20:40 2021 +0200
Bug 14939: Support IPv6 addresses in Tor Circuit Display
Fix the visualization of bridge addresses when using IPv6, and display both IPv4 and IPv6 addresses on normal relays. --- chrome/content/tor-circuit-display.js | 39 ++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 14 deletions(-)
diff --git a/chrome/content/tor-circuit-display.js b/chrome/content/tor-circuit-display.js index d6034384..f6dd9ace 100644 --- a/chrome/content/tor-circuit-display.js +++ b/chrome/content/tor-circuit-display.js @@ -70,38 +70,49 @@ let getBridge = async function (controller, id) { };
// nodeDataForID(controller, id)__. -// Returns the type, IP and country code of a node with given ID. +// Returns the type, IP addresses and country code of a node with given ID. // Example: `nodeDataForID(controller, "20BC91DC525C3DC9974B29FBEAB51230DE024C44")` -// => `{ type : "default", ip : "12.23.34.45", countryCode : "fr" }` +// => `{ type: "default", ipAddrs: ["12.23.34.45", "2001:db8::"], countryCode: "fr" }` let nodeDataForID = async function (controller, id) { - let result = {}, - bridge = await getBridge(controller, id); // type, ip, countryCode; + let result = {ipAddrs: []}; + const bridge = await getBridge(controller, id); // type, ip, countryCode; + const addrRe = /^[?([^]]+)]?:\d+$/ if (bridge) { result.type = "bridge"; result.bridgeType = bridge.type; // Attempt to get an IP address from bridge address string. try { - result.ip = bridge.address.split(":")[0]; - } catch (e) { } + const ip = bridge.address.match(addrRe)[1]; + if (!ip.startsWith("0.")) { + result.ipAddrs = [ip]; + } + } catch (e) { + } } else { // either dealing with a relay, or a bridge whose fingerprint is not saved in torrc try { - let statusMap = await controller.getInfo("ns/id/" + id); + const statusMap = await controller.getInfo("ns/id/" + id); result.type = "default"; - result.ip = statusMap.IP; + if (!statusMap.IP.startsWith("0.")) { + result.ipAddrs.push(statusMap.IP); + } + try { + result.ipAddrs.push(statusMap.IPv6.match(addrRe)[1]); + } catch (e) { + } } catch (e) { // getInfo will throw if the given id is not a relay // this probably means we are dealing with a user-provided bridge with no fingerprint result.type = "bridge"; - // we don't know the ip or type, so leave blank - result.ip = ""; + // we don't know the ip/ipv6 or type, so leave blank + result.ipAddrs = []; result.bridgeType = ""; } } - if (result.ip) { + if (result.ipAddrs.length > 0) { // Get the country code for the node's IP address. try { - let countryCode = await controller.getInfo("ip-to-country/" + result.ip); + const countryCode = await controller.getInfo("ip-to-country/" + result.ipAddrs[0]); result.countryCode = countryCode === "??" ? null : countryCode; } catch (e) { } } @@ -305,8 +316,8 @@ let updateCircuitDisplay = function () { } else if (nodeData[i].type == "default") { relayText = localizedCountryNameFromCode(nodeData[i].countryCode); } - let ip = nodeData[i].ip.startsWith("0.") ? "" : nodeData[i].ip; - li(relayText, " ", ["span", { class: "circuit-ip-address" }, ip], " ", + const ipAddrs = nodeData[i].ipAddrs.join(", "); + li(relayText, " ", ["span", { class: "circuit-ip-address" }, ipAddrs], " ", (i === 0 && nodeData[0].type !== "bridge") ? ["span", { class: "circuit-guard-info" }, uiString("guard")] : null); }
tor-commits@lists.torproject.org