Преглед изворни кода

Make dirserv_get_routerdesc_fingerprints() treat extrainfos with send_unencrypted==0 correctly. Irrelevant, since we will soon never send them at all.

svn:r17953
Nick Mathewson пре 15 година
родитељ
комит
9abfb564a0
3 измењених фајлова са 14 додато и 7 уклоњено
  1. 2 1
      src/or/directory.c
  2. 10 5
      src/or/dirserv.c
  3. 2 1
      src/or/or.h

+ 2 - 1
src/or/directory.c

@@ -2708,7 +2708,8 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
     conn->fingerprint_stack = smartlist_create();
     res = dirserv_get_routerdesc_fingerprints(conn->fingerprint_stack, url,
                                           &msg,
-                                          !connection_dir_is_encrypted(conn));
+                                          !connection_dir_is_encrypted(conn),
+                                          is_extra);
 
     if (!strcmpstart(url, "fp/")) {
       request_type = compressed?"/tor/server/fp.z":"/tor/server/fp";

+ 10 - 5
src/or/dirserv.c

@@ -2680,7 +2680,8 @@ dirserv_get_networkstatus_v2(smartlist_t *result,
  */
 int
 dirserv_get_routerdesc_fingerprints(smartlist_t *fps_out, const char *key,
-                                    const char **msg, int for_unencrypted_conn)
+                                    const char **msg, int for_unencrypted_conn,
+                                    int is_extrainfo)
 {
   int by_id = 1;
   *msg = NULL;
@@ -2708,11 +2709,15 @@ dirserv_get_routerdesc_fingerprints(smartlist_t *fps_out, const char *key,
   }
 
   if (for_unencrypted_conn) {
-    /* Remove anything whose purpose isn't general. */
+    /* Remove anything that insists it not be sent unencrypted. */
     SMARTLIST_FOREACH(fps_out, char *, cp, {
-        signed_descriptor_t *sd =
-          by_id ? get_signed_descriptor_by_fp(cp,0,0) :
-                  router_get_by_descriptor_digest(cp);
+        signed_descriptor_t *sd;
+        if (by_id)
+          sd = get_signed_descriptor_by_fp(cp,is_extrainfo,0);
+        else if (is_extrainfo)
+          sd = extrainfo_get_by_descriptor_digest(cp);
+        else
+          sd = router_get_by_descriptor_digest(cp);
         if (sd && !sd->send_unencrypted) {
           tor_free(cp);
           SMARTLIST_DEL_CURRENT(fps_out, cp);

+ 2 - 1
src/or/or.h

@@ -3467,7 +3467,8 @@ void dirserv_get_networkstatus_v2_fingerprints(smartlist_t *result,
                                                const char *key);
 int dirserv_get_routerdesc_fingerprints(smartlist_t *fps_out, const char *key,
                                         const char **msg,
-                                        int for_unencrypted_conn);
+                                        int for_unencrypted_conn,
+                                        int is_extrainfo);
 int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
                             const char **msg);
 void dirserv_orconn_tls_done(const char *address,