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: //proc/self/root/proc/self/root/scripts.20110531.215904.25158/sysup
#!/usr/bin/perl
# cpanel - sysup                                  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::SafeFile           ();
use Cpanel::OSSys              ();
use Cpanel::NSCD               ();
use Cpanel::RpmUtils           ();
use Cpanel::Sys::OS            ();
use Cpanel::Config::LoadCpConf ();
use Cpanel::SysPkgs            ();
use Cpanel::Logger             ();
use Cpanel::HttpRequest        ();
use Cpanel::SafeRun::Simple    ();
use Cpanel::SafeRun::Errors    ();

my $logger = Cpanel::Logger->new();

require '/scripts/pkgmap.pl';
require '/scripts/installport.pl';

my ( $system, $release, $machine ) = ( Cpanel::OSSys::uname() )[ 0, 2, 4 ];

my %CPCONF     = Cpanel::Config::LoadCpConf::loadcpconf();
my $httpClient = Cpanel::HttpRequest->new();

$| = 1;

rhelcheck();

my %UPCONF;
if ( -e '/etc/cpupdate.conf' ) {
    if ( open my $cpupdate_fh, '<', '/etc/cpupdate.conf' ) {
        while (<$cpupdate_fh>) {
            chomp;
            my ( $name, $value ) = split( /=/, $_ );
            next if ( !defined $name || $name eq '' );
            if ( !defined $value ) { $value eq ''; }
            $UPCONF{$name} = $value;
        }
        close $cpupdate_fh;
    }
    else {
        die "Unable to read /etc/cpupdate.conf: $!";
    }
}

if ( exists $UPCONF{'SYSUP'} && $UPCONF{'SYSUP'} eq 'never' ) {
    print "System updates excluded per Update Preferences!\n";
    exit;
}

if ( -e '/etc/debian_version' ) {
    $ENV{'DEBIAN_FRONTEND'}  = 'noninteractive';
    $ENV{'DEBCONF_FRONTEND'} = 'noninteractive';
    checkrpmlist();
    exit;
}

my $isgentoo;
if ( -e '/etc/gentoo-release' ) {
    $isgentoo = 1;
    checkrpmlist();
    exit;
}

my ( $version, $ises );

## TODO: pending non-explosion of chunk removed for case 27814. $tdir is assigned, but no longer
##   used.
my $tdir;

if ( $system !~ m/freebsd/i ) {
    if ( -e '/etc/redhat-release' ) {
        ( $version, $ises ) = Cpanel::Sys::OS::getversionfromfile('/etc/redhat-release');
        if ( $ises == 1 ) {
            system('/scripts/checkup2date');
        }
    }

    if ( -e '/etc/trustix-release' ) {
        system('/usr/sbin/groupadd nobody 2>/dev/null');
        Cpanel::NSCD::clear_cache('group');

        ( $version, $ises ) = Cpanel::Sys::OS::getversionfromfile('/etc/trustix-release');

        if ($ises) {
            system('/scripts/checkswup');
        }
        if ( !-e '/usr/lib/libssl.so.2' ) {
            symlink( 'libssl.so', '/usr/lib/libssl.so.2' );
        }
        if ( !-e '/usr/lib/crypto.so.2' ) {
            symlink( 'libcrypto.so', '/usr/lib/libcrypto.so.2' );
        }

        if ( $version eq '2.0' ) {
            $tdir = '/trustix2.0/';
        }
        elsif ( ( $version eq '2' || $version eq '2.1' )
            && $ises ) {
            $tdir = '/trustix2/';
        }
        elsif ( $version eq '2.2' || '2.3' ) {
            $tdir = '/trustix2/';
        }
        else {
            die "Trustix $version is not supported\n";
        }
    }
    elsif ( -e '/etc/caos-release' ) {
        ( $version, $ises ) = Cpanel::Sys::OS::getversionfromfile('/etc/caos-release');

        open( YUM, '>', '/var/cpanel/useyum' );
        close(YUM);

        if ( $version eq '2.0' ) {
            $tdir = '/caos2.0/';
        }
        else {
            die "cAos $version is not supported\n";
        }
    }
    elsif ( -e '/etc/SuSE-release' ) {
        ( $version, $ises ) = Cpanel::Sys::OS::getversionfromfile('/etc/SuSE-release');
        if ( $version eq '8.2' ) {
            $tdir = '/suse8.2/';
        }
        elsif ( $version eq '9.0' ) {
            $tdir = '/suse9.0/';
        }
        else {
            die "SuSE $version is not supported\n";
        }
    }
    elsif ( -e '/etc/fedora-release' ) {
        $tdir = $machine =~ m/64/ ? '/fedora2-64/' : '/fedora1/';
    }
    elsif ( -e '/etc/mandrake-release' ) {
        system('rpm -e postfix 2>/dev/null');
        system('rpm -e --nodeps libmysql10-3.23.47-5mdk 2>/dev/null');
        system('rpm -e --nodeps MySQL-3.23.47-5mdk 2>/dev/null');
        system('rpm -e --nodeps MySQL-client-3.23.47-5mdk 2>/dev/null');
        system('/usr/sbin/groupadd nobody 2>/dev/null');
        Cpanel::NSCD::clear_cache('group');

        ( $version, $ises ) = Cpanel::Sys::OS::getversionfromfile('/etc/redhat-release');

        if ( $version < 8 ) {
            $tdir = '/generic/';
        }
        elsif ( $version eq '8.1' ) {
            $tdir = '/mdk8.1/';
        }
        elsif ( $version eq '8.2' ) {
            $tdir = '/mdk8.2/';
        }
        elsif ( $version =~ /^9/ ) {
            $tdir = '/mdk9.0/';
        }
        else {
            die "Mandrake $version is not supported\n";
        }
    }
    else {
        if ( ( $ises && int($version) >= 3 ) || $version eq '9' ) {
            if ( $machine =~ /64/ ) {
                $tdir = '/9-64/';
            }
            else {
                $tdir = '/9/';
            }
            if ( -e '/usr/lib/libcrypto.so.0.9.6' ) {
                symlink( 'libcrypto.so.0.9.6', '/usr/lib/libcrypto.so.0' );
            }
            if ( -e '/usr/lib/libssl.so.0.9.6' ) {
                symlink( 'libssl.so.0.9.6', '/usr/lib/libssl.so.0' );
            }
            if ( -e '/lib/libcrypto.so.0.9.6b' ) {
                symlink( 'libcrypto.so.0.9.6b', '/lib/libcrypto.so.0' );
            }
            if ( -e '/lib/libssl.so.0.9.6b' ) {
                symlink( 'libssl.so.0.9.6b', '/lib/libssl.so.0' );
            }
        }
        elsif ( $version eq '7.0' ) {
            $tdir = '/7.0/';
            if ( -e '/usr/lib/libcrypto.so.0.9.6' ) {
                symlink( 'libcrypto.so.0.9.6', '/usr/lib/libcrypto.so.1' );
                symlink( 'libcrypto.so.0.9.6', '/usr/lib/libcrypto.so.0' );
            }
            if ( -e '/usr/lib/libssl.so.0.9.6' ) {
                symlink( 'libssl.so.0.9.6', '/usr/lib/libssl.so.1' );
                symlink( 'libssl.so.0.9.6', '/usr/lib/libssl.so.0' );
            }
        }
        elsif ( $version eq '6.2' ) {
            $tdir = '/6.2/';
        }
        elsif ( $version eq '7.1' ) {
            $tdir = '/7.1/';
        }
        elsif ( $version eq '7.2' ) {
            $tdir = '/7.2/';
        }
        elsif ( ( $ises && int($version) < 3 ) || $version eq '7.3' ) {
            $tdir = '/7.3/';
        }
        elsif ( $version eq '8.0' ) {
            $tdir = '/8.0/';
        }
        else {
            $tdir = '/generic/';
        }
    }
}

# FreeBSD
else {

    # Check for broken gdbm
    if ( !-e '/usr/include/gdbm.h' && !-e '/usr/local/include/gdbm.h' ) {
        system '/scripts/ensurepkg', '--force', 'gdbm';
    }

    # Add autoconf autoheader links
    if ( ( !-e '/usr/local/bin/autoconf' && !-e '/usr/bin/autoconf' ) || ( !-e '/usr/local/bin/autoheader' && !-e '/usr/bin/autoheader' ) ) {
        my @auto_stuff = qw( autoconf autoheader );
        my @bins;
        if ( opendir my $local_bin_dh, '/usr/local/bin' ) {
            @bins = readdir $local_bin_dh;
            closedir $local_bin_dh;
        }
        else {
            warn "Unable to read /usr/local/bin: $!";
        }
        foreach my $binary (@auto_stuff) {
            my $created_link;
          LINKLOOP:
            foreach my $local_bin ( sort @bins ) {
                next if $local_bin !~ m/^$binary\d+$/;
                if ( symlink $local_bin, '/usr/local/bin/' . $binary ) {
                    $created_link = 1;
                    last LINKLOOP;
                }
            }
            if ( !$created_link ) {
                warn "Unable to locate suitable binary for $binary\n";
            }
        }
    }

    #readd bind9
    my @SYSPKGS = qw(
      bash
      exim
      gettext
      gettext-devel
      i18ntools
      imap-uw
      jpeg
      libxml2
      lsof
      ncftp
      openssh
      png
      portupgrade
      proftpd
      python
      quota
      rdate
      sysstat
      urwfonts
      wget
      xpm
    );

    #do not install which under freebsd as it will install the wrong port
    $release =~ /(\d+\.\d+)/;
    $release = $1;

    if    ( $release =~ /^5/ ) { push @SYSPKGS, 'compat4x'; }
    elsif ( $release =~ /^6/ ) { push @SYSPKGS, 'compat4x', 'compat5x'; }
    elsif ( $release =~ /^7/ ) { push @SYSPKGS, 'compat4x', 'compat5x', 'compat6x'; }
    elsif ( $release =~ /^8/ ) { push @SYSPKGS, 'compat4x', 'compat5x', 'compat6x', 'compat7x'; }
 
    foreach my $syspkg (@SYSPKGS) {
        next if ( $syspkg =~ /pure-ftpd/i
            || $syspkg =~ /proftpd/i
            || $syspkg =~ /chkservd/i
            || $syspkg =~ /^mysql/i );
        if ( $syspkg eq 'portupgrade' ) {

            #keep portupgrade current
            system( '/scripts/installpkg', '--keepnew', $syspkg );
        }
        else {
            system( '/scripts/ensurepkg', $syspkg );
        }
    }

    mkdir( '/root/.cpbsdpkgs', 0700 );
    if ( !-d '/root/.cpbsdpkgs' ) {
        die 'could not create /root/.cpbsdpkgs';
    }

    my %PKG;
    print 'Creating package version list....(sysup)..';
    my @PKGVERSIONS = split( /\n/, Cpanel::SafeRun::Simple::saferun('/usr/sbin/pkg_version') );
    print "Done\n";

    open( PKGVERSION, '>', '/root/.cpbsdpkgs/pkg_version' );
    foreach my $pkgvers (@PKGVERSIONS) {
        print PKGVERSION $pkgvers . "\n";
    }
    close(PKGVERSION);

    foreach (@PKGVERSIONS) {
        if (/^(\S+)[\s\t]*(\S+)/) {
            my $pkgname = $1;
            my $pkgver  = $2;
            $pkgname =~ s/-${machine}$//g;
            next
              if ( !defined $pkgname
                || $pkgname       eq ''
                || $PKG{$pkgname} eq '='
                || $PKG{$pkgname} eq '>'
                || $pkgname =~ /pure-ftpd/i
                || $pkgname =~ /proftpd/i
                || $pkgname =~ /chkservd/i
                || $pkgname =~ /courier/
                || $pkgname =~ /^mysql/i
                || $pkgname =~ /^p5/
                || $pkgname eq 'lynx'
                || $pkgname eq 'linux_base'
                || $pkgname eq 'expect'
                || $pkgname eq 'apache'
                || $pkgname eq 'httpd'
                || $pkgname eq 'mod_php'
                || $pkgname eq 'mod_php3'
                || $pkgname eq 'mod_php4' );
            $PKG{$pkgname} = $pkgver;
        }
    }

    undef @PKGVERSIONS;

    foreach my $pkg ( sort keys %PKG ) {
        next if ( $pkg =~ /pure-ftpd/i
            || $pkg =~ /proftpd/i
            || $pkg =~ /courier/
            || $pkg =~ /chkservd/i
            || $pkg =~ /courier/i
            || $pkg =~ /^mysql/i );

        if ( $PKG{$pkg} eq '<' ) {
            if ( $UPCONF{'BSDPORTS'} eq 'yes' || grep { $_ eq $pkg } @SYSPKGS ) {
                print "$pkg is out of date\n";
                installport($pkg);
                waitpid( -1, 1 );
            }
        }
        elsif ( $PKG{$pkg} eq '=' ) {
            print "$pkg is up to date\n";
        }
        elsif ( $PKG{$pkg} eq '>' ) {
            print "$pkg is newer then current (you are living dangerously)\n";
        }
        else {
            print "$pkg has an unknown version\n";
        }
    }

    # Handle any perl update that happened above
    system '/scripts/after_perl_upgrade', '--test';

    if ( -f '/usr/sbin/ndc' ) {
        rename( '/usr/sbin/ndc', '/usr/sbin/ndc.old' );
        symlink( 'rndc', '/usr/sbin/ndc' );
    }
    my $hf = 0;
    open( RCC, '/etc/rc.conf' );
    while (<RCC>) {
        if (/named_flags/) { $hf = 1; }
    }
    close(RCC);
    if ( !$hf ) {
        my $sl = Cpanel::SafeFile::safeopen( \*RCC, '>>', '/etc/rc.conf' );
        if ( !$sl ) {
            $logger->warn("Could not write to /etc/rc.conf");
            exit;
        }
        print RCC qq{named_flags="-u bind -c /etc/namedb/named.conf"\n};
        Cpanel::SafeFile::safeclose( \*RCC, $sl );
    }

    system '/scripts/fixrndc';

    exit;    #end freebsd
}

## case 27814: removed chunk of code which checked 'httpupdate.cpanel.net/pub/sysup/$tdir/.updates'
##   to ensure updated versions of certain packages.

if ( -e '/usr/lib/libmysqlclient.so.10' ) {
    system('(cd /usr/lib;ln -s libmysqlclient.so.10 libmysqlclient.so.9) >/dev/null 2>&1');
}
if ( -e '/usr/lib/libpq.so.3' && !-e '/usr/lib/libpq.so.2' ) {
    system('(cd /usr/lib;ln -s libpq.so.3 libpq.so.2) >/dev/null 2>&1');
}

#system('rpm -e logcheck >/dev/null 2>&1');
checkrpmlist();
if ( -e '/usr/lib/libmysqlclient.so.9' && !-e '/usr/lib/libmysqlclient.so.6' ) {
    system('(cd /usr/lib;ln -s libmysqlclient.so.9 libmysqlclient.so.6) >/dev/null 2>&1');
}

system('(cd /usr/sbin;ln -s rndc ndc) >/dev/null 2>&1');

sub checkrpmlist {
    my @RPMLIST;
    if ($isgentoo) {
        @RPMLIST = qw(
          bind
          bind-tools
          bind-libs
          expect
          freetype
          gd
          gd
          gentoolkit
          gnupg
          libxml
          libxml-devel
          which
          lsof
          sysstat
          libxml2
          libxml2-devel
          gettext
          gettext-devel
          gamin
          gamin-devel
          lynx
          mirrorselect
          openssh
          openssl
          portage
          quota
          rcs
          sharutils
          stunnel
          tcp_wrappers-devel
          traceroute
          ucd-snmp
          urw-fonts
          wget
          xfree
        );
    }
    else {
        @RPMLIST = qw(
          bind
          bind-devel
          bind-libs
          bind-utils
          bzip2
          crontabs
          expect
          freetype
          freetype-devel
          gcc
          gcc-c++
          gd
          gd-devel
          gd-progs
          gd-utils
          gettext
          gettext-devel
          glibc-devel
          gnupg
          libgcc
          libgd1
          libgd1-devel
          libmysqlclient10-dev
          libxml
          libxml-devel
          libstdc++
          libstdc++-devel
          which
          lsof
          sysstat
          libxml2
          libxml2-devel
          gamin
          gamin-devel
          lynx
          openssh
          openssh-clients
          openssh-server
          openssl
          openssl-devel
          openssl-misc
          perl-CPAN
          sharutils
          tcp_wrappers-devel
          ucd-snmp
          ucd-snmp-devel
          ucd-snmp-utils
          wget
          urw-fonts
          XFree86-devel
          XFree86-libs
          libXpm-devel
          libX11-devel
          vixie-cron
        );
    }

    if ( $machine =~ /64/ ) {
        push( @RPMLIST, 'libstdc++-devel.x86_64', 'glibc-devel.x86_64' );
    }
    if ( !has_working_syslog() ) {
        push @RPMLIST, 'sysklogd';
    }

    # Just removed mysql from above
    #@RPMLIST = grep(!/^mysql/i,@RPMLIST);

    my $syspkgobj = Cpanel::SysPkgs->new();
    if ( !$syspkgobj ) { die print "Could not create SysPkgs object\n"; }
    $syspkgobj->install( 'pkglist' => \@RPMLIST );
}

sub rhelcheck {
    my ( $rversion, $rises );
    if ( -e '/etc/redhat-release' ) {
        ( $rversion, $rises ) = Cpanel::Sys::OS::getversionfromfile('/etc/redhat-release');
    }
    if ( -e '/etc/trustix-release' ) {
        my ( $tversion, $tises ) = Cpanel::Sys::OS::getversionfromfile('/etc/trustix-release');
        open( SWUP, '>', '/var/cpanel/useswup' );
        close(SWUP);
        return;
    }
    if ( -e '/etc/SuSE-release' ) {
        my ( $tversion, $tises ) = Cpanel::Sys::OS::getversionfromfile('/etc/SuSE-release');

        # Rug is only used for SLES
        if ( $tises == 1 ) {
            open( RUG, '>', '/var/cpanel/userug' );
            close(RUG);
        }
        return;
    }
    if ( -e '/etc/gentoo-release' ) {
        open( EMERGE, '>', '/var/cpanel/useemerge' );
        close(EMERGE);
        return;
    }
    if ( $rises == 1 ) {
        if (   !-e '/var/cpanel/useup2date'
            && !-e '/var/cpanel/useapt'
            && !-e '/var/cpanel/useyum'
            && !-e '/var/cpanel/useswup' ) {
            if ( -e '/usr/bin/apt-get' ) {
                open( APT, '>', '/var/cpanel/useapt' );
                close(APT);
            }
            else {
                open( UP2DATE, '>', '/var/cpanel/useup2date' );
                close(UP2DATE);
            }
        }
    }
    elsif ( $rises == 2 || $rises == 3 ) {
        open( YUM, '>', '/var/cpanel/useyum' );
        close(YUM);
    }
}

sub gettruename {
    my ($name) = @_;
    $name =~ s/-\d+[^-]+$//g;
    return ($name);
}

sub has_working_syslog {
    my $output = Cpanel::SafeRun::Simple::saferun('/scripts/syslog_check');
    if ( $output =~ m/syslog_check: passed/m ) {
        return 1;
    }
    return 0;
}

sub find_shared_object {
    my ($target) = @_;
    foreach my $path ( '/usr/lib', '/lib', '/usr/local/lib', '/opt/lib' ) {
        if ( -e $path . '/' . $target ) {
            return $path . '/' . $target;
        }
    }
}