Архивы: active directory

sams2 и syncfromad

Итак, есть известная проблема в самсе2 со скритпом syncfromad:
после отработки скрипта вместо синхронизации просходит внезапное удаление всех юзеров синхронизируемой группы. Несколько неожиданное поведение.
На форуме и в баг-трекере разрабы молчат-помалкивают, а оказывается баг то этот уже исправлен!
Итак, лезем в svn и дергаем оттуда свежую версию скрипта syncfromad:

wget http://svn.nixdev.net/svn/sams/trunk/php/bin/syncfromad

как мы видим этот скрипт рушится с ошибкой о том, что не найдена функция adldap::group_members. Пичалька :((
Снова лезем в свн:

wget http://svn.nixdev.net/svn/sams/trunk/php/src/adldap.php
mcedit adldap.php

ищем в нем нужную нам функцию

/**
* Return a list of members in a group
*
* @param string $group The group to query
* @param bool $recursive Recursively get group members
* @return array
*/
public function group_members($group, $recursive = NULL){

ctrl+c её родимую и ctrl+v в файл /var/www/sams2/src/adldap.php

Скрипт работает. Синхра идет. Аллилуйа!
(Если вы не забудете прописать скрипт в крон, разумеется)

Скопировать адских юзеров из одной security group в другую

Потребовалось скопировать юзеров из одной sceurity group в другую. Оказывается штатными средствами (по крайней мере в AD на 2003) это невозможно О_о. Блядство. Порылся в интернетах, нашел следующее:

Скрипт раз — отрабатывает с ошибкой. Не пойдет

Скрипт два — сначала работать отказался, потом после замены заглавных букв на строчные  ( О_О ) — заработал. Вот собственно как он выглядит:

copyusersfromoneSGtoanother.vbs

strSGroupDN = InputBox («Enter the DN of Source Group» & VBCRLF &_
                  vbcrlf& _
                  vbcrlf& _
                  «e.g. CN=1с_users_2010,OU=Security Group,DC=mydomen,DC=ru»)
strDGroupDN = InputBox («Enter the DN of Destination Group» & VBCRLF &_
                  vbcrlf& _
                  vbcrlf& _
                  «e.g. CN=1с_users_2011,OU=Security Group,DC=mydomen,DC=ru»)
 
set objSGroup = GetObject(«LDAP://» & strSGroupDN)
set objDGroup = GetObject(«LDAP://» & strDGroupDN)

‘ Enumerate members of source group.
for each objMember In objSGroup.Members
    ‘ Check if member of destination group.
    if (objDGroup.IsMember(objMember.ADsPath) = false) then
        ‘ Add member to destination group.
        objDGroup.Add(objMember.ADsPath)
    end If
next