diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2018-12-02 19:46:46 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-12-02 20:16:31 +0100 |
commit | a820ea1f67bab68136fbaae0108bb90c94b77b22 (patch) | |
tree | b9f94dd6ef8e4a1b3ee3388f52bdb32d1eeb2925 /src/hlr_vty_subscr.c | |
parent | 8aa780bf80fa4ffde8a5df9d8b87a2e919193f1f (diff) |
implement removal of MSISDN
Add the first "official" way to remove the MSISDN from a subscriber entry, to
go back to 'MSISDN: none' like just after 'subscriber create'.
Add VTY command 'subscriber <ID> update msisdn none' to drop the MSISDN from
the subscriber. (Like 'subscriber <ID> update aud3g none')
Add DB_STMT_DELETE_MSISDN_BY_IMSI.
In db_subscr_update_msisdn_by_imsi(), allow passing a NULL msisdn, and if NULL,
call above delete SQL statement.
Change-Id: I15419105ea461137776adb92d384d8985210c90e
Diffstat (limited to 'src/hlr_vty_subscr.c')
-rw-r--r-- | src/hlr_vty_subscr.c | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/src/hlr_vty_subscr.c b/src/hlr_vty_subscr.c index ddbaf26..bc6f6a5 100644 --- a/src/hlr_vty_subscr.c +++ b/src/hlr_vty_subscr.c @@ -142,6 +142,7 @@ static int get_subscr_by_argv(struct vty *vty, const char *type, const char *id, #define SUBSCR_UPDATE SUBSCR "update " #define SUBSCR_UPDATE_HELP SUBSCR_HELP "Set or update subscriber data\n" +#define SUBSCR_MSISDN_HELP "Set MSISDN (phone number) of the subscriber\n" DEFUN(subscriber_show, subscriber_show_cmd, @@ -228,9 +229,9 @@ DEFUN(subscriber_delete, DEFUN(subscriber_msisdn, subscriber_msisdn_cmd, - SUBSCR_UPDATE "msisdn MSISDN", - SUBSCR_UPDATE_HELP - "Set MSISDN (phone number) of the subscriber\n" + SUBSCR_UPDATE "msisdn (none|MSISDN)", + SUBSCR_UPDATE_HELP SUBSCR_MSISDN_HELP + "Remove MSISDN (phone number)\n" "New MSISDN (phone number)\n") { struct hlr_subscriber subscr; @@ -238,15 +239,19 @@ DEFUN(subscriber_msisdn, const char *id = argv[1]; const char *msisdn = argv[2]; - if (strlen(msisdn) > sizeof(subscr.msisdn) - 1) { - vty_out(vty, "%% MSISDN is too long, max. %zu characters are allowed%s", - sizeof(subscr.msisdn)-1, VTY_NEWLINE); - return CMD_WARNING; - } - - if (!osmo_msisdn_str_valid(msisdn)) { - vty_out(vty, "%% MSISDN invalid: '%s'%s", msisdn, VTY_NEWLINE); - return CMD_WARNING; + if (strcmp(msisdn, "none") == 0) + msisdn = NULL; + else { + if (strlen(msisdn) > sizeof(subscr.msisdn) - 1) { + vty_out(vty, "%% MSISDN is too long, max. %zu characters are allowed%s", + sizeof(subscr.msisdn)-1, VTY_NEWLINE); + return CMD_WARNING; + } + + if (!osmo_msisdn_str_valid(msisdn)) { + vty_out(vty, "%% MSISDN invalid: '%s'%s", msisdn, VTY_NEWLINE); + return CMD_WARNING; + } } if (get_subscr_by_argv(vty, id_type, id, &subscr)) @@ -258,11 +263,18 @@ DEFUN(subscriber_msisdn, return CMD_WARNING; } - vty_out(vty, "%% Updated subscriber IMSI='%s' to MSISDN='%s'%s", - subscr.imsi, msisdn, VTY_NEWLINE); + if (msisdn) { + vty_out(vty, "%% Updated subscriber IMSI='%s' to MSISDN='%s'%s", + subscr.imsi, msisdn, VTY_NEWLINE); + + if (db_subscr_get_by_msisdn(g_hlr->dbc, msisdn, &subscr) == 0) + osmo_hlr_subscriber_update_notify(&subscr); + } else { + vty_out(vty, "%% Updated subscriber IMSI='%s': removed MSISDN%s", + subscr.imsi, VTY_NEWLINE); - if (db_subscr_get_by_msisdn(g_hlr->dbc, msisdn, &subscr) == 0) osmo_hlr_subscriber_update_notify(&subscr); + } return CMD_SUCCESS; } |