3.1.1.3.1.1.5 Auxiliary Classes

Windows 2000 operating system had limited support for LDAP auxiliary classes. An auxiliary class would be associated with the schema definition of a particular class C when the auxiliary class was added to the auxiliaryClass or systemAuxiliaryClass attribute of the classSchema object that defines C. In this case, all instances of C will inherit the attributes of the auxiliary class.

The server permits adding or removing an auxiliary class to or from the auxiliaryClass attribute of C at any point in time. Doing so adds or removes the auxiliary class from every existing instance of C but does not cause the object class of the auxiliary class to appear in the objectClass attribute of those instances. Such an auxiliary class can have optional (mayContain) attributes but not mandatory (mustContain) attributes. This is because there can be existing instances of C, in which case adding a new mandatory attribute would cause those existing instances to violate the modified schema.

The server permits adding an auxiliary class to the systemAuxiliaryClass attribute of C only when C is defined, that is, when C's classSchema object is added to the schema NC. After a classSchema object has been created, its systemAuxiliaryClass attribute cannot be modified. An auxiliary class that is associated with C by the addition of it to C!systemAuxiliaryClass can have mandatory (mustContain) as well as optional (mayContain) attributes. As in the previous case, the auxiliary classes added in this manner are not shown in the objectClass attribute of the instances of C.

In addition to the Windows 2000 auxiliary class mechanism, dynamic auxiliary classes are supported in Windows Server 2003 operating system and later. This dynamic auxiliary class mechanism reflects the model of auxiliary object classes described in [X501] section 8.3.3. The server permits adding an auxiliary class to any instance I of a class by a request to add that auxiliary class to I!objectClass. This will cause only that instance I to inherit the attributes of the auxiliary class. The dynamic auxiliary class will be removed from I, after the values of all attributes in the auxiliary class have been cleared by the client, by a request to remove the auxiliary class from I!objectClass. Dynamic auxiliary classes can have both mandatory (mustContain) and optional (mayContain) attributes.

If the dynamic auxiliary class that is added to I is a subclass of another auxiliary class, both auxiliary classes are added to I when the child auxiliary class is added to I. However, removing the child auxiliary class does not cause the server to remove its parent from I. A parent auxiliary class can be removed from I only when all child auxiliary classes that inherit from the parent are also removed from I.

For each I, I!objectClass contains the structural, abstract, and dynamic auxiliary object classes of which I is an instance (and their inheritance chains). I!structuralObjectClass includes only the structural class of which I is an instance and its inheritance chain. I!msDS-Auxiliary-Classes contains the dynamic auxiliary classes of which I is an instance along with their inheritance chain, except it does not include those classes in the inheritance chain that are in I!structuralObjectClass.