fix: compare records as strings when deleting
This commit is contained in:
parent
759b725fdc
commit
d7c6d1fd39
1 changed files with 16 additions and 5 deletions
21
server.go
21
server.go
|
|
@ -56,13 +56,16 @@ func (srv *Server) insert_record(record dns.RR) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Server) delete_record(record dns.RR) {
|
func (srv *Server) delete_record(record dns.RR) bool {
|
||||||
key := rr_key(record)
|
key := rr_key(record)
|
||||||
current, exists := srv.Records[key]
|
current, exists := srv.Records[key]
|
||||||
if exists {
|
if exists {
|
||||||
filtered := []dns.RR{}
|
filtered := []dns.RR{}
|
||||||
|
as_string := record.String()
|
||||||
for _, rec := range current {
|
for _, rec := range current {
|
||||||
if rec != record {
|
// TODO: see if there is a more efficient way to compare these
|
||||||
|
// just rec != record does not seem to work, might be doing ptr eq
|
||||||
|
if rec.String() != as_string {
|
||||||
filtered = append(filtered, rec)
|
filtered = append(filtered, rec)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -71,8 +74,10 @@ func (srv *Server) delete_record(record dns.RR) {
|
||||||
} else {
|
} else {
|
||||||
srv.Records[key] = filtered
|
srv.Records[key] = filtered
|
||||||
}
|
}
|
||||||
|
return len(filtered) < len(current)
|
||||||
} else {
|
} else {
|
||||||
// doesn't exist, nothing to delete
|
// doesn't exist, nothing to delete
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,17 +109,23 @@ func (srv *Server) main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Server) handle_request(r request) {
|
func (srv *Server) handle_request(r request) {
|
||||||
srv.logger.Debug("received", zap.Object("request", r))
|
var count_field zap.Field
|
||||||
|
|
||||||
if r.append {
|
if r.append {
|
||||||
for _, record := range r.records {
|
for _, record := range r.records {
|
||||||
srv.insert_record(record)
|
srv.insert_record(record)
|
||||||
}
|
}
|
||||||
|
count_field = zap.Int("appended_records", len(r.records))
|
||||||
} else {
|
} else {
|
||||||
|
count := 0
|
||||||
for _, record := range r.records {
|
for _, record := range r.records {
|
||||||
srv.delete_record(record)
|
if srv.delete_record(record) {
|
||||||
|
count += 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
count_field = zap.Int("deleted_records", count)
|
||||||
|
}
|
||||||
|
|
||||||
|
srv.logger.Debug("handled", zap.Object("request", r), count_field)
|
||||||
|
|
||||||
r.responder <- srv.start_stop_server()
|
r.responder <- srv.start_stop_server()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue