The ip_identify_apply() did not validate the configuration for simple
static configuration errors or deal well with address resolution errors.
* Added missing configuration validation checks.
* Fixed address resolution error handling.
* Demoted an error message to a warning since it does not fail applying
the identify object configuration.
Kevin Harwell [Wed, 3 Jan 2018 16:41:46 +0000 (10:41 -0600)]
res_pjsip_session: Check if sequence header is missing
The pjsip_msg_find_hdr function can return NULL. This patch adds a check
when searching for the sequence header to make sure a NULL pointer is never
de-referenced.
Corey Farrell [Sat, 30 Dec 2017 04:59:00 +0000 (23:59 -0500)]
core: Use macros to generate ao2_container callbacks where possible.
This uses AO2_STRING_FIELD_HASH_FN and AO2_STRING_FIELD_CMP_FN where
possible in the Asterisk core.
This removes CMP_STOP from the result of CMP_FN callbacks for the
following structure types:
* ast_bucket_metadata
* ast_bucket_scheme
* generic_monitor_instance_list (ccss.c)
* named_acl
Richard Mudgett [Thu, 28 Dec 2017 19:27:43 +0000 (13:27 -0600)]
stasis_channels.c: Misc cleanup.
* Use current OBJ_SEARCH_xxx defines instead of the deprecated versions.
* Fix hash_cb and cmp_cb container functions to correctly use the
OBJ_SEARCH_xxx values.
* Remove incorrect usage of CMP_STOP. Most uses in the system have no
effect. This allows the collapse of channel_role_single_cmp_cb() and
channel_role_multi_cmp_cb() into channel_role_cmp_cb().
Sean Bright [Wed, 13 Dec 2017 21:43:18 +0000 (16:43 -0500)]
cdr_mysql: Make sure connection charset is always set
When the MYSQL_OPT_RECONNECT option is enabled, the MySQL client API
will transparently reconnect when it needs to. Ideally this simplifies
our code, but when this reconnection occurs all connection state is
lost. Because we are not notified that this has happened, we don't know
to set our character set again (with "SET NAMES 'xyz'").
Rather than calling SET NAMES, we instead set the MYSQL_SET_CHARSET_NAME
option which will do it for us under the hood on each connect. This
option has been present in the MySQL C API for at least 15 years, so it
should be safe for most installations.
I also snuck a few other changes into this patch:
* Default the MySQL port to MYSQL_PORT (3306) instead of 0 if it's not
defined.
* Fix some erroneous and/or silly checks on the contents of the
configuration ast_str values.
ASTERISK-27366 #close
Reported by: Halil İbrahim YILDIZ
Richard Mudgett [Thu, 28 Dec 2017 02:48:40 +0000 (20:48 -0600)]
manager.c: Update AMI Status event documentation
The AMI Status event had linkedid listed twice and was missing the
effective connected line name and number headers.
NOTE: The linkedid and other standard channel snapshot fields in the XML
documentation are part of the <channel_snapshot/> XML template defined in
doc/appdocsxml.xslt.
* Cached the effective connected line party id so it doesn't get
calculated four times.
If two channels enter different native rtp bridges at the same time it is
possible that the framehook interface data pointer can be corrupted
because the struct variable was declared static.
* Fixed the reentrancy corruption by changing the framehook interface
struct static variable to a stack local variable.
* Moved the hook.data assignment outside of the channel lock. It did not
need the lock's protection. It probably was giving a false sense of
security.
The testsuite
channels/pjsip/basic_calls/two_parties/nominal/alice_initiated/bob_hangs_up
test caught this with MALLOC_DEBUG and DO_CRASH enabled.
Corey Farrell [Thu, 28 Dec 2017 01:27:18 +0000 (20:27 -0500)]
menuselect: Fix check for running configure.
menuselect/Makefile checks that autoconfig.h and makeopts were newer
than the '.in' files. Unfortunately running ./configure does not touch
autoconfig.h unless the contents will change.
Instead of looking at autoconfig.h we just need to ensure that makeopts
is newer than configure.
Also make change to configure.ac so bootstrap.sh doesn't re-add the
extra trailing line-feed.
Corey Farrell [Sun, 24 Dec 2017 04:51:13 +0000 (23:51 -0500)]
loader: Add volatile to resource_being_loaded.
Some compiler optimizers seem to assume that dlopen will not use
__attribute__((constructor)) functions to call back to the program.
This was causing resource_being_loaded to be optimized away completely.
Kevin Harwell [Wed, 20 Dec 2017 22:17:40 +0000 (16:17 -0600)]
AST-2017-014: res_pjsip - Missing contact header can cause crash
Those SIP messages that create dialogs require a contact header to be present.
If the contact header was missing from the message it could cause Asterisk to
crash.
This patch checks to make sure SIP messages that create a dialog contain the
contact header. If the message does not and it is required Asterisk now returns
a "400 Missing Contact header" response. Also added NULL checks when retrieving
the contact header that were missing as a "just in case".
Corey Farrell [Tue, 19 Dec 2017 02:12:47 +0000 (21:12 -0500)]
CLI: Address multiple issues.
* listen uses the variable `s` for the result from ast_poll() then
overwrites it with the result of accept(). Create a separate variable
poll_result to avoid confusion since ast_poll does not return a file
descriptor.
* Resolve fd leak that would occur if setsockopt failed in listen.
* Reserve an extra byte while processing completion results from remote
daemon. This fixes a bug where completion processing used strstr() on
a string that was not '\0' terminated. This was no risk to the Asterisk
daemon, the bug was only reachable the remote console process.
* Resolve leak in handle_showchan when the channel is not found.
* Multiple leaks and a deadlock in pbx_config CLI completion.
* Fix leaks in "manager show command".
Aaron An [Tue, 19 Dec 2017 20:15:29 +0000 (15:15 -0500)]
res_rtp_asterisk: Avoid close the rtp/rtcp fd twice.
When RTCP-MUX enabled. rtp->s is the same as rtcp->s, check this before
close the file descriptor. Close the FD twice will hangs the asterisk
under heavy load.
ASTERISK-27299 #close Reported-by: Aaron An Tested-by: AaronAn
Change-Id: I870a072d73fd207463ac116ef97100addbc0820a
Ivan Poddubny [Sat, 16 Dec 2017 13:51:16 +0000 (14:51 +0100)]
bridge: Stop music on hold on adding an arbitrary channel to a bridge
When a channel that is on hold gets added to a bridge by
the Bridge AMI action or the dialplan application of the same name,
music continues to play, causing "robotic sound".
This commit adds a call to ast_moh_stop to stop the music.
Also, it makes the AMI Park action use the right MOH class when the
channel gets parked.
Corey Farrell [Tue, 19 Dec 2017 00:59:57 +0000 (19:59 -0500)]
chan_sip: Fix memory leaks.
In change_redirecting_information variables we use ast_strlen_zero to
see if a value should be saved. In the case where the value is not NULL
but is a zero length string we leaked.
handle_response_subscribe leaked a reference to the ccss monitor
instance.
This module uses AST_DEFINE_APP_ARGS_TYPE to define struct's instead of
directly using AST_DECLARE_APP_ARGS. Initialize the variables declared
in this way.
Corey Farrell [Tue, 19 Dec 2017 00:04:56 +0000 (19:04 -0500)]
app_voicemail: Fix memory management issues.
* mwi_sub_event_cb: mwist leaked on separate_mailbox failure.
* add_email_attachment: A reference to sox_gain_tmpdir was used
after the storage was out of scope.
Attempting to dial PJSIP/endpoint when the endpoint doesn't exist and
disable_multi_domain=no results in a misleading empty endpoint name
message. The message should say the endpoint was not found.
* Added missing endpoint not found message.
* Added more information to the empty endpoint name msgs if available.
Corey Farrell [Tue, 21 Nov 2017 05:10:58 +0000 (00:10 -0500)]
loader: Rework of load_dynamic_module.
* Split off load_dlopen to perform actual dlopen, check results and log
warnings when needed.
* Use flags which minimize number of calls to dlopen required. First
attempt always uses RTLD_GLOBAL when global_symbols_only is enabled,
RTLD_LOCAL when it is not.
This patch significantly reduces the number of dlopen's performed. With
299 modules my system ran dlopen 857 times before this patch, 655 times
after this patch.
Corey Farrell [Wed, 22 Nov 2017 02:34:56 +0000 (21:34 -0500)]
loader: Minor fix to module registration.
This protects the module loader itself against crashing if dlopen is
called on a module from outside loader.c.
* Expand scope of lock inside ast_module_register to include reading of
resource_being_loaded.
* NULL check resource_being_loaded.
* Set resource_being_loaded NULL as soon as dlopen returns. This fixes
some error paths where it was not NULL'ed.
* Create module_destroy function to deduplicate code from
ast_module_unregister and modules_shutdown.
* Resolve leak that occured if a module did not successfully register.
* Simplify checking for successful registration.
Corey Farrell [Tue, 12 Dec 2017 18:55:12 +0000 (13:55 -0500)]
aco: Minimize use of regex.
Remove nearly all use of regex from ACO users. Still remaining:
* app_confbridge has a legitamate use of option name regex.
* ast_sorcery_object_fields_register is implemented with regex, all
callers use simple prefix based regex. I haven't decided the best
way to fix this in both 13/15 and master.
Corey Farrell [Tue, 12 Dec 2017 18:36:39 +0000 (13:36 -0500)]
aco: Create ways to minimize use of regex.
ACO uses regex in many situations where it is completely unneeded. In
some cases this doubles the total processing performed by
aco_process_config.
* Create ACO_IGNORE category type for use in place of skip_category
regex source string.
* Create additional aco_category_op values to allow specifying category
filter using either a single plain string or a NULL terminated array
of plain strings.
* Create ACO_PREFIX to allow matching option names to case insensitive
prefixes.