Ensure we pass nil/null for empty SSL parameters, where I thought PAnsiChar('') returns nil which is not the case obviously. Tries to fix issue #2336.

This commit is contained in:
Ansgar Becker
2011-04-10 11:42:42 +00:00
parent 41bff877ce
commit af2df77704

View File

@ -947,6 +947,8 @@ var
CurCharset: String; CurCharset: String;
StartupInfo: TStartupInfo; StartupInfo: TStartupInfo;
ExitCode: LongWord; ExitCode: LongWord;
sslca, sslkey, sslcert: PAnsiChar;
DoSSL, SSLsettingsComplete: Boolean;
begin begin
// Init library // Init library
if libmysql_handle = 0 then begin if libmysql_handle = 0 then begin
@ -995,36 +997,28 @@ begin
FinalPort := FParameters.Port; FinalPort := FParameters.Port;
case FParameters.NetType of case FParameters.NetType of
ntMySQL_TCPIP: begin ntMySQL_TCPIP: begin
if ( sslca := nil;
IsNotEmpty(FParameters.SSLCACertificate) sslkey := nil;
and IsEmpty(FParameters.SSLPrivateKey) sslcert := nil;
and IsEmpty(FParameters.SSLCertificate) if FParameters.SSLCACertificate <> '' then
) sslca := PAnsiChar(AnsiString(FParameters.SSLCACertificate));
or if FParameters.SSLPrivateKey <> '' then
( sslkey := PAnsiChar(AnsiString(FParameters.SSLPrivateKey));
IsNotEmpty(FParameters.SSLCACertificate) if FParameters.SSLCertificate <> '' then
and IsNotEmpty(FParameters.SSLPrivateKey) sslcert := PAnsiChar(AnsiString(FParameters.SSLCertificate));
and IsNotEmpty(FParameters.SSLCertificate) DoSSL := (sslca<>nil) or (sslkey<>nil) or (sslcert<>nil);
) SSLsettingsComplete := ((sslca<>nil) and (sslkey<>nil) and (sslcert<>nil))
then or ((sslca<>nil) and (sslkey=nil) and (sslcert=nil));
begin if DoSSL then begin
FParameters.Options := FParameters.Options + [opSSL]; if not SSLsettingsComplete then
{ TODO : Use Cipher and CAPath parameters } raise EDatabaseError.Create('SSL settings incomplete. Please set either CA certificate or all three SSL parameters.')
mysql_ssl_set( else if SSLsettingsComplete then begin
FHandle, FParameters.Options := FParameters.Options + [opSSL];
PansiChar(AnsiString(FParameters.SSLPrivateKey)), { TODO : Use Cipher and CAPath parameters }
PansiChar(AnsiString(FParameters.SSLCertificate)), showmessage(inttostr(integer(sslkey=nil)));
PansiChar(AnsiString(FParameters.SSLCACertificate)), mysql_ssl_set(FHandle, sslkey, sslcert, sslca, nil, nil);
{PansiChar(AnsiString(FParameters.CApath))}nil, Log(lcInfo, 'SSL parameters successfully set.');
{PansiChar(AnsiString(FParameters.Cipher))}nil); end;
Log(lcInfo, 'SSL parameters successfully set.')
end
else if IsNotEmpty(FParameters.SSLPrivateKey)
or IsNotEmpty(FParameters.SSLCertificate)
or IsNotEmpty(FParameters.SSLCACertificate)
then
begin
raise EDatabaseError.Create('SSL settings incomplete. Please set either CA certificate or all three SSL parameters.');
end; end;
end; end;