From: Richard Mudgett Date: Wed, 21 Dec 2016 22:25:00 +0000 (-0600) Subject: acl.c: Improve ast_ouraddrfor() diagnostic messages. X-Git-Tag: 13.14.0-rc1~53^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac31233dbe996b4e2a1ccf9b7b2b35f6ed19e43c;p=thirdparty%2Fasterisk.git acl.c: Improve ast_ouraddrfor() diagnostic messages. * Made not generate strings unless they will actually be used. ASTERISK-26672 Change-Id: I155fbe7fdff5ce47dfe5326f3baf5446849702c3 --- diff --git a/main/acl.c b/main/acl.c index 87776b33b1..9820e8bef2 100644 --- a/main/acl.c +++ b/main/acl.c @@ -914,40 +914,48 @@ int ast_get_ip(struct ast_sockaddr *addr, const char *hostname) int ast_ouraddrfor(const struct ast_sockaddr *them, struct ast_sockaddr *us) { + /* + * We must create the errno string before creating the address + * string because it could wipe out errno on the error return + * paths. + */ + const char *sock_err; int port; int s; + /* Preserve our original address port */ port = ast_sockaddr_port(us); - if ((s = socket(ast_sockaddr_is_ipv6(them) ? AF_INET6 : AF_INET, - SOCK_DGRAM, 0)) < 0) { - ast_log(LOG_ERROR, "Cannot create socket\n"); + s = socket(ast_sockaddr_is_ipv6(them) ? AF_INET6 : AF_INET, SOCK_DGRAM, 0); + if (s < 0) { + sock_err = ast_strdupa(strerror(errno)); + ast_log(LOG_ERROR, "Cannot create socket to %s: %s\n", + ast_sockaddr_stringify_addr(them), sock_err); return -1; } if (ast_connect(s, them)) { - ast_log(LOG_WARNING, "Cannot connect\n"); + sock_err = ast_strdupa(strerror(errno)); + ast_log(LOG_WARNING, "Cannot connect to %s: %s\n", + ast_sockaddr_stringify_addr(them), sock_err); close(s); return -1; } if (ast_getsockname(s, us)) { - - ast_log(LOG_WARNING, "Cannot get socket name\n"); + sock_err = ast_strdupa(strerror(errno)); + ast_log(LOG_WARNING, "Cannot get socket name for connection to %s: %s\n", + ast_sockaddr_stringify_addr(them), sock_err); close(s); return -1; } close(s); - { - const char *them_addr = ast_strdupa(ast_sockaddr_stringify_addr(them)); - const char *us_addr = ast_strdupa(ast_sockaddr_stringify_addr(us)); - - ast_debug(3, "For destination '%s', our source address is '%s'.\n", - them_addr, us_addr); - } - ast_sockaddr_set_port(us, port); + ast_debug(3, "For destination '%s', our source address is '%s'.\n", + ast_strdupa(ast_sockaddr_stringify_addr(them)), + ast_strdupa(ast_sockaddr_stringify_addr(us))); + return 0; }