]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/add.c
Install *.schema only
[openldap] / servers / slapd / add.c
index ad397914d75223d73f057eed2259a5dd8d05f804..8593bf1e290a02cc3bebc9519e16733ddd2ff43b 100644 (file)
@@ -110,6 +110,7 @@ do_add( Connection *conn, Operation *op )
                rc = ber_scanf( ber, "{a{V}}", &mod->ml_type, &mod->ml_bvalues );
 
                if ( rc == LBER_ERROR ) {
+                       Debug( LDAP_DEBUG_ANY, "do_add: decoding error\n", 0, 0, 0 );
                        send_ldap_disconnect( conn, op,
                                LDAP_PROTOCOL_ERROR, "decoding error" );
                        rc = -1;
@@ -232,7 +233,15 @@ do_add( Connection *conn, Operation *op )
 #endif
                        {
 #ifdef SLAPD_SCHEMA_NOT_COMPAT
-                               rc = slap_mods_opattrs( op, &mods, &text );
+                               Modifications **modstail;
+                               for( modstail = &mods;
+                                       *modstail != NULL;
+                                       modstail = &(*modstail)->sml_next )
+                               {
+                                       assert( (*modstail)->sml_op == LDAP_MOD_ADD );
+                                       assert( (*modstail)->sml_desc != NULL );
+                               }
+                               rc = slap_mods_opattrs( op, modstail, &text );
 #else
                                char *text = "no-user-modification attribute type";
                                rc = add_created_attrs( op, e );
@@ -272,7 +281,7 @@ do_add( Connection *conn, Operation *op )
 #endif
                }
        } else {
-           Debug( LDAP_DEBUG_ARGS, "    do_add: HHH\n", 0, 0, 0 );
+           Debug( LDAP_DEBUG_ARGS, "    do_add: no backend support\n", 0, 0, 0 );
                send_ldap_result( conn, op, rc = LDAP_UNWILLING_TO_PERFORM,
                        NULL, "operation not supported within namingContext", NULL, NULL );
        }
@@ -306,17 +315,23 @@ static int slap_mods2entry(
                Attribute *attr;
 
                assert( mods->sml_op == LDAP_MOD_ADD );
+               assert( mods->sml_desc != NULL );
 
                attr = attr_find( (*e)->e_attrs, mods->sml_desc );
 
                if( attr != NULL ) {
-                       *text = "Attribute provided more than once";
+                       *text = "attribute provided more than once";
                        return LDAP_OPERATIONS_ERROR;
                }
 
                attr = ch_calloc( 1, sizeof(Attribute) );
 
-               /* should check for duplicates */
+               /* move ad to attr structure */
+               attr->a_desc = mods->sml_desc;
+               mods->sml_desc = NULL;
+
+               /* move values to attr structure */
+               /*      should check for duplicates */
                attr->a_vals = mods->sml_bvalues;
                mods->sml_bvalues = NULL;
 
@@ -345,19 +360,14 @@ add_created_attrs( Operation *op, Entry *e )
 
        /* return error on any attempts by the user to add these attrs */
        for ( a = e->e_attrs; a != NULL; a = a->a_next ) {
-#ifdef SLAPD_SCHEMA_NOT_COMPAT
-               if ( is_at_no_user_mod( a->a_desc.ad_type ))
-#else
-               if ( oc_check_op_no_usermod_attr( a->a_type ) )
-#endif
-               {
+               if ( oc_check_op_no_usermod_attr( a->a_type ) ) {
                        return LDAP_CONSTRAINT_VIOLATION;
                }
        }
 
        if ( op->o_dn == NULL || op->o_dn[0] == '\0' ) {
-               bv.bv_val = "<anonymous>";
-               bv.bv_len = sizeof("<anonymous>")-1;
+               bv.bv_val = SLAPD_ANONYMOUS;
+               bv.bv_len = sizeof(SLAPD_ANONYMOUS)-1;
 ;
        } else {
                bv.bv_val = op->o_dn;