]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/chap.c
Enable PPP filtering by default on Linux.
[ppp.git] / pppd / chap.c
index a63dde818fa01e0db3fcb14b062541d6180044e1..aa07d0e941e8dfede3df882c86bf818769136921 100644 (file)
@@ -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
+ *     <paulus@samba.org>".
+ *
+ * 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:
 #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;