本文整理汇总了Golang中github.com/go-ldap/ldap.NewSearchRequest函数的典型用法代码示例。如果您正苦于以下问题:Golang NewSearchRequest函数的具体用法?Golang NewSearchRequest怎么用?Golang NewSearchRequest使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewSearchRequest函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: SearchGroup
func (ls *LdapSource) SearchGroup(name string) (*models.Group, error) {
l, err := ls.dial()
if err != nil {
return nil, err
}
err = l.Bind(ls.BindDN, ls.Passwd)
if err != nil {
log.Printf("ERROR: Cannot bind: %s\n", err.Error())
return nil, err
}
search := ldap.NewSearchRequest(
fmt.Sprintf(groupDnFmt, name, ls.Base),
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
"(objectclass=groupOfNames)",
[]string{"member"},
nil)
sr, err := l.Search(search)
if err != nil {
// log.Printf("LDAP search error: %s", err)
return nil, err
}
vals := sr.Entries[0].GetAttributeValues("member")
members := make([]string, len(vals))
for i, dn := range vals {
members[i] = dn[strings.Index(dn, "=")+1 : strings.Index(dn, ",")]
}
return &models.Group{name, members}, nil
}
开发者ID:gooops,项目名称:staffio,代码行数:33,代码来源:group.go
示例2: ListPaged
func (ls *LdapSource) ListPaged(limit int) (staffs []*models.Staff) {
err := ls.Bind(ls.BindDN, ls.Passwd, false)
if err != nil {
// log.Printf("ERROR: Cannot bind: %s\n", err.Error())
return nil
}
if limit < 1 {
limit = 1
}
search := ldap.NewSearchRequest(
"ou=people,"+ls.Base,
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
ls.Filter,
ls.Attributes,
nil)
sr, err := ls.c.SearchWithPaging(search, uint32(limit))
if err != nil {
log.Printf("ERROR: %s for search %v\n", err, search)
return
}
if len(sr.Entries) > 0 {
staffs = make([]*models.Staff, len(sr.Entries))
for i, entry := range sr.Entries {
staffs[i] = entryToUser(entry)
}
}
return
}
开发者ID:gooops,项目名称:staffio,代码行数:32,代码来源:ldap.go
示例3: Example_userAuthentication
// Example User Authentication shows how a typical application can verify a login attempt
func Example_userAuthentication() {
// The username and password we want to check
username := "someuser"
password := "userpassword"
bindusername := "readonly"
bindpassword := "password"
l, err := ldap.Dial("tcp", fmt.Sprintf("%s:%d", "ldap.example.com", 389))
if err != nil {
log.Fatal(err)
}
defer l.Close()
// Reconnect with TLS
err = l.StartTLS(&tls.Config{InsecureSkipVerify: true})
if err != nil {
log.Fatal(err)
}
// First bind with a read only user
err = l.Bind(bindusername, bindpassword)
if err != nil {
log.Fatal(err)
}
// Search for the given username
searchRequest := ldap.NewSearchRequest(
"dc=example,dc=com",
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
fmt.Sprintf("(&(objectClass=organizationalPerson)&(uid=%s))", username),
[]string{"dn"},
nil,
)
sr, err := l.Search(searchRequest)
if err != nil {
log.Fatal(err)
}
if len(sr.Entries) != 1 {
log.Fatal("User does not exist or too many entries returned")
}
userdn := sr.Entries[0].DN
// Bind as the user to verify their password
err = l.Bind(userdn, password)
if err != nil {
log.Fatal(err)
}
// Rebind as the read only user for any futher queries
err = l.Bind(bindusername, bindpassword)
if err != nil {
log.Fatal(err)
}
}
开发者ID:mbrukman,项目名称:grafana,代码行数:59,代码来源:example_test.go
示例4: NewSearchRequest
// NewSearchRequest creates a new search request for the LDAP query and optionally includes more attributes
func (q *LDAPQuery) NewSearchRequest(additionalAttributes []string) *ldap.SearchRequest {
return ldap.NewSearchRequest(
q.BaseDN,
int(q.Scope),
int(q.DerefAliases),
0, // allowed return size - indicates no limit
q.TimeLimit,
false, // not types only
q.Filter,
additionalAttributes,
nil, // no controls
)
}
开发者ID:rusenask,项目名称:origin,代码行数:14,代码来源:query.go
示例5: buildDNQuery
// buildDNQuery builds the query that finds an LDAP entry with the given DN
// this is done by setting the DN to be the base DN for the search and setting the search scope
// to only consider the base object found
func (o *LDAPQueryOnAttribute) buildDNQuery(dn string, attributes []string) *ldap.SearchRequest {
return ldap.NewSearchRequest(
dn,
ldap.ScopeBaseObject, // over-ride original
int(o.DerefAliases),
0, // allowed return size - indicates no limit
o.TimeLimit,
false, // not types only
"objectClass=*", // filter that returns all values
attributes,
nil, // no controls
)
}
开发者ID:rusenask,项目名称:origin,代码行数:16,代码来源:query.go
示例6: _getBaseDN
func (_s *LDAP) _getBaseDN(rLog SBMSystem.LogFile, search, basedn string) string {
var uattr = []string{"dn"}
lsearch := ldap.NewSearchRequest(basedn, 2, ldap.NeverDerefAliases, 0, 0, false, search, uattr, nil)
sr, err := _s.D.Search(lsearch)
if err != nil {
rLog.LogDbg(0, "LDAP::Search() ", basedn, " error: ", err)
}
if len(sr.Entries) > 0 {
for _, entry := range sr.Entries {
return entry.DN
}
}
return ""
}
开发者ID:BestianRU,项目名称:SABModules,代码行数:16,代码来源:LDAP.go
示例7: getEntry
func (ls *LdapSource) getEntry(udn string) (*ldap.Entry, error) {
search := ldap.NewSearchRequest(
udn,
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
ls.Filter,
ls.Attributes,
nil)
sr, err := ls.c.Search(search)
if err != nil {
log.Printf("LDAP Search '%s' Error: ", udn, err)
return nil, err
}
if len(sr.Entries) > 0 {
return sr.Entries[0], nil
}
return nil, ErrNotFound
}
开发者ID:gooops,项目名称:staffio,代码行数:18,代码来源:ldap.go
示例8: inGroup
func inGroup(username, group string, config *Config, conn *ldap.Conn, attrs []string) (bool, map[string][]string, error) {
groupDN, err := getDN(group, config, conn)
if err != nil {
if config.Debug {
log.Printf("DEBUG: Error: %s\n", err)
}
return false, nil, err
}
search := ldap.NewSearchRequest(
config.BaseDN,
ldap.ScopeWholeSubtree,
ldap.DerefAlways,
1, 0,
false,
fmt.Sprintf("(sAMAccountName=%s)", username),
append(attrs, "memberOf"),
nil,
)
result, lErr := conn.Search(search)
if lErr != nil {
if config.Debug {
log.Printf("DEBUG: LDAP Error %v\n", lErr)
}
return false, nil, lErr
}
if len(result.Entries) == 1 {
entryAttrs := attrsToMap(result.Entries[0])
if groups, ok := entryAttrs["memberOf"]; ok {
for _, g := range groups {
if groupDN == g {
for _, key := range attrs {
if key == "memberOf" {
return true, entryAttrs, nil
}
}
delete(entryAttrs, "memberOf")
return true, entryAttrs, nil
}
}
}
return false, entryAttrs, nil
}
return false, nil, LDAPError("Amount of Entries returned was not one")
}
开发者ID:korylprince,项目名称:go-ad-auth,代码行数:44,代码来源:auth.go
示例9: _checkGroupMember
func (_s *LDAP) _checkGroupMember(rLog SBMSystem.LogFile, userDN, groupDN, baseDN string, recurse_count int) int {
var (
uattr = []string{"memberOf"}
result = int(-1)
)
if userDN == "" || groupDN == "" {
return -1
}
if recurse_count <= 0 {
return -1
}
lsearch := ldap.NewSearchRequest(userDN, 0, ldap.NeverDerefAliases, 0, 0, false, "(objectclass=*)", uattr, nil)
sr, err := _s.D.Search(lsearch)
if err != nil {
rLog.LogDbg(0, "LDAP::Search() ", userDN, " error: ", err)
}
if len(sr.Entries) > 0 {
for _, entry := range sr.Entries {
for _, attr := range entry.Attributes {
if attr.Name == "memberOf" {
for _, x := range attr.Values {
if groupDN == x {
return 0
} else {
if x != userDN {
result = _s._checkGroupMember(rLog, x, groupDN, baseDN, recurse_count-1)
if result == 0 {
return 0
}
}
}
}
}
}
}
}
return -1
}
开发者ID:BestianRU,项目名称:SABModules,代码行数:42,代码来源:LDAP.go
示例10: buildAttributeQuery
// buildAttributeQuery builds the query containing a filter that conjoins the common filter given
// in the configuration with the specific attribute filter for which the attribute value is given
func (o *LDAPQueryOnAttribute) buildAttributeQuery(attributeValue string,
attributes []string) *ldap.SearchRequest {
specificFilter := fmt.Sprintf("%s=%s",
ldap.EscapeFilter(o.QueryAttribute),
ldap.EscapeFilter(attributeValue))
filter := fmt.Sprintf("(&(%s)(%s))", o.Filter, specificFilter)
return ldap.NewSearchRequest(
o.BaseDN,
int(o.Scope),
int(o.DerefAliases),
0, // allowed return size - indicates no limit
o.TimeLimit,
false, // not types only
filter,
attributes,
nil, // no controls
)
}
开发者ID:rusenask,项目名称:origin,代码行数:22,代码来源:query.go
示例11: searchByName
// Search LDAP by cn filter
func searchByName(l *ldap.Conn, name string) (*ldap.SearchResult, error) {
filter := fmt.Sprintf("(cn=%v)", ReplaceAccents(name))
search := ldap.NewSearchRequest(
baseDN,
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
filter,
attributes,
nil)
sr, err := l.Search(search)
if err != nil {
return nil, err
}
switch {
case len(sr.Entries) == 0:
return sr, ErrNoResults
case len(sr.Entries) > 1:
return sr, ErrTooManyResults
}
return sr, nil
}
开发者ID:whitby,项目名称:vmanage,代码行数:22,代码来源:sync.go
示例12: getDN
func getDN(cn string, config *Config, conn *ldap.Conn) (string, error) {
search := ldap.NewSearchRequest(
config.BaseDN,
ldap.ScopeWholeSubtree,
ldap.DerefAlways,
1, 0,
false,
fmt.Sprintf("(cn=%s)", cn),
nil,
nil,
)
result, err := conn.Search(search)
if err != nil {
if config.Debug {
log.Printf("DEBUG: LDAP Error %v\n", err)
}
return "", err
}
if len(result.Entries) > 0 {
return result.Entries[0].DN, nil
}
return "", ConfigError(fmt.Sprintf("No DN found for: %s", cn))
}
开发者ID:korylprince,项目名称:go-ad-auth,代码行数:23,代码来源:auth.go
示例13: getAttrs
func getAttrs(username string, config *Config, conn *ldap.Conn, attrs []string) (map[string][]string, error) {
search := ldap.NewSearchRequest(
config.BaseDN,
ldap.ScopeWholeSubtree,
ldap.DerefAlways,
1, 0,
false,
fmt.Sprintf("(sAMAccountName=%s)", username),
attrs,
nil,
)
result, lErr := conn.Search(search)
if lErr != nil {
if config.Debug {
log.Printf("DEBUG: LDAP Error %v\n", lErr)
}
return nil, lErr
}
if len(result.Entries) == 1 {
return attrsToMap(result.Entries[0]), nil
}
return nil, LDAPError("Amount of Entries returned was not one")
}
开发者ID:korylprince,项目名称:go-ad-auth,代码行数:23,代码来源:auth.go
示例14: ExampleConn_Search
// ExampleConn_Search demonstrates how to use the search interface
func ExampleConn_Search() {
l, err := ldap.Dial("tcp", fmt.Sprintf("%s:%d", "ldap.example.com", 389))
if err != nil {
log.Fatal(err)
}
defer l.Close()
searchRequest := ldap.NewSearchRequest(
"dc=example,dc=com", // The base dn to search
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
"(&(objectClass=organizationalPerson))", // The filter to apply
[]string{"dn", "cn"}, // A list attributes to retrieve
nil,
)
sr, err := l.Search(searchRequest)
if err != nil {
log.Fatal(err)
}
for _, entry := range sr.Entries {
fmt.Printf("%s: %v\n", entry.DN, entry.GetAttributeValue("cn"))
}
}
开发者ID:mbrukman,项目名称:grafana,代码行数:25,代码来源:example_test.go
示例15: ldapSearch
//ldap search and return required attributes' value from searched entries
//default return entry's DN value if you leave attrs array empty
func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (string, error) {
if l == nil {
return "", fmt.Errorf("No ldap connection!")
}
glog.V(2).Infof("Searching...basedDN:%s, filter:%s", *baseDN, *filter)
searchRequest := ldap.NewSearchRequest(
*baseDN,
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
*filter,
*attrs,
nil)
sr, err := l.Search(searchRequest)
if err != nil {
return "", err
}
if len(sr.Entries) != 1 {
return "", fmt.Errorf("User does not exist or too many entries returned.")
}
var buffer bytes.Buffer
for _, entry := range sr.Entries {
if len(*attrs) == 0 {
glog.V(2).Infof("Entry DN = %s", entry.DN)
buffer.WriteString(entry.DN)
} else {
for _, attr := range *attrs {
values := strings.Join(entry.GetAttributeValues(attr), " ")
glog.V(2).Infof("Entry %s = %s", attr, values)
buffer.WriteString(values)
}
}
}
return buffer.String(), nil
}
开发者ID:frank12268,项目名称:docker_auth,代码行数:38,代码来源:ldap_auth.go
示例16: goNTUWork
//.........这里部分代码省略.........
if userIDGet > 0 {
userIDGet++
idxUsers = userIDGet
} else {
userIDGet = 0
userIDGet++
log.Println("Error get max user ID")
//return
}
}
*/
queryx = fmt.Sprintf("INSERT INTO z_cache_users (id, username, digesta1)\n\tVALUES (%d, '%s', '%s');", usID, usName, usPass)
queryx = fmt.Sprintf("%s\nINSERT INTO z_cache_principals (id, uri, email, displayname, vcardurl)\n\tVALUES (%d, 'principals/%s', NULL, NULL, NULL);", queryx, usID, usName)
queryx = fmt.Sprintf("%s\nINSERT INTO z_cache_addressbooks (id, principaluri, uri, ctag)\n\tVALUES (%d, 'principals/%s', 'default', 1); select id from users order by id desc limit 1", queryx, usID, usName)
//log.Printf("%s\n", queryx)
_, err = my.D.Query(queryx)
if err != nil {
log.Printf("03 MySQL::Query() error: %v\n", err)
log.Printf("%s\n", queryx)
return
}
pgrows2, err := pg.D.Query(fmt.Sprintf("select dn from aaa_dns where userid=%d;", usID))
if err != nil {
log.Printf("02 PG::Query() error: %v\n", err)
return
}
usDN := ""
for pgrows2.Next() {
pgrows2.Scan(&usDN)
log.Printf("\t\t\t%3d/%s - %s\n", usID, usName, usDN)
search := ldap.NewSearchRequest(usDN, 2, ldap.NeverDerefAliases, 0, 0, false, conf.Conf.LDAP_URL[0][4], ldap_Attr, nil)
sr, err := ld.D.Search(search)
if err != nil {
log.Printf("LDAP::Search() error: %v\n", err)
return
}
queryx = ""
if len(sr.Entries) > 0 {
for _, entry := range sr.Entries {
for k := 0; k < len(ldap_Attr); k++ {
x[ldap_VCard[k]] = ""
}
for _, attr := range entry.Attributes {
for k := 0; k < len(ldap_Attr); k++ {
if attr.Name == ldap_Attr[k] {
x[ldap_VCard[k]] = strings.Join(attr.Values, ",")
x[ldap_VCard[k]] = strings.Replace(x[ldap_VCard[k]], ",", "\n"+ldap_VCard[k]+":", -1)
}
}
}
y := fmt.Sprintf("BEGIN:VCARD\n")
for k := 0; k < len(ldap_Attr); k++ {
if x[ldap_VCard[k]] != "" {
if ldap_VCard[k] == "FN" {
fn_split := strings.Split(x[ldap_VCard[k]], " ")
fn_nofam := strings.Replace(x[ldap_VCard[k]], fn_split[0], "", -1)
fn_nofam = strings.Trim(fn_nofam, " ")
y = fmt.Sprintf("%s%s:%s %s\n", y, ldap_VCard[k], fn_nofam, fn_split[0])
} else {
switch usCDavPrefix {
case 2:
开发者ID:BestianRU,项目名称:SABookServices,代码行数:67,代码来源:CardDAVMaker.go
示例17: indexHandler
//.........这里部分代码省略.........
if err != nil {
fmt.Fprintf(w, err.Error())
log.Printf("LDAP::Bind() error: %v\n", err)
return
}
t, err := template.ParseFiles("templates/header.html")
if err != nil {
fmt.Fprintf(w, err.Error())
log.Println(err.Error())
return
}
t.ExecuteTemplate(w, "header", template.FuncMap{"Pagetitle": rconf.WLB_HTML_Title, "FRColor": xFRColor, "BGColor": xBGColor})
t, err = template.ParseFiles("templates/search.html")
if err != nil {
fmt.Fprintf(w, err.Error())
log.Println(err.Error())
return
}
t.ExecuteTemplate(w, "search", template.FuncMap{"GoHome": go_home_button, "PrevDN": dn_back, "DN": dn, "xSearch": xSearch, "xMessage": xMessage, "LineColor": "#EEEEEE", "LUserName": LUserName, "LoginShow": "Yes", "RedirectDN": r.RequestURI})
t, err = template.ParseFiles("templates/index.html")
if err != nil {
fmt.Fprintf(w, err.Error())
log.Println(err.Error())
return
}
if xSearchPplMode == 0 {
search := ldap.NewSearchRequest(dn, ldapSearchMode, ldap.NeverDerefAliases, 0, 0, false, ldap_Search, ldap_Attr, nil)
// log.Printf("Search: %v\n%v\n%v\n%v\n%v\n%v\n", search, dn, ldapSearchMode, ldap.NeverDerefAliases, ldap_Search, ldap_Attr)
sr, err := l.Search(search)
if err != nil {
fmt.Fprintf(w, err.Error())
log.Printf("LDAP::Search() error: %v\n", err)
return
}
// fmt.Printf("\n\nSearch: %v", search)
log.Printf("%s ++> search: %s // found: %d\n", remIPClient, search.Filter, len(sr.Entries))
if len(sr.Entries) > 0 {
dnList := make(map[string]tList, len(sr.Entries))
for _, entry := range sr.Entries {
fType := ""
fField := make(map[string]string, len(rconf.WLB_LDAP_ATTR))
for _, attr := range entry.Attributes {
for ckl1 := 0; ckl1 < len(rconf.WLB_LDAP_ATTR); ckl1++ {
if attr.Name == rconf.WLB_LDAP_ATTR[ckl1][0] {
fField[rconf.WLB_LDAP_ATTR[ckl1][1]] = fmt.Sprintf("%s", strings.Join(attr.Values, ","))
// fmt.Printf("Name: %s==%s --> %s = %s\n", attr.Name, rconf.WLB_LDAP_ATTR[ckl1][0], rconf.WLB_LDAP_ATTR[ckl1][1], fField[rconf.WLB_LDAP_ATTR[ckl1][1]])
if rconf.WLB_LDAP_ATTR[ckl1][1] == "ORGName" {
fType = "Org"
}
if rconf.WLB_LDAP_ATTR[ckl1][1] == "USERName" {
fType = "User"
}
}
}
开发者ID:BestianRU,项目名称:SABookServices,代码行数:67,代码来源:WebLDAPBook.go
示例18: main
func main() {
flag.Usage = func() {
fmt.Println(`ldapr -term "TERM" [-attr NAME,...] -tmpl "TEMPLATE"`)
os.Exit(2)
}
term := flag.String("term", "", "")
attr := flag.String("attr", "", "")
tmpl := flag.String("tmpl", "", "")
flag.Parse()
viper.SetConfigName("ldapr")
viper.SetConfigType("toml")
viper.AddConfigPath(".")
viper.AddConfigPath("~")
if err := viper.ReadInConfig(); err != nil {
util.Error(err, 1)
}
conn, err := ldap.Dial("tcp", viper.GetString("server"))
if err != nil {
util.Error(err, 1)
}
if err := conn.Bind(viper.GetString("user"), viper.GetString("password")); err != nil {
util.Error(err, 1)
}
var attrs []string
if *attr != "" {
attrs = strings.Split(*attr, ",")
}
if res, err := conn.SearchWithPaging(ldap.NewSearchRequest(viper.GetString("base"),
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
*term, attrs, []ldap.Control{},
), 1000); err != nil {
util.Error(err, 1)
} else {
if *tmpl != "" {
for _, entry := range res.Entries {
m := map[string]string{
"DN": entry.DN,
}
for _, attr := range entry.Attributes {
m[attr.Name] = strings.Join(attr.Values, ",")
}
if *tmpl != "" {
tmp, err := template.New("ldapr").Parse(strings.TrimSpace(*tmpl) + "\n")
if err != nil {
util.Error(err, 1)
}
if err := tmp.Execute(os.Stdout, m); err != nil {
util.Error(err, 1)
}
}
}
} else {
for _, entry := range res.Entries {
entry.PrettyPrint(0)
}
}
}
}
开发者ID:spektroskop,项目名称:ldapr,代码行数:70,代码来源:main.go
示例19: getIdentity
// getIdentity looks up a username in an LDAP server, and attempts to bind to the user's DN using the provided password
func (a *Authenticator) getIdentity(username, password string) (authapi.UserIdentityInfo, bool, error) {
defer func() {
if e := recover(); e != nil {
util.HandleError(fmt.Errorf("Recovered panic: %v, %s", e, debug.Stack()))
}
}()
if len(username) == 0 || len(password) == 0 {
return nil, false, nil
}
// Make the connection
l, err := a.connect()
if err != nil {
return nil, false, err
}
defer l.Close()
// If specified, bind the username/password for search phase
if len(a.options.BindDN) > 0 {
if err := l.Bind(a.options.BindDN, a.options.BindPassword); err != nil {
return nil, false, err
}
}
// & together the filter specified in the LDAP options with the user-specific filter
filter := fmt.Sprintf("(&%s(%s=%s))",
a.options.URL.Filter,
ldap.EscapeFilter(a.options.URL.QueryAttribute),
ldap.EscapeFilter(username),
)
// Build list of attributes to retrieve
attrs := util.NewStringSet(a.options.URL.QueryAttribute)
attrs.Insert(a.options.AttributeEmail...)
attrs.Insert(a.options.AttributeName...)
attrs.Insert(a.options.AttributePreferredUsername...)
attrs.Insert(a.options.AttributeID...)
// Search for LDAP record
searchRequest := ldap.NewSearchRequest(
a.options.URL.BaseDN, // base dn
int(a.options.URL.Scope), // scope
ldap.NeverDerefAliases, // deref
2, // size limit, we want to know if this is not unique, but don't want the entire tree
0, // no client-specified time limit, determined by LDAP server. TODO: make configurable?
false, // not types only
filter, // filter
attrs.List(), // attributes to retrieve
nil, // controls
)
glog.V(4).Infof("searching for %s", filter)
results, err := l.Search(searchRequest)
if err != nil {
return nil, false, err
}
if len(results.Entries) == 0 {
// 0 results means a missing username, not an error
glog.V(4).Infof("no entries matching %s", filter)
return nil, false, nil
}
if len(results.Entries) > 1 {
// More than 1 result means a misconfigured server filter or query parameter
return nil, false, fmt.Errorf("multiple entries found matching %q", username)
}
entry := results.Entries[0]
glog.V(4).Infof("found dn=%q for %s", entry.DN, filter)
// Bind with given username and password to attempt to authenticate
if err := l.Bind(entry.DN, password); err != nil {
glog.V(4).Infof("error binding password for %q: %v", entry.DN, err)
if err, ok := err.(*ldap.Error); ok {
switch err.ResultCode {
case ldap.LDAPResultInappropriateAuthentication:
// inappropriateAuthentication (48)
// Indicates the server requires the client that had attempted
// to bind anonymously or without supplying credentials to
// provide some form of credentials.
fallthrough
case ldap.LDAPResultInvalidCredentials:
// invalidCredentials (49)
// Indicates that the provided credentials (e.g., the user's name
// and password) are invalid.
// Authentication failed, return false, but no error
return nil, false, nil
}
}
return nil, false, err
}
// Build the identity
uid := getAttributeValue(entry, a.options.AttributeID)
if uid == "" {
return nil, false, fmt.Errorf("Could not retrieve a non-empty value from %v attributes for dn=%q", a.options.AttributeID, entry.DN)
}
//.........这里部分代码省略.........
开发者ID:dctse,项目名称:openshift-cucumber,代码行数:101,代码来源:ldap.go
示例20: AD_to_PG
func AD_to_PG(conf *SABModules.Config_STR, pg_minsert int) int {
var (
ckl_servers int
num_servers int
ckl = int(0)
queryx string
pg_AD_Create = string(`
CREATE TABLE IF NOT EXISTS XYZWorkTableZYX
(domain character varying(255), server character varying(255),
displayname character varying(255), cn character varying(255),
dlogin character varying(255), login character varying(255),
mail character varying(255),
ph_int character varying(255),
ph_mob character varying(255),
ph_ip character varying(255),
department character varying(255), title character varying(255),
dn character varying(255),
connected character varying(5) NOT NULL DEFAULT 'no'::character varying,
primary key (dlogin));
`)
pg_AD_Create_Status = string(`
CREATE TABLE IF NOT EXISTS XYZWorkTableZYX
(server character varying(255), status character varying(255),
primary key (server));
`)
return_result = int(0)
)
log.Printf("AD Export to PG...")
rusFindRegExp := regexp.MustCompile(`[А-Яа-я]`)
num_servers = len(conf.AD_LDAP)
// fmt.Printf("%d\n", num_servers)
for ckl = 0; ckl < num_servers; ckl++ {
conf.AD_LDAP[ckl][6] = "enabled"
}
db, err := sql.Open("postgres", conf.PG_DSN)
if err != nil {
log.Printf("PG::Open() error: %v\n", err)
return 10
}
defer db.Close()
queryx = strings.Replace(pg_AD_Create, "XYZWorkTableZYX", SABDefine.PG_Table_AD, -1)
_, err = db.Query(queryx)
if err != nil {
log.Printf("PG::Exec() error: %v\n", err)
return 11
}
queryx = strings.Replace(pg_AD_Create_Status, "XYZWorkTableZYX", SABDefine.PG_Table_AD_Status, -1)
_, err = db.Query(queryx)
if err != nil {
log.Printf("PG::Exec() error: %v\n", err)
return 12
}
for ckl_servers = 0; ckl_servers < num_servers; ckl_servers++ {
if conf.AD_LDAP[ckl_servers][6] != "enabled" {
continue
}
log.Printf("\t\tServer %2d of %2d / Pass 1 of 1 / Domain: %s, Controller: %s\n", ckl_servers+1, num_servers, conf.AD_LDAP[ckl_servers][0], conf.AD_LDAP[ckl_servers][1])
l, err := ldap.Dial("tcp", conf.AD_LDAP[ckl_servers][1])
if err != nil {
log.Printf("LDAP::Initialize() error: %v\n", err)
continue
}
defer l.Close()
// l.Debug = true
err = l.Bind(conf.AD_LDAP[ckl_servers][2], conf.AD_LDAP[ckl_servers][3])
if err != nil {
log.Printf("LDAP::Bind() error: %v\n", err)
continue
}
search := ldap.NewSearchRequest(conf.AD_LDAP[ckl_servers][4], ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, conf.AD_LDAP[ckl_servers][5], SABDefine.AD_attr, nil)
sr, err := l.Search(search)
if err != nil {
log.Printf("LDAP::Search() error: %v\n", err)
continue
}
log.Printf("\t\t\t%s // %d\n", search.Filter, len(sr.Entries))
if len(sr.Entries) > 10 {
timenow := time.Now().Format("2006.01.02 15:04:05")
queryx = fmt.Sprintf("INSERT INTO %s (server, status) select '%s', '%s' where not exists (select server from %s where server='%s'); update %s set status='%s' where server='%s'; ", SABDefine.PG_Table_AD_Status, conf.AD_LDAP[ckl_servers][1], timenow, SABDefine.PG_Table_AD_Status, conf.AD_LDAP[ckl_servers][1], SABDefine.PG_Table_AD_Status, timenow, conf.AD_LDAP[ckl_servers][1])
//.........这里部分代码省略.........
开发者ID:BestianRU,项目名称:SABookServices,代码行数:101,代码来源:02GetDatafromAD.go
注:本文中的github.com/go-ldap/ldap.NewSearchRequest函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论