(groupInput string, baseDN string, conn *ldap.Conn)
| 8 | ) |
| 9 | |
| 10 | func NetNestedGroupQuery(groupInput string, baseDN string, conn *ldap.Conn) []string { |
| 11 | |
| 12 | var queryResult []string |
| 13 | |
| 14 | nestedQuery := fmt.Sprintf("(memberof:1.2.840.113556.1.4.1941:=CN=%s,OU=Groups,%s)", groupInput, baseDN) |
| 15 | searchReq := Globals.LdapSearch(baseDN, nestedQuery) // Search the baseDN |
| 16 | result, err := conn.Search(searchReq) // Execute the search |
| 17 | if err != nil { |
| 18 | fmt.Printf("Query error, %s", err) |
| 19 | } |
| 20 | |
| 21 | // if LdapSearch returns information |
| 22 | if len(result.Entries) > 0 { |
| 23 | for i := 1; i < len(result.Entries); i++ { |
| 24 | queryResult = append(queryResult, result.Entries[i].GetAttributeValues("sAMAccountName")[0]) |
| 25 | } |
| 26 | } |
| 27 | |
| 28 | //For each result, check if group |
| 29 | for i := 0; i < len(queryResult); i++ { |
| 30 | query := fmt.Sprintf("(sAMAccountName=%s)", queryResult[i]) // build the query |
| 31 | searchReq3 := Globals.LdapSearch(baseDN, query) |
| 32 | |
| 33 | result3, err := conn.Search(searchReq3) // get results |
| 34 | if err != nil { |
| 35 | fmt.Printf("Query error, %s", err) |
| 36 | } |
| 37 | |
| 38 | objectClass := result3.Entries[0].GetAttributeValues("objectClass") |
| 39 | isGroup := false |
| 40 | |
| 41 | for i := 0; i < len(objectClass); i++ { |
| 42 | if result3.Entries[0].GetAttributeValues("objectClass")[i] == "group" { |
| 43 | isGroup = true |
| 44 | } |
| 45 | } |
| 46 | //If result is a group, append (Group) to result |
| 47 | if isGroup { |
| 48 | queryResult[i] = fmt.Sprintf("%s (Group)", queryResult[i]) |
| 49 | } |
| 50 | |
| 51 | } |
| 52 | |
| 53 | return queryResult |
| 54 | } // end NetNestedGroupQuery |
| 55 | |
| 56 | func ReturnNestedGroupQuery(groupInput string, baseDN string, conn *ldap.Conn) (queryResult string) { |
| 57 | var nestedGroupMembers []string = NetNestedGroupQuery(groupInput, baseDN, conn) // Get nested group members |
no test coverage detected