我正在尝试在新服务器上设置 slapd 的配置。我以同样的方式做了,但那大概是两年前的事了,而且环境略有不同(我实际上使用的是 Debian,之前使用的是 CentOS)。
我有一个 ldif 格式的配置文件并且我尝试执行以下操作:
slapadd -n 0 -F /etc/ldap/slapd.d -l /root/server_slapd_config.ldif
我得到了
5c75466b <= str2entry: str2ad(olcDbCacheSize): 属性类型未定义
slapadd:无法解析条目(行=2087)
奇怪的是,我无法弄清楚为什么会出现此错误,因为 olcDbCacheSize 是在我的 server_slapd_config.ldif 中定义的
这里是我的 server_slapd_config.ldif 中的行:
1)
olcObjectClasses: ( OLcfgDbOc:1.1 NAME 'olcBdbConfig' DESC 'BDB backend conf
iguration' SUP olcDatabaseConfig STRUCTURAL MUST olcDbDirectory MAY ( olcDb
CacheSize $ olcDbCheckpoint $ olcDbConfig $ olcDbCryptFile $ olcDbCryptKey
$ olcDbNoSync $ olcDbDirtyRead $ olcDbIDLcacheSize $ olcDbIndex $ olcDbLine
arIndex $ olcDbLockDetect $ olcDbMode $ olcDbSearchStack $ olcDbShmKey $ ol
cDbCacheFree $ olcDbDNcacheSize $ olcDbPageSize ) )
2)
olcAttributeTypes: ( OLcfgDbAt:1.1 NAME 'olcDbCacheSize' DESC 'Entry cache s
ize in entries' SYNTAX OMsInteger SINGLE-VALUE )
3)
dn: olcDatabase={1}bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {1}bdb
[skip]
olcDbCacheSize: 1000
所以,数据库缓存大小在中声明olcBdb配置属性。
有olc属性类型为了数据库缓存大小
和dn:olcDatabase={1}bdb,cn=config是 ”对象类:olcBdbConfig“
为什么我会收到“属性类型未定义”?
一些额外的信息。
系统:Debian 9(Stretch)
# dpkg -l | grep -i ldap
ii ldap-utils 2.4.44+dfsg-5+deb9u2 amd64 OpenLDAP utilities
ii ldapscripts 2.0.7-2 all Add and remove users and groups (stored in a LDAP directory)
ii libldap-2.4-2:amd64 2.4.44+dfsg-5+deb9u2 amd64 OpenLDAP libraries
ii libldap-common 2.4.44+dfsg-5+deb9u2 all OpenLDAP common files for libraries
ii slapd 2.4.44+dfsg-5+deb9u2 amd64 OpenLDAP server (slapd)
感谢您的帮助。
更新:
一个小更新。只是为了检查一下。如果我删除 olcDbCacheSize 字符串,我会得到下一行的错误:olcDbCheckpoint
5c7553fc <= str2entry: str2ad(olcDbCheckpoint): 属性类型未定义
更新 1:
此处的行以 olcDb* 开头。所有行均以dn:olcDatabase={1}bdb,cn=config部分。我跳过了中间的几行(它们不是以 olcDb 开头的)。
dn: olcDatabase={1}bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {1}bdb
[skip]
olcDbDirectory: /var/lib/slapd
olcDbCacheSize: 1000
olcDbCheckpoint: 512 15
olcDbConfig: {0}# This configuration file sets BerkeleyDB options when using
olcDbConfig: {1}# backend, for the database held in the directory where this
olcDbConfig: {2}#
olcDbConfig: {3}# Set directory to use for transaction logs:
olcDbConfig: {4}#set_lg_dir /var/lib/ldap/logs
olcDbConfig: {5}# Set in-memory transaction log cache (2MB)
olcDbConfig: {6}set_lg_bsize 2097152
olcDbConfig: {7}# Set max transaction log file size, must be >=4* lg_bsize
olcDbConfig: {8}#set_lg_max 10485760
olcDbConfig: {9}set_lg_max 20971520
olcDbConfig: {10}# Set in-memory database cache
olcDbConfig: {11}#set_cachesize 0 1048576 0
olcDbConfig: {12}
olcDbConfig: {13}
olcDbConfig: {14}# For batch imports, disabling transaction logging totally
olcDbConfig: {15}# improve performance:
olcDbConfig: {16}# set_flags DB_TXN_NOT_DURABLE
olcDbConfig: {17}
olcDbConfig: {18}
olcDbNoSync: FALSE
olcDbDirtyRead: FALSE
olcDbIDLcacheSize: 0
olcDbIndex: objectClass eq
olcDbIndex: entryUUID eq
olcDbIndex: entryCSN eq
olcDbIndex: cn eq,subinitial
olcDbIndex: uid eq,subinitial
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: sn eq,subinitial
olcDbIndex: givenName eq,subinitial
olcDbIndex: member eq
olcDbIndex: mail eq,subinitial
olcDbIndex: FinLogin eq,approx,sub
olcDbIndex: uniqueMember eq
olcDbIndex: memberUid eq
olcDbLinearIndex: FALSE
olcDbMode: 0600
olcDbSearchStack: 16
olcDbShmKey: 0
olcDbCacheFree: 1
olcDbDNcacheSize: 0
答案1
一些模式描述在后端模块或覆盖中是硬编码的。
例如,属性类型就是这种情况数据库缓存大小在 servers/slapd/back-bdb/config.c 中定义并且您的本地模式定义没有效果。
我怀疑 back-bdb 后端未加载,因此这些模式定义在您的 slapd 实例中不可用。