aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2022-06-20 15:38:21 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2022-06-20 18:05:36 +0200
commit3ca9a1fd4f09f598e251f00068967aab34d38e12 (patch)
treeb2dfa0313e8c2adf6dcbf5fdfe2ea2f880d854c3
parentb74769f1b40b9d48b24f745f185432262a7e43e1 (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.c35
-rw-r--r--tests/test_subscriber.ctrl3
-rw-r--r--tests/test_subscriber_errors.ctrl6
3 files changed, 44 insertions, 0 deletions
diff --git a/src/ctrl.c b/src/ctrl.c
index aa02a0e..562ee75 100644
--- a/src/ctrl.c
+++ b/src/ctrl.c
@@ -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.