ldapadd, openldap ile sözdizimi hataları verir


1

Ldapadd kullanıyorum ve depoya bir özellik türü eklemek istiyorum, böylece diğer girişler tarafından kullanılabilir.

Birkaç sorun yaşıyorum. İşte benim ldif dosyam.

dn: dc=myorg,dc=co,dc=uk
changetype: add
add: attributetypes
attributetype: ( 2.2.980.1.1 NAME ( 'ecdvisibility' 'ecdvis' ) DESC 'The visibility of the object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE USAGE userApplications )

Sonunda boşluklar için satırları kontrol ettikten sonra, her şeyin yolunda gittiğini görüyorum:

dn: dc=myorg,dc=co,dc=uk$
changetype: add$
add: attributetypes$
attributetype: ( 2.2.980.1.1 NAME ( 'ecdvisibility' 'ecdvis' )$
  DESC 'The visibility of the object'$
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15$
  SINGLE-VALUE$
  USAGE userApplications )$

Gördüğüm gibi aşağıdaki gibi gizemli bir hatadır:

ldap_add: Tanımsız öznitelik türü (17) ek bilgi: add: öznitelik türü undefined

Bu hatayı anlamıyorum, nitelik tipi tanımlanmadı, eklemeye çalışıyorum ! Ayrıca bu satırdan hemen önce şöyle der:

"dc = myorg, dc = co, dc = uk" yeni girişi eklendi

Neden bunu ekliyor, zaten var. Ayrıca ldapadd veya ldapmodify kullanmam gerekip gerekmediğinden de emin değilim.

Benim tipik komutum:

sudo ldapadd -D cn = admin, dc = myorg, dc = co, dc = ingiltere -w parola -v -f attributeType.ldif

Ben de hiçbir fark yaratmayacak gibi görünmesine rağmen, dosyanın sonunda boş bir satır olduğundan emin oldum.

Herhangi bir kullanıcı tarafından kullanılabilecek bir özellik eklemenin en iyi yolu nedir?

Güncelleştirme

Ayrıca aşağıdakileri de denedim:

dn: cn=schema
changetype: modify
add: attributeTypes
##
## The new attribute type
##
attributeTypes: ( ecdvisibility.oid NAME ( 'ecdvisibility' 'ecdvis' ) DESC 'The visibility of the object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE USAGE userApplications )

Ama bu sefer bu hatayı alıyorum:

ldap_modify: Geçersiz sözdizimi (21) ek bilgi: attributeTypes: sözdizimi başına 0 değer geçersiz

Güncelleme 2:

Herhangi bir değişiklik yapmadan önce, openldap'ın arka planda ayarladığı görünen sistem şifresini güncellemek zorunda kaldım:

dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: password

Bu iyi çalıştı, bu yüzden özellikleri güncellemeye çalışıyorum.

1. deneme:

dn: cn=schema,cn=config
changetype: add
olcAttributeTypes: ( ecdvisibility.oid
  NAME ( 'ecdvisibility' 'ecdvis' )
  DESC 'The visibility of the object'
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  SINGLE-VALUE
  USAGE userApplications )
olcRootDN: cn=config
olcRootPW: password
#objectClass: top

ldap_add: Nesne sınıfı ihlali (65) ek bilgi: objectClass niteliği yok

Object sınıfında yorum yapmak bana aşağıdaki hatayı verdi:

ldap_add: Nesne sınıfı ihlali (65) ek bilgi: yapısal nesne sınıfı yok

Tamam, inetOrgPerson'ı deneyeceğim

ldap_add: Nesne sınıfı ihlali (65) ek bilgi: nesne sınıfı 'inetOrgPerson' 'sn' niteliğini gerektiriyor

Dur , bunu gerçekten yapmak istemiyorum, sadece ldap için kullanılabilen bir özellik türü eklemek istiyorum ve ne zaman ve gerekirse bir nesneye eklenebilirim. Bu noktada tek bir nesneyi veya bir girişi belirtmek istemiyorum. Mümkün mü? Öyleyse nasıl? Başka bir öneri gerçekten takdir.

@Grawity sayesinde, son durum şu şekildedir:

dn: cn=test,cn=schema,cn=config
changetype: add
olcAttributeTypes: ( 2.25.247072656268950430024439664556757516066
  NAME ( 'ecdvisibility' 'ecdvis' )
  DESC 'The visibility of the object'
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  SINGLE-VALUE
  USAGE userApplications )
objectClass: olcSchemaConfig

OID numarasını, herkese açık geçersiz bir numara kullandığım için benzersiz açık numaralardan birine değiştirdim. Öznitelik türü başarıyla eklendi ve başka bir yerde kullanılabilir.


Orijinal OID geçersizdi , ancak IANA'dan ( 1.3.6.1.4.1arc) bir gün alırken başkasının menzilini kullanmaktan kaçınmak iyi bir uygulamadır .
Grawity

Yanıtlar:


1

Temeller

Gördüğüm gibi aşağıdaki gibi gizemli bir hatadır:

ldap_add: Undefined attribute type (17) additional info: add: attribute type undefined

Bu hatayı anlamıyorum, nitelik tipi tanımlanmadı, eklemeye çalışıyorum!

Özelliğin hakkında konuşmuyor. Satır hakkında konuşuyor add: attributetypes- adlı bir öznitelik bilmiyor add.

LDIF yılında add:, replace:, delete:zaman nitelikler sadece ihtiyaç vardır değiştirerek bir girdi (yani birlikte changetype: modify). Ancak yeni bir giriş eklemek istiyorsanız , yalnızca ham veri sağlamanız yeterlidir.

"LDIF'leri" ekleme ve "değişiklik yapma" LDIF'leri arasındaki örnekler ve farklılıklar için 'ldif' man sayfasına bakın.

Ayrıca bu satırdan hemen önce şöyle der:

adding new entry "dc=myorg,dc=co,dc=uk"

Neden bunu ekliyor, zaten var.

Çünkü kullandın changetype: add- başka bir deyişle, ldapmodify'den yeni bir giriş yapmasını istedin.

Açıklığa kavuşturmak için "yeni giriş ekle", "giriş değiştir, yeni özellikler eklemekten" tamamen ayrıdır. Muhtemel eylemler:

  • changetype: add - tam olarak belirtildiği şekilde yeni bir giriş oluşturur.
  • changetype: modify - Mevcut bir girişin özelliklerini düzenler, aşağıdakilerin bir kombinasyonunu kabul eder:
    • add: ... - yeni özellik ekle (veya daha fazla değer ekle)
    • replace: ... - bir öznitelik ekle veya tamamen üzerine yaz
    • delete: ... - silme niteliği (veya belirli değerler)
  • changetype: modrdn - DN'yi değiştirir (girişi yeniden adlandırır veya taşır)
  • changetype: delete - tüm girişi siler.

Bu dokümana bakınız .

Ayrıca ldapadd veya ldapmodify kullanmam gerekip gerekmediğinden de emin değilim.

changetypeHerhangi biri belirtmezseniz , aralarındaki tek fark kullandıklarıdır. Yani, ldapadd varsayılan olarak changetype: addve ldapmodify de varsayılan olacaktır changetype: modify.

changetype:LDIF'nizde el ile bir işaret belirlerseniz , her iki komut da aynı olur.

Şimdi şema

Şema yapılandırması LDAP sunucuları arasında büyük farklılıklar gösterir ve LDIF'niz OpenLDAP için tamamen yanlıştır. Gerçek nitelik açıklaması iyi, ancak farklı bir DN'de farklı bir nitelikte saklanması gerekiyor.

İle başlamak için, yok normal veritabanına doğrudan şema ekleyin ama özel bir yapılandırma ağacına - OpenLDAP aşağıda alt girdileri kullanan cn=schema,cn=configbir ile, olcSchemaConfigşema başına girişi.

Nitelikleri de başlamak olcyani - olcAttributeTypesve olcObjectClasses.

Dolayısıyla, 1 niteliği ve sıfır objectClasses ile yeni bir şema eklemek için, şunu kullanın:

dn: cn=ecd,cn=schema,cn=config
changetype: add
objectClass: olcSchemaConfig
olcAttributeTypes: ( 2.2.980.1.1
  NAME ( 'ecdvisibility' 'ecdvis' )
  DESC 'The visibility of the object'
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  SINGLE-VALUE
  USAGE userApplications )

OpenLDAP otomatik örneğin RDN bir numara eklemek unutmayın cn={5}ecd. Daha sonra, aynı şemaya daha fazla özellik veya sınıf ekleyebilirsiniz:

dn: cn={5}ecd,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 4.5.6.7 NAME 'foo' ... )
olcAttributeTypes: ( 4.5.6.8 NAME 'bar' ... )
-
add: olcObjectClasses
olcObjectClasses: ( 4.5.6.9
  NAME 'ecdwhatever'
  AUXILIARY
  MAY ( ecdvisibility $ foo $ bar ) )
-

( 2.2.980.*OID gerçekten size ait mi? Öyle değilse, IANA'dan kendinizinkini almanız iyi olur .)


Büyük cevap için teşekkürler, orada kontrol etmek çok ve evet ben çok yanlış yapıyordum. Bu işe yarayıp yaramadığını kontrol edip göreyim
PeterS

girişiniz için çok teşekkürler, bu oldukça iyi ilerlediğim anlamına geliyordu. Ancak, lütfen güncelleme 2’ime bakın, gördüğünüz gibi, belirli nesnelere tür eklemek istemiyorum. Ben de cn = ecd işini çalıştıramadım, bu hatayı vadede sağlayabilirim.
PeterS

@PeterS: olcSchemaConfigobjectClass'ı kullanmanız gerekir . Dokümanlara bakın. (Ayrıca, cn=schema,cn=configDN sistem şemasına ayrılmıştır - her iki şekilde de bir çocuk girişi kullanmanız gerekir.)
Grawity

Evet çalıştı, çok teşekkürler. Cevabımı nihai çözümle güncelleyeceğim.
PeterS,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.