예제 #1
0
        private void UpdateServerDomain(string serverDomain)
        {
            _soaRecord = new DnsSOARecord(serverDomain, "hostadmin." + serverDomain, 1, 14400, 3600, 604800, 60);
            _nsRecord  = new DnsNSRecord(serverDomain);

            _zoneManager.ServerDomain = serverDomain;
        }
예제 #2
0
        internal PrimaryZone(DnsServer dnsServer, string name, DnsSOARecord soa, DnsNSRecord ns)
            : base(name)
        {
            _dnsServer = dnsServer;

            _entries[DnsResourceRecordType.SOA] = new DnsResourceRecord[] { new DnsResourceRecord(_name, DnsResourceRecordType.SOA, DnsClass.IN, soa.Refresh, soa) };
            _entries[DnsResourceRecordType.NS]  = new DnsResourceRecord[] { new DnsResourceRecord(_name, DnsResourceRecordType.NS, DnsClass.IN, soa.Refresh, ns) };

            _notifyTimer = new Timer(NotifyTimerCallback, null, Timeout.Infinite, Timeout.Infinite);
        }
예제 #3
0
        internal PrimaryZone(DnsServer dnsServer, string name, DnsSOARecord soa, DnsNSRecord ns)
            : base(name)
        {
            _dnsServer = dnsServer;
            _internal  = true;

            _zoneTransfer = AuthZoneTransfer.Deny;
            _notify       = AuthZoneNotify.None;

            _entries[DnsResourceRecordType.SOA] = new DnsResourceRecord[] { new DnsResourceRecord(_name, DnsResourceRecordType.SOA, DnsClass.IN, soa.Refresh, soa) };
            _entries[DnsResourceRecordType.NS]  = new DnsResourceRecord[] { new DnsResourceRecord(_name, DnsResourceRecordType.NS, DnsClass.IN, soa.Refresh, ns) };
        }
예제 #4
0
        private IReadOnlyList <DnsResourceRecord> GetAdditionalRecords(IReadOnlyList <DnsResourceRecord> refRecords, bool serveStale)
        {
            List <DnsResourceRecord> additionalRecords = new List <DnsResourceRecord>();

            foreach (DnsResourceRecord refRecord in refRecords)
            {
                switch (refRecord.Type)
                {
                case DnsResourceRecordType.NS:
                    DnsNSRecord nsRecord = refRecord.RDATA as DnsNSRecord;
                    if (nsRecord is not null)
                    {
                        ResolveAdditionalRecords(refRecord, nsRecord.NameServer, serveStale, additionalRecords);
                    }

                    break;

                case DnsResourceRecordType.MX:
                    DnsMXRecord mxRecord = refRecord.RDATA as DnsMXRecord;
                    if (mxRecord is not null)
                    {
                        ResolveAdditionalRecords(refRecord, mxRecord.Exchange, serveStale, additionalRecords);
                    }

                    break;

                case DnsResourceRecordType.SRV:
                    DnsSRVRecord srvRecord = refRecord.RDATA as DnsSRVRecord;
                    if (srvRecord is not null)
                    {
                        ResolveAdditionalRecords(refRecord, srvRecord.Target, serveStale, additionalRecords);
                    }

                    break;
                }
            }

            return(additionalRecords);
        }
예제 #5
0
        internal AuthZoneInfo CreateInternalPrimaryZone(string domain, DnsSOARecord soaRecord, DnsNSRecord ns)
        {
            AuthZone authZone = new PrimaryZone(_dnsServer, domain, soaRecord, ns);

            if (_root.TryAdd(authZone))
            {
                _totalZones++;
                return(new AuthZoneInfo(authZone));
            }

            return(null);
        }