Compare commits

...

32 Commits

Author SHA1 Message Date
Asterisk Autobuilder
cf2feb900a Importing release summary for 10.0.1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.1@351615 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-01-19 23:12:53 +00:00
Matthew Jordan
36a3b64fc5 Commit 351505
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.1@351614 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-01-19 23:08:51 +00:00
Asterisk Autobuilder
991a5815ad Importing release summary for 10.0.1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.1@351558 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-01-19 21:38:41 +00:00
Matthew Jordan
43c5f63aca Created tag 10.0.1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.1@351503 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-01-19 17:00:50 +00:00
Asterisk Autobuilder
847f753c4e Importing release summary for 10.0.0 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0@348309 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-12-15 21:02:15 +00:00
Asterisk Autobuilder
adb030a737 Update .version and ChangeLog Files. Remove old summary files.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0@348308 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-12-15 19:48:54 +00:00
Asterisk Autobuilder
f36d582ed0 Create Asterisk 10.0.0 from 10.0.0-rc3
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0@348307 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-12-15 19:33:25 +00:00
Asterisk Autobuilder
ceb12a35e2 Importing release summary for 10.0.0-rc3 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc3@347810 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-12-08 23:43:30 +00:00
Matthew Jordan
5a0e40fe2f Merged BLF patch and security patches
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc3@347809 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-12-08 23:20:44 +00:00
Matthew Jordan
3f2f5a937c Duh, wrong rc.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc3@347773 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-12-08 21:58:45 +00:00
Matthew Jordan
45849eb528 Creating rc3 tag
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc3@347772 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-12-08 21:56:08 +00:00
Asterisk Autobuilder
5b13b1fc42 Update ChangeLog
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc3@346142 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-23 19:14:02 +00:00
Leif Madsen
4b68462707 Merge changes from revisions: 346040, 345640, 345830
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc3@346141 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-23 19:06:21 +00:00
Leif Madsen
bd3620bfa9 Update .version and remote existing summary files.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc3@346140 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-23 18:59:05 +00:00
Asterisk Autobuilder
39c1945702 Create Asterisk 10.0.0-rc3 from Asterisk 10.0.0-rc2
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc3@346139 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-23 18:29:10 +00:00
Asterisk Autobuilder
e6a8fb20ac Importing release summary for 10.0.0-rc2 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc2@345419 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-15 18:37:31 +00:00
Asterisk Autobuilder
630fa7a94b Importing release summary for 10.0.0-rc2 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc2@345418 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-15 18:34:24 +00:00
Asterisk Autobuilder
8ae283533e Remove summary files for release
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc2@345416 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-15 18:31:45 +00:00
Matthew Jordan
59a9542a66 Updated .version and ChangeLog for rc2
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc2@345376 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-15 18:18:17 +00:00
Matthew Jordan
26bbbc62a9 Merge of blockers from 10 to rc2
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc2@345368 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-15 15:24:31 +00:00
Matthew Jordan
c7f2d271fb Created 10.0.0-rc2
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc2@345363 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-15 14:15:31 +00:00
Asterisk Autobuilder
7a25aaf5ae Use autotagged externals
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@344003 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 21:51:15 +00:00
Asterisk Autobuilder
089a1d4eda Importing release summary for 10.0.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@344002 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 21:51:11 +00:00
Asterisk Autobuilder
ff91e82776 Importing files for 10.0.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@344001 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 21:51:09 +00:00
Asterisk Autobuilder
4401c5206d Creating tag for the release of asterisk-10.0.0-rc1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@344000 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 21:49:29 +00:00
Asterisk Autobuilder
ae10bd24a5 Use autotagged externals
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@343797 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 13:36:01 +00:00
Asterisk Autobuilder
0fdf14a260 Importing release summary for 10.0.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@343796 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 13:35:57 +00:00
Asterisk Autobuilder
2a57c8681e Importing files for 10.0.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@343795 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 13:35:55 +00:00
Asterisk Autobuilder
572748e5bc Creating tag for the release of asterisk-10.0.0-rc1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@343794 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 13:34:49 +00:00
Asterisk Autobuilder
54e7a014e8 Use autotagged externals
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@343788 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 13:18:53 +00:00
Asterisk Autobuilder
e357c7af5c Importing release summary for 10.0.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@343787 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 13:18:49 +00:00
Asterisk Autobuilder
fa47558077 Creating tag for the release of asterisk-10.0.0-rc1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.0.0-rc1@343786 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-11-08 13:12:09 +00:00
18 changed files with 32602 additions and 73 deletions

3
.lastclean Normal file
View File

@@ -0,0 +1,3 @@
39

1
.version Normal file
View File

@@ -0,0 +1 @@
10.0.1

View File

@@ -258,6 +258,11 @@ PBX Core
SIP Changes
-----------
* Due to potential username discovery vulnerabilities, the 'nat' setting in sip.conf
now defaults to force_rport. It is very important that phones requiring nat=no be
specifically set as such instead of relying on the default setting. If at all
possible, all devices should have nat settings configured in the general section as
opposed to configuring nat per-device.
* Added preferred_codec_only option in sip.conf. This feature limits the joint
codecs sent in response to an INVITE to the single most preferred codec.
* Added SIP_CODEC_OUTBOUND dialplan variable which can be used to set the codec

19101
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -40,6 +40,8 @@ export ASTERISKVERSIONNUM
# DESTDIR is the staging (or final) directory where files are copied
# during the install process. Define it before 'export', otherwise
# export will set it to the empty string making ?= fail.
# Trying to run asterisk from the DESTDIR is completely unsupported
# behavior.
# WARNING: do not put spaces or comments after the value.
DESTDIR?=$(INSTALL_PATH)
export DESTDIR
@@ -405,7 +407,7 @@ $(MOD_SUBDIRS):
$(OTHER_SUBDIRS):
+@_ASTCFLAGS="$(OTHER_SUBDIR_CFLAGS) $(_ASTCFLAGS)" ASTCFLAGS="$(ASTCFLAGS)" _ASTLDFLAGS="$(_ASTLDFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(SUBMAKE) --no-builtin-rules -C $@ SUBDIR=$@ all
defaults.h: makeopts
defaults.h: makeopts build_tools/make_defaults_h
@build_tools/make_defaults_h > $@.tmp
@cmp -s $@.tmp $@ || mv $@.tmp $@
@rm -f $@.tmp

View File

@@ -28,7 +28,7 @@
/*** MODULEINFO
<support_level>core</support_level>
<replacement>app_stack (GoSub)</replacement>
*/
***/
#include "asterisk.h"

5476
asterisk-10.0.0-summary.html Normal file

File diff suppressed because it is too large Load Diff

7709
asterisk-10.0.0-summary.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,63 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Release Summary - asterisk-10.0.1</title></head>
<body>
<h1 align="center"><a name="top">Release Summary</a></h1>
<h3 align="center">asterisk-10.0.1</h3>
<h3 align="center">Date: 2012-01-19</h3>
<h3 align="center">&lt;asteriskteam@digium.com&gt;</h3>
<hr/>
<h2 align="center">Table of Contents</h2>
<ol>
<li><a href="#summary">Summary</a></li>
<li><a href="#contributors">Contributors</a></li>
<li><a href="#commits">Other Changes</a></li>
<li><a href="#diffstat">Diffstat</a></li>
</ol>
<hr/>
<a name="summary"><h2 align="center">Summary</h2></a>
<center><a href="#top">[Back to Top]</a></center><br/><p>This release has been made to address one or more security vulnerabilities that have been identified. A security advisory document has been published for each vulnerability that includes additional information. Users of versions of Asterisk that are affected are strongly encouraged to review the advisories and determine what action they should take to protect their systems from these issues.</p>
<p>Security Advisories: <a href="http://downloads.asterisk.org/pub/security/AST-2012-001.html">AST-2012-001</a></p>
<p>The data in this summary reflects changes that have been made since the previous release, asterisk-10.0.0.</p>
<hr/>
<a name="contributors"><h2 align="center">Contributors</h2></a>
<center><a href="#top">[Back to Top]</a></center><br/><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were closed by commits that went into this release.</p>
<table width="100%" border="0">
<tr>
<td width="33%"><h3>Coders</h3></td>
<td width="33%"><h3>Testers</h3></td>
<td width="33%"><h3>Reporters</h3></td>
</tr>
<tr valign="top">
<td>
2 mjordan<br/>
1 bebuild<br/>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<hr/>
<a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a>
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all changes that went into this release that did not directly close an issue from the issue tracker. The commits may have been marked as being related to an issue. If that is the case, the issue numbers are listed here, as well.</p>
<table width="100%" border="1">
<tr><td><b>Revision</b></td><td><b>Author</b></td><td><b>Summary</b></td><td><b>Issues Referenced</b></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/tags/10.0.1?view=revision&revision=351503">351503</a></td><td>mjordan</td><td>Created tag 10.0.1</td>
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/tags/10.0.1?view=revision&revision=351558">351558</a></td><td>bebuild</td><td>Importing release summary for 10.0.1 release.</td>
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/tags/10.0.1?view=revision&revision=351614">351614</a></td><td>mjordan</td><td>Commit 351505</td>
<td></td></tr></table>
<hr/>
<a name="diffstat"><h2 align="center">Diffstat Results</h2></a>
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p>
<pre>
.version | 2 -
ChangeLog | 6 +++
asterisk-10.0.1-summary.html | 55 ++++++++++++++++++++++++++++
asterisk-10.0.1-summary.txt | 82 +++++++++++++++++++++++++++++++++++++++++++
channels/chan_sip.c | 6 +++
5 files changed, 150 insertions(+), 1 deletion(-)
</pre><br/>
<hr/>
</body>
</html>

View File

@@ -0,0 +1,93 @@
Release Summary
asterisk-10.0.1
Date: 2012-01-19
<asteriskteam@digium.com>
----------------------------------------------------------------------
Table of Contents
1. Summary
2. Contributors
3. Other Changes
4. Diffstat
----------------------------------------------------------------------
Summary
[Back to Top]
This release has been made to address one or more security vulnerabilities
that have been identified. A security advisory document has been published
for each vulnerability that includes additional information. Users of
versions of Asterisk that are affected are strongly encouraged to review
the advisories and determine what action they should take to protect their
systems from these issues.
Security Advisories: AST-2012-001
The data in this summary reflects changes that have been made since the
previous release, asterisk-10.0.0.
----------------------------------------------------------------------
Contributors
[Back to Top]
This table lists the people who have submitted code, those that have
tested patches, as well as those that reported issues on the issue tracker
that were resolved in this release. For coders, the number is how many of
their patches (of any size) were committed into this release. For testers,
the number is the number of times their name was listed as assisting with
testing a patch. Finally, for reporters, the number is the number of
issues that they reported that were closed by commits that went into this
release.
Coders Testers Reporters
2 mjordan
1 bebuild
----------------------------------------------------------------------
Commits Not Associated with an Issue
[Back to Top]
This is a list of all changes that went into this release that did not
directly close an issue from the issue tracker. The commits may have been
marked as being related to an issue. If that is the case, the issue
numbers are listed here, as well.
+------------------------------------------------------------------------+
| Revision | Author | Summary | Issues Referenced |
|----------+---------+-------------------------------+-------------------|
| 351503 | mjordan | Created tag 10.0.1 | |
|----------+---------+-------------------------------+-------------------|
| 351558 | bebuild | Importing release summary for | |
| | | 10.0.1 release. | |
|----------+---------+-------------------------------+-------------------|
| 351614 | mjordan | Commit 351505 | |
+------------------------------------------------------------------------+
----------------------------------------------------------------------
Diffstat Results
[Back to Top]
This is a summary of the changes to the source code that went into this
release that was generated using the diffstat utility.
.version | 2 -
ChangeLog | 6 +++
asterisk-10.0.1-summary.html | 55 ++++++++++++++++++++++++++++
asterisk-10.0.1-summary.txt | 82 +++++++++++++++++++++++++++++++++++++++++++
channels/chan_sip.c | 6 +++
5 files changed, 150 insertions(+), 1 deletion(-)
----------------------------------------------------------------------

View File

@@ -25,4 +25,5 @@ cat << END
#define DEFAULT_SPOOL_DIR "${INSTALL_PATH}${ASTSPOOLDIR}"
#define DEFAULT_TMP_DIR "${INSTALL_PATH}${ASTSPOOLDIR}/tmp"
#define DEFAULT_SBIN_DIR "${INSTALL_PATH}${ASTSBINDIR}"
END

View File

@@ -18994,11 +18994,18 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req)
per device. I don't want incoming callers to record calls in my
pbx.
*/
/* first, get the feature string, if it exists */
struct ast_call_feature *feat;
int j;
struct ast_frame f = { AST_FRAME_DTMF, };
if (!p->owner) { /* not a PBX call */
transmit_response(p, "481 Call leg/transaction does not exist", req);
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
return;
}
/* first, get the feature string, if it exists */
ast_rdlock_call_features();
feat = ast_find_call_feature("automon");
if (!feat || ast_strlen_zero(feat->exten)) {
@@ -24142,20 +24149,17 @@ static int sip_msg_send(const struct ast_msg *msg, const char *to, const char *f
{
struct sip_pvt *pvt;
int res;
char *peer;
char *to_uri, *to_host, *to_user;
struct sip_peer *peer_ptr;
if (!(pvt = sip_alloc(NULL, NULL, 0, SIP_MESSAGE, NULL))) {
return -1;
}
peer = ast_strdupa(to);
if (strchr(peer, '@')) {
strsep(&peer, "@");
} else {
strsep(&peer, ":");
}
if (ast_strlen_zero(peer)) {
to_uri = ast_strdupa(to);
parse_uri(to_uri, "sip:,sips:", &to_user, NULL, &to_host, NULL);
if (ast_strlen_zero(to_host)) {
ast_log(LOG_WARNING, "MESSAGE(to) is invalid for SIP - '%s'\n", to);
dialog_unlink_all(pvt);
dialog_unref(pvt, "MESSAGE(to) is invalid for SIP");
@@ -24188,12 +24192,17 @@ static int sip_msg_send(const struct ast_msg *msg, const char *to, const char *f
sip_pvt_lock(pvt);
if (create_addr(pvt, peer, NULL, TRUE, NULL)) {
/* Look up the host to contact */
if (create_addr(pvt, to_host, NULL, TRUE, NULL)) {
sip_pvt_unlock(pvt);
dialog_unlink_all(pvt);
dialog_unref(pvt, "create_addr failed sending a MESSAGE");
return -1;
}
if (!ast_strlen_zero(to_user)) {
ast_string_field_set(pvt, username, to_user);
}
ast_sip_ouraddrfor(&pvt->sa, &pvt->ourip, pvt);
ast_set_flag(&pvt->flags[0], SIP_OUTGOING);
@@ -24714,11 +24723,21 @@ static int handle_request_publish(struct sip_pvt *p, struct sip_request *req, st
return handler_result;
}
/*! \internal \brief Subscribe to MWI events for the specified peer
* \note The peer cannot be locked during this method. sip_send_mwi_peer will
* attempt to lock the peer after the event subscription lock is held; if the peer is locked during
* this method then we will attempt to lock the event subscription lock but after the peer, creating
* a locking inversion.
*/
static void add_peer_mwi_subs(struct sip_peer *peer)
{
struct sip_mailbox *mailbox;
AST_LIST_TRAVERSE(&peer->mailboxes, mailbox, entry) {
if (mailbox->event_sub) {
ast_event_unsubscribe(mailbox->event_sub);
}
mailbox->event_sub = ast_event_subscribe(AST_EVENT_MWI, mwi_event_cb, "SIP mbox event", peer,
AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR, mailbox->mailbox,
AST_EVENT_IE_CONTEXT, AST_EVENT_IE_PLTYPE_STR, S_OR(mailbox->context, "default"),
@@ -24872,7 +24891,7 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
/* if an authentication response was sent, we are done here */
if (res == AUTH_CHALLENGE_SENT) /* authpeer = NULL here */
return 0;
if (res < 0) {
if (res != AUTH_SUCCESSFUL) {
if (res == AUTH_FAKE_AUTH) {
ast_log(LOG_NOTICE, "Sending fake auth rejection for device %s\n", sip_get_header(req, "From"));
transmit_fake_auth_response(p, SIP_SUBSCRIBE, req, XMIT_UNRELIABLE);
@@ -24886,17 +24905,17 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
}
}
/* At this point, authpeer cannot be NULL. Remember we hold a reference,
* so we must release it when done.
* XXX must remove all the checks for authpeer == NULL.
/* At this point, we hold a reference to authpeer (if not NULL). It
* must be released when done.
*/
/* Check if this device is allowed to subscribe at all */
if (!ast_test_flag(&p->flags[1], SIP_PAGE2_ALLOWSUBSCRIBE)) {
transmit_response(p, "403 Forbidden (policy)", req);
pvt_set_needdestroy(p, "subscription not allowed");
if (authpeer)
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 1)");
}
return 0;
}
@@ -24916,8 +24935,9 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
transmit_response(p, "404 Not Found", req);
}
pvt_set_needdestroy(p, "subscription target not found");
if (authpeer)
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 2)");
}
return 0;
}
@@ -24932,9 +24952,6 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
enum subscriptiontype subscribed = NONE;
const char *unknown_acceptheader = NULL;
if (authpeer) /* We do not need the authpeer any more */
authpeer = sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 2)");
/* Header from Xten Eye-beam Accept: multipart/related, application/rlmi+xml, application/pidf+xml, application/xpidf+xml */
accept = __get_header(req, "Accept", &start);
while ((subscribed == NONE) && !ast_strlen_zero(accept)) {
@@ -24972,6 +24989,9 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
p->subscribecontext,
p->subscribeuri);
pvt_set_needdestroy(p, "no Accept header");
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 2)");
}
return 0;
}
/* if p->subscribed is non-zero, then accept is not obligatory; according to rfc 3265 section 3.1.3, at least.
@@ -24996,6 +25016,9 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
p->subscribecontext,
p->subscribeuri);
pvt_set_needdestroy(p, "unrecognized format");
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 2)");
}
return 0;
} else {
p->subscribed = subscribed;
@@ -25018,8 +25041,9 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
transmit_response(p, "406 Not Acceptable", req);
ast_debug(2, "Received SIP mailbox subscription for unknown format: %s\n", acceptheader);
pvt_set_needdestroy(p, "unknown format");
if (authpeer)
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 3)");
}
return 0;
}
/* Looks like they actually want a mailbox status
@@ -25028,11 +25052,17 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
In most devices, this is configurable to the voicemailmain extension you use
*/
if (!authpeer || AST_LIST_EMPTY(&authpeer->mailboxes)) {
transmit_response(p, "404 Not found (no mailbox)", req);
if (!authpeer) {
transmit_response(p, "404 Not found", req);
} else {
transmit_response(p, "404 Not found (no mailbox)", req);
ast_log(LOG_NOTICE, "Received SIP subscribe for peer without mailbox: %s\n", S_OR(authpeer->name, ""));
}
pvt_set_needdestroy(p, "received 404 response");
ast_log(LOG_NOTICE, "Received SIP subscribe for peer without mailbox: %s\n", S_OR(authpeer->name, ""));
if (authpeer)
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 4)");
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 3)");
}
return 0;
}
@@ -25042,18 +25072,21 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
add_peer_mwi_subs(authpeer);
ao2_lock(p);
}
if (authpeer->mwipvt && authpeer->mwipvt != p) { /* Destroy old PVT if this is a new one */
if (authpeer->mwipvt != p) { /* Destroy old PVT if this is a new one */
/* We only allow one subscription per peer */
dialog_unlink_all(authpeer->mwipvt);
authpeer->mwipvt = dialog_unref(authpeer->mwipvt, "unref dialog authpeer->mwipvt");
/* sip_destroy(authpeer->mwipvt); */
if (authpeer->mwipvt) {
dialog_unlink_all(authpeer->mwipvt);
authpeer->mwipvt = dialog_unref(authpeer->mwipvt, "unref dialog authpeer->mwipvt");
}
authpeer->mwipvt = dialog_ref(p, "setting peers' mwipvt to p");
}
if (p->relatedpeer != authpeer) {
if (p->relatedpeer) {
sip_unref_peer(p->relatedpeer, "Unref previously stored relatedpeer ptr");
}
p->relatedpeer = sip_ref_peer(authpeer, "setting dialog's relatedpeer pointer");
}
if (authpeer->mwipvt)
dialog_unref(authpeer->mwipvt, "Unref previously stored mwipvt dialog pointer");
authpeer->mwipvt = dialog_ref(p, "setting peers' mwipvt to p"); /* Link from peer to pvt UH- should this be dialog_ref()? */
if (p->relatedpeer)
sip_unref_peer(p->relatedpeer, "Unref previously stored relatedpeer ptr");
p->relatedpeer = sip_ref_peer(authpeer, "setting dialog's relatedpeer pointer"); /* already refcounted...Link from pvt to peer UH- should this be dialog_ref()? */
/* Do not release authpeer here */
} else if (!strcmp(event, "call-completion")) {
handle_cc_subscribe(p, req);
@@ -25061,16 +25094,12 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
transmit_response(p, "489 Bad Event", req);
ast_debug(2, "Received SIP subscribe for unknown event package: %s\n", event);
pvt_set_needdestroy(p, "unknown event package");
if (authpeer)
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 5)");
}
return 0;
}
/* At this point, if we have an authpeer we should unref it. */
if (authpeer) {
authpeer = sip_unref_peer(authpeer, "unref pointer into (*authpeer)");
}
/* Add subscription for extension state from the PBX core */
if (p->subscribed != MWI_NOTIFICATION && p->subscribed != CALL_COMPLETION && !resubscribe) {
if (p->stateid > -1) {
@@ -25095,6 +25124,9 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
"with Expire header less that 'minexpire' limit. Received \"Expire: %d\" min is %d\n",
p->exten, p->context, p->expiry, min_expiry);
pvt_set_needdestroy(p, "Expires is less that the min expires allowed.");
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 6)");
}
return 0;
}
@@ -25130,6 +25162,9 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
ast_log(LOG_NOTICE, "Got SUBSCRIBE for extension %s@%s from %s, but there is no hint for that extension.\n", p->exten, p->context, ast_sockaddr_stringify(&p->sa));
transmit_response(p, "404 Not found", req);
pvt_set_needdestroy(p, "no extension for SUBSCRIBE");
if (authpeer) {
sip_unref_peer(authpeer, "sip_unref_peer, from handle_request_subscribe (authpeer 6)");
}
return 0;
}
ast_set_flag(&p->flags[1], SIP_PAGE2_DIALOG_ESTABLISHED);
@@ -25145,6 +25180,10 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
pvt_set_needdestroy(p, "forcing expiration");
}
}
if (authpeer) {
sip_unref_peer(authpeer, "unref pointer into (*authpeer)");
}
return 1;
}
@@ -25862,14 +25901,16 @@ static int get_cached_mwi(struct sip_peer *peer, int *new, int *old)
*/
static int sip_send_mwi_to_peer(struct sip_peer *peer, int cache_only)
{
/* Called with peerl lock, but releases it */
/* Called with peer lock, but releases it */
struct sip_pvt *p;
int newmsgs = 0, oldmsgs = 0;
const char *vmexten;
const char *vmexten = NULL;
ao2_lock(peer);
vmexten = ast_strdupa(peer->vmexten);
if (peer->vmexten) {
vmexten = ast_strdupa(peer->vmexten);
}
if (ast_test_flag((&peer->flags[1]), SIP_PAGE2_SUBSCRIBEMWIONLY) && !peer->mwipvt) {
ao2_unlock(peer);
@@ -27016,12 +27057,11 @@ static int handle_common_options(struct ast_flags *flags, struct ast_flags *mask
}
} else if (!strcasecmp(v->name, "nat")) {
ast_set_flag(&mask[0], SIP_NAT_FORCE_RPORT);
ast_set_flag(&flags[0], SIP_NAT_FORCE_RPORT); /* Default to "force_rport" */
if (!strcasecmp(v->value, "no")) {
ast_clear_flag(&flags[0], SIP_NAT_FORCE_RPORT);
} else if (!strcasecmp(v->value, "force_rport")) {
ast_set_flag(&flags[0], SIP_NAT_FORCE_RPORT);
} else if (!strcasecmp(v->value, "yes")) {
ast_set_flag(&flags[0], SIP_NAT_FORCE_RPORT);
/* We've already defaulted to force_rport */
ast_set_flag(&mask[1], SIP_PAGE2_SYMMETRICRTP);
ast_set_flag(&flags[1], SIP_PAGE2_SYMMETRICRTP);
} else if (!strcasecmp(v->value, "comedia")) {
@@ -28159,6 +28199,18 @@ static void sip_set_default_format_capabilities(struct ast_format_cap *cap)
ast_format_cap_add(cap, ast_format_set(&tmp_fmt, AST_FORMAT_H263, 0));
}
static void display_nat_warning(const char *cat, int reason, struct ast_flags *flags) {
int global_nat, specific_nat;
if (reason == CHANNEL_MODULE_LOAD && (specific_nat = ast_test_flag(&flags[0], SIP_NAT_FORCE_RPORT)) != (global_nat = ast_test_flag(&global_flags[0], SIP_NAT_FORCE_RPORT))) {
ast_log(LOG_WARNING, "!!! PLEASE NOTE: Setting 'nat' for a peer/user that differs from the global setting can make\n");
ast_log(LOG_WARNING, "!!! the name of that peer/user discoverable by an attacker. Replies for non-existent peers/users\n");
ast_log(LOG_WARNING, "!!! will be sent to a different port than replies for an existing peer/user. If at all possible,\n");
ast_log(LOG_WARNING, "!!! use the global 'nat' setting and do not set 'nat' per peer/user.\n");
ast_log(LOG_WARNING, "!!! (config category='%s' global force_rport='%s' peer/user force_rport='%s')\n", cat, AST_CLI_YESNO(global_nat), AST_CLI_YESNO(specific_nat));
}
}
/*! \brief Re-read SIP.conf config file
\note This function reloads all config data, except for
active peers (with registrations). They will only
@@ -28384,8 +28436,9 @@ static int reload_config(enum channelreloadreason reason)
ast_copy_string(default_mohinterpret, DEFAULT_MOHINTERPRET, sizeof(default_mohinterpret));
ast_copy_string(default_mohsuggest, DEFAULT_MOHSUGGEST, sizeof(default_mohsuggest));
ast_copy_string(default_vmexten, DEFAULT_VMEXTEN, sizeof(default_vmexten));
ast_set_flag(&global_flags[0], SIP_DTMF_RFC2833); /*!< Default DTMF setting: RFC2833 */
ast_set_flag(&global_flags[0], SIP_DIRECT_MEDIA); /*!< Allow re-invites */
ast_set_flag(&global_flags[0], SIP_DTMF_RFC2833); /*!< Default DTMF setting: RFC2833 */
ast_set_flag(&global_flags[0], SIP_DIRECT_MEDIA); /*!< Allow re-invites */
ast_set_flag(&global_flags[0], SIP_NAT_FORCE_RPORT); /*!< Default to nat=force_rport */
ast_copy_string(default_engine, DEFAULT_ENGINE, sizeof(default_engine));
ast_copy_string(default_parkinglot, DEFAULT_PARKINGLOT, sizeof(default_parkinglot));
@@ -29162,6 +29215,7 @@ static int reload_config(enum channelreloadreason reason)
}
peer = build_peer(cat, ast_variable_browse(cfg, cat), NULL, 0, 0);
if (peer) {
display_nat_warning(cat, reason, &peer->flags[0]);
ao2_t_link(peers, peer, "link peer into peers table");
if ((peer->type & SIP_TYPE_PEER) && !ast_sockaddr_isnull(&peer->addr)) {
ao2_t_link(peers_by_ip, peer, "link peer into peers_by_ip table");
@@ -29814,6 +29868,12 @@ static int setup_srtp(struct sip_srtp **srtp)
static int process_crypto(struct sip_pvt *p, struct ast_rtp_instance *rtp, struct sip_srtp **srtp, const char *a)
{
/* If no RTP instance exists for this media stream don't bother processing the crypto line */
if (!rtp) {
ast_debug(3, "Received offer with crypto line for media stream that is not enabled\n");
return FALSE;
}
if (strncasecmp(a, "crypto:", 7)) {
return FALSE;
}

View File

@@ -9,6 +9,7 @@ astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
astsbindir => /usr/sbin
[options]
;verbose = 3

View File

@@ -814,6 +814,14 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
; for their media streams is not actual port number that will be used on the nearer
; side of the NAT.
;
; IT IS IMPORTANT TO NOTE that if the nat setting in the general section differs from
; the nat setting in a peer definition, then the peer username will be discoverable
; by outside parties as Asterisk will respond to different ports for defined and
; undefined peers. For this reason it is recommended to ONLY DEFINE NAT SETTINGS IN THE
; GENERAL SECTION. Specifically, if nat=force_rport in one section and nat=no in the
; other, then valid users with settings differing from those in the general section will
; be discoverable.
;
; In addition to these settings, Asterisk *always* uses 'symmetric RTP' mode as defined by
; RFC 4961; Asterisk will always send RTP packets from the same port number it expects
; to receive them on.
@@ -1202,12 +1210,10 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
type=friend
[natted-phone](!,basic-options) ; another template inheriting basic-options
nat=yes
directmedia=no
host=dynamic
[public-phone](!,basic-options) ; another template inheriting basic-options
nat=no
directmedia=yes
[my-codecs](!) ; a template for my preferred codecs
@@ -1243,7 +1249,6 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
;description=Courtesy Phone ; Description of the peer. Shown when doing 'sip show peers'.
;host=192.168.0.23 ; we have a static but private IP address
; No registration allowed
;nat=no ; there is not NAT between phone and Asterisk
;directmedia=yes ; allow RTP voice traffic to bypass Asterisk
;dtmfmode=info ; either RFC2833 or INFO for the BudgeTone
;call-limit=1 ; permit only 1 outgoing call and 1 incoming call at a time
@@ -1273,7 +1278,6 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
;regexten=1234 ; When they register, create extension 1234
;callerid="Jane Smith" <5678>
;host=dynamic ; This device needs to register
;nat=yes ; X-Lite is behind a NAT router
;directmedia=no ; Typically set to NO if behind NAT
;disallow=all
;allow=gsm ; GSM consumes far less bandwidth than ulaw
@@ -1347,9 +1351,6 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
;type=friend
;secret=blah
;qualify=200 ; Qualify peer is no more than 200ms away
;nat=yes ; This phone may be natted
; Send SIP and RTP to the IP address that packet is
; received from instead of trusting SIP headers
;host=dynamic ; This device registers with us
;directmedia=no ; Asterisk by default tries to redirect the
; RTP media stream (audio) to go directly from

View File

@@ -35,5 +35,6 @@ extern const char *ast_config_AST_RUN_DIR;
extern const char *ast_config_AST_RUN_GROUP;
extern const char *ast_config_AST_RUN_USER;
extern const char *ast_config_AST_SYSTEM_NAME;
extern const char *ast_config_AST_SBIN_DIR;
#endif /* _ASTERISK_PATHS_H */

View File

@@ -242,6 +242,7 @@ struct _cfg_paths {
char config_file[PATH_MAX];
char db_path[PATH_MAX];
char sbin_dir[PATH_MAX];
char pid_path[PATH_MAX];
char socket_path[PATH_MAX];
char run_user[PATH_MAX];
@@ -262,6 +263,7 @@ const char *ast_config_AST_LOG_DIR = cfg_paths.log_dir;
const char *ast_config_AST_AGI_DIR = cfg_paths.agi_dir;
const char *ast_config_AST_KEY_DIR = cfg_paths.key_dir;
const char *ast_config_AST_RUN_DIR = cfg_paths.run_dir;
const char *ast_config_AST_SBIN_DIR = cfg_paths.sbin_dir;
const char *ast_config_AST_DB = cfg_paths.db_path;
const char *ast_config_AST_PID = cfg_paths.pid_path;
@@ -2901,6 +2903,7 @@ static void ast_readconfig(void)
ast_copy_string(cfg_paths.log_dir, DEFAULT_LOG_DIR, sizeof(cfg_paths.log_dir));
ast_copy_string(cfg_paths.agi_dir, DEFAULT_AGI_DIR, sizeof(cfg_paths.agi_dir));
ast_copy_string(cfg_paths.db_path, DEFAULT_DB, sizeof(cfg_paths.db_path));
ast_copy_string(cfg_paths.sbin_dir, DEFAULT_SBIN_DIR, sizeof(cfg_paths.sbin_dir));
ast_copy_string(cfg_paths.key_dir, DEFAULT_KEY_DIR, sizeof(cfg_paths.key_dir));
ast_copy_string(cfg_paths.pid_path, DEFAULT_PID, sizeof(cfg_paths.pid_path));
ast_copy_string(cfg_paths.socket_path, DEFAULT_SOCKET, sizeof(cfg_paths.socket_path));
@@ -2954,6 +2957,8 @@ static void ast_readconfig(void)
ast_copy_string(cfg_paths.run_dir, v->value, sizeof(cfg_paths.run_dir));
} else if (!strcasecmp(v->name, "astmoddir")) {
ast_copy_string(cfg_paths.module_dir, v->value, sizeof(cfg_paths.module_dir));
} else if (!strcasecmp(v->name, "astsbindir")) {
ast_copy_string(cfg_paths.sbin_dir, v->value, sizeof(cfg_paths.sbin_dir));
}
}
@@ -3671,7 +3676,7 @@ int main(int argc, char *argv[])
canary_pid = fork();
if (canary_pid == 0) {
char canary_binary[128], *lastslash, ppid[12];
char canary_binary[PATH_MAX], ppid[12];
/* Reset signal handler */
signal(SIGCHLD, SIG_DFL);
@@ -3681,14 +3686,9 @@ int main(int argc, char *argv[])
ast_set_priority(0);
snprintf(ppid, sizeof(ppid), "%d", (int) ast_mainpid);
execlp("astcanary", "astcanary", canary_filename, ppid, (char *)NULL);
/* If not found, try the same path as used to execute asterisk */
ast_copy_string(canary_binary, argv[0], sizeof(canary_binary));
if ((lastslash = strrchr(canary_binary, '/'))) {
ast_copy_string(lastslash + 1, "astcanary", sizeof(canary_binary) + canary_binary - (lastslash + 1));
execl(canary_binary, "astcanary", canary_filename, ppid, (char *)NULL);
}
/* Use the astcanary binary that we installed */
snprintf(canary_binary, sizeof(canary_binary), "%s/astcanary", ast_config_AST_SBIN_DIR);
execl(canary_binary, "astcanary", canary_filename, ppid, (char *)NULL);
/* Should never happen */
_exit(1);

View File

@@ -739,12 +739,13 @@ static enum ast_bridge_channel_state bridge_channel_join_multithreaded(struct as
ao2_unlock(bridge_channel->bridge);
ao2_lock(bridge_channel);
/* Wait for data to either come from the channel or us to be signalled */
if (!bridge_channel->suspended) {
ao2_unlock(bridge_channel);
ast_debug(10, "Going into a multithreaded waitfor for bridge channel %p of bridge %p\n", bridge_channel, bridge_channel->bridge);
chan = ast_waitfor_nandfds(&bridge_channel->chan, 1, fds, nfds, NULL, &outfd, &ms);
} else {
ao2_lock(bridge_channel);
ast_debug(10, "Going into a multithreaded signal wait for bridge channel %p of bridge %p\n", bridge_channel, bridge_channel->bridge);
ast_cond_wait(&bridge_channel->cond, ao2_object_get_lockaddr(bridge_channel));
ao2_unlock(bridge_channel);
@@ -777,9 +778,10 @@ static enum ast_bridge_channel_state bridge_channel_join_singlethreaded(struct a
/*! \brief Internal function that suspends a channel from a bridge */
static void bridge_channel_suspend(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel)
{
ao2_lock(bridge_channel);
bridge_channel->suspended = 1;
bridge_array_remove(bridge, bridge_channel->chan);
ao2_unlock(bridge_channel);
if (bridge->technology->suspend) {
bridge->technology->suspend(bridge, bridge_channel);
@@ -791,14 +793,18 @@ static void bridge_channel_suspend(struct ast_bridge *bridge, struct ast_bridge_
/*! \brief Internal function that unsuspends a channel from a bridge */
static void bridge_channel_unsuspend(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel)
{
bridge_channel->suspended =0;
ao2_lock(bridge_channel);
bridge_channel->suspended = 0;
bridge_array_add(bridge, bridge_channel->chan);
ast_cond_signal(&bridge_channel->cond);
ao2_unlock(bridge_channel);
if (bridge->technology->unsuspend) {
bridge->technology->unsuspend(bridge, bridge_channel);
}
return;
}
@@ -865,6 +871,12 @@ static void bridge_channel_feature(struct ast_bridge *bridge, struct ast_bridge_
/* If a hook was actually matched execute it on this channel, otherwise stream up the DTMF to the other channels */
if (hook) {
hook->callback(bridge, bridge_channel, hook->hook_pvt);
/* If we are handing the channel off to an external hook for ownership,
* we are not guaranteed what kind of state it will come back in. If
* the channel hungup, we need to detect that here. */
if (bridge_channel->chan && ast_check_hangup_locked(bridge_channel->chan)) {
ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
}
} else {
ast_bridge_dtmf_stream(bridge, dtmf, bridge_channel->chan);
}

View File

@@ -117,9 +117,9 @@ static void db_sync(void);
DEFINE_SQL_STATEMENT(put_stmt, "INSERT OR REPLACE INTO astdb (key, value) VALUES (?, ?)")
DEFINE_SQL_STATEMENT(get_stmt, "SELECT value FROM astdb WHERE key=?")
DEFINE_SQL_STATEMENT(del_stmt, "DELETE FROM astdb WHERE key=?")
DEFINE_SQL_STATEMENT(deltree_stmt, "DELETE FROM astdb WHERE key LIKE ? || '/' || '%'")
DEFINE_SQL_STATEMENT(deltree_stmt, "DELETE FROM astdb WHERE key || '/' LIKE ? || '/' || '%'")
DEFINE_SQL_STATEMENT(deltree_all_stmt, "DELETE FROM astdb")
DEFINE_SQL_STATEMENT(gettree_stmt, "SELECT key, value FROM astdb WHERE key LIKE ? || '/' || '%'")
DEFINE_SQL_STATEMENT(gettree_stmt, "SELECT key, value FROM astdb WHERE key || '/' LIKE ? || '/' || '%'")
DEFINE_SQL_STATEMENT(gettree_all_stmt, "SELECT key, value FROM astdb")
DEFINE_SQL_STATEMENT(showkey_stmt, "SELECT key, value FROM astdb WHERE key LIKE '%' || '/' || ?")
DEFINE_SQL_STATEMENT(create_astdb_stmt, "CREATE TABLE IF NOT EXISTS astdb(key VARCHAR(256), value VARCHAR(256), PRIMARY KEY(key))")
@@ -156,7 +156,7 @@ static int convert_bdb_to_sqlite3(void)
char *cmd;
int res;
ast_asprintf(&cmd, "astdb2sqlite3 '%s'\n", ast_config_AST_DB);
ast_asprintf(&cmd, "%s/astdb2sqlite3 '%s'\n", ast_config_AST_SBIN_DIR, ast_config_AST_DB);
res = ast_safe_system(cmd);
ast_free(cmd);