Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/net Move RCA event after RCR event



details:   https://anonhg.NetBSD.org/src/rev/99b69016c828
branches:  trunk
changeset: 379104:99b69016c828
user:      yamaguchi <yamaguchi%NetBSD.org@localhost>
date:      Tue May 11 06:21:28 2021 +0000

description:
Move RCA event after RCR event

A authentication failed by TO+ event between RCA and RCR events
 1. RCA event in REQ-SENT state
   - REQ-SENT => ACK-RCVD
 2. TO+ event
   - ACK-RCVD => REQ-SENT
 3. RCR+ event
   - REQ-SENT => ACK-SENT

By moving RCA after RCR, the state is transisted to OPENED
 1. RCR event
   - REQ-SENT => ACK-SENT
 2. TO+ event
   - state is not changed
 3. RCA event
   - ACK-SENT => OPENED

diffstat:

 sys/net/if_spppsubr.c |  26 +++++++++++++++-----------
 1 files changed, 15 insertions(+), 11 deletions(-)

diffs (66 lines):

diff -r c6cc04d20a4a -r 99b69016c828 sys/net/if_spppsubr.c
--- a/sys/net/if_spppsubr.c     Tue May 11 06:03:54 2021 +0000
+++ b/sys/net/if_spppsubr.c     Tue May 11 06:21:28 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_spppsubr.c,v 1.233 2021/05/11 01:27:45 yamaguchi Exp $       */
+/*     $NetBSD: if_spppsubr.c,v 1.234 2021/05/11 06:21:28 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.233 2021/05/11 01:27:45 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.234 2021/05/11 06:21:28 yamaguchi Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -4876,11 +4876,6 @@ sppp_chap_input(struct sppp *sp, struct 
 
                        if (memcmp(digest, value, value_len) == 0) {
                                sp->scp[IDX_CHAP].rcr_type = CP_RCR_ACK;
-                               if (!ISSET(sppp_auth_role(&chap, sp), SPPP_AUTH_PEER) ||
-                                   sp->chap.rechallenging) {
-                                       /* generate a dummy RCA event*/
-                                       sppp_wq_add(sp->wq_cp, &sp->scp[IDX_CHAP].work_rca);
-                               }
                        } else {
                                sp->scp[IDX_CHAP].rcr_type = CP_RCR_NAK;
                        }
@@ -4896,6 +4891,13 @@ sppp_chap_input(struct sppp *sp, struct 
                }
 
                sppp_wq_add(sp->wq_cp, &sp->scp[IDX_CHAP].work_rcr);
+
+               /* generate a dummy RCA event */
+               if (sp->scp[IDX_CHAP].rcr_type == CP_RCR_ACK &&
+                   (!ISSET(sppp_auth_role(&chap, sp), SPPP_AUTH_PEER) ||
+                   sp->chap.rechallenging)) {
+                       sppp_wq_add(sp->wq_cp, &sp->scp[IDX_CHAP].work_rca);
+               }
                break;
 
        default:
@@ -5149,15 +5151,17 @@ sppp_pap_input(struct sppp *sp, struct m
                    secret_len == sp->hisauth.secret_len &&
                    memcmp(secret, sp->hisauth.secret, secret_len) == 0) {
                        sp->scp[IDX_PAP].rcr_type = CP_RCR_ACK;
-                       if (!ISSET(sppp_auth_role(&pap, sp), SPPP_AUTH_PEER)) {
-                               /* generate a dummy RCA event*/
-                               sppp_wq_add(sp->wq_cp, &sp->scp[IDX_PAP].work_rca);
-                       }
                } else {
                        sp->scp[IDX_PAP].rcr_type = CP_RCR_NAK;
                }
 
                sppp_wq_add(sp->wq_cp, &sp->scp[IDX_PAP].work_rcr);
+
+               /* generate a dummy RCA event */
+               if (sp->scp[IDX_PAP].rcr_type == CP_RCR_ACK &&
+                   !ISSET(sppp_auth_role(&pap, sp), SPPP_AUTH_PEER)) {
+                       sppp_wq_add(sp->wq_cp, &sp->scp[IDX_PAP].work_rca);
+               }
                break;
 
        /* ack and nak are his authproto */



Home | Main Index | Thread Index | Old Index