TechnitiumSoftware/DnsServer · error · DnsServerException

The zone '<memberZoneInfo.DisplayName>' is not a member of a

Error message

The zone '<memberZoneInfo.DisplayName>' is not a member of any Catalog zone.

What it means

Thrown by ChangeCatalogMemberZoneOwnership when the member zone is not currently attached to any catalog. The method reads memberZoneInfo.ApexZone.CatalogZoneName; if it is null there is no ownership to change, so it refuses.

Source

Thrown at DnsServerCore/Dns/ZoneManagers/AuthZoneManager.cs:1888

                    break;

                default:
                    throw new NotSupportedException();
            }
        }

        public void ChangeCatalogMemberZoneOwnership(AuthZoneInfo memberZoneInfo, string newCatalogZoneName)
        {
            switch (memberZoneInfo.Type)
            {
                case AuthZoneType.Primary:
                case AuthZoneType.Secondary:
                case AuthZoneType.Stub:
                case AuthZoneType.Forwarder:
                    string currentCatalogZoneName = memberZoneInfo.ApexZone.CatalogZoneName;
                    if (currentCatalogZoneName is null)
                        throw new DnsServerException("The zone '" + memberZoneInfo.DisplayName + "' is not a member of any Catalog zone.");

                    AddCatalogMemberZone(newCatalogZoneName, memberZoneInfo, true);

                    if (!memberZoneInfo.Disabled)
                    {
                        ApexZone apexZone = _root.GetApexZone(currentCatalogZoneName);
                        if (apexZone is CatalogZone currentCatalogZone)
                        {
                            currentCatalogZone.ChangeMemberZoneOwnership(memberZoneInfo.Name, newCatalogZoneName);

                            //save catalog changes
                            SaveZoneFile(currentCatalogZone.Name);
                        }
                    }

                    break;

                default:

View on GitHub (pinned to d0484b6c1e)

Solutions

  1. If the zone is not yet a member, call AddCatalogMemberZone(newCatalogZoneName, memberZoneInfo) instead of ChangeCatalogMemberZoneOwnership.
  2. Pre-check memberZoneInfo.ApexZone.CatalogZoneName; if null, route to Add.
  3. Refresh memberZoneInfo before deciding which API to call.
  4. Guard the UI action so 'change ownership' only appears for zones already in a catalog.

Example fix

// before
manager.ChangeCatalogMemberZoneOwnership(memberZone, newCatalog); // throws if not a member

// after
if (string.IsNullOrEmpty(memberZone.ApexZone.CatalogZoneName))
    manager.AddCatalogMemberZone(newCatalog, memberZone);
else
    manager.ChangeCatalogMemberZoneOwnership(memberZone, newCatalog);
Defensive patterns

Strategy: validation

Validate before calling

if (string.IsNullOrEmpty(memberZone.ApexZone.CatalogZoneName))
    manager.AddCatalogMemberZone(newCatalogZoneName, memberZone); // add, not change
else
    manager.ChangeCatalogMemberZoneOwnership(memberZone, newCatalogZoneName);

Try / catch

catch (DnsServerException ex) when (ex.Message.Contains("not a member of any")) { manager.AddCatalogMemberZone(newCatalogZoneName, memberZone); }

Prevention

When it happens

Trigger: Calling ChangeCatalogMemberZoneOwnership(memberZoneInfo, newCatalogZoneName) for a zone whose ApexZone.CatalogZoneName is null (never added to a catalog, or already removed). Line 1887 detects null and throws at 1888.

Common situations: Calling change-ownership on a freshly created zone that was never added to a catalog. Re-running a migration script after a prior removal. UI offering 'move catalog' for non-member zones.

Related errors


AI-assisted analysis of TechnitiumSoftware/DnsServer@d0484b6c1e (2026-08-13). Data as JSON: /api/errors/620ad2a246673d4a. Report an issue: GitHub.