cancel
Showing results for 
Search instead for 
Did you mean: 

Pulling Additional Attributes from AD LDAP - Ver 3.2r2

acook
Champ in-the-making
Champ in-the-making
Hi all-

So, let me first start off by saying that I am very new to Alfresco and have only been experimenting with it for about the last 2 months.  In saying this, thanks to the wiki articles concerning the Alfresco Subsystems and such, I have been very successful in configuring my Alfresco installation.  However, I currently have a problem/question concerning pulling additional attributes (for example, "location" attribute from Active Directory) into Alfresco, which, as far as I can tell, is not done with the "default" properties file (ldap-ad-authentication.properties).

There is no question - my Alfresco installation is successfully syncing users against Acitve Directory (AD) and authenticating quite nicely against it.  However, when I log into Alfresco as one of my users and browse to "User Profile and Settings" area of Alfresco, I only see that the "First Name", "Last Name", "Email" and "Organization" has been populated, according to the data in AD.  I was wondering, can the remaining fields (for example, "Job Title" and "Location") be also populated from AD during a sync?  My assumption was "yes", so I went searching around and found the following post:

http://forums.alfresco.com/en/viewtopic.php?f=9&t=21588

I thought that it applied to what I was trying to achieve so I followed it.  However, I cannot populate these fields.  Perhaps, I am missing something?

About my settings/configuration as of now:
Here is my authentication chain -
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap-ad

Therefore, I have created the directory structure for the Authentication subsystem based on this.  Accordingly, I have created two files -
..tomcat\shared\classes\alfresco\extension\subsystems\Authentication\ldap-ad\ldap1\ldap-ad-authentication.properties
..tomcat\shared\classes\alfresco\extension\subsystems\Authentication\ldap-ad\ldap1\custom-ldap-context.xml

For ldap-ad-authentication.properties, I have added the following to the end:

#CUSTOM LDAP MAPPINGS
ldap.synchronization.userJobTitleAttributeName=title
ldap.synchronization.userOrganizationAttributeName=department
ldap.synchronization.userLocationAttributeName=physicalDeliveryOfficeName
ldap.synchronization.userMobileAttributeName=mobile
ldap.synchronization.userCompanyPostCodeAttributeName=postalCode
ldap.synchronization.userCompanyFaxAttributeName=facsimileTelephoneNumber
ldap.synchronization.userCompanyTelephoneAttributeName=telephoneNumber
ldap.synchronization.userCompanyEmailAttributeName=mail
ldap.synchronization.userPersonDescriptionAttributeName=info
ldap.synchronization.userTelephoneAttributeName=homePhone
ldap.synchronization.userCompanyAddress1AttributeName=streetAddress
ldap.synchronization.userCompanyAddress2AttributeName=l
ldap.synchronization.userCompanyAddress3AttributeName=st

For custom-ldap-context.xml, I have added the following (under the "userRegistry" Bean id and "attributeMapping" property):
      
<!– CUSTOM ENTRY KEYS –>
<entry key="cm:jobtitle">
     <value>${ldap.synchronization.userJobTitleAttributeName}</value>
</entry>
<entry key="cm:organization">
     <value>${ldap.synchronization.userOrganizationAttributeName}</value>
</entry>
<entry key="cm:location">
     <value>${ldap.synchronization.userLocationAttributeName}</value>
</entry>
<entry key="cm:mobile">
     <value>${ldap.synchronization.userMobileAttributeName}</value>
</entry>
<entry key="cm:companypostcode">
     <value>${ldap.synchronization.userCompanyPostCodeAttributeName}</value>
</entry>
<entry key="cm:companyfax">
     <value>${ldap.synchronization.userCompanyFaxAttributeName}</value>
</entry>
<entry key="cm:companytelephone">
     <value>${ldap.synchronization.userCompanyTelephoneAttributeName}</value>
</entry>
<entry key="cm:companyemail">
     <value>${ldap.synchronization.userCompanyEmailAttributeName}</value>
</entry>
<entry key="cm:persondescription">
     <value>${ldap.synchronization.userPersonDescriptionAttributeName}</value>
</entry>
<entry key="cm:telephone">
     <value>${ldap.synchronization.userTelephoneAttributeName}</value>
</entry>
<entry key="cm:companyaddress1">
     <value>${ldap.synchronization.userCompanyAddress1AttributeName}</value>
</entry>
<entry key="cm:companyaddress2">
     <value>${ldap.synchronization.userCompanyAddress2AttributeName}</value>
</entry>
<entry key="cm:companyaddress3">
     <value>${ldap.synchronization.userCompanyAddress3AttributeName}</value>
</entry>

The rest of "custom-ldap-context.xml" is just a copy of "common-ldap-context.xml".  I do not see any error messages concerning this in "alfresco.log", but then again, I do not think that attribute-level mapping information is logged (from other posts I have come across).  Perhaps, this file is not being read?

I also used this page as a reference:
http://wiki.alfresco.com/wiki/Alfresco_Subsystems#Spring_Beans

Any help would greatly be appreciated.

Thanks for your time in advance.
14 REPLIES 14

gojko
Champ in-the-making
Champ in-the-making
Hello,

I am trying to set up the configuration to sync additional attributes like acook in the first post. However, the current configuration is not working on my 4.2 Community version. I'm trying to sync with Windows AD, not OpenLDAP.

First, let me say that authentification is working perfectly, This is my alfresco-global.properties file's AD configuration part



# AD integration
authentication.chain=ldap1:ldap-ad,alfinst:alfrescoNtlm
ntlm.authentication.sso.enabled=false
ldap.authentication.allowGuestLogin=false
ldap.authentication.userNameFormat=%s@XXXXXXXXXXXX
ldap.authentication.java.naming.provider.url=ldap://XXXXXXXXXXX:389
ldap.authentication.defaultAdministratorUserNames=Administrator
ldap.synchronization.java.naming.security.principal=administrator@XXXXXXXXXXXXX
ldap.synchronization.java.naming.security.credentials=XXXXXXXXXXXXXX
ldap.synchronization.groupSearchBase=ou=XXXXXXXXX,dc=XXXXXXXX,dc=XXXXXXXXXX
ldap.synchronization.userSearchBase=ou=XXXXXXXXX,dc=XXXXXXXX,dc=XXXXXXXXX
#CUSTOM LDAP MAPPINGS
ldap.synchronization.userJobTitleAttributeName=title
ldap.synchronization.userOrganizationAttributeName=department
ldap.synchronization.userLocationAttributeName=physicalDeliveryOfficeName
ldap.synchronization.userMobileAttributeName=mobile
ldap.synchronization.userCompanyPostCodeAttributeName=postalCode
ldap.synchronization.userCompanyFaxAttributeName=facsimileTelephoneNumber
ldap.synchronization.userCompanyTelephoneAttributeName=telephoneNumber
ldap.synchronization.userCompanyEmailAttributeName=mail
ldap.synchronization.userPersonDescriptionAttributeName=info
ldap.synchronization.userTelephoneAttributeName=homePhone
ldap.synchronization.userCompanyAddress1AttributeName=streetAddress
ldap.synchronization.userCompanyAddress2AttributeName=l
ldap.synchronization.userCompanyAddress3AttributeName=st

# Sync
synchronization.synchronizeChangesOnly=false
synchronization.allowDeletions=false
synchronization.import.cron=0 0/3 * * * ?



I have created a folder structure like so:
/opt/alfresco-4.2.f/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap-ad/



├── custom-ldap-ad-context.xml
├── custom-ldap-context.xml
├── ldap1
│   ├── custom-ldap-ad-context.xml
│   ├── custom-ldap-context.xml
│   ├── ldap-ad-authentication.properties
│   └── ldap-authentication.properties
├── ldap-ad1
│   ├── custom-ldap-ad-context.xml
│   ├── custom-ldap-context.xml
│   ├── ldap-ad-authentication.properties
│   └── ldap-authentication.properties
├── ldap-ad-authentication.properties
└── ldap-authentication.properties




custom-ldap-ad-context.xml

contains the same code like in first post, under the tags:


<bean id="userRegistry" class="org.alfresco.repo.security.sync.ldap.LDAPUserRegistry">
<property name="personAttributeMapping">
<map>


ldap-ad-authentication.properties
has the same code as in the first post.

Should the location be in folder ldap1 or ldap-ad1 ? Should I be using custom-ldap-ad-context.xml or custom-ldap-context.xml ? Should I be using custom-ldap-ad-context.xml or custom-ldap-context.xml? How can I check this configuration is loaded?

Could anyone provide help with configuring this? I could provide more data if required.



gojko
Champ in-the-making
Champ in-the-making
I was able to configure this properly.

You have to follow the instructions on this link carefully:
http://wiki.alfresco.com/wiki/Alfresco_Authentication_Subsystems#Configuration_2

What you do is follow the steps here:
Example 3: Configure Authentication subsystem in "shared" folder
but substitute ldap with ldap-ad if you have configuration like mine.

Near the end there is an error in documentation, it says:
Modify authentication.chain adding myldap:myldap (e.g.: authentication.chain=myldap:myldap,alfrescoNtlm:alfrescoNtlm)
the correct value would be authentication.chain=myldap:ldap-ad,alfinst:alfrescoNtlm

You should follow the log /alfresco.log and it will list users like this, that's a good sign:
15:43:50,152 WARN  [org.alfresco.repo.security.sync.ChainingUserRegistrySynchronizer] Updating user 'test2801'. This user will in future be assumed to originate from user registry 'myldap'.

livier
Confirmed Champ
Confirmed Champ

Hi all,

Im new on alfresco and I work on alfresco community v5.2

Could someone tell me where I can find the original file common-ldap-context.xml ?

On the post LDAP Synchronization of User Details , it said that the path file is :

%TOMCAT_HOME%\webapps\alfresco\WEB-INF\classes\alfresco\subsystems\Authentication\common-ldap-context.xml

But I don't find it.

Thanks in advance

Hi Douglas,

Thank you very much for your answer

When I try to simply add the custom-ldap-context.xml in my alfresco/extension/subsystems/Authentication/ldap/ldap1 directory, I get this error while starting alfresco service

2018-10-08 09:10:41,650  WARN  [management.subsystems.ChildApplicationContextFactory$ChildApplicationContext] [localhost-startStop-1] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'monitor' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Cannot resolve reference to bean 'authenticationComponent' while setting bean property 'LDAPAuthenticationComponent'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationComponent' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Cannot resolve reference to bean 'ldapInitialDirContextFactory' while setting bean property 'LDAPInitialDirContextFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ldapInitialDirContextFactory' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Illegal value for java.naming.referral property.
 2018-10-08 09:10:41,651  WARN  [management.subsystems.ChildApplicationContextFactory] [localhost-startStop-1] Startup of 'Authentication' subsystem, ID: [Authentication, managed, ldap1] failed
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'monitor' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Cannot resolve reference to bean 'authenticationComponent' while setting bean property 'LDAPAuthenticationComponent'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationComponent' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Cannot resolve reference to bean 'ldapInitialDirContextFactory' while setting bean property 'LDAPInitialDirContextFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ldapInitialDirContextFactory' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Illegal value for java.naming.referral property.
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:334)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1419)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1160)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:636)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:938)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
        at org.alfresco.repo.management.subsystems.ChildApplicationContextFactory$ApplicationContextState.start(ChildApplicationContextFactory.java:824)
        at org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean.start(AbstractPropertyBackedBean.java:1098)
        at org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean.getState(AbstractPropertyBackedBean.java:320)
        at org.alfresco.repo.management.subsystems.ChildApplicationContextFactory.getApplicationContext(ChildApplicationContextFactory.java:450)
        at org.alfresco.repo.management.subsystems.DefaultChildApplicationContextManager$ApplicationContextManagerState.getApplicationContext(DefaultChildApplicationContextManager.java:382)
        at org.alfresco.repo.management.subsystems.DefaultChildApplicationContextManager$ApplicationContextManagerState.start(DefaultChildApplicationContextManager.java:328)
        at org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean.start(AbstractPropertyBackedBean.java:1098)
        at org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean.getState(AbstractPropertyBackedBean.java:320)
        at org.alfresco.repo.management.subsystems.DefaultChildApplicationContextManager.getInstanceIds(DefaultChildApplicationContextManager.java:187)
        at org.alfresco.repo.admin.patch.impl.AdminUserPatch.afterPropertiesSet(AdminUserPatch.java:111)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1573)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1511)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:636)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:938)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
        at org.alfresco.web.app.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:70)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5016)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5524)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:672)
        at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1859)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationComponent' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Cannot resolve reference to bean 'ldapInitialDirContextFactory' while setting bean property 'LDAPInitialDirContextFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ldapInitialDirContextFactory' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Illegal value for java.naming.referral property.
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:334)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1419)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1160)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
        ... 50 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ldapInitialDirContextFactory' defined in file [/app/alfresco-community/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Illegal value for java.naming.referral property.
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1514)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
        ... 60 more
Caused by: java.lang.IllegalArgumentException: Illegal value for java.naming.referral property.
        at com.sun.jndi.ldap.LdapCtx.setReferralMode(LdapCtx.java:2426)
        at com.sun.jndi.ldap.LdapCtx.initEnv(LdapCtx.java:2359)
        at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:317)
        at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
        at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
        at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
        at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
        at javax.naming.InitialContext.init(InitialContext.java:244)
        at javax.naming.InitialContext.<init>(InitialContext.java:216)
        at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:101)
        at org.alfresco.repo.security.authentication.ldap.LDAPInitialDirContextFactoryImpl.afterPropertiesSet(LDAPInitialDirContextFactoryImpl.java:495)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1573)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1511)
        ... 67 more

In my alfressco-global.properties file I have :

authentication.chain=alfinst:alfrescoNtlm,ldap1:ldap

Moreover, if I want to add additional attributes for the users, should I add the key under <property name="personAttributeMapping"> ?

Can I create a new  attribute on my profile's user ?

For example, in my LDAP I have the DN's manager of a person and I'd like to add it in my users' profile on alfresco.

Is there a way to link a person from my LDAP to an other person.
It could be used for example in workflows

Thanks in advance