diff --git a/dyndns/daemon.go b/dyndns/daemon.go index cddfc62..ab61d45 100644 --- a/dyndns/daemon.go +++ b/dyndns/daemon.go @@ -7,6 +7,7 @@ import ( "strings" "sync" "time" + "net" "git.darkcloud.ca/kevin/name-dyndns/api" "git.darkcloud.ca/kevin/name-dyndns/log" @@ -28,24 +29,30 @@ func contains(c api.Config, val string) bool { } func updateDNSRecord(a api.API, domain, recordID string, newRecord api.DNSRecord) error { - log.Logger.Printf("Deleting DNS record for %s.\n", newRecord.Name) - err := a.DeleteDNSRecord(domain, newRecord.RecordID) - if err != nil { - return err - } + addr := net.ParseIP(record.Content) - log.Logger.Printf("Creating DNS record for %s: %s\n", newRecord.Name, newRecord) + if addr != nil { + log.Logger.Printf("Deleting DNS record for %s.\n", newRecord.Name) + err := a.DeleteDNSRecord(domain, newRecord.RecordID) + if err != nil { + return err + } - // Remove the domain from the DNSRecord name. - // This is an unfortunate inconsistency from the API - // implementation (returns full name, but only requires host) - if newRecord.Name == domain { - newRecord.Name = "" + log.Logger.Printf("Creating DNS record for %s: %s\n", newRecord.Name, newRecord) + + // Remove the domain from the DNSRecord name. + // This is an unfortunate inconsistency from the API + // implementation (returns full name, but only requires host) + if newRecord.Name == domain { + newRecord.Name = "" + } else { + newRecord.Name = strings.TrimSuffix(newRecord.Name, fmt.Sprintf(".%s", domain)) + } + + return a.CreateDNSRecord(domain, newRecord) } else { - newRecord.Name = strings.TrimSuffix(newRecord.Name, fmt.Sprintf(".%s", domain)) + log.Logger.Printf("Unable to parse IP: %s\n", newRecord) } - - return a.CreateDNSRecord(domain, newRecord) } func runConfig(c api.Config, daemon bool) {