From dfd8780a10d1658c2f898dd5dd08819677e18bdf Mon Sep 17 00:00:00 2001 From: Julien Malik Date: Fri, 11 Mar 2016 11:31:43 +0100 Subject: [PATCH] [enh] Add helper for IP address validation --- data/apps/helpers.d/ip | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 data/apps/helpers.d/ip diff --git a/data/apps/helpers.d/ip b/data/apps/helpers.d/ip new file mode 100644 index 000000000..cb507b35a --- /dev/null +++ b/data/apps/helpers.d/ip @@ -0,0 +1,52 @@ +# Validate an IP address +# +# example: ynh_validate_ip 4 111.222.333.444 +# +# usage: ynh_validate_ip +# +# exit code : 0 for valid ip addresses, 1 otherwise +ynh_validate_ip() +{ + # http://stackoverflow.com/questions/319279/how-to-validate-ip-address-in-python#319298 + + IP_ADDRESS_FAMILY=$1 + IP_ADDRESS=$2 + + [ "$IP_ADDRESS_FAMILY" == "4" ] || [ "$IP_ADDRESS_FAMILY" == "6" ] || return 1 + + python /dev/stdin << EOF +import socket +import sys +family = { "4" : socket.AF_INET, "6" : socket.AF_INET6 } +try: + socket.inet_pton(family["$IP_ADDRESS_FAMILY"], "$IP_ADDRESS") +except socket.error: + sys.exit(1) +sys.exit(0) +EOF +} + +# Validate an IPv4 address +# +# example: ynh_validate_ip4 111.222.333.444 +# +# usage: ynh_validate_ip4 +# +# exit code : 0 for valid ipv4 addresses, 1 otherwise +ynh_validate_ip4() +{ + ynh_validate_ip 4 $1 +} + + +# Validate an IPv6 address +# +# example: ynh_validate_ip6 2000:dead:beef::1 +# +# usage: ynh_validate_ip6 +# +# exit code : 0 for valid ipv6 addresses, 1 otherwise +ynh_validate_ip6() +{ + ynh_validate_ip 6 $1 +}