AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SSPLogonUser und Umlaute

Ein Thema von gargano · begonnen am 30. Jan 2008 · letzter Beitrag vom 9. Jan 2012
Antwort Antwort
Seite 1 von 2  1 2      
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#1

SSPLogonUser und Umlaute

  Alt 30. Jan 2008, 15:31
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
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

Re: SSPLogonUser und Umlaute

  Alt 30. Jan 2008, 16:39
unicode, widestrings zu verwenden hast du sicherlich schon probiert?

bzw. die "W" varianten von den Api-Funktionen zu verwenden?
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: SSPLogonUser und Umlaute

  Alt 30. Jan 2008, 18:13
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
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: SSPLogonUser und Umlaute

  Alt 30. Jan 2008, 21:06
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;

Geändert von Luckie ( 8. Jan 2012 um 15:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#5

Re: SSPLogonUser und Umlaute

  Alt 30. Jan 2008, 21:34
I remembered there were issues with sspi and guest account. I searched and found this kb

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.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#6

Re: SSPLogonUser und Umlaute

  Alt 31. Jan 2008, 00:09
@gargano kannst du oder ein Moderator bitte Code-Tags verwenden?

THX
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#7

AW: SSPLogonUser und Umlaute

  Alt 7. Jan 2012, 22:54
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:
SEC_WINNT_AUTH_IDENTITY_ANSI = $01;
SEC_WINNT_AUTH_IDENTITY_UNICODE = ??;
Die Konvertierung gibt immer nur einen Buchstaben zurück.
Delphi-Quellcode:
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?
Danke im Voraus.
Sven
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#8

AW: SSPLogonUser und Umlaute

  Alt 7. Jan 2012, 23:02
Was macht den StringToWideChar genau?
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#9

AW: SSPLogonUser und Umlaute

  Alt 8. Jan 2012, 13:37
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.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#10

AW: SSPLogonUser und Umlaute

  Alt 8. Jan 2012, 17:46
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
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