From f2593601e820e5fe909c35decac98db252b0e030 Mon Sep 17 00:00:00 2001 From: Nate Riffe Date: Tue, 19 May 2015 14:29:33 -0500 Subject: [PATCH] Automatic quote and unquote TXT and SPF TXT and SPF record values have to be quoted in the nsupdate script in order to preserve the integrity of the string. --- lib/puppet_bind/provider/nsupdate.rb | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/puppet_bind/provider/nsupdate.rb b/lib/puppet_bind/provider/nsupdate.rb index c37a72d..8d3a7ef 100644 --- a/lib/puppet_bind/provider/nsupdate.rb +++ b/lib/puppet_bind/provider/nsupdate.rb @@ -60,16 +60,28 @@ module PuppetBind def accio(file) rrdata_adds.each do |datum| - file.write "update add #{name}. #{resource[:ttl]} #{rrclass} #{type} #{datum}\n" + file.write "update add #{name}. #{resource[:ttl]} #{rrclass} #{type} #{maybe_quote(type, datum)}\n" end end def destructo(file) rrdata_deletes.each do |datum| - file.write "update delete #{name}. #{ttl} #{rrclass} #{type} #{datum}\n" + file.write "update delete #{name}. #{ttl} #{rrclass} #{type} #{maybe_quote(type, datum)}\n" end end + def quoted_type?(type) + %(TXT SPF).include?(type) + end + + def maybe_quote(type, datum) + quoted_type?(type) ? "\"#{datum}\"" : datum + end + + def maybe_unquote(type, datum) + quoted_type?(type) ? datum.gsub(/^\"(.*)\"$/, '\1') : datum + end + def rrdata_adds newdata - rrdata end @@ -124,7 +136,7 @@ module PuppetBind :ttl => linearray[1], :rrclass => linearray[2], :type => linearray[3], - :rrdata => linearray[4] + :rrdata => maybe_unquote(linearray[3], linearray[4]) } end.select do |record| record[:name] == "#{name}."