Example 14–1 sets up an LDAPMod to change an mail address.
#include "slapi-plugin.h"
/* Declare the appropriate structures. */
LDAPMod mod_attr; /* Attribute to modify */
LDAPMod * mods[2]; /* Array of modifications */
char * mail_vals[] = /* New mail address */
{"quentin@example.com", NULL};
/* Set up the LDAPMod structure used to modify the entry. */
mod_attr.mod_type = "mail";
mod_attr.mod_op = LDAP_MOD_REPLACE;
mod_attr.mod_values = mail_vals; /* "quentin@example.com" */
mods[0] = &mod_attr;
mods[1] = NULL;
/* Modify the entry using slapi_modify_internal_set_pb()... */
Example 14–2 optionally adds additional modifications to those present in the parameter block. This code might be part of a pre-operation modify plug-in function, for example.
#include "slapi-plugin.h"
/*
* Set up an LDAPMod array, modify_mods, of additional modifications.
*/
if (modify_mods != NULL) {
LDAPMod ** mods;
Slapi_Mods smods;
int i;
slapi_pblock_get(pb, SLAPI_MODIFY_MODS, &mods);
slapi_mods_init_passin(&smods, mods);
for (i = 0; modify_mods[i] != NULL; i++) {
/* Do not copy mods. */
slapi_mods_add_ldapmod(&smods, modify_mods[i]);
}
mods = slapi_mods_get_ldapmods_passout(&smods);
slapi_pblock_set(pb, SLAPI_MODIFY_MODS, mods);
slapi_mods_done(&smods);
/* Release container only. Content is still pointed to by mods. */
slapi_ch_free((void **)&modify_mods);
}