synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Rund um die LCL und andere Komponenten
Antworten
schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von schoschy »

Moin,

ich versuche gerade mit synapse ldapsend einen nicht erreichbaren Server abzufangen.
0815 Beispiel:

Code: Alles auswählen

procedure TForm1.Button53Click(Sender: TObject);
var
  ldap: TLDAPsend;
  l: TStringList;
begin
  ldap:= TLDAPsend.Create;
  l := TStringList.Create;
  try
    ldap.Version:=2;
    ldap.TargetHost := 'www.openldap.com';
    ldap.Username := 'cn=manager,dc=OpenLDAP,dc=org';
    ldap.Password := 'pass';
    ldap.Login;
    ldap.Bind;
    l.Add('displayname');
    l.Add('description');
    l.Add('givenName');
    l.Add('*');
    ldap.Search('dc=OpenLDAP,dc=org', False, '(objectclass=*)', l);
    memo1.Lines.Add(LDAPResultdump(ldap.SearchResult));
    ldap.Logout;
  finally
    ldap.Free;
    l.Free;
  end;
end;
Bisher habe ich den blcksock nur verwendet mit vorhandenem Server und dachte, dass ich mittels boolean aus dem login die verfügbarkeit des Servers überprüfe. Das ist wohl nicht so.

Code: Alles auswählen

if ldap.Login then 
begin
...
end;
finally
..... 
Das ist mir aufgefallen, da ich meinen ldap Server nicht engeschalten hatte. :lol:
Ich habe auch schon mit ein paar properties rumgespielt, bin da aber nicht vertieft und die einschlägigen suchen haben mir nicht weitergeholfen.

Ich gehe direkt auf Login ein, da hier das Programm für ca. 40 sec stehen bleibt.

Code: Alles auswählen

  TLDAPSend = class(TSynaClient)
  private
    FSock: TTCPBlockSocket; 
    
   ...
 
function TLDAPSend.Login: Boolean;
begin
  Result := False;
  if not Connect then
    Exit;
  Result := True;
  if FAutoTLS then
    Result := StartTLS;
end;    
    
function TLDAPSend.Connect: Boolean;
begin
  // Do not call this function! It is calling by LOGIN method!
  FSock.CloseSocket;
  FSock.LineBuffer := '';
  FSeq := 0;
  FSock.Bind(FIPInterface, cAnyPort);
  if FSock.LastError = 0 then
    FSock.Connect(FTargetHost, FTargetPort);
  if FSock.LastError = 0 then
    if FFullSSL then
      FSock.SSLDoConnect;
  Result := FSock.LastError = 0;
end; 

procedure TTCPBlockSocket.Connect(IP, Port: string);
begin
  if FSocksIP <> '' then
    SocksDoConnect(IP, Port)
  else
    if FHTTPTunnelIP <> '' then
      HTTPTunnelDoConnect(IP, Port)
    else
      inherited Connect(IP, Port);
  if FLasterror = 0 then
    DoAfterConnect;
end;  

Den Last Error hab ich auch mal noch vor und nach der if ldap.login abgefragt.
0
10060

Hat jemand mit der Verwendung von ldapsend Erfahrung und kann mir hier weiterhelfen?
Gerne auch rückfragen, ich habe nichts an den Quelldateien geändert.

Gruß schoschy

Stevie
Beiträge: 173
Registriert: Di 27. Feb 2024, 22:40

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von Stevie »

... also irgendwie muss da was in Deinem Stack komisch sein. Wenn ich TLdapSend benutze, geht das bei mir ganz wie erwartet und zwar ohne Timeouts. Mit folgender Funktion ...

Code: Alles auswählen

function LoginAndBind(serverName, serverPort, bindDN, bindPwd : string; useSSL : boolean) : boolean;
begin
  result := false;
  ldap := TLDAPSend.Create;
  ldap.Version := 3;
  ldap.TargetHost := serverName;
  ldap.TargetPort := serverPort;
  ldap.userName := bindDN;
  ldap.password := bindPwd;
  ldap.FullSSL := useSSL;
  ldap.Timeout := 3000;

  if ldap.login then
  begin
    Debug('LDAP Login successful, trying LDAP bind');
    if ldap.bind then
      result := true
    else
    begin
      Debug('LDAP Bind failed');
      Debug('Result Code   = ' + IntToStr(ldap.ResultCode));
      Debug('Result String = ' + ldap.ResultString);
    end;
  end
  else
  begin
    Debug('LDAP Login unsuccessful.');
    Debug('Result Code   = ' + IntToStr(ldap.ResultCode));
    Debug('Result String = ' + ldap.ResultString);
    result := false;
  end;
end;
... steigt mein Programm wie gewünscht sofort aus, wenn der LDAP Server nicht verfügbar ist:

Code: Alles auswählen

19:00:37: Trying to connect to LDAP server...
19:00:37: LDAP Login unsuccessful. Skipping LDAP bind...
19:00:37: Result Code   = 0
19:00:37: Result String =
... und beschwert sich brav, wenn der Server da ist und bspw. das Bind Password falsch:

Code: Alles auswählen

19:00:06: Trying to connect to LDAP server...
19:00:06: LDAP Login successful, trying LDAP bind
19:00:06: LDAP Bind failed
19:00:06: Result Code   = 49
19:00:06: Result String = Invalid credentials
Auf welchem Betriebssystem bist Du denn da unterwegs?

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von schoschy »

Hey Stevie,
danke für das Feedback.

Ich habe einmal weiter getestet,
die TLDAPSend usw von github neu geladen
Hab deine Rückgabe zum Testen implementiert.

Code: Alles auswählen

//alles läuft
[26.08.2024 09:36:30] LdapConnect - Click
[26.08.2024 09:36:30] LDAP Login successful, trying LDAP bind

//slapd aus - System dahinter an
[26.08.2024 09:37:28] LdapConnect - Click
[26.08.2024 09:37:30] LDAP Login unsuccessful.
[26.08.2024 09:37:30] Result Code   = 0
[26.08.2024 09:37:30] Result String = 

// nicht vorhandene IP / System dahinter aus
[26.08.2024 09:37:57] LdapConnect - Click
[26.08.2024 09:38:18] LDAP Login unsuccessful.
[26.08.2024 09:38:18] Result Code   = 0
[26.08.2024 09:38:18] Result String = 
Als Betriebssystem verwende ich Win10.
Die ldap.Timeout verändert im 2. Konstrukt keine zeitliche Anpassung, sind immer 2 Sekunden in meinem Fall.

Ich bau mir gleich mal ein Testprojekt und teste auf Linux gegen.

Code: Alles auswählen

procedure Tf_debug.Button1Click(Sender: TObject);
var
  ldap : TLDAPSend;
begin
  ldap := TLDAPSend.Create;
  ldap.Version := 3;
  ldap.TargetHost := LDAP_ADDR;
  ldap.TargetPort := LDAP_PORT.ToString;
  ldap.userName := LDAP_USER;
  ldap.password := LDAP_PASSWORD;
  ldap.FullSSL := false;
  ldap.Timeout := 3000;
  DebugAdd('LdapConnect - Click',1);
  if ldap.login then
  begin
    DebugAdd('LDAP Login successful, trying LDAP bind', 1);
    if ldap.bind then
    else
    begin
      DebugAdd('LDAP Bind failed',1);
      DebugAdd('Result Code   = ' + IntToStr(ldap.ResultCode),1);
      DebugAdd('Result String = ' + ldap.ResultString,1);
    end;
  end
  else
  begin
    DebugAdd('LDAP Login unsuccessful.',1);
    DebugAdd('Result Code   = ' + IntToStr(ldap.ResultCode),1);
    DebugAdd('Result String = ' + ldap.ResultString,1);
  end;
end;  

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von schoschy »

Kurzes feedback deb/Win
Kleines Programm geschrieben:

Code: Alles auswählen

program project1;

uses
  Classes, SysUtils, LDAPSend;

var
  ldap : TLDAPSend;

procedure WL(x:String);
begin
  WriteLn(DateTimeToStr(Now), ': ', x);
end;

begin
  ldap := TLDAPSend.Create;
  ldap.Version := 3;
  ldap.TargetHost := '192.168.42.8';
  ldap.TargetPort := '389';
  ldap.userName := 'cn=Manager,dc=test,dc=de';
  ldap.password := 'test';
  ldap.FullSSL := false;
  ldap.Timeout := 10000;
  WL('LdapConnect - Start');
  if ldap.login then
  begin
    WL('LDAP Login successful, trying LDAP bind');
    if ldap.bind then
    else
    begin
      WL('LDAP Bind failed');
      WL('Result Code   = ' + IntToStr(ldap.ResultCode));
      WL('Result String = ' + ldap.ResultString);
    end;
  end
  else
  begin
    WL('LDAP Login unsuccessful.');
    WL('Result Code   = ' + IntToStr(ldap.ResultCode));
    WL('Result String = ' + ldap.ResultString);
  end;
  ldap.Free;
  ReadLn;
end.
Unter Windows verhält es sich wie im Post zuvor.
Linux:

Code: Alles auswählen

//slapd aus
schoschy@lappi:/mnt/c/Entwicklung/LDAP-Test$ ./project1
26-8-24 10:14:38: LdapConnect - Start
26-8-24 10:14:38: LDAP Login unsuccessful.
26-8-24 10:14:38: Result Code   = 0
26-8-24 10:14:38: Result String =

//ip nicht vergeben
schoschy@lappi:/mnt/c/Entwicklung/LDAP-Test$ ./project1
26-8-24 10:16:29: LdapConnect - Start
26-8-24 10:16:32: LDAP Login unsuccessful.
26-8-24 10:16:32: Result Code   = 0
26-8-24 10:16:32: Result String =
Zuletzt geändert von schoschy am Mo 26. Aug 2024, 11:22, insgesamt 1-mal geändert.

Stevie
Beiträge: 173
Registriert: Di 27. Feb 2024, 22:40

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von Stevie »

Moment, jetzt bin ich verwirrt. Wo genau liegt denn dein Problem? Die Synapse Library erkennt doch durchaus, dass sie keine Verbindung aufbauen kann und meldet ein 'false' zurück - egal, ob wegen eines gestoppten slapd oder wegen einer nicht konfigurierten Netzwerkverbindung. Und zumindest in Deinem Beispiel hängt der Prozess keine 40 Sekunden, sondern etwa 2 Sekunden, was Deinem Timeout-Setting entspricht. Was also ist Dein Problem? Der in beiden Fällen identische Result Code?

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von schoschy »

Habe mich wohl nicht verständlich ausgedrückt, anderer Versuch.
Wenn das System dahinter aus ist, hatte/habe ich eine Verzögerung von 20 Sekunden im Test vorhin.
Diese Zeit ist leider nicht durch Parameter veränderbar. Oder ich habe den dafür richtigen noch nicht gefunden.

Konkret ist es mir letzte Woche aufgefallen, als ich nach einem Umzug im System Telefonie getestet habe.
Anruf geht rein, ldap anfrage auf die Nummer. - Programm wartet ein wenig (20s) :lol:
dann wird der Anruf Signalisiert.
Mit ein zwei Sekunden Antwortzeit kann ich leben, das bekomm ich abgefangen, aber 20 ist gerade bei einem Anruf nicht von Vorteil.

Parameter die ich mal ausprobiert hatte:

Code: Alles auswählen

      //ldap.SearchTimeLimit := 1;
      //ldap.Sock.SocksTimeout := 1;
      //ldap.Sock.SetTimeout(1);
      //ldap.Sock.SetRecvTimeout(1);
      //ldap.Sock.NonBlockMode:=True;
      //ldap.Timeout := 1; 
Hier die Zeit im Durchgang 3 beachten. Click ist eine Zeile vor ldap.login
schoschy hat geschrieben: Mo 26. Aug 2024, 10:05

Code: Alles auswählen


//alles läuft
[26.08.2024 09:36:30] LdapConnect - Click
[26.08.2024 09:36:30] LDAP Login successful, trying LDAP bind

//slapd aus - System dahinter an
[26.08.2024 09:37:28] LdapConnect - Click
[26.08.2024 09:37:30] LDAP Login unsuccessful.
[26.08.2024 09:37:30] Result Code   = 0
[26.08.2024 09:37:30] Result String = 

// nicht vorhandene IP / System dahinter aus
[26.08.2024 09:37:57] LdapConnect - Click
[26.08.2024 09:38:18] LDAP Login unsuccessful.
[26.08.2024 09:38:18] Result Code   = 0
[26.08.2024 09:38:18] Result String = 
Ist das besser erklärt, oder hab ich wichtige Punkte vergessen?
schoschy hat geschrieben: Mo 26. Aug 2024, 10:32 Kurzes feedback deb/Win
....
Unter Windows verhält sich selbiges gleich.
...:shock:
Ja zum Post davor natürlich. Ich pass es mal noch an.

Danke Dir

Stevie
Beiträge: 173
Registriert: Di 27. Feb 2024, 22:40

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von Stevie »

Okay, habe es vorhin noch mal versucht und heute hat mein Testprogramm auch deutlich über 20 Sekunden bis zum Timeout benötigt. Merkwürdig, da es neulich ja eher im Bereich von ca. 1 Sekunde war. Ich habe mir den Source jetzt auch noch mal angeschaut und komme zu (vermutlich) einem ähnlichen Urteil wie Du: TLdapSend bleibt intern im 'connect' der zugrunde liegenden 'libc' hängen. Da es aber einen 'blocking socket' verwendet, kann man den Timeout nicht selbst beeinflussen, wie man es mit einem 'non-blocking socket' könnte.

Aus meiner Sicht hast Du danach eigentlich nur eine sinnvolle Option: den LDAP Connect innerhalb Deiner Anwendung über einen Thread laufen lassen und dann Deine Benutzer über das UI wissen lassen, dass sie sich gedulden müssen und vielleicht noch einen Abbruch-Knopf vorsehen, der den Thread bei Bedarf killt.

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von schoschy »

Moin Stevie,

danke für das gegentesten.
Stevie hat geschrieben: Mo 26. Aug 2024, 17:10 Aus meiner Sicht hast Du danach eigentlich nur eine sinnvolle Option: den LDAP Connect innerhalb Deiner Anwendung über einen Thread laufen lassen und dann Deine Benutzer über das UI wissen lassen, dass sie sich gedulden müssen und vielleicht noch einen Abbruch-Knopf vorsehen, der den Thread bei Bedarf killt.
Ich bin fast gewillt, einen Ping auf die IP mittels eines Timers zu senden - Wenn die IP zu pingen ist, läuft die Hardware und da der LDAP immer von mir ist, sollte der auch laufen.
Muss ich dem Thread mal gegenüber stellen.

So eine If sieht halt super aus 8)

Code: Alles auswählen

if ldap_isReachable then
mach_mal_ldap
else
Popup('hier kein LDAP');

OnTimerTick;
ldap_isReachable := ping(ldap_IP);
Wenn jemand an der Lösung meinerseits interessiert ist, einfach nachfragen.
Beim darüber Stolpern über die Frage, hab ich eventuell auch eine funktionale Lösung. :lol:

Gruß

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von Zvoni »

schoschy hat geschrieben: Di 27. Aug 2024, 09:10 Moin Stevie,

danke für das gegentesten.
Stevie hat geschrieben: Mo 26. Aug 2024, 17:10 Aus meiner Sicht hast Du danach eigentlich nur eine sinnvolle Option: den LDAP Connect innerhalb Deiner Anwendung über einen Thread laufen lassen und dann Deine Benutzer über das UI wissen lassen, dass sie sich gedulden müssen und vielleicht noch einen Abbruch-Knopf vorsehen, der den Thread bei Bedarf killt.
Ich bin fast gewillt, einen Ping auf die IP mittels eines Timers zu senden - Wenn die IP zu pingen ist, läuft die Hardware und da der LDAP immer von mir ist, sollte der auch laufen.
Muss ich dem Thread mal gegenüber stellen.

So eine If sieht halt super aus 8)

Code: Alles auswählen

if ldap_isReachable then
mach_mal_ldap
else
Popup('hier kein LDAP');

OnTimerTick;
ldap_isReachable := ping(ldap_IP);
Wenn jemand an der Lösung meinerseits interessiert ist, einfach nachfragen.
Beim darüber Stolpern über die Frage, hab ich eventuell auch eine funktionale Lösung. :lol:

Gruß
Denk dran, dass ein erfolgreicher Ping nur die Aussage mitbringt, dass die Kiste läuft und im Netzwerk ist.
Es ist keine Aussage darüber, ob der (LDAP)-Service verfügbar ist
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von schoschy »

Oder direkt...

Linux - direkte antwort
Windows Timeout.

Code: Alles auswählen

uses
  pingsend;  //neu - auch synapse
   
var
  IPaddr: string = '192.168.42.8';  
  ldapIsReachable: boolean = False;  

begin  //Timer !!    
  pinger := TPINGSend.Create;
  try
    pinger.Timeout := 2000;
    ldapIsReachable := pinger.Ping(IPaddr);
  finally
    pinger.Free;
  end;
end;  
Im LdapRequest dann

Code: Alles auswählen

  if ldapIsReachable then
  begin   
    ldap := TLDAPSend.Create;
    ldap.Version := 3;         
    ...
  end else WriteLn('LDAP not reachable');   
  
Wichtig für Windows hierbei ist, dass der Ping nicht in der Ldap-Request Funktion ausgeführt wird !!

NTest.Win(Timeout 5000) - IP nicht vergeben: Failed

Code: Alles auswählen

27.08.2024 09:41:46: Start pinger
27.08.2024 09:41:49: Pinger finished
27.08.2024 09:41:49: Start LDAP
27.08.2024 09:42:10: LDAP Login unsuccessful.
27.08.2024 09:42:10: Result Code   = 0
27.08.2024 09:42:10: Result String =
27.08.2024 09:42:10: LDAP finished
NTest.Win(Timeout 1000) - IP nicht vergeben: OK

Code: Alles auswählen

27.08.2024 09:42:44: Start pinger
27.08.2024 09:42:45: Pinger finished
27.08.2024 09:42:45: Start LDAP
27.08.2024 09:42:45: LDAP not reachable
27.08.2024 09:42:45: LDAP finished
NTest.unx(Timeout 5000) - IP nicht vergeben: OK

Code: Alles auswählen

27-8-24 09:41:17: Start pinger
27-8-24 09:41:17: Pinger finished
27-8-24 09:41:17: Start LDAP
27-8-24 09:41:17: LDAP not reachable
27-8-24 09:41:17: LDAP finished
Gruß

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von schoschy »

Zvoni hat geschrieben: Di 27. Aug 2024, 09:42 Denk dran, dass ein erfolgreicher Ping nur die Aussage mitbringt, dass die Kiste läuft und im Netzwerk ist.
Es ist keine Aussage darüber, ob der (LDAP)-Service verfügbar ist
Der Service läuft natürlich mit einer Ausfallsicherheit von 99,99999% :lol:
Das sind die 1-3 Sekunden die mich nicht Stören. Wie eingangs erwähnt.
Kann man für sich ja noch mit etwas mehr Logik versehen und prüfen, wenn man es benötigt.
Ich werde es.

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von Zvoni »

schoschy hat geschrieben: Di 27. Aug 2024, 09:56
Zvoni hat geschrieben: Di 27. Aug 2024, 09:42 Denk dran, dass ein erfolgreicher Ping nur die Aussage mitbringt, dass die Kiste läuft und im Netzwerk ist.
Es ist keine Aussage darüber, ob der (LDAP)-Service verfügbar ist
Der Service läuft natürlich mit einer Ausfallsicherheit von 99,99999% :lol:
Das sind die 1-3 Sekunden die mich nicht Stören. Wie eingangs erwähnt.
Kann man für sich ja noch mit etwas mehr Logik versehen und prüfen, wenn man es benötigt.
Ich werde es.
Das ist mir auch klar :lol:
Nur habe ich es eben live erlebt, dass Pings erfolgreich waren, und es sich niemand erklären konnte, wieso kein connect zustande kam (war ein DB-Server in dem Fall).
...... bis dann mal irgendwann jemand gefragt hat: "Läuft denn der Service überhaupt?" :P
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Stevie
Beiträge: 173
Registriert: Di 27. Feb 2024, 22:40

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von Stevie »

... ich glaube, wenn es darum geht, an der LDAP Library vorbei die Verfügbarkeit des LDAP-Servers zu überprüfen, würde ich einen Socket auf Port 389 (oder 636 oder was eben konfiguriert ist) öffnen und gleich wieder schließen. Dann hast Du den Timeout selbst unter Kontrolle und bist im Gegensatz zu Ping im richtigen Protokoll (sprich: TCP oder UDP und nicht ICMP) unterwegs.

Ggf. sollte man solche regelmäßigen Tests mit 'seinem' LDAP-Admin abstimmen, damit der dann nicht die Krise bekommt, weil alle paar Sekunden jemand eine 'leere' Verbindung zu seinem Server öffnet und wieder schließt. :roll:

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von schoschy »

Stevie hat geschrieben: Di 27. Aug 2024, 15:46 ... ich glaube, wenn es darum geht, an der LDAP Library vorbei die Verfügbarkeit des LDAP-Servers zu überprüfen, würde ich einen Socket auf Port 389 (oder 636 oder was eben konfiguriert ist) öffnen und gleich wieder schließen. Dann hast Du den Timeout selbst unter Kontrolle und bist im Gegensatz zu Ping im richtigen Protokoll (sprich: TCP oder UDP und nicht ICMP) unterwegs.

Ggf. sollte man solche regelmäßigen Tests mit 'seinem' LDAP-Admin abstimmen, damit der dann nicht die Krise bekommt, weil alle paar Sekunden jemand eine 'leere' Verbindung zu seinem Server öffnet und wieder schließt. :roll:
Sehe ich auch so.
Das muss jeder anhand der gegebenen Situation bewerten und es ist gut, dass du es erwähnst. Steht somit im selben Thread für Leute die auf das Problem eine Lösung suchen.

Stevie
Beiträge: 173
Registriert: Di 27. Feb 2024, 22:40

Re: synapse ldapsend - Erreichbarkeit vom Server überprüfbar?

Beitrag von Stevie »

Vielleicht noch als 'food for thought' ein TCP-basierter Health Check, wie man ihn im HA-Proxy bauen könnte:

Code: Alles auswählen

 option tcp-check
 tcp-check connect port 389
 tcp-check send-binary 300c0201 # LDAP bind request "<ROOT>" simple
 tcp-check send-binary 01 # message ID
 tcp-check send-binary 6007 # protocol Op
 tcp-check send-binary 0201 # bind request
 tcp-check send-binary 03 # LDAP v3
 tcp-check send-binary 04008000 # name, simple authentication
 tcp-check expect binary 0a0100 # bind response + result code: success
 tcp-check send-binary 30050201034200 # unbind request
... bzw. ...

Code: Alles auswählen

 tcp-check connect port 636 ssl
 tcp-check send-binary 300c0201 # LDAP bind request "<ROOT>" simple
 tcp-check send-binary 01 # message ID
 tcp-check send-binary 6007 # protocol Op
 tcp-check send-binary 0201 # bind request
 tcp-check send-binary 03 # LDAP v3
 tcp-check send-binary 04008000 # name, simple authentication
 tcp-check expect binary 0a0100 # bind response + result code: success
 tcp-check send-binary 30050201034200 # unbind request
Der dürfte sich ja ziemlich einfach auch mit Synapse umsetzen lassen und damit wäre man dann 'super clean'. :)

Quelle: https://www.mail-archive.com/haproxy@fo ... 17371.html

Antworten