namedmanager icon indicating copy to clipboard operation
namedmanager copied to clipboard

ipv4_cidr regex not ok for /10

Open y0hnn opened this issue 8 years ago • 3 comments

Hi,

The ipv4_cidr regex for /10 subnet seems invalids. Here a regex that seems to be working : http://www.regexpal.com/93987

y0hnn avatar Jan 14 '17 22:01 y0hnn

Best fix is probably to move to using PHP's native IPv4 validation. We use it for IPv6, but don't use it for older IPv4 addresses.

396                 case "ipv4":
397                         $expression = "/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/";
398                 break;
399
400                 case "ipv4_cidr":
401                         $expression = "/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}[\/]*[1-9]*$/";
402                 break;
403
404                 case "ipv6":
405                         if (filter_var($_POST[$valuename], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
406                         {
407                                 return $_POST[$valuename];
408                         }
409                         else
410                         {
411                                 // there has been an error - flag the hourmins field as being incorrect input
412                                 $_SESSION["error"]["message"][] = "Provided address is not a valid IPv6 address";
413                                 $_SESSION["error"]["". $valuename . "-error"] = 1;
414                                 $_SESSION["error"][$valuename] = 0;
415
416                                 return "error";
417                         }
418                 break;
419
420                 case "ipv6_cidr":
421                         list($network, $cidr) = split("/", $_POST[$valuename]);
422
423                         if (filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
424                         {
425                                 return "$network/$cidr";
426                         }
427                         else
428                         {
429                                 // there has been an error - flag the hourmins field as being incorrect input
430                                 $_SESSION["error"]["message"][] = "Provided address is not a valid IPv6 address";
431                                 $_SESSION["error"]["". $valuename . "-error"] = 1;
432                                 $_SESSION["error"][$valuename] = 0;
433
434                                 return "error";
435                         }
436                 break;

PR welcome.

jethrocarr avatar Jan 29 '17 02:01 jethrocarr

Best fix is probably to move to using PHP's native IPv4 validation. We use it for IPv6, but don't use it for older IPv4 addresses.

396                 case "ipv4":
397                         $expression = "/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/";
398                 break;
399
400                 case "ipv4_cidr":
401                         $expression = "/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}[\/]*[1-9]*$/";
402                 break;
403
404                 case "ipv6":
405                         if (filter_var($_POST[$valuename], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
406                         {
407                                 return $_POST[$valuename];
408                         }
409                         else
410                         {
411                                 // there has been an error - flag the hourmins field as being incorrect input
412                                 $_SESSION["error"]["message"][] = "Provided address is not a valid IPv6 address";
413                                 $_SESSION["error"]["". $valuename . "-error"] = 1;
414                                 $_SESSION["error"][$valuename] = 0;
415
416                                 return "error";
417                         }
418                 break;
419
420                 case "ipv6_cidr":
421                         list($network, $cidr) = split("/", $_POST[$valuename]);
422
423                         if (filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
424                         {
425                                 return "$network/$cidr";
426                         }
427                         else
428                         {
429                                 // there has been an error - flag the hourmins field as being incorrect input
430                                 $_SESSION["error"]["message"][] = "Provided address is not a valid IPv6 address";
431                                 $_SESSION["error"]["". $valuename . "-error"] = 1;
432                                 $_SESSION["error"][$valuename] = 0;
433
434                                 return "error";
435                         }
436                 break;

PR welcome.

v1.9.0 not working for /10,/20,/30...

unixchina avatar May 11 '21 06:05 unixchina

Hi,

The ipv4_cidr regex for /10 subnet seems invalids. Here a regex that seems to be working : http://www.regexpal.com/93987

It's working for me

unixchina avatar May 11 '21 07:05 unixchina