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 }