Skip to content

Commit

Permalink
net/mpd5: add L2TP fix from upstream (r2410, r2411).
Browse files Browse the repository at this point in the history
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
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 2 deletions.
5 changes: 3 additions & 2 deletions net/mpd5/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

PORTNAME= mpd
DISTVERSION= 5.9
PORTREVISION= 1
CATEGORIES= net
MASTER_SITES= SF/${PORTNAME}/Mpd5/Mpd-${PORTVERSION}
PKGNAMESUFFIX= 5
Expand All @@ -12,14 +13,14 @@ COMMENT= Multi-link PPP daemon based on netgraph(4)

LICENSE= BSD3CLAUSE

USES= ssl

OPTIONS_DEFINE= DOCS NG_IPACCT
NG_IPACCT_DESC= Use ng_ipacct kernel module from port

HAS_CONFIGURE= YES
CONFIGURE_WRKSRC= "${WRKSRC}/src"

USES= ssl

.include <bsd.port.options.mk>

MAKE_ARGS+= OSVERSION=${OSVERSION}
Expand Down
71 changes: 71 additions & 0 deletions net/mpd5/files/patch-l2tp-ctrl-c.diff
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);
}

0 comments on commit 9cf7566

Please sign in to comment.