Добрый день всем!
Ребята хочу локалатьно покрутить LDAP запросы на локальной машине. Никак не могу разобраться почему не получается поднять сервер со стандартным package
https://pkg.go.dev/github.com/go-ldap/ldap/v3. Уже в тупую испоьзую примеры там указанные, правда меняю адрес сервера на локлхост, и соответственно запускаю его через http.ListenAndServe, но все равно никак.
Нашел еще какой-то package
https://github.com/vjeantet/ldapserver и там пример запускается без вопросов. Смотрел их функцию для запуска сервера и она ничем не отличается толком.
пример кода который не запускается:
package main
import (
"fmt",
"github.com/go-ldap/ldap/v3",
"log",
"net/http"
)
func main() {
http.ListenAndServe(":389", nil)
l, err := ldap.DialURL("ldap://localhost:389")
if err != nil {
log.Fatal(err)
}
defer l.Close()
controls := []ldap.Control{}
controls = append(controls, ldap.NewControlBeheraPasswordPolicy())
bindRequest := ldap.NewSimpleBindRequest("cn=admin,dc=example,dc=com", "password", controls)
r, err := l.SimpleBind(bindRequest)
ppolicyControl := ldap.FindControl(r.Controls, ldap.ControlTypeBeheraPasswordPolicy)
var ppolicy *ldap.ControlBeheraPasswordPolicy
if ppolicyControl != nil {
ppolicy = ppolicyControl.(*ldap.ControlBeheraPasswordPolicy)
} else {
log.Printf("ppolicyControl response not available.\n")
}
if err != nil {
errStr := "ERROR: Cannot bind: " + err.Error()
if ppolicy != nil && ppolicy.Error >= 0 {
errStr += ":" + ppolicy.ErrorString
}
log.Print(errStr)
} else {
logStr := "Login Ok"
if ppolicy != nil {
if ppolicy.Expire >= 0 {
logStr += fmt.Sprintf(". Password expires in %d seconds\n", ppolicy.Expire)
} else if ppolicy.Grace >= 0 {
logStr += fmt.Sprintf(". Password expired, %d grace logins remain\n", ppolicy.Grace)
}
}
log.Print(logStr)
}
}
Может кто может подсказать, где искать ошибку?
И второе как правильно создавать объекты и их добавлять? Возможно сначала надо как-то инициализировать саму схему?
Заранее спасибо за любую помощь.
С уважением,
Стас