diff options
author | brian <brian@FreeBSD.org> | 1999-01-12 21:50:20 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1999-01-12 21:50:20 +0000 |
commit | db2579cb8b4ed0609373eecdd370cdb2dbd78fbf (patch) | |
tree | 9ceab534533e8c7be702eeefba819094492bdd50 /usr.sbin/ppp/datalink.c | |
parent | 3ffba58dfcb00c94ea1c3ee7813b96ddff88cec3 (diff) | |
download | FreeBSD-src-db2579cb8b4ed0609373eecdd370cdb2dbd78fbf.zip FreeBSD-src-db2579cb8b4ed0609373eecdd370cdb2dbd78fbf.tar.gz |
If we've configured CBCP *and* another not-so-important
CALLBACK protocol and end up agreeing CBCP, DTRT and go
into CBCP phase rather than mistakenly terminating as
if CBCP wasn't agreed.
Problem reported by: Alexander Dubinin <alex@nstl.nnov.ru>
Diffstat (limited to 'usr.sbin/ppp/datalink.c')
-rw-r--r-- | usr.sbin/ppp/datalink.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/usr.sbin/ppp/datalink.c b/usr.sbin/ppp/datalink.c index 97ddd0c..2f04f27 100644 --- a/usr.sbin/ppp/datalink.c +++ b/usr.sbin/ppp/datalink.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: datalink.c,v 1.22 1998/12/15 19:12:24 brian Exp $ + * $Id: datalink.c,v 1.23 1999/01/08 09:04:58 brian Exp $ */ #include <sys/types.h> @@ -553,13 +553,17 @@ datalink_CBCPFailed(struct datalink *dl) void datalink_AuthOk(struct datalink *dl) { - if (dl->physical->link.lcp.his_callback.opmask == - CALLBACK_BIT(CALLBACK_CBCP) || - dl->physical->link.lcp.want_callback.opmask == - CALLBACK_BIT(CALLBACK_CBCP)) { + if ((dl->physical->link.lcp.his_callback.opmask & + CALLBACK_BIT(CALLBACK_CBCP) || + dl->physical->link.lcp.want_callback.opmask & + CALLBACK_BIT(CALLBACK_CBCP)) && + !(dl->physical->link.lcp.want_callback.opmask & + CALLBACK_BIT(CALLBACK_AUTH))) { + /* We must have agreed CBCP if AUTH isn't there any more */ datalink_NewState(dl, DATALINK_CBCP); cbcp_Up(&dl->cbcp); } else if (dl->physical->link.lcp.want_callback.opmask) { + /* It's not CBCP */ log_Printf(LogPHASE, "%s: Shutdown and await peer callback\n", dl->name); datalink_NewState(dl, DATALINK_LCP); fsm_Close(&dl->physical->link.lcp.fsm); |