Background
A simplified, more supportable LDAP was introduced on October 4, 2016.
At Berkeley, our LDAP server had been heavily modified to act as a primary data store for all identity information. As part of the Student Information System development effort, CalNet deployed a new Berkeley Person Registry (BPR). This is a database that sits between the authoritative systems of record and the LDAP servers. BRP replaces LDAP as the primary data store for identity information. As a result of these changes, the considerable complexity of the heavily modified LDAP schema was no longer necessary and was simplified to a more standard deployment.
What Changed
The three main changes to the LDAP structure were:
-
Job Appointment, Affiliate and Term Sub-Entries were deprecated.
-
Approximately 130 LDAP attributes were deprecated.
-
Affiliates and expirations are now handled differently.
What Stayed the Same?
The OU structure is remaining the same, for now. The practice of moving records between OUs will continue at this time. This will be revisited in the future.
Address Sub-Entries also remained the same. These are updated directly from the CalNet Directory update application. This will also be addressed in the future.
Changes to Affiliate IDs
LDAP has traditionally stored unique expiry dates for various affiliations. Those expiry dates indicated the date on which an affiliation would no longer be valid. Account expiration scripts would then use those dates to calculate the grace period for the account. This logic was actually duplicated by consumers trying to align with CalNet’s internal calculations. The affiliation specific expiry dates used to be stored in:
berkeleyEduStuExpDate
berkeleyEduEmpExpDate
berkeleyEduAffExpDate
These fields have been deprecated. Instead CalNet consistently populates the following field:
berkeleyEduExpDate
The value in berkeleyEduExpDate is the official date on which a record will be expired. This means that systems should assume that this person will no longer be able to log in on that date. (It is possible that an Alumni affiliation will cause this record to be moved to ou=advcon but unless you have access to advcon, this is functionally the same as the record being expired).
The grace period will have been calculated and reflected in this date. The presence of a value in this field means that all active affiliations have already expired and the account is in it’s grace period. If a system of record subsequently asserts this person again, the berkeleyEduExpDate will be nulled out.
Why did we change LDAP?
An LDAP schema is effectively a contract between the people who populate the data and the people who consume it. Historically, at Berkeley, it was not treated as such. In everyone’s effort to find the best solution for their applications, we collectively allowed a large and unwieldy LDAP schema to become the defacto contract. This was not a contract that the University could realistically maintain while meeting the increased demand for advanced Identity and Access services, and also being pressured to reduce costs. This new LDAP schema represents a contract that bIT can realistically support into the future, with the understanding that future modifications and renegotiations are always possible.
What if I have problems with the new LDAP?
If your code is dependent on deprecated attributes, you should immediately start engaging with api-central to find a new source for the data.
You can test your application by pointing a test version at test ldap instance:
nds-p6.calnet.berkeley.edu
Appendix: Deprecated Attributes
THE FOLLOWING ATTRIBUTES WILL NO LONGER BE SUPPORTED
berkeleyEduAcaSenFlag |
berkeleyEduAffApptBeginDate |
berkeleyEduAffApptEndDate |
berkeleyEduAffBirthMonthDay |
berkeleyEduAffCreateDate |
berkeleyEduAffFeePaidDate |
berkeleyEduAffiliationsDetailed |
berkeleyEduAffModDate |
berkeleyEduAffName |
berkeleyEduAffTerminationDate |
berkeleyEduAffWorkStudyFlag |
berkeleyEduAppStandardCalMailDeptAccountTicket |
berkeleyEduAppStandardCalMailDisallowedBy |
berkeleyEduAppStandardCalMailDisallowedDate |
berkeleyEduAppStandardCalMailDisallowedFlag |
berkeleyEduAppStandardCommuniteAddlMbox |
berkeleyEduAppStandardCommuniteAdminFlag |
berkeleyEduAppStandardCommuniteEmailAddress |
berkeleyEduAppStandardCommuniteEmailHost |
berkeleyEduAppStandardCommuniteEmailPassword |
berkeleyEduAppStandardCommuniteEmailUserName |
berkeleyEduAppStandardDeputyOptOutFlag |
berkeleyEduAppStandardQuestPerms |
berkeleyEduAppStandardWebDiskID |
berkeleyEduAppStandardWmfGid |
berkeleyEduAppStandardWmfHomeDir |
berkeleyEduAssistant |
berkeleyEduCalNetKey |
berkeleyEduCalNetKeySalt |
berkeleyEduCrisis* |
berkeleyEduDeptUnitHierarchyString |
berkeleyEduDeputyAdminTool |
berkeleyEduDeputyAuthorizedBy |
berkeleyEduDeputyClassDate |
berkeleyEduDeputyComments |
berkeleyEduDeputyDisabledDate |
berkeleyEduDeputyDisabledFlag |
berkeleyEduDeputyIPsAllowed |
berkeleyEduDeputyPrincipal |
berkeleyEduDeputyPrincipalProcUnit |
berkeleyEduDeputyProcUnits |
berkeleyEduDeputyType |
berkeleyEduEmpApptBeginDate |
berkeleyEduEmpApptEndDate |
berkeleyEduEmpApptType |
berkeleyEduEmpBirthMonthDay |
berkeleyEduEmpCreateDate |
berkeleyEduEmpCTOCode |
berkeleyEduEmpExpDate |
berkeleyEduEmpModDate |
berkeleyEduEmpName |
berkeleyEduEmpRelationsCode |
berkeleyEduEmpTerminationDate |
berkeleyEduEmpWorkStudyFlag |
berkeleyEduExcludeFlag |
berkeleyEduFacultyFlag |
berkeleyEduIdentityVerifiedDate |
berkeleyEduIMProtocol |
berkeleyEduIMScreenName |
berkeleyEduKerberosInstance |
berkeleyEduKerberosPrimary |
berkeleyEduKerberosRealm |
berkeleyEduKerberosStatusCode |
berkeleyEduMaidenName |
berkeleyEduMaxExpDate |
berkeleyEduModDate |
berkeleyEduOnlineUpdateAllowedFlag |
berkeleyEduPassphraseCompliant |
berkeleyEduPersonAddressBuildingCode |
berkeleyEduPersonAddressCountryCode |
berkeleyEduPersonAddressDeptDN |
berkeleyEduPersonAddressHRJobTitle |
berkeleyEduPersonAddressLocationCode |
berkeleyEduPersonAddressPublications |
berkeleyEduPersonAddressReceiveMailFlag |
berkeleyEduPersonAddressSortOrder |
berkeleyEduPersonAddressType |
berkeleyEduPersonAddressUnitCalNetDeptName |
berkeleyEduPhoneBookOnlyFlag |
berkeleyEduPhotoIDVerifiedDate |
berkeleyEduPPSivrStatusFlag |
berkeleyEduPrimaryDeptUnitHierarchyString |
berkeleyEduSPAAdminGroup |
berkeleyEduSPAApproverUID |
berkeleyEduSPACollection |
berkeleyEduSSN |
berkeleyEduStuApprovedWithdrawEndDate |
berkeleyEduStuBirthDate |
berkeleyEduStuCollegeCode |
berkeleyEduStuCollegeName |
berkeleyEduStuCreateDate |
berkeleyEduStuEduLevelCode |
berkeleyEduStuEduLevelName |
berkeleyEduStuEduRoleCode |
berkeleyEduStuEduRoleName |
berkeleyEduStuExpDate |
berkeleyEduStuMajorCode |
berkeleyEduStuMajorName |
berkeleyEduStuModDate |
berkeleyEduStuName |
berkeleyEduStuRegStatCode |
berkeleyEduStuRegStatName |
berkeleyEduStuTermCode |
berkeleyEduStuTermName |
berkeleyEduStuTermStatus |
berkeleyEduStuTermYear |
berkeleyEduStuUGCode |
berkeleyEduTokenIssuer |
berkeleyEduUasEligFlag |
berkeleyEduUnitCalNetDeptName |
businessCategory |
carLicense |
destinationIndicator |
eduPersonAffiliation |
eduPersonNickname |
eduPersonOrgDN |
eduPersonOrgUnitDN |
eduPersonPrimaryAffiliation |
eduPersonPrimaryOrgUnitDN |
eduPersonScopedAffiliation |
eduPersonTargetedID |
homePhone |
homePostalAddress |
initials |
internationaliSDNNumber |
jpegPhoto |
manager |
pager |
photo |
physicalDeliveryOfficeName |
postOfficeBox |
preferredDeliveryMethod |
preferredLanguage |
registeredAddress |
secretary |
seeAlso |
teletexTerminalIdentifier |
telexNumber |
UCTrustAssurance |
Person Term Subentry Attributes |
berkeleyEduStuChangeDate |
berkeleyEduStuCollegeCode |
berkeleyEduStuCollegeName |
berkeleyEduStuEduLevelCode |
berkeleyEduStuEduLevelName |
berkeleyEduStuEduRoleCode |
berkeleyEduStuEduRoleName |
berkeleyEduStuMajorCode |
berkeleyEduStuMajorName |
berkeleyEduStuRegStatCode |
berkeleyEduStuRegStatName |
berkeleyEduStuTermCode |
berkeleyEduStuTermName |
berkeleyEduStuTermStatus |
berkeleyEduStuTermYear |
berkeleyEduStuUGCode |
Person Job Appointment Subentry |
berkeleyEduPersonJobApptCTOCode |
berkeleyEduPersonJobApptDepartment |
berkeleyEduPersonJobApptEmpRecNumber |
berkeleyEduPersonJobApptPersPgmCode |
berkeleyEduPersonJobApptPrimaryFlag |
berkeleyEduPersonJobApptRelationsCode |
berkeleyEduPersonJobApptRepresentation |
berkeleyEduPersonJobApptTitleCode |
berkeleyEduPersonJobApptType |
berkeleyEduPersonJobApptWOS |