Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi LogonUser nicht möglich bei leerem PWD (https://www.delphipraxis.net/138952-logonuser-nicht-moeglich-bei-leerem-pwd.html)

Baeuerle 20. Aug 2009 12:56


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;

Reinhard Kern 20. Aug 2009 14:03

Re: LogonUser nicht möglich bei leerem PWD
 
Zitat:

Zitat von Baeuerle
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.

Hallo,

das ist wahrscheinlich das Gleiche wie bei Autologon und da ist es Absicht und auch so dokumentiert.

Gruss Reinhard

Baeuerle 20. Aug 2009 14:08

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???

Luckie 20. Aug 2009 21:18

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: http://www.michael-puff.de/Developer/Delphi/Units/ -> SSPIValidatePassword.pas die Logindaten des Benutzers zu überprüfen. Unter Windows 2000 und XP funktioniert sie, ob sie das auch unter Vista tut, kann ich nicht sagen.

toms 20. Aug 2009 21:31

Re: LogonUser nicht möglich bei leerem PWD
 
Zitat:

Zitat von Luckie
Unter Windows 2000 und XP funktioniert sie, ob sie das auch unter Vista tut, kann ich nicht sagen.

Geht auch unter Vista, hab's soeben getestet.

Luckie 20. Aug 2009 21:36

Re: LogonUser nicht möglich bei leerem PWD
 
Prima. Danke. Fehlt noch Windows 7.

himitsu 20. Aug 2009 22:05

Re: LogonUser nicht möglich bei leerem PWD
 
zu SSPIValidatePassword.pas

Delphi-Quellcode:
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;
AddEntry wird niemals FALSE liefern, da GetMem eine Exception wirft, wenn der Speicher nicht reserviert werden kann. (also True oder Exception)


dieses
Delphi-Quellcode:
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;
könnte man auch so kürzen
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:
function SSPLogonUser(const DomainName, UserName, Password: string): boolean;
  ReallocMem(pClientBuf, 0);
  ReallocMem(pServerBuf, 0);
auch wenn es nicht falsch ist, aber warum nicht FreeMem?

Luckie 20. Aug 2009 22:41

Re: LogonUser nicht möglich bei leerem PWD
 
Habs korrigiert.

Baeuerle 21. Aug 2009 08:45

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

Dezipaitor 21. Aug 2009 10:10

Re: LogonUser nicht möglich bei leerem PWD
 
Da gibts ne Policy, die man ändern muss:
Siehe auch
http://stackoverflow.com/questions/4...th-no-password


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz