1 /* modify.c - monitor backend modify routine */
2 /* $OpenLDAP: pkg/ldap/servers/slapd/back-monitor/modify.c,v 1.24.2.4 2008/02/11 23:26:47 kurt Exp $ */
3 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 * Copyright 2001-2008 The OpenLDAP Foundation.
6 * Portions Copyright 2001-2003 Pierangelo Masarati.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted only as authorized by the OpenLDAP
13 * A copy of this license is available in file LICENSE in the
14 * top-level directory of the distribution or, alternatively, at
15 * <http://www.OpenLDAP.org/license.html>.
18 * This work was initially developed by Pierangelo Masarati for inclusion
19 * in OpenLDAP Software.
26 #include <ac/string.h>
27 #include <ac/socket.h>
30 #include "back-monitor.h"
31 #include "proto-back-monitor.h"
34 monitor_back_modify( Operation
*op
, SlapReply
*rs
)
37 monitor_info_t
*mi
= ( monitor_info_t
* )op
->o_bd
->be_private
;
41 Debug(LDAP_DEBUG_ARGS
, "monitor_back_modify:\n", 0, 0, 0);
43 /* acquire and lock entry */
44 monitor_cache_dn2entry( op
, rs
, &op
->o_req_ndn
, &e
, &matched
);
46 rs
->sr_err
= LDAP_NO_SUCH_OBJECT
;
48 if ( !access_allowed_mask( op
, matched
,
49 slap_schema
.si_ad_entry
,
50 NULL
, ACL_DISCLOSE
, NULL
, NULL
) )
54 rs
->sr_matched
= matched
->e_dn
;
57 send_ldap_result( op
, rs
);
58 if ( matched
!= NULL
) {
59 rs
->sr_matched
= NULL
;
60 monitor_cache_release( mi
, matched
);
65 if ( !acl_check_modlist( op
, e
, op
->orm_modlist
)) {
66 rc
= LDAP_INSUFFICIENT_ACCESS
;
69 assert( !SLAP_SHADOW( op
->o_bd
) );
70 slap_mods_opattrs( op
, &op
->orm_modlist
, 0 );
72 rc
= monitor_entry_modify( op
, rs
, e
);
75 if ( rc
!= LDAP_SUCCESS
) {
76 if ( !access_allowed_mask( op
, e
, slap_schema
.si_ad_entry
,
77 NULL
, ACL_DISCLOSE
, NULL
, NULL
) )
79 rc
= LDAP_NO_SUCH_OBJECT
;
84 send_ldap_result( op
, rs
);
86 monitor_cache_release( mi
, e
);