ソースを参照

Make sure that router_get_by_* can always return "me"

svn:r3702
Nick Mathewson 20 年 前
コミット
8efb2a957d
2 ファイル変更9 行追加2 行削除
  1. 2 2
      doc/TODO
  2. 7 0
      src/or/routerlist.c

+ 2 - 2
doc/TODO

@@ -209,8 +209,8 @@ N  - IPv6 support (For exit addresses)
        extend-data cells can be extend requests.
 
    - Code cleanup
-     - fix router_get_by_* functions so they can get ourselves too,
-       and audit everything to make sure rend and intro points are
+     o fix router_get_by_* functions so they can get ourselves too ...
+     - and audit everything to make sure rend and intro points are
        just as likely to be us as not.
 
    - tor should be able to have a pool of outgoing IP addresses

+ 7 - 0
src/or/routerlist.c

@@ -582,6 +582,9 @@ routerinfo_t *router_get_by_nickname(const char *nickname)
     return NULL;
   if (nickname[0] == '$')
     return router_get_by_hexdigest(nickname);
+  if (server_mode(get_options()) &&
+      !strcasecmp(nickname, get_options()->Nickname))
+    return router_get_my_routerinfo();
 
   maybedigest = (strlen(nickname) == HEX_DIGEST_LEN) &&
     (base16_decode(digest,DIGEST_LEN,nickname,HEX_DIGEST_LEN) == 0);
@@ -632,6 +635,10 @@ routerinfo_t *router_get_by_digest(const char *digest) {
 
   tor_assert(digest);
   if (!routerlist) return NULL;
+  if (server_mode(get_options()) &&
+      (router = router_get_my_routerinfo()) &&
+      !memcmp(digest, router->identity_digest, DIGEST_LEN))
+    return router;
 
   for (i=0;i<smartlist_len(routerlist->routers);i++) {
     router = smartlist_get(routerlist->routers, i);