Страница 1 из 1

атрибут пользователя Домашняя директория

СообщениеДобавлено: 20 янв 2015, 09:13
sovchik
В связи с переездом юзеров на другой сервак возникла необходимость поменять всем значение "домашней директории". Пробегать руками всех не хочется, может подскажет как автоматизировать этот процесс?

Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 20 янв 2015, 12:23
Ковалев Артем
Через ldap, вестимо.

Этот код проставляет поле generationQualifier из файла со списком дней рождений сотрудников. Малость допилить - и будет проставлять домашний каталог.
Код: Выделить всё
#!/usr/local/bin/perl

use Net::LDAP;
use IO::Socket;

my $ldap_server ='ldaps://XX.XX.XX.XX';
my $attrlist    = ["cn","networkAddress"];
my $dn;
my $birthday="33.33.33";
my $passwd;
my %blist;
my %excess;

loadbirthdays("birthdays.lst");

$ldap = Net::LDAP->new( $ldap_server ) or die "$@";

print "Enter password for ADMIN: ";
$passwd = <STDIN>;
chomp($passwd);

$mesg = $ldap->bind("cn=ADMIN,ou=Adm,l=MSK,c=RU", password => "$passwd");    # authorized bind
# $mesg = $ldap->bind;    # anonimous bind
$mesg->code && die $mesg->error;

$mesg = $ldap->search( # perform a search
                        base   => "l=MSK,c=RU",
                        filter => "(&(objectclass=user)(cn=*))"
                      );

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


foreach $entry ($mesg->entries) {

    $dn = $entry->dn;
    if ($entry->get_value("loginDisabled") eq "TRUE") { next; }


    $name = iso2win($entry->get_value(fullName));
    if (length($name) < 2) { next; }
   
    $birthday = getbirthday($name);
    if ($birthday eq "0") {
      $excess{$name} = $dn;
      next;
    };
   
    print "$name \t\t $birthday\n";
    $mesg = $ldap->modify($dn, replace => { "generationQualifier" => "$birthday" } );
#    $mesg->code && die $mesg->error;
}
print "----------------------------------------------------------------\n";


$mesg = $ldap->unbind;   # take down session

open (F, ">excess.log");
foreach $m (sort keys (%excess)) {
    print F "$m [$excess{$m}]\n";
};
close F;

open (F, ">spare.log");
foreach $m (sort keys (%blist)) {
    if (!($blist{$m} eq "X")) {
        print F "$m [$blist{$m}]\n";
    }   
};
close F;

exit;


sub getbirthday {
    my $nm = shift; # имя сотрудника
    my $b;

    $nm =~ tr/[а-я]ё/[А-Я]Ё/;
    $nm =~ tr/Ё/Е/;
    $nm =~ s/\s//g;
    if (defined($blist{$nm})) {
      $b = $blist{$nm};
      $blist{$nm} = 'X';
      $b =~ /(\d\d)\.(\d\d)\.(\d\d)(\d\d)/;
      $b = "$1.$2.$4";
      return $b;
    }
    return "0";
};

sub loadbirthdays {
  my $fname = shift; # имя файла
  my $a;
   
    open(F,$fname);
    while (defined($a=<F> )) {
   chomp($a);
   if ($a =~ /(.+)\s+(\d\d\.\d\d\.\d\d\d\d)/) {
       my $n = $1;
       my $b = $2;
       $n =~ tr/[а-я]/[А-Я]/;
       $n =~ tr/Ё/Е/;
       $n =~ s/\s//g;
       $blist{$n} = $b;
   }
    }
   
    close F;
};

sub bin2str {
    my $bin = shift;
    my $res = "";
   
    my ($a0,$a1,$a,$b,$c,$d) = unpack("C6", $bin);
    $res="$a\.$b\.$c\.$d";
   
    return $res;
};

sub iso2win {
$_[0]=~tr/\xD0\xD1//d; $_[0]=~tr/\x90-\xBF\x80-\x8f/\xC0-\xEF\xF0-\xFF/;
return $_[0]; }


Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 20 янв 2015, 13:30
Владимир Семиколенных
Для этого где - то на Cool Solutions была утилитка homes.

Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 20 янв 2015, 17:57
Константин Ошмян
А если поискать на этом же форуме, то можно найти аналогичную тему, где я задавал тот же вопрос и потом делился своим опытом.

Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 21 янв 2015, 17:57
sovchik
2 Ковалев Артем:
спасибо за код, поковыряю на досуге
2 Владимир Семиколенных:
то что надо, благодарю.

Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 22 янв 2015, 11:51
Константин Ошмян
А я спасибо за предоставленную ссылку не заслужил? :cry:

Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 22 янв 2015, 14:18
Антон Фридрих
Искать по форуму нынче не в почете... :) Тема то была разжевана 10(!) лет назад, какие тут уже благодарности :)

Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 22 янв 2015, 23:58
sovchik
Нет, не заслужили. Кто помог тех и поблагодарил, а тыкания носом в поиск никогда помощью не считал. Равно как и вопли про "поиск не в почете". Пинайте теперь сколько угодно, мне всё равно.

Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 23 янв 2015, 10:22
Владимир Семиколенных
Как раз Константин и заслужил. sovchik, если вы посмотрите его сообщегние, то увидите не "тыканье носом" а ссылку на "аналогичную тему". А в ней буквально второе сообщение - решение вашей проблемы.

Re: атрибут пользователя Домашняя директория

СообщениеДобавлено: 23 янв 2015, 21:26
sovchik
Фраза "а если поискать" и есть тыкание носом, а не товарищеская помощь.
Утилита homes помогла значительно сильнее, так что вы не правы - поблагодарил именно тех, кто помог. Пр моему смысл благодарности именно отметить помогших, а не выразить благоговение перед завсегдатаями форума