
Package ldapserver implements LDAP Server
Ce paquet est en cours de développement.
ldapserver est une bibliothèque d'aide pour construire des logiciels serveurs capables de parler le protocole LDAP. Cela peut être une implémentation alternative de LDAP, un proxy LDAP personnalisé ou même un backend complètement différent capable de « masquer » son API en tant que serveur LDAP.
Le paquet prend en charge
Si vous ne définissez pas de route pour gérer AbandonRequest, le paquet le gérera pour vous. (signal envoyé au canal message.Done)
Lorsqu'aucune route ne correspond à la requête, le serveur essaiera d'abord d'appeler une route spéciale NotFound ; si rien n'est spécifié, il retournera un code d'erreur UnwillingToResponse (53)
N'hésitez pas à contribuer, à commenter :)
// 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)
}
Regardez dans le dossier « examples »