(value string)
| 945 | } |
| 946 | |
| 947 | func validateNameserver(value string) error { |
| 948 | trimmed := strings.TrimSpace(value) |
| 949 | if trimmed == "" { |
| 950 | return nil |
| 951 | } |
| 952 | tokens := strings.FieldsFunc(trimmed, func(r rune) bool { |
| 953 | return r == ',' || r == ' ' || r == '\t' |
| 954 | }) |
| 955 | for _, token := range tokens { |
| 956 | addr, err := netip.ParseAddr(token) |
| 957 | if err != nil { |
| 958 | return fmt.Errorf("invalid address %q", token) |
| 959 | } |
| 960 | if !addr.Is4() && !addr.Is6() { |
| 961 | return fmt.Errorf("unsupported address %q", token) |
| 962 | } |
| 963 | } |
| 964 | return nil |
| 965 | } |
| 966 | |
| 967 | func validateSearchDomain(value string) error { |
| 968 | trimmed := strings.TrimSpace(value) |
no outgoing calls