ctrl: Introduce cmd SET subscriber.delete <imsi>

On success SET_REPLY contains the ID of the deleted subscriber.

Related: SYS#5993
Change-Id: I24c6149d7c223a12549d712a7929666220c0210f
This commit is contained in:
Pau Espin 2022-06-20 15:38:21 +02:00
parent b74769f1b4
commit 3ca9a1fd4f
3 changed files with 44 additions and 0 deletions

View File

@ -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);

View File

@ -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

View File

@ -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.