HolyBoy> Вот пример фильтра, который я в одной организации использую для вытаскивания почтовых адресов из AD:
code text
(&(|(objectClass=person)(objectClass=contact))(|(mail=%s)(proxyAddresses=smtp:%s)))
А ты не используешь аттрибуты o и ou? Смело, однако...
Паш, LDAP, фактически, иерархическая БД с перекрёстными сслыками и почти объектным деревом наследования. Рассматривай записи в нём, как структуры в языках программирования. Ну, а добавления новых аттрибутов — это наследование. Записи собираются в "таблицы" (это не совсем таблицы в обычном понимании, а, скажем массивы ссылок в терминах C++). Примерно так в терминах C++:
code c++
struct Organization
{
string o;
};
struct OrganizationUnit : Organization
{
string ou;
};
struct Email
{
string mail;
};
struct Person
{
string fn;
string ln;
};
struct OrganizationPerson : OrganizationUnit, Email, Person
{
string department;
};
struct ExtendedOP : OrganizationPerson
{
string phone;
};
Person allPersons[ ];
Вот массив Person может содержать ссылки на объекты типа Person, OrganizationPerson и ExtendedOP. По ходу дела, написав запрос с фильтром про мыло, LDAP-сервер прошарит по массиву allPersons и найдёт те, у которых он есть и проверит на наличие такового. Только запись запросов префиксная, а не инфиксная, как в случае языков программирования.