From d7c6d1fd39449d59775c8b012c50569e09a1b682 Mon Sep 17 00:00:00 2001 From: xaos Date: Wed, 22 Mar 2023 17:26:53 +0100 Subject: [PATCH] fix: compare records as strings when deleting --- server.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/server.go b/server.go index 31d305e..65b46db 100644 --- a/server.go +++ b/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) current, exists := srv.Records[key] if exists { filtered := []dns.RR{} + as_string := record.String() 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) } } @@ -71,8 +74,10 @@ func (srv *Server) delete_record(record dns.RR) { } else { srv.Records[key] = filtered } + return len(filtered) < len(current) } else { // doesn't exist, nothing to delete + return false } } @@ -104,18 +109,24 @@ func (srv *Server) main() { } func (srv *Server) handle_request(r request) { - srv.logger.Debug("received", zap.Object("request", r)) - + var count_field zap.Field if r.append { for _, record := range r.records { srv.insert_record(record) } + count_field = zap.Int("appended_records", len(r.records)) } else { + count := 0 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() }