From 1fee4f0f85ce349ce58218e70f1f39d915c6733d Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Mon, 18 Aug 2014 16:57:44 +0400 Subject: [PATCH] MsDNS2012 fix --- .../DnsCommands.cs | 58 ++++++++++++++++--- .../MsDNS.cs | 2 +- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS2012/DnsCommands.cs b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS2012/DnsCommands.cs index b0914e21..531895a9 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS2012/DnsCommands.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS2012/DnsCommands.cs @@ -306,17 +306,61 @@ namespace WebsitePanel.Providers.DNS ps.RunPipeline( cmd ); } - public static void Remove_DnsServerResourceRecord( this PowerShellHelper ps, string zoneName, string Name, string type, string recordData ) + public static void Remove_DnsServerResourceRecord( this PowerShellHelper ps, string zoneName, DnsRecord record) { + string type; + if (!RecordTypes.rrTypeFromRecord.TryGetValue(record.RecordType, out type)) + throw new Exception( "Unknown record type" ); + + string Name = record.RecordName; if (String.IsNullOrEmpty(Name)) Name = "@"; - var cmd = new Command( "Remove-DnsServerResourceRecord" ); - cmd.addParam( "ZoneName", zoneName ); - cmd.addParam( "Name", Name ); - cmd.addParam( "RRType", type ); + var cmd = new Command("Get-DnsServerResourceRecord"); + cmd.addParam("ZoneName", zoneName); + cmd.addParam("Name", Name); + cmd.addParam("RRType", type); + Collection resourceRecords = ps.RunPipeline(cmd); - if (!String.IsNullOrEmpty(recordData)) - cmd.addParam("RecordData", recordData); + object inputObject = null; + foreach (PSObject resourceRecord in resourceRecords) + { + DnsRecord dnsResourceRecord = resourceRecord.asDnsRecord(zoneName); + + bool found = false; + + switch(dnsResourceRecord.RecordType) + { + case DnsRecordType.A: + case DnsRecordType.AAAA: + case DnsRecordType.CNAME: + case DnsRecordType.NS: + case DnsRecordType.TXT: + found = dnsResourceRecord.RecordData == record.RecordData; + break; + case DnsRecordType.SOA: + found = true; + break; + case DnsRecordType.MX: + found = (dnsResourceRecord.RecordData == record.RecordData) && (dnsResourceRecord.MxPriority == record.MxPriority); + break; + case DnsRecordType.SRV: + found = (dnsResourceRecord.RecordData == record.RecordData) + &&(dnsResourceRecord.SrvPriority == record.SrvPriority) + &&(dnsResourceRecord.SrvWeight == record.SrvWeight) + &&(dnsResourceRecord.SrvPort == record.SrvPort); + break; + } + + if (found) + { + inputObject = resourceRecord; + break; + } + } + + cmd = new Command( "Remove-DnsServerResourceRecord" ); + cmd.addParam( "ZoneName", zoneName ); + cmd.addParam("InputObject", inputObject); cmd.addParam( "Force" ); ps.RunPipeline( cmd ); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS2012/MsDNS.cs b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS2012/MsDNS.cs index 6cab0d99..27f99a07 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS2012/MsDNS.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS2012/MsDNS.cs @@ -172,7 +172,7 @@ namespace WebsitePanel.Providers.DNS string rrType; if( !RecordTypes.rrTypeFromRecord.TryGetValue( record.RecordType, out rrType ) ) throw new Exception( "Unknown record type" ); - ps.Remove_DnsServerResourceRecord( zoneName, record.RecordName, rrType, record.RecordData ); + ps.Remove_DnsServerResourceRecord( zoneName, record); } catch( Exception ex ) {