Ldap 1с записать фамилию и имя
Предлагаю вам рассмотреть возможность получения информации из Active Directory на стороне сервера.
Примеры запросов Active Directory
- Поиск административных учётных записей по атрибуту adminCount. Если пользователь является членом защищенной группы (например, Domain Admins, Enterprise Admins и т.п.), ему назначаются ACL, установленные в объекте AdminSDHolder в AD, а атрибуту adminCount пользователя присваивается значение 1.
При удалении пользователя из привилегированной группы процесс AdminSDHolder не возвращает атрибут adminCount к прежнему значению, т.е. в результаты запроса попадут и те учётные записи, которые, когда-либо входили в одну из защищённых групп.
Или более эффективный вариант:
PwdLastSet для определённой даты можно получить с помощью PowerShell:
Подробнее о атрибуте Pwd-Last-Set см. здесь.
objectCategory можно использовать любой, например group, computer, contact и др.
Servername — имя сервера печати, на котором установлен и опубликован в Active Directory принтер.
Пример получения E_MAIL на стороне Клиента.
В качестве входного параметра должна быть указана строка вида \\Домен\Пользователь_домена
Основные атрибуты Active Directory
Таблица основных пользовательских атрибутов Active Directory
Attribute \ Атрибут | Англоязычное название | Русскоязычное название | Value \ Значение |
OU (Organizational Unit) \ Подразделение | |||
distinguishedName | Distinguished Name | Отличительное (уникальное) имя | OU=Компания,DC=domain,DC=com |
name | Компания | ||
Group \ Группа | |||
distinguishedName | Distinguished Name | Отличительное (уникальное) имя | CN=Группа,OU=Компания,DC=domain,DC=com |
name | Группа | ||
member | Members | Члены группы (какие пользователи входят в данную группу) | CN=Сергей Петрович Иванов,OU=Компания,DC=domain,DC=com |
User \ Пользователь | |||
DN | Distinguished Name | Отличительное (уникальное) имя | CN=Сергей Петрович Иванов,OU=Компания,DC=domain,DC=com |
DC | Domain Component | Компонент(класс) доменного имени. | DC=domain,DC=com |
OU | Organizational Unit | Подразделение | Компания |
CN | Common Name | Общее имя | Сергей Петрович Иванов |
givenName | First name | Имя | Сергей Петрович |
name | Full name | Полное имя | Сергей Петрович Иванов |
sn (SurName) | Last name | Фамилия | Иванов |
displayName | Display Name | Выводимое имя | Сергей Петрович Иванов |
Электронная почта | mail@domain.com | ||
sAMAccountName | User logon name (pre-Windows 2000) | Имя входа пользователя (пред-Windows 2000) | IvanovSP |
userPrincipalName | User logon name | Имя входа пользователя | IvanovSP@domain.com |
memberOf | Member Of | Член групп (в какую группу входит данный пользователь) | CN=Группа,OU=Компания,DC=domain,DC=com |
Атрибут userAccountControl
Иногда надо понять включена или отключена учетная запись в AD. Или что еще с ней вообще происходит. За это отвечает атрибут userAccountControl, который является суммой нескольких свойств атрибутов. При этом, значение 512 является значением по умолчанию при всех снятых флагах на вкладке «Учетная запись» и каждый дополнительный параметр прибавляется к нему. Например, значения атрибута userAccountControl для наиболее распространенных случаев:
512 — Включена (Enabled)
514 (512+2) — Отключена (Disabled)
66048 (512+65536) — Включена, срок действия пароля не ограничен (Enabled, password never expires)
66050 (512+65536+2) — Отключена, срок действия пароля не ограничен (Disabled, password never expires)
Специальные предложения
(5) sergb1979, немного не до понял Ваш "французский", но в списке групп есть только группы. Пользователи отображаются списком ниже если по группе даблкликнуть. Надеюсь что помог ))
(8) sergb1979, возможно, что то с правами того пользователя который запускает обработку. У меня все отображается, в тех группах где пользователи есть и которых я в AD стандартными средствами вижу, подключившись каким нибудь LDAP браузером.
(9)
: Ошибка при вызове метода контекста (Open)
rs.Open(";(&(objectCategory=person)(objectClass=user));ADsPath, Name, DisplayName, mail, sAMAccountName, mailNickname;" + ?(Рекурсивно, "subtree", "onelevel"), conn, 0, 1); //source,actconn,cursortyp,locktyp,opt
по причине:
Произошла исключительная ситуация (Provider): Неопознанная ошибка
Все это в попытке происходило, кривое программирование.
Попытка вываливала на СтатусLDAPЗапроса , дальше нигде не анализировалось значение переменной СтатусLDAPЗапроса и информативности не хватило.
//Попытка
//Исключение
// СтатусLDAPЗапроса = "Не удалось выполнить LDAP запрос!";
// Возврат;
//КонецПопытки;
СтатусLDAPЗапроса = "";
Просмотры 8409
Загрузки 120
Рейтинг 4
Создание 22.03.13 12:20
Обновление 22.03.13 12:20
№ Публикации 178992
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
Изучаем новую область через практику, ВАВОК, системную инженерию, под руководством опытного аналитика Ирины Гертовской
См. также
Оптимизация размера изображений из присоединенных файлов УТ 11.4 Промо
5 стартмани
10.07.2020 11360 15 Neti 4
Универсальная выгрузка, загрузка и резервное копирование настроек программы
Универсальная обработка позволяет выгрузить настройки практически любой современной конфигурации на базе БСП в файл, а при загрузке из файла сравнить с текущими значениями в информационной базе.
1 стартмани
23.08.2021 3592 20 Nicholas 9
Доп. панель Alt+Z
Панель, вызываемая для объекта комбинацией клавиш Alt+Z (для документа, справочника, плана вида характеристик, плана счетов и т.д.). Возможности: Редактор всех реквизитов, таблиц и движений, Анализ прав к объекту, Поиск ссылок на объект с фильтрами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Подключается как Расширение.
2 стартмани
24.06.2021 11009 126 sapervodichka 63
Система проверки данных (spd) (расширение)
1 стартмани
20.04.2021 3586 15 tsatsur 10
Запуск 1С под любым пользователем (без необходимости указания пароля) Промо
Предназначается для запуска сеанса другого пользователя из своего сеанса 1С (если пароль вам неизвестен).
1 стартмани
02.07.2019 32395 344 sapervodichka 0
Управление Избранным
Групповая обработка Избранного всех пользователей информационной базы.
1 стартмани
24.06.2020 4908 35 Yashazz 8
Конфигурация для администраторов "Центр управления базами" для 8.3 УФ
Конфигурация предназначена для централизованного управления информационными базами предприятия. Разработана на БСП версии 2.4.4.76. В работе использует COM-соединение.
3 стартмани
09.10.2019 12967 44 WhiteOwl 17
Обновление конфигурации 1С из cf по расписанию
Часто в процессе внедрения или активной разработки конфигурации возникает необходимость ежедневного обновления конфигурации базы данных.
1 стартмани
09.09.2019 5540 2 sivin-alexey 2
DroidRAC2 - консоль администрирования кластера серверов 1С:Предприятие 8.3 под Android Промо
DroidRAC2 - клиент для RAS-сервиса кластера серверов платформы 1С:Предприятие 8.3 под Android.
1 стартмани
24.02.2017 29788 13 user700211_a.straltsou 20
Кто уложил 1С, или мониторинг загрузки кластера в разрезе пользователей с помощью Grafana
Мониторингом различных параметров работы кластера 1С в zabbix сейчас уже никого не удивишь. Собственно потребление памяти, процов и места на серверах обычно настраивают первыми. Потом идет мониторинг в разрезе rphost'ов и различные метрики функционирования SQL сервера. Но вот когда уже все это есть, то временами возникает вопрос - какой же конкретно нехороший человек пытается съесть все (ну не все, но много) ресурсы сервера? Можно смотреть в консоль кластера и ловить редиску там. Можно анализировать журнал регистраций, включать технологический журнал или накапливать статистку в специализированных базах 1С. Но, "настоящим" сисадминам проще как-то с внешними скриптами, базами данных и, например, Grafana. Расскажу что у нас получилось.
1 стартмани
02.09.2019 17071 41 DonAlPatino 29
Установка 1C на Ubuntu 19.04
Установка платформы на примере (8.3.15.1565) на Ubuntu 19.04
1 стартмани
28.08.2019 19649 7 gubar 33
Удаленный доступ к 1С используя SSH Тунель
Предлагаемая обработка открывает удаленный доступ к серверу 1С или клиентской машине через SSH-тунель.
1 стартмани
04.08.2019 12650 5 Sedaiko 7
Многопоточная обработка данных Промо
Конфигурация "Универсальные механизмы: пакеты данных". Набор инструментов для быстрой организации отказоустойчивой многопоточной обработки данных.
1 стартмани
23.11.2018 34217 125 _ASZ_ 17
Service Desk. Конфигурация для администрирования баз 1С и техподдержки IT-отдела.
Простенькая конфигурация по обслуживанию баз 1С и IT-структуры организации для системных администраторов, программистов, IT отдела.
2 стартмани
15.07.2019 12743 85 SanchoD 19
Конфигурация: IT Unit
В помощь системным администраторам, занятым обслуживанием малого и среднего бизнеса. Конфигурация по учету оборудования, сервисов, сроков действия, записная книжка контактов, паролей и другое.
1 стартмани
03.07.2019 11617 76 riposte 15
Наводим порядок в Active Directory с помощью ЗУП / ЗИКГУ 3.1 (идентификация, отключение и актуализация учетных записей пользователей)
Продолжаем использовать ЗУП 3.1 совместно с LDAP во имя автоматизации работы системного администратора. В этот раз займемся аудитом учетных записей. Обработка производит сопоставление учетной записи с данными сотрудников из ЗУП, причем с учетом недавних событий (для перехода на ЗУП 3.1 чаще всего используется рекомендованный перенос, не включающий уволенных сотрудников) есть возможность использовать объединенные с помощью COM-соединения данные ЗУП 2.5 и ЗУП 3.1. Также в данной обработке есть возможность массовой корректировки, заполнения данных и отключения учетных записей. Перед использованием обработки для душевного спокойствия необходимо сделать резервную копию Active Directory любым удобным способом. Протестировано на ЗУП 3.1.6 - 3.1.8.
5 стартмани
01.02.2019 15314 59 Туки Туки 15
Отключение доступа уволенным пользователям Промо
Давно хотели навести порядок в пользователях? Надоело, что в списке мешаются давно уволенные сотрудники? Тогда эта обработка для Вас!
3 стартмани
15.10.2013 57967 112 VBod 17
Показатели ОС сервера через WMIC (место на диске, количество оперативной памяти)
Обработка предназначена для исключительных ситуаций, когда программиста 1С не может, обычными средствами, получить такую информацию как место на дисках сервера, количество занятой оперативной памяти и так далее.
5 стартмани
23.11.2018 5180 5 PerlAmutor 0
1С в Windows docker контейнерах
Создаем Docker-контейнер для windows-версии 1C. Контейнеры позволяют подготовить рабочую среду на любой актуальной версии windows. Благодаря данной технологии можно беспрепятственно запускать требуемую версию сервера 1С или несколько серверов различных версий на одном сервере.
1 стартмани
02.10.2018 35845 43 lishniy 42
Автоматическое отключение пользователя из системы 1С:Предприятие в случае, когда пользователь не работает в запущенном сеансе
Доработка сделана через расширение, платформа 8.3.12.1529 (8.3.11.2867), работает на конфигурациях 1С: ЗУП, БП, КА, ERP и т.д. в общем на всех основных конфигурациях 1С: Предприятие. Часто бывает, что в организации пользователь с утра запускает 1С и уходит на весь день по своим делам, а лицензия израсходована. Для оптимизации использования лицензий на предприятии и сделана данная доработка. Доработка позволяет в автоматическом режиме выбрасывать пользователей из системы 1С если пользователь не работает в системе. По умолчанию проверка активности пользователя происходит через 2 часа после запуска системы, но данный параметр можно настраивать отдельно для каждого пользователя. Если пользователь не активен его сессия закрывается. Расширение работает как в клиент - серверном так и в файловом варианте работы 1С
1 стартмани
27.09.2018 10732 42 mityushov.vv 6
Инструкция по установке и настройке SQL Server и 1С Промо
Данный мануал позволит практически каждому пользователю пошагово установить и произвести первоначальную настройку SQL Server и 1С (клиент-серверный вариант). Основой для данной инструкции послужил SQL Server 2014 и 1С Предприятие 8.3, также данная инструкция может работать и для других версий SQL Server и 1С Предприятия.
Доброго времени суток. Прикрутил контакты для почты на веб-интерфейс. Но возникла небольшая проблемка - при отображении контакта он отобржается как
ИМЯ_ОТЧЕСТВО_ФАМИЛИЯ, хочется наоборот - ФАМИЛИЯ_ИМЯ_ОТЧЕСТВО,
как принято в России. Поле 'cn' (commonname) составное, и составляется по введеным значениям 'givenName' (И.О) и 'sn' (фамилия). По идее где-то в схеме надо поменять просто местами эти 2 значения, но никак не могу найти где. Начал рыть схемы ldap - но что-то в том синтаксисе сам черт ногу сломит. Вопрос: кто сталкивался, подскажите где и что поменять, чтоб получился сабж.
P.S. система debian lenny.
P.P.S. Просто вписать в значения фамилии ИО и наоборот не предлагать - эти же контакты используются в аутглюке, поэтому может нарушиться отображение полей.
очевидно же, что проблема не в схема хранения данных, а в отображении их, менять надо скрипт вэб страницы, а скорее шаблон
Не согласен. В контактной книге аутлука в графе с общими данными отображение идет аналогично - ИМЯ_ОТЧЕСТВО_ФАМИЛИЯ, значит поле 'cn' принимает общее значение где-то в схемах, и уже клиентам раздает его.
Текс, разобрался. Мож пригодится кому:
Проблема возникла при создании контактов в phpldapadmin, поэтому переименовываем существующие контакты как нам надо, а затем идем в шаблоны создания и модифицирования юзеров, у меня это /etc/phpldapadmin/templates и там правим xml файлы таким образом, чтобы при создании и модинге контактов автоматом подставлялась необходимая нам информация в нужном формате. Там, кстати, можно заодно и подрусифицировать интерфейс, чтоб создание юзеров безболезнено переложить на секретариат.
>Там, кстати, можно заодно и подрусифицировать интерфейс, чтоб создание юзеров безболезнено переложить на секретариат.
Скажите, работает ли у Вас такое:
phpldapadmin: при создании учётной записи можно выбрать шаблон, я выбираю Thunderbird, всё отлично, шаблонов в phpldapadmin можно выбрать много. Настало время подредактировать учётную запись, и тут проблема, при редактировании phpldapadmin предлагает в каком шаблоне редактировть, на выбор только два шаблона. Default и ещё какой-то. И поля которые доступны в Thunderbird шаблоне уже не доступны - в частности поле отдела, и так далее. - У Вас также? Получается если человек перевёлся из отдела в отдел придётся удалять запись полностью, и создавать новую, что не очень хорошо.
У меня аналогичная конструкция LDAP, про cn посмотрю чего у меня там. Завтра.
Версия phpldapadmin 2.0.5 кажется. В общем последняя.
И ещё вопрос: Вам не приходила ли в голову идея сделать чтобы теже секретари могли бы создавать и редактировать LDAP записи через почтовый клиент? К примеру Thunderbird? - Мне приходила, но не вышло, и также пробовал Evolution - этот может создавать, может удалять, а редактировать не может, чего я уже только не пробовал, при редактировании говорит - «запись уже существует не могу ничего поделать».
Буду рад помощи!
Добрый день. К сожалению, я не работал с thunderbird шаблонами, ибо в организации все, кроме серверов, использует лицензионный оффтоп, поэтому необходимости не было. Как вариант, могу попробывать, о результатах постараюсь отписать. То что вы описали, с шаблонами простой адресной книги (inetorgperson) прекрасно работает, можно отдельно редактировать записи отделов, телефонов и прочего. И, имхо, этот же шаблон можно и использовать в громоптице.
По поводу секретарей и почтовых клиентов: мысль приходила, но реализаций не занимался, ибо времени катастрофически не хватает. Собираюсь как подниму все что задумал - подумать и об этом, поискать маны в инете, наверняка что-то есть уже. На данный момент я просто создал юзера для данной базы, который может ее редактировать, руссифицировал интерфейс, чтоб было понятно секретарским хомячкам, и отдал им на растерзание, чтоб они сами заводили пользователей. Для создания записей в оффтопе есть вроде ldap клиент какой-то, видал мельком, говорят что удобный, можно секретарей на него посадить - пусть через него вбивают.
> Для создания записей в оффтопе есть вроде ldap клиент какой-то
То что вы описали, с шаблонами простой адресной книги (inetorgperson) прекрасно работает, можно отдельно редактировать записи отделов, телефонов и прочего.
Поэтому выбираю Thunderbird.
Всё отлично работает.
Да и ещё вопросик: Я включал режим debug оно там ругается, что не индексированы записи Mail и тому подобные, я создал конфиг файл в /var/db написал там «index mail eq», и прочее, запустил slapindex кажется утилитку, а всё равно ругань не пропала. - Вы индексировали БД?
ибо в организации все, кроме серверов, использует лицензионный оффтоп
А чего у Вас outlookexpress или чего? Просто Thunderbird легко позволяет фильтровать по любому полю, то есть очень удобно, можно отфильтровать по отделам, выделить всех кого надо и нажать Sent, и сразу упадёт почта на весь отдел, что радует. В Thunderbird есть и другие проблемы, о них я писал тут ранее, но ответа не получил.
В общем посмотрите, интересно довольно. Но немного надо попилить.
Ну и подскажите чего там у Вас с редактированием и созданием в phpldapadmin, просто у меня дело в том, что отделы захотят приватные адресные книги, всем ставить стандэлон клиента не очень хочется, поэтому Web более удобное решение, а ещё лучше почтовый клиент, но как я писал ранее не всё так гладко.
Ну я не особый знаток ldap, так что думаю особо вам ничем не помогу :-(
а вот так поля, доступные для редактирования и добавления записей:
Также можно, поправив шаблоны, указать какие поля сразу будут выдаваться на редактирование при создании и изменении значений, либо прям добавить недостающие поля с phpldapadmin'а.
Могу посоветовать только или поискать инфу в в сети по поводу шаблонов, либо попробывать прикрутить имеющиеся с первой версии, могу выслать их на мыло если кинете. По поводу дебага - тоже не заморачивался, т.к. юзаю для серверов стабильную ветку дебиана, там обычно уже все обласкано и обнюхано до меня.
В организации стоит офис2007 с соответсвущим аутглюком, а для рассылки по отделам прописаны форвардинги в эксиме, в планах все прикрутить конечно к лдапу, но, как уже говорил, времени вообще ни на что не хватает. Если интересует все это - пишите в почту, там поговорим;-) dgeliko мяу гмыло ком.
Я пытаюсь разобраться с OpenLDAP, но никак не пойму как заводить пользователей. Речь идет не о системных пользователях, а именно о пользователях в LDAP.
Вот мой файл /etc/ldap/ldap:
До этого момента все проходит нормально, но теперь я пытаюсь подключиться к ldap от имени user1:
Объясните мне, как это делается?
by anonymous auth
О! Спасибо вам, заработало!
Я вижу вы в этом хорошо разбираетесь, а я не могу найти нормального руководства, может вы направите меня на «путь истинный»? Я не могу понять, где slapd берет информацию, в каком поле хранится пароль? Вот если я, к примеру, создам свой objectClass с атрибутом userPassword он будет работать? Или если создать и свой атрибут userPassword? И вообще, могу я создать свой атрибут, в котором будут храниться данные в определенном формате (например телефонный номер: (ххх) ххх-хх-хх), то есть, чтобы сервер не давал сохранять данные не отвечающие определенному условию?
Я не могу понять, где slapd берет информацию
а. в конфигурационном файле
б. в базе, которую вы заполнили
По-моему, ответ очевиден
Вот если я, к примеру, создам свой objectClass с атрибутом userPassword он будет работать?
Если вы все сделаете правильно - будет. Но
а. начинать создавать свои схемы вам очень рано, ибо вы мало знаете
б. создавать свои схемы и objectclass'ы не нужно (тут есть исключения но они пока не для вас) - нужно пользоваться теми, что есть. Их много.
И вообще, могу я создать свой атрибут, в котором будут храниться данные в определенном формате
Можете, но форматы вы можете выбирать только из имеющихся.
Для телефонного номера уже есть аттрибут и формат.
чтобы сервер не давал сохранять данные не отвечающие определенному условию?
Он и так не дает, другое дело, что вам это не нравится, вы хотите по-своему.
zgen ★★★★★ ( 11.04.16 21:04:11 )
Последнее исправление: zgen 11.04.16 21:04:55 (всего исправлений: 1)
либо я не понимаю, либо ты несешь что-то совсем нубское.
простым языком: в лдапе ты не кликаешь мышкой и не нажимаешь 'создать новый атрибут - тип строка - название Телефон'
ldap это не regedit.
делается это не так. стоит наверное почитать о базах данных вообще.
а для написания своих схем потребуется ldap-fu 80го левела +/-
И вообще, могу я создать свой атрибут, в котором будут храниться данные в определенном формате
Можете, но форматы вы можете выбирать только из имеющихся.
То есть это принципиальное ограничение сервера OpenLDAP или вообще любого сервера LDAP?
в каком поле хранится пароль?
По-моему, ответ очевиден
userPassword: hello
На самом деле ответ не очевиден, я не говорил серверу, что пароль хранится именно в этом поле, он мог бы хранится, к примеру в поле с именем password или pass.
Вы не поймите неправильно, я не докапываюсь, просто мне очень сложно разбираться с программами в которых я не понимаю ограничений самой реализации. К примеру в SQL есть определенные типы данных, они заранее оговорены, и вы, если создаете базу данных, то оперируете тем, что есть. Для пользователей там есть отдельная таблица, где хранится имя и пароль (и для них известны названия полей), и как правило это ЕДИНСТВЕННЫЙ ВОЗМОЖНЫЙ ВАРИАНТ. Здесь же в официальных руководствах никакие ограничения не упоминаются, вроде как и core.schema можно не подключать, то-есть вроде как подразумевается, что я могу полностью управлять и атрибутами и поведением, но потом оказывается, что это не совсем так.
трудно даже начать с чего-то. тут столько всего, гм. оригинального.
ну вот к примеру:
я не говорил серверу, что пароль хранится именно в этом поле
представь, ты не говорил, и серверу наплевать. запиши Фамилию в userPassword а пароль в lastName. Сервер тебе ничего не скажет.
Вопрос в другом - как программы которым надо будет запрашивать эту инфу с сервера себя поведут. Подсказка - будут удивлены. И скажут «неправильный пароль». А вместо имени выведут пароль.
А как ты хотел? Это как-то к LDAP вообще отношения не имеет.
Хочешь свою схему - кто ж запрещает? Напиши. С блекджеком и этими самыми. Будет тебе всё своё. Практически без ограничений.
Ты так и не сказал только, что именно своё ты хочешь, а главное - зачем? Ты вообще представляешь, как используются серверА справочников (ldap)? На практике? Похоже что не очень. Хотя, такие вопросы что ты задаешь очень страннЫ и для SQL баз и вообще для любых компьютерных программ.
То есть это принципиальное ограничение сервера OpenLDAP или вообще Протокола.
На самом деле ответ не очевиден, я не говорил серверу,
14.4. Password Storage
LDAP passwords are normally stored in the userPassword attribute.
Разговаривать с человеком, который просит помощи в вопросах раскрытых в документации мне неинтересно.
14.4. Password Storage
LDAP passwords are normally stored in the userPassword attribute.
are normally stored in the userPassword - именно это меня и смутило, словосочетание «ОБЫЧНО хранится там-то» подразумевает, что он может хранится и где-то еще (и я могу на это повлиять), и именно об этом я и спрашивал. Если бы было написано «MUST» у меня бы этот вопрос не возник.
Если бы вы потрудились прочесть документацию, то вы бы узнали, что password management можно отдать стороннему сервису. Это написано на той же странице.
Сегодня мы рассмотрим добавление записей в каталог LDAP в Qt5 с помощью библиотеки libldap (OpenLDAP).
Мы будем использовать проект из предыдущей статьи .
Делегируем права на добавление пользователей
Прежде чем добавлять пользователя в Active Directory, нам нужно предоставить все необходимые права пользователю, которого мы используем для подключения к каталогу LDAP - ldap-bind
Наша задача предоставить ему права на создание пользователей только в OU=Company,DC=altuninvv,DC=local
Обратите внимание, несмотря на то, что мы будем добавлять учетные записи, я не рекомендую делать это через LDAP – это небезопасно, если вам необходимо хранить телефонный справочник в каталоге LDAP используйте Contact , но об этом мы поговорим в будущих статьях!
Проще всего настроить права через оснастку Пользователи и компьютеры Active Directory
Откройте свойства OU=Company,DC=altuninvv,DC=local
Add , добавьте ldap-bind
ldap-bind выберите его и нажмите Изменить
Далее нажимайте Ок, чтобы подтвердить изменения.
Теперь пользователь имеет права на создание новых пользователей в OU=Company,DC=altuninvv,DC=local
Модернизируем класс QLdapUser
Добавим в класс QLdapUser сеттеры, которые помогут нам заполнить данными пользователя QLdapEntry .
Очистим конструктор главной формы от лишнего кода, оставив только инициализацию и подключение.
Добавим в конструктор главной формы код:
Структура данных LDAPMod
Для того чтобы добавить запись в LDAP мы должны представить её в виде понятном функции ldap_add_ext_s() .
В качестве аргумента эта функция принимает:
Это обычный двумерный массив на указателях.
Для упрощения выделения памяти и дальнейшей работы напишем класс, который сделает за нас всю работу по выделению и корректному освобождению памяти – QLdapMod
Рассмотрим данный класс.
Тип LDAPMod
Чтобы упростить себе жизнь, мы объявляем новый тип – LDAPMod.
В поле класса mods у нас будут храниться данные, готовые к отправке на сервер.
В поле entry мы сохраняем указатель на источник данных – QldapEntry.
Конструктор QLdapMod::QLdapMod
Рассмотрим конструктор - QLdapMod::QLdapMod(QLdapEntry *entry)
У вас может сложиться такая ситуация, когда атрибуты в записи объявлены, но им не присвоено значение, в этом случае нет смысла передавать такие данные на LDAP-сервер. Поэтому сначала мы проверяем сколько у нас не пустых записей:
Как только нам стало известно точное количество не пустых записей, мы выделяем память:
Обратите внимание, мы выделяем память для nonEmptyRecords+1 записей, так как последняя запись обязательно должна быть равна NULL – что служит признаком окончания списка.
Далее мы просто выделяем память для всех атрибутов:
Здесь все просто - мы освобождаем память, но в обратном порядке, тому, при котором её выделяли:
mods[j] содержит два указателя - mod_type и modv_strvals , для которых мы позже будем выделять память, поэтому мы должны освободить эту выделенную память, а только потом освобождать её у mods[j]. Если этого не сделать, возможны утечки памяти и непредсказуемое поведение программы.
Если вы сейчас закомментируете строчки:
Программа отработает без ошибок, но это не значит, что, когда дело дойдет до серьезного проекта, не возникнут проблемы.
Существует функция ldap_mods_free() , освобождающая память, но лучше освободить всё самому.
Вспомогательный метод setCharArrayFromQstringList
Основная его задача состоит в том, чтобы преобразовать QStringList в массив строк char **c .
Так как в LDAP каждый атрибут может иметь несколько значений, например несколько телефонов, для хранения используется массив char **c .
Метод setCharArrayFromQstringList проходит по всем элементам QStringList и для каждого создает указатель на новый элемент массива char **c .
Для этого используется функция _strdup()
По сути код этой функции аналогичен:
Но мы будем использовать готовый вариант.
Функция просто выделяет память для строки и возвращает указатель на созданную копию данных.
Обратите внимание на строку
Она обязательна! Последний элемент массива всегда должен быть равен NULL !
Метод getMods()
Возвращает массив данных готовый к отправке на сервер.
Именно здесь мы проходим по всем элементам entry и создаем новые элементы массива mods .
Обратите внимание, существуют несколько операций при работе с LDAP:
- LDAP_MOD_ADD – добавление значений
- LDAP_MOD_REPLACE - обновление значений
- LDAP_MOD_DELETE –удаление значений
Сегодня мы будем использовать LDAP_MOD_ADD
Так же вы можете добавить двоичные данные в LDAP, используя:
Но об этом мы поговорим в одной из следующих статей.
мы задаем режим работы.
Задает имя атрибута для добавления.
выделяет память под массив строк – значений атрибута, а затем этот массив заполняется данными с помощью вспомогательного метода setCharArrayFromQstringList .
Цикл повторяется для всех непустых атрибутов.
Обратите внимание, в самом конце мы обязательно добавляем NULL как последний элемент массива:
Это обязательное требование!
И, наконец мы возвращаем указатель на наши данные.
Добавление записи в каталог LDAP
Мы подготовили данные для отправки на LDAP сервер, пришло время написать код, для работы с ним:
Добавим метод в класс QLdap :
Здесь всё просто, для начала мы создаем строку DN для нового пользователя. DN должен начинаться с ФИО пользователя, например:
После этого мы вызываем функцию ldap_add_ext_s и возвращаем результат выполнения.
Используем созданный метод:
Если мы запустим второй раз, то результат будет немного другим:
Поэтому вы сами обязательно должны обрабатывать ответ от LDAP-сервера.
Таким образом мы успешно добавили пользователя в каталог LDAP.
Заключение
Сегодня мы рассмотрели добавление пользователя в LDAP-каталог.
Предоставили пользователю ldap-bind доступ на создание пользователей в AD.
Доработали класс QLdapUser добавив дополнительные поля.
Создали класс QLdapMod для перевода данных в формат, подходящий для отправки серверу LDAP.
Читайте также: