diff options
author | Kozlov Dmitry <dima@server> | 2011-08-16 13:08:54 +0400 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2011-08-16 13:08:54 +0400 |
commit | 2f48232a6f2fcba1707aa772e571aced765aff91 (patch) | |
tree | 84762d356f02ac22500c05150ff9b67be27c9f83 /accel-pppd/ppp/ccp_mppe.c | |
parent | c2cd908d15d70219b7154653ab088837d4c9613a (diff) | |
download | accel-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.c | 13 |
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; } } |