//partially tested public void UpdateSoaRecord(string zoneName, string host, string primaryNsServer, string primaryPerson) { string recordId = string.Empty; string recordContent = string.Empty; try { MySqlParameter ZoneName = new MySqlParameter("?Name", MySqlDbType.VarString); ZoneName.Value = zoneName; MySqlParameter RecordType = new MySqlParameter("?Type", MySqlDbType.VarString); RecordType.Value = ConvertDnsRecordTypeToString(DnsRecordType.SOA); IDataReader reader = ExecuteReader( "SELECT id, content FROM records WHERE name = ?Name AND type = ?Type LIMIT 1" , ZoneName , RecordType ); if (reader.Read()) { recordId = reader["id"].ToString(); recordContent = reader["content"].ToString(); } reader.Close(); if (string.IsNullOrEmpty(recordId)) { throw new ArgumentOutOfRangeException(string.Format("Not SOA record for Power DNS zone '{0}'", zoneName)); } PowerDnsSOARecordData soaData = PowerDnsSOARecordData.FromString(recordContent); soaData.PrimaryNameServer = primaryNsServer; soaData.HostMaster = primaryPerson; soaData.Refresh = SOARefreshInterval; soaData.Retry = SOARetryDelay; soaData.DefaultTTL = SOAMinimumTTL; soaData.Expire = SOAExpireLimit; soaData.IncrementSerial( GetDomainNotifiedSerial(zoneName) ); UpdateRecord(recordId, soaData.ToString()); } catch (Exception ex) { Log.WriteError(String.Format("Error updating SOA record for '{0}' Power DNS zone", zoneName), ex); } }
/// <summary> /// Updates SOA record of the corresponding zone /// </summary> /// <param name="zoneName">Domain name in Power DNS database</param> protected void PDNSUpdateSoaRecord(string zoneName) { try { string domainId = GetDomainId(zoneName); if (string.IsNullOrEmpty(domainId)) { throw new ArgumentOutOfRangeException(string.Format("Power DNS zone '{0}' does not exist.", domainId)); } MySqlParameter DomainId = new MySqlParameter("?DomainId", MySqlDbType.Int32); DomainId.Value = domainId; IDataReader reader = ExecuteReader( "SELECT id, content FROM records WHERE domain_id = ?DomainId AND type='SOA' LIMIT 1" , DomainId ); string recordId = string.Empty, recordContent = string.Empty; if (reader.Read()) { recordId = reader["id"].ToString(); recordContent = reader["content"].ToString(); } reader.Close(); if (string.IsNullOrEmpty(recordId)) { throw new ArgumentOutOfRangeException(string.Format("SOA record for Power DNS zone '{0}' not found", zoneName)); } PowerDnsSOARecordData data = PowerDnsSOARecordData.FromString(recordContent); data.Refresh = SOARefreshInterval; data.Retry = SOARetryDelay; data.DefaultTTL = SOAMinimumTTL; data.Expire = SOAExpireLimit; data.IncrementSerial(GetDomainNotifiedSerial(zoneName)); UpdateRecord(recordId, data.ToString()); } catch (Exception ex) { Log.WriteError(String.Format("Error updating SOA record for '{0}' Power DNS zone", zoneName), ex); } }
/// <summary> /// Creates <see cref="PowerDnsSOARecordData"/> class instance from string. /// </summary> /// <param name="content">Record content from Power DNS database.</param> /// <returns>Instance of <see cref="PowerDnsSOARecordData"/> class.</returns> public static PowerDnsSOARecordData FromString(string content) { PowerDnsSOARecordData data = new PowerDnsSOARecordData(); string[] contentParts = content .Trim() .Split(' '); for (int i = 0; i < contentParts.Length; i++) { data.UpdateProperty(i, contentParts[i]); } return(data); }
/// <summary> /// Adds zone in Power DNS domains table and creates a SOA record for it. /// </summary> /// <param name="zoneName">Domain name in Power DNS database.</param> /// <param name="zoneType"></param> /// <param name="nameServers"></param> protected void PDNSAddZone(string zoneName, string zoneType, string[] nameServers) { string domainId = AddDomainAndReturnDomainId(zoneName, zoneType); if (string.IsNullOrEmpty(domainId)) { throw new ArgumentOutOfRangeException(string.Format("Unable to add Power DNS zone '{0}'.", zoneName)); } //create SOA record PowerDnsSOARecordData data = new PowerDnsSOARecordData(); data.DefaultTTL = SOAMinimumTTL; data.Expire = SOAExpireLimit; data.Refresh = SOARefreshInterval; data.Retry = SOARetryDelay; data.Serial = DateTime.Now.ToString("yyyyMMdd") + "01"; //add SOA record AddRecord( domainId , zoneName , data.ToString() , ConvertDnsRecordTypeToString(DnsRecordType.SOA) , GetDefaultRecordTTL(DnsRecordType.SOA) , "0" ); //add NS records for secondary servers foreach (string server in nameServers) { AddRecord( domainId , zoneName , server , ConvertDnsRecordTypeToString(DnsRecordType.NS) , GetDefaultRecordTTL(DnsRecordType.NS) , "0" ); } }
/// <summary> /// Creates <see cref="PowerDnsSOARecordData"/> class instance from string. /// </summary> /// <param name="content">Record content from Power DNS database.</param> /// <returns>Instance of <see cref="PowerDnsSOARecordData"/> class.</returns> public static PowerDnsSOARecordData FromString(string content) { PowerDnsSOARecordData data = new PowerDnsSOARecordData(); string[] contentParts = content .Trim() .Split(' '); for (int i = 0; i < contentParts.Length; i++) { data.UpdateProperty(i, contentParts[i]); } return data; }
/// <summary> /// Adds zone in Power DNS domains table and creates a SOA record for it. /// </summary> /// <param name="zoneName">Domain name in Power DNS database.</param> /// <param name="zoneType"></param> /// <param name="nameServers"></param> protected void PDNSAddZone(string zoneName, string zoneType, string[] nameServers) { string domainId = AddDomainAndReturnDomainId(zoneName, zoneType); if (string.IsNullOrEmpty(domainId)) throw new ArgumentOutOfRangeException(string.Format("Unable to add Power DNS zone '{0}'.", zoneName)); //create SOA record PowerDnsSOARecordData data = new PowerDnsSOARecordData(); data.DefaultTTL = SOAMinimumTTL; data.Expire = SOAExpireLimit; data.Refresh = SOARefreshInterval; data.Retry = SOARetryDelay; data.Serial = DateTime.Now.ToString("yyyyMMdd") + "01"; //add SOA record AddRecord( domainId , zoneName , data.ToString() , ConvertDnsRecordTypeToString(DnsRecordType.SOA) , GetDefaultRecordTTL(DnsRecordType.SOA) , "0" ); //add NS records for secondary servers foreach (string server in nameServers) { AddRecord( domainId , zoneName , server , ConvertDnsRecordTypeToString(DnsRecordType.NS) , GetDefaultRecordTTL(DnsRecordType.NS) , "0" ); } }