aboutsummaryrefslogtreecommitdiff
path: root/src/or/dirserv.c
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-07-21 09:13:12 +0000
committerRoger Dingledine <arma@torproject.org>2004-07-21 09:13:12 +0000
commitecc900925606c5e7b5ad538d38a789f5d2add0d2 (patch)
tree50ee96cc258845f4442248aca72cbe80e87aeff9 /src/or/dirserv.c
parent906d1aa99fa79a6e1f6cb16ab16bae1ab6cd9030 (diff)
downloadtor-ecc900925606c5e7b5ad538d38a789f5d2add0d2.tar
tor-ecc900925606c5e7b5ad538d38a789f5d2add0d2.tar.gz
authdirservers accept the uploading of unverified descriptors.
fix a bunch of bugs in router_update_status_from_smartlist() (Nick, did I get them all, or was there a trickier one still hiding?) svn:r2081
Diffstat (limited to 'src/or/dirserv.c')
-rw-r--r--src/or/dirserv.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 82e081b34..66980b49f 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -283,6 +283,7 @@ dirserv_add_descriptor(const char **desc)
const char *cp;
size_t desc_len;
time_t now;
+ int verified=1; /* whether we knew its fingerprint already */
if (!descriptor_list)
descriptor_list = smartlist_create();
@@ -311,23 +312,23 @@ dirserv_add_descriptor(const char **desc)
}
/* Okay. Now check whether the fingerprint is recognized. */
r = dirserv_router_fingerprint_is_known(ri);
- if(r<1) {
- if(r==0) {
- char fp[FINGERPRINT_LEN+1];
- log_fn(LOG_WARN, "Unknown nickname %s (%s:%d). Not adding.",
- ri->nickname, ri->address, ri->or_port);
- if (crypto_pk_get_fingerprint(ri->identity_pkey, fp) < 0) {
- log_fn(LOG_WARN, "Error computing fingerprint for %s", ri->nickname);
- } else {
- log_fn(LOG_WARN, "Fingerprint line: %s %s", ri->nickname, fp);
- }
- } else {
- log_fn(LOG_WARN, "Known nickname %s, wrong fingerprint. Not adding.", ri->nickname);
- }
+ if(r==-1) {
+ log_fn(LOG_WARN, "Known nickname %s, wrong fingerprint. Not adding.", ri->nickname);
routerinfo_free(ri);
*desc = end;
return 0;
}
+ if(r==0) {
+ char fp[FINGERPRINT_LEN+1];
+ log_fn(LOG_WARN, "Unknown nickname %s (%s:%d). Adding.",
+ ri->nickname, ri->address, ri->or_port);
+ if (crypto_pk_get_fingerprint(ri->identity_pkey, fp) < 0) {
+ log_fn(LOG_WARN, "Error computing fingerprint for %s", ri->nickname);
+ } else {
+ log_fn(LOG_WARN, "Fingerprint line: %s %s", ri->nickname, fp);
+ }
+ verified = 0;
+ }
/* Is there too much clock skew? */
now = time(NULL);
if (ri->published_on > now+ROUTER_ALLOW_SKEW) {
@@ -378,7 +379,8 @@ dirserv_add_descriptor(const char **desc)
strncpy(ent->descriptor, start, desc_len);
ent->descriptor[desc_len] = '\0';
ent->router = ri;
- ent->verified = 1; /* XXXX008 support other possibilities. */
+ /* XXX008 is ent->verified useful/used for anything? */
+ ent->verified = verified; /* XXXX008 support other possibilities. */
smartlist_add(descriptor_list, ent);
*desc = end;
@@ -705,7 +707,7 @@ static int generate_runningrouters(crypto_pk_env_t *private_key)
"directory-signature %s\n"
"-----BEGIN SIGNATURE-----\n",
published, cp, options.Nickname);
- free(cp);
+ tor_free(cp);
if (router_get_runningrouters_hash(s,digest)) {
log_fn(LOG_WARN,"couldn't compute digest");
return -1;