Ldap
OpenLDAP:將 olcObjectClasses 添加到方案
我通過 cn=conf 向 OpenLDAP 添加了一個方案。該方案取自 WSO2 Identity Server,但經過修改以適用於 cn=conf 和 OpenLDAP。
該方案載入沒有錯誤,但不起作用。在為所有載入的方案查詢 cn=schemes,cn=conf 後,我發現我的方案沒有定義方案名稱和內容的 olcObjectClasses 語句。這是我載入的 LDIF 文件的一部分(沒有錯誤),但由於某種原因在 live conf 中不存在。
我現在試圖在事後添加它,但得到一個錯誤:
ldapmodify: invalid format (line 5) entry: "cn={4}wso2Person,cn=schema,cn=config"
我嘗試載入的文件如下所示:
dn: cn={4}wso2Person,cn=schema,cn=config changetype: modify add: olcObjectClasses olcObjectClasses: ( 0.3.6.1.4.1.37505.1.1 NAME 'wso2Person' DESC 'wso2Person' SUP inetOrgPerson STRUCTURAL MAY ( gender $ country $ nickName $ timeZone $ dateOfBirth $ role $ im $ url $ otherPhone $ privatePersonalIdentifier $ profileconfiguration $ prefferedLanguage) )
查詢時:
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config
關於我的方案的部分如下所示:# {4}wso2Person, schema, config dn: cn={4}wso2Person,cn=schema,cn=config objectClass: olcSchemaConfig cn: {4}wso2Person olcAttributeTypes: {0}( 1.3.6.1.4.1.37505.1.2 NAME 'gender' EQUALI TY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6. 1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {1}( 1.3.6.1.4.1.37505.1.3 NAME 'country' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {2}( 1.3.6.1.4.1.37505.1.4 NAME 'nickName' EQUA LITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {3}( 1.3.6.1.4.1.37505.1.5 NAME 'timeZone' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {4}( 1.3.6.1.4.1.37505.1.6 NAME 'dateOfBirth' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {5}( 1.3.6.1.4.1.37505.1.7 NAME 'role' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1. 4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {6}( 1.3.6.1.4.1.37505.1.8 NAME 'im' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {7}( 1.3.6.1.4.1.37505.1.9 NAME 'url' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {8}( 1.3.6.1.4.1.37505.1.10 NAME 'otherPhone' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {9}( 1.3.6.1.4.1.37505.1.11 NAME 'privatePersonalIdentifier' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {10}( 1.3.6.1.4.1.37505.1.12 NAME 'profileconfiguration' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcAttributeTypes: {11}( 1.3.6.1.4.1.37505.1.13 NAME 'prefferedLanguage' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )
我究竟做錯了什麼?
我解決了。
olcObjectClasses: 之後的所有內容都需要作為單行讀取,但事實並非如此。這是由於我在 ldif 文件中分隔行的方式。下面是工作文件。(在一行前面添加一個空格表示它是前一行的延續)
dn: cn={4}wso2Person,cn=schema,cn=config changetype: modify add: olcObjectClasses olcObjectClasses: ( 0.3.6.1.4.1.37505.1.1 NAME 'wso2Person' DESC 'wso2Person' SUP inetOrgPerson STRUCTURAL MAY ( gender $ country $ nickName $ timeZone $ dateOfBirth $ role $ im $ url $ otherPhone $ privatePersonalIdentifier $ profileconfiguration $ prefferedLanguage))
當我添加該方案的其餘部分時它沒有被閱讀的原因是由於在不適當的地方有額外的換行符。在添加 olcObjectClasses 和其餘 LDIF 內容之間有一個空行。見下文。
[..] olcAttributeTypes: {11}( 1.3.6.1.4.1.37505.1.13 NAME 'prefferedLanguage' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) olcObjectClasses: ( 0.3.6.1.4.1.37505.1.1 [...]