diff --git a/bitnami/keycloak/21/debian-11/prebuildfs/opt/bitnami/scripts/libvalidations.sh b/bitnami/keycloak/21/debian-11/prebuildfs/opt/bitnami/scripts/libvalidations.sh index 3c6a4109c2c5..ba4b246e09c9 100644 --- a/bitnami/keycloak/21/debian-11/prebuildfs/opt/bitnami/scripts/libvalidations.sh +++ b/bitnami/keycloak/21/debian-11/prebuildfs/opt/bitnami/scripts/libvalidations.sh @@ -187,6 +187,26 @@ validate_port() { fi } +######################## +# Validate if the provided argument is a valid IPv4 or IPv6 address +# Arguments: +# $1 - IP to validate +# Returns: +# Boolean +######################### +validate_ip() { + local ip="${1:?ip is missing}" + local stat=1 + + if validate_ipv4 "$ip"; then + stat=0 + else + stat=$(validate_ipv6 "$ip") + fi + + return $stat +} + ######################## # Validate if the provided argument is a valid IPv4 address # Arguments: @@ -207,6 +227,25 @@ validate_ipv4() { return $stat } +######################## +# Validate if the provided argument is a valid IPv6 address +# Arguments: +# $1 - IP to validate +# Returns: +# Boolean +######################### +validate_ipv6() { + local ip="${1:?ip is missing}" + local stat=1 + local full_address_regex='^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$' + local short_address_regex='^((([0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}){0,6}::(([0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}){0,6})$' + + if [[ $ip =~ $full_address_regex || $ip =~ $short_address_regex || $ip == "::" ]]; then + stat=0 + fi + return $stat +} + ######################## # Validate a string format # Arguments: diff --git a/bitnami/keycloak/21/debian-11/rootfs/opt/bitnami/scripts/libkeycloak.sh b/bitnami/keycloak/21/debian-11/rootfs/opt/bitnami/scripts/libkeycloak.sh index 4fe71084e63b..3ff54a241134 100644 --- a/bitnami/keycloak/21/debian-11/rootfs/opt/bitnami/scripts/libkeycloak.sh +++ b/bitnami/keycloak/21/debian-11/rootfs/opt/bitnami/scripts/libkeycloak.sh @@ -72,9 +72,9 @@ keycloak_validate() { fi fi - if ! validate_ipv4 "${KEYCLOAK_BIND_ADDRESS}"; then + if ! validate_ip "${KEYCLOAK_BIND_ADDRESS}"; then if ! is_hostname_resolved "${KEYCLOAK_BIND_ADDRESS}"; then - print_validation_error print_validation_error "The value for KEYCLOAK_BIND_ADDRESS ($KEYCLOAK_BIND_ADDRESS) should be an IPv4 address or it must be a resolvable hostname" + print_validation_error print_validation_error "The value for KEYCLOAK_BIND_ADDRESS ($KEYCLOAK_BIND_ADDRESS) should be an IPv4 or IPv6 address, or it must be a resolvable hostname" fi fi