diff options
-rw-r--r-- | openbsc/include/openbsc/sgsn.h | 1 | ||||
-rw-r--r-- | openbsc/src/gprs/sgsn_auth.c | 11 | ||||
-rw-r--r-- | openbsc/src/gprs/sgsn_vty.c | 1 | ||||
-rw-r--r-- | openbsc/tests/sgsn/sgsn_test.c | 2 |
4 files changed, 11 insertions, 4 deletions
diff --git a/openbsc/include/openbsc/sgsn.h b/openbsc/include/openbsc/sgsn.h index 798bfde48..78064dddc 100644 --- a/openbsc/include/openbsc/sgsn.h +++ b/openbsc/include/openbsc/sgsn.h @@ -32,6 +32,7 @@ struct sgsn_config { int gsup_server_port; int require_authentication; + int require_update_location; }; struct sgsn_instance { diff --git a/openbsc/src/gprs/sgsn_auth.c b/openbsc/src/gprs/sgsn_auth.c index 83372e857..9cc67db1c 100644 --- a/openbsc/src/gprs/sgsn_auth.c +++ b/openbsc/src/gprs/sgsn_auth.c @@ -161,9 +161,9 @@ int sgsn_auth_request(struct sgsn_mm_ctx *mmctx) return 0; } - need_update_location = - mmctx->subscr == NULL || - mmctx->pending_req == GSM48_MT_GMM_ATTACH_REQ; + need_update_location = sgsn->cfg.require_update_location && + (mmctx->subscr == NULL || + mmctx->pending_req == GSM48_MT_GMM_ATTACH_REQ); /* This has the side effect of registering the subscr with the mmctx */ subscr = gprs_subscr_get_or_create_by_mmctx(mmctx); @@ -191,8 +191,11 @@ int sgsn_auth_request(struct sgsn_mm_ctx *mmctx) } else if (need_update_location) { LOGMMCTXP(LOGL_INFO, mmctx, "Missing information, requesting subscriber data\n"); - if (gprs_subscr_request_update_location(mmctx) >= 0) + rc = gprs_subscr_request_update_location(mmctx); + if (rc >= 0) return 0; + + return rc; } sgsn_auth_update(mmctx); diff --git a/openbsc/src/gprs/sgsn_vty.c b/openbsc/src/gprs/sgsn_vty.c index 3ca1570b9..d847d9173 100644 --- a/openbsc/src/gprs/sgsn_vty.c +++ b/openbsc/src/gprs/sgsn_vty.c @@ -377,6 +377,7 @@ DEFUN(cfg_auth_policy, cfg_auth_policy_cmd, OSMO_ASSERT(val >= SGSN_AUTH_POLICY_OPEN && val <= SGSN_AUTH_POLICY_REMOTE); g_cfg->auth_policy = val; g_cfg->require_authentication = (val == SGSN_AUTH_POLICY_REMOTE); + g_cfg->require_update_location = (val == SGSN_AUTH_POLICY_REMOTE); return CMD_SUCCESS; } diff --git a/openbsc/tests/sgsn/sgsn_test.c b/openbsc/tests/sgsn/sgsn_test.c index 7c48eef0a..58d3a4f86 100644 --- a/openbsc/tests/sgsn/sgsn_test.c +++ b/openbsc/tests/sgsn/sgsn_test.c @@ -877,6 +877,7 @@ static void test_gmm_attach_subscr_fake_auth(void) subscr = gprs_subscr_get_or_create("123456789012345"); subscr->authorized = 1; sgsn->cfg.require_authentication = 1; + sgsn->cfg.require_update_location = 1; subscr_put(subscr); printf("Auth policy 'remote', auth faked: "); @@ -919,6 +920,7 @@ static void test_gmm_attach_subscr_real_auth(void) subscr = gprs_subscr_get_or_create("123456789012345"); subscr->authorized = 1; sgsn->cfg.require_authentication = 1; + sgsn->cfg.require_update_location = 1; subscr_put(subscr); printf("Auth policy 'remote', triplet based auth: "); |