# Szenarien der Verwendung

## Szenarien der Authentifizierung

### OpenLDAP

### ActiveDirectory

## Grundsätzliche CRUD Operationen

### Daten von LDAP empfangen

Einen Eintrag durch seinen DN erhalten

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $hm = $ldap->getEntry('cn=Hugo Müller,ou=People,dc=my,dc=local');
    /*
    $hm is an array of the following structure
    array(
        'dn'          => 'cn=Hugo Müller,ou=People,dc=my,dc=local',
        'cn'          => array('Hugo Müller'),
        'sn'          => array('Müller'),
        'objectclass' => array('inetOrgPerson', 'top'),
        ...
    )
    */

Die Existenz eines angegebenen DN prüfen

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $isThere = $ldap->exists('cn=Hugo Müller,ou=People,dc=my,dc=local');

Kinder eines angegebenen DN zählen

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $childrenCount = $ldap->countChildren(
                                'cn=Hugo Müller,ou=People,dc=my,dc=local');

Im LDAP Baum suchen

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $result = $ldap->search('(objectclass=*)',
                            'ou=People,dc=my,dc=local',
                            Zend_Ldap_Ext::SEARCH_SCOPE_ONE);
    foreach ($result as $item) {
        echo $item["dn"] . ': ' . $item['cn'][0] . PHP_EOL;
    }

### Daten zu LDAP hinzufügen

Einen neuen Eintrag zu LDAP hinzufügen

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $entry = array();
    Zend_Ldap_Attribute::setAttribute($entry, 'cn', 'Hans Meier');
    Zend_Ldap_Attribute::setAttribute($entry, 'sn', 'Meier');
    Zend_Ldap_Attribute::setAttribute($entry, 'objectClass', 'inetOrgPerson');
    $ldap->add('cn=Hans Meier,ou=People,dc=my,dc=local', $entry);

### In LDAP löschen

Einen existierenden Eintrag von LDAP löschen

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $ldap->delete('cn=Hans Meier,ou=People,dc=my,dc=local');

### LDAP aktualisieren

Einen existierenden Eintrag in LDAP aktualisieren

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $hm = $ldap->getEntry('cn=Hugo Müller,ou=People,dc=my,dc=local');
    Zend_Ldap_Attribute::setAttribute($hm, 'mail', 'mueller@my.local');
    Zend_Ldap_Attribute::setPassword($hm,
                                     'newPa$$w0rd',
                                     Zend_Ldap_Attribute::PASSWORD_HASH_SHA1);
    $ldap->update('cn=Hugo Müller,ou=People,dc=my,dc=local', $hm);

## Erweiterte Operationen

### Kopieren und Verschieben von Einträgen in LDAP

Einen LDAP Eintrag mit allen seinen Abhängigkeiten rekursiv kopieren

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $ldap->copy('cn=Hugo Müller,ou=People,dc=my,dc=local',
                'cn=Hans Meier,ou=People,dc=my,dc=local',
                true);

Einen LDAP Eintrag rekursiv in einen anderen Unterbaum verschieben mit allen seinen Abhängigkeiten

    $options = array(/* ... */);
    $ldap = new Zend_Ldap($options);
    $ldap->bind();
    $ldap->moveToSubtree('cn=Hugo Müller,ou=People,dc=my,dc=local',
                         'ou=Dismissed,dc=my,dc=local',
                         true);