![]() |
LogonUser nicht möglich bei leerem PWD
Hallo,
ich veruche die eingebenen Benutzerdaten, zur Anmeldung am System (Vista/Win7), zu überprüfen in dem ich ein LogonUser durchführe. Ist bei einem User ein Passwort hinterlegt, funktioniert das Ganze. Ohne Passwort bekomme ich leider ein False zurück auch GetLastError liefert keine aufschlussreiche Fehlermeldung. Ideen???
Delphi-Quellcode:
// FUser, FDomain, FPass sind Klassenvariablen
function TProcessOptions.CanLogon: Boolean; var sil: TSecurityImpersonationLevel; ltoken : Cardinal; begin ZeroMemory(@sil,sizeof(sil)); sil := SecurityIdentification; Result:=LogonUser(PAnsiChar(String(FUser)), PAnsiChar(String(FDomain)), PAnsiChar(String(FPass)), LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,ltoken); end; |
Re: LogonUser nicht möglich bei leerem PWD
Zitat:
das ist wahrscheinlich das Gleiche wie bei Autologon und da ist es Absicht und auch so dokumentiert. Gruss Reinhard |
Re: LogonUser nicht möglich bei leerem PWD
Schön aber wie kann ich jetzt überprüfen ob es möglich ist den Benutzer mit den Daten anzumelden???
|
Re: LogonUser nicht möglich bei leerem PWD
Der Konsolenbefehl "RunAsUser" von Windows selbst funktioniert aiuch nur, wenn der Benutzer ein Passwort hinterlegt hat, weil der zugehörige Dienst eins verlangt aus Sicherheitsgründen.
Versuch mal mit dieer Unit: ![]() |
Re: LogonUser nicht möglich bei leerem PWD
Zitat:
|
Re: LogonUser nicht möglich bei leerem PWD
Prima. Danke. Fehlt noch Windows 7.
|
Re: LogonUser nicht möglich bei leerem PWD
zu SSPIValidatePassword.pas
Delphi-Quellcode:
AddEntry wird niemals FALSE liefern, da GetMem eine Exception wirft, wenn der Speicher nicht reserviert werden kann. (also True oder Exception)
function AddEntry(dwKey: DWORD; pData: pointer): boolean;
var pTemp: PNode; begin GetMem(pTemp, sizeof(TNode)); if Assigned(pTemp) then begin ... result := True end else result := False end; dieses
Delphi-Quellcode:
könnte man auch so kürzen
FillChar(AuthIdentity, sizeof(AuthIdentity), 0);
if DomainName <> '' then begin AuthIdentity.Domain := PChar(DomainName); AuthIdentity.DomainLength := Length(DomainName) end; if UserName <> '' then begin AuthIdentity.User := PChar(UserName); AuthIdentity.UserLength := Length(UserName); end; if Password <> '' then begin AuthIdentity.Password := PChar(Password); AuthIdentity.PasswordLength := Length(Password) end; AuthIdentity.Flags := SEC_WINNT_AUTH_IDENTITY_ANSI;
Delphi-Quellcode:
AuthIdentity.Domain := Pointer(DomainName);
AuthIdentity.DomainLength := Length(DomainName) AuthIdentity.User := Pointer(UserName); AuthIdentity.UserLength := Length(UserName); AuthIdentity.Password := Pointer(Password); AuthIdentity.PasswordLength := Length(Password) AuthIdentity.Flags := SEC_WINNT_AUTH_IDENTITY_ANSI;
Delphi-Quellcode:
auch wenn es nicht falsch ist, aber warum nicht FreeMem?
function SSPLogonUser(const DomainName, UserName, Password: string): boolean;
ReallocMem(pClientBuf, 0); ReallocMem(pServerBuf, 0); |
Re: LogonUser nicht möglich bei leerem PWD
Habs korrigiert.
|
Re: LogonUser nicht möglich bei leerem PWD
Leider funktioniert auch diese Version von LogonUser unter Win7 mit leerem Passwort nicht :-( und ja die Domain und der Benutzer ist korrekt geschrieben ;-)
Hat evtl. noch jemand eine Idee??? [EDIT:] Es kommt die Exception "init context failed: -2146893044" inf der function GenServerContext.... [EDIT2:] Exception entspricht SEC_I_CONTINUE_NEEDED |
Re: LogonUser nicht möglich bei leerem PWD
Da gibts ne Policy, die man ändern muss:
Siehe auch ![]() |
Re: LogonUser nicht möglich bei leerem PWD
Super das war es. Wird der Eintrag auf 0 gesetzt funktioniert auch LogonUser wieder.
|
Re: LogonUser nicht möglich bei leerem PWD
Hast du dir auch die ganze Antwort durchgelesen:
Zitat:
|
Re: LogonUser nicht möglich bei leerem PWD
Solange es nicht auf meinem PC läuft :)
Wie heißt das Prog eigentlich? |
Re: LogonUser nicht möglich bei leerem PWD
Ein Adminstrator in einem Firmennetz wird das aber wahrscheinlich nicht zu lassen.
|
Re: LogonUser nicht möglich bei leerem PWD
Zitat:
|
Re: LogonUser nicht möglich bei leerem PWD
@Luckie: Ja, ich habe die Antwort gelesen! Mir geht es nur darum zu Prüfen ob die Benutzerdaten, die ein Anwender zum Login hinterlegt hat, korrekt sind. Bisher konnte ich dies nicht prüfen, wenn ein Benutzer ein leeres bzw. kein Passwort hinterlegt hat. Mit der neuen Funktion kann ich eine Meldung ausgeben, die besagt dass entweder Regitry wert auf 0 setzen oder Passwort vergeben.
Der Anwender/Admin kann/muss jetzt selbst entscheiden! In der Meldung wird auch auf die Sicherheitslücke hingewiesen. So it´s no more my problem.... Bisher war es mir einfach nicht möglich eine korrekte Analyse der Benutzerdaten durchzuführen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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-2025 by Thomas Breitkreuz