X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=site.c;h=f268af34c133b7f1b4a104c0833c717dff09f657;hb=fe5fe3a8003447476661dc468e3714b490ab9500;hp=afa85e886ebf27da76236db92405906be13ec26f;hpb=90d7e3ad26101cf3538171aec2d194e9de1aaed5;p=secnet.git diff --git a/site.c b/site.c index afa85e8..f268af3 100644 --- a/site.c +++ b/site.c @@ -207,7 +207,7 @@ static void transport_setup_msgok(struct site *st, const struct comm_addr *a); static void transport_data_msgok(struct site *st, const struct comm_addr *a); static bool_t transport_compute_setupinit_peers(struct site *st, const struct comm_addr *configured_addr /* 0 if none or not found */, - const struct comm_addr *prod_hint_addr /* 0 if none */); + const struct comm_addr *incoming_packet_addr /* 0 if none */); static void transport_resolve_complete(struct site *st, const struct comm_addr *a); static void transport_resolve_complete_tardy(struct site *st, @@ -549,9 +549,9 @@ static bool_t generate_msg(struct site *st, uint32_t type, cstring_t what) append_string_xinfo_done(&st->buffer,&xia); buf_append_string(&st->buffer,st->remotename); - memcpy(buf_append(&st->buffer,NONCELEN),st->localN,NONCELEN); + BUF_ADD_OBJ(append,&st->buffer,st->localN); if (type==LABEL_MSG1) return True; - memcpy(buf_append(&st->buffer,NONCELEN),st->remoteN,NONCELEN); + BUF_ADD_OBJ(append,&st->buffer,st->remoteN); if (type==LABEL_MSG2) return True; if (hacky_par_mid_failnow()) return False; @@ -1328,8 +1328,8 @@ static void enter_state_run(struct site *st) st->setup_session_id=0; transport_peers_clear(st,&st->setup_peers); - memset(st->localN,0,NONCELEN); - memset(st->remoteN,0,NONCELEN); + FILLZERO(st->localN); + FILLZERO(st->remoteN); dispose_transform(&st->new_transform); memset(st->dhsecret,0,st->dh->len); memset(st->sharedsecret,0,st->sharedsecretlen); @@ -1630,7 +1630,7 @@ static bool_t site_incoming(void *sst, struct buffer_if *buf, if (st->state==SITE_RUN || st->state==SITE_RESOLVE || st->state==SITE_WAIT) { /* We should definitely process it */ - transport_record_peer(st,&st->setup_peers,source,"msg1"); + transport_compute_setupinit_peers(st,0,source); if (process_msg1(st,buf,source,&named_msg)) { slog(st,LOG_SETUP_INIT,"key setup initiated by peer"); bool_t entered=enter_new_state(st,SITE_SENTMSG2); @@ -1696,7 +1696,7 @@ static bool_t site_incoming(void *sst, struct buffer_if *buf, because our peer's forgotten the key */ if (get_uint32(buf->start+4)==st->current.remote_session_id) { bool_t initiated; - initiated = initiate_key_setup(st,"received a NAK",0); + initiated = initiate_key_setup(st,"received a NAK",source); if (!initiated) generate_send_prod(st,source); } else { slog(st,LOG_SEC,"bad incoming NAK"); @@ -2094,16 +2094,16 @@ static void transport_record_peer(struct site *st, transport_peers *peers, static bool_t transport_compute_setupinit_peers(struct site *st, const struct comm_addr *configured_addr /* 0 if none or not found */, - const struct comm_addr *prod_hint_addr /* 0 if none */) { + const struct comm_addr *incoming_packet_addr /* 0 if none */) { - if (!configured_addr && !prod_hint_addr && + if (!configured_addr && !incoming_packet_addr && !transport_peers_valid(&st->peers)) return False; slog(st,LOG_SETUP_INIT, "using:%s%s %d old peer address(es)", configured_addr ? " configured address;" : "", - prod_hint_addr ? " PROD hint address;" : "", + incoming_packet_addr ? " incoming packet address;" : "", st->peers.npeers); /* Non-mobile peers have st->peers.npeers==0 or ==1, since they @@ -2114,8 +2114,9 @@ static bool_t transport_compute_setupinit_peers(struct site *st, transport_peers_copy(st,&st->setup_peers,&st->peers); - if (prod_hint_addr) - transport_record_peer(st,&st->setup_peers,prod_hint_addr,"prod"); + if (incoming_packet_addr) + transport_record_peer(st,&st->setup_peers,incoming_packet_addr, + "incoming"); if (configured_addr) transport_record_peer(st,&st->setup_peers,configured_addr,"setupinit");