
Das Paket ldapserver implementiert einen LDAP-Server.
Dieses Paket ist noch in Arbeit.
ldapserver ist eine Hilfsbibliothek zum Erstellen von Serversoftware, die das LDAP-Protokoll beherrscht. Das kann eine alternative Implementierung von LDAP, ein benutzerdefinierter LDAP-Proxy oder sogar ein völlig anderes Backend sein, das seine API als LDAP-Server ausgeben kann.
Das Paket unterstützt
Wenn Sie keine Route zur Behandlung von AbandonRequest festlegen, übernimmt das Paket das für Sie. (Signal wird an message.Done chan gesendet)
Wenn keine Route mit der Anfrage übereinstimmt, versucht der Server zunächst, eine spezielle NotFound-Route aufzurufen. Wenn nichts angegeben ist, wird ein UnwillingToResponse-Fehlercode (53) zurückgegeben.
Gerne beitragen, kommentieren :)
// Listen to 10389 port for LDAP Request
// and route bind request to the handleBind func
package main
import (
"log"
"os"
"os/signal"
"syscall"
ldap "github.com/vjeantet/ldapserver"
)
func main() {
//ldap logger
ldap.Logger = log.New(os.Stdout, "[server] ", log.LstdFlags)
//Create a new LDAP Server
server := ldap.NewServer()
routes := ldap.NewRouteMux()
routes.Bind(handleBind)
server.Handle(routes)
// listen on 10389
go server.ListenAndServe("127.0.0.1:10389")
// When CTRL+C, SIGINT and SIGTERM signal occurs
// Then stop server gracefully
ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
<-ch
close(ch)
server.Stop()
}
// handleBind return Success if login == mysql
func handleBind(w ldap.ResponseWriter, m *ldap.Message) {
r := m.GetBindRequest()
res := ldap.NewBindResponse(ldap.LDAPResultSuccess)
if string(r.Name()) == "myLogin" {
w.Write(res)
return
}
log.Printf("Bind failed User=%s, Pass=%s", string(r.Name()), string(r.AuthenticationSimple()))
res.SetResultCode(ldap.LDAPResultInvalidCredentials)
res.SetDiagnosticMessage("invalid credentials")
w.Write(res)
}
Schauen Sie in den Ordner "examples"