aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2017-02-28 16:53:07 +0100
committerHarald Welte <laforge@gnumonks.org>2017-03-05 12:24:25 +0000
commit6ee49d8416ffba435ad7cc9fe5c685ec538c5571 (patch)
treeef6a8a010e180aa42eac86ae3dffd0ac81ff4d7f
parent3f8a8f7736c6a6ef41c0a1572488acbafdbc35e2 (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
-rw-r--r--openbsc/src/gprs/sgsn_vty.c13
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;
}