{"record":{"id":"4a11bcfaae04df99","repo":"TechnitiumSoftware/DnsServer","slug":"cannot-delete-record-in-zone","errorCode":null,"errorMessage":"Cannot delete record in {} zone.","messagePattern":"Cannot delete record in (.+?) zone\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/Zones/SecondarySubDomainZone.cs","lineNumber":58,"sourceCode":"        }\n\n        #endregion\n\n        #region public\n\n        public override void SetRecords(DnsResourceRecordType type, IReadOnlyList<DnsResourceRecord> records)\n        {\n            throw new InvalidOperationException(\"Cannot set records in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        public override bool AddRecord(DnsResourceRecord record)\n        {\n            throw new InvalidOperationException(\"Cannot add record in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        public override bool DeleteRecord(DnsResourceRecordType type, DnsResourceRecordData record)\n        {\n            throw new InvalidOperationException(\"Cannot delete record in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        public override bool DeleteRecords(DnsResourceRecordType type)\n        {\n            throw new InvalidOperationException(\"Cannot delete records in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        public override void UpdateRecord(DnsResourceRecord oldRecord, DnsResourceRecord newRecord)\n        {\n            throw new InvalidOperationException(\"Cannot update record in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        #endregion\n    }\n}\n","sourceCodeStart":40,"sourceCodeEnd":74,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/Zones/SecondarySubDomainZone.cs#L40-L74","documentation":"Thrown unconditionally by SecondarySubDomainZone.DeleteRecord (single-record). Read-only secondary sub-domain zones reject local deletion with InvalidOperationException; the message uses the parent secondary zone's type name.","triggerScenarios":"Calling subZone.DeleteRecord(type, rdata) on a SecondarySubDomainZone.","commonSituations":"Generic delete pipelines that target all zones; cleanup routines that do not check writability.","solutions":["Check the zone is not a SecondarySubDomainZone before deleting.","Convert to a primary sub-domain zone if deletions are needed.","Wrap mutation calls in a helper that enforces writability."],"exampleFix":"// before\nzone.DeleteRecord(type, rdata);\n\n// after\nif (zone is SecondarySubDomainZone)\n    return; // read-only\nzone.DeleteRecord(type, rdata);","handlingStrategy":"type-guard","validationCode":"if (zone is SecondarySubDomainZone)\n    return;\nzone.DeleteRecord(type, rdata);","typeGuard":"static bool IsWritable(AuthZone zone) => zone is not SecondarySubDomainZone;","tryCatchPattern":"null","preventionTips":["Skip read-only zones in delete pipelines.","Log skipped operations so silent no-ops are auditable."],"tags":["dns","secondary-subdomain-zone","read-only","immutable","zone-type","delete"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}