Community contribution to bypass variable interpolation. Before I merge, I have a few concerns: 1. We're making a specific exemption for dbpassword. 2. Do we have a case to do this for other items? 3. Should we look for more general ways to handle this? 4. Should we provide a way to escape variable interpolation instead of just turning it off wholesale for certain settings?
Thoughts? Objections? Cheers, Jeff On Sat, Apr 7, 2012 at 4:15 PM, <[email protected]> wrote: > Please review pull request #640: (#13679) Skip variable interpolation on > dbpassword setting <https://github.com/puppetlabs/puppet/pull/640> opened > by (stschulte) > > Description: > > when puppet reads /etc/puppet/puppet.conf it does variable interpolation > when receiving a setting. The convert method that is involved here does > not allow for escaping/quoting or any other mechanism to stop variable > interpolation. While most settings do not allow a dollar-sign anyways > the dbpassword may legally include one. > > I'm not sure if we need a general escaping mechanism or if we should just > skip value interpolation for different settings. I'm afraid that > introducing quoting and esacping in /etc/puppet.conf would both make the > parser and the file itself needlessly complex for a single usecase. In my > opinion dbpassword is the only setting that may legally include a dollar > sign and I cannot come up with a usecase where you do want to have value > interpolation on dbpassword. So the fix attached in the branch field just > skips validation on dbpassword. > > But I'm happy to hear different opinions. > > > - Opened: Sat Apr 07 23:06:04 UTC 2012 > - Based on: puppetlabs:2.7.x (8ceaaf002a5562b6bd78541a25762e1e7740f933) > - Requested merge: stschulte:ticket/2.7.x/13679 > (045be1c96692a5a4cc5420091932ce0a18329568) > > Diff follows: > > diff --git a/lib/puppet/util/settings.rb b/lib/puppet/util/settings.rb > index e57cc8c..3d1c804 100644 > --- a/lib/puppet/util/settings.rb > +++ b/lib/puppet/util/settings.rb > @@ -687,7 +687,9 @@ def value(param, environment = nil) > end > > # Convert it if necessary > - val = convert(val, environment) > + unless param == :dbpassword > + val = convert(val, environment) > + end > > # And cache it > @cache[environment||"none"][param] = val > diff --git a/spec/unit/util/settings_spec.rb b/spec/unit/util/settings_spec.rb > index 7af43c0..9d66f99 100755 > --- a/spec/unit/util/settings_spec.rb > +++ b/spec/unit/util/settings_spec.rb > @@ -235,7 +235,7 @@ > describe "when returning values" do > before do > @settings = Puppet::Util::Settings.new > - @settings.setdefaults :section, :config => ["/my/file", "eh"], :one => > ["ONE", "a"], :two => ["$one TWO", "b"], :three => ["$one $two THREE", "c"], > :four => ["$two $three FOUR", "d"] > + @settings.setdefaults :section, :config => ["/my/file", "eh"], :one => > ["ONE", "a"], :two => ["$one TWO", "b"], :three => ["$one $two THREE", "c"], > :four => ["$two $three FOUR", "d"], :dbpassword => ["puppet", "e" ] > FileTest.stubs(:exist?).returns true > end > > @@ -277,6 +277,11 @@ > @settings[:two].should == "one TWO" > end > > + it "should not interpolate dbpassword" do > + @settings[:dbpassword] = "my$one" > + @settings[:dbpassword].should == "my$one" > + end > + > it "should not cache values such that information from one environment > is returned for another environment" do > text = "[env1]\none = oneval\n[env2]\none = twoval\n" > @settings.stubs(:read_file).returns(text) > > > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Developers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/puppet-dev?hl=en. > -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
