mirror of
https://github.com/sairson/Yasso.git
synced 2026-02-03 18:43:38 +08:00
198 lines
5.5 KiB
Go
198 lines
5.5 KiB
Go
package query
|
|
|
|
import (
|
|
"Yasso/core/logger"
|
|
"github.com/jedib0t/go-pretty/v6/table"
|
|
"gopkg.in/ldap.v2"
|
|
"os"
|
|
)
|
|
|
|
type Server struct {
|
|
LdapServer string // dc地址
|
|
LdapUser string // 用户名(域用户即可)
|
|
LdapPassword string // 密码
|
|
}
|
|
|
|
// ldap的连接函数
|
|
func (s *Server) ldapConn() (*ldap.Conn, bool, error) {
|
|
conn, err := ldap.Dial("tcp", s.LdapServer)
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
if err := conn.Bind(s.LdapUser, s.LdapPassword); err != nil {
|
|
return nil, false, err
|
|
}
|
|
return conn, true, nil
|
|
}
|
|
|
|
func LdapListQuery(dc, user, pass, baseDN, command, filter, name string, all bool) {
|
|
server := Server{
|
|
LdapServer: dc,
|
|
LdapPassword: pass,
|
|
LdapUser: user,
|
|
}
|
|
conn, flag, err := server.ldapConn()
|
|
defer conn.Close()
|
|
if flag == false || err != nil {
|
|
logger.Fatal("ldap server connect failed")
|
|
return
|
|
}
|
|
if all == true {
|
|
// 查询全部ldap并采用full-data过滤器
|
|
for i, f := range LdapCommandAndFilter {
|
|
err := LdapQuery(conn, baseDN, i, f, name)
|
|
if err != nil {
|
|
logger.Fatal(err.Error())
|
|
return
|
|
}
|
|
}
|
|
} else {
|
|
err := LdapQuery(conn, baseDN, command, filter, name)
|
|
if err != nil {
|
|
logger.Fatal(err.Error())
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// LdapQuery 传入baseDN,
|
|
func LdapQuery(conn *ldap.Conn, baseDN string, command string, filter string, name string) error {
|
|
t := table.NewWriter()
|
|
t.SetOutputMirror(os.Stdout)
|
|
t.AppendHeader(table.Row{ldapCommands[command]})
|
|
t.SetColumnConfigs([]table.ColumnConfig{
|
|
{
|
|
Name: ldapCommands[command],
|
|
WidthMin: 20,
|
|
WidthMax: 100,
|
|
},
|
|
})
|
|
if command == "users" && filter == "list" && name == "" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "users" && filter == "full-data" && name == "" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "users" && name != "" && filter != "membership" {
|
|
if err := LdapSpecificFullResolver(t, conn, baseDN, name, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "users" && name != "" && filter == "membership" {
|
|
if err := LdapUserMemberShipResolver(t, conn, baseDN, name, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "computers" && filter == "list" && name == "" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "computers" && filter == "full-data" && name == "" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "computers" && name != "" {
|
|
if err := LdapSpecificFullResolver(t, conn, baseDN, name, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "groups" && filter == "list" && name == "" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "groups" && filter == "full-data" && name == "" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "groups" && name != "" && filter != "membership" {
|
|
if err := LdapSpecificFullResolver(t, conn, baseDN, name, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "groups" && filter == "membership" && name != "" {
|
|
if err := LdapGroupResolver(t, conn, baseDN, name); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "dc" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "domain-trust" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "spn" && filter == "list" && name == "" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "spn" && filter == "full-data" && name == "" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "spn" && name != "" {
|
|
if err := LdapSpecificFullResolver(t, conn, baseDN, name, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "never-loggedon" && filter == "list" && name == "" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "gpo" && name == "" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "ou" && name == "" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "ms-sql" && filter == "list" && name == "" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "ms-sql" && filter == "full-data" && name == "" {
|
|
if err := LdapFullResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "ms-sql" && name != "" {
|
|
if err := LdapSpecificFullResolver(t, conn, baseDN, name, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "asreproast" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "unconstrained" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
if command == "admin-priv" {
|
|
if err := LdapListResolver(t, conn, baseDN, command); err != nil {
|
|
logger.Fatal(err.Error())
|
|
}
|
|
}
|
|
t.Render()
|
|
return nil
|
|
}
|