diff options
author | Kozlov Dmitry <xeb@mail.ru> | 2012-05-28 12:18:10 +0400 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2012-05-28 12:18:10 +0400 |
commit | 2065efc2f718ddd29432e3fa9ef5b1afb308ba8c (patch) | |
tree | edd61ada9c36f6ae8df84061dbdbab659e7d275d /accel-pppd/auth/auth_mschap_v1.c | |
parent | 0d19e3bbe4ed663c3cdd4aeb666df782cd81c35c (diff) | |
download | accel-ppp-2065efc2f718ddd29432e3fa9ef5b1afb308ba8c.tar.gz accel-ppp-2065efc2f718ddd29432e3fa9ef5b1afb308ba8c.zip |
auth_chap*: use previous challenge value in packet resend instead of generating new one
Diffstat (limited to 'accel-pppd/auth/auth_mschap_v1.c')
-rw-r--r-- | accel-pppd/auth/auth_mschap_v1.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/accel-pppd/auth/auth_mschap_v1.c b/accel-pppd/auth/auth_mschap_v1.c index b8dd6cc1..f0b58f45 100644 --- a/accel-pppd/auth/auth_mschap_v1.c +++ b/accel-pppd/auth/auth_mschap_v1.c @@ -78,7 +78,7 @@ struct chap_auth_data_t int started:1; }; -static void chap_send_challenge(struct chap_auth_data_t *ad); +static void chap_send_challenge(struct chap_auth_data_t *ad, int new); static void chap_recv(struct ppp_handler_t *h); static int chap_check_response(struct chap_auth_data_t *ad, struct chap_response_t *res, const char *name); static void chap_timeout_timer(struct triton_timer_t *t); @@ -135,7 +135,7 @@ static int chap_start(struct ppp_t *ppp, struct auth_data_t *auth) ppp_register_chan_handler(ppp, &d->h); - chap_send_challenge(d); + chap_send_challenge(d, 1); return 0; } @@ -169,7 +169,7 @@ static void chap_timeout_timer(struct triton_timer_t *t) ppp_auth_failed(d->ppp, NULL); } else { --d->id; - chap_send_challenge(d); + chap_send_challenge(d, 0); } } @@ -177,7 +177,7 @@ static void chap_restart_timer(struct triton_timer_t *t) { struct chap_auth_data_t *d = container_of(t, typeof(*d), interval); - chap_send_challenge(d); + chap_send_challenge(d, 1); } static int lcp_send_conf_req(struct ppp_t *ppp, struct auth_data_t *d, uint8_t *ptr) @@ -227,7 +227,7 @@ static void chap_send_success(struct chap_auth_data_t *ad) _free(hdr); } -static void chap_send_challenge(struct chap_auth_data_t *ad) +static void chap_send_challenge(struct chap_auth_data_t *ad, int new) { struct chap_challenge_t msg = { .hdr.proto = htons(PPP_CHAP), @@ -237,7 +237,9 @@ static void chap_send_challenge(struct chap_auth_data_t *ad) .val_size = VALUE_SIZE, }; - read(urandom_fd, ad->val, VALUE_SIZE); + if (new) + read(urandom_fd, ad->val, VALUE_SIZE); + memcpy(msg.val, ad->val, VALUE_SIZE); if (conf_ppp_verbose) { @@ -446,7 +448,7 @@ static int chap_restart(struct ppp_t *ppp, struct auth_data_t *auth) { struct chap_auth_data_t *d = container_of(auth, typeof(*d), auth); - chap_send_challenge(d); + chap_send_challenge(d, 1); return 0; } |