From 83c103bc3f8beab68b47625dc18deb1029fbf79c Mon Sep 17 00:00:00 2001 From: Markus Stenberg Date: Mon, 19 May 2014 13:23:21 +0300 Subject: [PATCH] Internal address check is mandatory even if third party option is set. --- miniupnpd/pcpserver.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/miniupnpd/pcpserver.c b/miniupnpd/pcpserver.c index 9a809a9..1dd62f9 100644 --- a/miniupnpd/pcpserver.c +++ b/miniupnpd/pcpserver.c @@ -1139,6 +1139,15 @@ static int ValidatePCPMsg(pcp_info_t *pcp_msg_info) return 0; } + /* RFC 6887, section 8.2: MUST return address mismatch if NAT + * in middle. */ + if (memcmp(pcp_msg_info->int_ip, + &pcp_msg_info->sender_ip, + sizeof(pcp_msg_info->sender_ip)) != 0) { + pcp_msg_info->result_code = PCP_ERR_ADDRESS_MISMATCH; + return 0; + } + if (pcp_msg_info->thirdp_ip) { if (!GETFLAG(PCP_ALLOWTHIRDPARTYMASK)) { pcp_msg_info->result_code = PCP_ERR_UNSUPP_OPTION; @@ -1153,15 +1162,6 @@ static int ValidatePCPMsg(pcp_info_t *pcp_msg_info) pcp_msg_info->result_code = PCP_ERR_MALFORMED_REQUEST; return 0; } - } else { - /* RFC 6887, section 8.2: MUST return address mismatch if NAT - * in middle. */ - if (memcmp(pcp_msg_info->int_ip, - &pcp_msg_info->sender_ip, - sizeof(pcp_msg_info->sender_ip)) != 0) { - pcp_msg_info->result_code = PCP_ERR_ADDRESS_MISMATCH; - return 0; - } } /* Produce mapped_str for future use. */