summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2010-07-14 22:32:29 +0000
committerMark Michelson <mmichelson@digium.com>2010-07-14 22:32:29 +0000
commit1e8c66e749a20c2c0202f0da58918e9313f0512c (patch)
treef8f902d38011e82daa5eb6696813e6e08940de0d /channels
parent5d9aa45721c6f953b4798b5feb15c52397626dee (diff)
Fix errors where incorrect address information was printed.
ast_sockaddr_stringiy_fmt (which is call by all ast_sockaddr_stringify* functions) uses thread-local storage for storing the string that it creates. In cases where ast_sockaddr_stringify_fmt was being called twice within the same statement, the result of one call would be overwritten by the result of the other call. This usually was happening in printf-like statements and was resulting in the same stringified addressed being printed twice instead of two separate addresses. I have fixed this by using ast_strdupa on the result of stringify functions if they are used twice within the same statement. As far as I could tell, there were no instances where a pointer to the result of such a call were saved anywhere, so this is the only situation I could see where this error could occur. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@276570 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 6887e81f1..4189f53fe 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -13427,8 +13427,8 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock
"Cause: AUTH_SECRET_FAILED\r\n"
"Address: %s\r\n"
"Port: %s\r\n",
- name, ast_sockaddr_stringify_addr(addr),
- ast_sockaddr_stringify_port(addr));
+ name, ast_strdupa(ast_sockaddr_stringify_addr(addr)),
+ ast_strdupa(ast_sockaddr_stringify_port(addr)));
}
break;
case AUTH_USERNAME_MISMATCH:
@@ -13451,8 +13451,8 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock
"Port: %s\r\n",
name,
res == AUTH_PEER_NOT_DYNAMIC ? "AUTH_PEER_NOT_DYNAMIC" : "URI_NOT_FOUND",
- ast_sockaddr_stringify_addr(addr),
- ast_sockaddr_stringify_port(addr));
+ ast_strdupa(ast_sockaddr_stringify_addr(addr)),
+ ast_strdupa(ast_sockaddr_stringify_port(addr)));
}
} else {
/* URI not found */
@@ -13467,8 +13467,8 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock
"Address: %s\r\n"
"Port: %s\r\n",
name,
- ast_sockaddr_stringify_addr(addr),
- ast_sockaddr_stringify_port(addr));
+ ast_strdupa(ast_sockaddr_stringify_addr(addr)),
+ ast_strdupa(ast_sockaddr_stringify_port(addr)));
}
} else {
transmit_response(p, "404 Not found", &p->initreq);
@@ -13482,8 +13482,8 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock
"Port: %s\r\n",
name,
(res == AUTH_USERNAME_MISMATCH) ? "AUTH_USERNAME_MISMATCH" : "URI_NOT_FOUND",
- ast_sockaddr_stringify_addr(addr),
- ast_sockaddr_stringify_port(addr));
+ ast_strdupa(ast_sockaddr_stringify_addr(addr)),
+ ast_strdupa(ast_sockaddr_stringify_port(addr)));
}
}
}
@@ -27009,7 +27009,7 @@ static int apply_directmedia_ha(struct sip_pvt *p, const char *op)
if ((res = ast_apply_ha(p->directmediaha, &them_sin)) == AST_SENSE_DENY) {
ast_debug(3, "Reinvite %s to %s denied by directmedia ACL on %s\n",
- op, ast_sockaddr_stringify(&them), ast_sockaddr_stringify(&us));
+ op, ast_strdupa(ast_sockaddr_stringify(&them)), ast_strdupa(ast_sockaddr_stringify(&us)));
}
return res;