From 89d30d94d6c8515919dfa3a40bf07ae162991c01 Mon Sep 17 00:00:00 2001 From: 5amu Date: Sun, 21 Jan 2024 16:55:17 +0100 Subject: [PATCH] implement generic method to find AD objects --- pkg/js/libs/ldap/adenum.go | 55 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 pkg/js/libs/ldap/adenum.go diff --git a/pkg/js/libs/ldap/adenum.go b/pkg/js/libs/ldap/adenum.go new file mode 100644 index 00000000..db8da6e7 --- /dev/null +++ b/pkg/js/libs/ldap/adenum.go @@ -0,0 +1,55 @@ +package ldap + +import ( + "fmt" + + "github.com/go-ldap/ldap/v3" +) + +type ADObject struct { + DistinguishedName string + SAMAccountName string + PWDLastSet string + LastLogon string + MemberOf []string + ServicePrincipalName []string +} + +func (c *LdapClient) FindADObjects(filter string) ([]ADObject, error) { + sr := ldap.NewSearchRequest( + c.BaseDN, ldap.ScopeWholeSubtree, + ldap.NeverDerefAliases, 0, 0, false, + filter, + []string{ + "distinguishedName", + "sAMAccountName", + "pwdLastSet", + "lastLogon", + "memberOf", + "servicePrincipalName", + }, + nil, + ) + + res, err := c.Conn.Search(sr) + if err != nil { + return nil, err + } + + if len(res.Entries) == 0 { + return nil, fmt.Errorf("no object returned from query") + } + + var objects []ADObject + for _, obj := range res.Entries { + objects = append(objects, ADObject{ + DistinguishedName: obj.GetAttributeValue("distinguishedName"), + SAMAccountName: obj.GetAttributeValue("sAMAccountName"), + PWDLastSet: obj.GetAttributeValue("pwdLastSet"), + LastLogon: obj.GetAttributeValue("lastLogon"), + MemberOf: obj.GetAttributeValues("memberOf"), + ServicePrincipalName: obj.GetAttributeValues("servicePrincipalName"), + }) + } + return objects, nil +}