Skip to content
Snippets Groups Projects
Commit f1d22bf7 authored by Σταύρος Παπαδάκης's avatar Σταύρος Παπαδάκης
Browse files

Command line LDAP check

parent 187c7467
No related branches found
No related tags found
No related merge requests found
...@@ -24,7 +24,7 @@ if ($amka == '' || $surname == '' || $bdate == '') { ...@@ -24,7 +24,7 @@ if ($amka == '' || $surname == '' || $bdate == '') {
echo "Χρήση: {$argv[0]} [-v] --amka <amka> --surname <surname>", PHP_EOL, echo "Χρήση: {$argv[0]} [-v] --amka <amka> --surname <surname>", PHP_EOL,
" v: παραγωγή μηνυμάτων παρακολούθησης εκτέλεσης", PHP_EOL, " v: παραγωγή μηνυμάτων παρακολούθησης εκτέλεσης", PHP_EOL,
" amka <amka>: ο αριθμός ΑΜΚΑ", PHP_EOL, " amka <amka>: ο αριθμός ΑΜΚΑ", PHP_EOL,
"surname <surname>: επίθετο σε ΚΕΦΑΛΑΙΑ", PHP_EOL, "surname <surname>: επίθετο σε ΚΕΦΑΛΑΙΑ", PHP_EOL;
exit(0); exit(0);
} }
......
settings.php
# Πρόγραμμα επίδειξης για έλεγχο 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',
];
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment