#!/usr/bin/perl
# cpanel - autofixer/pro                          Copyright(c) 2014 cPanel, Inc.
#                                                           All rights Reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

BEGIN { unshift @INC, '/usr/local/cpanel'; }

use strict;
use warnings;
use POSIX                ();
use Cpanel::ProcessCheck ();

$| = 1;
my $upcppidcount = -1;

if ( !-e '/usr/local/cpanel/etc/exim/cf/virtual_aliases' ) {
    print "Integrity check failed.  Running auto update & repair.. please wait...";
    if ( my $pid = fork() ) {

    }
    else {
        while ( $upcppidcount != 0 ) {
            print "Checking for a running upcp....";
            my %PPIDS = Cpanel::ProcessCheck::previouspids( 'process' => 'upcp' );
            delete $PPIDS{$$};
            $upcppidcount = scalar keys %PPIDS;
            if ($upcppidcount) {
                print "still running .. waiting 60 seconds....";
                sleep(60);
            }
            else {
                print "no running upcp....";
            }
        }
        if ( -e '/usr/local/cpanel/etc/exim/cf/virtual_aliases' ) {
            print "previous update already repaired install!\n";
            exit 0;
        }

        print "starting a forced update!\n";

        chdir('/');

        POSIX::setsid();

        for ( 3 .. 1024 ) {
            POSIX::close($_);
        }
        open( STDIN,  '<', '/dev/null' );
        open( STDOUT, '>', '/dev/null' );
        open( STDERR, '>', '/dev/null' );

        system '/scripts/upcp', '--force';
        system '/scripts/buildeximconf';
        system '/scripts/restartsrv', 'exim';
        exit 1;
    }
}
else {
    print "Integrity check passed.  No update required.\n";
}
