diff options
author | varac <varacanero@zeromail.org> | 2013-03-10 15:19:30 +0100 |
---|---|---|
committer | varac <varacanero@zeromail.org> | 2013-03-10 15:19:30 +0100 |
commit | 095a5a01d5a7c7e3d95a71846220545080f7581c (patch) | |
tree | 29eb1e8b0a37d4576b1dd151c15c27abeb1f2bbe /lib | |
parent | 1e760dc257b20b300615070a7b910e04b2e6cdbc (diff) |
Added str2sha1_and_salt.rb function for couchdb passwords.
This funcion converts a string to an array containing the salted SHA1
password hash in the first field, and the salt itself in second field
of the returned array.
This combination is used i.e. for couchdb passwords.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/parser/functions/str2sha1_and_salt.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/str2sha1_and_salt.rb b/lib/puppet/parser/functions/str2sha1_and_salt.rb new file mode 100644 index 0000000..9ec382d --- /dev/null +++ b/lib/puppet/parser/functions/str2sha1_and_salt.rb @@ -0,0 +1,36 @@ +# +# str2saltedsha1.rb +# + +module Puppet::Parser::Functions + newfunction(:str2sha1_and_salt, :type => :rvalue, :doc => <<-EOS +This converts a string to an array containing the salted SHA1 password hash in +the first field, and the salt itself in second field of the returned array. +This combination is used i.e. for couchdb passwords. + EOS + ) do |arguments| + require 'digest/sha1' + + raise(Puppet::ParseError, "str2saltedsha1(): Wrong number of arguments " + + "passed (#{arguments.size} but we require 1)") if arguments.size != 1 + + password = arguments[0] + + unless password.is_a?(String) + raise(Puppet::ParseError, 'str2saltedsha1(): Requires a ' + + "String argument, you passed: #{password.class}") + end + + seedint = rand(2**31 - 1) + seedstring = Array(seedint).pack("L") + salt = Digest::MD5.hexdigest(seedstring) + saltedpass = Digest::SHA1.hexdigest(password + salt) + + array = Array.new + array << saltedpass + array << salt + return array + end +end + +# vim: set ts=2 sw=2 et : |