commit 783dad184bcda8b7305d9a741e2420d0a1e938e8 Author: Karsten Loesing karsten.loesing@gmx.net Date: Thu Dec 24 14:40:23 2015 +0100
Parse hostnames from dir-source lines.
Implements #17934. --- CHANGELOG.md | 2 ++ src/org/torproject/descriptor/DirSourceEntry.java | 3 +++ src/org/torproject/descriptor/RelayNetworkStatusVote.java | 3 +++ src/org/torproject/descriptor/impl/DirSourceEntryImpl.java | 10 ++++++++++ .../torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java | 6 ++++++ .../descriptor/impl/RelayNetworkStatusConsensusImplTest.java | 8 ++++++++ .../descriptor/impl/RelayNetworkStatusVoteImplTest.java | 4 +++- 7 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md index 4daab24..b4b24d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ - Support hidden-service statistics in extra-info descriptors. - Support onion-key and ntor-onion-key cross certificates in server descriptors. + - Include the hostname in directory source entries of consensuses + and votes.
* Minor changes - Start using Java 7 features like the diamond operator and switch diff --git a/src/org/torproject/descriptor/DirSourceEntry.java b/src/org/torproject/descriptor/DirSourceEntry.java index 57a3967..da898d0 100644 --- a/src/org/torproject/descriptor/DirSourceEntry.java +++ b/src/org/torproject/descriptor/DirSourceEntry.java @@ -13,6 +13,9 @@ public interface DirSourceEntry { /* Return the identity fingerprint. */ public String getIdentity();
+ /* Return the hostname. */ + public String getHostname(); + /* Return the IP address. */ public String getIp();
diff --git a/src/org/torproject/descriptor/RelayNetworkStatusVote.java b/src/org/torproject/descriptor/RelayNetworkStatusVote.java index bf4ea6b..f4fad2a 100644 --- a/src/org/torproject/descriptor/RelayNetworkStatusVote.java +++ b/src/org/torproject/descriptor/RelayNetworkStatusVote.java @@ -100,6 +100,9 @@ public interface RelayNetworkStatusVote extends Descriptor { /* Return the directory identity. */ public String getIdentity();
+ /* Return the hostname. */ + public String getHostname(); + /* Return the IP address. */ public String getAddress();
diff --git a/src/org/torproject/descriptor/impl/DirSourceEntryImpl.java b/src/org/torproject/descriptor/impl/DirSourceEntryImpl.java index 3ea0179..5e39cfe 100644 --- a/src/org/torproject/descriptor/impl/DirSourceEntryImpl.java +++ b/src/org/torproject/descriptor/impl/DirSourceEntryImpl.java @@ -129,6 +129,11 @@ public class DirSourceEntryImpl implements DirSourceEntry { } this.nickname = ParseHelper.parseNickname(line, nickname); this.identity = ParseHelper.parseTwentyByteHexString(line, parts[2]); + if (parts[3].length() < 1) { + throw new DescriptorParseException("Illegal hostname in '" + line + + "'."); + } + this.hostname = parts[3]; this.ip = ParseHelper.parseIpv4Address(line, parts[4]); this.dirPort = ParseHelper.parsePort(line, parts[5]); this.orPort = ParseHelper.parsePort(line, parts[6]); @@ -170,6 +175,11 @@ public class DirSourceEntryImpl implements DirSourceEntry { return this.isLegacy; }
+ private String hostname; + public String getHostname() { + return this.hostname; + } + private String ip; public String getIp() { return this.ip; diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java index c16a9f9..7d59282 100644 --- a/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java +++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java @@ -343,6 +343,7 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl throw new DescriptorParseException("Illegal hostname in '" + line + "'."); } + this.hostname = parts[3]; this.address = ParseHelper.parseIpv4Address(line, parts[4]); this.dirPort = ParseHelper.parsePort(line, parts[5]); this.orPort = ParseHelper.parsePort(line, parts[6]); @@ -441,6 +442,11 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl return this.identity; }
+ private String hostname; + public String getHostname() { + return this.hostname; + } + private String address; public String getAddress() { return this.address; diff --git a/test/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java b/test/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java index 42feb8b..dbe6cd3 100644 --- a/test/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java +++ b/test/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java @@ -300,6 +300,8 @@ public class RelayNetworkStatusConsensusImplTest { assertEquals(30000, (int) consensus.getConsensusParams().get( "CircuitPriorityHalflifeMsec")); assertEquals("86.59.21.38", consensus.getDirSourceEntries().get( + "14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4").getHostname()); + assertEquals("86.59.21.38", consensus.getDirSourceEntries().get( "14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4").getIp()); assertTrue(consensus.containsStatusEntry( "00795A6E8D91C270FC23B30F388A495553E01894")); @@ -723,6 +725,12 @@ public class RelayNetworkStatusConsensusImplTest { }
@Test(expected = DescriptorParseException.class) + public void testDirSourceHostnameMissing() + throws DescriptorParseException { + DirSourceBuilder.createWithHostName(""); + } + + @Test(expected = DescriptorParseException.class) public void testDirSourceAddress24() throws DescriptorParseException { DirSourceBuilder.createWithAddress("212.112.245"); } diff --git a/test/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java b/test/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java index c6b2fc7..17f59a8 100644 --- a/test/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java +++ b/test/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java @@ -905,9 +905,11 @@ public class RelayNetworkStatusVoteImplTest { public void testHostname256() throws DescriptorParseException { /* This test doesn't fail, because we're not parsing the hostname. */ - VoteBuilder.createWithDirSourceLine("dir-source urras " + RelayNetworkStatusVote vote = + VoteBuilder.createWithDirSourceLine("dir-source urras " + "80550987E1D626E3EBA5E5E75A458DE0626D088C 256.256.256.256 " + "208.83.223.34 443 80"); + assertEquals("256.256.256.256", vote.getHostname()); }
@Test(expected = DescriptorParseException.class)
tor-commits@lists.torproject.org