fix: compare records as strings when deleting

This commit is contained in:
xaos 2023-03-22 17:26:53 +01:00
parent 759b725fdc
commit d7c6d1fd39

View file

@ -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,18 +109,24 @@ 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()
} }