소스 검색

Make tor-resolve take a -p port option in addition to the current host:port syntax.

svn:r17002
Nick Mathewson 15 년 전
부모
커밋
ee0078ead4
2개의 변경된 파일33개의 추가작업 그리고 6개의 파일을 삭제
  1. 2 0
      ChangeLog
  2. 31 6
      src/tools/tor-resolve.c

+ 2 - 0
ChangeLog

@@ -60,6 +60,8 @@ Changes in version 0.2.1.6-alpha - 2008-09-29
       single-hop circuits, and clients to use those servers to build
       single-hop circuits when using a specialized controller. Patch
       from Josh Albrecht. Resolves feature request 768.
+    - Add a -p option to tor-resolve for specifying the SOCKS port: some
+      people find host:port too confusing.
 
   o Minor bugfixes:
     - Fix compile on OpenBSD 4.4-current. Bugfix on 0.2.1.5-alpha.

+ 31 - 6
src/tools/tor-resolve.c

@@ -293,7 +293,7 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
 static void
 usage(void)
 {
-  puts("Syntax: tor-resolve [-4] [-v] [-x] [-F] "
+  puts("Syntax: tor-resolve [-4] [-v] [-x] [-F] [-p port] "
        "hostname [sockshost:socksport]");
   exit(1);
 }
@@ -303,7 +303,7 @@ int
 main(int argc, char **argv)
 {
   uint32_t sockshost;
-  uint16_t socksport;
+  uint16_t socksport = 0, port_option = 0;
   int isSocks4 = 0, isVerbose = 0, isReverse = 0, force = 0;
   char **arg;
   int n_args;
@@ -336,7 +336,21 @@ main(int argc, char **argv)
       isReverse = 1;
     else if (!strcmp("-F", arg[0]))
       force = 1;
-    else {
+    else if (!strcmp("-p", arg[0])) {
+      int p;
+      if (n_args < 2) {
+        fprintf(stderr, "No arguments given to -p\n");
+        usage();
+      }
+      p = atoi(arg[1]);
+      if (p<1 || p > 65535) {
+        fprintf(stderr, "-p requires a number between 1 and 65535\n");
+        usage();
+      }
+      port_option = (uint16_t) p;
+      ++arg; /* skip the port */
+      --n_args;
+    } else {
       fprintf(stderr, "Unrecognized flag '%s'\n", arg[0]);
       usage();
     }
@@ -356,15 +370,26 @@ main(int argc, char **argv)
   add_stream_log(s, "<stderr>", stderr);
 
   if (n_args == 1) {
-    log_debug(LD_CONFIG, "defaulting to localhost:9050");
+    log_debug(LD_CONFIG, "defaulting to localhost");
     sockshost = 0x7f000001u; /* localhost */
-    socksport = 9050; /* 9050 */
+    if (port_option) {
+      log_debug(LD_CONFIG, "Using port %d", (int)port_option);
+      socksport = port_option;
+    } else {
+      log_debug(LD_CONFIG, "defaulting to port 9050");
+      socksport = 9050; /* 9050 */
+    }
   } else if (n_args == 2) {
     if (parse_addr_port(LOG_WARN, arg[1], NULL, &sockshost, &socksport)<0) {
       fprintf(stderr, "Couldn't parse/resolve address %s", arg[1]);
       return 1;
     }
-    if (socksport == 0) {
+    if (socksport && port_option && socksport != port_option) {
+      log_warn(LD_CONFIG, "Conflicting ports; using %d, not %d",
+               (int)socksport, (int)port_option);
+    } else if (port_option) {
+      socksport = port_option;
+    } else {
       log_debug(LD_CONFIG, "defaulting to port 9050");
       socksport = 9050;
     }