aboutsummaryrefslogtreecommitdiffstats
path: root/channels/iax2-parser.c
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2005-09-09 01:07:25 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2005-09-09 01:07:25 +0000
commit7258be9c1eec2fb5ce8aa5354f927b6d9fd2f15e (patch)
treebcd00c8488a450eddd573eb6471f7776078f6c00 /channels/iax2-parser.c
parent3e280f3af9209cc0da793a26b590d2a583984102 (diff)
don't use a signed buffer for data that the protocol specifies as unsigned.
This fixes an issues with RSA authentication (issue #5148) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6554 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/iax2-parser.c')
-rwxr-xr-xchannels/iax2-parser.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c
index 17f7c56be..71dcd365d 100755
--- a/channels/iax2-parser.c
+++ b/channels/iax2-parser.c
@@ -573,7 +573,7 @@ void iax_set_error(void (*func)(const char *))
errorf = func;
}
-int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
+int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
{
/* Parse data into information elements */
int len;
@@ -595,28 +595,28 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
}
switch(ie) {
case IAX_IE_CALLED_NUMBER:
- ies->called_number = data + 2;
+ ies->called_number = (char *)data + 2;
break;
case IAX_IE_CALLING_NUMBER:
- ies->calling_number = data + 2;
+ ies->calling_number = (char *)data + 2;
break;
case IAX_IE_CALLING_ANI:
- ies->calling_ani = data + 2;
+ ies->calling_ani = (char *)data + 2;
break;
case IAX_IE_CALLING_NAME:
- ies->calling_name = data + 2;
+ ies->calling_name = (char *)data + 2;
break;
case IAX_IE_CALLED_CONTEXT:
- ies->called_context = data + 2;
+ ies->called_context = (char *)data + 2;
break;
case IAX_IE_USERNAME:
- ies->username = data + 2;
+ ies->username = (char *)data + 2;
break;
case IAX_IE_PASSWORD:
- ies->password = data + 2;
+ ies->password = (char *)data + 2;
break;
case IAX_IE_CODEC_PREFS:
- ies->codec_prefs = data + 2;
+ ies->codec_prefs = (char *)data + 2;
break;
case IAX_IE_CAPABILITY:
if (len != (int)sizeof(unsigned int)) {
@@ -633,7 +633,7 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
ies->format = ntohl(get_unaligned_uint32(data + 2));
break;
case IAX_IE_LANGUAGE:
- ies->language = data + 2;
+ ies->language = (char *)data + 2;
break;
case IAX_IE_VERSION:
if (len != (int)sizeof(unsigned short)) {
@@ -657,10 +657,10 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
ies->samprate = ntohs(get_unaligned_uint16(data + 2));
break;
case IAX_IE_DNID:
- ies->dnid = data + 2;
+ ies->dnid = (char *)data + 2;
break;
case IAX_IE_RDNIS:
- ies->rdnis = data + 2;
+ ies->rdnis = (char *)data + 2;
break;
case IAX_IE_AUTHMETHODS:
if (len != (int)sizeof(unsigned short)) {
@@ -677,13 +677,13 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
ies->encmethods = ntohs(get_unaligned_uint16(data + 2));
break;
case IAX_IE_CHALLENGE:
- ies->challenge = data + 2;
+ ies->challenge = (char *)data + 2;
break;
case IAX_IE_MD5_RESULT:
- ies->md5_result = data + 2;
+ ies->md5_result = (char *)data + 2;
break;
case IAX_IE_RSA_RESULT:
- ies->rsa_result = data + 2;
+ ies->rsa_result = (char *)data + 2;
break;
case IAX_IE_APPARENT_ADDR:
ies->apparent_addr = ((struct sockaddr_in *)(data + 2));
@@ -710,7 +710,7 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
ies->callno = ntohs(get_unaligned_uint16(data + 2));
break;
case IAX_IE_CAUSE:
- ies->cause = data + 2;
+ ies->cause = (char *)data + 2;
break;
case IAX_IE_CAUSECODE:
if (len != 1) {
@@ -763,10 +763,10 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
ies->firmwarever = ntohs(get_unaligned_uint16(data + 2));
break;
case IAX_IE_DEVICETYPE:
- ies->devicetype = data + 2;
+ ies->devicetype = (char *)data + 2;
break;
case IAX_IE_SERVICEIDENT:
- ies->serviceident = data + 2;
+ ies->serviceident = (char *)data + 2;
break;
case IAX_IE_FWBLOCKDESC:
if (len != (int)sizeof(unsigned int)) {
@@ -776,11 +776,11 @@ int iax_parse_ies(struct iax_ies *ies, char *data, int datalen)
ies->fwdesc = ntohl(get_unaligned_uint32(data + 2));
break;
case IAX_IE_FWBLOCKDATA:
- ies->fwdata = (unsigned char *)data + 2;
+ ies->fwdata = data + 2;
ies->fwdatalen = len;
break;
case IAX_IE_ENCKEY:
- ies->enckey = (unsigned char *)data + 2;
+ ies->enckey = data + 2;
ies->enckeylen = len;
break;
case IAX_IE_PROVVER: