#!/bin/sh
eval 'if [ -x /usr/local/cpanel/3rdparty/bin/perl ]; then exec /usr/local/cpanel/3rdparty/bin/perl -x -- $0 ${1+"$@"}; else exec /usr/bin/perl -x $0 ${1+"$@"}; fi;'
  if 0;

#!/usr/bin/perl

use lib '/usr/local/cpanel';
use Cpanel::FileUtils;
use Cpanel::SafeRun;
use POSIX;

my $installed = 0;

my @prefixes = ( '/usr/local', '/usr/local/php4' );
if (@ARGV) {
    @prefixes = @ARGV;
}

foreach my $php_prefix (@prefixes) {
    $php_prefix =~ s/\/$//;
    my $php_ini = $php_prefix . '/lib/php.ini';
    if ( $php_prefix eq '/usr/local/cpanel/3rdparty' || $php_prefix eq '/var/cpanel/3rdparty' ) {
        $php_ini = '/usr/local/cpanel/3rdparty/etc/php.ini';
    }
    next unless ( -e $php_ini && -e $php_prefix . '/bin/php' && -e $php_prefix . '/bin/phpize' && -e $php_prefix . '/bin/php-config' );
    local %ENV = ();

    # create install directory
    if ( !-d '/usr/local/IonCube' ) {
        print "Creating install directory at /usr/local/IonCube\n";
        mkdir '/usr/local/IonCube' || die "Could not mkdir /usr/local/IonCube:  $!";
        chmod 0755, '/usr/local/IonCube' || die "Could not chmod /usr/local/IonCube: $!";
    }

    # determine version to use
    print "Determining PHP version\n";
    my @cmd;
    if ( -e '/usr/local/cpanel/scripts/php.ini' ) {
        @cmd = ( $php_prefix . '/bin/php', '-c', '/usr/local/cpanel/scripts/php.ini', '-v' );
    }
    else {
        @cmd = ( $php_prefix . '/bin/php', '-v' );
    }
    my $phpout = Cpanel::SafeRun::saferunallerrors(@cmd);
    my $php_version;
    if ( $phpout =~ m/^PHP\s+(\d\.\d)\.\d+\S*\s+\(([^\)]+)\)/m ) {
        $php_version = $1;
    }
    else {
        print "Could not determine PHP version from output:\n";
        print $phpout;
        next;
    }

    my $systype = ( POSIX::uname() )[0];
    $systype = ( $systype =~ /FreeBSD/i ) ? 'fre' : 'lin';

    # install binaries
    print "Installing IonCube Loader binaries\n";
    my $ion_file = 'ioncube_loader_' . $systype . '_' . $php_version . '.so';
    die "$ion_file missing in IonCube Loader tarball" unless ( -e $ion_file );
    Cpanel::FileUtils::safecopy( $ion_file, '/usr/local/IonCube' ) || die "Could not move ${ion_file} to /usr/local/IonCube: $!";
    chmod 0644, '/usr/loal/IonCube/' . $ion_file || die "Could not chmod /usr/local/IonCube/${ion_file}: $!";

    print "Activating IonCube Loader extension in ${php_ini}\n";
    my ( $ok, $res ) = activate_ioncube( $php_prefix, $php_ini, $php_version, $systype );
    $installed = 1 if $ok;
    print $res . "\n";
}

if ($installed) {
    exit 0;
}
else {
    exit 1;
}

sub activate_ioncube {
    my $prefix      = shift;
    my $php_ini     = shift;
    my $php_version = shift;
    my $systype     = shift;
    my $phpconfig   = $prefix . '/bin/php-config';

    my $ext_dir = Cpanel::SafeRun::saferun( $phpconfig, '--extension-dir' );
    chomp $ext_dir;

    # IonCube needs to be loaded before any other Zend Extensions.  We'll anchor it to the extension_dir line to put it above the [Zend] section

    Cpanel::FileUtils::regex_rep_file( $php_ini, { qr{^\s*zend_extension(_ts)?\s*=\s*"?\S+\/ioncube_loader_(fre|lin)_\d\.\d(_ts)?.so"?\s*$}is => q{}, }, {}, );
    my $success = Cpanel::FileUtils::regex_rep_file(
        $php_ini,
        {
            qr{^\s*;?\s*extension_dir\s*=.*$}i =>
              qq{extension_dir = "$ext_dir"\nzend_extension="/usr/local/IonCube/ioncube_loader_${systype}_${php_version}.so"},
        },
        {},
    );

    return ( 1, 'IonCube Loader extension activated' ) if $success;
    return ( 0, 'Failed to activate IonCube Loader in php.ini' );
}
