
El paquete ldapserver implementa un servidor LDAP.
Este paquete está en desarrollo.
ldapserver es una librería auxiliar para crear software de servidor capaz de hablar el protocolo LDAP. Podría ser una implementación alternativa de LDAP, un proxy LDAP personalizado o incluso un backend completamente diferente capaz de "enmascarar" su API como un servidor LDAP.
El paquete soporta
Si no configuras una ruta para manejar AbandonRequest, el paquete lo manejará por ti. (señal enviada al canal message.Done)
Cuando ninguna ruta coincide con la solicitud, el servidor primero intentará llamar a una ruta especial NotFound; si no se especifica ninguna, devolverá un código de error UnwillingToResponse (53)
No dudes en contribuir y comentar :)
// 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)
}
Mira la carpeta "examples"