diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-01-28 14:25:16 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-01-28 14:25:16 +0000 |
| commit | eb4116ae5782f76a2115647d3cdeeedd5c28fc4f (patch) | |
| tree | a8321cc62d96e90d381e13f0aa7c587f1ad6bea8 /src | |
| parent | 994d58a4a4667d300d9e814a7f37b92187db1441 (diff) | |
2010-01-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Replaced isNumberAndDotsNotation() with isNumericHost().
isNumericHost() can handle IPv6 address.
* src/Cookie.cc
* src/CookieStorage.cc
* src/util.cc
* src/util.h
* test/CookieTest.cc
* test/UtilTest.cc
Diffstat (limited to 'src')
| -rw-r--r-- | src/Cookie.cc | 2 | ||||
| -rw-r--r-- | src/CookieStorage.cc | 2 | ||||
| -rw-r--r-- | src/util.cc | 15 | ||||
| -rw-r--r-- | src/util.h | 2 |
4 files changed, 13 insertions, 8 deletions
diff --git a/src/Cookie.cc b/src/Cookie.cc index b8ff5eeb..7132857c 100644 --- a/src/Cookie.cc +++ b/src/Cookie.cc @@ -56,7 +56,7 @@ static std::string prependDotIfNotExists(const std::string& domain) std::string Cookie::normalizeDomain(const std::string& domain) { - if(domain.empty() || util::isNumbersAndDotsNotation(domain)) { + if(domain.empty() || util::isNumericHost(domain)) { return domain; } std::string md = prependDotIfNotExists(domain); diff --git a/src/CookieStorage.cc b/src/CookieStorage.cc index 11b0e347..06bb7a6f 100644 --- a/src/CookieStorage.cc +++ b/src/CookieStorage.cc @@ -245,7 +245,7 @@ std::deque<Cookie> CookieStorage::criteriaFind(const std::string& requestHost, time_t date, bool secure) { std::deque<Cookie> res; - bool numericHost = util::isNumbersAndDotsNotation(requestHost); + bool numericHost = util::isNumericHost(requestHost); searchCookieByDomainSuffix ((!numericHost && requestHost.find(A2STR::DOT_C) == std::string::npos)? requestHost+".local":requestHost, diff --git a/src/util.cc b/src/util.cc index 7e866bc4..09d66941 100644 --- a/src/util.cc +++ b/src/util.cc @@ -664,13 +664,18 @@ std::string toLower(const std::string& src) { return temp; } -bool isNumbersAndDotsNotation(const std::string& name) { - struct sockaddr_in sockaddr; - if(inet_aton(name.c_str(), &sockaddr.sin_addr)) { - return true; - } else { +bool isNumericHost(const std::string& name) +{ + struct addrinfo hints; + struct addrinfo* res; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_flags = AI_NUMERICHOST; + if(getaddrinfo(name.c_str(), 0, &hints, &res)) { return false; } + freeaddrinfo(res); + return true; } void setGlobalSignalHandler(int sig, void (*handler)(int), int flags) { @@ -222,7 +222,7 @@ std::string toUpper(const std::string& src); std::string toLower(const std::string& src); -bool isNumbersAndDotsNotation(const std::string& name); +bool isNumericHost(const std::string& name); void setGlobalSignalHandler(int signal, void (*handler)(int), int flags); |
