mirror of
https://git.freebsd.org/ports.git
synced 2025-04-30 02:26:38 -04:00
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)
71 lines
2.4 KiB
Diff
71 lines
2.4 KiB
Diff
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);
|
|
}
|
|
|