
Package ldapserver implements LDAP Server
Este pacote é um trabalho em andamento.
ldapserver é uma biblioteca auxiliar para construir software de servidor capaz de falar o protocolo LDAP. Pode ser uma implementação alternativa do LDAP, um proxy LDAP personalizado ou até mesmo um backend completamente diferente capaz de "mascarar" sua API como um Servidor LDAP.
O pacote suporta
Se você não definir uma rota para lidar com AbandonRequest, o pacote tratará para você. (sinal enviado para o canal message.Done)
Quando nenhuma rota corresponde à requisição, o servidor primeiro tentará chamar uma rota especial NotFound; se nada for especificado, retornará um código de erro UnwillingToResponse (53)
Sinta-se à vontade para contribuir, 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)
}
Olhe na pasta "examples"