{"record":{"id":"00cdd7c6a5395062","repo":"TechnitiumSoftware/DnsServer","slug":"the-zone-memberzoneinfo-displayname-is-already","errorCode":null,"errorMessage":"The zone '<memberZoneInfo.DisplayName>' is already a member of Catalog zone '<currentCatalogZoneName>'.","messagePattern":"The zone '<memberZoneInfo\\.DisplayName>' is already a member of Catalog zone '<currentCatalogZoneName>'\\.","errorType":"exception","errorClass":"DnsServerException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/ZoneManagers/AuthZoneManager.cs","lineNumber":1787,"sourceCode":"        }\n\n        #endregion\n\n        #region catalog member zones\n\n        public void AddCatalogMemberZone(string catalogZoneName, AuthZoneInfo memberZoneInfo, bool ignoreValidationErrors = false)\n        {\n            switch (memberZoneInfo.Type)\n            {\n                case AuthZoneType.Primary:\n                case AuthZoneType.Secondary:\n                case AuthZoneType.Stub:\n                case AuthZoneType.Forwarder:\n                    if (!ignoreValidationErrors)\n                    {\n                        string currentCatalogZoneName = memberZoneInfo.ApexZone.CatalogZoneName;\n                        if (currentCatalogZoneName is not null)\n                            throw new DnsServerException(\"The zone '\" + memberZoneInfo.DisplayName + \"' is already a member of Catalog zone '\" + currentCatalogZoneName + \"'.\");\n                    }\n\n                    ApexZone apexZone = _root.GetApexZone(catalogZoneName);\n                    if (apexZone is not CatalogZone catalogZone)\n                    {\n                        if (ignoreValidationErrors)\n                            return;\n\n                        throw new DnsServerException(\"No such Catalog zone was found: \" + catalogZoneName);\n                    }\n\n                    //set catalog zone name in member zone so that properties can be set below correctly\n                    memberZoneInfo.ApexZone.CatalogZoneName = catalogZone.Name;\n\n                    if (!memberZoneInfo.Disabled)\n                    {\n                        catalogZone.AddMemberZone(memberZoneInfo.Name, memberZoneInfo.Type);\n","sourceCodeStart":1769,"sourceCodeEnd":1805,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/ZoneManagers/AuthZoneManager.cs#L1769-L1805","documentation":"Thrown by AddCatalogMemberZone when a zone is already associated with a Catalog zone. The guard reads memberZoneInfo.ApexZone.CatalogZoneName and, when it is non-null and validation is enabled, refuses to add the zone to another catalog because a member zone may belong to only one catalog at a time.","triggerScenarios":"Calling AddCatalogMemberZone(catalogZoneName, memberZoneInfo) where memberZoneInfo.ApexZone.CatalogZoneName is already set (zone is a member of some catalog) and ignoreValidationErrors is false (the default).","commonSituations":"Re-adding a zone to the same or a different catalog without first removing it. UI not refreshing the zone's catalog membership status. Bulk-import script that re-applies catalog membership.","solutions":["Call RemoveCatalogMemberZone(memberZoneInfo) first to detach from the current catalog, then add to the new one.","To move between catalogs, use ChangeCatalogMemberZoneOwnership which handles the transfer atomically.","If re-adding to the same catalog is intended, skip the add when CatalogZoneName already equals catalogZoneName.","Refresh memberZoneInfo before calling so the check reflects live state."],"exampleFix":"// before\nmanager.AddCatalogMemberZone(catalogName, memberZone); // throws if already a member\n\n// after\nif (!string.IsNullOrEmpty(memberZone.ApexZone.CatalogZoneName))\n    manager.ChangeCatalogMemberZoneOwnership(memberZone, catalogName);\nelse\n    manager.AddCatalogMemberZone(catalogName, memberZone);","handlingStrategy":"validation","validationCode":"if (!string.IsNullOrEmpty(memberZone.ApexZone.CatalogZoneName) && memberZone.ApexZone.CatalogZoneName != catalogName)\n    return Conflict($\"Zone is already a member of '{memberZone.ApexZone.CatalogZoneName}'.\");","typeGuard":null,"tryCatchPattern":"catch (DnsServerException ex) when (ex.Message.Contains(\"already a member\")) { return Conflict(ex.Message); }","preventionTips":["Remove a zone from its current catalog before adding to a new one.","Use ChangeCatalogMemberZoneOwnership to move between catalogs.","Refresh catalog membership state before re-adding."],"tags":["dns","catalog-zone","membership","conflict","input-validation"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}