* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#define RCSID "$Id: lcp.c,v 1.65 2003/03/03 05:11:46 paulus Exp $"
+#define RCSID "$Id: lcp.c,v 1.70 2003/07/28 12:25:41 carlsonj Exp $"
/*
* TODO:
#include "pppd.h"
#include "fsm.h"
#include "lcp.h"
-#include "chap.h"
+#include "chap-new.h"
#include "magic.h"
static const char rcsid[] = RCSID;
lcp_finished(f);
} else
- fsm_close(&lcp_fsm[unit], reason);
+ fsm_close(f, reason);
}
try.neg = 0; \
}
+ /*
+ * NOTE! There must be no assignments to individual fields of *go in
+ * the code below. Any such assignment is a BUG!
+ */
/*
* We don't care if they want to send us smaller packets than
* we want. Therefore, accept any MRU less than what we asked for,
try.neg_eap = 0;
/* Try to set up to use their suggestion, if possible */
if (CHAP_CANDIGEST(go->chap_mdtype, cichar))
- go->chap_mdtype = CHAP_MDTYPE_D(cichar);
+ try.chap_mdtype = CHAP_MDTYPE_D(cichar);
} else if (go->neg_chap) {
/*
* We were asking for our preferred algorithm, they must
if (cichar != CHAP_DIGEST(go->chap_mdtype)) {
if (CHAP_CANDIGEST(go->chap_mdtype, cichar)) {
/* Use their suggestion if we support it ... */
- go->chap_mdtype = CHAP_MDTYPE_D(cichar);
+ try.chap_mdtype = CHAP_MDTYPE_D(cichar);
} else {
/* ... otherwise, try our next-preferred algorithm. */
try.chap_mdtype &= ~(CHAP_MDTYPE(try.chap_mdtype));
* An option we don't recognize represents the peer asking to
* negotiate some option we don't support, so ignore it.
*/
- while (len > CILEN_VOID) {
+ while (len >= CILEN_VOID) {
GETCHAR(citype, p);
GETCHAR(cilen, p);
if (cilen < CILEN_VOID || (len -= cilen) < 0)
}
if (!ao->neg_upap) { /* we don't want to do PAP */
orc = CONFNAK; /* NAK it and suggest CHAP or EAP */
+ PUTCHAR(CI_AUTHTYPE, nakp);
if (ao->neg_eap) {
PUTCHAR(CILEN_SHORT, nakp);
PUTSHORT(PPP_EAP, nakp);
} else {
- PUTCHAR(CI_AUTHTYPE, nakp);
PUTCHAR(CILEN_CHAP, nakp);
PUTSHORT(PPP_CHAP, nakp);
PUTCHAR(CHAP_DIGEST(ao->chap_mdtype), nakp);
printer(arg, "chap");
if (p < optend) {
switch (*p) {
- case CHAP_DIGEST_MD5:
+ case CHAP_MD5:
printer(arg, " MD5");
++p;
break;