diff options
author | Keith <keith@rhizomatica.org> | 2022-12-16 18:58:19 +0100 |
---|---|---|
committer | Keith Whyte <keith@rhizomatica.org> | 2023-11-22 19:56:48 +0000 |
commit | 74bddfaae5961bef7406270355823e56d10e9e90 (patch) | |
tree | 2395868862438472f221b3d5f1d72aaf13b9fc15 | |
parent | 2c82962c24623bd8972757144f1e07a42353eed3 (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.h | 1 | ||||
-rw-r--r-- | src/mslookup/mdns.c | 1 | ||||
-rw-r--r-- | src/mslookup/mslookup.c | 4 | ||||
-rw-r--r-- | src/mslookup_server.c | 5 |
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); |