# javax.naming.ldap

***

**1. Connecting to an LDAP Server**

```java
import javax.naming.ldap.InitialLdapContext;

...

LdapContext ctx = new InitialLdapContext(ldapEnvironment, null);
```

**2. Searching for an Entry**

```java
import javax.naming.ldap.SearchControls;

...

SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> results = ctx.search("ou=people", "(cn=*)", controls);
```

**3. Retrieving Entry Attributes**

```java
import javax.naming.ldap.LdapName;

...

LdapName entryDN = new LdapName("cn=John Doe,ou=people");
Attributes entryAttrs = ctx.getAttributes(entryDN);
```

**4. Adding an Entry**

```java
import javax.naming.ldap.LdapEntry;

...

Attributes entryAttrs = new BasicAttributes();
entryAttrs.put("cn", "Jane Doe");
entryAttrs.put("sn", "Doe");
LdapEntry entry = new LdapEntry("cn=Jane Doe,ou=people", entryAttrs);
ctx.createSubcontext(entry.getDN(), entry);
```

**5. Modifying an Entry**

```java
import javax.naming.ldap.ModificationItem;

...

ModificationItem modItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("sn", "Doe"));
ctx.modifyAttributes("cn=John Doe,ou=people", new ModificationItem[]{modItem});
```

**6. Deleting an Entry**

```java
ctx.destroySubcontext("cn=John Doe,ou=people");
```

**7. Performing a paged search**

```java
import javax.naming.ldap.PagedResultsControl;
import javax.naming.ldap.PagedResultsResponseControl;

...

// Set the page size control
byte[] cookie = null;
int pageSize = 100;
PagedResultsControl prc = new PagedResultsControl(pageSize, cookie, true);

// Perform the search
NamingEnumeration<SearchResult> results = ctx.search("ou=people", "(cn=*)", controls);

// Process the first page of results
while (results.hasMore()) {
    SearchResult result = results.next();
    // ...
}

// Get the PagedResultsResponse control from the results
PagedResultsResponseControl prrc = (PagedResultsResponseControl) results.getControls().get("1.2.840.113556.1.4.319");

// Check if there are more pages
if (prrc.hasMoreResults()) {
    // Get the cookie from the control
    cookie = prrc.getCookie();
    
    // Set the cookie in the next page control
    prc.setCookie(cookie);
    
    // Perform the next page of the search
    results = ctx.search("ou=people", "(cn=*)", prc);
}
```

**8. Performing a filtered search**

```java
import javax.naming.ldap.Filter;
import javax.naming.ldap.AndFilter;
import javax.naming.ldap.BasicFilter;

...

Filter filter = new AndFilter(new BasicFilter("cn=John Doe"), new BasicFilter("sn=Doe"));
NamingEnumeration<SearchResult> results = ctx.search("ou=people", filter.toString(), controls);
```

**9. Performing a sorted search**

```java
import javax.naming.ldap.SortKey;

...

SortKey[] sortKeys = new SortKey[]{new SortKey("sn")};
controls.setSortingKeys(sortKeys);
NamingEnumeration<SearchResult> results = ctx.search("ou=people", "(cn=*)", controls);
```

**10. Binding to a server**

```java
import javax.naming.ldap.InitialLdapContext;

...

LdapContext ctx = new InitialLdapContext(ldapEnvironment, null);
ctx.bind("cn=John Doe,ou=people", "john.doe@example.com");
```

**11. Unbinding from a server**

```java
import javax.naming.ldap.InitialLdapContext;

...

LdapContext ctx = new InitialLdapContext(ldapEnvironment, null);
ctx.unbind("cn=John Doe,ou=people");
```

**12. Performing a recursive search**

```java
import javax.naming.ldap.SearchControls;

...

SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> results = ctx.search("dc=example,dc=com", "(objectclass=*)", controls);
```

**13. Performing a search using a filter object**

```java
import javax.naming.ldap.Filter;
import javax.naming.ldap.BasicFilter;

...

Filter filter = new BasicFilter("cn=John Doe");
NamingEnumeration<SearchResult> results = ctx.search("ou=people", filter.toString(), controls);
```

**14. Performing a search using a filter expression**

```java
import javax.naming.ldap.SearchControls;

...

SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> results = ctx.search("ou=people", "(cn=John Doe)", controls);
```

**15. Performing a search using a filter and sorting by attribute**

```java
import javax.naming.ldap.Filter;
import javax.naming.ldap.BasicFilter;
import javax.naming.ldap.SortKey;

...

Filter filter = new BasicFilter("cn=John Doe");
SortKey[] sortKeys = new SortKey[]{new SortKey("sn")};
controls.setSortingKeys(sortKeys);
NamingEnumeration<SearchResult> results = ctx.search("ou=people", filter.toString(), controls);
```

**16. Performing a search using a filter and limiting the number of results**

```java
import javax.naming.ldap.Filter;
import javax.naming.ldap.BasicFilter;
import javax.naming.ldap.SearchControls;

...

Filter filter = new BasicFilter("cn=John Doe");
SearchControls controls = new SearchControls();
controls.setCountLimit(100);
NamingEnumeration<SearchResult> results = ctx.search("ou=people", filter.toString(), controls);
```

**17. Using an LdapName object to represent a distinguished name**

```java
import javax.naming.ldap.LdapName;

...

LdapName dn =

```
