diff options
author | Jukka Rissanen <jukka.rissanen@nokia.com> | 2011-04-05 13:57:41 +0300 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-04-11 21:37:58 +0200 |
commit | b2e8ddc37278588c7364770a6e98cda76cc9b540 (patch) | |
tree | 7302dc4d5de6b8ca816f2d0de64a7358863967ac /gweb/gweb.c | |
parent | 8a67f04f02a8182a605a697764ab1535d1a75fe3 (diff) | |
download | connman-b2e8ddc37278588c7364770a6e98cda76cc9b540.tar.gz connman-b2e8ddc37278588c7364770a6e98cda76cc9b540.tar.bz2 connman-b2e8ddc37278588c7364770a6e98cda76cc9b540.zip |
gweb: numeric session address was not resolved properly.
Reported by: Sebastien Bianti <sebastien.bianti@linux.intel.com>
Diffstat (limited to 'gweb/gweb.c')
-rw-r--r-- | gweb/gweb.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gweb/gweb.c b/gweb/gweb.c index 75e64d96..9c9fcd1b 100644 --- a/gweb/gweb.c +++ b/gweb/gweb.c @@ -1148,9 +1148,30 @@ static guint do_request(GWeb *web, const char *url, return 0; } } else { + struct addrinfo hints; + char *port; + int ret; + if (session->address == NULL) session->address = g_strdup(session->host); + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_flags = AI_NUMERICHOST; + + if (session->addr != NULL) { + freeaddrinfo(session->addr); + session->addr = NULL; + } + + port = g_strdup_printf("%u", session->port); + ret = getaddrinfo(session->address, port, &hints, + &session->addr); + g_free(port); + if (ret != 0 || session->addr == NULL) { + free_session(session); + return 0; + } + if (create_transport(session) < 0) { free_session(session); return 0; |