Jump to content
Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble

Recommended Posts

Σημερα ειχα ενα θεμα με WebMail όπου όλα τα αρχεία είχαν σωστά perms / ownership αλλά σε WebMail ο χρηστης δεν εβλεπε πια τα email του παρά μονο:

"mail server closed the connection unexpectedly"

Το περίεργο αλλά και θετικό ήταν πως δεν είχε σχέση με την IP ανα session, ούτε με άλλο email account ακόμη και στο ίδιο Package ( σε addon domain )

Παντα μιλάμε για cPanel box

Την λύση την έδωσαν οι ίδιοι με ενα απο τα δικά τους scripts

 /scripts/remove_dovecot_index_files --user {user} --verbose 

ενδιαφερον fix

[*] (1/1) Processing cPanel user: '{user}' …
Unlinking '/home/{user}/mail/dovecot.index.log' …
Unlinking '/home/{user}/mail/{domain}/{user}/dovecot.index.log.2' …
Unlinking '/home/{user}/mail/{domain}/{user}/dovecot.index.cache' …
Unlinking '/home/{user}/mail/{domain}/{user}/dovecot.index' …
Unlinking '/home/{user}/mail/{domain}/{user}/dovecot.index.log' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Sent/dovecot.index.cache' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Sent/dovecot.index' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Sent/dovecot.index.log' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Drafts/dovecot.index.cache' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Drafts/dovecot.index' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Drafts/dovecot.index.log' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Trash/dovecot.index.cache' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Trash/dovecot.index' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Trash/dovecot.index.log' …
Unlinking '/home/{user}/mail/{domain}/{user}/.spam/dovecot.index.log' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Junk/dovecot.index.log' …
Unlinking '/home/{user}/mail/{domain}/{user}/.Archive/dovecot.index.log' …
[+] '{user}' processed.

To script το βρηκα και εδω

http://www.batangrande.com/fotos/sym/root/scripts/remove_dovecot_index_files

#!/usr/local/cpanel/3rdparty/bin/perl
# cpanel - scripts/remove_dovecot_index_files
#                                                    Copyright 2015 cPanel, Inc.
#                                                           All rights Reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

package scripts::remove_dovecot_index_files;

use strict;

use File::Find   ();
use File::Spec   ();
use Getopt::Long ();

use Cpanel::Config::LoadCpConf           ();
use Cpanel::PwCache                      ();
use Cpanel::Reseller                     ();
use Cpanel::Config::Users                ();
use Cpanel::Config::LoadUserOwners       ();
use Cpanel::AccessIds::ReducedPrivileges ();

exit run(@ARGV) unless caller();

my $verbose = 0;

sub run {
    my @cmdline_args = @_;
    return usage(1) if !@cmdline_args;

    unless ( $> == 0 && $< == 0 ) {
        return usage( 1, "[!] This program can only be run by root!\n" );
    }

    my $opts = {};
    Getopt::Long::GetOptionsFromArray(
        \@cmdline_args,
        'all'         => \$opts->{'all'},
        'reseller=s@' => \$opts->{'reseller'},
        'user=s@'     => \$opts->{'user'},
        'verbose'     => \$verbose,
        'help|h'      => \$opts->{'help'},
    );

    return usage(0) if $opts->{'help'};

    my $cpconf_ref = Cpanel::Config::LoadCpConf::loadcpconf();
    if ( $cpconf_ref->{'mailserver'} ne 'dovecot' ) {
        return usage( 1, "[!] The configured mailserver is not Dovecot. Action aborted.\n" );
    }

    return process_all_users_on_server() if $opts->{'all'};
    process_reseller( $opts->{'reseller'} ) if $opts->{'reseller'} && scalar @{ $opts->{'reseller'} };
    process_cpanel_user( $opts->{'user'} )  if $opts->{'user'}     && scalar @{ $opts->{'user'} };

    return 0;
}

sub process_cpanel_user {
    my $cpusers_to_process = shift;

    my ( $index, $total ) = ( 1, scalar @{$cpusers_to_process} );
    foreach my $cpuser ( @{$cpusers_to_process} ) {
        print "[*] ($index/$total) Processing cPanel user: '$cpuser' …\n";

        $index++;
        my $homedir = Cpanel::PwCache::gethomedir($cpuser);
        my $maildir = File::Spec->catfile( $homedir, 'mail' );
        if ( !-d $maildir ) {
            print "[!] User's maildir was not found: $maildir - $!\n";
            next;
        }

        my $maxdepth                 = File::Spec->splitdir($maildir) + 4;
        my $purge_index_files_codref = sub {
            File::Find::find(
                {
                    'wanted' => sub {

                        # Dovecot index files are in "$homedir/mail/domain.tld/emailuser/<dirname>".
                        # So we limit the depth here to what was determined above.
                        return if File::Spec->splitdir($File::Find::name) > $maxdepth;

                        # Remove files that match:
                        # dovecot.index
                        # dovecot.index.cache
                        # dovecot.index.log
                        # dovecot.index.log.\d+ (rotated log files)
                        return if $_ !~ m/^dovecot\.index(\.cache|\.log(\.\d+)?)?$/;

                        print "Unlinking '$File::Find::name' …\n" if $verbose;

                        if ( -e $File::Find::name && -f $File::Find::name ) {
                            unlink $File::Find::name or print "Failed to unlink '$File::Find::name': $!\n";
                        }
                    },
                    'no_chdir'    => 0,    # default, but setting to be explicit about the usage.
                    'follow_skip' => 2,    # ignore any duplicate files and directories
                },
                $maildir
            );
        };
        eval { Cpanel::AccessIds::ReducedPrivileges::call_as_user( $purge_index_files_codref, $cpuser ) };

        print "[+] '$cpuser' processed.\n";
    }
    return;
}

sub process_reseller {
    my $resellers_to_process = shift;

    foreach my $reseller ( @{$resellers_to_process} ) {
        print "[*] Processing Reseller: '$reseller' …\n";
        if ( !Cpanel::Reseller::isreseller($reseller) ) {
            print "[!] '$reseller' is not reseller.\n\n";
            next;
        }

        my $owners_hr = Cpanel::Config::LoadUserOwners::loadtrueuserowners( {} );
        if ( !( $owners_hr->{$reseller} && 'ARRAY' eq ref $owners_hr->{$reseller} ) ) {
            print "[!] Failed to fetch list of accounts owned by reseller, '$reseller'.\n\n";
            return;
        }

        print "\n";
        process_cpanel_user( $owners_hr->{$reseller} );
        print "\n";
    }

    return;
}

sub process_all_users_on_server {
    my $cpusers = Cpanel::Config::Users::getcpusers();
    if ( !( $cpusers && 'ARRAY' eq ref $cpusers ) ) {
        print "[!] Failed to fetch list of cPanel accounts on server.\n";
        return;
    }

    print "[*] Processing all cPanel users on the server …\n\n";
    process_cpanel_user($cpusers);
    print "\n[+] Finished processing all cPanel users on the server.\n";

    return 0;
}

sub usage {
    my ( $retval, $msg ) = @_;
    my $fh = $retval ? \*STDERR : \*STDOUT;

    if ( !defined $msg ) {
        $msg = <<USAGE;
$0

Utility to remove Dovecot index files. Available options:

    --user [cPanel username]

        Remove Dovecot index files from all email accounts setup under the specified cPanel user.
        Can be specified more than once, to process multiple users at once.

    --reseller [reseller username]

        Remove Dovecot index files from all email accounts setup under all the cPanel accounts owned by the specified Reseller.
        Can be specified more than once, to process multiple resellers at once.

    --all

        Remove Dovecot index files from all email accounts setup on the server.

    --verbose

        Prints the full paths of the files being removed.

    --help

        Prints this help text.
USAGE
    }

    print {$fh} $msg;
    return $retval;
}

1;

 

Share this post


Link to post
Share on other sites

Προφανώς για κάποιο λόγο (π.χ. εάν είχε γεμίσει το quota του πακέτου, ή εάν είχε γεμίσει ο χώρος στο partition) είχαν γίνει corrupt τα συγκεκριμένα αρχεία. Oπότε διαγράφοντας τα δημιουργήθηκαν ξανά. Για να μην υπάρχουν τέτοια προβλήματα στο δικό μας setup τα αποθηκεύουμε αυτά τα αρχεία στο /tmpfs (RAM).

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...