X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=site.c;h=72cee24fc8d094d791a5ed8dab4b17ae71224671;hb=503cd8a1792a51fea0cb1d474e646cb6978633ff;hp=5d2f519e482b8bbcc0fc299a33f3d40a10569a23;hpb=2d1e1de90fc3e7c5d49932d2393b68f1e1b90119;p=secnet.git diff --git a/site.c b/site.c index 5d2f519..72cee24 100644 --- a/site.c +++ b/site.c @@ -318,7 +318,6 @@ struct site { int ncomms; struct resolver_if *resolver; struct log_if *log; - struct hash_if *defhash; struct random_if *random; struct privcache_if *privkeys; struct sigprivkey_if *privkey_fixed; @@ -663,10 +662,7 @@ static bool_t generate_msg(struct site *st, uint32_t type, cstring_t what, struct xinfoadd xia; append_string_xinfo_start(&st->buffer,&xia,st->localname); - if ((st->local_capabilities & st->early_capabilities) || - (type != LABEL_MSG1)) { - buf_append_uint32(&st->buffer,st->local_capabilities); - } + buf_append_uint32(&st->buffer,st->local_capabilities); if (type_is_msg34(type)) { buf_append_uint16(&st->buffer,st->mtu_target); } @@ -905,7 +901,7 @@ static void peerkeys_maybe_incorporate(struct site *st, const char *file, int logcl_enoent) { struct peer_keyset *atsuffix= - keyset_load(file,&st->scratch,st->log,logcl_enoent,st->defhash); + keyset_load(file,&st->scratch,st->log,logcl_enoent); if (!atsuffix) return; if (st->peerkeys_current && @@ -2318,18 +2314,6 @@ static void site_childpersist_clearkeys(void *sst, uint32_t newphase) crypto operations, but that's a task for another day. */ } -static void setup_sethash(struct site *st, dict_t *dict, - struct cloc loc, - sig_sethash_fn *sethash, void *sigkey_st) { - if (!st->defhash) - cfgfatal(loc,"site","other settings imply `hash' key is needed"); - sethash(sigkey_st,st->defhash); -} -#define SETUP_SETHASH(k) do{ \ - if ((k)->sethash) \ - setup_sethash(st,dict,loc, (k)->sethash,(k)->st); \ -}while(0) - static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context, list_t *args) { @@ -2358,9 +2342,19 @@ static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context, cfgfatal(loc,"site","parameter must be a dictionary\n"); dict=item->data.dict; + st->log=find_cl_if(dict,"log",CL_LOG,True,"site",loc); + st->log_events=string_list_to_word(dict_lookup(dict,"log-events"), + log_event_table,"site"); + st->localname=dict_read_string(dict, "local-name", True, "site", loc); st->remotename=dict_read_string(dict, "name", True, "site", loc); + st->tunname=safe_malloc(strlen(st->localname)+strlen(st->remotename)+5, + "site_apply"); + sprintf(st->tunname,"%s<->%s",st->localname,st->remotename); + + /* Now slog is working */ + st->keepalive=dict_read_bool(dict,"keepalive",False,"site",loc,False); st->peer_mobile=dict_read_bool(dict,"mobile",False,"site",loc,False); @@ -2422,16 +2416,12 @@ static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context, } st->resolver=find_cl_if(dict,"resolver",CL_RESOLVER,True,"site",loc); - st->log=find_cl_if(dict,"log",CL_LOG,True,"site",loc); st->random=find_cl_if(dict,"random",CL_RANDOMSRC,True,"site",loc); - st->defhash=find_cl_if(dict,"hash",CL_HASH,True,"site",loc); - st->privkeys=find_cl_if(dict,"key-cache",CL_PRIVCACHE,False,"site",loc); if (!st->privkeys) { st->privkey_fixed= find_cl_if(dict,"local-key",CL_SIGPRIVKEY,True,"site",loc); - SETUP_SETHASH(st->privkey_fixed); } struct sigpubkey_if *fixed_pubkey @@ -2442,14 +2432,12 @@ static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context, pathprefix_template_init(&st->peerkeys_tmpl,st->peerkeys_path, PEERKEYS_SUFFIX_MAXLEN + 1 /* nul */); st->peerkeys_current=keyset_load(st->peerkeys_path, - &st->scratch,st->log,M_ERR, - st->defhash); + &st->scratch,st->log,M_ERR); if (fixed_pubkey) { fixed_pubkey->dispose(fixed_pubkey->st); } } else { assert(fixed_pubkey); - SETUP_SETHASH(fixed_pubkey); NEW(st->peerkeys_current); st->peerkeys_current->refcount=1; st->peerkeys_current->nkeys=1; @@ -2502,16 +2490,9 @@ static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context, "renegotiate-time must be less than key-lifetime\n"); } - st->log_events=string_list_to_word(dict_lookup(dict,"log-events"), - log_event_table,"site"); - st->resolving_count=0; st->allow_send_prod=0; - st->tunname=safe_malloc(strlen(st->localname)+strlen(st->remotename)+5, - "site_apply"); - sprintf(st->tunname,"%s<->%s",st->localname,st->remotename); - /* The information we expect to see in incoming messages of type 1 */ /* fixme: lots of unchecked overflows here, but the results are only corrupted packets rather than undefined behaviour */ @@ -2618,6 +2599,8 @@ static void transport_peers_debug(struct site *st, transport_peers *dst, static void transport_peers_expire(struct site *st, transport_peers *peers) { /* peers must be sorted first */ + if (st->local_mobile) return; + int previous_peers=peers->npeers; struct timeval oldest; oldest.tv_sec = tv_now->tv_sec - st->mobile_peer_expiry;