Return an empty string for an empty input.

https://tickets.puppetlabs.com/browse/MODULES-1676

This is identical to what PASSWORD('') in MySQL does:

5.6.22-debug-log> CREATE USER 'testpwd'@'localhost' IDENTIFIED BY 'foo';
Query OK, 0 rows affected (0.03 sec)

5.6.22-debug-log> SELECT User,Host,Password FROM mysql.user WHERE
User='testpwd';
+---------+-----------+-------------------------------------------+
| User    | Host      | Password                                  |
+---------+-----------+-------------------------------------------+
| testpwd | localhost | *F3A2A51A9B0F2BE2468926B4132313728C250DBF |
+---------+-----------+-------------------------------------------+
1 row in set (0.01 sec)

5.6.22-debug-log> SET PASSWORD FOR 'testpwd'@'localhost' = PASSWORD('');
Query OK, 0 rows affected (0.00 sec)

5.6.22-debug-log> SELECT User,Host,Password FROM mysql.user WHERE
User='testpwd';
+---------+-----------+----------+
| User    | Host      | Password |
+---------+-----------+----------+
| testpwd | localhost |          |
+---------+-----------+----------+
1 row in set (0.00 sec)
This commit is contained in:
Daniël van Eeden 2015-01-25 12:11:26 +01:00
parent 0623654438
commit 279c13b5e3
3 changed files with 7 additions and 1 deletions

View file

@ -10,6 +10,7 @@ module Puppet::Parser::Functions
raise(Puppet::ParseError, 'mysql_password(): Wrong number of arguments ' +
"given (#{args.size} for 1)") if args.size != 1
return '' if args[0].empty?
'*' + Digest::SHA1.hexdigest(Digest::SHA1.digest(args[0])).upcase
end
end

View file

@ -37,7 +37,7 @@ Puppet::Type.newtype(:mysql_user) do
newproperty(:password_hash) do
desc 'The password hash of the user. Use mysql_password() for creating such a hash.'
newvalue(/\w+/)
newvalue(/\w*/)
end
newproperty(:max_user_connections) do

View file

@ -23,5 +23,10 @@ describe 'the mysql_password function' do
result = scope.function_mysql_password(%w(password))
expect(result).to(eq('*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19'))
end
it 'should convert an empty password into a empty string' do
result = scope.function_mysql_password([""])
expect(result).to(eq(''))
end
end