![]() |
SSPLogonUser und Umlaute
Hallo Leute,
ich verwende die Funktion SSPLogonUser in der Unit SSPIValidatePassword. Nun habe ich ein Problem mit Umlauten, falls Umlaute im Usernamen sind gibt SSPLogonUser false zurück, ohne Umlaute funktioniert das ganze. Was kann ich da tun ? Viele Grüße Gargano |
Re: SSPLogonUser und Umlaute
unicode, widestrings zu verwenden hast du sicherlich schon probiert?
bzw. die "W" varianten von den Api-Funktionen zu verwenden? |
Re: SSPLogonUser und Umlaute
Hallo generic,
danke für den Tip, ich habe die Funktion so genommen wie sie war: d.h. mit normalen PChar Umstellen auf PWideChar und zusätzlich AuthIdentity.Flags := SEC_WINNT_AUTH_IDENTITY_UNICODE setzen hat geholfen. Jedenfalls auf der lokalen Maschine, im Netz muß ich noch probieren. Gruß gargano |
Re: SSPLogonUser und Umlaute
Ok, ich habe es jetzt auch mit der Domäne probiert und es geht. Für alle die Schröder, Krüger oder Gräber heißen hier der Code (teilweise aus SSPIInvalidatePassword) :
Die Änderungen sind mit // Widechar gekennzeichnet. Gruß gargano
Delphi-Quellcode:
(*----------------------------------------------------------------------*
| SSPLogonUser | | | | Validate password for user/domain. Returns true if the password is | | valid. | *----------------------------------------------------------------------*) function SSPLogonUser(const DomainName, UserName, Password: string): boolean; var done : boolean; cbOut, cbIn : DWORD; AuthIdentity : TSecWINNTAuthIdentity; session0OK, session1OK : boolean; packageHandle : THandle; pClientBuf : PByte; pServerBuf : PByte; cbMaxMessage : DWORD; funcs : PSecurityFunctionTable; // Widechar TheDomain : Array[0..255] Of WideChar; TheUser : Array[0..255] Of WideChar; ThePassWD : Array[0..255] Of WideChar; begin result := False; try done := False; session1OK := False; packageHandle := 0; pClientBuf := nil; pServerBuf := nil; cbMaxMessage := 0; session0OK := InitSession(0); try session1OK := InitSession(1); packageHandle := InitPackage(cbMaxMessage, funcs); if session0OK and session1OK and (packageHandle <> 0) then begin GetMem(pClientBuf, cbMaxMessage); GetMem(pServerBuf, cbMaxMessage); FillChar(AuthIdentity, sizeof(AuthIdentity), 0); if DomainName <> '' then begin // Widechar StringToWideChar(DomainName,@TheDomain,255); AuthIdentity.Domain :=@TheDomain; AuthIdentity.DomainLength := Length(DomainName) end; if UserName <> '' then begin // Widechar StringToWideChar(UserName,@TheUser,255); AuthIdentity.User := @TheUser ; AuthIdentity.UserLength := Length(UserName); end; if Password <> '' then begin // Widechar StringToWideChar(Password,@ThePassWD,255); AuthIdentity.Password := @ThePassWD; AuthIdentity.PasswordLength := Length(Password) end; // Widechar AuthIdentity.Flags := SEC_WINNT_AUTH_IDENTITY_UNICODE; // // Prepare client message (negotiate). // cbOut := cbMaxMessage; if not GenClientContext(funcs, 0, @AuthIdentity, pServerBuf, 0, pClientBuf, cbOut, done) then //raise Exception.Create('GenClientContext Failed'); exit; cbIn := cbOut; cbOut := cbMaxMessage; if not GenServerContext(funcs, 1, pClientBuf, cbIn, pServerBuf, cbOut, done) then //raise Exception.Create('GenServerContext Failed'); exit; cbIn := cbOut; // // Prepare client message (authenticate). // cbOut := cbMaxMessage; if not GenClientContext(funcs, 0, @AuthIdentity, pServerBuf, cbIn, pClientBuf, cbOut, done) then //raise Exception.Create('GenClientContext failed'); exit; cbIn := cbOut; // // Prepare server message (authentication). // cbOut := cbMaxMessage; if not GenServerContext(funcs, 1, pClientBuf, cbIn, pServerBuf, cbOut, done) then //raise Exception.Create('GenServerContext failed'); exit; result := True end finally if Session0OK then TermSession(funcs, 0); if Session1OK then TermSession(funcs, 1); if packageHandle <> 0 then FreeLibrary(PackageHandle); ReallocMem(pClientBuf, 0); ReallocMem(pServerBuf, 0); end except end end; |
Re: SSPLogonUser und Umlaute
I remembered there were issues with sspi and guest account. I searched and found this
![]() This is what you need to consider: On a Windows XP computer that is a member of a workgroup: • If ForceGuest is enabled (set to 1), SSPI will always try to log on using the Guest account. • If the Guest account is enabled, an SSPI logon will succeed as Guest for any user credentials. • If the Guest account is disabled, an SSPI logon will fail even for valid credentials. • If ForceGuest is disabled (set to 0), SSPI will log on as the specified user. Additionally, if the Guest account is enabled, SSPI logon may succeed as Guest for user credentials that are not valid. The C sample code in this article demonstrates how you can check the access token of the established security context. The IsGuest helper function in the sample code shows how you can verify that the logon occurred as the specified user or as Guest. |
Re: SSPLogonUser und Umlaute
@gargano kannst du oder ein Moderator bitte Code-Tags verwenden?
THX |
AW: SSPLogonUser und Umlaute
Schönen guten Abend,
auf der Suche nach dem Verifizieren von Benutzerdaten habe, ich den hier aufgeführten Code gefunden, der für mich in Frage kommt. UNICODE müsste es sein. Da ich mit der Variante ANSI ab und zu Probleme habe mit Passwörtern bei uns im Unternehmen. Leider klappt der Code nicht so wirklich beim mir. Folgende Dinge bräuchte ich noch:
Delphi-Quellcode:
Die Konvertierung gibt immer nur einen Buchstaben zurück.
SEC_WINNT_AUTH_IDENTITY_ANSI = $01;
SEC_WINNT_AUTH_IDENTITY_UNICODE = ??;
Delphi-Quellcode:
Danke im Voraus.
TheDomain : Array[0..255] Of WideChar;
TheUser : Array[0..255] Of WideChar; ThePassWD : Array[0..255] Of WideChar; ... StringToWideChar(UserName,@TheUser,255); AuthIdentity.User := @TheUser ; // z.B.: UserName = 'Sven' dann ist @TheUser leider nur 'S', warum nur? Sven |
AW: SSPLogonUser und Umlaute
Was macht den StringToWideChar genau?
|
AW: SSPLogonUser und Umlaute
Verstehe deine Frage nicht ganz.
Das ist eine interne Funktion. Laut anderen Beispielen, die genauso arbeiten soll es funktionieren. Aber keine Ahnung warum bei mir nicht bzw. warum ich nur einen Buchstaben zurück bekomme. Es muss ja irgendwie funktionieren, denn der Quellcode wurde ja als erfolgreiche Lösung gepostet. |
AW: SSPLogonUser und Umlaute
die Struktur der Variable AuthIdentity enthält nur PChar (PAnsiChar) und daher ist nur ein Zeichen drin, weil das zweite Zeichen in Unicode eine #0 ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz