summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lathrop <paul@tertiusfamily.net>2009-01-15 09:35:47 -0800
committerJames Turnbull <james@lovedthanlost.net>2009-01-22 10:45:22 +1100
commit234a035b97287d8910ca00a58b70a06775818693 (patch)
treecc835eb913c05aed05048a761f2233f47667e9f1
parentfb8f8cd14f2a4958505f27910ad1d2a368bb0967 (diff)
downloadpuppet-234a035b97287d8910ca00a58b70a06775818693.tar.gz
puppet-234a035b97287d8910ca00a58b70a06775818693.tar.xz
puppet-234a035b97287d8910ca00a58b70a06775818693.zip
Fix #1560
Adds an rspec test which demonstrates #1560 and a custom 'process' method for the aliases provider to fix it. The default processing uses split() to break the line into records on the separator, which breaks if records can contain the separator. The custom method I've added uses a 'limited' split() to break the line on the first separator only. This commit fixes #1560 Signed-off-by: Paul Lathrop <paul@tertiusfamily.net>
-rwxr-xr-xlib/puppet/provider/mailalias/aliases.rb8
-rwxr-xr-xspec/integration/provider/mailalias/aliases.rb25
-rw-r--r--test/data/providers/mailalias/aliases/test128
3 files changed, 61 insertions, 0 deletions
diff --git a/lib/puppet/provider/mailalias/aliases.rb b/lib/puppet/provider/mailalias/aliases.rb
index 8b5c45617..f9217123e 100755
--- a/lib/puppet/provider/mailalias/aliases.rb
+++ b/lib/puppet/provider/mailalias/aliases.rb
@@ -17,6 +17,14 @@ Puppet::Type.type(:mailalias).provide(:aliases,
record
end
+ def process(line)
+ ret = {}
+ records = line.split(':',2)
+ ret[:name] = records[0].strip()
+ ret[:recipient] = records[1].strip()
+ ret
+ end
+
def to_line(record)
dest = record[:recipient].collect do |d|
# Quote aliases that have non-alpha chars
diff --git a/spec/integration/provider/mailalias/aliases.rb b/spec/integration/provider/mailalias/aliases.rb
new file mode 100755
index 000000000..3f28239a6
--- /dev/null
+++ b/spec/integration/provider/mailalias/aliases.rb
@@ -0,0 +1,25 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+require 'puppettest'
+require 'puppettest/support/utils'
+require 'puppettest/fileparsing'
+
+provider_class = Puppet::Type.type(:mailalias).provider(:aliases)
+
+describe provider_class do
+ include PuppetTest
+ include PuppetTest::FileParsing
+
+ before :each do
+ @provider = provider_class
+ end
+
+ # #1560
+ it "should be able to parse each example" do
+ fakedata("data/providers/mailalias/aliases").each { |file|
+ fakedataparse(file)
+ }
+ end
+end
diff --git a/test/data/providers/mailalias/aliases/test1 b/test/data/providers/mailalias/aliases/test1
new file mode 100644
index 000000000..20f90989f
--- /dev/null
+++ b/test/data/providers/mailalias/aliases/test1
@@ -0,0 +1,28 @@
+# Basic system aliases -- these MUST be present
+MAILER-DAEMON: postmaster
+postmaster: root
+
+# General redirections for pseudo accounts
+bin: root
+daemon: root
+named: root
+nobody: root
+uucp: root
+www: root
+ftp-bugs: root
+postfix: root
+
+# Put your local aliases here.
+
+# Well-known aliases
+manager: root
+dumper: root
+operator: root
+abuse: postmaster
+
+# trap decode to catch security attacks
+decode: root
+
+# Other tests
+anothertest: "|/path/to/rt-mailgate --queue 'another test' --action correspond --url http://my.com/"
+test: "|/path/to/rt-mailgate --queue 'test' --action correspond --url http://my.com/"