2014-05-09 20 views
5

tôi chỉ cài đặt OpenLDAP trên Ubuntu Server 12.10, và tôi đã thêm một file LDIF sử dụng slapadd -c -l init.ldif như sau:Thêm một mục để OpenLDAP

dn:dc=tpw,dc=uca,dc=ma 
dc: tpw 
objectClass: dcObject 
objectClass: top 
objectClass: domain 

dn: ou=people,dc=tpw,dc=uca,dc=ma 
ou: people 
objectClass: organizationalUnit 
objectClass: top 

dn: ou=groupes,dc=tpw,dc=uca,dc=ma 
ou: groupes 
objectClass: organizationalUnit 
objectClass: top 

dn: uid=admin,ou=people,dc=tpw,dc=uca,dc=ma 
uid: admin 
sn: Admin 
cn: Admin 
objectClass: inetOrgPerson 
objectClass: organizationalPerson 
objectClass: person 
objectClass: top 
userPassword:: e1NIQX0wRFBpS3VOSXJyVm1EOElVQ3V3MWhReE5xWmM9 
mail: [email protected] 
givenName: admin 

dn: cn=GI,ou=groupes,dc=tpw,dc=uca,dc=ma 
uniquemember: uid=admin,ou=people,dc=tpw,dc=uca,dc=ma 
cn: GI 
objectClass: groupOfUniqueNames 
objectClass: top 

dn: cn=GP,ou=groupes,dc=tpw,dc=uca,dc=ma 
uniquemember: uid=admin,ou=people,dc=tpw,dc=uca,dc=ma 
cn: GP 
objectClass: groupOfUniqueNames 
objectClass: top 

dn: cn=GT,ou=groupes,dc=tpw,dc=uca,dc=ma 
uniquemember: uid=admin,ou=people,dc=tpw,dc=uca,dc=ma 
cn: GT 
objectClass: groupOfUniqueNames 
objectClass: top 

Bây giờ cây ldap của tôi trông như thế này:

enter image description here

Sau đó, tôi cố gắng thêm một mới inetOrgPerson sử dụng Apache Directory Studio, nhưng tôi đã nhận lỗi này:

[LDAP: error code 80 - index generation failed] 

Sau đó, tôi đã cố gắng điều tương tự sử dụng phpLDAPadmin, nhưng tôi đã nhận lỗi này:

Impossible d'ajouter l'objet au serveur LDAP. 
LDAP dit :: Other (e.g., implementation specific) error 
Erreur numéro :: 0x50 (LDAP_OTHER) 

Sau đó, tôi đã tạo ra một tập tin mà tôi đặt tên xx.ldif:

dn: uid=xx,ou=people,dc=tpw,dc=uca,dc=ma 
cn: XX 
givenname: xx 
mail: [email protected] 
objectclass: inetOrgPerson 
objectclass: organizationalPerson 
objectclass: person 
objectclass: top 
sn: XX 
uid: xx 
userpassword: toor 

Và tôi cố gắng thêm cụm từ này sử dụng lệnh này qua thiết bị đầu cuối:

sudo ldapadd -x -D cn=Manager,dc=tpw,dc=uca,dc=ma -W -f xx.ldif 

Nhưng tôi gặp lỗi này:

ldap_add: Other (e.g., implementation specific) error (80) 
     additional info: index generation failed 

Làm cách nào để giải quyết vấn đề này?

PS: Trong một trường hợp khác, tôi đã xóa cơ sở dữ liệu của mình và sửa đổi tệp init.ldif chứa tất cả các mục tôi muốn thêm và tôi đã thêm mục xx, sau đó tôi đã nhập tệp bằng lệnh slapadd, nhưng bằng cách này tôi phải xóa cơ sở dữ liệu mỗi lần tôi muốn thêm một mục mới, điều này không thực tế.

Edit1:

Đây là kết quả của lệnh slapindex:

WARNING! 
Runnig as root! 
There's a fair chance slapd will fail to start. 
Check file permissions! 

5370d6f9 /etc/ldap/slapd.conf: line 95: rootdn is always granted unlimited privileges. 
5370d6f9 /etc/ldap/slapd.conf: line 112: rootdn is always granted unlimited privileges. 
5370d6f9 hdb_db_open: database "dc=tpw,dc=uca,dc=ma": database already in use. 
5370d6f9 backend_startup_one (type=hdb, suffix="dc=tpw,dc=uca,dc=ma"): bi_db_open failed! (-1) 
slap_startup failed 
+0

Tôi nghĩ bạn cần dừng slapd và chạy slapindex. – EJP

+0

@EJP, vui lòng kiểm tra sửa đổi tôi đã thực hiện cho bài đăng của mình. –

+0

Câu hỏi này tắt chủ đề ở đây và thuộc về serverfault.com. – EJP

Trả lời

1

Việc đầu tiên là init.ldif tập tin dường như được định cấu hình:

  • domainComponent "UCA" (dc = UCA) là mất tích, nên có một mục (dcObject hoặc tên miền objectClass) để xác định thuộc tính này chứa một thành phần của tên miền.

  • dcObject được dự định sẽ được sử dụng trong các mục nhập có lớp đối tượng cấu trúc thích hợp. Ví dụ, nếu tên miền đại diện cho một tổ chức cụ thể, mục nhập sẽ có như là lớp đối tượng cấu trúc của nó 'tổ chức', và lớp 'dcObject' sẽ là một lớp phụ trợ.

  • tên miền là lớp đối tượng cấu trúc được sử dụng cho các mục nhập mà không có thông tin nào khác đang được lưu trữ.Lớp đối tượng miền thường được sử dụng cho các mục nhập là trình giữ chỗ hoặc tên miền không tương ứng với các thực thể trong thế giới thực.

Trong file .ldif của bạn, bạn có thể thay thế nhập đầu tiên "dn: dc = tpw, dc = UCA, dc = ma" với những 2 (sau đó xóa cơ sở dữ liệu của bạn một lần nữa và thực hiện lại lệnh slapadd):

dn: dc=uca,dc=ma 
objectClass: top 
objectClass: organization 
objectClass: dcObject  
dc: uca 
o: an organization name (mandatory with 'organization' objectClass) 

dn: dc=tpw,dc=uca,dc=ma 
objectClass: top 
objectClass: domain 
dc: tpw 

Điều thứ hai: rõ ràng là bạn đã gặp phải vấn đề về chỉ mục. Tôi nghĩ bạn muốn sử dụng các chỉ mục nhưng nếu không, hãy tìm và xóa bất kỳ dòng nào bắt đầu bằng index từ slapd.conf, ví dụ: : index objectClass eq.

Hãy nhớ dừng slapd và chạy slapindex sau mỗi thay đổi được đính kèm với định nghĩa chỉ mục trong slapd.conf và đảm bảo tất cả khách hàng ldap đã bị ngắt kết nối trước khi chạy lệnh slap để ngăn thông báo database already in use.

1

Vì vậy, hãy gợi ý cho bạn bởi slapindex. Không chạy slapd như root, sửa dòng 95 và 112, và không chạy slapd hai lần, hoặc sửa bất cứ điều gì làm cho nó nghĩ rằng cơ sở dữ liệu đã được sử dụng.

Các vấn đề liên quan