|
From: <abe...@us...> - 2017-06-22 14:09:36
|
Revision: 8412
http://sourceforge.net/p/astlinux/code/8412
Author: abelbeck
Date: 2017-06-22 14:09:34 +0000 (Thu, 22 Jun 2017)
Log Message:
-----------
asterisk, add Asterisk 13 patch fo fix 13.16.0 crash with missing ari.conf file
Ref: http://git.asterisk.org/gitweb/?p=asterisk/asterisk.git;a=commit;h=7901b9853e8f60e1d2dce44ce81dec6f7f866ccc
Added Paths:
-----------
branches/1.0/package/asterisk/asterisk-13-upstream-missing-ari-conf-crash.patch
Added: branches/1.0/package/asterisk/asterisk-13-upstream-missing-ari-conf-crash.patch
===================================================================
--- branches/1.0/package/asterisk/asterisk-13-upstream-missing-ari-conf-crash.patch (rev 0)
+++ branches/1.0/package/asterisk/asterisk-13-upstream-missing-ari-conf-crash.patch 2017-06-22 14:09:34 UTC (rev 8412)
@@ -0,0 +1,295 @@
+From: George Joseph <gj...@di...>
+Date: Tue, 13 Jun 2017 16:33:34 +0000 (-0600)
+Subject: res_ari: Add "module loaded" check to ari stubs
+X-Git-Url: http://git.asterisk.org/gitweb/?p=asterisk%2Fasterisk.git;a=commitdiff_plain;h=7901b9853e8f60e1d2dce44ce81dec6f7f866ccc
+
+res_ari: Add "module loaded" check to ari stubs
+
+The recent change to make the use of LOAD_DECLINE more consistent
+caused res_ari to unload itself before declining if the ari.conf
+file wasn't found. The ari stubs though still tried to use the
+configuration resulting in segfaults.
+
+This patch creates a new CHECK_ARI_MODULE_LOADED macro which tests
+to see if res_ari is actually loaded and causes the stubs to also
+decline if it isn't. The macro was then added to the mustache
+template's "load_module" function.
+
+ASTERISK-27026 #close
+Reported-by: Ronald Raikes
+
+Change-Id: I263d56efa628ee3c411bdcd16d49af6260c6c91d
+---
+
+diff --git a/include/asterisk/ari.h b/include/asterisk/ari.h
+index cad9b32..f83df04 100644
+--- a/include/asterisk/ari.h
++++ b/include/asterisk/ari.h
+@@ -266,4 +266,14 @@ void ast_ari_response_created(struct ast_ari_response *response,
+ */
+ void ast_ari_response_alloc_failed(struct ast_ari_response *response);
+
++/*! \brief Determines whether the res_ari module is loaded */
++#define CHECK_ARI_MODULE_LOADED() \
++ do { \
++ if (!ast_module_check("res_ari.so") \
++ || !ast_ari_oom_json()) { \
++ return AST_MODULE_LOAD_DECLINE; \
++ } \
++ } while(0)
++
++
+ #endif /* _ASTERISK_ARI_H */
+diff --git a/res/res_ari_applications.c b/res/res_ari_applications.c
+index cb12e84..290719d 100644
+--- a/res/res_ari_applications.c
++++ b/res/res_ari_applications.c
+@@ -502,6 +502,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&applications);
+ if (res) {
+diff --git a/res/res_ari_asterisk.c b/res/res_ari_asterisk.c
+index 1a574aa..73e4d0c 100644
+--- a/res/res_ari_asterisk.c
++++ b/res/res_ari_asterisk.c
+@@ -1223,6 +1223,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&asterisk);
+ if (res) {
+diff --git a/res/res_ari_bridges.c b/res/res_ari_bridges.c
+index 69d4d6e..b923330 100644
+--- a/res/res_ari_bridges.c
++++ b/res/res_ari_bridges.c
+@@ -1415,6 +1415,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&bridges);
+ if (res) {
+diff --git a/res/res_ari_channels.c b/res/res_ari_channels.c
+index f59f206..6217679 100644
+--- a/res/res_ari_channels.c
++++ b/res/res_ari_channels.c
+@@ -2479,6 +2479,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&channels);
+ if (res) {
+diff --git a/res/res_ari_device_states.c b/res/res_ari_device_states.c
+index a3711e6..fe1817d 100644
+--- a/res/res_ari_device_states.c
++++ b/res/res_ari_device_states.c
+@@ -333,6 +333,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&deviceStates);
+ if (res) {
+diff --git a/res/res_ari_endpoints.c b/res/res_ari_endpoints.c
+index 43d2558..a46b0dc 100644
+--- a/res/res_ari_endpoints.c
++++ b/res/res_ari_endpoints.c
+@@ -457,6 +457,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&endpoints);
+ if (res) {
+diff --git a/res/res_ari_events.c b/res/res_ari_events.c
+index fd208c5..b6a44d9 100644
+--- a/res/res_ari_events.c
++++ b/res/res_ari_events.c
+@@ -430,22 +430,29 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
+- struct ast_websocket_protocol *protocol;
+
+- events.ws_server = ast_websocket_server_create();
+- if (!events.ws_server) {
+- return AST_MODULE_LOAD_DECLINE;
+- }
++ CHECK_ARI_MODULE_LOADED();
+
+- protocol = ast_websocket_sub_protocol_alloc("ari");
+- if (!protocol) {
+- ao2_ref(events.ws_server, -1);
+- events.ws_server = NULL;
+- return AST_MODULE_LOAD_DECLINE;
++ /* This is scoped to not conflict with CHECK_ARI_MODULE_LOADED */
++ {
++ struct ast_websocket_protocol *protocol;
++
++ events.ws_server = ast_websocket_server_create();
++ if (!events.ws_server) {
++ return AST_MODULE_LOAD_DECLINE;
++ }
++
++ protocol = ast_websocket_sub_protocol_alloc("ari");
++ if (!protocol) {
++ ao2_ref(events.ws_server, -1);
++ events.ws_server = NULL;
++ return AST_MODULE_LOAD_DECLINE;
++ }
++ protocol->session_attempted = ast_ari_events_event_websocket_ws_attempted_cb;
++ protocol->session_established = ast_ari_events_event_websocket_ws_established_cb;
++ res |= ast_websocket_server_add_protocol2(events.ws_server, protocol);
+ }
+- protocol->session_attempted = ast_ari_events_event_websocket_ws_attempted_cb;
+- protocol->session_established = ast_ari_events_event_websocket_ws_established_cb;
+- res |= ast_websocket_server_add_protocol2(events.ws_server, protocol);
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&events);
+ if (res) {
+diff --git a/res/res_ari_mailboxes.c b/res/res_ari_mailboxes.c
+index f85541c..600ecfd 100644
+--- a/res/res_ari_mailboxes.c
++++ b/res/res_ari_mailboxes.c
+@@ -339,6 +339,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&mailboxes);
+ if (res) {
+diff --git a/res/res_ari_playbacks.c b/res/res_ari_playbacks.c
+index 25e211c..106463b 100644
+--- a/res/res_ari_playbacks.c
++++ b/res/res_ari_playbacks.c
+@@ -291,6 +291,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&playbacks);
+ if (res) {
+diff --git a/res/res_ari_recordings.c b/res/res_ari_recordings.c
+index 29720a8..c43148d 100644
+--- a/res/res_ari_recordings.c
++++ b/res/res_ari_recordings.c
+@@ -807,6 +807,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&recordings);
+ if (res) {
+diff --git a/res/res_ari_sounds.c b/res/res_ari_sounds.c
+index 6d09d2c..e58ecd1 100644
+--- a/res/res_ari_sounds.c
++++ b/res/res_ari_sounds.c
+@@ -221,6 +221,10 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&sounds);
+ if (res) {
+diff --git a/rest-api-templates/res_ari_resource.c.mustache b/rest-api-templates/res_ari_resource.c.mustache
+index 921b007..b4d8010 100644
+--- a/rest-api-templates/res_ari_resource.c.mustache
++++ b/rest-api-templates/res_ari_resource.c.mustache
+@@ -262,30 +262,37 @@ static int unload_module(void)
+ static int load_module(void)
+ {
+ int res = 0;
++
++ CHECK_ARI_MODULE_LOADED();
++
+ {{#apis}}
+ {{#operations}}
+ {{#has_websocket}}
+- struct ast_websocket_protocol *protocol;
++ /* This is scoped to not conflict with CHECK_ARI_MODULE_LOADED */
++ {
++ struct ast_websocket_protocol *protocol;
+
+- {{full_name}}.ws_server = ast_websocket_server_create();
+- if (!{{full_name}}.ws_server) {
+- return AST_MODULE_LOAD_DECLINE;
+- }
++ {{full_name}}.ws_server = ast_websocket_server_create();
++ if (!{{full_name}}.ws_server) {
++ return AST_MODULE_LOAD_DECLINE;
++ }
+
+- protocol = ast_websocket_sub_protocol_alloc("{{websocket_protocol}}");
+- if (!protocol) {
+- ao2_ref({{full_name}}.ws_server, -1);
+- {{full_name}}.ws_server = NULL;
+- return AST_MODULE_LOAD_DECLINE;
+- }
+- protocol->session_attempted = ast_ari_{{c_name}}_{{c_nickname}}_ws_attempted_cb;
+- protocol->session_established = ast_ari_{{c_name}}_{{c_nickname}}_ws_established_cb;
++ protocol = ast_websocket_sub_protocol_alloc("{{websocket_protocol}}");
++ if (!protocol) {
++ ao2_ref({{full_name}}.ws_server, -1);
++ {{full_name}}.ws_server = NULL;
++ return AST_MODULE_LOAD_DECLINE;
++ }
++ protocol->session_attempted = ast_ari_{{c_name}}_{{c_nickname}}_ws_attempted_cb;
++ protocol->session_established = ast_ari_{{c_name}}_{{c_nickname}}_ws_established_cb;
+ {{/has_websocket}}
+ {{#is_websocket}}
+- res |= ast_websocket_server_add_protocol2({{full_name}}.ws_server, protocol);
++ res |= ast_websocket_server_add_protocol2({{full_name}}.ws_server, protocol);
++ }
+ {{/is_websocket}}
+ {{/operations}}
+ {{/apis}}
++
+ stasis_app_ref();
+ res |= ast_ari_add_handler(&{{root_full_name}});
+ if (res) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|