-static char* get_alias_dn(
- Entry *e,
- int *err,
- const char **errmsg )
-{
- int rc;
- char *dn;
- struct berval *ndn = NULL;
- Attribute *a;
- AttributeDescription *aliasedObjectName
- = slap_schema.si_ad_aliasedObjectName;
-
- a = attr_find( e->e_attrs, aliasedObjectName );
-
- if( a == NULL ) {
- /*
- * there was an aliasedobjectname defined but no data.
- */
- *err = LDAP_ALIAS_PROBLEM;
- *errmsg = "alias missing aliasedObjectName attribute";
- return NULL;
- }
-
- /*
- * aliasedObjectName should be SINGLE-VALUED with a single value.
- */
- if ( a->a_vals[0] == NULL || a->a_vals[0]->bv_val == NULL ) {
- /*
- * there was an aliasedobjectname defined but no data.
- */
- *err = LDAP_ALIAS_PROBLEM;
- *errmsg = "alias missing aliasedObjectName value";
- return NULL;
- }
-
- if( a->a_vals[1] != NULL ) {
- *err = LDAP_ALIAS_PROBLEM;
- *errmsg = "alias has multivalued aliasedObjectName";
- return NULL;
- }
-
- rc = dnNormalize( NULL, a->a_vals[0], &ndn );
- if( rc != LDAP_SUCCESS ) {
- *err = LDAP_ALIAS_PROBLEM;
- *errmsg = "alias aliasedObjectName value is invalid";
- return NULL;
- }
-
- dn = ndn->bv_val;
- free( ndn );
- return dn;
-}
-
-static char* new_superior(
- const char *dn,
- const char *oldSup,
- const char *newSup )