X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fcontrols.c;h=7ca7d5899845fba79110822b1cccdd1ad18910a1;hb=a32a2da33a0c8592fb7445b0ce6a9158c0ca6f64;hp=7b285feabf3dad6ccfdb16b2b0c8cfafe0727979;hpb=b1d1c74247cc9f1c59f3801bd85db07be1aeba37;p=openldap diff --git a/servers/slapd/controls.c b/servers/slapd/controls.c index 7b285feabf..7ca7d58998 100644 --- a/servers/slapd/controls.c +++ b/servers/slapd/controls.c @@ -51,6 +51,9 @@ static SLAP_CTRL_PARSE_FN parseSessionTracking; #ifdef SLAP_CONTROL_X_WHATFAILED static SLAP_CTRL_PARSE_FN parseWhatFailed; #endif +#ifdef SLAP_CONTROL_X_LAZY_COMMIT +static SLAP_CTRL_PARSE_FN parseLazyCommit; +#endif #undef sc_mask /* avoid conflict with Irix 6.5 */ @@ -226,6 +229,13 @@ static struct slap_control control_defs[] = { NULL, NULL, parseWhatFailed, LDAP_SLIST_ENTRY_INITIALIZER(next) }, #endif +#ifdef SLAP_CONTROL_X_LAZY_COMMIT + { LDAP_CONTROL_X_LAZY_COMMIT, + (int)offsetof(struct slap_control_ids, sc_lazyCommit), + SLAP_CTRL_GLOBAL|SLAP_CTRL_ACCESS|SLAP_CTRL_HIDE, + NULL, NULL, + parseLazyCommit, LDAP_SLIST_ENTRY_INITIALIZER(next) }, +#endif { NULL, 0, 0, NULL, 0, NULL, LDAP_SLIST_ENTRY_INITIALIZER(next) } }; @@ -2155,3 +2165,27 @@ done:; return rc; } #endif + +#ifdef SLAP_CONTROL_X_LAZY_COMMIT +static int parseLazyCommit( + Operation *op, + SlapReply *rs, + LDAPControl *ctrl ) +{ + if ( op->o_lazyCommit != SLAP_CONTROL_NONE ) { + rs->sr_text = "\"Lazy Commit?\" control specified multiple times"; + return LDAP_PROTOCOL_ERROR; + } + + if ( !BER_BVISNULL( &ctrl->ldctl_value )) { + rs->sr_text = "\"Lazy Commit?\" control value not absent"; + return LDAP_PROTOCOL_ERROR; + } + + op->o_lazyCommit = ctrl->ldctl_iscritical + ? SLAP_CONTROL_CRITICAL + : SLAP_CONTROL_NONCRITICAL; + + return LDAP_SUCCESS; +} +#endif