summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordominique.leuenberger@gmail.com <dominique.leuenberger@gmail.com@c587cffe-e639-0410-9787-d7902ae8ed56>2011-05-19 20:41:51 +0000
committerdominique.leuenberger@gmail.com <dominique.leuenberger@gmail.com@c587cffe-e639-0410-9787-d7902ae8ed56>2011-05-19 20:41:51 +0000
commit5ca5494b829067dc49355e506dd16c06911ff1e8 (patch)
tree575b667f7ac25bb7818a604fbee751d8dc3c6d52
parent274431901fc076dc94418287eb0bdf19d20b4f9c (diff)
downloadlibproxy-5ca5494b829067dc49355e506dd16c06911ff1e8.tar.gz
Fix issue 162: IP/CIDR based ignore patterns were mis-interpreted.
git-svn-id: http://libproxy.googlecode.com/svn/trunk@809 c587cffe-e639-0410-9787-d7902ae8ed56
-rw-r--r--libproxy/modules/ignore_ip.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/libproxy/modules/ignore_ip.cpp b/libproxy/modules/ignore_ip.cpp
index 388c177..c019fec 100644
--- a/libproxy/modules/ignore_ip.cpp
+++ b/libproxy/modules/ignore_ip.cpp
@@ -135,13 +135,19 @@ public:
if (ignore.find('/') != string::npos)
{
ign_ip = sockaddr_from_string(ignore.substr(0, ignore.find('/')));
- net_ip = sockaddr_from_string(ignore.substr(ignore.find('/') + 1));
- /* If CIDR notation was used, get the netmask */
- if (ign_ip && !net_ip)
+ uint32_t cidr = 0;
+ string mask = ignore.substr(ignore.find('/') + 1);
+
+ if (mask.find('.') != string::npos)
+ {
+ /* A dotted netmask was used */
+ net_ip = sockaddr_from_string(mask);
+ }
+ else
{
- uint32_t cidr = 0;
- if (sscanf(ignore.substr(ignore.find('/') + 1).c_str(), "%d", &cidr) == 1)
+ /* If CIDR notation was used, get the netmask */
+ if (sscanf(mask.c_str(), "%d", &cidr) == 1)
net_ip = sockaddr_from_cidr(ign_ip->sa_family, cidr);
}