Compare commits

...

13 Commits

Author SHA1 Message Date
Leif Madsen
b3a8807ea3 Importing files for 1.2.31.1 release
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.31.1@170690 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-23 20:25:15 +00:00
Leif Madsen
092e2ea600 Creating tag for the release of asterisk-1.2.31.1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.31.1@170678 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-23 20:23:07 +00:00
Tilghman Lesher
6e820514a9 Updates to AST-2009-001
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@170580 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-23 19:19:06 +00:00
Tilghman Lesher
a37491c125 1.2 regression on security fix AST-2009-001
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@168632 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-15 01:15:49 +00:00
Kevin P. Fleming
27af3cf46a add license for Allison Smith prompts (AST-162)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@168197 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-09 22:10:23 +00:00
Tilghman Lesher
4ed56df62c Security fix AST-2009-001.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@167259 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-06 20:44:03 +00:00
Tilghman Lesher
f42ada7a25 Fix for AST-2008-012
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@162868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-10 21:06:44 +00:00
Sean Bright
84c5074ec3 Fix build errors on FreeBSD (uint -> unsigned int).
(closes issue #14006)
Reported by: alphaque
Patches:
      astobj2.h-patch uploaded by alphaque (license 259)
      (Slightly modified by seanbright)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@161421 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-05 20:50:23 +00:00
Tilghman Lesher
932f5ca647 Regression fix for last security fix. Set the iseqno correctly.
(closes issue #13918)
 Reported by: ffloimair
 Patches: 
       20081119__bug13918.diff.txt uploaded by Corydon76 (license 14)
 Tested by: ffloimair


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@159245 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-25 21:37:06 +00:00
Tilghman Lesher
71fdd7d526 Regression fixes for Solaris
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@136945 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-08-09 15:24:36 +00:00
Russell Bryant
643879cabc Fix the IAX2 URI for calling Digium
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@133577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-25 15:00:13 +00:00
Tilghman Lesher
703220f1f4 This part was not correctly patched for AST-2008-010.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@133360 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-24 03:46:01 +00:00
Tilghman Lesher
27290e8976 Fixes for AST-2008-010 and AST-2008-011
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@132711 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-22 21:14:10 +00:00
10 changed files with 7199 additions and 39 deletions

1
.lastclean Normal file
View File

@@ -0,0 +1 @@
9

1
.version Normal file
View File

@@ -0,0 +1 @@
1.2.31.1

6795
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -58,7 +58,7 @@ contact us:
+1.877.546.8963 (via telephone in the USA)
+1.256.428.6000 (via telephone outside the USA)
+1.256.864.0464 (via FAX inside or outside the USA)
IAX2/misery.digium.com/6000 (via IAX2)
IAX2/pbx.digium.com (via IAX2)
licensing@digium.com (via email)
Digium, Inc.

View File

@@ -294,7 +294,7 @@ static int hash_zero(const void *user_obj, const int flags)
* A container is just an object, after all!
*/
struct ao2_container *
ao2_container_alloc(const uint n_buckets, ao2_hash_fn hash_fn,
ao2_container_alloc(const unsigned int n_buckets, ao2_hash_fn hash_fn,
ao2_callback_fn cmp_fn)
{
/* XXX maybe consistency check on arguments ? */

View File

@@ -164,6 +164,7 @@ static int trunkfreq = 20;
static int authdebug = 1;
static int autokill = 0;
static int iaxcompat = 0;
static int lastauthmethod = 0;
static int iaxdefaultdpcache=10 * 60; /* Cache dialplan entries for 10 minutes by default */
@@ -272,6 +273,7 @@ enum {
IAX_DELAYPBXSTART = (1 << 25), /*!< Don't start a PBX on the channel until the peer sends us a
response, so that we've achieved a three-way handshake with
them before sending voice or anything else*/
IAX_ALLOWFWDOWNLOAD = (1 << 26), /*!< Allow the FWDOWNL command? */
} iax2_flags;
static int global_rtautoclear = 120;
@@ -1282,7 +1284,7 @@ static int find_callno(unsigned short callno, unsigned short dcallno, struct soc
}
/* Look for an existing connection first */
for (x=1;(res < 1) && (x<maxnontrunkcall);x++) {
for (x=2;(res < 1) && (x<maxnontrunkcall);x++) {
ast_mutex_lock(&iaxsl[x]);
if (iaxs[x]) {
/* Look for an exact match */
@@ -1317,10 +1319,10 @@ static int find_callno(unsigned short callno, unsigned short dcallno, struct soc
gettimeofday(&now, NULL);
start = 1 + (rand() % (TRUNK_CALL_START - 1));
start = 2 + (rand() % (TRUNK_CALL_START - 1));
for (x = start; 1; x++) {
if (x == TRUNK_CALL_START) {
x = 0;
x = 1;
continue;
}
@@ -2749,7 +2751,7 @@ static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in
if (peername) {
var = ast_load_realtime("iaxpeers", "name", peername, "host", "dynamic", NULL);
if (!var && sin)
var = ast_load_realtime("iaxpeers", "name", peername, "host", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
var = ast_load_realtime("iaxpeers", "name", peername, "host", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), (char *) NULL);
} else if (sin) {
char porta[25];
ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
@@ -2873,7 +2875,7 @@ static struct iax2_user *realtime_user(const char *username, struct sockaddr_in
var = ast_load_realtime("iaxusers", "name", username, "host", "dynamic", NULL);
if (!var && sin)
var = ast_load_realtime("iaxusers", "name", username, "host", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
var = ast_load_realtime("iaxusers", "name", username, "host", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), (char *) NULL);
if (!var && sin) {
char porta[6];
snprintf(porta, sizeof(porta), "%d", ntohs(sin->sin_port));
@@ -3098,6 +3100,15 @@ struct parsed_dial_string {
char *options;
};
static int send_apathetic_reply(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int command, int ts, unsigned char seqno)
{
struct ast_iax2_full_hdr f = { .scallno = htons(0x8000 | callno), .dcallno = htons(dcallno),
.ts = htonl(ts), .iseqno = seqno, .oseqno = 0, .type = AST_FRAME_IAX,
.csub = compress_subclass(command) };
return sendto(defaultsockfd, &f, sizeof(f), 0, (struct sockaddr *)sin, sizeof(*sin));
}
/*!
* \brief Parses an IAX dial string into its component parts.
* \param data the string to be parsed
@@ -5366,6 +5377,12 @@ static int register_verify(int callno, struct sockaddr_in *sin, struct iax_ies *
ast_log(LOG_NOTICE, "Empty registration from %s\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
return -1;
}
ast_copy_string(iaxs[callno]->peer, peer, sizeof(iaxs[callno]->peer));
/* Choose lowest expiry number */
if (expire && (expire < iaxs[callno]->expiry))
iaxs[callno]->expiry = expire;
/* We release the lock for the call to prevent a deadlock, but it's okay because
only the current thread could possibly make it go away or make changes */
ast_mutex_unlock(&iaxsl[callno]);
@@ -5376,6 +5393,7 @@ static int register_verify(int callno, struct sockaddr_in *sin, struct iax_ies *
if (!p) {
if (authdebug)
ast_log(LOG_NOTICE, "No registration for peer '%s' (from %s)\n", peer, ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
ast_copy_string(iaxs[callno]->secret, "invalidpassword", sizeof(iaxs[callno]->secret));
return -1;
}
@@ -5463,18 +5481,16 @@ static int register_verify(int callno, struct sockaddr_in *sin, struct iax_ies *
destroy_peer(p);
return -1;
}
} else if (!ast_strlen_zero(md5secret) || !ast_strlen_zero(secret)) {
if (authdebug)
ast_log(LOG_NOTICE, "Inappropriate authentication received\n");
} else if (!ast_strlen_zero(p->secret) || !ast_strlen_zero(p->inkeys)) {
if (authdebug &&
((!ast_strlen_zero(p->secret) && (p->authmethods & IAX_AUTH_MD5) && !ast_strlen_zero(iaxs[callno]->challenge)) ||
(!ast_strlen_zero(p->inkeys) && (p->authmethods & IAX_AUTH_RSA) && !ast_strlen_zero(iaxs[callno]->challenge)))) {
ast_log(LOG_NOTICE, "Inappropriate authentication received for '%s'\n", p->name);
}
if (ast_test_flag(p, IAX_TEMPONLY))
destroy_peer(p);
return -1;
}
ast_copy_string(iaxs[callno]->peer, peer, sizeof(iaxs[callno]->peer));
/* Choose lowest expiry number */
if (expire && (expire < iaxs[callno]->expiry))
iaxs[callno]->expiry = expire;
ast_device_state_changed("IAX2/%s", p->name); /* Activate notification */
if (ast_test_flag(p, IAX_TEMPONLY))
@@ -6077,23 +6093,34 @@ static int registry_authrequest(char *name, int callno)
{
struct iax_ie_data ied;
struct iax2_peer *p;
int authmethods;
if (!callno || !iaxs[callno]) {
return 0;
}
/* SLD: third call to find_peer in registration */
p = find_peer(name, 1);
if (p) {
memset(&ied, 0, sizeof(ied));
iax_ie_append_short(&ied, IAX_IE_AUTHMETHODS, p->authmethods);
if (p->authmethods & (IAX_AUTH_RSA | IAX_AUTH_MD5)) {
/* Build the challenge */
snprintf(iaxs[callno]->challenge, sizeof(iaxs[callno]->challenge), "%d", rand());
iax_ie_append_str(&ied, IAX_IE_CHALLENGE, iaxs[callno]->challenge);
}
iax_ie_append_str(&ied, IAX_IE_USERNAME, name);
if (ast_test_flag(p, IAX_TEMPONLY))
destroy_peer(p);
return send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_REGAUTH, 0, ied.buf, ied.pos, -1);;
}
ast_log(LOG_WARNING, "No such peer '%s'\n", name);
return 0;
if ((p = find_peer(name, 1))) {
lastauthmethod = p->authmethods;
}
authmethods = p ? p->authmethods : lastauthmethod ? lastauthmethod : (IAX_AUTH_PLAINTEXT | IAX_AUTH_MD5);
if (p && ast_test_flag(p, IAX_TEMPONLY)) {
destroy_peer(p);
} else if (!p && !delayreject) {
ast_log(LOG_WARNING, "No such peer '%s'\n", name);
return 0;
}
memset(&ied, 0, sizeof(ied));
iax_ie_append_short(&ied, IAX_IE_AUTHMETHODS, authmethods);
if (authmethods & (IAX_AUTH_RSA | IAX_AUTH_MD5)) {
/* Build the challenge */
snprintf(iaxs[callno]->challenge, sizeof(iaxs[callno]->challenge), "%d", rand());
iax_ie_append_str(&ied, IAX_IE_CHALLENGE, iaxs[callno]->challenge);
}
iax_ie_append_str(&ied, IAX_IE_USERNAME, name);
return send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_REGAUTH, 0, ied.buf, ied.pos, -1);;
}
static int registry_rerequest(struct iax_ies *ies, int callno, struct sockaddr_in *sin)
@@ -6828,6 +6855,17 @@ static int socket_read(int *id, int fd, short events, void *cbdata)
} else {
f.subclass = uncompress_subclass(fh->csub);
}
/* Deal with POKE/PONG without allocating a callno */
if (f.frametype == AST_FRAME_IAX && f.subclass == IAX_COMMAND_POKE) {
/* Reply back with a PONG, but don't care about the result. */
send_apathetic_reply(1, ntohs(fh->scallno), &sin, IAX_COMMAND_PONG, ntohs(fh->ts), fh->iseqno + 1);
return 1;
} else if (f.frametype == AST_FRAME_IAX && f.subclass == IAX_COMMAND_ACK && dcallno == 1) {
/* Ignore */
return 1;
}
if ((f.frametype == AST_FRAME_IAX) && ((f.subclass == IAX_COMMAND_NEW) || (f.subclass == IAX_COMMAND_REGREQ) ||
(f.subclass == IAX_COMMAND_POKE) || (f.subclass == IAX_COMMAND_FWDOWNL) ||
(f.subclass == IAX_COMMAND_REGREL)))
@@ -7812,11 +7850,7 @@ retryowner2:
/* For security, always ack immediately */
if (delayreject)
send_command_immediate(iaxs[fr->callno], AST_FRAME_IAX, IAX_COMMAND_ACK, fr->ts, NULL, 0,fr->iseqno);
if (register_verify(fr->callno, &sin, &ies)) {
/* Send delayed failure */
auth_fail(fr->callno, IAX_COMMAND_REGREJ);
break;
}
register_verify(fr->callno, &sin, &ies);
if ((ast_strlen_zero(iaxs[fr->callno]->secret) && ast_strlen_zero(iaxs[fr->callno]->inkeys)) || ast_test_flag(&iaxs[fr->callno]->state, IAX_STATE_AUTHENTICATED)) {
if (f.subclass == IAX_COMMAND_REGREL)
memset(&sin, 0, sizeof(sin));
@@ -7921,6 +7955,10 @@ retryowner2:
break;
case IAX_COMMAND_FWDOWNL:
/* Firmware download */
if (!ast_test_flag(&globalflags, IAX_ALLOWFWDOWNLOAD)) {
send_command_final(iaxs[fr->callno], AST_FRAME_IAX, IAX_COMMAND_UNSUPPORT, 0, NULL, 0, -1);
break;
}
memset(&ied0, 0, sizeof(ied0));
res = iax_firmware_append(&ied0, (unsigned char *)ies.devicetype, ies.fwdesc);
if (res < 0)
@@ -9188,6 +9226,8 @@ static int set_config(char *config_file, int reload)
delayreject = ast_true(v->value);
else if (!strcasecmp(v->name, "mailboxdetail"))
ast_set2_flag((&globalflags), ast_true(v->value), IAX_MESSAGEDETAIL);
else if (!strcasecmp(v->name, "allowfwdownload"))
ast_set2_flag((&globalflags), ast_true(v->value), IAX_ALLOWFWDOWNLOAD);
else if (!strcasecmp(v->name, "rtcachefriends"))
ast_set2_flag((&globalflags), ast_true(v->value), IAX_RTCACHEFRIENDS);
else if (!strcasecmp(v->name, "rtignoreregexpire"))

View File

@@ -255,6 +255,16 @@ autokill=yes
; The default value is 'host'
;
;codecpriority=host
;
; allowfwdownload controls whether this host will serve out firmware to
; IAX clients which request it. This has only been used for the IAXy,
; and it has been recently proven that this firmware distribution method
; can be used as a source of traffic amplification attacks. Also, the
; IAXy firmware has not been updated for at least 18 months, so unless
; you are provisioning IAXys in a secure network, we recommend that you
; leave this option to the default, off.
;
;allowfwdownload=yes
;rtcachefriends=yes ; Cache realtime friends by adding them to the internal list
; just like friends added from the config file only on a

View File

@@ -17,6 +17,8 @@
#ifndef _ASTERISK_ASTOBJ2_H
#define _ASTERISK_ASTOBJ2_H
#include "asterisk/compat.h"
/*! \file
*
* \brief Object Model implementing objects and containers.
@@ -330,7 +332,7 @@ struct ao2_container;
*
* destructor is set implicitly.
*/
struct ao2_container *ao2_container_alloc(const uint n_buckets,
struct ao2_container *ao2_container_alloc(const unsigned int n_buckets,
ao2_hash_fn hash_fn, ao2_callback_fn cmp_fn);
/*!
@@ -527,11 +529,11 @@ struct ao2_iterator {
/*! current bucket */
int bucket;
/*! container version */
uint c_version;
unsigned int c_version;
/*! pointer to the current object */
void *obj;
/*! container version when the object was created */
uint version;
unsigned int version;
};
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags);

View File

@@ -54,6 +54,7 @@
typedef unsigned char u_int8_t;
typedef unsigned short u_int16_t;
typedef unsigned int u_int32_t;
typedef unsigned int uint;
#endif
char* strsep(char** str, const char* delims);

310
sounds/LICENSE Normal file
View File

@@ -0,0 +1,310 @@
LICENSE FOR VOICE PROMPT FILES
------------------------------
The voice prompt files distributed herewith are Copyright (C) 2003-2008
Allison Smith, and provided under terms of the following License. For
more information, or to purchase custom voice prompt files, please
visit:
http://www.digium.com/ivr or http://www.theasteriskvoice.com
LICENSE
-------
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS
LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU
THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH
TERMS AND CONDITIONS.
1. Definitions.
a. "Collective Work" means a work, such as a periodical issue,
anthology or encyclopedia, in which the Work in its entirety in
unmodified form, along with one or more other contributions,
constituting separate and independent works in themselves, are
assembled into a collective whole. A work that constitutes a
Collective Work will not be considered a Derivative Work (as defined
below) for the purposes of this License.
b. "Creative Commons Compatible License" means a license that is
listed at http://creativecommons.org/compatiblelicenses that has been
approved by Creative Commons as being essentially equivalent to this
License, including, at a minimum, because that license: (i) contains
terms that have the same purpose, meaning and effect as the License
Elements of this License; and, (ii) explicitly permits the relicensing
of derivatives of works made available under that license under this
License or either a Creative Commons unported license or a Creative
Commons jurisdiction license with the same License Elements as this
License.
c. "Derivative Work" means a work based upon the Work or upon the Work
and other pre-existing works, such as a translation, musical
arrangement, dramatization, fictionalization, motion picture version,
sound recording, art reproduction, abridgment, condensation, or any
other form in which the Work may be recast, transformed, or adapted,
except that a work that constitutes a Collective Work will not be
considered a Derivative Work for the purpose of this License. For the
avoidance of doubt, where the Work is a musical composition or sound
recording, the synchronization of the Work in timed-relation with a
moving image ("synching") will be considered a Derivative Work for the
purpose of this License.
d. "License Elements" means the following high-level license
attributes as selected by Licensor and indicated in the title of this
License: Attribution, ShareAlike.
e. "Licensor" means the individual, individuals, entity or entities
that offers the Work under the terms of this License.
f. "Original Author" means the individual, individuals, entity or
entities who created the Work.
g. "Work" means the copyrighted voice prompt files recorded by Allison
Smith for Asterisk and distributed with this License.
h. "You" means an individual or entity exercising rights under this
License who has not previously violated the terms of this License with
respect to the Work, or who has received express permission from the
Licensor to exercise rights under this License despite a previous
violation.
2. Fair Use Rights.
Nothing in this license is intended to reduce, limit, or restrict any
rights arising from fair use, first sale or other limitations on the
exclusive rights of the copyright owner under copyright law or other
applicable laws.
3. License Grant.
Subject to the terms and conditions of this License, Licensor hereby
grants You a worldwide, royalty-free, non-exclusive, perpetual (for
the duration of the applicable copyright) license to exercise the
rights in the Work as stated below:
a. to reproduce the Work, to incorporate the Work into one or more
Collective Works, and to reproduce the Work as incorporated in the
Collective Works;
b. to create and reproduce Derivative Works provided that any such
Derivative Work, including any translation in any medium, takes
reasonable steps to clearly label, demarcate or otherwise identify
that changes were made to the original Work. For example, a
translation could be marked "The original work was translated from
English to Spanish," or a modification could indicate "The original
work has been modified.";
c. to distribute copies or phonorecords of, display publicly, perform
publicly, and perform publicly by means of a digital audio
transmission the Work including as incorporated in Collective Works;
d. to distribute copies or phonorecords of, display publicly, perform
publicly, and perform publicly by means of a digital audio
transmission Derivative Works.
e. For the avoidance of doubt, where the Work is a musical
composition:
i. Performance Royalties Under Blanket Licenses. Licensor waives the
exclusive right to collect, whether individually or, in the event
that Licensor is a member of a performance rights society
(e.g. ASCAP, BMI, SESAC), via that society, royalties for the public
performance or public digital performance e.g. webcast) of the Work.
ii.Mechanical Rights and Statutory Royalties. Licensor waives the
exclusive right to collect, whether individually or via a music
rights agency or designated agent (e.g. Harry Fox Agency), royalties
for any phonorecord You create from the Work ("cover version") and
distribute, subject to the compulsory license created by 17 USC
Section 115 of the US Copyright Act (or the equivalent in other
jurisdictions).
f. Webcasting Rights and Statutory Royalties. For the avoidance of
doubt, where the Work is a sound recording, Licensor waives the
exclusive right to collect, whether individually or via a
performance-rights society (e.g. SoundExchange), royalties for the
public digital performance (e.g. webcast) of the Work, subject to the
compulsory license created by 17 USC Section 114 of the US Copyright
Act (or the equivalent in other jurisdictions).
The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make
such modifications as are technically necessary to exercise the rights
in other media and formats. All rights not expressly granted by
Licensor are hereby reserved.
4. Restrictions.
The license granted in Section 3 above is expressly made subject to
and limited by the following restrictions:
a. You may distribute, publicly display, publicly perform, or publicly
digitally perform the Work only under the terms of this License, and
You must include a copy of, or the Uniform Resource Identifier for,
this License with every copy or phonorecord of the Work You
distribute, publicly display, publicly perform, or publicly digitally
perform. You may not offer or impose any terms on the Work that
restrict the terms of this License or the ability of a recipient of
the Work to exercise of the rights granted to that recipient under the
terms of the License. You may not sublicense the Work. You must keep
intact all notices that refer to this License and to the disclaimer of
warranties. When You distribute, publicly display, publicly perform,
or publicly digitally perform the Work, You may not impose any
technological measures on the Work that restrict the ability of a
recipient of the Work from You to exercise of the rights granted to
that recipient under the terms of the License. This Section 4(a)
applies to the Work as incorporated in a Collective Work, but this
does not require the Collective Work apart from the Work itself to be
made subject to the terms of this License. If You create a Collective
Work, upon notice from any Licensor You must, to the extent
practicable, remove from the Collective Work any credit as required by
Section 4(c), as requested. If You create a Derivative Work, upon
notice from any Licensor You must, to the extent practicable, remove
from the Derivative Work any credit as required by Section 4(c), as
requested.
b. You may distribute, publicly display, publicly perform, or publicly
digitally perform a Derivative Work only under: (i) the terms of this
License; (ii) a later version of this License with the same License
Elements as this License; (iii) either the Creative Commons (Unported)
license or a Creative Commons jurisdiction license (either this or a
later license version) that contains the same License Elements as this
License (e.g. Attribution-ShareAlike 3.0 (Unported)); (iv) a Creative
Commons Compatible License. If you license the Derivative Work under
one of the licenses mentioned in (iv), you must comply with the terms
of that license. If you license the Derivative Work under the terms of
any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable
License"), you must comply with the terms of the Applicable License
generally and with the following provisions: (I) You must include a
copy of, or the Uniform Resource Identifier for, the Applicable
License with every copy or phonorecord of each Derivative Work You
distribute, publicly display, publicly perform, or publicly digitally
perform; (II) You may not offer or impose any terms on the Derivative
Works that restrict the terms of the Applicable License or the ability
of a recipient of the Work to exercise the rights granted to that
recipient under the terms of the Applicable License; (III) You must
keep intact all notices that refer to the Applicable License and to
the disclaimer of warranties; and, (IV) when You distribute, publicly
display, publicly perform, or publicly digitally perform the Work, You
may not impose any technological measures on the Derivative Work that
restrict the ability of a recipient of the Derivative Work from You to
exercise the rights granted to that recipient under the terms of the
Applicable License. This Section 4(b) applies to the Derivative Work
as incorporated in a Collective Work, but this does not require the
Collective Work apart from the Derivative Work itself to be made
subject to the terms of the Applicable License.
c. If You distribute, publicly display, publicly perform, or publicly
digitally perform the Work (as defined in Section 1 above) or any
Derivative Works (as defined in Section 1 above) or Collective Works
(as defined in Section 1 above), You must, unless a request has been
made pursuant to Section 4(a), keep intact all copyright notices for
the Work and provide, reasonable to the medium or means You are
utilizing: (i) the name of the Original Author (or pseudonym, if
applicable) if supplied, and/or (ii) if the Original Author and/or
Licensor designate another party or parties (e.g. a sponsor institute,
publishing entity, journal) for attribution ("Attribution Parties") in
Licensor's copyright notice, terms of service or by other reasonable
means, the name of such party or parties; the title of the Work if
supplied; to the extent reasonably practicable, the Uniform Resource
Identifier, if any, that Licensor specifies to be associated with the
Work, unless such URI does not refer to the copyright notice or
licensing information for the Work; and, consistent with Section 3(b)
in the case of a Derivative Work, a credit identifying the use of the
Work in the Derivative Work (e.g., "French translation of the Work by
Original Author," or "Screenplay based on original Work by Original
Author"). The credit required by this Section 4(c) may be implemented
in any reasonable manner; provided, however, that in the case of a
Derivative Work or Collective Work, at a minimum such credit will
appear, if a credit for all contributing authors of the Derivative
Work or Collective Work appears, then as part of these credits and in
a manner at least as prominent as the credits for the other
contributing authors. For the avoidance of doubt, You may only use the
credit required by this Section for the purpose of attribution in the
manner set out above and, by exercising Your rights under this
License, You may not implicitly or explicitly assert or imply any
connection with, sponsorship or endorsement by the Original Author,
Licensor and/or Attribution Parties, as appropriate, of You or Your
use of the Work, without the separate, express prior written
permission of the Original Author, Licensor and/or Attribution
Parties.
5. Representations, Warranties and Disclaimer.
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY RIGHTS
HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR MAKES NO
REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK,
EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT
LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY,
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF
ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW
THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY
TO YOU.
6. Limitation on Liability.
EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL
LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT
OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination.
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this
License. Individuals or entities who have received Derivative Works or
Collective Works from You under this License, however, will not have
their licenses terminated provided such individuals or entities remain
in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8
will survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here
is perpetual (for the duration of the applicable copyright in the
Work). Notwithstanding the above, Licensor reserves the right to
release the Work under different license terms or to stop distributing
the Work at any time; provided, however that any such election will
not serve to withdraw this License (or any other license that has
been, or is required to be, granted under the terms of this License),
and this License will continue in full force and effect unless
terminated as stated above.
8. Miscellaneous.
a. Each time You distribute or publicly digitally perform the Work (as
defined in Section 1 above) or a Collective Work (as defined in
Section 1 above), the Licensor offers to the recipient a license to
the Work on the same terms and conditions as the license granted to
You under this License.
b. Each time You distribute or publicly digitally perform a Derivative
Work, Licensor offers to the recipient a license to the original Work
on the same terms and conditions as the license granted to You under
this License.
c. If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this License, and without further action
by the parties to this agreement, such provision shall be reformed to
the minimum extent necessary to make such provision valid and
enforceable.
d. No term or provision of this License shall be deemed waived and no
breach consented to unless such waiver or consent shall be in writing
and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties
with respect to the Work licensed here. There are no understandings,
agreements or representations with respect to the Work not specified
here. Licensor shall not be bound by any additional provisions that
may appear in any communication from You. This License may not be
modified without the mutual written agreement of the Licensor and You.