From 8db502bbfdcb965a862728a85aa66f4c931d3582 Mon Sep 17 00:00:00 2001 From: Brian Somers Date: Mon, 1 Feb 1999 13:42:25 +0000 Subject: [PATCH] If we receive no answer from the server when sending PAP requests, give up (don't sit there indefinitely). --- usr.sbin/ppp/auth.c | 11 +++++++---- usr.sbin/ppp/auth.h | 8 +++++--- usr.sbin/ppp/datalink.c | 8 +++++--- usr.sbin/ppp/pap.c | 11 +++++++++-- usr.sbin/ppp/pap.h | 3 ++- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/usr.sbin/ppp/auth.c b/usr.sbin/ppp/auth.c index f9cc80352a73..c857e02767e4 100644 --- a/usr.sbin/ppp/auth.c +++ b/usr.sbin/ppp/auth.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: auth.c,v 1.34 1998/12/17 00:28:12 brian Exp $ + * $Id: auth.c,v 1.35 1999/01/28 01:56:30 brian Exp $ * * TODO: * o Implement check against with registered IP addresses. @@ -273,7 +273,8 @@ AuthTimeout(void *vauthp) if (--authp->retry > 0) { timer_Start(&authp->authtimer); (*authp->ChallengeFunc)(authp, ++authp->id, authp->physical); - } + } else if (authp->FailedFunc) + (*authp->FailedFunc)(authp->physical); } void @@ -285,9 +286,11 @@ auth_Init(struct authinfo *authinfo) void auth_StartChallenge(struct authinfo *authp, struct physical *physical, - void (*fn)(struct authinfo *, int, struct physical *)) + void (*chal)(struct authinfo *, int, struct physical *), + void (*fail)(struct physical *)) { - authp->ChallengeFunc = fn; + authp->ChallengeFunc = chal; + authp->FailedFunc = fail; authp->physical = physical; timer_Stop(&authp->authtimer); authp->authtimer.func = AuthTimeout; diff --git a/usr.sbin/ppp/auth.h b/usr.sbin/ppp/auth.h index 3766f03816d2..7ac577df90eb 100644 --- a/usr.sbin/ppp/auth.h +++ b/usr.sbin/ppp/auth.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: auth.h,v 1.11 1998/05/21 21:44:03 brian Exp $ + * $Id: auth.h,v 1.12 1998/08/07 18:42:47 brian Exp $ * * TODO: */ @@ -25,6 +25,7 @@ struct bundle; struct authinfo { void (*ChallengeFunc)(struct authinfo *, int, struct physical *); + void (*FailedFunc)(struct physical *); struct pppTimer authtimer; int retry; int id; @@ -39,8 +40,9 @@ extern const char *Auth2Nam(u_short); extern void auth_Init(struct authinfo *); extern void auth_StopTimer(struct authinfo *); extern void auth_StartChallenge(struct authinfo *, struct physical *, - void (*fn)(struct authinfo *, int, - struct physical *)); + void (*)(struct authinfo *, int, + struct physical *), + void (*)(struct physical *)); extern int auth_Validate(struct bundle *, const char *, const char *, struct physical *); extern char *auth_GetSecret(struct bundle *, const char *, int, diff --git a/usr.sbin/ppp/datalink.c b/usr.sbin/ppp/datalink.c index 6fe60de14e17..617cc1d2f9d2 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.25 1999/01/20 18:06:52 brian Exp $ + * $Id: datalink.c,v 1.26 1999/01/28 01:56:31 brian Exp $ */ #include @@ -479,9 +479,11 @@ datalink_LayerUp(void *v, struct fsm *fp) Auth2Nam(dl->physical->link.lcp.his_auth), Auth2Nam(dl->physical->link.lcp.want_auth)); if (dl->physical->link.lcp.his_auth == PROTO_PAP) - auth_StartChallenge(&dl->pap, dl->physical, pap_SendChallenge); + auth_StartChallenge(&dl->pap, dl->physical, pap_SendChallenge, + pap_Failed); if (dl->physical->link.lcp.want_auth == PROTO_CHAP) - auth_StartChallenge(&dl->chap.auth, dl->physical, chap_SendChallenge); + auth_StartChallenge(&dl->chap.auth, dl->physical, chap_SendChallenge, + NULL); } else datalink_AuthOk(dl); } diff --git a/usr.sbin/ppp/pap.c b/usr.sbin/ppp/pap.c index 9bdbb930291e..02fb3292c212 100644 --- a/usr.sbin/ppp/pap.c +++ b/usr.sbin/ppp/pap.c @@ -18,7 +18,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: pap.c,v 1.27 1998/08/26 18:07:57 brian Exp $ + * $Id: pap.c,v 1.28 1999/01/28 01:56:33 brian Exp $ * * TODO: */ @@ -137,6 +137,14 @@ PapValidate(struct bundle *bundle, u_char *name, u_char *key, return auth_Validate(bundle, name, key, physical); } +void +pap_Failed(struct physical *p) +{ + auth_StopTimer(&p->dl->pap); + log_Printf(LogPHASE, "Pap: No response from server\n"); + datalink_AuthNotOk(p->dl); +} + void pap_Input(struct bundle *bundle, struct mbuf *bp, struct physical *physical) { @@ -167,7 +175,6 @@ pap_Input(struct bundle *bundle, struct mbuf *bp, struct physical *physical) * told that I got the answer right. */ datalink_AuthOk(physical->dl); - } else { SendPapCode(php->id, PAP_NAK, "Login incorrect", physical); datalink_AuthNotOk(physical->dl); diff --git a/usr.sbin/ppp/pap.h b/usr.sbin/ppp/pap.h index b4b63af46dce..f0cd5e8ef068 100644 --- a/usr.sbin/ppp/pap.h +++ b/usr.sbin/ppp/pap.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: pap.h,v 1.5.2.5 1998/05/01 19:25:32 brian Exp $ + * $Id: pap.h,v 1.6 1998/05/21 21:47:21 brian Exp $ * * TODO: */ @@ -29,5 +29,6 @@ struct physical; struct authinfo; struct bundle; +extern void pap_Failed(struct physical *); extern void pap_Input(struct bundle *, struct mbuf *, struct physical *); extern void pap_SendChallenge(struct authinfo *, int, struct physical *);