diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2022-06-20 15:38:21 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2022-06-20 18:05:36 +0200 |
commit | 3ca9a1fd4f09f598e251f00068967aab34d38e12 (patch) | |
tree | b2dfa0313e8c2adf6dcbf5fdfe2ea2f880d854c3 | |
parent | b74769f1b40b9d48b24f745f185432262a7e43e1 (diff) |
ctrl: Introduce cmd SET subscriber.delete <imsi>
On success SET_REPLY contains the ID of the deleted subscriber.
Related: SYS#5993
Change-Id: I24c6149d7c223a12549d712a7929666220c0210f
-rw-r--r-- | src/ctrl.c | 35 | ||||
-rw-r--r-- | tests/test_subscriber.ctrl | 3 | ||||
-rw-r--r-- | tests/test_subscriber_errors.ctrl | 6 |
3 files changed, 44 insertions, 0 deletions
@@ -234,6 +234,40 @@ static int set_subscr_create(struct ctrl_cmd *cmd, void *data) return CTRL_CMD_REPLY; } +CTRL_CMD_DEFINE_WO_NOVRF(subscr_delete, "delete"); +static int set_subscr_delete(struct ctrl_cmd *cmd, void *data) +{ + struct hlr_subscriber subscr; + struct hlr *hlr = data; + const char *imsi = cmd->value; + int rc; + + if (!osmo_imsi_str_valid(imsi)) { + cmd->reply = "Invalid IMSI value."; + return CTRL_CMD_ERROR; + } + + /* Retrieve data of newly created subscriber: */ + rc = db_subscr_get_by_imsi(hlr->dbc, imsi, &subscr); + if (rc < 0) { + cmd->reply = "Subscriber doesn't exist."; + return CTRL_CMD_ERROR; + } + + /* Create the subscriber in the DB */ + rc = db_subscr_delete_by_id(g_hlr->dbc, subscr.id); + if (rc) { + cmd->reply = "Cannot delete subscriber."; + return CTRL_CMD_ERROR; + } + + LOGP(DCTRL, LOGL_INFO, "Deleted subscriber IMSI='%s'\n", + imsi); + + cmd->reply = talloc_asprintf(cmd, "%" PRIu64, subscr.id); + return CTRL_CMD_REPLY; +} + CTRL_CMD_DEFINE_RO(subscr_info, "info"); static int get_subscr_info(struct ctrl_cmd *cmd, void *data) { @@ -469,6 +503,7 @@ static int hlr_ctrl_cmds_install() int rc = 0; rc |= ctrl_cmd_install(CTRL_NODE_SUBSCR, &cmd_subscr_create); + rc |= ctrl_cmd_install(CTRL_NODE_SUBSCR, &cmd_subscr_delete); rc |= ctrl_cmd_install(CTRL_NODE_SUBSCR_BY, &cmd_subscr_info); rc |= ctrl_cmd_install(CTRL_NODE_SUBSCR_BY, &cmd_subscr_info_aud); diff --git a/tests/test_subscriber.ctrl b/tests/test_subscriber.ctrl index 5b49702..889f0a7 100644 --- a/tests/test_subscriber.ctrl +++ b/tests/test_subscriber.ctrl @@ -670,3 +670,6 @@ ms_purged_ps 0 periodic_lu_timer 0 periodic_rau_tau_timer 0 lmsi 00000000 + +SET 112 subscriber.delete 901991234567891 +SET_REPLY 112 subscriber.delete 124 diff --git a/tests/test_subscriber_errors.ctrl b/tests/test_subscriber_errors.ctrl index 8309e61..403e0fa 100644 --- a/tests/test_subscriber_errors.ctrl +++ b/tests/test_subscriber_errors.ctrl @@ -117,3 +117,9 @@ ERROR 50 Subscriber already exists. SET 51 subscriber.by-imsi-1234567890123456.msisdn hellobadmsisdn ERROR 51 Value failed verification. + +SET 52 subscriber.delete 100000 +ERROR 52 Subscriber doesn't exist. + +SET 53 subscriber.delete zzz +ERROR 53 Invalid IMSI value. |