The info on this page applies to Grouper 2.6 and above.
Requirements
- Entities with attribute for groups
- Groups need to be looked up
- Groups are bushy
- User attribute value is for memberships is the group dn
- Groups are looked up by gidNumber = idIndex
- Users are looked up by subjectId
- Users exist in LDAP and otherwise (besides memberships) shouldn't be edited
Note: might want to schedule the entity attribute incremental daemon to run after the group attribute incremental daemon, but before the change log temp to change log, e.g. 40 * * * * ?
Configuration
Provisioner in grouper-loader.properties
provisioner.ldapUserAttributes.class = edu.internet2.middleware.grouper.app.ldapProvisioning.LdapSync provisioner.ldapUserAttributes.deleteMemberships = true provisioner.ldapUserAttributes.deleteMembershipsIfNotExistInGrouper = true provisioner.ldapUserAttributes.groupSearchAllFilter = (&(objectClass=posixGroup)(gidNumber=*)) provisioner.ldapUserAttributes.groupSearchBaseDn = ou=Groups2,dc=example,dc=edu provisioner.ldapUserAttributes.groupSearchFilter = (&(gidNumber=${targetGroup.retrieveAttributeValue('gidNumber')})(objectClass=posixGroup)) provisioner.ldapUserAttributes.hasTargetEntityLink = true provisioner.ldapUserAttributes.hasTargetGroupLink = true provisioner.ldapUserAttributes.insertMemberships = true provisioner.ldapUserAttributes.ldapExternalSystemConfigId = personLdap provisioner.ldapUserAttributes.logAllObjectsVerbose = true provisioner.ldapUserAttributes.numberOfEntityAttributes = 3 provisioner.ldapUserAttributes.numberOfGroupAttributes = 2 provisioner.ldapUserAttributes.operateOnGrouperEntities = true provisioner.ldapUserAttributes.operateOnGrouperGroups = true provisioner.ldapUserAttributes.operateOnGrouperMemberships = true provisioner.ldapUserAttributes.provisioningType = entityAttributes provisioner.ldapUserAttributes.selectAllEntities = true provisioner.ldapUserAttributes.selectEntities = true provisioner.ldapUserAttributes.selectGroups = true provisioner.ldapUserAttributes.selectMemberships = true provisioner.ldapUserAttributes.showAdvanced = true provisioner.ldapUserAttributes.subjectSourcesToProvision = personLdapSource provisioner.ldapUserAttributes.targetEntityAttribute.0.fieldName = name provisioner.ldapUserAttributes.targetEntityAttribute.0.isFieldElseAttribute = true provisioner.ldapUserAttributes.targetEntityAttribute.0.select = true provisioner.ldapUserAttributes.targetEntityAttribute.0.translateToMemberSyncField = memberToId2 provisioner.ldapUserAttributes.targetEntityAttribute.1.isFieldElseAttribute = false provisioner.ldapUserAttributes.targetEntityAttribute.1.matchingId = true provisioner.ldapUserAttributes.targetEntityAttribute.1.name = uid provisioner.ldapUserAttributes.targetEntityAttribute.1.searchAttribute = true provisioner.ldapUserAttributes.targetEntityAttribute.1.select = true provisioner.ldapUserAttributes.targetEntityAttribute.1.translateExpressionType = grouperProvisioningEntityField provisioner.ldapUserAttributes.targetEntityAttribute.1.translateFromGrouperProvisioningEntityField = subjectId provisioner.ldapUserAttributes.targetEntityAttribute.2.isFieldElseAttribute = false provisioner.ldapUserAttributes.targetEntityAttribute.2.membershipAttribute = true provisioner.ldapUserAttributes.targetEntityAttribute.2.multiValued = true provisioner.ldapUserAttributes.targetEntityAttribute.2.name = description provisioner.ldapUserAttributes.targetEntityAttribute.2.translateFromGroupSyncField = groupToId2 provisioner.ldapUserAttributes.targetGroupAttribute.0.fieldName = name provisioner.ldapUserAttributes.targetGroupAttribute.0.isFieldElseAttribute = true provisioner.ldapUserAttributes.targetGroupAttribute.0.select = true provisioner.ldapUserAttributes.targetGroupAttribute.0.translateToGroupSyncField = groupToId2 provisioner.ldapUserAttributes.targetGroupAttribute.1.isFieldElseAttribute = false provisioner.ldapUserAttributes.targetGroupAttribute.1.matchingId = true provisioner.ldapUserAttributes.targetGroupAttribute.1.name = gidNumber provisioner.ldapUserAttributes.targetGroupAttribute.1.searchAttribute = true provisioner.ldapUserAttributes.targetGroupAttribute.1.select = true provisioner.ldapUserAttributes.targetGroupAttribute.1.translateExpressionType = grouperProvisioningGroupField provisioner.ldapUserAttributes.targetGroupAttribute.1.translateFromGrouperProvisioningGroupField = idIndexString provisioner.ldapUserAttributes.updateEntities = true provisioner.ldapUserAttributes.userSearchAllFilter = (uid=*) provisioner.ldapUserAttributes.userSearchBaseDn = ou=People,dc=example,dc=edu provisioner.ldapUserAttributes.userSearchFilter = (uid=${targetEntity.retrieveAttributeValue('uid')})
External system in grouper-loader.properties
ldap.personLdap.pass = ******* ldap.personLdap.searchResultHandlers = org.ldaptive.handler.DnAttributeEntryHandler,edu.internet2.middleware.grouper.ldap.ldaptive.GrouperRangeEntryHandler ldap.personLdap.uiTestAttributeName = dc ldap.personLdap.uiTestExpectedValue = example ldap.personLdap.uiTestFilter = (dc=example) ldap.personLdap.uiTestSearchDn = dc=example,dc=edu ldap.personLdap.uiTestSearchScope = OBJECT_SCOPE ldap.personLdap.url = ldap://localhost:389 ldap.personLdap.user = cn=admin,dc=example,dc=edu
Daemon jobs in grouper-loader.properties
changeLog.consumer.ldapUserAttributesIncremental.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbConsumer changeLog.consumer.ldapUserAttributesIncremental.provisionerConfigId = ldapUserAttributes changeLog.consumer.ldapUserAttributesIncremental.publisher.class = edu.internet2.middleware.grouper.app.provisioning.ProvisioningConsumer changeLog.consumer.ldapUserAttributesIncremental.publisher.debug = false changeLog.consumer.ldapUserAttributesIncremental.quartzCron = 40 * * * * ? otherJob.ldapUserAttributesFull.class = edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningFullSyncJob otherJob.ldapUserAttributesFull.provisionerConfigId = ldapUserAttributes otherJob.ldapUserAttributesFull.quartzCron = 19 9 5 * * ?
Subject source in subject.properties
subjectApi.source.myPeople.adapterClass = edu.internet2.middleware.grouper.subj.GrouperLdapSourceAdapter2_5 subjectApi.source.myPeople.attribute.0.name = uid subjectApi.source.myPeople.attribute.0.translationType = sourceAttributeSameAsSubjectAttribute subjectApi.source.myPeople.attribute.1.name = mail subjectApi.source.myPeople.attribute.1.subjectIdentifier = true subjectApi.source.myPeople.attribute.1.translationType = sourceAttributeSameAsSubjectAttribute subjectApi.source.myPeople.attribute.2.name = name subjectApi.source.myPeople.attribute.2.sourceAttribute = cn subjectApi.source.myPeople.attribute.2.translationType = sourceAttribute subjectApi.source.myPeople.attribute.3.name = description subjectApi.source.myPeople.attribute.3.translation = ${subject_attribute__cn + ' (' +source_attribute__uid + ') - ' + source_attribute__businesscategory + ' - ' + source_attribute__edupersonaffiliation} subjectApi.source.myPeople.attribute.3.translationType = translation subjectApi.source.myPeople.extraAttributesFromSource = businessCategory, eduPersonAffiliation subjectApi.source.myPeople.id = personLdapSource subjectApi.source.myPeople.name = My LDAP subjectApi.source.myPeople.numberOfAttributes = 4 subjectApi.source.myPeople.param.Description_AttributeType.value = description subjectApi.source.myPeople.param.Name_AttributeType.value = name subjectApi.source.myPeople.param.SubjectID_AttributeType.value = uid subjectApi.source.myPeople.param.emailAttributeName.value = mail subjectApi.source.myPeople.param.findSubjectByIdOnCheckConfig.value = true subjectApi.source.myPeople.param.findSubjectByIdentifiedOnCheckConfig.value = true subjectApi.source.myPeople.param.findSubjectByStringOnCheckConfig.value = true subjectApi.source.myPeople.param.ldapServerId.value = personLdap subjectApi.source.myPeople.param.netId.value = mail subjectApi.source.myPeople.param.stringToFindOnCheckConfig.value = aa subjectApi.source.myPeople.param.subjectIdToFindOnCheckConfig.value = aanderson subjectApi.source.myPeople.param.subjectIdentifierToFindOnCheckConfig.value = aanderson@example.edu subjectApi.source.myPeople.search.search.param.filter.value = (&(|(|(uid=%TERM%)(cn=*%TERM%*))(uid=%TERM%*))(objectclass=person)) subjectApi.source.myPeople.search.searchSubject.param.base.value = ou=People,dc=example,dc=edu subjectApi.source.myPeople.search.searchSubject.param.filter.value = (uid=%TERM%) subjectApi.source.myPeople.search.searchSubject.param.scope.value = SUBTREE_SCOPE subjectApi.source.myPeople.search.searchSubjectByIdentifier.param.filter.value = (mail=%TERM%) subjectApi.source.myPeople.searchAttribute.0.attributeName = description subjectApi.source.myPeople.searchAttributeCount = 1 subjectApi.source.myPeople.sortAttribute.0.attributeName = name subjectApi.source.myPeople.sortAttributeCount = 1 subjectApi.source.myPeople.types = person