LDAP Client in C



  • #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    
    int startWinsock(void);
    
    /************************************** Hauptprogramm *************************************/
    int main()
    {
      printf("************************************************\n*                 LDAP-Client                  *");
      printf("\n************************************************\n");
    
    /*--------------------------------- Variablen definieren ---------------------------------*/     
      long rc;
      SOCKET s;
      SOCKADDR_IN addr;
      char buf[256];
      char ip_addr[16];
      char auswahl; 
    /*---------------------------------------- Winsock ---------------------------------------*/ 
      rc=startWinsock();
    
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return(1);
      }
    /*---------------------------------------- Socket ----------------------------------------*/
      s=socket(AF_INET,SOCK_STREAM,0);
    
      if(s==INVALID_SOCKET)
      {
        printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
        return(1);
      }
    /*---------------------------------- Verbindungsteil -------------------------------------*/ 
      memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
      addr.sin_family=AF_INET;
    
      printf("\n     [1]: Servereingabe     [2]: Testserver\n");
      printf("                     Auswahl: ");
      scanf("%s", &auswahl);
      printf("------------------------------------------------\n");
      switch(auswahl)
      {
      case '1':
               printf("Servereingabe: ");
               scanf("%15s", ip_addr); 
               addr.sin_port=htons(389); // Wellknown Port
               addr.sin_addr.s_addr=inet_addr(ip_addr);
    
               rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
               if(rc==SOCKET_ERROR)
                {
                 printf("\nVerbindung gescheitert, Code: %d\n\n",WSAGetLastError());
                }
                else
                {
                 printf("\nVerbunden mit: %s\n", ip_addr);
                }
               break;
      case '2': 
               addr.sin_port=htons(389); // Wellknown Port
               addr.sin_addr.s_addr=inet_addr("137.30.1.21"); // Testserver
    
               rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
               if(rc==SOCKET_ERROR)
                {
                 printf("\nVerbindung gescheitert, Code: %d\n\n",WSAGetLastError());
                }
                else
                {
                 printf("\nVerbunden mit: ldap.uno.edu\n\n");
                }
               break;
      default: break;     
      }	
    
      closesocket(s); // Socket schließen
      WSACleanup();
      system("Pause");  // Programm mit beliebiger Taste beenden
    
    }
    /******************************************************************************************/
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    Das ist mein Client der auch funktioniert wenn ich ihn complimiere...

    Ich möchte allerdings eine ldapsearch-anfrage und Auswertung einbauen.

    Ich habe dann noch eine Variable:
    char ldapsearch[]="ldapsearch"; //Befehlssysntax fehlt mir

    Ich dachte daran mit write() zu senden und mit read() zu empfangen und danach sollten die Suchergebnisse in einer Datei gespeichert werden.

    Kann mir jemand helfen?

    Gruß Sven





  • Ja danke das ist die RFC die hatte ich bereits angeschaut,...

    Das ist das erste Mal, das ich damit arbeite.

    http://tools.ietf.org/html/rfc4515

    In dieser stehen die Daten denke ich drin, oder?

    Ich will das ja erstmal garnicht Variabel programmieren, sondern mit einem festen Suchbegriff...

    Weitere Hilfen nehme ich gerne an 😃

    Gruß Sven



  • Windows kommt doch mit einem LDAP Client daher bzw die Server auch mit einem LDAP Server . DNS Zone aufsetzten ( Sufix anpassen vorher ) , dann dcpromo in der Shell.

    Um mit einem Linux LDAP zu komunizieren gibt es auch Möglichkeiten über die SUA.

    Vorteile der MS Verison ist das Zusammenspiel vom LDAP und dem geteilten Kerberos Dienst sowie GP´s und diverses anderes.


Anmelden zum Antworten