Overtake username and hashed password from old user when cloning a user. See http://www.heidisql.com/forum.php?t=8943

This commit is contained in:
Ansgar Becker
2014-03-30 05:31:34 +00:00
parent 370b4cf212
commit 9fc3c2a3bc

View File

@@ -552,6 +552,12 @@ begin
editPassword.TextHint := FConnection.UnescapeString(rxGrant.Match[10]);
// Set password for changed user, to silence the error message about invalid length
User.Password := editPassword.TextHint;
end else begin
// Set password for cloned user
User.Password := FConnection.UnescapeString(rxGrant.Match[10]);
editPassword.Text := User.Password;
editRepeatPassword.Text := User.Password;
editPassword.Modified := True;
end;
end else if (rxGrant.Match[6] = '*') then begin
P.DBObj.NodeType := lntDb;
@@ -1011,7 +1017,7 @@ var
User: TUser;
OldUser, NodeUser: PUser;
Node: PVirtualNode;
NewHost: String;
NewHost, NewPassword, NewUsername: String;
begin
// Create new or clone existing user
if Sender = btnCloneUser then begin
@@ -1020,16 +1026,21 @@ begin
CloneGrants.Add(P.GrantCode);
OldUser := listUsers.GetNodeData(listUsers.FocusedNode);
NewHost := OldUser.Host;
NewUsername := OldUser.Username;
NewPassword := OldUser.Password;
end else begin
NewHost := 'localhost';
NewUsername := _('Unnamed');
NewPassword := '';
end;
// Try to unfocus current user which triggers saving modifications.
listUsers.FocusedNode := nil;
if Assigned(listUsers.FocusedNode) then
Exit;
User := TUser.Create;
User.Username := _('Unnamed');
User.Username := NewUsername;
User.Host := NewHost;
User.Password := NewPassword;
FUsers.Add(User);
FAdded := True;
InvalidateVT(listUsers, VTREE_NOTLOADED, True);
@@ -1154,8 +1165,13 @@ begin
PasswordSet := False;
if FAdded and (FConnection.ServerVersionInt >= 50002) then begin
Create := 'CREATE USER '+UserHost;
if editPassword.Modified then
Create := Create + ' IDENTIFIED BY '+esc(editPassword.Text);
if editPassword.Modified then begin
// Add "PASSWORD" clause when it's a hash already
if (Copy(editPassword.Text, 1, 1) = '*') and (Length(editPassword.Text) = 41) then
Create := Create + ' IDENTIFIED BY PASSWORD '+esc(editPassword.Text)
else
Create := Create + ' IDENTIFIED BY '+esc(editPassword.Text);
end;
FConnection.Query(Create);
PasswordSet := True;
end;