The real problem was switch_xml_toxml_buf() was actually temporarily modifying the xml structure being searialized to make it appaer to be a root structure then serializing it and restoring the pointers. This caused a non-threadsafe operation when some other thread was scanning the same xml structure.
This patch removes the modification and instead passes a new arg to switch_xml_toxml_r indicating to treat the structure as if it were a root structure.
This bug has been present since the induction of xml into FS.
Travis Cross [Sun, 16 Mar 2014 16:07:02 +0000 (16:07 +0000)]
Mitigate the CRIME TLS flaw
If an attacker can cause a device to make an authenticated request to
a service via TLS while including a payload of the attacker's choice
in that request, and if TLS compression is enabled, the attacker can
uncover the plaintext authentication information by making a series of
guesses and observing changes in the length of the ciphertext.
Chris Rienzo [Fri, 14 Mar 2014 19:50:21 +0000 (15:50 -0400)]
mod_rayo: add new config pause-when-offline - will pause inbound calling if there are no online clients to handle calls. This is useful if you want FS to respond 503 to options ping when there are no online rayo clients. Default behavior is to disable this param.
FS-6287 --resolve When a broken registrar sends a 401 unauth then replies with a subsequent 401 unauth without the stale=true attribute, sofia tries to invalidate the auth handle and get stuck in a state where it cannot recover until the reg handle is destroyed. In this case, the provider in question has a bug on thier end when the nonce count rolls from nc=000000ff to nc=00000100 they start sending several consecitive 401 rather than a 401 with stale=true or a 403. This change will allow it to reset properly and try again with nc=00000001 on the next try.
Simon Wunderlich [Fri, 28 Feb 2014 12:59:31 +0000 (13:59 +0100)]
mod_skinny: make 7925g work
Cisco 7925G seem to work only with the correct conference_id2 and
rtptimeout set, so add protocol 11 definition fields and set
conference_id2 correctly.
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de> Signed-off-by: Nathan Neulinger <nneul@neulinger.org>
Simon Wunderlich [Fri, 28 Feb 2014 13:21:39 +0000 (14:21 +0100)]
mod_skinny: remove unknown field from access_status
Cisco 7925g send access status message with just 8 byte of payload data.
Since we don't interpret the unknown 3rd field anyway, remove it. This
will prevent the first register to fail.
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de> Signed-off-by: Nathan Neulinger <nneul@neulinger.org>
Travis Cross [Wed, 5 Mar 2014 21:32:07 +0000 (21:32 +0000)]
Drop null-auth suites from our default TLS cipher list
Previously we disallowed anonymous Diffie-Hellman, but there are other
kinds of null-authentication TLS suites. In particular, disallowing
AECDH is important now that we support elliptic-curve Diffie-Hellman.
Travis Cross [Tue, 4 Mar 2014 01:51:04 +0000 (01:51 +0000)]
Improve channel variable name to srtp_allow_idle_gaps
This was momentarily called force_send_silence_when_idle, but that was
non-obvious as you had to set that value to true to be able to not
send silence when idle. This name describes the purpose much better.
Travis Cross [Mon, 3 Mar 2014 20:03:22 +0000 (20:03 +0000)]
Avoid repeating ourselves in generating silence
We were handling the "send silence but not comfort noise" case in both
silence_stream_file_read and switch_generate_sln_silence. This
changes the former to rely on the latter.
Travis Cross [Mon, 3 Mar 2014 18:33:25 +0000 (18:33 +0000)]
Add force_send_silence_when_idle channel variable
If set to true, this prevents us from overriding the value of
send_silence_when_idle. When that is unset or set to zero and SRTP is
engaged, we typically override the value because many devices can't
handle gaps in the SRTP stream.
This variable is mostly for testing whether particular devices can
handle this behavior. Use at your own risk.
Travis Cross [Mon, 3 Mar 2014 18:26:44 +0000 (18:26 +0000)]
Preserve value of send_silence_when_idle if possible
In commit 55d01d3defed4bfdc74704dbea0da9548a97a979 we set
send_silence_when_idle to -1 rather than 400 when SRTP is engaged.
But this left no way to enable white noise silence when desired.
When SRTP is engaged we can't simply not send RTP because it breaks
too many devices. So we need to prevent send_silence_when_idle from
being unset or being set to zero. This change allows it to be set to
other values so as to feed white noise rather than all zeros into the
codec.
Travis Cross [Mon, 3 Mar 2014 23:21:58 +0000 (23:21 +0000)]
Fix handling of send_silence_when_idle==0 in switch_ivr_sleep
When the channel variable send_silence_when_idle was set to zero,
switch_ivr_sleep was calling SWITCH_IVR_VERIFY_SILENCE_DIVISOR on it
anyway, causing it to be set to 400. The only way to get the behavior
of not sending silence when idle was to unset the variable completely.
This corrects the behavior such that setting the value to zero has the
same effect as leaving it unset.
Travis Cross [Sun, 2 Mar 2014 23:52:01 +0000 (23:52 +0000)]
Fix FHS default modulesdir define
The default value of libdir is (unexpanded) '${exec_prefix}/lib'. In
the non-FHS path this is fine because it only ends up in a variable
where it will be expanded later. By using this to define modulesdir
we let it slip into a define where it made no sense.
Travis Cross [Fri, 28 Feb 2014 20:28:33 +0000 (20:28 +0000)]
Show TLS cipher suite selected in sofia debug
This shows the cipher name, TLS version, the number of cipher bits and
algorithm bits, and a description of the cipher in Sofia's debug
logging output on level 9.
Travis Cross [Fri, 28 Feb 2014 17:19:43 +0000 (17:19 +0000)]
Deal with read errors in switch_xml.c
Unlike fread(3), read(3) will return -1 on error. We were assigning
the result of read to a potentially unsigned variable, and passing the
result down to switch_xml_parse_str() where it would end up
determining how many bytes to malloc(3).
Travis Cross [Fri, 21 Feb 2014 15:25:43 +0000 (15:25 +0000)]
Add man page for freeswitch
This man page is written in ronn format (package ruby-ronn on Debian)
which is a subset of markdown that can be converted to nroff man
pages, HTML, and other formats.
Travis Cross [Sun, 2 Mar 2014 07:56:32 +0000 (07:56 +0000)]
Fix switch_split_user_domain handling of sips: URLs
In commit 7efeabbd88e81ee368de6ced32fed06c8035097b Anthony fixed the
handling of sip:example.com and sips:example.com URLs, however he
introduced a regression causing URLs starting with 's' to be parsed
incorrectly.
In commit 7d2456ea27c092825c8d614ac6eee71547374464 Brian fixed the
regression, but introduced a regression causing sips:example.com URLs
to be handled incorrectly.
But our current comfort noise implementation doesn't take the codec
rate into account (FS-6291), so on 16kHz codecs the constant we chose
created an annoying level of static between sound file playback.
With this commit we preserve the sending of SRTP packets during idle
periods, but make those packets completely silent.
Thanks-to: Anthony Minessale <anthm@freeswitch.org>
FS-5053 --resolve
FS-5886 --resolve add NDLB_broken_opus_sdp which must be set as a global variable in var.xml or switch.conf.xml to enable broken opus mode for back compat with counterpath mobile
fix race condition where a transferring leg could be hungup on by the bridge partner from the previous bridge because of hangup held leg detection. The leg which was hungup when held doesn't realize the other leg has already moved on from the bridge because it was transferred and is already on its way to connect to the new destination
William King [Mon, 24 Feb 2014 01:22:36 +0000 (17:22 -0800)]
FS-5888 --resolve Rather than changing the default behavior I've updated the log line to be more accurate. Also fixed the problem where the delay was being overwritten.
Travis Cross [Sun, 23 Feb 2014 18:07:16 +0000 (18:07 +0000)]
Describe workaround in Debian/README.source
Pre-jessie versions of Debian's mk-build-deps tool rely on libraries
that do not correctly parse debian/control, so we have to clip it down
to a smaller subset of the format to build on e.g. wheezy.