pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/32418 )
Change subject: layer23: Use libosmocore API to validate IMSI string ......................................................................
layer23: Use libosmocore API to validate IMSI string
Change-Id: I2d4737dabcfb83a7b675c35ad973029a36658d5b --- M src/host/layer23/include/osmocom/bb/common/subscriber.h M src/host/layer23/src/common/subscriber.c M src/host/layer23/src/mobile/vty_interface.c 3 files changed, 17 insertions(+), 27 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve osmith: Looks good to me, approved
diff --git a/src/host/layer23/include/osmocom/bb/common/subscriber.h b/src/host/layer23/include/osmocom/bb/common/subscriber.h index 698b0fd..8b15295 100644 --- a/src/host/layer23/include/osmocom/bb/common/subscriber.h +++ b/src/host/layer23/include/osmocom/bb/common/subscriber.h @@ -112,7 +112,6 @@ void (*print)(void *, const char *, ...), void *priv); void gsm_subscr_dump(struct gsm_subscriber *subscr, void (*print)(void *, const char *, ...), void *priv); -char *gsm_check_imsi(const char *imsi); int gsm_subscr_get_key_seq(struct osmocom_ms *ms, struct gsm_subscriber *subscr);
#endif /* _SUBSCRIBER_H */ diff --git a/src/host/layer23/src/common/subscriber.c b/src/host/layer23/src/common/subscriber.c index 05771ff..e3f5a8c 100644 --- a/src/host/layer23/src/common/subscriber.c +++ b/src/host/layer23/src/common/subscriber.c @@ -21,6 +21,7 @@ #include <arpa/inet.h> #include <osmocom/core/talloc.h> #include <osmocom/crypt/auth.h> +#include <osmocom/gsm/gsm23003.h>
#include <osmocom/bb/common/logging.h> #include <osmocom/bb/common/osmocom_data.h> @@ -43,21 +44,6 @@ * support */
-char *gsm_check_imsi(const char *imsi) -{ - int i; - - if (!imsi || strlen(imsi) != 15) - return "IMSI must have 15 digits!"; - - for (i = 0; i < strlen(imsi); i++) { - if (imsi[i] < '0' || imsi[i] > '9') - return "IMSI must have digits 0 to 9 only!"; - } - - return NULL; -} - static char *sim_decode_bcd(uint8_t *data, uint8_t length) { int i, j = 0; @@ -154,7 +140,6 @@ struct gsm_settings *set = &ms->settings; struct gsm_subscriber *subscr = &ms->subscr; struct msgb *nmsg; - char *error;
if (subscr->sim_valid) { LOGP(DMM, LOGL_ERROR, "Cannot insert card, until current card " @@ -162,9 +147,8 @@ return -EBUSY; }
- error = gsm_check_imsi(set->test_imsi); - if (error) { - LOGP(DMM, LOGL_ERROR, "%s\n", error); + if (!osmo_imsi_str_valid(set->test_imsi)) { + LOGP(DMM, LOGL_ERROR, "Wrong IMSI format\n"); return -EINVAL; }
diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c index f4dc8a9..b2ddfe7 100644 --- a/src/host/layer23/src/mobile/vty_interface.c +++ b/src/host/layer23/src/mobile/vty_interface.c @@ -26,6 +26,7 @@ #include <osmocom/core/talloc.h> #include <osmocom/core/signal.h> #include <osmocom/crypt/auth.h> +#include <osmocom/gsm/gsm23003.h>
#include <osmocom/bb/common/osmocom_data.h> #include <osmocom/bb/common/ms.h> @@ -1750,11 +1751,9 @@ { struct osmocom_ms *ms = vty->index; struct gsm_settings *set = &ms->settings; - char *error;
- error = gsm_check_imsi(argv[0]); - if (error) { - vty_out(vty, "%s%s", error, VTY_NEWLINE); + if (!osmo_imsi_str_valid(argv[0])) { + vty_out(vty, "Wrong IMSI format%s", VTY_NEWLINE); return CMD_WARNING; } strcpy(set->emergency_imsi, argv[0]); @@ -2586,10 +2585,9 @@ { struct osmocom_ms *ms = vty->index; struct gsm_settings *set = &ms->settings; - char *error = gsm_check_imsi(argv[0]);
- if (error) { - vty_out(vty, "%s%s", error, VTY_NEWLINE); + if (!osmo_imsi_str_valid(argv[0])) { + vty_out(vty, "Wrong IMSI format%s", VTY_NEWLINE); return CMD_WARNING; }