[tor-commits] [metrics-lib/master] Parse hostnames from dir-source lines.

karsten at torproject.org karsten at torproject.org
Mon Apr 11 10:55:36 UTC 2016


commit 783dad184bcda8b7305d9a741e2420d0a1e938e8
Author: Karsten Loesing <karsten.loesing at 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)



More information about the tor-commits mailing list