summaryrefslogtreecommitdiff
path: root/update.go
diff options
context:
space:
mode:
Diffstat (limited to 'update.go')
-rw-r--r--update.go34
1 files changed, 29 insertions, 5 deletions
diff --git a/update.go b/update.go
index edb84a9..778423f 100644
--- a/update.go
+++ b/update.go
@@ -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