|
@@ -804,6 +804,7 @@ router_rebuild_descriptor(int force)
|
|
|
if (authdir_mode(options))
|
|
|
ri->is_valid = ri->is_named = 1; /* believe in yourself */
|
|
|
if (options->MyFamily) {
|
|
|
+ int i;
|
|
|
smartlist_t *family;
|
|
|
if (!warned_nonexistent_family)
|
|
|
warned_nonexistent_family = smartlist_create();
|
|
@@ -840,6 +841,18 @@ router_rebuild_descriptor(int force)
|
|
|
}
|
|
|
tor_free(name);
|
|
|
});
|
|
|
+
|
|
|
+ smartlist_sort_strings(ri->declared_family);
|
|
|
+ for (i = 1; i < smartlist_len(ri->declared_family); ++i) {
|
|
|
+ const char *a, *b;
|
|
|
+ a = smartlist_get(ri->declared_family, i-1);
|
|
|
+ b = smartlist_get(ri->declared_family, i);
|
|
|
+ if (!strcmp(a,b)) {
|
|
|
+ tor_free(smartlist_get(ri->declared_family, i));
|
|
|
+ smartlist_del_keeporder(ri->declared_family, i--);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
smartlist_free(family);
|
|
|
}
|
|
|
ri->cache_info.signed_descriptor_body = tor_malloc(8192);
|