из кладовки:
Программка мониторинга full_audit лога самбы.
$PATH_SHARE="home/samba/shares";
$TMP_FILE="/tmp/acl_rename.tmp";
$TMP_FILE2="/tmp/acl_rename2.tmp";
while ($str=)
{
if (index($str,"|rename|ok|")!=-1)
{
@ar = split(/\|/,$str);
$share=$ar[2];
$action=$ar[3];
$ok=$ar[4];
$src=$ar[5];
$dst=$ar[6];
chomp($dst);
$psrc=reverse(substr(reverse($src),index(reverse($src),"/")+1,1000));
$pdst=reverse(substr(reverse($dst),index(reverse($dst),"/")+1,1000));
if ($psrc ne $pdst)
{
qx "find '/$PATH_SHARE/$share/$dst' > $TMP_FILE2";
open(F2, $TMP_FILE2) or die "Ошибка открытия файла в acl_rename";
@f2 = ;
close(F2) or die "Ошибка закрытия файла в acl_rename";
foreach $j (@f2)
{
chomp($j);
$pj=reverse(substr(reverse($j),index(reverse($j),"/")+1,1000));
qx "getfacl '$pj' > $TMP_FILE 2>/dev/null";
open(F1, $TMP_FILE) or die "Ошибка открытия файла в acl_rename";
@f1 = ;
close(F1) or die "Ошибка закрытия файла в acl_rename";
open(F1, ">$TMP_FILE") or die "Ошибка открытия файла в acl_rename";
$f1[0] = "# file: $j\n";
if (-d "$j")
{
print F1 @f1,"\n";
}
else
{
foreach $i (@f1)
{
if (index($i,"default:")==-1)
{
print F1 $i;
}
}
}
close(F1) or die "Ошибка закрытия файла в acl_rename";
qx "cd / && setfacl --restore=$TMP_FILE";
}
}
}
}
Запуск tail -n 0 -F /var/log/samba/full_audit.log | acl_rename.pl &
Теперь при перемещении файла или папки внутри шары, пермишены и acl не сохраняются, а назначаются равными той папке куда переместили.