replaced call from ppp_write to ppp_write_pbuf

This commit is contained in:
Sylvain Rochet 2012-06-21 23:31:23 +02:00
parent 8576ee0981
commit bda73b1bc9

View File

@ -226,6 +226,7 @@ void chap_auth_with_peer(ppp_pcb *pcb, char *our_name, int digest_code) {
*/ */
static void chap_timeout(void *arg) { static void chap_timeout(void *arg) {
ppp_pcb *pcb = (ppp_pcb*)arg; ppp_pcb *pcb = (ppp_pcb*)arg;
struct pbuf *p;
pcb->chap_server.flags &= ~TIMEOUT_PENDING; pcb->chap_server.flags &= ~TIMEOUT_PENDING;
if ((pcb->chap_server.flags & CHALLENGE_VALID) == 0) { if ((pcb->chap_server.flags & CHALLENGE_VALID) == 0) {
@ -239,7 +240,11 @@ static void chap_timeout(void *arg) {
return; return;
} }
ppp_write(pcb, pcb->chap_server.challenge, pcb->chap_server.challenge_pktlen); p = pbuf_alloc(PBUF_RAW, (u16_t)(pcb->chap_server.challenge_pktlen), PBUF_RAM);
if(NULL == p)
return;
MEMCPY(p->payload, pcb->chap_server.challenge, pcb->chap_server.challenge_pktlen);
ppp_write_pbuf(pcb, p);
++pcb->chap_server.challenge_xmits; ++pcb->chap_server.challenge_xmits;
pcb->chap_server.flags |= TIMEOUT_PENDING; pcb->chap_server.flags |= TIMEOUT_PENDING;
TIMEOUT(chap_timeout, arg, pcb->settings.chap_timeout_time); TIMEOUT(chap_timeout, arg, pcb->settings.chap_timeout_time);
@ -417,11 +422,15 @@ static void chap_respond(ppp_pcb *pcb, int id,
unsigned char *pkt, int len) { unsigned char *pkt, int len) {
int clen, nlen; int clen, nlen;
int secret_len; int secret_len;
unsigned char *p; struct pbuf *p;
unsigned char response[RESP_MAX_PKTLEN]; u_char *outp;
char rname[MAXNAMELEN+1]; char rname[MAXNAMELEN+1];
char secret[MAXSECRETLEN+1]; char secret[MAXSECRETLEN+1];
p = pbuf_alloc(PBUF_RAW, (u16_t)(RESP_MAX_PKTLEN), PBUF_RAM);
if(NULL == p)
return;
if ((pcb->chap_client.flags & (LOWERUP | AUTH_STARTED)) != (LOWERUP | AUTH_STARTED)) if ((pcb->chap_client.flags & (LOWERUP | AUTH_STARTED)) != (LOWERUP | AUTH_STARTED))
return; /* not ready */ return; /* not ready */
if (len < 2 || len < pkt[0] + 1) if (len < 2 || len < pkt[0] + 1)
@ -444,26 +453,27 @@ static void chap_respond(ppp_pcb *pcb, int id,
warn("No CHAP secret found for authenticating us to %q", rname); warn("No CHAP secret found for authenticating us to %q", rname);
} }
p = response; outp = p->payload;
MAKEHEADER(p, PPP_CHAP); MAKEHEADER(outp, PPP_CHAP);
p += CHAP_HDRLEN; outp += CHAP_HDRLEN;
pcb->chap_client.digest->make_response(p, id, pcb->chap_client.name, pkt, pcb->chap_client.digest->make_response(outp, id, pcb->chap_client.name, pkt,
secret, secret_len, pcb->chap_client.priv); secret, secret_len, pcb->chap_client.priv);
memset(secret, 0, secret_len); memset(secret, 0, secret_len);
clen = *p; clen = *outp;
nlen = strlen(pcb->chap_client.name); nlen = strlen(pcb->chap_client.name);
memcpy(p + clen + 1, pcb->chap_client.name, nlen); memcpy(outp + clen + 1, pcb->chap_client.name, nlen);
p = response + PPP_HDRLEN; outp = (u_char*)p->payload + PPP_HDRLEN;
len = CHAP_HDRLEN + clen + 1 + nlen; len = CHAP_HDRLEN + clen + 1 + nlen;
p[0] = CHAP_RESPONSE; outp[0] = CHAP_RESPONSE;
p[1] = id; outp[1] = id;
p[2] = len >> 8; outp[2] = len >> 8;
p[3] = len; outp[3] = len;
ppp_write(pcb, response, PPP_HDRLEN + len); pbuf_realloc(p, PPP_HDRLEN + len);
ppp_write_pbuf(pcb, p);
} }
static void chap_handle_status(ppp_pcb *pcb, int code, int id, static void chap_handle_status(ppp_pcb *pcb, int code, int id,