summaryrefslogtreecommitdiff
path: root/accel-pppd/auth/auth_mschap_v1.c
diff options
context:
space:
mode:
authorKozlov Dmitry <xeb@mail.ru>2012-05-28 12:18:10 +0400
committerKozlov Dmitry <xeb@mail.ru>2012-05-28 12:18:10 +0400
commit2065efc2f718ddd29432e3fa9ef5b1afb308ba8c (patch)
treeedd61ada9c36f6ae8df84061dbdbab659e7d275d /accel-pppd/auth/auth_mschap_v1.c
parent0d19e3bbe4ed663c3cdd4aeb666df782cd81c35c (diff)
downloadaccel-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.c16
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;
}