diff options
author | James Turnbull <james@lovedthanlost.net> | 2008-08-21 02:26:25 +1000 |
---|---|---|
committer | James Turnbull <james@lovedthanlost.net> | 2008-08-26 18:00:50 +1000 |
commit | b50e718490abe41f09e16e1edc0d8de93aac8bfe (patch) | |
tree | 95aa085a64a506bc023614bf547087dc3a2498cb /lib/puppet/parser/functions/generate.rb | |
parent | 5fb50918ad355116ba85bfe7304baf61a7c8da22 (diff) | |
download | puppet-b50e718490abe41f09e16e1edc0d8de93aac8bfe.tar.gz puppet-b50e718490abe41f09e16e1edc0d8de93aac8bfe.tar.xz puppet-b50e718490abe41f09e16e1edc0d8de93aac8bfe.zip |
Fixed #1488 - Moved individual functions out of functions.rb into
the lib/puppet/parser/functions directory. New functions should be
created in this directory.
Diffstat (limited to 'lib/puppet/parser/functions/generate.rb')
-rw-r--r-- | lib/puppet/parser/functions/generate.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/generate.rb b/lib/puppet/parser/functions/generate.rb new file mode 100644 index 000000000..1be9016ed --- /dev/null +++ b/lib/puppet/parser/functions/generate.rb @@ -0,0 +1,35 @@ +# Runs an external command and returns the results +Puppet::Parser::Functions::newfunction(:generate, :type => :rvalue, + :doc => "Calls an external command and returns the results of the + command. Any arguments are passed to the external command as + arguments. If the generator does not exit with return code of 0, + the generator is considered to have failed and a parse error is + thrown. Generators can only have file separators, alphanumerics, dashes, + and periods in them. This function will attempt to protect you from + malicious generator calls (e.g., those with '..' in them), but it can + never be entirely safe. No subshell is used to execute + generators, so all shell metacharacters are passed directly to + the generator.") do |args| + + unless args[0] =~ /^#{File::SEPARATOR}/ + raise Puppet::ParseError, "Generators must be fully qualified" + end + + unless args[0] =~ /^[-#{File::SEPARATOR}\w.]+$/ + raise Puppet::ParseError, + "Generators can only contain alphanumerics, file separators, and dashes" + end + + if args[0] =~ /\.\./ + raise Puppet::ParseError, + "Can not use generators with '..' in them." + end + + begin + output = Puppet::Util.execute(args) + rescue Puppet::ExecutionFailure => detail + raise Puppet::ParseError, "Failed to execute generator %s: %s" % + [args[0], detail] + end + output +end |