aboutsummaryrefslogtreecommitdiff
path: root/lib/puppet/provider/mailalias
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/provider/mailalias')
-rw-r--r--lib/puppet/provider/mailalias/aliases.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/puppet/provider/mailalias/aliases.rb b/lib/puppet/provider/mailalias/aliases.rb
new file mode 100644
index 0000000..c8e5e3e
--- /dev/null
+++ b/lib/puppet/provider/mailalias/aliases.rb
@@ -0,0 +1,52 @@
+require 'puppet/provider/parsedfile'
+
+Puppet::Type.type(:mailalias).provide(
+ :aliases,
+ parent: Puppet::Provider::ParsedFile,
+ default_target: '/etc/aliases',
+ filetype: :flat,
+) do
+
+ desc 'The alias provider for mailalias.'
+
+ text_line :comment, match: %r{^#}
+ text_line :blank, match: %r{^\s*$}
+
+ record_line :aliases, fields: %w[name recipient], separator: %r{\s*:\s*}, block_eval: :instance do
+ def post_parse(record)
+ if record[:recipient]
+ record[:recipient] = record[:recipient].split(%r{\s*,\s*}).map { |d| d.gsub(%r{^['"]|['"]$}, '') }
+ end
+ record
+ end
+
+ def process(line)
+ ret = {}
+ records = line.split(':', 4)
+ ret[:name] = records[0].strip
+ if records.length == 4 && records[2].strip == 'include'
+ ret[:file] = records[3].strip
+ else
+ records = line.split(':', 2)
+ ret[:recipient] = records[1].strip
+ end
+ ret
+ end
+
+ def to_line(record)
+ if record[:recipient]
+ dest = record[:recipient].map { |d|
+ # Quote aliases that have non-alpha chars
+ if d =~ %r{[^-+\w@.]}
+ '"%s"' % d
+ else
+ d
+ end
+ }.join(',')
+ "#{record[:name]}: #{dest}"
+ elsif record[:file]
+ "#{record[:name]}: :include: #{record[:file]}"
+ end
+ end
+ end
+end