summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-01-28 14:25:16 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-01-28 14:25:16 +0000
commiteb4116ae5782f76a2115647d3cdeeedd5c28fc4f (patch)
treea8321cc62d96e90d381e13f0aa7c587f1ad6bea8 /src
parent994d58a4a4667d300d9e814a7f37b92187db1441 (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.cc2
-rw-r--r--src/CookieStorage.cc2
-rw-r--r--src/util.cc15
-rw-r--r--src/util.h2
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) {
diff --git a/src/util.h b/src/util.h
index a57a84e5..8a979074 100644
--- a/src/util.h
+++ b/src/util.h
@@ -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);