/
main.go
84 lines (69 loc) · 1.64 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package main
import (
"flag"
"fmt"
"os"
"strings"
"text/template"
"github.com/go-ldap/ldap"
"github.com/spektroskop/util"
"github.com/spf13/viper"
)
func main() {
flag.Usage = func() {
fmt.Println(`ldapr -term "TERM" [-attr NAME,...] -tmpl "TEMPLATE"`)
os.Exit(2)
}
term := flag.String("term", "", "")
attr := flag.String("attr", "", "")
tmpl := flag.String("tmpl", "", "")
flag.Parse()
viper.SetConfigName("ldapr")
viper.SetConfigType("toml")
viper.AddConfigPath(".")
viper.AddConfigPath("~")
if err := viper.ReadInConfig(); err != nil {
util.Error(err, 1)
}
conn, err := ldap.Dial("tcp", viper.GetString("server"))
if err != nil {
util.Error(err, 1)
}
if err := conn.Bind(viper.GetString("user"), viper.GetString("password")); err != nil {
util.Error(err, 1)
}
var attrs []string
if *attr != "" {
attrs = strings.Split(*attr, ",")
}
if res, err := conn.SearchWithPaging(ldap.NewSearchRequest(viper.GetString("base"),
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
*term, attrs, []ldap.Control{},
), 1000); err != nil {
util.Error(err, 1)
} else {
if *tmpl != "" {
for _, entry := range res.Entries {
m := map[string]string{
"DN": entry.DN,
}
for _, attr := range entry.Attributes {
m[attr.Name] = strings.Join(attr.Values, ",")
}
if *tmpl != "" {
tmp, err := template.New("ldapr").Parse(strings.TrimSpace(*tmpl) + "\n")
if err != nil {
util.Error(err, 1)
}
if err := tmp.Execute(os.Stdout, m); err != nil {
util.Error(err, 1)
}
}
}
} else {
for _, entry := range res.Entries {
entry.PrettyPrint(0)
}
}
}
}