|
@@ -27,3 +27,28 @@ func LookupHostname(addr Name) Name {
|
27
|
27
|
hostname := strings.TrimSuffix(names[0], ".")
|
28
|
28
|
return Name(hostname)
|
29
|
29
|
}
|
|
30
|
+
|
|
31
|
+var allowedHostnameChars = "abcdefghijklmnopqrstuvwxyz1234567890-."
|
|
32
|
+
|
|
33
|
+func IsHostname(name string) bool {
|
|
34
|
+ // IRC hostnames specifically require a period
|
|
35
|
+ if !strings.Contains(name, ".") || len(name) < 1 || len(name) > 253 {
|
|
36
|
+ return false
|
|
37
|
+ }
|
|
38
|
+
|
|
39
|
+ // ensure each part of hostname is valid
|
|
40
|
+ for _, part := range strings.Split(name, ".") {
|
|
41
|
+ if len(part) < 1 || len(part) > 63 || strings.HasPrefix(part, "-") || strings.HasSuffix(part, "-") {
|
|
42
|
+ return false
|
|
43
|
+ }
|
|
44
|
+ }
|
|
45
|
+
|
|
46
|
+ // ensure all chars of hostname are valid
|
|
47
|
+ for _, char := range strings.Split(strings.ToLower(name), "") {
|
|
48
|
+ if !strings.Contains(allowedHostnameChars, char) {
|
|
49
|
+ return false
|
|
50
|
+ }
|
|
51
|
+ }
|
|
52
|
+
|
|
53
|
+ return true
|
|
54
|
+}
|