diff options
| author | Tero Marttila <[email protected]> | 2016-06-19 20:05:55 +0300 |
|---|---|---|
| committer | Tero Marttila <[email protected]> | 2016-06-19 20:05:55 +0300 |
| commit | b2f9c977719626bebd9c9f9f7e52e50f2514ace7 (patch) | |
| tree | 70d9fd46fd2582d7390c41917114de4ef4c76117 /update.go | |
| parent | 9026b24cc14cbf8806b1d706e3768169dcc4d0c8 (diff) | |
autodiscover server from zone SOA
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 |
