mirror of
https://github.com/asterisk/asterisk.git
synced 2025-08-21 05:03:51 +00:00
Compare commits
17 Commits
10.11.0-rc
...
10.4.1
Author | SHA1 | Date | |
---|---|---|---|
|
3c812dc35c | ||
|
1efbf62a57 | ||
|
1c6aa76086 | ||
|
1fb8b57dbd | ||
|
7ac4bf201b | ||
|
dbe5bb1719 | ||
|
ae642a1089 | ||
|
1e883659b7 | ||
|
72e7cf1f44 | ||
|
370afef060 | ||
|
c9ca1327e8 | ||
|
ac9d340735 | ||
|
1c5b8913eb | ||
|
3db420ecc0 | ||
|
063c70b105 | ||
|
97b872a688 | ||
|
cfdb99d58d |
3
.lastclean
Normal file
3
.lastclean
Normal file
@@ -0,0 +1,3 @@
|
||||
39
|
||||
|
||||
|
62
asterisk-10.4.1-summary.html
Normal file
62
asterisk-10.4.1-summary.html
Normal file
@@ -0,0 +1,62 @@
|
||||
<!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.4.1</title></head>
|
||||
<body>
|
||||
<h1 align="center"><a name="top">Release Summary</a></h1>
|
||||
<h3 align="center">asterisk-10.4.1</h3>
|
||||
<h3 align="center">Date: 2012-05-29</h3>
|
||||
<h3 align="center"><asteriskteam@digium.com></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-007.html">AST-2012-007</a>, <a href="http://downloads.asterisk.org/pub/security/AST-2012-008.html">AST-2012-008</a></p>
|
||||
<p>The data in this summary reflects changes that have been made since the previous release, asterisk-10.4.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 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.4.1?view=revision&revision=367565">367565</a></td><td>bebuild</td><td>Create 10.4.1 tag</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/tags/10.4.1?view=revision&revision=367852">367852</a></td><td>bebuild</td><td>Commit 367844,367782</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 | 8
|
||||
asterisk-10.4.0-summary.html | 505 -------------------------------
|
||||
asterisk-10.4.0-summary.txt | 687 -------------------------------------------
|
||||
channels/chan_iax2.c | 28 +
|
||||
channels/chan_skinny.c | 29 +
|
||||
6 files changed, 55 insertions(+), 1204 deletions(-)
|
||||
</pre><br/>
|
||||
<hr/>
|
||||
</body>
|
||||
</html>
|
90
asterisk-10.4.1-summary.txt
Normal file
90
asterisk-10.4.1-summary.txt
Normal file
@@ -0,0 +1,90 @@
|
||||
Release Summary
|
||||
|
||||
asterisk-10.4.1
|
||||
|
||||
Date: 2012-05-29
|
||||
|
||||
<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-007, AST-2012-008
|
||||
|
||||
The data in this summary reflects changes that have been made since the
|
||||
previous release, asterisk-10.4.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 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 |
|
||||
|-------------+-----------+------------------------+---------------------|
|
||||
| 367565 | bebuild | Create 10.4.1 tag | |
|
||||
|-------------+-----------+------------------------+---------------------|
|
||||
| 367852 | bebuild | Commit 367844,367782 | |
|
||||
+------------------------------------------------------------------------+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
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 | 8
|
||||
asterisk-10.4.0-summary.html | 505 -------------------------------
|
||||
asterisk-10.4.0-summary.txt | 687 -------------------------------------------
|
||||
channels/chan_iax2.c | 28 +
|
||||
channels/chan_skinny.c | 29 +
|
||||
6 files changed, 55 insertions(+), 1204 deletions(-)
|
||||
|
||||
----------------------------------------------------------------------
|
@@ -1922,24 +1922,25 @@ static void send_signaling(struct chan_iax2_pvt *pvt)
|
||||
* we have received a destination call number. */
|
||||
static int queue_signalling(struct chan_iax2_pvt *pvt, struct ast_frame *f)
|
||||
{
|
||||
struct signaling_queue_entry *new;
|
||||
struct signaling_queue_entry *qe;
|
||||
|
||||
if (f->frametype == AST_FRAME_IAX || !pvt->hold_signaling) {
|
||||
return 1; /* do not queue this frame */
|
||||
} else if (!(new = ast_calloc(1, sizeof(struct signaling_queue_entry)))) {
|
||||
} else if (!(qe = ast_calloc(1, sizeof(struct signaling_queue_entry)))) {
|
||||
return -1; /* out of memory */
|
||||
}
|
||||
|
||||
memcpy(&new->f, f, sizeof(new->f)); /* copy ast_frame into our queue entry */
|
||||
|
||||
if (new->f.datalen) { /* if there is data in this frame copy it over as well */
|
||||
if (!(new->f.data.ptr = ast_calloc(1, new->f.datalen))) {
|
||||
free_signaling_queue_entry(new);
|
||||
/* copy ast_frame into our queue entry */
|
||||
qe->f = *f;
|
||||
if (qe->f.datalen) {
|
||||
/* if there is data in this frame copy it over as well */
|
||||
if (!(qe->f.data.ptr = ast_malloc(qe->f.datalen))) {
|
||||
free_signaling_queue_entry(qe);
|
||||
return -1;
|
||||
}
|
||||
memcpy(new->f.data.ptr, f->data.ptr, sizeof(*new->f.data.ptr));
|
||||
memcpy(qe->f.data.ptr, f->data.ptr, qe->f.datalen);
|
||||
}
|
||||
AST_LIST_INSERT_TAIL(&pvt->signaling_queue, new, next);
|
||||
AST_LIST_INSERT_TAIL(&pvt->signaling_queue, qe, next);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -4244,6 +4245,15 @@ static int schedule_delivery(struct iax_frame *fr, int updatehistory, int fromtr
|
||||
struct ast_channel *owner = NULL;
|
||||
struct ast_channel *bridge = NULL;
|
||||
|
||||
/*
|
||||
* Clear fr->af.data if there is no data in the buffer. Things
|
||||
* like AST_CONTROL_HOLD without a suggested music class must
|
||||
* have a NULL pointer.
|
||||
*/
|
||||
if (!fr->af.datalen) {
|
||||
memset(&fr->af.data, 0, sizeof(fr->af.data));
|
||||
}
|
||||
|
||||
/* Attempt to recover wrapped timestamps */
|
||||
unwrap_timestamp(fr);
|
||||
|
||||
|
@@ -12987,8 +12987,6 @@ static void state_notify_build_xml(int state, int full, const char *exten, const
|
||||
if ((state & AST_EXTENSION_RINGING) && sip_cfg.notifyringing) {
|
||||
const char *local_display = exten;
|
||||
char *local_target = ast_strdupa(mto);
|
||||
const char *remote_display = exten;
|
||||
char *remote_target = ast_strdupa(mfrom);
|
||||
|
||||
/* There are some limitations to how this works. The primary one is that the
|
||||
callee must be dialing the same extension that is being monitored. Simply dialing
|
||||
@@ -12998,28 +12996,16 @@ static void state_notify_build_xml(int state, int full, const char *exten, const
|
||||
|
||||
if ((caller = ast_channel_callback(find_calling_channel, NULL, p, 0))) {
|
||||
char *cid_num;
|
||||
char *connected_num;
|
||||
int need;
|
||||
|
||||
ast_channel_lock(caller);
|
||||
cid_num = S_COR(caller->caller.id.number.valid,
|
||||
caller->caller.id.number.str, "");
|
||||
need = strlen(cid_num) + strlen(p->fromdomain) + sizeof("sip:@");
|
||||
remote_target = alloca(need);
|
||||
snprintf(remote_target, need, "sip:%s@%s", cid_num, p->fromdomain);
|
||||
|
||||
remote_display = ast_strdupa(S_COR(caller->caller.id.name.valid,
|
||||
caller->caller.id.name.str, ""));
|
||||
|
||||
connected_num = S_COR(caller->connected.id.number.valid,
|
||||
caller->connected.id.number.str, "");
|
||||
need = strlen(connected_num) + strlen(p->fromdomain) + sizeof("sip:@");
|
||||
local_target = alloca(need);
|
||||
snprintf(local_target, need, "sip:%s@%s", connected_num, p->fromdomain);
|
||||
|
||||
local_display = ast_strdupa(S_COR(caller->connected.id.name.valid,
|
||||
caller->connected.id.name.str, ""));
|
||||
|
||||
snprintf(local_target, need, "sip:%s@%s", cid_num, p->fromdomain);
|
||||
local_display = ast_strdupa(S_COR(caller->caller.id.name.valid,
|
||||
caller->caller.id.name.str, ""));
|
||||
ast_channel_unlock(caller);
|
||||
caller = ast_channel_unref(caller);
|
||||
}
|
||||
@@ -13041,10 +13027,10 @@ static void state_notify_build_xml(int state, int full, const char *exten, const
|
||||
"<target uri=\"%s\"/>\n"
|
||||
"</remote>\n"
|
||||
"<local>\n"
|
||||
"<identity display=\"%s\">%s</identity>\n"
|
||||
"<identity>%s</identity>\n"
|
||||
"<target uri=\"%s\"/>\n"
|
||||
"</local>\n",
|
||||
remote_display, remote_target, remote_target, local_display, local_target, local_target);
|
||||
local_display, local_target, local_target, mto, mto);
|
||||
} else {
|
||||
ast_str_append(tmp, 0, "<dialog id=\"%s\" direction=\"recipient\">\n", exten);
|
||||
}
|
||||
@@ -22818,6 +22804,10 @@ static int handle_request_update(struct sip_pvt *p, struct sip_request *req)
|
||||
transmit_response(p, "501 Method Not Implemented", req);
|
||||
return 0;
|
||||
}
|
||||
if (!p->owner) {
|
||||
transmit_response(p, "481 Call/Transaction Does Not Exist", req);
|
||||
return 0;
|
||||
}
|
||||
if (get_rpid(p, req)) {
|
||||
struct ast_party_connected_line connected;
|
||||
struct ast_set_party_connected_line update_connected;
|
||||
|
@@ -3104,6 +3104,10 @@ static void update_connectedline(struct skinny_subchannel *sub, const void *data
|
||||
struct skinny_line *l = sub->line;
|
||||
struct skinny_device *d = l->device;
|
||||
|
||||
if (!d) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!c->caller.id.number.valid
|
||||
|| ast_strlen_zero(c->caller.id.number.str)
|
||||
|| !c->connected.id.number.valid
|
||||
@@ -4224,6 +4228,11 @@ static void *skinny_ss(void *data)
|
||||
int res = 0;
|
||||
int loop_pause = 100;
|
||||
|
||||
if (!d) {
|
||||
ast_log(LOG_WARNING, "Device for line %s is not registered.\n", l->name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ast_verb(3, "Starting simple switch on '%s@%s'\n", l->name, d->name);
|
||||
|
||||
len = strlen(sub->exten);
|
||||
@@ -4332,7 +4341,7 @@ static int skinny_call(struct ast_channel *ast, char *dest, int timeout)
|
||||
struct ast_var_t *current;
|
||||
int doautoanswer = 0;
|
||||
|
||||
if (!d->registered) {
|
||||
if (!d || !d->registered) {
|
||||
ast_log(LOG_ERROR, "Device not registered, cannot call %s\n", dest);
|
||||
return -1;
|
||||
}
|
||||
@@ -4731,7 +4740,13 @@ static int skinny_indicate(struct ast_channel *ast, int ind, const void *data, s
|
||||
struct skinny_subchannel *sub = ast->tech_pvt;
|
||||
struct skinny_line *l = sub->line;
|
||||
struct skinny_device *d = l->device;
|
||||
struct skinnysession *s = d->session;
|
||||
struct skinnysession *s;
|
||||
|
||||
if (!d) {
|
||||
ast_log(LOG_WARNING, "Device for line %s is not registered.\n", l->name);
|
||||
return -1;
|
||||
}
|
||||
s = d->session;
|
||||
|
||||
if (!s) {
|
||||
ast_log(LOG_NOTICE, "Asked to indicate '%s' condition on channel %s, but session does not exist.\n", control2str(ind), ast->name);
|
||||
@@ -5462,6 +5477,11 @@ static int handle_transfer_button(struct skinny_subchannel *sub)
|
||||
l = sub->line;
|
||||
d = l->device;
|
||||
|
||||
if (!d) {
|
||||
ast_log(LOG_WARNING, "Device for line %s is not registered.\n", l->name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!sub->related) {
|
||||
/* Another sub has not been created so this must be first XFER press */
|
||||
if (!(sub->substate == SUBSTATE_HOLD)) {
|
||||
@@ -5506,6 +5526,11 @@ static int handle_callforward_button(struct skinny_subchannel *sub, int cfwdtype
|
||||
struct skinny_device *d = l->device;
|
||||
struct ast_channel *c = sub->owner;
|
||||
|
||||
if (!d) {
|
||||
ast_log(LOG_WARNING, "Device for line %s is not registered.\n", l->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (d->hookstate == SKINNY_ONHOOK) {
|
||||
d->hookstate = SKINNY_OFFHOOK;
|
||||
transmit_speaker_mode(d, SKINNY_SPEAKERON);
|
||||
@@ -6592,7 +6617,8 @@ static int handle_message(struct skinny_req *req, struct skinnysession *s)
|
||||
int res = 0;
|
||||
struct skinny_speeddial *sd;
|
||||
struct skinny_device *d = s->device;
|
||||
|
||||
size_t len;
|
||||
|
||||
if ((!s->device) && (letohl(req->e) != REGISTER_MESSAGE && letohl(req->e) != ALARM_MESSAGE)) {
|
||||
ast_log(LOG_WARNING, "Client sent message #%d without first registering.\n", req->e);
|
||||
ast_free(req);
|
||||
@@ -6662,8 +6688,13 @@ static int handle_message(struct skinny_req *req, struct skinnysession *s)
|
||||
ast_log(LOG_WARNING, "Unsupported digit %d\n", digit);
|
||||
}
|
||||
|
||||
sub->exten[strlen(sub->exten)] = dgt;
|
||||
sub->exten[strlen(sub->exten)+1] = '\0';
|
||||
len = strlen(sub->exten);
|
||||
if (len < sizeof(sub->exten) - 1) {
|
||||
sub->exten[len] = dgt;
|
||||
sub->exten[len + 1] = '\0';
|
||||
} else {
|
||||
ast_log(AST_LOG_WARNING, "Dropping digit with value %d because digit queue is full\n", dgt);
|
||||
}
|
||||
} else
|
||||
res = handle_keypad_button_message(req, s);
|
||||
}
|
||||
|
@@ -1220,6 +1220,19 @@ static const struct permalias {
|
||||
{ 0, "none" },
|
||||
};
|
||||
|
||||
/*! \brief Checks to see if a string which can be used to evaluate functions should be rejected */
|
||||
static int function_capable_string_allowed_with_auths(const char *evaluating, int writepermlist)
|
||||
{
|
||||
if (!(writepermlist & EVENT_FLAG_SYSTEM)
|
||||
&& (
|
||||
strstr(evaluating, "SHELL") || /* NoOp(${SHELL(rm -rf /)}) */
|
||||
strstr(evaluating, "EVAL") /* NoOp(${EVAL(${some_var_containing_SHELL})}) */
|
||||
)) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*! \brief Convert authority code to a list of options */
|
||||
static const char *authority_to_str(int authority, struct ast_str **res)
|
||||
{
|
||||
@@ -3220,6 +3233,12 @@ static int action_getvar(struct mansession *s, const struct message *m)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* We don't want users with insufficient permissions using certain functions. */
|
||||
if (!(function_capable_string_allowed_with_auths(varname, s->session->writeperm))) {
|
||||
astman_send_error(s, m, "GetVar Access Forbidden: Variable");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!ast_strlen_zero(name)) {
|
||||
if (!(c = ast_channel_get_by_name(name))) {
|
||||
astman_send_error(s, m, "No such channel");
|
||||
@@ -3280,6 +3299,11 @@ static int action_status(struct mansession *s, const struct message *m)
|
||||
idText[0] = '\0';
|
||||
}
|
||||
|
||||
if (!(function_capable_string_allowed_with_auths(variables, s->session->writeperm))) {
|
||||
astman_send_error(s, m, "Status Access Forbidden: Variables");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (all) {
|
||||
if (!(iter = ast_channel_iterator_all_new())) {
|
||||
ast_free(str);
|
||||
@@ -4083,6 +4107,7 @@ static int action_originate(struct mansession *s, const struct message *m)
|
||||
}
|
||||
|
||||
if (!ast_strlen_zero(app)) {
|
||||
int bad_appdata = 0;
|
||||
/* To run the System application (or anything else that goes to
|
||||
* shell), you must have the additional System privilege */
|
||||
if (!(s->session->writeperm & EVENT_FLAG_SYSTEM)
|
||||
@@ -4093,10 +4118,13 @@ static int action_originate(struct mansession *s, const struct message *m)
|
||||
TryExec(System(rm -rf /)) */
|
||||
strcasestr(app, "agi") || /* AGI(/bin/rm,-rf /)
|
||||
EAGI(/bin/rm,-rf /) */
|
||||
strstr(appdata, "SHELL") || /* NoOp(${SHELL(rm -rf /)}) */
|
||||
strstr(appdata, "EVAL") /* NoOp(${EVAL(${some_var_containing_SHELL})}) */
|
||||
strcasestr(app, "mixmonitor") || /* MixMonitor(blah,,rm -rf) */
|
||||
(strstr(appdata, "SHELL") && (bad_appdata = 1)) || /* NoOp(${SHELL(rm -rf /)}) */
|
||||
(strstr(appdata, "EVAL") && (bad_appdata = 1)) /* NoOp(${EVAL(${some_var_containing_SHELL})}) */
|
||||
)) {
|
||||
astman_send_error(s, m, "Originate with certain 'Application' arguments requires the additional System privilege, which you do not have.");
|
||||
char error_buf[64];
|
||||
snprintf(error_buf, sizeof(error_buf), "Originate Access Forbidden: %s", bad_appdata ? "Data" : "Application");
|
||||
astman_send_error(s, m, error_buf);
|
||||
res = 0;
|
||||
goto fast_orig_cleanup;
|
||||
}
|
||||
|
Reference in New Issue
Block a user