2016-09-28 1 views
0

Я получаю информацию о пользователе с сервера LDAP. Клиент послал меня следующие 3 данных:Возможно ли отображение структуры папки ldap с помощью Perl?

  1. LDAP сервер IP
  2. Имя пользователя для аутентификации
  3. Пароль для аутентификации

Это первый раз, когда я работаю с LDAP, так что я учился на нем. Я вижу, что я должен использовать некоторые параметры, такие как cn, dc, ou. Разве клиент не должен давать эту информацию? Или информации о клиентах достаточно, и могу ли я найти эти параметры с помощью кода, отображающего структуру папок?

+0

Какой тип справочника это? Как выглядит предоставленное имя пользователя? – EricLavault

+0

Я получу информацию о пользователе. Я не знаю никакой другой информации. Мой вопрос заключается в том, должен ли я спрашивать об этом у клиента или есть ли способ увидеть иерархию каталогов LDAP-сервера. –

+0

. Было бы лучше, если бы вы знали, с каким типом каталога вы должны работать, особенно если вам не нравится LDAP .. вы можете угадать, как только вам удалось прочитать некоторые записи. Вам удалось связать и выполнить поиск? – EricLavault

ответ

0

Структура, которую вы хотите видеть, называется деревом каталогов и состоит из LDAP «записей» (не папки).

Вы должны иметь возможность собирать записи из своего каталога при условии, что предоставленные вами полномочия достаточны. Для этого вам нужна клиентская библиотека, вы можете использовать Perl LDAP.

Используя эту библиотеку вы могли бы сделать что-то вроде:

use Net::LDAP; 

# Init connection and bind to the directory. 
$ldap = Net::LDAP->new('ldaphost.example.com') or die "[email protected]"; 
$mesg = $ldap->bind ($binddn, password => $password); 

# Perform a search on the whole tree below (and including) the base object. 
$mesg = $ldap->search(base => $basedn); 

# Handle error 
$mesg->code && die $mesg->error; 

# Display results 
foreach $entry ($mesg->entries) { $entry->dump; } 

$mesg = $ldap->unbind; 

код, указанный выше просто напечатать записи на стандартный вывод ($ entry-> дамп).

  • $binddn является dn для аутентификации. Если вам дано простое имя пользователя, которое не является dn, например «имя пользователя», а не что-то вроде uid=username,dc=example,dc=com, это, вероятно, означает, что вы имеете дело с Active Directory. В этом случае вы можете попытаться связать с binddn, который соответствует следующему шаблону: '[email protected]'.
  • basedn является dn записи базового объекта, поиск выполняется на всем дереве ниже (и включает) базовый объект. Вам нужно будет указать действительную базу dn.

Вы можете попытаться угадать, какую базу использовать dn. Компоненты домена (dc) обычно соответствуют FQDN, но не гарантируется, что он приводит к действительной базе dn (например, 'ldaphost.example.com' даст 'dc=example,dc=com'). Однако вы можете запросить у сервера информацию RootDSE и получить namingContexts (или defaultNamingContext если таковые имеются) и использовать одну из них в качестве базового дп:

$ldap->search(base => '', attrs => 'namingContexts'); 

Это говорит, что если вы действительно хотите, чтобы отобразить дерево каталогов, вы лучше пойти с LDAP-проводником, например Apache Directory Studio.

Обратите внимание, что LDAP не ограничивается хранением информации в строгих структурах «дерева», он просто должен уважать номенклатуру дерева каталогов (DIT).

Смежные вопросы