Before upgrading from OpenLDAP 2.0 or 2.1 to OpenLDAP 2.2, the system
administrator should dump out the contents of the the directory server's
databases using the 'slapcat' utility included in the openldap-servers package
and save the LDIF files which it produces.

After the upgrade is complete, the data can be re-imported using the 'slapadd'
utility.  Some data which was exported from an OpenLDAP 2.0 server may not
import directly into an OpenLDAP 2.2 server.  If this happens, check for these
common problems:

  * Missing parent entries.
    Entries in the directory are no longer allowed to be children of entries
    which are not present in the directory.  For example, earlier releases
    would allow an entry with distinguished name (DN)
    "cn=foo,dc=devel,dc=example,dc=com" to be imported into a database for
    suffix "dc=example,dc=com" which contained neither an entry for
    "dc=devel,dc=example,dc=com" nor an entry for "dc=example,dc=com".

  * Deprecated objectclasses and attribute types.
    Entries of these classes should be replaced by entries of a different
    class.
     * the automountMap objectclass
       Use the nisMap objectclass instead, replacing these old attributes
       with new attributes:
       +====================================+
       | old attribute	    new attribute   |
       |------------------------------------|
       | ou		    nisMapName      |
       +====================================+
     * the automount objectclass
       Use the nisObject objectclass instead, replacing these old attributes
       with new attributes:
       +====================================+
       | old attribute	      new attribute |
       |------------------------------------|
       | cn                   cn            |
       | automountInformation nisMapEntry   |
       | (no counterpart)     nisMapName    |
       +====================================+

  * Missing objectclass definitions.
    Some objectclasses are no longer defined because they are no longer used.
    Remove the objectclass from the entry's list of objectclasses, and
    remove any values for attributes which are unique to that objectclass.
    These include:
     * the "kerberosSecurityObject" objectclass and the "krbName" attribute
     * the "dynamicObject" objectclass
     * the "LDAPsubEntry" objectclass

  * Missing attribute values.
    Some objectclass definitions mark a given attribute as both optional (MAY)
    and required (MUST).  While such attributes may have been treated as
    optional before, they are now treated as required.  Some examples:
     * the "ipProtocol" object class and its "description" attribute
     * the "rpcService" object class and its "description" attribute
     * the "oncRpc" object class and its "description" attribute
     * the "residentialPerson" object class and its "localityName" attribute

  * Structural vs. auxiliary objectclasses.
    The set of objectclasses which any entry lists should include exactly one
    STRUCTURAL class.  This requirement may not have been enforced in previous
    releases.

  * The entry does not contain its own RDN as an attribute-value pair.
    The naming attribute and value used as the entry's relative distinguished
    name (RDN) must be explicitly defined for the entry.  For example, an
    entry named "cn=contrived,dc=example,dc=com" must include "contrived" as a
    value for its "cn" attribute.
