diff --git a/CHANGES.rst b/CHANGES.rst index a750378..05f5cb0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,7 @@ Added ***** - Added `ldapsearch` command. :pr:`4` +- The root DN can add schemas. :pr:`5` [0.1.0] - 2021-04-02 ==================== diff --git a/slapd/__init__.py b/slapd/__init__.py index b5ec1f9..24d14e2 100644 --- a/slapd/__init__.py +++ b/slapd/__init__.py @@ -29,6 +29,11 @@ cn: module olcModuleLoad: back_%(database)s +dn: olcDatabase=config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: config +olcRootDN: %(rootdn)s + dn: olcDatabase=%(database)s,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig diff --git a/tests/test_slapdobject.py b/tests/test_slapdobject.py index 0641d38..6ee7f02 100644 --- a/tests/test_slapdobject.py +++ b/tests/test_slapdobject.py @@ -78,6 +78,42 @@ def test_commands(): server.stop() +def test_ldapadd_config_database(): + server = slapd.Slapd() + server.start() + + assert "dn: cn={1}myschema,cn=schema,cn=config" not in server.slapcat( + ["-n0"] + ).stdout.decode("utf-8") + + ldif = ( + "dn: cn=myschema,cn=schema,cn=config\n" + "objectClass: olcSchemaConfig\n" + "cn: myschema\n" + "olcAttributeTypes: ( 1.3.6.1.4.1.56207.1.1.1 NAME 'myAttribute'\n" + " EQUALITY caseExactMatch\n" + " ORDERING caseExactOrderingMatch\n" + " SUBSTR caseExactSubstringsMatch\n" + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\n" + " SINGLE-VALUE\n" + " USAGE userApplications\n" + " X-ORIGIN 'mySchema1' )\n" + "olcObjectClasses: ( 1.3.6.1.4.1.56207.1.1.2 NAME 'myObject'\n" + " SUP top\n" + " STRUCTURAL\n" + " MUST (\n" + " cn $\n" + " myAttribute\n" + " )\n" + " X-ORIGIN 'mySchema2' )\n" + ) + server.ldapadd(ldif) + + assert "dn: cn={1}myschema,cn=schema,cn=config" in server.slapcat( + ["-n0"] + ).stdout.decode("utf-8") + + def test_return_codes(): server = slapd.Slapd() server.start()