Hallo paresy,
Zitat von
paresy:
Beim starten des HTTPServers wirft dieser eine
Exception:
Code:
Exception class EIdOSSLLoadingRootCertError with message 'Could not load root certificate.
error:0B064071:x509 certificate routines:ADD_CERT_DIR:invalid directory'.
[...]
Wenn der ACAPath leer ist (was er immer ist), dann wird durch die PAnsiChar Konvertierung ein #0 zurückgegeben, was nicht NULL ist und dadurch überprüft OpenSSL den Pfad, der dann ungültig ist und in der o.g.
Exception resultiert. Ein hardcoded NIL hilft. Ist aber nicht wirklich schön
. Besser wäre eine Erkennung von
Indy ob der User eine Datei oder einen Pfad angegeben hat und dann den jeweils richtigen Parameter ausfüllt und den anderen per NIL deaktiviert.
Gefixt in Rev #4183, Danke fürs reporten
Allgemeine Lösung ist ein Casten auf Pointer und dann auf PAnsiChar, wie z.B. jetzt hier:
Delphi-Quellcode:
function IndyX509_STORE_load_locations(ctx: PX509_STORE;
const AFileName, APathName: String): TIdC_INT;
{$IFDEF USE_INLINE} inline; {$ENDIF}
begin
// RLebeau 4/18/2010: X509_STORE_load_locations() expects nil pointers
// for unused values, but casting a string directly to a PAnsiChar
// always produces a non-nil pointer, which causes X509_STORE_load_locations()
// to fail. Need to cast the string to an intermediate Pointer so the
// PAnsiChar cast is applied to the raw data and thus can be nil...
//
Result := X509_STORE_load_locations(ctx,
PAnsiChar(Pointer(UTF8String(AFileName))),
PAnsiChar(Pointer(UTF8String(APathName))));
end;
Gruß,
Assertor