Projet

Général

Profil

test_openldap.php

Quentin RIBAC, 05/04/2022 12:14

 
1
<?php
2
/**
3
 * test_openldap.php
4
 * @author Quentin RIBAC for Maarch
5
 * @since 23 March 2022
6
 *
7
 * Example usage:
8
 *
9
 * php ./test_openldap.php search '(uid=bbain)'
10
 * php ./test_openldap.php bind 'uid=bbain,ou=People,dc=qri,dc=dev,dc=local'
11
 */
12

    
13
// set your connection here
14
$ldapURI     = 'ldap://qri.dev.local:389';
15
$ldapBaseDN  = 'dc=qri,dc=dev,dc=local';
16
$ldapAdminDN = 'cn=admin,dc=qri,dc=dev,dc=local';
17

    
18
//---
19
$conn = ldap_connect($ldapURI) or die('Unable to connect to ldap server at ' . $ldapURI . PHP_EOL);
20
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
21
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);
22

    
23
echo 'Binding as: ' . $ldapAdminDN . PHP_EOL;
24
$adminPassword = trim(exec('env bash -c \'{ read -s -p "Admin password: " ; echo -n $REPLY ; }\''));
25
echo PHP_EOL . PHP_EOL;
26
ldap_bind($conn, $ldapAdminDN, $adminPassword) or die('Unable to bind to ldap server as ' . $ldapAdminDN . PHP_EOL);
27

    
28
$action = $argv[1];
29
if ($action === 'search') {
30
    $query = $argv[2];
31
    $result = ldap_search($conn, $ldapBaseDN, $query);
32
    for ($entry = ldap_first_entry($conn, $result); !empty($entry); $entry = ldap_next_entry($conn, $entry)) {
33
        echo ldap_get_dn($conn, $entry) . PHP_EOL;
34
    }
35
} elseif ($action === 'bind' && !empty($argv[2])) {
36
    $dn = $argv[2];
37
    echo 'Binding as: ' . $dn . PHP_EOL;
38
    $userPassword = trim(exec('env bash -c \'{ read -s -p "User password: " ; echo -n $REPLY ; }\''));
39
    echo PHP_EOL . PHP_EOL;
40
    $result = ldap_bind($conn, $dn, $userPassword);
41
    unset($userPassword);
42
    echo ($result ? 'Success' : 'Failure') . PHP_EOL;
43
}