diff --git a/src/include/private/switch_core_pvt.h b/src/include/private/switch_core_pvt.h index f8c6a794b9..ab0777ed3b 100644 --- a/src/include/private/switch_core_pvt.h +++ b/src/include/private/switch_core_pvt.h @@ -248,6 +248,7 @@ struct switch_runtime { int max_sql_buffer_len; switch_dbtype_t odbc_dbtype; char hostname[256]; + int multiple_registrations; }; extern struct switch_runtime runtime; diff --git a/src/switch_core.c b/src/switch_core.c index 66731b61c8..5479229100 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1549,6 +1549,8 @@ static void switch_load_core_config(const char *file) if (tmp > -1 && tmp < 11) { switch_core_session_ctl(SCSC_DEBUG_LEVEL, &tmp); } + } else if (!strcasecmp(var, "multiple-registrations")) { + runtime.multiple_registrations = switch_true(val); } else if (!strcasecmp(var, "sql-buffer-len")) { int tmp = atoi(val); diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index f135e9586d..1274213893 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -1653,7 +1653,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_add_registration(const char *user, c return SWITCH_STATUS_FALSE; } - sql = switch_mprintf("delete from registrations where hostname='%q' and (url='%q' or token='%q')", switch_core_get_hostname(), url, switch_str_nil(token)); + if (runtime.multiple_registrations) { + sql = switch_mprintf("delete from registrations where hostname='%q' and (url='%q' or token='%q')", + switch_core_get_hostname(), url, switch_str_nil(token)); + } else { + sql = switch_mprintf("delete from registrations where reg_user='%q' and realm='%q' and hostname='%q'", + user, realm, switch_core_get_hostname()); + } + switch_cache_db_execute_sql(dbh, sql, NULL); free(sql);