aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith <keith@rhizomatica.org>2022-12-16 18:58:19 +0100
committerKeith Whyte <keith@rhizomatica.org>2023-11-22 19:56:48 +0000
commit74bddfaae5961bef7406270355823e56d10e9e90 (patch)
tree2395868862438472f221b3d5f1d72aaf13b9fc15
parent2c82962c24623bd8972757144f1e07a42353eed3 (diff)
D-GSM: Add a query type for authorized imsi.
Adds the possibility to use the DGSM/mDNS system to search all HLRs for only IMSIs that have either CS or PS service Change-Id: I54c469d34c3cd1bfd9a72a6c751ae183606d75ec
-rw-r--r--include/osmocom/mslookup/mslookup.h1
-rw-r--r--src/mslookup/mdns.c1
-rw-r--r--src/mslookup/mslookup.c4
-rw-r--r--src/mslookup_server.c5
4 files changed, 10 insertions, 1 deletions
diff --git a/include/osmocom/mslookup/mslookup.h b/include/osmocom/mslookup/mslookup.h
index e90af33..a062299 100644
--- a/include/osmocom/mslookup/mslookup.h
+++ b/include/osmocom/mslookup/mslookup.h
@@ -35,6 +35,7 @@ enum osmo_mslookup_id_type {
OSMO_MSLOOKUP_ID_NONE = 0,
OSMO_MSLOOKUP_ID_IMSI,
OSMO_MSLOOKUP_ID_MSISDN,
+ OSMO_MSLOOKUP_ID_IMSI_AUTHORIZED,
};
extern const struct value_string osmo_mslookup_id_type_names[];
diff --git a/src/mslookup/mdns.c b/src/mslookup/mdns.c
index 4742a7c..4749acf 100644
--- a/src/mslookup/mdns.c
+++ b/src/mslookup/mdns.c
@@ -45,6 +45,7 @@ static char *domain_from_query(void *ctx, const struct osmo_mslookup_query *quer
/* Get id from query */
switch (query->id.type) {
case OSMO_MSLOOKUP_ID_IMSI:
+ case OSMO_MSLOOKUP_ID_IMSI_AUTHORIZED:
id = query->id.imsi;
break;
case OSMO_MSLOOKUP_ID_MSISDN:
diff --git a/src/mslookup/mslookup.c b/src/mslookup/mslookup.c
index d399e3a..b17ca92 100644
--- a/src/mslookup/mslookup.c
+++ b/src/mslookup/mslookup.c
@@ -91,6 +91,7 @@ const struct value_string osmo_mslookup_id_type_names[] = {
{ OSMO_MSLOOKUP_ID_NONE, "none" },
{ OSMO_MSLOOKUP_ID_IMSI, "imsi" },
{ OSMO_MSLOOKUP_ID_MSISDN, "msisdn" },
+ { OSMO_MSLOOKUP_ID_IMSI_AUTHORIZED, "imsiauth" },
{}
};
@@ -134,6 +135,7 @@ bool osmo_mslookup_id_valid(const struct osmo_mslookup_id *id)
{
switch (id->type) {
case OSMO_MSLOOKUP_ID_IMSI:
+ case OSMO_MSLOOKUP_ID_IMSI_AUTHORIZED:
return osmo_imsi_str_valid(id->imsi);
case OSMO_MSLOOKUP_ID_MSISDN:
return osmo_msisdn_str_valid(id->msisdn);
@@ -157,6 +159,7 @@ size_t osmo_mslookup_id_name_buf(char *buf, size_t buflen, const struct osmo_msl
struct osmo_strbuf sb = { .buf = buf, .len = buflen };
switch (id->type) {
case OSMO_MSLOOKUP_ID_IMSI:
+ case OSMO_MSLOOKUP_ID_IMSI_AUTHORIZED:
OSMO_STRBUF_PRINTF(sb, "%s", id->imsi);
break;
case OSMO_MSLOOKUP_ID_MSISDN:
@@ -298,6 +301,7 @@ int osmo_mslookup_query_init_from_domain_str(struct osmo_mslookup_query *q, cons
id = second_last_dot + 1;
switch (q->id.type) {
case OSMO_MSLOOKUP_ID_IMSI:
+ case OSMO_MSLOOKUP_ID_IMSI_AUTHORIZED:
rc = token(q->id.imsi, sizeof(q->id.imsi), id, last_dot);
if (rc)
return rc;
diff --git a/src/mslookup_server.c b/src/mslookup_server.c
index df59996..9610b49 100644
--- a/src/mslookup_server.c
+++ b/src/mslookup_server.c
@@ -193,11 +193,14 @@ static void mslookup_server_rx_hlr_gsup(const struct osmo_mslookup_query *query,
const struct mslookup_service_host *host;
int rc;
bool exists = false;
+ bool auth_imsi_only = false;
switch (query->id.type) {
+ case OSMO_MSLOOKUP_ID_IMSI_AUTHORIZED:
+ auth_imsi_only = true;
case OSMO_MSLOOKUP_ID_IMSI:
rc = db_subscr_exists_by_imsi(g_hlr->dbc, query->id.imsi);
- if (g_hlr->mslookup.auth_imsi_only) {
+ if (g_hlr->mslookup.auth_imsi_only || auth_imsi_only) {
if (!rc)
exists = true;
rc = db_subscr_authorized_by_imsi(g_hlr->dbc, query->id.imsi);