TechnitiumSoftware/DnsServer · error · ArgumentException

The Notify option is invalid for {zoneType} zones: {value}

Error message

The Notify option is invalid for {zoneType} zones: {value}

What it means

Thrown by the PrimaryZone.Notify setter when value is AuthZoneNotify.SeparateNameServersForCatalogAndMemberZones. That option is meaningful only for catalog zones (it splits notify targets between catalog and member zones); a plain PrimaryZone has no member-zone semantics, so assigning it is rejected with ArgumentException naming the offending value.

Source

Thrown at DnsServerCore/Dns/Zones/PrimaryZone.cs:2812

                base.Disabled = value; //set value early to be able to use it for notify

                if (value)
                    DisableNotifyTimer();
                else
                    TriggerNotify();
            }
        }

        public override AuthZoneNotify Notify
        {
            get { return base.Notify; }
            set
            {
                switch (value)
                {
                    case AuthZoneNotify.SeparateNameServersForCatalogAndMemberZones:
                        throw new ArgumentException("The Notify option is invalid for " + GetZoneTypeName() + " zones: " + value.ToString(), nameof(Notify));
                }

                base.Notify = value;
            }
        }

        public IReadOnlyCollection<DnssecPrivateKey> DnssecPrivateKeys
        {
            get
            {
                if (_dnssecPrivateKeys is null)
                    return null;

                lock (_dnssecPrivateKeys)
                {
                    return _dnssecPrivateKeys.Values;
                }
            }

View on GitHub (pinned to d0484b6c1e)

Solutions

  1. Use a supported Notify value for PrimaryZone: None, ZoneNameServers, SpecifiedNameServers, or BothZoneAndSpecifiedNameServers.
  2. Keep catalog-specific options out of primary-zone config objects.
  3. Validate the Notify enum against zone type before assigning.

Example fix

// before
zone.Notify = AuthZoneNotify.SeparateNameServersForCatalogAndMemberZones;

// after
zone.Notify = AuthZoneNotify.BothZoneAndSpecifiedNameServers;
Defensive patterns

Strategy: type-guard

Validate before calling

static readonly HashSet<AuthZoneNotify> PrimaryValid = new()
{
    AuthZoneNotify.None, AuthZoneNotify.ZoneNameServers,
    AuthZoneNotify.SpecifiedNameServers, AuthZoneNotify.BothZoneAndSpecifiedNameServers
};
if (PrimaryValid.Contains(value)) zone.Notify = value;

Type guard

static bool IsValidForPrimary(AuthZoneNotify v) =>
    v != AuthZoneNotify.SeparateNameServersForCatalogAndMemberZones;

Try / catch

null

Prevention

When it happens

Trigger: Setting zone.Notify = AuthZoneNotify.SeparateNameServersForCatalogAndMemberZones on a PrimaryZone (non-catalog).

Common situations: Reusing a zone-options object across zone types; copying config from a catalog zone to a primary; deserializing a settings file that contained the catalog-only value.

Related errors


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