Command line LDAP check

parent 187c7467
......@@ -24,7 +24,7 @@ if ($amka == '' || $surname == '' || $bdate == '') {
echo "Χρήση: {$argv[0]} [-v] --amka <amka> --surname <surname>", PHP_EOL,
" v: παραγωγή μηνυμάτων παρακολούθησης εκτέλεσης", PHP_EOL,
" amka <amka>: ο αριθμός ΑΜΚΑ", PHP_EOL,
"surname <surname>: επίθετο σε ΚΕΦΑΛΑΙΑ", PHP_EOL,
"surname <surname>: επίθετο σε ΚΕΦΑΛΑΙΑ", PHP_EOL;
exit(0);
}
......
# Πρόγραμμα επίδειξης για έλεγχο LDAP χρήστη
Το πρόγραμμα ελέγχει με απλό τρόπο εάν ένα χρήστης υπάρχει στον
κατάλογο και επιστρέφει attributes του χρήστη εφόσον ζητηθούν.
## Οδηγίες
Αντιγράψτε το αρχείο `settings.php.dist` σε ένα νέο αρχείο `settings.php` και
τροποποιήστε αναλόγως.
```php
return [
'connectionString' => 'ldap://my.ldap.server',
'domain' => null, // if AD, provide domain name for login
'baseSearchDN' => 'cn=Users,dc=YOURCOMPANY,dc=COM',
];
```
## Πρόγραμμα πελάτης
Για την επίδειξη των διαθέσιμων λειτουργιών έχει αναπτυχθεί πρόγραμμα
[ldapcmd.php](ldapcmd.php) που μπορείτε να εκτελέσετε από τη γραμμή εντολών.
Το πρόγραμμα δέχεται τις παρακάτω παραμέτρους:
```
Χρήση: ldapcmd.php {-u | --username} <username> {-p | --password} <password>
[ -d | --domain <domain>] [-c] [--check] [-g <list>] [--get <list>]
u, username : όνομα χρήστη
p, password : κωδικός πρόσβασης
d, domain : domain για σύνδεση (AD domain εφόσον χρειάζεται)
c, check : έλεγχος στοιχείων πρόσβασης (προεπιλογή)
g, get : άντληση στοιχείων χρήστη, λίστα από attribute names χωρισμένη με κόμματα
π.χ. --get sn,displayname,givenname,memberof
```
### Παράδειγμα κλήσης
*Επιτυχής έλεγχος στοιχείων*
```
$ php ldapcmd.php -u kotsos --password kotsos -d PDECRETE
true
```
*Άντληση στοιχείων*
```
$ php ldapcmd.php -u kotsos --password kotsos -d PDECRETE -g sn,displayname,memberOf
sn:kotsou
displayname:kotsos kotsou
memberof:CN=Debugger Users,CN=Users,DC=pdecrete,DC=local
memberof:CN=Domain Guests,CN=Users,DC=pdecrete,DC=local
memberof:CN=IIS_WPG,CN=Users,DC=pdecrete,DC=local
```
<?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);
<?php
return [
'connectionString' => 'ldap://my.ldap.server',
'domain' => null, // if AD, provide domain name for login
'baseSearchDN' => 'cn=Users,dc=YOURCOMPANY,dc=COM',
];
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment