Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/net Fix the wrong CHAP option length in conf-nak
details: https://anonhg.NetBSD.org/src/rev/a5be924a2aed
branches: trunk
changeset: 378852:a5be924a2aed
user: yamaguchi <yamaguchi%NetBSD.org@localhost>
date: Mon Apr 26 08:45:57 2021 +0000
description:
Fix the wrong CHAP option length in conf-nak
RFC 1994 defines that the CHAP option length in conf-nak is 5.
However, 4 was used when CHAP is cofigured and PPP is proposed
by a peer.
diffstat:
sys/net/if_spppsubr.c | 39 ++++++++++++++++++++++++++++-----------
1 files changed, 28 insertions(+), 11 deletions(-)
diffs (67 lines):
diff -r 7ab5ec9bfb37 -r a5be924a2aed sys/net/if_spppsubr.c
--- a/sys/net/if_spppsubr.c Mon Apr 26 08:42:19 2021 +0000
+++ b/sys/net/if_spppsubr.c Mon Apr 26 08:45:57 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_spppsubr.c,v 1.225 2021/04/26 08:42:19 yamaguchi Exp $ */
+/* $NetBSD: if_spppsubr.c,v 1.226 2021/04/26 08:45:57 yamaguchi Exp $ */
/*
* Synchronous PPP/Cisco link level subroutines.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.225 2021/04/26 08:42:19 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.226 2021/04/26 08:45:57 yamaguchi Exp $");
#if defined(_KERNEL_OPT)
#include "opt_inet.h"
@@ -2876,22 +2876,39 @@ sppp_lcp_confreq(struct sppp *sp, struct
if (authproto == PPP_PAP || authproto == PPP_CHAP)
sp->myauth.proto = authproto;
}
- if (sp->myauth.proto != authproto) {
- /* not agreed, nak */
+ if (sp->myauth.proto == authproto) {
+ if (authproto != PPP_CHAP || p[4] == CHAP_MD5) {
+ continue;
+ }
+ if (debug)
+ addlog(" [chap without MD5]");
+ } else {
if (debug)
addlog(" [mine %s != his %s]",
sppp_proto_name(sp->myauth.proto),
sppp_proto_name(authproto));
- p[2] = sp->myauth.proto >> 8;
- p[3] = sp->myauth.proto;
- break;
+ }
+ /* not agreed, nak */
+ if (sp->myauth.proto == PPP_CHAP) {
+ l = 5;
+ } else {
+ l = 4;
}
- if (authproto == PPP_CHAP && p[4] != CHAP_MD5) {
+
+ if (rlen + l > blen) {
if (debug)
- addlog(" [chap not MD5]");
- p[4] = CHAP_MD5;
- break;
+ addlog(" [overflow]");
+ continue;
}
+
+ r[0] = LCP_OPT_AUTH_PROTO;
+ r[1] = l;
+ r[2] = sp->myauth.proto >> 8;
+ r[3] = sp->myauth.proto & 0xff;
+ if (sp->myauth.proto == PPP_CHAP)
+ r[4] = CHAP_MD5;
+ rlen += l;
+ r += l;
continue;
case LCP_OPT_MP_EID:
/*
Home |
Main Index |
Thread Index |
Old Index