3web2ldap plugin classes for Samba 3
13from ..schema.syntaxes
import (
18 DynamicValueSelectList,
21from .activedirectory
import LogonHours
24syntax_registry.reg_at(
25 SecondsSinceEpoch.oid, [
26 '1.3.6.1.4.1.7165.2.1.3',
27 '1.3.6.1.4.1.7165.2.1.5',
28 '1.3.6.1.4.1.7165.2.1.6',
29 '1.3.6.1.4.1.7165.2.1.7',
30 '1.3.6.1.4.1.7165.2.1.8',
31 '1.3.6.1.4.1.7165.2.1.9',
32 '1.3.6.1.4.1.7165.2.1.27',
33 '1.3.6.1.4.1.7165.2.1.28',
34 '1.3.6.1.4.1.7165.2.1.29',
35 '1.3.6.1.4.1.7165.2.1.30',
36 '1.3.6.1.4.1.7165.2.1.31',
37 '1.3.6.1.4.1.7165.2.1.32',
42syntax_registry.reg_at(
44 '1.3.6.1.4.1.7165.2.1.55',
50 oid: str =
'SambaAcctFlags-oid'
51 desc: str =
'Samba 3 account flags'
52 input_pattern: str =
r'^\[[NDHTUMWSLXI ]{0,16}\]$'
53 pattern = re.compile(input_pattern)
55 'N':
'<b>N</b>o password.',
56 'D':
'<b>D</b>isabled.',
57 'H':
'<b>H</b>omedir required.',
58 'T':
'<b>T</b>emp account.',
59 'U':
'<b>U</b>ser account (normal)',
60 'M':
'<b>M</b>NS logon user account.',
61 'W':
'<b>W</b>orkstation account.',
62 'S':
'<b>S</b>erver account.',
63 'L':
'<b>L</b>ocked account.',
64 'X':
'No <b>X</b>piry on password',
65 'I':
'<b>I</b>nterdomain trust account.',
69 flags = self.
av_u[1:-1]
71 '<tr><td>%s</td><td>%s</td></tr>\n' % ({
True:
'*',
False:
''}[f
in flags], d)
74 return '<pre>%s</pre><table>\n%s\n</table>\n' % (
79syntax_registry.reg_at(
81 '1.3.6.1.4.1.7165.2.1.26',
82 '1.3.6.1.4.1.7165.2.1.4',
88 oid: str =
'SambaSID-oid'
89 desc: str =
'Samba SID (SDDL syntax)'
90 input_pattern: str =
r'^S(-[0-9]+)+$'
91 pattern = re.compile(input_pattern)
95 domain_filter =
'(&(objectClass=sambaDomain)(sambaDomainName=%s))' % (
96 ldap0.filter.escape_str(domain_name)
99 domain_filter =
'(objectClass=sambaDomain)'
101 ldap_result = self.
_app.ls.l.search_s(
102 self.
_app.naming_context.encode(self.
_app.ls.charset),
105 attrlist=[
'sambaSID',
'sambaDomainName'],
108 except ldap0.NO_SUCH_OBJECT:
111 if len(ldap_result) != 1:
114 _, domain_entry = ldap_result[0].entry_as
115 except (KeyError, IndexError):
121 primary_group_sid = self.
_entry[
'sambaPrimaryGroupSID'][0]
122 except (KeyError, IndexError):
123 domain_name = self.
_entry.get(
'sambaDomainName', [
None])[0]
125 if domain_entry
is None:
128 domain_sid = domain_entry.get(
'sambaSID', [
None])[0]
130 domain_sid = primary_group_sid.rsplit(
'-', 1)[0]
134 ocs = self.
_entry.object_class_oid_set()
135 result = IA5String.form_value(self)
139 if domain_sid
is not None:
141 if 'sambaSamAccount' in ocs
and 'posixAccount' in ocs:
142 uid_number =
int(self.
_entry[
'uidNumber'][0])
145 str(2*uid_number+1000)
147 elif 'sambaGroupMapping' in ocs
and 'posixGroup' in ocs:
148 gid_number =
int(self.
_entry[
'gidNumber'][0])
151 str(2*gid_number+1001)
153 except (IndexError, KeyError, ValueError):
157syntax_registry.reg_at(
159 '1.3.6.1.4.1.7165.2.1.20',
165 oid: str =
'SambaForceLogoff-oid'
166 desc: str =
'Disconnect Users outside logon hours (default: -1 => off, 0 => on)'
167 attr_value_dict: Dict[str, str] = {
173syntax_registry.reg_at(
174 SambaForceLogoff.oid, [
175 '1.3.6.1.4.1.7165.2.1.66',
180 oid: str =
'SambaLogonToChgPwd-oid'
181 desc: str =
'Force Users to logon for password change (default: 0 => off, 2 => on)'
182 attr_value_dict: Dict[str, str] = {
188syntax_registry.reg_at(
189 SambaLogonToChgPwd.oid, [
190 '1.3.6.1.4.1.7165.2.1.60',
195 oid: str =
'SambaGroupType-oid'
196 desc: str =
'Samba group type'
197 attr_value_dict: Dict[str, str] = {
200 '4':
'Local Group (Alias)',
201 '5':
'Built-in Group (well-known)',
204syntax_registry.reg_at(
205 SambaGroupType.oid, [
206 '1.3.6.1.4.1.7165.2.1.19',
212 oid: str =
'ReferencedSID-oid'
213 desc: str =
'SID which points to another object'
214 ldap_url =
'ldap:///_?sambaSID,cn?sub?'
216syntax_registry.reg_at(
218 '1.3.6.1.4.1.7165.2.1.51',
224 oid: str =
'SambaGroupSID-oid'
225 desc: str =
'SID which points to Samba group object'
226 ldap_url =
'ldap:///_?sambaSID,cn?sub?(objectClass=sambaGroupMapping)'
228syntax_registry.reg_at(
230 '1.3.6.1.4.1.7165.2.1.23',
236 oid: str =
'SambaDomainName-oid'
237 desc: str =
'Name of Samba domain'
238 ldap_url =
'ldap:///_?sambaDomainName,sambaDomainName?sub?(objectClass=sambaDomain)'
240syntax_registry.reg_at(
241 SambaDomainName.oid, [
242 '1.3.6.1.4.1.7165.2.1.38',
247syntax_registry.reg_at(
248 DirectoryString.oid, [
249 '1.3.6.1.4.1.7165.2.1.38',
252 '1.3.6.1.4.1.7165.2.2.5',
258 oid: str =
'SambaHomeDrive-oid'
259 desc: str =
'Samba home drive letter'
260 attr_value_dict: Dict[str, str] = {
261 driveletter: driveletter
264 for letter
in string.ascii_lowercase.upper()
268syntax_registry.reg_at(
269 SambaHomeDrive.oid, [
270 '1.3.6.1.4.1.7165.2.1.33',
276syntax_registry.reg_syntaxes(__name__)
str display(self, vidx, links)
def _get_domain_sid(self)
def _search_domain_entry(self, domain_name)