LDAP\_FIRST\_ATTRIBUTE(3) Library Functions Manual LDAP\_FIRST\_ATTRIBUTE(3)

# [NAME](#NAME)

ldap\_first\_attribute, ldap\_next\_attribute - step through LDAP entry attributes

# [LIBRARY](#LIBRARY)

OpenLDAP LDAP (libldap, -lldap)

# [SYNOPSIS](#SYNOPSIS)

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

```
char *ldap_first_attribute(
	LDAP *ld, LDAPMessage *entry, BerElement **berptr )
```

```
char *ldap_next_attribute(
	LDAP *ld, LDAPMessage *entry, BerElement *ber )
```

```
int ldap_get_attribute_ber(
	LDAP *ld, LDAPMessage *entry, BerElement *ber,
	BerValue *attr, BerVarray *vals )
```

# [DESCRIPTION](#DESCRIPTION)

The **ldap\_first\_attribute()**, **ldap\_next\_attribute()** and **ldap\_get\_attribute\_ber()** routines are used to step through the attributes in an LDAP entry. **ldap\_first\_attribute()** takes an *entry* as returned by [**ldap\_first\_entry**(3)](/man/os/openldap-2.7/ldap_first_entry.3) or [**ldap\_next\_entry**(3)](/man/os/openldap-2.7/ldap_next_entry.3) and returns a pointer to character string containing the first attribute description in the entry. **ldap\_next\_attribute()** returns the next attribute description in the entry.

It also returns, in *berptr*, a pointer to a BerElement it has allocated to keep track of its current position. This pointer should be passed to subsequent calls to **ldap\_next\_attribute()** and is used to effectively step through the entry's attributes. The caller is solely responsible for freeing the BerElement pointed to by *berptr* when it is no longer needed by calling [**ber\_free**(3)](/man/os/openldap-2.7/ber_free.3). When calling [**ber\_free**(3)](/man/os/openldap-2.7/ber_free.3) in this instance, be sure the second argument is 0.

The attribute names returned are suitable for inclusion in a call to [**ldap\_get\_values**(3)](/man/os/openldap-2.7/ldap_get_values.3) to retrieve the attribute's values.

The **ldap\_get\_attribute\_ber()** routine allows one to iterate over all attributes in-place, without allocating memory to hold text for the attribute name or its values, if requested. The use case is similar to **ldap\_next\_attribute()** except that the attribute name is returned into *attr* and, if *vals* is non-NULL, the list of values is stored there. Both point into the LDAP message and remain valid only while the entry is valid. The caller is still responsible for freeing *vals* with [**ldap\_memfree**(3)](/man/os/openldap-2.7/ldap_memfree.3), if used.

# [ERRORS](#ERRORS)

If an error occurs, NULL is returned and the ld\_errno field in the *ld* parameter is set to indicate the error. See [**ldap\_error**(3)](/man/os/openldap-2.7/ldap_error.3) for a description of possible error codes.

# [NOTES](#NOTES)

The **ldap\_first\_attribute()** and **ldap\_next\_attribute()** return dynamically allocated memory that must be freed by the caller via [**ldap\_memfree**(3)](/man/os/openldap-2.7/ldap_memfree.3). For **ldap\_get\_attribute\_ber()**, only the actual *vals* pointer needs to be freed with [**ldap\_memfree**(3)](/man/os/openldap-2.7/ldap_memfree.3), other data is accounted for as part of *ber*.

# [SEE ALSO](#SEE_ALSO)

[**ldap**(3)](/man/os/openldap-2.7/ldap.3), [**ldap\_first\_entry**(3)](/man/os/openldap-2.7/ldap_first_entry.3), [**ldap\_get\_values**(3)](/man/os/openldap-2.7/ldap_get_values.3), [**ldap\_error**(3)](/man/os/openldap-2.7/ldap_error.3)

# [ACKNOWLEDGEMENTS](#ACKNOWLEDGEMENTS)

**OpenLDAP Software** is developed and maintained by The OpenLDAP Project &lt;http://www.openldap.org/&gt;. **OpenLDAP Software** is derived from the University of Michigan LDAP 3.3 Release.

2026/09/08 OpenLDAP 2.7.1

---

Document: ldap_get_attribute_ber(3) from openldap-2.7 2.7.1-r2 (Chainguard OS)
Source: https://github.com/openldap/openldap.git
