Hi, Rusty here to discuss a recent problem that we resolved using the export and import features of Ldifde.exe .
During the usability testing phase of an inter-forest migration to a new forest of the same name, our customer discovered that smart card users in the new forest could not logon. They were receiving “Access Denied” after entering their PINs.
Prior to calling us, the customer discovered his own fix. He found that exporting the migrated user's AD Certificate to a file and then re-importing it back via the Security Identity Mapping GUI corrected the issue. Unfortunately, he had 12,000 accounts to manage - that’s when he called us.
ADMT has no problem migrating the “userCertificate” attribute, attributeCertificateAttribute . The Data Protection API prevents ADMT from migrating the altSecurityIdentities attribute which contains the X.509 mapping information. No X.509 mapping info = Smart Card Access Denied.
We needed to automate the collection and population of the altSecurityIdentities attribute for 12,000+ users. Using the:
Step-by-Step Guide to Bulk Import and Export to Active Directory
http://technet.microsoft.com/en-us/library/bb727091.aspx
as a reference, we came up with an
ldifde.exe
export which specifically called out the “list of attributes” switch. This allows us to export only the attribute data we need to correct the problem. By using the lower case
–l
option and specifying only the
altSecurityIdentities
attribute, we’ll return the user’s distinguished name and the attribute we want in the export file:
Ldifde –d “DC=fabrikam,DC=Com” –r “(objectCategory=user)” –p Subtree –l altSecurityIdentities –f oldDomainUsers.ldf
- -d sets search scope – in this case, fabrikam.com
- - r sets an ldap search filter, use an indexed object when you can
- -p details how deep in the directory to search, subtree searches all of the specified scope, fabrikam.com
- -l sets the list of attributes to return from the search, in this case the altSecurityIdentities attribute of each user
- -f sets the filename we export the data to
We then massaged the export file to remove users that were not smartcard enabled
(altSecurityIndentities
attribute not populated) to create an
LDIFDE
import file for the target domain:
dn: CN=CraigsUsername,CN=Users,DC=fabrikam,DC=Com
changetype: modify
replace: altSecurityIdentities
altSecurityIdentities:
X509:<I>C=XX,O=XX. XXXXX,OU=XXX,OU=PKI,CN=Certificate CLASS 3 CA-5<S>C=XX,O=XX
XX,OU=XXX,OU=PKI,OU=User'sOU,CN=Username.Craig.SomeNumericValue
-
dn: CN=NedsUsername,CN=Users,DC=fabrikam,DC=com
changetype: modify
replace: altSecurityIdentities
altSecurityIdentities:
X509:<I>C=XX,O=XX. XXXXX,OU=XXX,OU=PKI,CN=Certificate CLASS 3 CA-5<S>C=XX,O=XX
XX,OU=XXX,OU=PKI,OU=User'sOU,CN=Username.Ned.SomeNumericValue
-
It is important to note that the "-" is a separator between changetype: modify operations. It must be there for each attribute to be modified.
Notes
: Migration to a new forest of the same name is made possible by using a temporary, 3
rd
forest in-between the old and new. To learn more about certificate mapping, read
Designing a Public Key Infrastructure
in the Windows Server 2003 Deployment Guide.
ADMT 3.1 documentation
indicates that there is no guarantee all user attributes, data, and certificates will migrate successfully.
Hopefully this gives you some insight into more advanced usages of ldifde.exe. Keep in mind that
csvde.exe
delivers the same functionality with the advanced data manipulation features of MS Excel.
- Russell “Spaniard” Despain