diff options
author | Philipp Maier <pmaier@sysmocom.de> | 2017-02-28 16:53:07 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-03-05 12:24:25 +0000 |
commit | 6ee49d8416ffba435ad7cc9fe5c685ec538c5571 (patch) | |
tree | ef6a8a010e180aa42eac86ae3dffd0ac81ff4d7f /openbsc/src/gprs/sgsn_vty.c | |
parent | 3f8a8f7736c6a6ef41c0a1572488acbafdbc35e2 (diff) |
sgsn: fix problem with leading-zero-IMSIs
When the IMSI ACL is maintained via the VTY, users may enter IMSIs
without leading zeros. Especially in test environments, where
MCC=001 and MNC=01 is common, it is likely that someone enters the
corresponding IMSI (001010000000001) without the two zeros at the
beginning.
This patch fixes the problem by sanitizing the IMSI, eventually
missing zeros in the beginning will be automatically added.
Change-Id: I56ba0da61978bbdce71d0e320166c52b20b42517
Diffstat (limited to 'openbsc/src/gprs/sgsn_vty.c')
-rw-r--r-- | openbsc/src/gprs/sgsn_vty.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/openbsc/src/gprs/sgsn_vty.c b/openbsc/src/gprs/sgsn_vty.c index 6c8b640c1..d42a1653a 100644 --- a/openbsc/src/gprs/sgsn_vty.c +++ b/openbsc/src/gprs/sgsn_vty.c @@ -586,10 +586,20 @@ DEFUN(imsi_acl, cfg_imsi_acl_cmd, "Remove IMSI from ACL\n" "IMSI of subscriber\n") { + char imsi_sanitized[GSM23003_IMSI_MAX_DIGITS+1]; const char *op = argv[0]; - const char *imsi = argv[1]; + const char *imsi = imsi_sanitized; int rc; + /* Sanitize IMSI */ + if (strlen(argv[1]) > GSM23003_IMSI_MAX_DIGITS) { + vty_out(vty, "%% IMSI (%s) too long -- ignored!%s", + argv[1], VTY_NEWLINE); + return CMD_WARNING; + } + memset(imsi_sanitized, '0', sizeof(imsi_sanitized)); + strcpy(imsi_sanitized+GSM23003_IMSI_MAX_DIGITS-strlen(argv[1]),argv[1]); + if (!strcmp(op, "add")) rc = sgsn_acl_add(imsi, g_cfg); else @@ -597,7 +607,6 @@ DEFUN(imsi_acl, cfg_imsi_acl_cmd, if (rc < 0) { vty_out(vty, "%% unable to %s ACL%s", op, VTY_NEWLINE); - return CMD_WARNING; } |