diff options
author | Kozlov Dmitry <dima@server> | 2010-08-23 18:27:31 +0400 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2010-08-23 18:33:09 +0400 |
commit | 9e52c15995a90fff71087cda4bb0c600b1d1d28d (patch) | |
tree | ac49c8cc0eeba2d2a0833b68d5809fd568ef7560 /accel-pptpd/ppp_ccp.c | |
parent | 18d93f51ef96af6a6779c3880ff5d06f49467cc4 (diff) | |
download | accel-ppp-9e52c15995a90fff71087cda4bb0c600b1d1d28d.tar.gz accel-ppp-9e52c15995a90fff71087cda4bb0c600b1d1d28d.zip |
implemented chap authentication
fixed auth type selection when configure-nak received
Diffstat (limited to 'accel-pptpd/ppp_ccp.c')
-rw-r--r-- | accel-pptpd/ppp_ccp.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/accel-pptpd/ppp_ccp.c b/accel-pptpd/ppp_ccp.c index 0a7246d6..3c8c5cdb 100644 --- a/accel-pptpd/ppp_ccp.c +++ b/accel-pptpd/ppp_ccp.c @@ -449,8 +449,10 @@ static int ccp_recv_conf_ack(struct ppp_ccp_t *ccp,uint8_t *data,int size) { log_debug(" "); lopt->h->print(log_debug,lopt,data); - if (lopt->h->recv_conf_ack) - lopt->h->recv_conf_ack(ccp,lopt,data); + if (!lopt->h->recv_conf_ack) + break; + if (lopt->h->recv_conf_ack(ccp,lopt,data)) + res=-1; break; } } @@ -468,7 +470,13 @@ static void ccp_recv(struct ppp_handler_t*h) struct ppp_ccp_t *ccp=container_of(h,typeof(*ccp),hnd); int r; char *term_msg; - + + if (ccp->fsm.fsm_state==FSM_Initial || ccp->fsm.fsm_state==FSM_Closed) + { + log_error("CCP: discaring packet\n"); + return; + } + if (ccp->ppp->unit_buf_size<PPP_HEADERLEN+2) { log_warn("CCP: short packet received\n"); @@ -504,8 +512,10 @@ static void ccp_recv(struct ppp_handler_t*h) ppp_terminate(ccp->ppp); break; case CONFACK: - ccp_recv_conf_ack(ccp,(uint8_t*)(hdr+1),ntohs(hdr->len)-PPP_HDRLEN); - ppp_fsm_recv_conf_ack(&ccp->fsm); + if (ccp_recv_conf_ack(ccp,(uint8_t*)(hdr+1),ntohs(hdr->len)-PPP_HDRLEN)) + ppp_terminate(ccp->ppp); + else + ppp_fsm_recv_conf_ack(&ccp->fsm); break; case CONFNAK: ccp_recv_conf_nak(ccp,(uint8_t*)(hdr+1),ntohs(hdr->len)-PPP_HDRLEN); |