]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/add.c
Conform SLAPI to Netscape, iPlanet and Sun ONE Directory Server
[openldap] / servers / slapd / add.c
index 703fb508cbb7e00898d1c975f037ff268c1c5e44..0db53d78f4e28b5a384d8ca9e48728fd58ec03a5 100644 (file)
@@ -226,28 +226,28 @@ do_add( Connection *conn, Operation *op )
        }
 
 #if defined( LDAP_SLAPI )
-       slapi_pblock_set( pb, SLAPI_BACKEND, (void *)be );
-       slapi_pblock_set( pb, SLAPI_CONNECTION, (void *)conn );
-       slapi_pblock_set( pb, SLAPI_OPERATION, (void *)op );
+       slapi_backend_set_pb( pb, be );
+       slapi_connection_set_pb( pb, conn );
+       slapi_operation_set_pb( pb, op );
        slapi_pblock_set( pb, SLAPI_ADD_ENTRY, (void *)e );
        slapi_pblock_set( pb, SLAPI_ADD_TARGET, (void *)dn.bv_val );
        slapi_pblock_set( pb, SLAPI_MANAGEDSAIT, (void *)(1) );
-       slapi_pblock_set( pb, SLAPI_REQCONTROLS, (void *)op->o_ctrls );
 
        rc = doPluginFNs( be, SLAPI_PLUGIN_PRE_ADD_FN, pb );
-       if ( rc != 0 && rc != LDAP_OTHER ) {
+       if ( rc != 0 ) {
                /*
-                * either there is no preOp (add) plugins
-                * or a plugin failed. Just log it
-                * 
-                * FIXME: is this correct?
+                * A preoperation plugin failure will abort the
+                * entire operation.
                 */
 #ifdef NEW_LOGGING
-               LDAP_LOG( OPERATION, INFO, "do_add: add preOps failed\n",
+               LDAP_LOG( OPERATION, INFO, "do_add: add preoperation plugin failed\n",
                                0, 0, 0);
 #else
-               Debug(LDAP_DEBUG_TRACE, "do_add: add preOps failed.\n",
+               Debug(LDAP_DEBUG_TRACE, "do_add: add preoperation plugin failed.\n",
                                0, 0, 0);
+               if ( slapi_pblock_get( pb, SLAPI_RESULT_CODE, (void *)&rc ) != 0 )
+                       rc = LDAP_OPERATIONS_ERROR;
+               goto done;
 #endif
        }
 #endif /* defined( LDAP_SLAPI ) */
@@ -339,19 +339,16 @@ do_add( Connection *conn, Operation *op )
        }
 
 #if defined( LDAP_SLAPI )
-       rc = doPluginFNs( be, SLAPI_PLUGIN_POST_ADD_FN, pb );
-       if ( rc != 0 && rc != LDAP_OTHER ) {
-               /*
-                * either there is no postOp (Add) plugins
-                * or a plugin failed. Just log it
-                *
-                * FIXME: is this correct?
-                */
+       /*
+        * Postoperation errors are silently ignored; the work has
+        * been done.
+        */
+       if ( doPluginFNs( be, SLAPI_PLUGIN_POST_ADD_FN, pb ) != 0) {
 #ifdef NEW_LOGGING
-               LDAP_LOG( OPERATION, INFO, "do_add: Add postOps failed\n",
+               LDAP_LOG( OPERATION, INFO, "do_add: Add postoperation plugins failed\n",
                                0, 0, 0);
 #else
-               Debug(LDAP_DEBUG_TRACE, "do_add: Add postOps failed.\n",
+               Debug(LDAP_DEBUG_TRACE, "do_add: Add postoperation plugins failed.\n",
                                0, 0, 0);
 #endif
        }