mirror of https://github.com/daffainfo/nuclei.git
implement a generic search that returns a list of objects given a filter and desired attributes
parent
73a73eeeac
commit
fe59057c0d
|
@ -77,6 +77,35 @@ func (c *LdapClient) Connect(host string, port int, ssl, istls bool) (bool, erro
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Search is a method that uses the already Connect()'ed client to query the LDAP
|
||||||
|
// server, works for openldap and for Microsoft's Active Directory Ldap
|
||||||
|
//
|
||||||
|
// accepts whatever filter and returns a list of maps having provided attributes
|
||||||
|
// as keys and associated values mirroring the ones returned by ldap
|
||||||
|
func (c *LdapClient) Search(filter string, attributes ...string) ([]map[string][]string, error) {
|
||||||
|
res, err := c.Conn.Search(ldap.NewSearchRequest(
|
||||||
|
c.BaseDN, ldap.ScopeWholeSubtree, ldap.NeverDerefAliases,
|
||||||
|
0, 0, false, filter, attributes, nil,
|
||||||
|
))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(res.Entries) == 0 {
|
||||||
|
return nil, fmt.Errorf("no result found in search")
|
||||||
|
}
|
||||||
|
|
||||||
|
var out []map[string][]string
|
||||||
|
for _, r := range res.Entries {
|
||||||
|
app := make(map[string][]string)
|
||||||
|
for _, a := range attributes {
|
||||||
|
app[a] = r.GetAttributeValues(a)
|
||||||
|
}
|
||||||
|
out = append(out, app)
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// CollectLdapMetadata collects metadata from ldap server.
|
// CollectLdapMetadata collects metadata from ldap server.
|
||||||
func (c *LdapClient) CollectLdapMetadata(domain string, controller string) (LDAPMetadata, error) {
|
func (c *LdapClient) CollectLdapMetadata(domain string, controller string) (LDAPMetadata, error) {
|
||||||
opts := &ldapSessionOptions{
|
opts := &ldapSessionOptions{
|
||||||
|
|
Loading…
Reference in New Issue