1
0
Fork 0
forked from External/ergo

Require that server names must be hostnames, and nicks cannot be hostnames

This commit is contained in:
Daniel Oaks 2016-04-21 10:48:15 +10:00
parent 9ac09a7027
commit 77bf7173ff
3 changed files with 32 additions and 0 deletions

View file

@ -27,3 +27,28 @@ func LookupHostname(addr Name) Name {
hostname := strings.TrimSuffix(names[0], ".")
return Name(hostname)
}
var allowedHostnameChars = "abcdefghijklmnopqrstuvwxyz1234567890-."
func IsHostname(name string) bool {
// IRC hostnames specifically require a period
if !strings.Contains(name, ".") || len(name) < 1 || len(name) > 253 {
return false
}
// ensure each part of hostname is valid
for _, part := range strings.Split(name, ".") {
if len(part) < 1 || len(part) > 63 || strings.HasPrefix(part, "-") || strings.HasSuffix(part, "-") {
return false
}
}
// ensure all chars of hostname are valid
for _, char := range strings.Split(strings.ToLower(name), "") {
if !strings.Contains(allowedHostnameChars, char) {
return false
}
}
return true
}