Change in osmo-mgw[master]: mgcp_conn_get(): compare conn Id ('I:') case insensitively

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Fri Sep 7 14:13:08 UTC 2018


Neels Hofmeyr has submitted this change and it was merged. ( https://gerrit.osmocom.org/10677 )

Change subject: mgcp_conn_get(): compare conn Id ('I:') case insensitively
......................................................................

mgcp_conn_get(): compare conn Id ('I:') case insensitively

The Connection Identifier is defined as a hex string, so clients may send the
ID back in lower case. Convert to upper case before comparing.

A specific SCCPlite MSC is observed to DLCX with Connection Identifier in lower
case, which would mismatch pefore this patch.

Add test_conn_id_matching() in mgcp_test.c to verify case insensitivity.

Cosmetic: use strcmp(), not strncmp(). In the presence of a terminating nul as
we can assume here, this makes no functional difference, but it clarifies the
code.

Related: OS#3508
Depends: Ib0ee1206b9f31d7ba25c31f8008119ac55440797 (libosmocore)
Change-Id: I8e52278c3abe9e9c8c848c2b1538bce443f68a43
---
M src/libosmo-mgcp/mgcp_conn.c
M tests/mgcp/mgcp_test.c
M tests/mgcp/mgcp_test.ok
3 files changed, 49 insertions(+), 1 deletion(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c
index 0126c7c..0918b8b 100644
--- a/src/libosmo-mgcp/mgcp_conn.c
+++ b/src/libosmo-mgcp/mgcp_conn.c
@@ -189,9 +189,18 @@
 struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, const char *id)
 {
 	struct mgcp_conn *conn;
+	const char *id_upper;
+
+	if (!id || !*id)
+		return NULL;
+
+	/* Use uppercase to compare identifiers, to avoid mismatches: RFC3435 2.1.3.2 "Names of
+	 * Connections" defines the id as a hex string, so clients may return lower case hex even though
+	 * we sent upper case hex in the CRCX response. */
+	id_upper = osmo_str_toupper(id);
 
 	llist_for_each_entry(conn, &endp->conns, entry) {
-		if (strncmp(conn->id, id, sizeof(conn->id)) == 0)
+		if (strcmp(conn->id, id_upper) == 0)
 			return conn;
 	}
 
diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c
index c40eabc..99ddd71 100644
--- a/tests/mgcp/mgcp_test.c
+++ b/tests/mgcp/mgcp_test.c
@@ -1751,6 +1751,40 @@
 	OSMO_ASSERT(pt_dst == -EINVAL);
 }
 
+void test_conn_id_matching()
+{
+	struct mgcp_endpoint endp = {};
+	struct mgcp_conn *conn;
+	struct mgcp_conn *conn_match;
+	int i;
+	const char *conn_id_generated = "000023AB";
+	const char *conn_id_request[] = {
+		"000023AB",
+		"000023ab",
+	};
+
+	printf("\nTesting %s\n", __func__);
+
+	INIT_LLIST_HEAD(&endp.conns);
+
+	conn = talloc_zero(NULL, struct mgcp_conn);
+	OSMO_ASSERT(conn);
+	osmo_strlcpy(conn->id, conn_id_generated, sizeof(conn->id));
+	llist_add(&conn->entry, &endp.conns);
+
+	for (i = 0; i < ARRAY_SIZE(conn_id_request); i++) {
+		const char *needle = conn_id_request[i];
+		printf("needle='%s' ", needle);
+		conn_match = mgcp_conn_get(&endp, needle);
+		OSMO_ASSERT(conn_match);
+		printf("found '%s'\n", conn_match->id);
+		OSMO_ASSERT(conn_match == conn);
+	}
+
+	llist_del(&conn->entry);
+	talloc_free(conn);
+}
+
 int main(int argc, char **argv)
 {
 	void *ctx = talloc_named_const(NULL, 0, "mgcp_test");
@@ -1775,6 +1809,7 @@
 	test_get_lco_identifier();
 	test_check_local_cx_options(ctx);
 	test_mgcp_codec_pt_translate();
+	test_conn_id_matching();
 
 	OSMO_ASSERT(talloc_total_size(msgb_ctx) == 0);
 	OSMO_ASSERT(talloc_total_blocks(msgb_ctx) == 1);
diff --git a/tests/mgcp/mgcp_test.ok b/tests/mgcp/mgcp_test.ok
index ddda751..f50f487 100644
--- a/tests/mgcp/mgcp_test.ok
+++ b/tests/mgcp/mgcp_test.ok
@@ -1169,4 +1169,8 @@
 '' -> '(null)'
 p10, aPCMU -> (null)
 '10,a :PCMU' -> '(null)'
+
+Testing test_conn_id_matching
+needle='000023AB' found '000023AB'
+needle='000023ab' found '000023AB'
 Done

-- 
To view, visit https://gerrit.osmocom.org/10677
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I8e52278c3abe9e9c8c848c2b1538bce443f68a43
Gerrit-Change-Number: 10677
Gerrit-PatchSet: 5
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180907/c92e659c/attachment.htm>


More information about the gerrit-log mailing list