You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2014/11/25 10:03:36 UTC

[3/4] git commit: updated refs/heads/master to 7ff31f1

Validate IPv4 address using Apache Commons Validator


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/72ba98b1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/72ba98b1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/72ba98b1

Branch: refs/heads/master
Commit: 72ba98b1b856db84327f2836eac3b4a4b3099bea
Parents: 87a7810
Author: Wido den Hollander <wi...@widodh.nl>
Authored: Mon Nov 24 14:42:02 2014 +0100
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Mon Nov 24 14:43:48 2014 +0100

----------------------------------------------------------------------
 pom.xml                                     |  6 +++++
 server/src/com/cloud/api/ApiServlet.java    |  4 +--
 utils/pom.xml                               |  4 +++
 utils/src/com/cloud/utils/net/NetUtils.java | 32 +++---------------------
 4 files changed, 15 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/72ba98b1/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 99e23a1..e68b307 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,7 @@
     <cs.aws.sdk.version>1.3.22</cs.aws.sdk.version>
     <cs.lang.version>2.6</cs.lang.version>
     <cs.commons-io.version>1.4</cs.commons-io.version>
+    <cs.commons-validator.version>1.4.0</cs.commons-validator.version>
     <cs.reflections.version>0.9.8</cs.reflections.version>
     <cs.java-ipv6.version>0.10</cs.java-ipv6.version>
     <cs.replace.properties>build/replace.properties</cs.replace.properties>
@@ -234,6 +235,11 @@
         <version>${cs.codec.version}</version>
       </dependency>
       <dependency>
+        <groupId>commons-validator</groupId>
+        <artifactId>commons-validator</artifactId>
+        <version>${cs.commons-validator.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.bouncycastle</groupId>
         <artifactId>bcprov-jdk16</artifactId>
         <version>${cs.bcprov.version}</version>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/72ba98b1/server/src/com/cloud/api/ApiServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java
index a246025..a4266f7 100644
--- a/server/src/com/cloud/api/ApiServlet.java
+++ b/server/src/com/cloud/api/ApiServlet.java
@@ -344,14 +344,14 @@ public class ApiServlet extends HttpServlet {
         if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
             return null;
         }
-        if(NetUtils.isValidIp(ip)) {
+        if(NetUtils.isValidIp(ip) || NetUtils.isValidIpv6(ip)) {
             return ip;
         }
         //it could be possible to have multiple IPs in HTTP header, this happens if there are multiple proxy in between
         //the client and the servlet, so parse the client IP
         String[] ips = ip.split(",");
         for(String i : ips) {
-            if(NetUtils.isValidIp(i.trim())) {
+            if(NetUtils.isValidIp(i.trim()) || NetUtils.isValidIpv6(i.trim())) {
                 return i.trim();
             }
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/72ba98b1/utils/pom.xml
----------------------------------------------------------------------
diff --git a/utils/pom.xml b/utils/pom.xml
index 6b16b99..7d3210a 100755
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -59,6 +59,10 @@
       <artifactId>cglib-nodep</artifactId>
     </dependency>
     <dependency>
+      <groupId>commons-validator</groupId>
+      <artifactId>commons-validator</artifactId>
+    </dependency>
+    <dependency>
       <groupId>commons-codec</groupId>
       <artifactId>commons-codec</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/72ba98b1/utils/src/com/cloud/utils/net/NetUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java
index 1f41825..8875bb9 100755
--- a/utils/src/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/com/cloud/utils/net/NetUtils.java
@@ -22,7 +22,6 @@ package com.cloud.utils.net;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.lang.reflect.Array;
 import java.math.BigInteger;
 import java.net.InetAddress;
 import java.net.InterfaceAddress;
@@ -43,6 +42,7 @@ import java.util.regex.Pattern;
 
 import org.apache.commons.lang.SystemUtils;
 import org.apache.commons.net.util.SubnetUtils;
+import org.apache.commons.validator.routines.InetAddressValidator;
 import org.apache.log4j.Logger;
 
 import com.googlecode.ipv6.IPv6Address;
@@ -520,35 +520,9 @@ public class NetUtils {
     }
 
     public static boolean isValidIp(final String ip) {
-        final String[] ipAsList = ip.split("\\.");
+        InetAddressValidator validator = InetAddressValidator.getInstance();
 
-        // The IP address must have four octets
-        if (Array.getLength(ipAsList) != 4) {
-            return false;
-        }
-
-        for (int i = 0; i < 4; i++) {
-            // Each octet must be an integer
-            final String octetString = ipAsList[i];
-            int octet;
-            try {
-                octet = Integer.parseInt(octetString);
-            } catch (final Exception e) {
-                return false;
-            }
-            // Each octet must be between 0 and 255, inclusive
-            if (octet < 0 || octet > 255) {
-                return false;
-            }
-
-            // Each octetString must have between 1 and 3 characters
-            if (octetString.length() < 1 || octetString.length() > 3) {
-                return false;
-            }
-        }
-
-        // IP is good, return true
-        return true;
+        return validator.isValidInet4Address(ip);
     }
 
     public static boolean isValidCIDR(final String cidr) {