所有 CoS 定义条目都具有 LDAPsubentry 对象类,并且是从 cosSuperDefinition 对象类继承来的。此外,每种类型的 CoS 都从特定对象类继承而来,并包含相应属性。下表列出了与每种类型的 CoS 定义条目相关联的对象类和属性。
表 10–1 CoS 定义条目中的对象类和属性
CoS 类型 |
CoS 定义条目 |
---|---|
指针 CoS |
objectclass: top objectclass: LDAPsubentry objectclass: cosSuperDefinition objectclass: cosPointerDefinition cosTemplateDN: DN cosAttribute: attributeName override merge |
间接 CoS |
objectclass: top objectclass: LDAPsubentry objectclass: cosSuperDefinition objectclass: cosIndirectDefinition cosIndirectSpecifier: attributeName cosAttribute: attributeName override merge |
传统 CoS |
objectclass: top objectclass: LDAPsubentry objectclass: cosSuperDefinition objectclass: cosClassicDefinition cosTemplateDN: DN cosSpecifier: attributeName cosAttribute: attributeName override merge |
cosAttribute 始终为多值属性。每个值都定义一个由 CoS 机制生成的属性。
可以在 CoS 定义条目中使用以下属性。有关其中每个属性的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Man Page Reference》中的各个属性。
表 10–2 CoS 定义条目属性
属性 |
在 CoS 定义条目中的用途 |
---|---|
cosAttribute attributeName override merge |
定义要生成值的已计算属性的名称。此属性为多值属性,每个值代表将通过模板生成值的属性的名称。override 和 merge 限定符指定在此表后面所述的特殊情况下如何计算 CoS 属性值。 attributeName 不能包含任何子类型。带有子类型的属性名称将被忽略,但会处理 cosAttribute 的其他值。 |
cosIndirectSpecifier attributeName |
定义目标条目中属性的名称,间接 CoS 将使用此属性的值标识模板条目。已命名的属性称为说明符,并且必须包含每个目标条目中的完整 DN 字符串。此属性为单值属性,但 attributeName 可以是多值属性,以指定多个模板。 |
cosSpecifier attributeName |
定义目标条目中属性的名称,传统 CoS 将使用此属性的值标识模板条目。已命名的属性称为说明符,并且必须包含可以在模板条目 RDN 中找到的字符串。此属性为单值属性,但 attributeName 可以是多值属性,以指定多个模板。 |
cosTemplateDN DN |
提供模板条目的完整 DN(对于指针 CoS 定义)或基 DN(对于传统 CoS)。此属性为单值属性。 |
无法通过将 isMemberOf 属性用作 CosSpecifier,来使静态组的所有成员自动继承公用的已计算属性值。
cosAttribute 属性允许 CoS 属性名称后面有两个限定符,即 override 限定符和 merge 限定符。
override 限定符描述当条目中已实际存在 CoS 动态生成属性时的行为。override 可为以下任一选项:
default(或无限定符)- 表示当属性类型与已计算属性相同时,服务器不会覆盖条目中存储的实际属性值。
operational - 表示只有在搜索中明确请求时才会返回属性。操作属性不必通过模式检查即可返回。operational 限定符与 override 限定符具有相同的行为。
只有在模式中也将某个属性定义为操作属性时,该属性才能成为操作属性。例如,如果 CoS 生成一个 description 属性值,则无法使用 operational 限定符,因为 description 属性在模式中未标记为操作属性。
merge 限定符要么不使用,要么为 merge-schemes 形式。此限定符允许 CoS 已计算属性成为多值属性,这些值可以来自多个模板或多个 CoS 定义 。有关详细信息,请参见多值 CoS 属性。
可以创建包含 override 限定符的指针 CoS 定义条目,如下所示:
dn: cn=pointerCoS,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: cosSuperDefinition objectclass: cosPointerDefinition cosTemplateDn: cn=exampleUS,cn=data cosAttribute: postalCode override |
此指针 CoS 定义条目表示条目与生成 postalCode 属性值的模板条目 cn=exampleUS,cn=data 相关联。override 限定符表示此值优先于 postalCode 属性值(如果目标条目中存在该属性)。
如果 CoS 属性是使用 operational 或 override 限定符定义的,则无法对 CoS 范围内任何条目中的“实际”属性值执行写入操作。
指定 merge-schemes 限定符时,CoS 已生成属性在以下两种情况下可以成为多值属性:
使用间接或传统 CoS 时,目标条目中的说明符属性可以为多值属性。在这种情况下,每个值都确定一个模板,并且每个模板中的值都是生成值的一部分。
多个任意类型的 CoS 定义条目可以在 cosAttribute 中包含相同的属性名称。在这种情况下,如果所有定义都包含 merge-schemes 限定符,则生成的属性将包含由每个定义计算的所有值。
这两种情况可以同时发生,并定义更多的值。但是,重复的值只会在生成的属性中返回一次。
如果不使用 merge-schemes 限定符,模板条目的 cosPriority 属性将用于确定已生成属性在所有模板中的单一值。下一部分将介绍此方案。
merge-schemes 限定符永远不会将目标中定义的“实际”值与通过模板生成的值进行合并。merge 限定符独立于 override 限定符。所有配对情况都可能出现,并且每种情况表示的行为是互补的。 此外,还可以在属性名称后按任意顺序指定这些限定符。
如果同一属性具有多个 CoS 定义,则这些定义必须具有相同的 override 和 merge 限定符。如果 CoS 定义中存在不同的限定符对,将从所有定义中任意选择一种组合。
如果存在多个 CoS 定义或多值说明符,但未使用 merge-schemes 限定符,目录服务器将使用优先级属性选择用于定义已计算属性单一值的单一模板。
cosPriority 属性表示纳入考虑的所有模板中某一特定模板的全局优先级。优先级为零代表最高优先级。不包含 cosPriority 属性的模板被视为优先级最低。如果两个或两个以上的模板提供一个属性值,但却具有相同的优先级或没有优先级,此时将任意选择一个值。
使用 merge-schemes 限定符时不会考虑模板优先级。在合并时,纳入考虑的所有模板将定义一个值,而不管这些模板定义的优先级如何。cosPriority 属性是在 CoS 模板条目上定义的,如以下部分所述。
cosPriority 属性不能具有负值。此外,由间接 CoS 生成的属性不支持优先级。不要在间接 CoS 定义的模板条目中使用 cosPriority。