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
|
#
# LDAP modlist generation
#
# Copyright (c) 2015 Red Hat, Inc.
# Author: Nikolai Kondrashov <Nikolai.Kondrashov@redhat.com>
#
# This is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 only
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
def user(base_dn, uid, uidNumber, gidNumber):
"""
Generate an RFC2307(bis) user add-modlist for passing to ldap.add*
"""
uidNumber = str(uidNumber)
gidNumber = str(gidNumber)
return (
"uid=" + uid + ",ou=Users," + base_dn,
[
('objectClass', ['top', 'inetOrgPerson', 'posixAccount']),
('cn', [uidNumber]),
('sn', ['User']),
('uidNumber', [uidNumber]),
('gidNumber', [gidNumber]),
('userPassword', ['Password' + uidNumber]),
('homeDirectory', ['/home/' + uid]),
('loginShell', ['/bin/bash']),
]
)
def group(base_dn, cn, gidNumber, member_uids=[]):
"""
Generate an RFC2307 group add-modlist for passing to ldap.add*.
"""
gidNumber = str(gidNumber)
attr_list = [
('objectClass', ['top', 'posixGroup']),
('gidNumber', [gidNumber])
]
if len(member_uids) > 0:
attr_list.append(('memberUid', member_uids))
return ("cn=" + cn + ",ou=Groups," + base_dn, attr_list)
def group_bis(base_dn, cn, gidNumber, member_uids=[], member_gids=[]):
"""
Generate an RFC2307bis group add-modlist for passing to ldap.add*.
"""
gidNumber = str(gidNumber)
attr_list = [
('objectClass', ['top', 'extensibleObject', 'groupOfNames']),
('gidNumber', [gidNumber])
]
if len(member_uids) > 0:
attr_list.append(
('member', [
"uid=" + uid + ",ou=Users," + base_dn for
uid in member_uids
])
)
if len(member_gids) > 0:
attr_list.append(
('member', [
"cn=" + gid + ",ou=Groups," + base_dn for
gid in member_gids
])
)
return ("cn=" + cn + ",ou=Groups," + base_dn, attr_list)
class List(list):
"""LDAP add-modlist list"""
def __init__(self, base_dn):
self.base_dn = base_dn
def add_user(self, uid, uidNumber, gidNumber,
base_dn=None):
"""Add an RFC2307(bis) user add-modlist."""
self.append(user(base_dn or self.base_dn,
uid, uidNumber, gidNumber))
def add_group(self, cn, gidNumber, member_uids=[],
base_dn=None):
"""Add an RFC2307 group add-modlist."""
self.append(group(base_dn or self.base_dn,
cn, gidNumber, member_uids))
def add_group_bis(self, cn, gidNumber,
member_uids=[], member_gids=[],
base_dn=None):
"""Add an RFC2307bis group add-modlist."""
self.append(group_bis(base_dn or self.base_dn,
cn, gidNumber,
member_uids, member_gids))
|