[SUCI] Handling exceptions for invalid RI (#1570)

If Routing Indicator is wrong, we forcely set to '0'.
This commit is contained in:
Sukchan Lee 2022-06-10 23:19:00 +09:00
parent 9d94b33c7b
commit b98c2c13f6
4 changed files with 29 additions and 23 deletions

View File

@ -198,7 +198,6 @@ char *ogs_supi_from_suci(char *suci)
{ {
#define MAX_SUCI_TOKEN 16 #define MAX_SUCI_TOKEN 16
char *array[MAX_SUCI_TOKEN]; char *array[MAX_SUCI_TOKEN];
char *saveptr = NULL;
char *p, *tmp; char *p, *tmp;
int i; int i;
char *supi = NULL; char *supi = NULL;
@ -207,13 +206,9 @@ char *ogs_supi_from_suci(char *suci)
tmp = ogs_strdup(suci); tmp = ogs_strdup(suci);
ogs_expect_or_return_val(tmp, NULL); ogs_expect_or_return_val(tmp, NULL);
p = strtok_r(tmp, "-", &saveptr); p = tmp;
i = 0;
memset(array, 0, sizeof(array)); while((array[i++] = strsep(&p, "-")));
for (i = 0; i < MAX_SUCI_TOKEN && p; i++) {
array[i] = p;
p = strtok_r(NULL, "-", &saveptr);
}
SWITCH(array[0]) SWITCH(array[0])
CASE("suci") CASE("suci")
@ -240,17 +235,17 @@ char *ogs_supi_from_suci(char *suci)
char *ogs_id_get_type(char *str) char *ogs_id_get_type(char *str)
{ {
char *saveptr = NULL; char *token, *p, *tmp;
char *p, *tmp;
char *type = NULL; char *type = NULL;
ogs_assert(str); ogs_assert(str);
tmp = ogs_strdup(str); tmp = ogs_strdup(str);
ogs_expect_or_return_val(tmp, NULL); ogs_expect_or_return_val(tmp, NULL);
p = strtok_r(tmp, "-", &saveptr); p = tmp;
ogs_assert(p); token = strsep(&p, "-");
type = ogs_strdup(p); ogs_assert(token);
type = ogs_strdup(token);
ogs_expect_or_return_val(type, NULL); ogs_expect_or_return_val(type, NULL);
ogs_free(tmp); ogs_free(tmp);
@ -259,19 +254,19 @@ char *ogs_id_get_type(char *str)
char *ogs_id_get_value(char *str) char *ogs_id_get_value(char *str)
{ {
char *saveptr = NULL; char *token, *p, *tmp;
char *p, *tmp;
char *ueid = NULL; char *ueid = NULL;
ogs_assert(str); ogs_assert(str);
tmp = ogs_strdup(str); tmp = ogs_strdup(str);
ogs_expect_or_return_val(tmp, NULL); ogs_expect_or_return_val(tmp, NULL);
p = strtok_r(tmp, "-", &saveptr); p = tmp;
ogs_assert(p); token = strsep(&p, "-");
p = strtok_r(NULL, "-", &saveptr); ogs_assert(token);
ogs_assert(p); token = strsep(&p, "-");
ueid = ogs_strdup(p); ogs_assert(token);
ueid = ogs_strdup(token);
ogs_expect_or_return_val(ueid, NULL); ogs_expect_or_return_val(ueid, NULL);
ogs_free(tmp); ogs_free(tmp);

View File

@ -60,9 +60,9 @@ static char *masked_db_uri(const char *db_uri)
ogs_assert(tmp); ogs_assert(tmp);
memset(array, 0, sizeof(array)); memset(array, 0, sizeof(array));
array[0] = strtok_r(tmp, "@", &saveptr); array[0] = ogs_strtok_r(tmp, "@", &saveptr);
if (array[0]) if (array[0])
array[1] = strtok_r(NULL, "@", &saveptr); array[1] = ogs_strtok_r(NULL, "@", &saveptr);
if (array[1]) { if (array[1]) {
masked = ogs_msprintf("mongodb://*****:*****@%s", array[1]); masked = ogs_msprintf("mongodb://*****:*****@%s", array[1]);

View File

@ -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; scheme_output_len = mobile_identity->length - 8;
ogs_expect_or_return_val(scheme_output_len > 0, NULL); ogs_expect_or_return_val(scheme_output_len > 0, NULL);
ogs_expect_or_return_val( ogs_expect_or_return_val(

View File

@ -146,7 +146,7 @@ char *ogs_sbi_parse_uri(char *uri, const char *delim, char **saveptr)
{ {
char *item = NULL; char *item = NULL;
item = url_decode(strtok_r(uri, delim, saveptr)); item = url_decode(ogs_strtok_r(uri, delim, saveptr));
if (!item) { if (!item) {
return NULL; return NULL;
} }