Удаление mail-директорий в Postfixadmin

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
NiXoN
рядовой
Сообщения: 38
Зарегистрирован: 2012-01-24 9:03:03

Удаление mail-директорий в Postfixadmin

Непрочитанное сообщение NiXoN » 2012-02-13 11:33:03

Доброго дня всем! Товарищи, может кто сталкивался с такой проблемой - есть postfix-2.8.7,1 в связке с mysql-server-5.5.20 и postfixadmin-2.3.5. Про саму настройку постфикса рассказывать не буду, ибо смысла нет, интересует такая вещь - в директории постфиксадмина, которая называется ADDITIONS имеется скрипт перловый cleanupdirs.pl. Этот скрипт удаляет почтовые директории пользователей, которых нет в базе mysql. Нужен он потому, что при удалении почтового ящика из веб-интерфейса постфиксадмина удаляется только запись из mysql, а вот директория почтовая, которая находится на винте остается. Её приходится вручную удалять, а этого делать не охота) Всё бы хорошо, да только вот настроен этот скрипт на работу при условии, что доступ до ящиков имеет такой вид /home/vmail/domain.tld/user, а мне надо вот так - /home/vmail/user@domain.tld. В самом скрипте написано про такое, но не сказано, как крешить, написано, что что-то надо изменить, а вот что... Я перл знаю не особо хорошо. Помогите пожалуйста решить заковырку!

Сам файл cleanupdirs.pl выглядит так

Код: Выделить всё

#!/usr/bin/perl -w

################################################################################
#
# cleanupdirs 1.2 by jared bell <jared@beol.net>
#
# display/remove maildir & domains directory tree's not listed in the postfix
# mysql database. currently setup for use with postfixadmin, but can be
# adapted. edit settings where it says 'change settings as needed.' by default
# this program will display a list of directories which need deleted, nothing
# is actually deleted. to change this behavior, look into the command line
# arguments.
#
# command line arguments:
#   --delete
#       force automatic deletion of directories. instead of displaying a list
#       of deleted directories, they will be logged in the specified logfile.
#   --print
#       display deleted directories as well as log them. only valid when
#       '--delete' has been specified.
#
# settings:
#   $root_path = "/home/vmail";
#       if maildir is '/home/vmail/domain.tld/user' then '/home/vmail' is the
#       $root_path. if your maildirs are '/home/vmail/user@domain.tld' then
#       this program will need to be modified in order to work right.
#   $logfile = "/var/log/removed_maildirs.log";
#       the logfile to use when $delete_old_dirs is set to 1
#   $db_* = "*";
#       sets the host, port, database, user and pass to your mysql server
#
# version history:
#   1.2 - removed uneeded settings. added '--print' command line argument
#   1.1 - added '--delete' command line argument
#   1.0 - initial release
#
################################################################################

use strict;
use DBI;
use File::Path;
use Getopt::Long;

### change settings as needed, see notes above #################################
our $root_path = "/home/mail/virtual";
our $logfile = "/var/log/removed_maildirs.log";
our $db_hostname = "localhost";
our $db_port = "3306"; # this script currently supports MySQL only
our $db_database = "postfix";
our $db_username = "postfix";
our $db_password = "postfix";

# instead of changing this script, you can put your settings to /etc/mail/postfixadmin/cleanupdirs.conf
# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example:
# $db_username = 'mail';
if (-f "/etc/mail/postfixadmin/cleanupdirs.conf") {
        require "/etc/mail/postfixadmin/cleanupdirs.conf";
}

################################################################################

### begin program ##############################################################
my(@dirs_to_delete, $logfile_open);
my $delete_old_dirs = 0; # do not delete by default, use cmdline to change this
my $print_also = 0; # also print items when deleting, use cmdline to change this
GetOptions ('delete' => \$delete_old_dirs, 'print' => \$print_also);
my $conn_info = "DBI:mysql:database=$db_database;hostname=$db_hostname;port=$db_port";
my $dbh = DBI->connect($conn_info, $db_username, $db_password)
  or die $DBI::errstr;
opendir DOMAINDIR, $root_path
  or die "Unable to access directory '$root_path' ($!)";
foreach my $domain_dir (sort readdir DOMAINDIR) {
  next if $domain_dir =~ /^\./; # skip dotted dirs
  next if (! -d "$root_path/$domain_dir"); # skip everything that is not a directory
  my $full_domain_dir = "$root_path/$domain_dir";
  opendir USERDIR, $full_domain_dir
    or die "Unable to access directory '$full_domain_dir' ($!)";
  foreach my $user_dir (sort readdir USERDIR) {
    next if $user_dir =~ /^\./; # skip dotted dirs
    push @dirs_to_delete, "$full_domain_dir/$user_dir"
      if &check_dir("SELECT maildir FROM mailbox WHERE maildir = ?",
        "$domain_dir/$user_dir/"); # end slash needed for checkdir
  }
  push @dirs_to_delete, $full_domain_dir
    if &check_dir("SELECT domain FROM domain WHERE domain = ?", $domain_dir);
}
closedir USERDIR;
closedir DOMAINDIR;
$dbh->disconnect;
if (@dirs_to_delete) {
  foreach my $to_delete (@dirs_to_delete) {
    if ($delete_old_dirs == 1) {
      $logfile_open = open LOGFILE, ">> $logfile"
        or die "Unable to append logfile '$logfile' ($!)"
          unless $logfile_open;
      rmtree $to_delete;
      print LOGFILE localtime() . " Deleting directory '$to_delete'\n";
      print localtime() . " Deleting directory '$to_delete'\n"
        if $print_also;
    } else {
      print localtime() . " Need to delete directory '$to_delete'\n";
    }
  }
}
close LOGFILE if $logfile_open;
sub check_dir {
  my($query, $dir) = @_;
  my $sth = $dbh->prepare($query);
  my $num_rows = $sth->execute($dir);
  $sth->finish;
  ($num_rows eq "0E0") ? 1 : 0;
}

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

NiXoN
рядовой
Сообщения: 38
Зарегистрирован: 2012-01-24 9:03:03

Re: Удаление mail-директорий в Postfixadmin

Непрочитанное сообщение NiXoN » 2012-02-24 10:14:40

Ребят, что, никто не сталкивался с такой проблемой?