---
name: "ldap_modify_ext_s"
section: "3"
platform: "linux"
package: "libldap"
version: "2.7.2-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ldap_modify"
---

# ldap\_modify\_ext\_s(3)

Perform an LDAP modify operation

Part of [ldap\_modify(3)](/ldap_modify/3.md).

## 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;
	} 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.*

*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.*

*Deprecated interfaces generally remain in the library.  The macro* *LDAP\_DEPRECATED can be defined to a non-zero value* *(e.g., -DLDAP\_DEPRECATED=1) when compiling program designed to use* *deprecated interfaces.  It is recommended that developers writing new* *programs, or updating old programs, avoid use of deprecated interfaces.* *Over time, it is expected that documentation (and, eventually, support) for* *deprecated interfaces to be eliminated.*

## SEE ALSO

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

## ACKNOWLEDGEMENTS

**OpenLDAP Software** *is developed and maintained by The OpenLDAP Project \<http://www.openldap.org/\>.* **OpenLDAP Software** *is derived from the University of Michigan LDAP 3.3 Release.*
