2017-07-10 1 views
-1

Ich versuche FreeIPA Integration mit Golang mit Paket "gopkg.in/ldap.v2", ich erstellte eine Rolle mit dem Namen "Test" in FreeIPA UI und versuchte, diese RolleFree-IPA Ldap Intergration mit GO

zu suchen

über die Kommandozeile:

ldapsearch -D "cn = Directory Manager" -w "*****" -p 389 -h „EC2-test.eu-west-1.compute. amazonaws.com "-b" dc = ec2-Test, dc = eu-west-1, dc = berechnen, dc = amazonaws, dc = com "-v -s sub" (& (Objektklasse = *) (cn = test)) "

Ausgang:

ldap_initialize(ldap://ec2-test.eu-west-1.compute.amazonaws.com:389) filter: (&(objectclass=*)(cn=test)) requesting: All userApplication attributes 
# extended LDIF 
# 
# LDAPv3 
# base <dc=ec2-test,dc=eu-west-1,dc=compute,dc=amazonaws,dc=com> with scope subtree 
# filter: (&(objectclass=*)(cn=test)) 
# requesting: ALL 
# 

# test, roles, accounts, ec2-test.eu-west-1.compute.amazonaws.com 
dn: cn=test,cn=roles,cn=accounts,dc=ec2-test,dc=eu-west-1,dc=compute,dc=amazonaws,dc=com 
objectClass: groupofnames 
objectClass: nestedgroup 
objectClass: top 
cn: test 
member: uid=gow,cn=users,cn=accounts,dc=ec2-test,dc=eu-west-1,dc=comp ute,dc=amazonaws,dc=com 
member: cn=trov,cn=groups,cn=accounts,dc=ec2-test,dc=eu-west-1,dc=com pute,dc=amazonaws,dc=com 

# search result search: 2 result: 0 Success 

# numResponses: 2 
# numEntries: 1 

Ich versuche, dies mit meinem Go-Code zu integrieren. My go-Code ist:

filterValue := "(&(objectclass="*")(cn="test"))" 
searchRequest := ldap.NewSearchRequest(
    baseDN, // The base dn to search 
    ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, 
    filterValue, // The filter to apply 
    []string{"givenName", "sn", "mail", "uid", "ou", "cn", "dc", "dn"}, // A list attributes to retrieve 
    nil, 
) 
sr, err := ldap.Search(searchRequest) 
if err!=nil { 
    fmt.Println("Error: , err) 
} else { 
    fmt.Println("Result: , sr.Entries) 
} 

Leider mit golang Ich erhalte diese leere Einträge in sr.Entries

Kann mir jemand helfen zu bekommen.

Hinweis: Die adaequat für Benutzer und Gruppen.

+0

Sind Sie verbindlich wie "cn = Verzeichnis-Manager" für die Befehlszeile? Könnte ein Rechtsproblem sein. – jwilleke

+0

@jwilleke, danke für Ihre Antwort, tatsächlich verwenden wir go ldap sdk, wie ich oben erwähnt, in der Funktion mit der Suche nach Benutzern "ldap.NewSearchRequest" es ist nicht erlaubt, zusätzliche Parameter übergeben (cn = Verzeichnis-Manager) –

Antwort

0

Sie „wahrscheinlich“ müssen binden, bevor Sie die Suche starten etwas mit like:

// 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, 
    ) 

Lassen Sie mich wissen, wie ich helfen kann.

+0

Danke, aber schon habe ich das getan, weil wir erst einmal die bind-authentifizierung ldap mitteilen kann, um zu suchen. Kann ich eine REST-API für freepipa kennen? –