---
name: "ldap_modify"
section: "3"
platform: "macos"
package: "OpenLDAP"
version: "561"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/ldap_modify"
---

# ldap\_modify(3)

Perform an LDAP modify operation

## NAME

ldap\_modify\_ext, ldap\_modify\_ext\_s - Perform an LDAP modify operation

## LIBRARY

OpenLDAP LDAP (libldap, -lldap)

## SYNOPSIS

```
#include <ldap.h>
```

**int ldap\_modify\_ext(**

**LDAP \****ld***,** **char \****dn***,** **LDAPMod \****mods\[\]***,** **LDAPControl \*\****sctrls***,** **LDAPControl \*\****cctrls***,** **int \*\****msgidp* **);**

```
int ldap_modify_ext_s(
LDAP *ld,
char *dn,
LDAPMod *mods[],
LDAPControl **sctrls,
LDAPControl **cctrls );
```

```
void ldap_mods_free(
LDAPMod **mods,
int freemods );
```

## DESCRIPTION

**The routine** **ldap\_modify\_ext\_s()** **is used to perform an LDAP modify operation.** *dn* **is the DN of the entry to modify, and** *mods* **is a** **null-terminated array of modifications to make to the entry.  Each element** **of the** *mods* **array is a pointer to an LDAPMod structure, which is** **defined below.**

```
	typedef struct ldapmod {
	    int mod_op;
	    char *mod_type;
	    union {
	        char **modv_strvals;
	        struct berval **modv_bvals;
	    } mod_vals;
	    struct ldapmod *mod_next;
	} LDAPMod;
	#define mod_values mod_vals.modv_strvals
	#define mod_bvalues mod_vals.modv_bvals
```

*The mod\_op field is used to specify the type of modification to* *perform and should be one of LDAP\_MOD\_ADD, LDAP\_MOD\_DELETE, or* *LDAP\_MOD\_REPLACE.  The mod\_type and mod\_values fields* *specify the attribute type to modify and a null-terminated array of* *values to add, delete, or replace respectively.  The mod\_next* *field is used only by the LDAP server and may be ignored by the* *client.*

*If you need to specify a non-string value (e.g., to add a* *photo or audio attribute value), you should set mod\_op to the* *logical OR of the operation as above (e.g., LDAP\_MOD\_REPLACE)* *and the constant LDAP\_MOD\_BVALUES.  In this case, mod\_bvalues* *should be used instead of mod\_values, and it should point to* *a null-terminated array of struct bervals, as defined in \<lber.h\>.*

*For LDAP\_MOD\_ADD modifications, the given values are added to the* *entry, creating the attribute if necessary.  For LDAP\_MOD\_DELETE* *modifications, the given values are deleted from the entry, removing* *the attribute if no values remain.  If the entire attribute is to be deleted,* *the mod\_values field should be set to NULL.  For LDAP\_MOD\_REPLACE* *modifications, the attribute will have the listed values after the* *modification, having been created if necessary.  All modifications are* *performed in the order in which they are listed.*

**ldap\_mods\_free()** *can be used to free each element of a NULL-terminated* *array of mod structures.  If freemods is non-zero, the* *mods pointer itself is freed as well.*

**ldap\_modify\_ext\_s()** *returns a code indicating success or, in the case of failure,* *indicating the nature of the failure.  See* [**ldap\_error**(3)](/ldap_error/3.md) *for details*

*The* **ldap\_modify\_ext()** *operation works the same way as* **ldap\_modify\_ext\_s()**, *except that it is asynchronous. The integer that msgidp points* *to is set to the message id of the modify request.  The result of* *the operation can be obtained by calling* [**ldap\_result**(3)](/ldap_result/3.md).

*Both* **ldap\_modify\_ext()** *and* **ldap\_modify\_ext\_s()** *allows server and client controls to be passed in* *via the sctrls and cctrls parameters, respectively.*

## DEPRECATED INTERFACES

*The* **ldap\_modify()** *and* **ldap\_modify\_s()** *routines are deprecated in favor of the* **ldap\_modify\_ext()** *and* **ldap\_modify\_ext\_s()** *routines, respectively.*

## SEE ALSO

[**ldap**(3)](/ldap/3.md), [**ldap\_error**(3)](/ldap_error/3.md),

## ACKNOWLEDGEMENTS
