X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fmodrdn.c;h=c31780f58361d36c49f954810032ebd942638e20;hb=4bc786f34b50aa301be6f5600f58a980070f481e;hp=e1e71b05d4502adcf4f4a7b3a62e4d86e2b38c2c;hpb=f991ef04e62e2036bf90341f8cf9028622c90c60;p=openldap diff --git a/servers/slapd/back-ldbm/modrdn.c b/servers/slapd/back-ldbm/modrdn.c index e1e71b05d4..c31780f583 100644 --- a/servers/slapd/back-ldbm/modrdn.c +++ b/servers/slapd/back-ldbm/modrdn.c @@ -1,7 +1,7 @@ /* modrdn.c - ldbm backend modrdn routine */ /* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -44,6 +44,11 @@ ldbm_back_modrdn( char *newSuperior ) { +#ifdef SLAPD_SCHEMA_NOT_COMPAT + static AttributeDescription *children = NULL; +#else + static const char *children = "children"; +#endif struct ldbminfo *li = (struct ldbminfo *) be->be_private; char *p_dn = NULL, *p_ndn = NULL; char *new_dn = NULL, *new_ndn = NULL; @@ -67,7 +72,7 @@ ldbm_back_modrdn( struct berval *add_bvals[2]; /* Stores new rdn att */ struct berval del_bv; /* Stores old rdn att */ struct berval *del_bvals[2]; /* Stores old rdn att */ - LDAPModList mod[2]; /* Used to delete old rdn */ + Modifications mod[2]; /* Used to delete old rdn */ int manageDSAit = get_manageDSAit( op ); Debug( LDAP_DEBUG_TRACE, "==>ldbm_back_modrdn(newSuperior=%s)\n", @@ -138,14 +143,14 @@ ldbm_back_modrdn( if( (p = dn2entry_w( be, p_ndn, NULL )) == NULL) { Debug( LDAP_DEBUG_TRACE, "parent does not exist\n", 0, 0, 0); - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, + send_ldap_result( conn, op, LDAP_OTHER, NULL, NULL, NULL, NULL ); goto return_results; } /* check parent for "children" acl */ if ( ! access_allowed( be, conn, op, p, - "children", NULL, ACL_WRITE ) ) + children, NULL, ACL_WRITE ) ) { Debug( LDAP_DEBUG_TRACE, "no access to parent\n", 0, 0, 0 ); @@ -191,7 +196,7 @@ ldbm_back_modrdn( 0, 0, 0 ); np_ndn = ch_strdup( np_dn ); - (void) dn_normalize_case( np_ndn ); + (void) dn_normalize( np_ndn ); /* newSuperior == oldParent?, if so ==> ERROR */ /* newSuperior == entry being moved?, if so ==> ERROR */ @@ -201,7 +206,7 @@ ldbm_back_modrdn( Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: newSup(ndn=%s) not here!\n", np_ndn, 0, 0); - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, + send_ldap_result( conn, op, LDAP_OTHER, NULL, NULL, NULL, NULL ); goto return_results; } @@ -211,7 +216,7 @@ ldbm_back_modrdn( np, np->e_id, 0 ); /* check newSuperior for "children" acl */ - if ( !access_allowed( be, conn, op, np, "children", NULL, + if ( !access_allowed( be, conn, op, np, children, NULL, ACL_WRITE ) ) { Debug( LDAP_DEBUG_TRACE, @@ -258,7 +263,7 @@ ldbm_back_modrdn( new_ndn = ch_strdup(new_dn); - (void) dn_normalize_case( new_ndn ); + (void) dn_normalize( new_ndn ); Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: new ndn=%s\n", new_ndn, 0, 0 ); @@ -291,7 +296,7 @@ ldbm_back_modrdn( "ldbm_back_modrdn: can't figure out type of newrdn\n", 0, 0, 0 ); send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); + NULL, "unknown type used in RDN", NULL, NULL ); goto return_results; } @@ -302,7 +307,7 @@ ldbm_back_modrdn( "ldbm_back_modrdn: can't figure out val of newrdn\n", 0, 0, 0 ); send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); + NULL, "could not parse RDN value", NULL, NULL ); goto return_results; } @@ -318,8 +323,8 @@ ldbm_back_modrdn( Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: can't figure out old_rdn from dn\n", 0, 0, 0 ); - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); + send_ldap_result( conn, op, LDAP_OTHER, + NULL, "could not parse old DN", NULL, NULL ); goto return_results; } @@ -329,8 +334,8 @@ ldbm_back_modrdn( Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: can't figure out the old_rdn type\n", 0, 0, 0 ); - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); + send_ldap_result( conn, op, LDAP_OTHER, + NULL, "count parse RDN from old DN", NULL, NULL ); goto return_results; } @@ -344,10 +349,6 @@ ldbm_back_modrdn( } -#ifdef DNS_DN - if ( dn_type( old_rdn ) == DN_X500 ) { -#endif - Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: DN_X500\n", 0, 0, 0 ); @@ -360,10 +361,14 @@ ldbm_back_modrdn( add_bv.bv_val = new_rdn_val; add_bv.bv_len = strlen(new_rdn_val); +#ifdef SLAPD_SCHEMA_NOT_COMPAT + /* not yet implemented */ +#else mod[0].ml_type = new_rdn_type; mod[0].ml_bvalues = add_bvals; - mod[0].ml_op = LDAP_MOD_SOFTADD; + mod[0].ml_op = SLAP_MOD_SOFTADD; mod[0].ml_next = NULL; +#endif /* Remove old rdn value if required */ @@ -376,8 +381,8 @@ ldbm_back_modrdn( Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: can't figure out old_rdn_val from old_rdn\n", 0, 0, 0 ); - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); + send_ldap_result( conn, op, LDAP_OTHER, + NULL, "cound not parse value from old RDN", NULL, NULL ); goto return_results; } @@ -389,6 +394,9 @@ ldbm_back_modrdn( del_bv.bv_val = old_rdn_val; del_bv.bv_len = strlen(old_rdn_val); +#ifdef SLAPD_SCHEMA_NOT_COMPAT + /* not yet implemented */ +#else /* No need to normalize old_rdn_type, delete_values() * does that for us */ @@ -397,28 +405,13 @@ ldbm_back_modrdn( mod[1].ml_bvalues = del_bvals; mod[1].ml_op = LDAP_MOD_DELETE; mod[1].ml_next = NULL; +#endif Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: removing old_rdn_val=%s\n", old_rdn_val, 0, 0 ); } -#ifdef DNS_DN - } else { - Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: DNS DN\n", - 0, 0, 0 ); - /* XXXV3: not sure of what to do here */ - Debug( LDAP_DEBUG_TRACE, - "ldbm_back_modrdn: not fully implemented...\n", - 0, 0, 0 ); - - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); - goto return_results; - - } -#endif - /* check for abandon */ ldap_pvt_thread_mutex_lock( &op->o_abandonmutex ); if ( op->o_abandon ) { @@ -429,8 +422,8 @@ ldbm_back_modrdn( /* delete old one */ if ( dn2id_delete( be, e->e_ndn, e->e_id ) != 0 ) { - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); + send_ldap_result( conn, op, LDAP_OTHER, + NULL, "DN index delete fail", NULL, NULL ); goto return_results; } @@ -447,14 +440,19 @@ ldbm_back_modrdn( /* add new one */ if ( dn2id_add( be, e->e_ndn, e->e_id ) != 0 ) { - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); + send_ldap_result( conn, op, LDAP_OTHER, + NULL, "DN index add failed", NULL, NULL ); goto return_results; } /* modify memory copy of entry */ - if ( ldbm_modify_internal( be, conn, op, dn, &mod[0], e ) - != 0 ) { + rc = ldbm_modify_internal( be, conn, op, dn, &mod[0], e ); + + if( rc != LDAP_SUCCESS ) { + if( rc != SLAPD_ABANDON ) { + send_ldap_result( conn, op, rc, + NULL, NULL, NULL, NULL ); + } goto return_results; } @@ -468,8 +466,8 @@ ldbm_back_modrdn( /* id2entry index */ if ( id2entry_add( be, e ) != 0 ) { entry_free( e ); - send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, - NULL, NULL, NULL, NULL ); + send_ldap_result( conn, op, LDAP_OTHER, + NULL, "entry update failed", NULL, NULL ); goto return_results; }