From b98c2c13f63c8904a66286401bc662b0fedde517 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Fri, 10 Jun 2022 23:19:00 +0900 Subject: [PATCH] [SUCI] Handling exceptions for invalid RI (#1570) If Routing Indicator is wrong, we forcely set to '0'. --- lib/core/ogs-3gpp-types.c | 35 +++++++++++++++-------------------- lib/dbi/ogs-mongoc.c | 4 ++-- lib/nas/5gs/conv.c | 11 +++++++++++ lib/sbi/conv.c | 2 +- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/lib/core/ogs-3gpp-types.c b/lib/core/ogs-3gpp-types.c index c974b90ea..3a22a69b3 100644 --- a/lib/core/ogs-3gpp-types.c +++ b/lib/core/ogs-3gpp-types.c @@ -198,7 +198,6 @@ char *ogs_supi_from_suci(char *suci) { #define MAX_SUCI_TOKEN 16 char *array[MAX_SUCI_TOKEN]; - char *saveptr = NULL; char *p, *tmp; int i; char *supi = NULL; @@ -207,13 +206,9 @@ char *ogs_supi_from_suci(char *suci) tmp = ogs_strdup(suci); ogs_expect_or_return_val(tmp, NULL); - p = strtok_r(tmp, "-", &saveptr); - - memset(array, 0, sizeof(array)); - for (i = 0; i < MAX_SUCI_TOKEN && p; i++) { - array[i] = p; - p = strtok_r(NULL, "-", &saveptr); - } + p = tmp; + i = 0; + while((array[i++] = strsep(&p, "-"))); SWITCH(array[0]) CASE("suci") @@ -240,17 +235,17 @@ char *ogs_supi_from_suci(char *suci) char *ogs_id_get_type(char *str) { - char *saveptr = NULL; - char *p, *tmp; + char *token, *p, *tmp; char *type = NULL; ogs_assert(str); tmp = ogs_strdup(str); ogs_expect_or_return_val(tmp, NULL); - p = strtok_r(tmp, "-", &saveptr); - ogs_assert(p); - type = ogs_strdup(p); + p = tmp; + token = strsep(&p, "-"); + ogs_assert(token); + type = ogs_strdup(token); ogs_expect_or_return_val(type, NULL); ogs_free(tmp); @@ -259,19 +254,19 @@ char *ogs_id_get_type(char *str) char *ogs_id_get_value(char *str) { - char *saveptr = NULL; - char *p, *tmp; + char *token, *p, *tmp; char *ueid = NULL; ogs_assert(str); tmp = ogs_strdup(str); ogs_expect_or_return_val(tmp, NULL); - p = strtok_r(tmp, "-", &saveptr); - ogs_assert(p); - p = strtok_r(NULL, "-", &saveptr); - ogs_assert(p); - ueid = ogs_strdup(p); + p = tmp; + token = strsep(&p, "-"); + ogs_assert(token); + token = strsep(&p, "-"); + ogs_assert(token); + ueid = ogs_strdup(token); ogs_expect_or_return_val(ueid, NULL); ogs_free(tmp); diff --git a/lib/dbi/ogs-mongoc.c b/lib/dbi/ogs-mongoc.c index eef465f83..19026aca7 100644 --- a/lib/dbi/ogs-mongoc.c +++ b/lib/dbi/ogs-mongoc.c @@ -60,9 +60,9 @@ static char *masked_db_uri(const char *db_uri) ogs_assert(tmp); memset(array, 0, sizeof(array)); - array[0] = strtok_r(tmp, "@", &saveptr); + array[0] = ogs_strtok_r(tmp, "@", &saveptr); if (array[0]) - array[1] = strtok_r(NULL, "@", &saveptr); + array[1] = ogs_strtok_r(NULL, "@", &saveptr); if (array[1]) { masked = ogs_msprintf("mongodb://*****:*****@%s", array[1]); diff --git a/lib/nas/5gs/conv.c b/lib/nas/5gs/conv.c index 40b389f8d..4cc26290d 100644 --- a/lib/nas/5gs/conv.c +++ b/lib/nas/5gs/conv.c @@ -105,6 +105,17 @@ char *ogs_nas_5gs_suci_from_mobile_identity( } } + if (routing_indicator[0] == 0 && routing_indicator[1] == 0 && + routing_indicator[2] == 0 && routing_indicator[3] == 0) { + ogs_error("Unknown Routing Indicator: [%x,%x,%x,%x]", + mobile_identity_suci->routing_indicator1, + mobile_identity_suci->routing_indicator2, + mobile_identity_suci->routing_indicator3, + mobile_identity_suci->routing_indicator4); + + routing_indicator[0] = '0'; + } + scheme_output_len = mobile_identity->length - 8; ogs_expect_or_return_val(scheme_output_len > 0, NULL); ogs_expect_or_return_val( diff --git a/lib/sbi/conv.c b/lib/sbi/conv.c index 5a5c42661..9da454554 100644 --- a/lib/sbi/conv.c +++ b/lib/sbi/conv.c @@ -146,7 +146,7 @@ char *ogs_sbi_parse_uri(char *uri, const char *delim, char **saveptr) { char *item = NULL; - item = url_decode(strtok_r(uri, delim, saveptr)); + item = url_decode(ogs_strtok_r(uri, delim, saveptr)); if (!item) { return NULL; }