diff --git a/requirements.txt b/requirements.txt index 574eb29ea72e4b8a333a312f41b53e799f140775..0091a34a7af56770bf5967c406be0d9d3a3e36f2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ --extra-index-url https://git.cccv.de/api/v4/projects/220/packages/pypi/simple -ldapserver +ldapserver==0.0.1.dev3 diff --git a/server.py b/server.py index 05a20b3fb10f3cf86c08a978190c28f8e6e30fff..6c8782f14879c06e36ef2876de9d1dc8c34529cd 100644 --- a/server.py +++ b/server.py @@ -7,9 +7,9 @@ from ldapserver import SimpleLDAPRequestHandler from ldapserver.dn import DN, RDN from ldapserver.ldap import FilterEqual, FilterAnd from ldapserver.directory import BaseDirectory, SimpleFilterMixin, StaticDirectory, eval_ldap_filter -from ldapserver.schema.rfc2307bis import rfc2307bis_subschema from ldapserver.util import encode_attribute, CaseInsensitiveDict from ldapserver.exceptions import LDAPInvalidCredentials +from ldapserver.schema import RFC2307BIS_SUBSCHEMA class UffdAPI: def __init__(self, baseurl, key): @@ -41,7 +41,6 @@ class UserDirectory(SimpleFilterMixin, BaseDirectory): attributes = CaseInsensitiveDict( structuralObjectClass=[self.structuralobjectclass], objectClass=self.objectclasses, - subschemaSubentry=[b'cn=Subschema'], cn=[encode_attribute(user['displayname'])], displayname=[encode_attribute(user['displayname'])], givenname=[encode_attribute(user['displayname'])], @@ -103,7 +102,6 @@ class GroupDirectory(SimpleFilterMixin, BaseDirectory): attributes = CaseInsensitiveDict( structuralObjectClass=[self.structuralobjectclass], objectClass=self.objectclasses, - subschemaSubentry=[b'cn=Subschema'], cn=[encode_attribute(group['name'])], description=[encode_attribute(' ')], gidNumber=[encode_attribute(group['id'])], @@ -146,6 +144,8 @@ class GroupDirectory(SimpleFilterMixin, BaseDirectory): return super().filter_equal(attribute, value) class RequestHandler(SimpleLDAPRequestHandler): + subschema = RFC2307BIS_SUBSCHEMA + # Overwritten before use api = None dn_base = None @@ -157,7 +157,6 @@ class RequestHandler(SimpleLDAPRequestHandler): def setup(self): super().setup() - self.rootdse['subschemaSubentry'] = [b'cn=Subschema'] print('CONNECT') def do_bind_simple_authenticated(self, dn, password): @@ -184,8 +183,7 @@ class RequestHandler(SimpleLDAPRequestHandler): def do_search(self, baseobj, scope, filter): print('SEARCH %s "%s" %s'%(scope.name, baseobj, filter.get_filter_string())) - yield from self.rootdse.search(baseobj, scope, filter) - yield from rfc2307bis_subschema.search(baseobj, scope, filter) + yield from super().do_search(baseobj, scope, filter) if self.bind_object: yield from self.static_directory.search(baseobj, scope, filter) yield from self.user_directory.search(baseobj, scope, filter) @@ -201,7 +199,6 @@ def main(config): base_attrs = { 'objectClass': ['top', 'dcObject', 'organization'], 'structuralObjectClass': ['organization'], - 'subschemaSubentry': ['cn=Subschema'], } for attr, value in dn_base[0]: base_attrs[attr] = [value] @@ -210,25 +207,21 @@ def main(config): 'ou': ['users'], 'objectClass': ['top', 'organizationalUnit'], 'structuralObjectClass': ['organizationalUnit'], - 'subschemaSubentry': ['cn=Subschema'], }) static_directory.add(DN('ou=groups') + dn_base, { 'ou': ['groups'], 'objectClass': ['top', 'organizationalUnit'], 'structuralObjectClass': ['organizationalUnit'], - 'subschemaSubentry': ['cn=Subschema'], }) static_directory.add(DN('ou=system') + dn_base, { 'ou': ['system'], 'objectClass': ['top', 'organizationalUnit'], 'structuralObjectClass': ['organizationalUnit'], - 'subschemaSubentry': ['cn=Subschema'], }) static_directory.add(DN('cn=service,ou=system') + dn_base, { 'cn': ['service'], 'objectClass': ['top', 'organizationalRole', 'simpleSecurityObject'], 'structuralObjectClass': ['organizationalRole'], - 'subschemaSubentry': ['cn=Subschema'], }) class CustomRequestHandler(RequestHandler):