
Package ldapserver implements LDAP Server
यह पैकेज कार्य प्रगति पर है।
ldapserver एक सहायक लाइब्रेरी है जो LDAP प्रोटोकॉल बोलने में सक्षम सर्वर सॉफ्टवेयर बनाने के लिए है। यह LDAP का एक वैकल्पिक कार्यान्वयन, एक कस्टम LDAP प्रॉक्सी या एक पूरी तरह से अलग बैकएंड हो सकता है जो अपने API को LDAP सर्वर के रूप में 'प्रच्छन्न' करने में सक्षम है।
पैकेज निम्नलिखित का समर्थन करता है
यदि आप AbandonRequest को संभालने के लिए कोई रूट नहीं सेट करते हैं, तो पैकेज इसे आपके लिए संभालेगा। (message.Done चैनल को सिग्नल भेजा गया)
जब कोई रूट अनुरोध से मेल नहीं खाता है, तो सर्वर पहले एक विशेष NotFound रूट को कॉल करने का प्रयास करेगा, यदि कुछ भी निर्दिष्ट नहीं है, तो यह UnwillingToResponse त्रुटि कोड (53) लौटाएगा
योगदान करने, टिप्पणी करने के लिए स्वतंत्र महसूस करें :)
// 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)
}
'examples' फ़ोल्डर में देखें