summaryrefslogtreecommitdiff
path: root/accel-pppd/ppp/ccp_mppe.c
diff options
context:
space:
mode:
authorKozlov Dmitry <dima@server>2011-08-16 13:08:54 +0400
committerKozlov Dmitry <dima@server>2011-08-16 13:08:54 +0400
commit2f48232a6f2fcba1707aa772e571aced765aff91 (patch)
tree84762d356f02ac22500c05150ff9b67be27c9f83 /accel-pppd/ppp/ccp_mppe.c
parentc2cd908d15d70219b7154653ab088837d4c9613a (diff)
downloadaccel-ppp-2f48232a6f2fcba1707aa772e571aced765aff91.tar.gz
accel-ppp-2f48232a6f2fcba1707aa772e571aced765aff91.zip
ppp: improved CCP/IPCP handling
Diffstat (limited to 'accel-pppd/ppp/ccp_mppe.c')
-rw-r--r--accel-pppd/ppp/ccp_mppe.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/accel-pppd/ppp/ccp_mppe.c b/accel-pppd/ppp/ccp_mppe.c
index cdc8950a..7acf568c 100644
--- a/accel-pppd/ppp/ccp_mppe.c
+++ b/accel-pppd/ppp/ccp_mppe.c
@@ -167,7 +167,7 @@ static int mppe_recv_conf_req(struct ppp_ccp_t *ccp, struct ccp_option_t *opt, u
} else if (mppe_opt->policy == 1) {
if (ntohl(opt32->val) == (MPPE_S | MPPE_H))
mppe_opt->mppe = 1;
- else if (((ntohl(opt32->val) & (MPPE_S | MPPE_H)) == (MPPE_S | MPPE_H)) || conf_mppe == 1) {
+ else if ((ntohl(opt32->val) & (MPPE_S | MPPE_H)) || conf_mppe == 1) {
mppe_opt->mppe = 1;
return CCP_OPT_NAK;
} else if (opt32->val) {
@@ -258,14 +258,18 @@ static void ev_mppe_keys(struct ev_mppe_keys_t *ev)
struct ppp_ccp_t *ccp = ccp_find_layer_data(ev->ppp);
struct mppe_option_t *mppe_opt = container_of(ccp_find_option(ev->ppp, &mppe_opt_hnd), typeof(*mppe_opt), opt);
+ memcpy(mppe_opt->recv_key, ev->recv_key, 16);
+ memcpy(mppe_opt->send_key, ev->send_key, 16);
+
+ if (ev->policy == -1)
+ return;
+
if ((ev->type & 0x04) == 0) {
log_ppp_warn("mppe: 128-bit session keys not allowed, disabling mppe ...\n");
mppe_opt->mppe = 0;
return;
}
- memcpy(mppe_opt->recv_key, ev->recv_key, 16);
- memcpy(mppe_opt->send_key, ev->send_key, 16);
mppe_opt->policy = ev->policy;
if (ev->policy == 2) {
@@ -276,6 +280,9 @@ static void ev_mppe_keys(struct ev_mppe_keys_t *ev)
mppe_opt->mppe = 1;
else
mppe_opt->mppe = -1;
+
+ if (conf_mppe == 2)
+ ccp->passive = 1;
}
}