From 57d9df2aed0c7d673db748cb333d46a6ad0fa90c Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Fri, 30 Aug 2024 08:14:55 +0200 Subject: [PATCH] Issue #2014: code refactor: move ParseSSLSettings into TUser class --- source/usermanager.pas | 87 +++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/source/usermanager.pas b/source/usermanager.pas index bbabe950..1df871ff 100644 --- a/source/usermanager.pas +++ b/source/usermanager.pas @@ -22,6 +22,7 @@ type public constructor Create; function HostRequiresNameResolve: Boolean; + procedure ParseSSLSettings(GrantOrCreate: String); end; PUser = ^TUser; TUserList = TObjectList; @@ -167,7 +168,6 @@ type procedure SetModified(Value: Boolean); property Modified: Boolean read FModified write SetModified; function GetPrivByNode(Node: PVirtualNode): TPrivObj; - procedure ParseSSLSettings(GrantOrCreate: String; User: TUser); public { Public declarations } end; @@ -680,7 +680,7 @@ begin end; - ParseSSLSettings(rxGrant.Match[11], User^); + User.ParseSSLSettings(rxGrant.Match[11]); // WITH .. GRANT OPTION // MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2 @@ -716,11 +716,17 @@ begin CreateUser := ''; try CreateUser := FConnection.GetVar('SHOW CREATE USER '+UserHost); - ParseSSLSettings(CreateUser, User^); + User.ParseSSLSettings(CreateUser); except on E:EDbError do; end; + comboSSL.ItemIndex := User.SSL; + comboSSL.OnChange(comboSSL); + editCipher.Text := User.Cipher; + editIssuer.Text := User.Issuer; + editSubject.Text := User.Subject; + // Generate grant code for column privs by hand for Ptmp in FPrivObjects do begin @@ -788,47 +794,6 @@ begin end; -procedure TUserManagerForm.ParseSSLSettings(GrantOrCreate: String; User: TUser); -var - rx: TRegExpr; - RequireClause: String; -begin - // REQUIRE SSL X509 ISSUER '456' SUBJECT '789' CIPHER '123' NONE - rx := TRegExpr.Create; - rx.ModifierI := True; - rx.Expression := '\sREQUIRE\s+(.+)'; - if rx.Exec(GrantOrCreate) then begin - RequireClause := rx.Match[1]; - User.SSL := 0; - User.Cipher := ''; - User.Issuer := ''; - User.Subject := ''; - rx.Expression := '\bSSL\b'; - if rx.Exec(RequireClause) then - User.SSL := 1; - rx.Expression := '\bX509\b'; - if rx.Exec(RequireClause) then - User.SSL := 2; - rx.Expression := '\bCIPHER\s+''([^'']+)'; - if rx.Exec(RequireClause) then - User.Cipher := rx.Match[1]; - rx.Expression := '\bISSUER\s+''([^'']+)'; - if rx.Exec(RequireClause) then - User.Issuer := rx.Match[1]; - rx.Expression := '\bSUBJECT\s+''([^'']+)'; - if rx.Exec(RequireClause) then - User.Subject := rx.Match[1]; - if IsNotEmpty(User.Cipher) or IsNotEmpty(User.Issuer) or IsNotEmpty(User.Subject) then - User.SSL := 3; - - comboSSL.ItemIndex := User.SSL; - comboSSL.OnChange(comboSSL); - editCipher.Text := User.Cipher; - editIssuer.Text := User.Issuer; - editSubject.Text := User.Subject; - end; -end; - procedure TUserManagerForm.listUsersGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex); var @@ -1571,6 +1536,40 @@ begin rx.Free; end; +procedure TUser.ParseSSLSettings(GrantOrCreate: String); +var + rx: TRegExpr; + RequireClause: String; +begin + // REQUIRE SSL X509 ISSUER '456' SUBJECT '789' CIPHER '123' NONE + rx := TRegExpr.Create; + rx.ModifierI := True; + rx.Expression := '\sREQUIRE\s+(.+)'; + if rx.Exec(GrantOrCreate) then begin + RequireClause := rx.Match[1]; + SSL := 0; + Cipher := ''; + Issuer := ''; + Subject := ''; + rx.Expression := '\bSSL\b'; + if rx.Exec(RequireClause) then + SSL := 1; + rx.Expression := '\bX509\b'; + if rx.Exec(RequireClause) then + SSL := 2; + rx.Expression := '\bCIPHER\s+''([^'']+)'; + if rx.Exec(RequireClause) then + Cipher := rx.Match[1]; + rx.Expression := '\bISSUER\s+''([^'']+)'; + if rx.Exec(RequireClause) then + Issuer := rx.Match[1]; + rx.Expression := '\bSUBJECT\s+''([^'']+)'; + if rx.Exec(RequireClause) then + Subject := rx.Match[1]; + if IsNotEmpty(Cipher) or IsNotEmpty(Issuer) or IsNotEmpty(Subject) then + SSL := 3; + end; +end;