Creating a new ObjectClass and Attribute in openLDAP
Asked Answered
N

1

7

I am new at LDAP and searched for adding simple objectClass and Attributes but still getting an error, I would like to have an object 'adminFunc' with a simple string attribute 'functionId' so I copied adminFunc.schema and adminFunc.ldif to the schema folder:

adminFunc.schema:

objectidentifier adminFuncSchema 1.3.6.1.4.1.X.Y
objectidentifier funcAttrs adminFuncSchema:3
objectidentifier funcClass adminFuncSchema:4

attributetype ( funcAttrs:2
  NAME 'functionId'
  EQUALITY caseIgnoreMatch
  SUBSTR caseIgnoreSubstringsMatch
  ORDERING caseIgnoreOrderingMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} )  

objectclass ( 
  funcClass:1
  NAME 'adminFunc'
  DESC 'Admin permission'
  SUP ( top ) AUXILIARY
  MAY functionId )

adminFunc.ldif: ( which has been generated automatically by running slaptest )

dn: cn=adminFunc
objectClass: olcSchemaConfig
cn: adminFunc
olcObjectIdentifier: adminFuncSchema 1.3.6.1.4.1.X.Y
olcObjectIdentifier: funcAttrs adminFuncSchema:3
olcObjectIdentifier: funcClass adminFuncSchema:4
olcAttributeTypes: ( funcAttrs:2 NAME 'functionId' EQUALITY caseIgnoreMat
 ch ORDERING caseIgnoreOrderingMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX
  1.3.6.1.4.1.1466.115.121.1.15{255} )
olcObjectClasses: ( funcClass:1 NAME 'adminFunc' DESC 'Admin permission' 
 SUP top AUXILIARY MAY functionId )
structuralObjectClass: olcSchemaConfig
entryUUID: c43389f4-0bfb-1037-959b-c9dc976d6fc3
creatorsName: cn=config
createTimestamp: 20170802182555Z
entryCSN: 20170802182555.047279Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20170802182555Z

modify.ldif my dn is ou=Local,ou=SV,dc=example,dc=com

trying to run this command to create a new Call_Center object:

ldapmodify -x -W -D "cn=ldapadmin,dc=example,dc=com" -f modify.ldif

dn: cn=Call_Center,ou=Local,ou=SV,dc=example,dc=com
changetype: add
objectClass: top
objectClass: adminFunc
cn: Call_Center
functionId: 1010

But can't find my adminFunc object:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=Call_Center,ou=Local,ou=SV,dc=example,dc=com"
ldap_add: Invalid syntax (21)
       additional info: objectClass: value #1 invalid per syntax

Not sure what am I missing.

Thanks

Nanete answered 4/8, 2017 at 16:34 Comment(0)
K
10

These are my steps for creating a new object and attribute in openldap:

  1. Create the schema file, eg. test.schema

# Attribute definition

attributetype ( 1.3.6.1.4.1.42.2.27.4.1.6
        NAME 'sampleAttribute'
        DESC 'Sample Attribute'
        EQUALITY caseExactMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
        SINGLE-VALUE )

# Object Class Definition

objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1
        NAME 'SampleObject'
        DESC 'Sample object'
        SUP top
        STRUCTURAL
        MUST ( cn $ sampleAttribute ) )
  1. Create conf file, eg. test.conf

include /home/test.schema

  1. On the server, run:

#create directory

mkdir testdir

#run slaptest

slaptest -f test.conf -F testdir

The resulting file will be testdir/cn=config/cn=schema/cn={0}test.ldif and will look something like this (after some manual editing):

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 f74b018a
dn: cn=sample,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: sample
olcAttributeTypes: {0}( 1.3.6.1.4.1.42.2.27.4.1.6 NAME 'sampleAttribute'
  DESC 'Sample Attribute' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.
 121.1.15 SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.4.1.42.2.27.4.2.1 NAME 'SampleObject' DESC 'Sam
 ple object' SUP top STRUCTURAL MUST ( cn $ sampleAttribute ) )
structuralObjectClass: olcSchemaConfig
entryUUID: 4a10b3ec-4aca-1036-997a-3fcaae1517d7
creatorsName: cn=config
createTimestamp: 20161129215530Z
entryCSN: 20161129215530.381328Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20161129215530Z

I renamed mine to sample.ldif.

  1. Add ldif to schema

On the server, run:

service slapd stop
slapadd -l sample.ldif -n 0 
#to populate the config database slapd-config(5), use -n 0 as it is always the first database.
service slapd start
Kingcraft answered 7/8, 2017 at 14:37 Comment(5)
Old question, I know, but I wanted to make a mention since I just found this in 2019 and got confused. The modern versions of OpenLDAP use online changes (OLC), which is probably what you should use and probably what you want to use.Illstarred
Even older question now :D How would I add an attribute with OLC?Hypocaust
Actually this describes how to online-add a new schema (see dn: cn=sample,cn=schema,cn=config).Ignazio
You may want to include more schemas to the config to avoid errors.Translocation
superuser.com/questions/1464763/…Translocation

© 2022 - 2024 — McMap. All rights reserved.