MOON
Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
System: Linux csr818.wilogic.com 2.6.18-419.el5xen #1 SMP Fri Feb 24 22:50:37 UTC 2017 x86_64
User: digitals (531)
PHP: 5.4.45
Disabled: NONE
Upload Files
File: //scripts.20110531.215904.25158/setupftpserver
#!/usr/bin/perl
# cpanel - setupftpserver                         Copyright(c) 2010 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 Cpanel::Config   ();
use Cpanel::Chkservd ();
use Cpanel::Services ();
use Cpanel::Usage    ();
use Cpanel::PID      ();
use Cpanel::Init     ();
use Cpanel::Update   ();

my $force   = 0;
my $current = 0;
$| = 1;

delete $ENV{'cp_security_token'};
delete $ENV{'HTTP_REFERER'};

# Argument processing
my %opts = (
    'force'   => \$force,
    'current' => \$current,
);

Cpanel::Usage::wrap_options( \@ARGV, \&usage, \%opts );

@ARGV = ( grep( !/^--/, @ARGV ) );

my $selected_ftpserver = shift;
usage() unless ( $selected_ftpserver || $current );

my $cpconf_ref = Cpanel::Config::loadcpconf();
my $current_ftpserver = Cpanel::Services::is_enabled('ftpd') ? $cpconf_ref->{'ftpserver'} : 'disabled';

if ($current) {
    print "Current FTP server type: ${current_ftpserver}\n";
    exit 0;
}

if ( !$force && $current_ftpserver eq $selected_ftpserver ) {
    print "Already configured.\n";
    exit 0;
}

unless ( $selected_ftpserver eq 'pure-ftpd' || $selected_ftpserver eq 'proftpd' || $selected_ftpserver eq 'disabled' ) {
    print "Unknown FTP server specified.\nTry $0 --help\n";
    exit 1;
}

if ( $> != 0 ) {
    die "Conversion process must be performed as root";
}

my $pid_obj = Cpanel::PID->new( { 'pid_file' => '/var/run/setupftpserver.pid' } );
unless ( $pid_obj->create_pid_file() > 0 ) {
    print "Setupftpserver appears to be running already.\n";
    print "Please wait for the conversion to finish before attempting another.\n";
    exit 1;
}

$cpconf_ref->{'ftpserver'} = $selected_ftpserver if ( $selected_ftpserver ne 'disabled' );
Cpanel::Config::savecpconf($cpconf_ref);
my $init = Cpanel::Init->new();

#branch to uninsall/install functions
disable_chksrvd_monitoring();

if ( $selected_ftpserver eq 'pure-ftpd' || $selected_ftpserver eq 'proftpd' ) {
    enable_ftpserver( $selected_ftpserver, $current_ftpserver );
    enable_chksrvd_monitoring();
}
else {
    disable_ftpserver($current_ftpserver);
}

$pid_obj->remove_pid_file();

print "\nFTP server conversion complete\n";
exit 0;

sub disable_ftpserver {
    my $running_ftpserver = shift;
    system( 'touch', '/etc/ftpddisable' );
    print "\nHalting $running_ftpserver\n";
    my $output = $init->run_command( $running_ftpserver, 'stop' );
    print "\nDisabling $running_ftpserver in init system\n";
    $output = $init->run_command_for_one( 'disable', $running_ftpserver );
    print "\nDisabling FTP server updates\n";
    my $updateconf = Cpanel::Update::loadupdateconfig();
    $updateconf->{'FTPUP'} = 'never';
    Cpanel::Update::saveupdateconfig($updateconf);
}

sub enable_ftpserver {
    my ( $new_ftpserver, $current_ftpserver ) = @_;
    foreach my $disable_file (qw(ftpd ftpserver pure-ftpd proftpd)) {
        unlink '/etc/' . $disable_file . 'disable' if ( -e '/etc/' . $disable_file . 'disable' );
    }

    # This will be recreated if appropriate when configuration is done
    unlink '/var/cpanel/ftpd_service_auth_check_disabled' if ( -e '/var/cpanel/ftpd_service_auth_check_disabled' );

    print "\nSwitching FTP server to $new_ftpserver\n";
    my $updateconf      = Cpanel::Update::loadupdateconfig();
    my %orig_updateconf = %{$updateconf};
    $updateconf->{'FTPUP'} = 'daily';
    $updateconf->{'SYSUP'} = 'daily';
    Cpanel::Update::saveupdateconfig($updateconf);
    my @ftpup = ('/scripts/ftpup');
    push @ftpup, '--force' if ( $force || ( $current_ftpserver && $current_ftpserver ne $new_ftpserver ) );
    system(@ftpup);
    print "\nEnabling $new_ftpserver in init system\n";
    my $output = $init->run_command_for_one( 'enable', $new_ftpserver );
    print "\nEnabling FTP server updates\n";
    $orig_updateconf{'FTPUP'} = 'inherit';
    Cpanel::Update::saveupdateconfig( \%orig_updateconf );
}

sub disable_chksrvd_monitoring {
    my %monitored_services = Cpanel::Chkservd::getmonitored();
    if ( !$monitored_services{'ftpd'} ) {
        print "\nChksrvd monitoring is disabled\n";
    }
    else {
        print "\nDisabling Chksrvd monitoring\n";
        Cpanel::Chkservd::disable('ftpd');
        system('/scripts/restartsrv_chksrvd');
    }
}

sub enable_chksrvd_monitoring {
    my %monitored_services = Cpanel::Chkservd::getmonitored();
    if ( $monitored_services{'ftpd'} ) {
        print "\nChksrvd monitoring is enabled\n";
    }
    else {
        print "\nEnabling chksrvd monitoring\n";
        Cpanel::Chkservd::enable('ftpd');
        system('/scripts/restartsrv_chksrvd');
    }
}

sub usage {
    print "Usage: setupftpserver [options] <ftpserver>\n\n";
    print "Options:\n";
    print "  --force                    Perform conversion even if server is already configured\n";
    print "  --current                  Display the currently configured FTP server\n";
    print "\n";
    print "FTP Servers:\n";
    print "  pure-ftpd  Recommended FTP server on cPanel systems\n";
    print "  proftpd    Alternate FTP server\n";
    print "  disabled   Disable local FTP functionality\n";
    print "\n";

    exit 0;
}