diff options
Diffstat (limited to 'update.go')
| -rw-r--r-- | update.go | 34 |
1 files changed, 29 insertions, 5 deletions
@@ -20,13 +20,37 @@ type Update struct { } func (u *Update) Init(name string, zone string, server string) error { - u.name = dns.Fqdn(name) - u.zone = dns.Fqdn(zone) + if name == "" { + return fmt.Errorf("Missing name") + } else { + u.name = dns.Fqdn(name) + } - if _, _, err := net.SplitHostPort(server); err == nil { - u.server = server + if zone == "" { + // guess + if labels := dns.Split(u.name); len(labels) > 1 { + u.zone = u.name[labels[1]:] + } else { + return fmt.Errorf("Missing zone") + } } else { - u.server = net.JoinHostPort(server, "53") + u.zone = dns.Fqdn(zone) + } + + if server == "" { + if server, err := discoverZoneServer(u.zone); err != nil { + return fmt.Errorf("Failed to discver server") + } else { + log.Printf("discover server=%v", server) + + u.server = net.JoinHostPort(server, "53") + } + } else { + if _, _, err := net.SplitHostPort(server); err == nil { + u.server = server + } else { + u.server = net.JoinHostPort(server, "53") + } } return nil |
