-
Notifications
You must be signed in to change notification settings - Fork 739
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
net/mpd5: add L2TP fix from upstream (r2410, r2411).
This change should fix the problem reported in bugs #38 #47 #74. It is L2TP interoperability issue with some Juniper, Cisco and YAMAHA RTX routers having strict protocol checks. Move USES to pet portlint. Reported by: Kikuchan at SourceForge (based on) (cherry picked from commit fe1375b)
- Loading branch information
Eugene Grosbein
authored and
Eugene Grosbein
committed
Sep 8, 2021
1 parent
88930be
commit 9cf7566
Showing
2 changed files
with
74 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
Index: src/l2tp_ctrl.c | ||
=================================================================== | ||
--- src/l2tp_ctrl.c (revision 2409) | ||
+++ src/l2tp_ctrl.c (revision 2411) | ||
@@ -244,7 +244,8 @@ Notes | ||
************************************************************************/ | ||
|
||
static int ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl, | ||
- struct ppp_l2tp_avp_ptrs *ptrs); | ||
+ struct ppp_l2tp_avp_ptrs *ptrs, | ||
+ struct ppp_l2tp_avp_list *avps); | ||
static int ppp_l2tp_ctrl_setup_2(struct ppp_l2tp_ctrl *ctrl, | ||
struct ppp_l2tp_avp_ptrs *ptrs); | ||
static void ppp_l2tp_ctrl_send(struct ppp_l2tp_ctrl *ctrl, | ||
@@ -1031,7 +1032,8 @@ ppp_l2tp_sess_hooked(struct ppp_l2tp_sess *sess) { | ||
*/ | ||
static int | ||
ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl, | ||
- struct ppp_l2tp_avp_ptrs *ptrs) | ||
+ struct ppp_l2tp_avp_ptrs *ptrs, | ||
+ struct ppp_l2tp_avp_list *avps) | ||
{ | ||
/* Log */ | ||
Log(LOG_INFO, ("L2TP: connected to \"%s\", version=%u.%u", | ||
@@ -1092,7 +1094,7 @@ ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl, | ||
MD5_Update(&md5ctx, &ptrs->challenge->value, ptrs->challenge->length); | ||
MD5_Final(hash, &md5ctx); | ||
|
||
- if (ppp_l2tp_avp_list_append(ctrl->avps, 0, | ||
+ if (ppp_l2tp_avp_list_append(avps, 0, | ||
0, AVP_CHALLENGE_RESPONSE, hash, sizeof(hash)) == -1) | ||
return (0); | ||
} | ||
@@ -2085,7 +2087,7 @@ ppp_l2tp_handle_SCCRQ(struct ppp_l2tp_ctrl *ctrl, | ||
|
||
ok: | ||
/* Do control connection setup */ | ||
- if (ppp_l2tp_ctrl_setup_1(ctrl, ptrs) == -1) | ||
+ if (ppp_l2tp_ctrl_setup_1(ctrl, ptrs, ctrl->avps) == -1) | ||
return (-1); | ||
|
||
/* Send response and update state */ | ||
@@ -2098,18 +2100,24 @@ static int | ||
ppp_l2tp_handle_SCCRP(struct ppp_l2tp_ctrl *ctrl, | ||
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) | ||
{ | ||
+ struct ppp_l2tp_avp_list *avps0; | ||
+ | ||
(void)avps; | ||
+ avps0 = ppp_l2tp_avp_list_create(); | ||
+ | ||
/* Do control connection setup */ | ||
- if (ppp_l2tp_ctrl_setup_1(ctrl, ptrs) == -1) | ||
+ if ((ppp_l2tp_ctrl_setup_1(ctrl, ptrs, avps0) == -1) || | ||
+ (ppp_l2tp_ctrl_setup_2(ctrl, ptrs) == -1)) { | ||
+ ppp_l2tp_avp_list_destroy(&avps0); | ||
return (-1); | ||
- if (ppp_l2tp_ctrl_setup_2(ctrl, ptrs) == -1) | ||
- return (-1); | ||
+ } | ||
|
||
/* Send response and update state */ | ||
ctrl->state = CS_ESTABLISHED; | ||
- ppp_l2tp_ctrl_send(ctrl, 0, SCCCN, ctrl->avps); | ||
+ ppp_l2tp_ctrl_send(ctrl, 0, SCCCN, avps0); | ||
if (*ctrl->cb->ctrl_connected != NULL) | ||
(*ctrl->cb->ctrl_connected)(ctrl); | ||
+ ppp_l2tp_avp_list_destroy(&avps0); | ||
return (0); | ||
} | ||
|