openldap_password.rb 985 B

12345678910111213141516171819202122232425262728293031
  1. require 'base64'
  2. Puppet::Functions.create_function(:openldap_password) do
  3. dispatch :passwd do
  4. param 'String', :secret
  5. param 'String', :scheme
  6. end
  7. def passwd(secret, scheme = '{SSHA}')
  8. case scheme[%r{([A-Z,0-9]+)}, 1]
  9. when 'CRYPT'
  10. salt = call_function('fqdn_rand_string', 2)
  11. password = '{CRYPT}' + secret.crypt(salt)
  12. when 'MD5'
  13. password = '{MD5}' + Digest::MD5.hexdigest(secret)
  14. when 'SHA'
  15. password = '{SHA}' + Digest::SHA1.hexdigest(secret)
  16. when 'SMD5'
  17. salt = call_function('fqdn_rand_string', 8)
  18. salted_hash = "#{Digest::MD5.digest(secret + salt)}#{salt}"
  19. password = '{SMD5}' + [salted_hash].pack('m').delete("\n")
  20. when 'SSHA'
  21. salt = call_function('fqdn_rand_string', 8)
  22. password = '{SSHA}' + Base64.encode64("#{Digest::SHA1.digest(secret + salt)}#{salt}").chomp
  23. else
  24. raise(Puppet::ParseError, "openldap_password(): Unrecognized scheme #{scheme}")
  25. end
  26. password
  27. end
  28. end