-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathldapgroupadd.sh
More file actions
139 lines (122 loc) · 3.08 KB
/
ldapgroupadd.sh
File metadata and controls
139 lines (122 loc) · 3.08 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/bash
printhelp()
{
echo "Usage: $0 [options] GROUP
Options:
-g, --gid GID use GID for the new group
-h, --help display this help message and exit
-m, --members USERS list of users of the new group
-f, --bindfile set url,binddn,bindpasswd with file
-H, --url URL LDAP Uniform Resource Identifier(s)
-D, --binddn DN bind DN
-w, --bindpasswd PASSWORD bind password"
exit 0
}
argnum=$#
if [ $argnum -eq 0 ]
then
printhelp
exit 0
fi
groupname=""
gid=""
users=""
url=""
binddn=""
bindpasswd=""
for a in $(seq 1 1 $argnum)
do
nowarg=$1
case "$nowarg" in
-h|--help)
printhelp
;;
-g|--gid)
shift
gid=$1
;;
-m|--members)
shift
users=$(echo $1 | sed "s/,/ /g")
;;
-f|--bindfile)
shift
url=$(yq e '.url' $1)
if [ "$url" == "null" ]
then
url=""
fi
binddn=$(yq e '.binddn' $1)
if [ "$binddn" == "null" ]
then
binddn=""
fi
bindpasswd=$(yq e '.bindpasswd' $1)
if [ "$bindpasswd" == "null" ]
then
bindpasswd=""
fi
;;
-H|--url)
shift
url=$1
;;
-D|--binddn)
shift
binddn=$1
;;
-w|--bindpasswd)
shift
bindpasswd=$1
;;
*)
if [ "$nowarg" = "" ]
then
break
fi
groupname=$1
;;
esac
shift
done
if [ "$groupname" = "" ] || [ "$binddn" = "" ]
then
echo "Please add your groupname and ldapbinddn."
printhelp
fi
if [ "$bindpasswd" = "" ]
then
read -p "Enter LDAP Password: " -s bindpasswd
fi
if [ "$url" != "" ]
then
ldapurl="-H $url"
fi
basedn=$(echo $(for a in $(echo "$binddn" | sed "s/,/ /g"); do printf "%s," $(echo $a | grep dc=); done) | sed "s/^,//g" | sed "s/,$//g")
gid=$(echo $gid | sed "s/[^0-9]//g")
if [ "$gid" = "" ]
then
gid=$(($(ldapsearch -x $ldapurl -D "$binddn" -w "$bindpasswd" -b "$basedn" "(objectClass=posixGroup)" -LLL | grep gidNumber: | awk '{print $2}' | sort -n | tail -n 1 | sed "s/[^0-9]//g") + 1))
fi
if [ "$gid" = "1" ]
then
gid=10000
fi
echo "dn: cn=$groupname,ou=groups,$basedn
objectClass: posixGroup
objectClass: memberGroup
cn: $groupname
gidNumber: $gid" | ldapadd -x $ldapurl -D "$binddn" -w "$bindpasswd"
for a in $users
do
if [ "$(ldapsearch -x $ldapurl -D "$binddn" -w "$bindpasswd" -b "$basedn" "(&(objectClass=person)(uid=$a))" -LLL)" != "" ]
then
echo "dn: cn=$groupname,ou=groups,$basedn
changetype: modify
add: memberUid
memberUid: $a
-
add: member
member: cn=$a,ou=people,$basedn" | ldapmodify -x $ldapurl -D "$binddn" -w "$bindpasswd"
fi
done