]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Make dirserv_get_routerdesc_fingerprints() treat extrainfos with send_unencrypted...
authorNick Mathewson <nickm@torproject.org>
Tue, 6 Jan 2009 15:37:51 +0000 (15:37 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 6 Jan 2009 15:37:51 +0000 (15:37 +0000)
svn:r17953

src/or/directory.c
src/or/dirserv.c
src/or/or.h

index d628035bb0c073ef537b3af8a14879a30fca9891..4baee04045b8eb261fe624e86eb1667a36c7cbf0 100644 (file)
@@ -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";
index eff0a380dcbbd32779b389ee2741c2b1a36b589d..2647fe275c0954d1d923902b3834ad684738248c 100644 (file)
@@ -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);
index 765669aa2ef7ee332bfe01210a78fbc55ea2cfbf..de1db893905137c80a707c016d4f999b657b0ad0 100644 (file)
@@ -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,