]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/modrdn.c
Y2k copyright update
[openldap] / servers / slapd / back-ldbm / modrdn.c
index e1e71b05d4502adcf4f4a7b3a62e4d86e2b38c2c..c31780f58361d36c49f954810032ebd942638e20 100644 (file)
@@ -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;
        }