X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fchap.c;h=aa07d0e941e8dfede3df882c86bf818769136921;hb=96a47326d0073d66e287fb05fa34d119f46744ed;hp=a63dde818fa01e0db3fcb14b062541d6180044e1;hpb=9b5e4bcdc6e25f18d20200af78df94d695e428ac;p=ppp.git diff --git a/pppd/chap.c b/pppd/chap.c index a63dde8..aa07d0e 100644 --- a/pppd/chap.c +++ b/pppd/chap.c @@ -1,20 +1,36 @@ /* - * chap_ms.c - Challenge Handshake Authentication Protocol. + * chap.c - Challenge Handshake Authentication Protocol. * - * Copyright (c) 1993 The Australian National University. - * All rights reserved. + * Copyright (c) 1993-2002 Paul Mackerras. All rights reserved. * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the Australian National University. The name of the University - * may not be used to endorse or promote products derived from this - * software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Copyright (c) 1991 Gregory M. Christy. * All rights reserved. @@ -33,7 +49,7 @@ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#define RCSID "$Id: chap.c,v 1.36 2002/10/12 02:30:21 fcusack Exp $" +#define RCSID "$Id: chap.c,v 1.41 2003/07/28 12:25:41 carlsonj Exp $" /* * TODO: @@ -52,12 +68,6 @@ #include "chap_ms.h" #endif -/* Hook for a plugin to say if we can possibly authenticate a peer using CHAP */ -int (*chap_check_hook) __P((void)) = NULL; - -/* Hook for a plugin to get the CHAP password for authenticating us */ -int (*chap_passwd_hook) __P((char *user, char *passwd)) = NULL; - /* Hook for a plugin to validate CHAP challenge */ int (*chap_auth_hook) __P((char *user, u_char *remmd, @@ -84,6 +94,7 @@ static option_t chap_option_list[] = { "Set max #xmits for challenge", OPT_PRIO }, { "chap-interval", o_int, &chap[0].chal_interval, "Set interval for rechallenge", OPT_PRIO }, +#ifdef MSCHAP #ifdef MSLANMAN { "ms-lanman", o_bool, &ms_lanman, "Use LanMan passwd when using MS-CHAP", 1 }, @@ -93,6 +104,7 @@ static option_t chap_option_list[] = { "specify CHAP challenge" }, { "mschap2-peer-challenge", o_string, &mschap2_peer_challenge, "specify CHAP peer challenge" }, +#endif #endif { NULL } }; @@ -165,14 +177,11 @@ ChapInit(unit) /* - * ChapAuthWithPeer - Authenticate us with our peer (start client). + * chap_auth_with_peer - Authenticate us with our peer (start client). * */ void -ChapAuthWithPeer(unit, our_name, digest) - int unit; - char *our_name; - int digest; +chap_auth_with_peer(int unit, char *our_name, int digest) { chap_state *cstate = &chap[unit]; @@ -196,13 +205,10 @@ ChapAuthWithPeer(unit, our_name, digest) /* - * ChapAuthPeer - Authenticate our peer (start server). + * chap_auth_peer - Authenticate our peer (start server). */ void -ChapAuthPeer(unit, our_name, digest) - int unit; - char *our_name; - int digest; +chap_auth_peer(int unit, char *our_name, int digest) { chap_state *cstate = &chap[unit]; @@ -576,10 +582,8 @@ ChapReceiveResponse(cstate, inp, id, len) UNTIMEOUT(ChapChallengeTimeout, cstate); - if (len >= sizeof(rhostname)) - len = sizeof(rhostname) - 1; - BCOPY(inp, rhostname, len); - rhostname[len] = '\000'; + /* Null terminate and clean remote name. */ + slprintf(rhostname, sizeof(rhostname), "%.*v", len, inp); #ifdef CHAPMS /* copy the flags into cstate for use elsewhere */ @@ -794,7 +798,9 @@ ChapReceiveFailure(cstate, inp, id, len) u_char id; int len; { +#ifdef CHAPMS u_char *msg; +#endif u_char *p = inp; if (cstate->clientstate != CHAPCS_RESPONSE) { @@ -882,7 +888,9 @@ ChapReceiveFailure(cstate, inp, id, len) /* * Print message. */ +#ifdef CHAPMS print_msg: +#endif if (len > 0 && p != NULL) PRINTMSG(p, len); @@ -939,7 +947,7 @@ ChapSendStatus(cstate, code) int code; { u_char *outp; - int i, outlen, msglen; + int outlen, msglen; char msg[256]; char *p, *q; @@ -1007,6 +1015,8 @@ ChapSendStatus(cstate, code) * Basically, this whole bit is useless code, even the small * implementation here is only because of overspecification. */ + int i; + slprintf(p, q - p, "E=691 R=1 C="); p += 12; for (i = 0; i < cstate->chal_len; i++) @@ -1019,7 +1029,9 @@ ChapSendStatus(cstate, code) slprintf(p, q - p, "I don't like you. Go 'way."); } +#ifdef CHAPMS msgdone: +#endif msglen = strlen(msg); outlen = CHAP_HEADERLEN + msglen;