TechnitiumSoftware/DnsServer · error · ArgumentException

The Notify option is invalid for {0} zones: {1}

Error message

The Notify option is invalid for {0} zones: {1}

What it means

Thrown by the ForwarderZone.Notify setter when value is AuthZoneNotify.ZoneNameServers (1) or AuthZoneNotify.BothZoneAndSpecifiedNameServers (3). These NOTIFY modes push change notifications to the zone's authoritative name servers (its NS records), but a Conditional Forwarder is non-authoritative and has no NS set, so there is nothing to notify. Valid notify options for a forwarder zone are None(0), SpecifiedNameServers(2), and (only for CatalogZone) SeparateNameServersForCatalogAndMemberZones(4). ArgumentException names 'Notify'.

Source

Thrown at DnsServerCore/Dns/Zones/ForwarderZone.cs:341

                    case AuthZoneTransfer.AllowOnlyZoneNameServers:
                    case AuthZoneTransfer.AllowZoneNameServersAndUseSpecifiedNetworkACL:
                        throw new ArgumentException("The Zone Transfer option is invalid for " + GetZoneTypeName() + " zones: " + value.ToString(), nameof(ZoneTransfer));
                }

                base.ZoneTransfer = value;
            }
        }

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

                    case AuthZoneNotify.SeparateNameServersForCatalogAndMemberZones:
                        if (this is CatalogZone)
                            break;

                        throw new ArgumentException("The Notify option is invalid for " + GetZoneTypeName() + " zones: " + value.ToString(), nameof(Notify));
                }

                base.Notify = value;
            }
        }

        public override AuthZoneUpdate Update
        {
            get { return base.Update; }
            set
            {
                switch (value)

View on GitHub (pinned to d0484b6c1e)

Solutions

  1. For a ForwarderZone use Notify = None, SpecifiedNameServers, or (if catalog) SeparateNameServersForCatalogAndMemberZones.
  2. When you need to notify explicit secondaries only, configure them as SpecifiedNameServers.
  3. Drive the available Notify enum values from the zone type in your settings UI.

Example fix

// before
zone.Notify = AuthZoneNotify.BothZoneAndSpecifiedNameServers;

// after
zone.Notify = AuthZoneNotify.SpecifiedNameServers; // forwarder: notify only the list you provide
Defensive patterns

Strategy: type-guard

Validate before calling

var valid = new[] { AuthZoneNotify.None, AuthZoneNotify.SpecifiedNameServers };
if (zone is CatalogZone) valid = valid.Append(AuthZoneNotify.SeparateNameServersForCatalogAndMemberZones).ToArray();
if (!valid.Contains(value)) throw new ArgumentException($"Notify {value} not valid for this zone.");
zone.Notify = value;

Type guard

static bool IsValidForwarderNotify(AuthZoneNotify v, Zone z) => v == AuthZoneNotify.None || v == AuthZoneNotify.SpecifiedNameServers || (v == AuthZoneNotify.SeparateNameServersForCatalogAndMemberZones && z is CatalogZone);

Try / catch

try { zone.Notify = value; }
catch (ArgumentException) { zone.Notify = AuthZoneNotify.SpecifiedNameServers; }

Prevention

When it happens

Trigger: Assigning zone.Notify = AuthZoneNotify.ZoneNameServers or AuthZoneNotify.BothZoneAndSpecifiedNameServers on a ForwarderZone via the zone settings API or a config batch.

Common situations: Defaulting Notify to 'BothZoneAndSpecifiedNameServers' across all zones during provisioning; copying notify settings from a primary zone; UI not filtering notify options by zone type.

Related errors


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