ldapcmd.php 3.66 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
<?php 

$settings = require(__DIR__ . '/settings.php');

/**
 * Λήψη παραμέτρων καθορισμού λειτουργίας από τη γραμμή εντολών 
 */
$options = getopt('u:p:d:cg:', ['username:', 'password:', 'domain:', 'check', 'get:']);

$username = isset($options['u']) ? $options['u'] : (isset($options['username']) ? $options['username'] : null);
$password = isset($options['p']) ? $options['p'] : (isset($options['password']) ? $options['password'] : null);
$domain = isset($options['d']) ? $options['d'] : (isset($options['domain']) ? $options['domain'] : null);
if ($domain === null) {
    // προεπιλεγμένη τιμή, εάν υπάρχει
    $domain = (isset($settings['domain']) && is_string($settings['domain'])) ? $settings['domain'] : null;
}
$check = isset($options['c']) || isset($options['check']);
$get_attributes_requested = '';
if (isset($options['g'])) {
    $get_attributes_requested = $options['g'];
}
if (isset($options['getg'])) {
    $get_attributes_requested = $options['get'];
}
$get = !($get_attributes_requested == '');
if ($get) {
    $get_attributes = explode(',', $get_attributes_requested);
    array_walk($get_attributes, function (&$v, $k) {
        $v = mb_strtolower($v);
    });
} else {
    $get_attributes = [];
    $check = true; // προεπιλογή
}

/**
 * Έλεγχος παραμέτρων
 */
if ($username === null || $password === null) {
    echo "Χρήση: {$argv[0]} {-u | --username} <username> {-p | --password} <password> ", PHP_EOL,
    "               [ -d | --domain <domain>] [-c] [--check] [-g <list>] [--get <list>]", PHP_EOL,
    " u, username : όνομα χρήστη", PHP_EOL,
    " p, password : κωδικός πρόσβασης", PHP_EOL,
    " d, domain   : domain για σύνδεση (AD domain εφόσον χρειάζεται)", PHP_EOL,
    " c, check    : έλεγχος στοιχείων πρόσβασης (προεπιλογή)", PHP_EOL,
    " g, get      : άντληση στοιχείων χρήστη, λίστα από attribute names χωρισμένη με κόμματα", PHP_EOL,
    "               π.χ. --get sn,displayname,givenname,memberof", PHP_EOL;
    exit(0);
}

//

$ldap = ldap_connect($settings['connectionString']);
$ldaprdn = ($domain ? "{$domain}\\" : '') . $username;

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);

// δοκιμή σύνδεσης...
$bind = @ldap_bind($ldap, $ldaprdn, $password);

// ενέργειες ανάλογα με το αίτημα του χρήστη
if ($bind) {
    if ($check) {
        echo "true", PHP_EOL;
    } 
    if ($get) {
        $filter = "(sAMAccountName=$username)";
        $result = @ldap_search($ldap, $settings['baseSearchDN'], $filter, $get_attributes);
        if ($result === false) {
            echo "Σφάλμα ", ldap_error($ldap), PHP_EOL;
        } else {
            $data = ldap_get_entries($ldap, $result);
            // echo "COUNT: ", $data["count"], PHP_EOL;
            for ($i = 0; $i < $data['count']; $i++) {
                foreach ($get_attributes as $attribute_name) {
                    $attribute = isset($data[$i][$attribute_name]) ? $data[$i][$attribute_name] : null;
                    if ($attribute === null) 
                        continue;
                    for ($c = 0; $c < $attribute['count']; $c++) {
                        echo "{$attribute_name}:{$attribute[$c]}", PHP_EOL;
                    }
                }
            }
        }
    }
} else {
    if ($check) {
        echo "false", PHP_EOL;
    } else {
        echo "Λανθασμένα στοιχεία πρόσβασης ", ldap_error($ldap), PHP_EOL;
    }
}

exit(0);