diff options
author | Brian Somers <brian@FreeBSD.org> | 2001-02-04 22:53:11 +0000 |
---|---|---|
committer | Brian Somers <brian@FreeBSD.org> | 2001-02-04 22:53:11 +0000 |
commit | 7f89db65f5dad392aaded37634320e9dfab72f30 (patch) | |
tree | 11a0fe08f4aae90e1968267f0521ed22c999a649 | |
parent | ffd692be66b2a021be17021fb4bddcc5583ca547 (diff) | |
download | src-test2-7f89db65f5dad392aaded37634320e9dfab72f30.tar.gz src-test2-7f89db65f5dad392aaded37634320e9dfab72f30.zip |
Notes
-rw-r--r-- | usr.sbin/ppp/ccp.c | 10 | ||||
-rw-r--r-- | usr.sbin/ppp/ccp.h | 2 | ||||
-rw-r--r-- | usr.sbin/ppp/deflate.c | 4 | ||||
-rw-r--r-- | usr.sbin/ppp/mppe.c | 20 | ||||
-rw-r--r-- | usr.sbin/ppp/pred.c | 1 |
5 files changed, 35 insertions, 2 deletions
diff --git a/usr.sbin/ppp/ccp.c b/usr.sbin/ppp/ccp.c index 6acfc53e8827..f2b7f19c8032 100644 --- a/usr.sbin/ppp/ccp.c +++ b/usr.sbin/ppp/ccp.c @@ -268,7 +268,8 @@ CcpSendConfigReq(struct fsm *fp) ccp->out.algorithm = -1; for (f = 0; f < NALGORITHMS; f++) if (IsEnabled(ccp->cfg.neg[algorithm[f]->Neg]) && - !REJECTED(ccp, algorithm[f]->id)) { + !REJECTED(ccp, algorithm[f]->id) && + (*algorithm[f]->Usable)(fp)) { if (!alloc) for (o = &ccp->out.opt; *o != NULL; o = &(*o)->next) @@ -491,6 +492,7 @@ CcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type, switch (mode_type) { case MODE_REQ: if (IsAccepted(ccp->cfg.neg[algorithm[f]->Neg]) && + (*algorithm[f]->Usable)(fp) && ccp->in.algorithm == -1) { memcpy(&ccp->in.opt, cp, length); switch ((*algorithm[f]->i.Set)(&ccp->in.opt, &ccp->cfg)) { @@ -697,4 +699,10 @@ ccp_SetOpenMode(struct ccp *ccp) return 0; /* No CCP at all */ } +int +ccp_IsUsable(struct fsm *fp) +{ + return 1; +} + struct layer ccplayer = { LAYER_CCP, "ccp", ccp_LayerPush, ccp_LayerPull }; diff --git a/usr.sbin/ppp/ccp.h b/usr.sbin/ppp/ccp.h index 442d65feb1b0..b7f278d28521 100644 --- a/usr.sbin/ppp/ccp.h +++ b/usr.sbin/ppp/ccp.h @@ -106,6 +106,7 @@ struct ccp_algorithm { int id; int Neg; /* ccp_config neg array item */ const char *(*Disp)(struct lcp_opt *); /* Use result immediately ! */ + int (*Usable)(struct fsm *); /* Ok to negotiate ? */ struct { int (*Set)(struct lcp_opt *, const struct ccp_config *); void *(*Init)(struct lcp_opt *); @@ -135,5 +136,6 @@ extern int ccp_ReportStatus(struct cmdargs const *); extern u_short ccp_Proto(struct ccp *); extern void ccp_SetupCallbacks(struct ccp *); extern int ccp_SetOpenMode(struct ccp *); +extern int ccp_IsUsable(struct fsm *); extern struct layer ccplayer; diff --git a/usr.sbin/ppp/deflate.c b/usr.sbin/ppp/deflate.c index aacc438710c3..8908f127e6bd 100644 --- a/usr.sbin/ppp/deflate.c +++ b/usr.sbin/ppp/deflate.c @@ -551,9 +551,10 @@ DeflateTermOutput(void *v) } const struct ccp_algorithm PppdDeflateAlgorithm = { - TY_PPPD_DEFLATE, /* pppd (wrongly) expects this ``type'' field */ + TY_PPPD_DEFLATE, /* Older versions of pppd expected this ``type'' */ CCP_NEG_DEFLATE24, DeflateDispOpts, + ccp_IsUsable, { DeflateSetOptsInput, DeflateInitInput, @@ -576,6 +577,7 @@ const struct ccp_algorithm DeflateAlgorithm = { TY_DEFLATE, /* rfc 1979 */ CCP_NEG_DEFLATE, DeflateDispOpts, + ccp_IsUsable, { DeflateSetOptsInput, DeflateInitInput, diff --git a/usr.sbin/ppp/mppe.c b/usr.sbin/ppp/mppe.c index cbda453c0f9e..617596a816bf 100644 --- a/usr.sbin/ppp/mppe.c +++ b/usr.sbin/ppp/mppe.c @@ -47,7 +47,11 @@ #include "hdlc.h" #include "lcp.h" #include "ccp.h" +#include "throughput.h" +#include "layer.h" +#include "link.h" #include "chap_ms.h" +#include "proto.h" #include "mppe.h" /* @@ -223,6 +227,21 @@ MPPEDispOpts(struct lcp_opt *o) return buf; } +static int +MPPEUsable(struct fsm *fp) +{ + struct lcp *lcp; + int ok; + + lcp = &fp->link->lcp; + ok = (lcp->want_auth == PROTO_CHAP && lcp->want_authtype == 0x81) || + (lcp->his_auth == PROTO_CHAP && lcp->his_authtype == 0x81); + if (!ok) + log_Printf(LogCCP, "MPPE: Not usable without CHAP81\n"); + + return ok; +} + static void MPPEInitOptsOutput(struct lcp_opt *o, const struct ccp_config *cfg) { @@ -414,6 +433,7 @@ const struct ccp_algorithm MPPEAlgorithm = { TY_MPPE, CCP_NEG_MPPE, MPPEDispOpts, + MPPEUsable, { MPPESetOptsInput, MPPEInitInput, diff --git a/usr.sbin/ppp/pred.c b/usr.sbin/ppp/pred.c index d21a28f81d44..6fd300c7a8c1 100644 --- a/usr.sbin/ppp/pred.c +++ b/usr.sbin/ppp/pred.c @@ -323,6 +323,7 @@ const struct ccp_algorithm Pred1Algorithm = { TY_PRED1, CCP_NEG_PRED1, Pred1DispOpts, + ccp_IsUsable, { Pred1SetOptsInput, Pred1InitInput, |