# README
This package is a work in progress.
ldapserver is a helper library for building server software capable of speaking the LDAP protocol. This could be an alternate implementation of LDAP, a custom LDAP proxy or even a completely different backend capable of "masquerading" its API as a LDAP Server.
The package supports
- All basic LDAP Operations (bind, search, add, compare, modify, delete, extended)
- SSL
- StartTLS
- Unbind request is implemented, but is handled internally to close the connection.
- Graceful stopping
- Basic request routing inspired by net/http ServeMux
- Logger customisation (log interface)
Default behaviors
Abandon request
If you don't set a route to handle AbandonRequest, the package will handle it for you. (signal sent to message.Done chan)
No Route Found
When no route matches the request, the server will first try to call a special NotFound route, if nothing is specified, it will return an UnwillingToResponse Error code (53)
Feel free to contribute, comment :)
Sample Code
// 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)
}
more examples
Look into the "examples" folder
# Packages
No description provided by the author
# Functions
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewRouteMux returns a new *RouteMux RouteMux implements ldapserver.Handler.
No description provided by the author
No description provided by the author
NewServer return a LDAP Server.
# Constants
Constant to LDAP Request protocol Type names.
Constant to LDAP Request protocol Type names.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
LDAP Application Codes.
Constant to LDAP Request protocol Type names.
Constant to LDAP Request protocol Type names.
Constant to LDAP Request protocol Type names.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
Constant to LDAP Request protocol Type names.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
LDAP Result Codes.
Constant to LDAP Request protocol Type names.
Modify Request Operation code.
Modify Request Operation code.
Modify Request Operation code.
Extended operation responseName and requestName.
Extended operation responseName and requestName.
Extended operation responseName and requestName.
Extended operation responseName and requestName.
Extended operation responseName and requestName.
Extended operation responseName and requestName.
Constant to LDAP Request protocol Type names.
No description provided by the author
No description provided by the author
No description provided by the author
# Variables
DiscardingLogger can be used to disable logging output.
No description provided by the author
# Interfaces
Handler interface used to serve a LDAP Request message.
ResponseWriter interface is used by an LDAP handler to construct an LDAP response.
# Type aliases
HandlerFunc type is an adapter to allow the use of ordinary functions as LDAP handlers.