- ber_bvecadd( &be->be_suffix, pdn );
- ber_bvecadd( &be->be_nsuffix, ndn );
-
- /* set database suffixAlias */
- } else if ( strcasecmp( cargv[0], "suffixAlias" ) == 0 ) {
- Backend *tmp_be;
- struct berval alias, *palias, nalias;
- struct berval aliased, *paliased, naliased;
-
- if ( cargc < 2 ) {
-#ifdef NEW_LOGGING
- LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
- "%s: line %d: missing alias and aliased_dn in "
- "\"suffixAlias <alias> <aliased_dn>\" line.\n",
- fname, lineno ));
-#else
- Debug( LDAP_DEBUG_ANY,
- "%s: line %d: missing alias and aliased_dn in "
- "\"suffixAlias <alias> <aliased_dn>\" line.\n",
- fname, lineno, 0 );
-#endif
-
- return( 1 );
- } else if ( cargc < 3 ) {
-#ifdef NEW_LOGGING
- LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
- "%s: line %d: missing aliased_dn in "
- "\"suffixAlias <alias> <aliased_dn>\" line\n",
- fname, lineno ));
-#else
- Debug( LDAP_DEBUG_ANY,
- "%s: line %d: missing aliased_dn in "
- "\"suffixAlias <alias> <aliased_dn>\" line\n",
- fname, lineno, 0 );
-#endif
-
- return( 1 );
- } else if ( cargc > 3 ) {
-#ifdef NEW_LOGGING
- LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
- "%s: line %d: extra cruft in suffixAlias line (ignored)\n",
- fname, lineno ));
-#else
- Debug( LDAP_DEBUG_ANY,
- "%s: line %d: extra cruft in suffixAlias line (ignored)\n",
- fname, lineno, 0 );
-#endif
-
- }
-
- if ( be == NULL ) {
-#ifdef NEW_LOGGING
- LDAP_LOG(( "config", LDAP_LEVEL_INFO,
- "%s: line %d: suffixAlias line must appear inside a "
- "database definition (ignored).\n", fname, lineno ));
-#else
- Debug( LDAP_DEBUG_ANY,
- "%s: line %d: suffixAlias line"
- " must appear inside a database definition (ignored)\n",
- fname, lineno, 0 );
-#endif
- }
-
- if ( load_ucdata( NULL ) < 0 ) return 1;
-
- alias.bv_val = cargv[1];
- alias.bv_len = strlen( cargv[1] );
- palias = ch_malloc(sizeof(struct berval));
-
- rc = dnPrettyNormal( NULL, &alias, palias, &nalias );
- if( rc != LDAP_SUCCESS ) {
-#ifdef NEW_LOGGING
- LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
- "%s: line %d: alias DN is invalid.\n",
- fname, lineno ));
-#else
- Debug( LDAP_DEBUG_ANY,
- "%s: line %d: alias DN is invalid\n",
- fname, lineno, 0 );
-#endif
- return( 1 );
- }
-
- tmp_be = select_backend( &nalias, 0, 0 );
- free( nalias.bv_val );
- if ( tmp_be && tmp_be != be ) {
-#ifdef NEW_LOGGING
- LDAP_LOG(( "config", LDAP_LEVEL_INFO,
- "%s: line %d: suffixAlias served by a preceeding "
- "backend \"%s\"\n",
- fname, lineno, tmp_be->be_suffix[0]->bv_val ));
-#else
- Debug( LDAP_DEBUG_ANY,
- "%s: line %d: suffixAlias served by"
- " a preceeding backend \"%s\"\n",
- fname, lineno, tmp_be->be_suffix[0]->bv_val );
-#endif
- ber_bvfree( palias );
- return -1;
- }
-
- aliased.bv_val = cargv[2];
- aliased.bv_len = strlen( cargv[2] );
- paliased = ch_malloc(sizeof(struct berval));
-
- rc = dnPrettyNormal( NULL, &aliased, paliased, &naliased );
- if( rc != LDAP_SUCCESS ) {
-#ifdef NEW_LOGGING
- LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
- "%s: line %d: aliased DN is invalid.\n",
- fname, lineno ));
-#else
- Debug( LDAP_DEBUG_ANY,
- "%s: line %d: aliased DN is invalid\n",
- fname, lineno, 0 );
-#endif
- ber_bvfree( palias );
- return( 1 );
- }
-
- tmp_be = select_backend( &naliased, 0, 0 );
- free( naliased.bv_val );
- if ( tmp_be && tmp_be != be ) {
-#ifdef NEW_LOGGING
- LDAP_LOG(( "config", LDAP_LEVEL_INFO,
- "%s: line %d: suffixAlias derefs to a different backend "
- "a preceeding backend \"%s\"\n",
- fname, lineno, tmp_be->be_suffix[0]->bv_val ));
-#else
- Debug( LDAP_DEBUG_ANY,
- "%s: line %d: suffixAlias derefs to differnet backend"
- " a preceeding backend \"%s\"\n",
- fname, lineno, tmp_be->be_suffix[0]->bv_val );
-#endif
- ber_bvfree( palias );
- ber_bvfree( paliased );
- return -1;
- }
-
- ber_bvecadd( &be->be_suffixAlias, palias );
- ber_bvecadd( &be->be_suffixAlias, paliased );