func ldapDial(ls Ldapsource) (*goldap.Conn, error) { if ls.UseSSL { return goldap.DialTLS("tcp", fmt.Sprintf("%s:%d", ls.Host, ls.Port), nil) } else { return goldap.Dial("tcp", fmt.Sprintf("%s:%d", ls.Host, ls.Port)) } }
// searchEntry : search an LDAP source if an entry (name, passwd) is valide and in the specific filter func (ls Ldapsource) searchEntry(name, passwd string) (string, bool) { l, err := goldap.Dial("tcp", fmt.Sprintf("%s:%d", ls.Host, ls.Port)) if err != nil { log.Debug("LDAP Connect error, disabled source %s", ls.Host) ls.Enabled = false return "", false } defer l.Close() nx := fmt.Sprintf(ls.MsAdSAFormat, name) err = l.Bind(nx, passwd) if err != nil { log.Debug("LDAP Authan failed for %s, reason: %s", nx, err.Error()) return "", false } search := goldap.NewSearchRequest( ls.BaseDN, goldap.ScopeWholeSubtree, goldap.NeverDerefAliases, 0, 0, false, fmt.Sprintf(ls.Filter, name), []string{ls.Attributes}, nil) sr, err := l.Search(search) if err != nil { log.Debug("LDAP Authen OK but not in filter %s", name) return "", false } log.Debug("LDAP Authen OK: %s", name) if len(sr.Entries) > 0 { r := sr.Entries[0].GetAttributeValue(ls.Attributes) return r, true } return "", true }