diff options
Diffstat (limited to 'res/res_pjsip_authenticator_digest.c')
-rw-r--r-- | res/res_pjsip_authenticator_digest.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/res/res_pjsip_authenticator_digest.c b/res/res_pjsip_authenticator_digest.c index 8a781254c..ff46fd884 100644 --- a/res/res_pjsip_authenticator_digest.c +++ b/res/res_pjsip_authenticator_digest.c @@ -31,6 +31,10 @@ <support_level>core</support_level> ***/ +/* From the auth/realm realtime column size */ +#define MAX_REALM_LENGTH 40 +static char default_realm[MAX_REALM_LENGTH + 1]; + AO2_GLOBAL_OBJ_STATIC(entity_id); /*! @@ -409,7 +413,7 @@ static enum ast_sip_check_auth_result digest_check_auth(struct ast_sip_endpoint for (i = 0; i < auth_size; ++i) { if (ast_strlen_zero(auths[i]->realm)) { - ast_string_field_set(auths[i], realm, "asterisk"); + ast_string_field_set(auths[i], realm, default_realm); } verify_res[i] = verify(auths[i], rdata, tdata->pool); if (verify_res[i] == AUTH_SUCCESS) { @@ -456,6 +460,16 @@ static int build_entity_id(void) return 0; } +static void global_loaded(const char *object_type) +{ + ast_sip_get_default_realm(default_realm, sizeof(default_realm)); +} + +/*! \brief Observer which is used to update our default_realm when the global setting changes */ +static struct ast_sorcery_observer global_observer = { + .loaded = global_loaded, +}; + static int reload_module(void) { if (build_entity_id()) { @@ -471,6 +485,10 @@ static int load_module(void) if (build_entity_id()) { return AST_MODULE_LOAD_DECLINE; } + + ast_sorcery_observer_add(ast_sip_get_sorcery(), "global", &global_observer); + ast_sorcery_reload_object(ast_sip_get_sorcery(), "global"); + if (ast_sip_register_authenticator(&digest_authenticator)) { ao2_global_obj_release(entity_id); return AST_MODULE_LOAD_DECLINE; @@ -480,6 +498,7 @@ static int load_module(void) static int unload_module(void) { + ast_sorcery_observer_remove(ast_sip_get_sorcery(), "global", &global_observer); ast_sip_unregister_authenticator(&digest_authenticator); ao2_global_obj_release(entity_id); return 0; |