neels has uploaded this change for review. (
https://gerrit.osmocom.org/c/libosmo-pfcp/+/30407 )
Change subject: fix coding of Node ID: FQDN type
......................................................................
fix coding of Node ID: FQDN type
Decode FQDN type Node IDs into "human" dotted notation instead of
storing the DNS type data in the FQDN string.
Related: OS#5806
Change-Id: I25d0f9b095287aa30e24498d8361c0a326ded447
---
M src/libosmo-pfcp/pfcp_ies_custom.c
M tests/libosmo-pfcp/pfcp_test.ok
2 files changed, 12 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-pfcp refs/changes/07/30407/1
diff --git a/src/libosmo-pfcp/pfcp_ies_custom.c b/src/libosmo-pfcp/pfcp_ies_custom.c
index ac1f6f0..8da3420 100644
--- a/src/libosmo-pfcp/pfcp_ies_custom.c
+++ b/src/libosmo-pfcp/pfcp_ies_custom.c
@@ -379,6 +379,7 @@
const void *ip;
unsigned int ip_len;
unsigned int want_len;
+ int rc;
ENSURE_LENGTH_IS_AT_LEAST(1);
node_id->type = *(uint8_t *)tlv->val;
ip = &tlv->val[1];
@@ -400,8 +401,9 @@
osmo_sockaddr_from_octets(&node_id->ip, ip, ip_len);
break;
case OSMO_PFCP_NODE_ID_T_FQDN:
- /* Copy and add a trailing nul */
- OSMO_STRLCPY_ARRAY(node_id->fqdn, ip);
+ rc = qname_decode(node_id->fqdn, sizeof(node_id->fqdn), ip, ip_len);
+ if (rc <= 0)
+ RETURN_ERROR(rc ? : -EINVAL, "Invalid FQDN in Node ID");
break;
default:
RETURN_ERROR(-EINVAL, "Invalid Node ID Type: %d", node_id->type);
@@ -413,6 +415,7 @@
{
unsigned int l;
const struct osmo_pfcp_ie_node_id *node_id = encode_from;
+ int rc;
msgb_put_u8(tlv->dst, node_id->type);
switch (node_id->type) {
case OSMO_PFCP_NODE_ID_T_IPV4:
@@ -424,9 +427,11 @@
osmo_sockaddr_to_octets(msgb_put(tlv->dst, l), l, &node_id->ip);
break;
case OSMO_PFCP_NODE_ID_T_FQDN:
- l = strnlen(node_id->fqdn, sizeof(node_id->fqdn));
- /* Copy without trailing nul */
- memcpy((char *)msgb_put(tlv->dst, l), node_id->fqdn, l);
+ rc = qname_encode(tlv->dst->tail, msgb_tailroom(tlv->dst), node_id->fqdn);
+ if (rc <= 0)
+ RETURN_ERROR(rc ? : -EINVAL, "Encoding Node ID FQDN from '%s'
failed",
+ (const char *)encode_from);
+ msgb_put(tlv->dst, rc);
break;
default:
RETURN_ERROR(-EINVAL, "Invalid Node ID Type: %d", node_id->type);
diff --git a/tests/libosmo-pfcp/pfcp_test.ok b/tests/libosmo-pfcp/pfcp_test.ok
index 02424cd..73e05a5 100644
--- a/tests/libosmo-pfcp/pfcp_test.ok
+++ b/tests/libosmo-pfcp/pfcp_test.ok
@@ -36,8 +36,8 @@
encoding: ASSOC_SETUP_RESP
PFCPv1 ASSOC_SETUP_RESP hdr={seq=4} ies={ 'Node ID'=fqdn:"example.com"
'Cause'=Request accepted (success) 'Recovery Time Stamp'=724249387 'UP
Function Features'=( BUCP PDIU ) }
osmo_pfcp_msg_encode() rc = 0
-20 06 00 2b 00 00 04 00 00 3c 00 0c 02 65 78 61 6d 70 6c 65 2e 63 6f 6d 00 13 00 01 01 00
60 00 04 2b 2b 2b 2b 00 2b 00 06 01 02 00 00 00 00 .
-osmo_pfcp_msg_decode_header() rc = 47
+20 06 00 2c 00 00 04 00 00 3c 00 0d 02 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 13 00 01 01
00 60 00 04 2b 2b 2b 2b 00 2b 00 06 01 02 00 00 00 00 .
+osmo_pfcp_msg_decode_header() rc = 48
rc == msgb_length()
osmo_pfcp_msg_decode_tlv() rc = 0
parsed == orig
--
To view, visit
https://gerrit.osmocom.org/c/libosmo-pfcp/+/30407
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-pfcp
Gerrit-Branch: master
Gerrit-Change-Id: I25d0f9b095287aa30e24498d8361c0a326ded447
Gerrit-Change-Number: 30407
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-MessageType: newchange