diff options
author | dominique.leuenberger@gmail.com <dominique.leuenberger@gmail.com@c587cffe-e639-0410-9787-d7902ae8ed56> | 2011-05-19 20:41:51 +0000 |
---|---|---|
committer | dominique.leuenberger@gmail.com <dominique.leuenberger@gmail.com@c587cffe-e639-0410-9787-d7902ae8ed56> | 2011-05-19 20:41:51 +0000 |
commit | 5ca5494b829067dc49355e506dd16c06911ff1e8 (patch) | |
tree | 575b667f7ac25bb7818a604fbee751d8dc3c6d52 | |
parent | 274431901fc076dc94418287eb0bdf19d20b4f9c (diff) | |
download | libproxy-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.cpp | 16 |
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); } |