Есть 2 лдап каталога c разной структурой и файлик smbpasswd.
Есть некоторое количество юзеров, которым нужно создать учетки в новом лдап каталоге, и перенести их данные: ФИО, отдел... и пароли. Пароли - соответственно для pam (squid,ssh...) и smb авторизации.
С паролями косяк, поле userPassword при записи в него воспринимает текст, который туда хотят записать как plaintxt, и на всякий случай шифрует его. Но у меня пароли уже зашифрованы - в старом лдапе. ФИО и пароли из smbpasswd - все переносится нормально.
Изменять userPassword пробовал так:
ldapsearch -w .... -D "cn=manager,..." -h ... -b "dc=vip-driver,dc=ru" "(uid=$user)" > /tmp/ldap.txt
...skip...
userPassword=`cat /tmp/ldap.txt | grep userPassword | awk -F ": " {'print $2'}`
...skip...
echo replace: userPassword >> $ldif
echo userPassword: $userPassword >> $ldif
echo - >> $ldif
ldapmodify -c -f $ldif -w $ldap_pw -x -D $ldap_dn
use Net::LDAP;
use Net::LDAP::Entry;
$ldap = Net::LDAP->new('127.0.0.1') or die "$@";
$mesg = $ldap->bind( 'cn=ldapadmin,dc=calculate', password => '...' );
$entry = Net::LDAP::Entry->new;
$mesg = $ldap->search( base => "ou=Users,ou=Samba,ou=Services,dc=calculate", filter => "uid=$user" );
$entry = $mesg->entry($index);
$entry->replace (
userPassword => '$pwd_hash'
);
$entry->update ( $ldap );
Вопрос знатокам: как внести в userPassword _уже_ зашифрованное значение?
Единственный способ который, как мне кажется, поможет - это slapcat + slapadd, но он мне не нравится тем, что придется ldiff редактировать вручную.