diff --git a/data/supported-extensions b/data/supported-extensions index c18271a..739d623 100644 --- a/data/supported-extensions +++ b/data/supported-extensions @@ -82,6 +82,7 @@ snuffleupagus 7.0 7.1 7.2 7.3 7.4 8.0 8.1 soap 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 sockets 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 solr 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 +sourceguardian 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 spx 5.6 7.0 7.1 7.2 7.3 7.4 8.0 sqlsrv 7.0 7.1 7.2 7.3 7.4 8.0 8.1 ssh2 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 diff --git a/install-php-extensions b/install-php-extensions index 23828a1..d38fe37 100755 --- a/install-php-extensions +++ b/install-php-extensions @@ -70,11 +70,16 @@ setDistro() { # Set: # - PHP_MAJMIN_VERSION: Major-Minor version, format MMmm (example 800 for PHP 8.0.1) +# - PHP_MAJDOTMIN_VERSION: Major-Minor version, format M.m (example 8.0 for PHP 8.0.1) # - PHP_MAJMINPAT_VERSION: Major-Minor-Patch version, format MMmmpp (example 80001 for PHP 8.0.1) variables containing integers value +# - PHP_MAJDOTMINDOTPAT_VERSION: Major-Minor-Patch version, format M.m.p (example 8.0.1 for PHP 8.0.1) +# - PHP_THREADSAFE: 1 if PHP is thread-safe (TS), 0 if not thread-safe (NTS) setPHPVersionVariables() { - setPHPVersionVariables_textual="$(php-config --version)" - PHP_MAJMIN_VERSION=$(printf '%s' "$setPHPVersionVariables_textual" | awk -F. '{print $1*100+$2}') - PHP_MAJMINPAT_VERSION=$(printf '%s' "$setPHPVersionVariables_textual" | awk -F. '{print $1*10000+$2*100+$3}') + PHP_MAJDOTMINDOTPAT_VERSION="$(php-config --version)" + PHP_MAJMIN_VERSION=$(printf '%s' "$PHP_MAJDOTMINDOTPAT_VERSION" | awk -F. '{print $1*100+$2}') + PHP_MAJDOTMIN_VERSION=$(printf '%s' "$PHP_MAJDOTMINDOTPAT_VERSION" | cut -d. -f1-2) + PHP_MAJMINPAT_VERSION=$(printf '%s' "$PHP_MAJDOTMINDOTPAT_VERSION" | awk -F. '{print $1*10000+$2*100+$3}') + PHP_THREADSAFE=$(php -r 'echo ZEND_THREAD_SAFE ? 1 : 0;') } # Fix apt-get being very slow on Debian Jessie @@ -1452,6 +1457,38 @@ actuallyInstallComposer() { rm -- "$actuallyInstallComposer_installer" } +# Install SourceGuardian Loader +installSourceGuardian() { + case $(uname -m) in + i386 | i686 | x86) + installSourceGuardian_url=https://www.sourceguardian.com/loaders/download/loaders.linux-i386.tar.gz + ;; + aarch64 | arm64 | armv8) + installSourceGuardian_url=https://www.sourceguardian.com/loaders/download/loaders.linux-aarch64.tar.gz + ;; + *) + installSourceGuardian_url=https://www.sourceguardian.com/loaders/download/loaders.linux-x86_64.tar.gz + ;; + esac + printf 'Downloading SourceGuardian... ' + installSourceGuardian_dir="$(getPackageSource $installSourceGuardian_url)" + printf 'done (version: %s)\n' "$(cat "$installSourceGuardian_dir/version")" + for installSourceGuardian_phpv in $PHP_MAJDOTMINDOTPAT_VERSION $PHP_MAJDOTMIN_VERSION; do + installSourceGuardian_file="$installSourceGuardian_dir/ixed.$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installSourceGuardian_file="${installSourceGuardian_file}ts" + fi + installSourceGuardian_file="${installSourceGuardian_file}.lin" + if test -f "$installSourceGuardian_file"; then + mv "$installSourceGuardian_file" "$(getPHPExtensionsDir)/sourceguardian.so" + return + fi + done + printf 'Unable to find a SourceGuardian compatible with PHP %s or PHP %s.\nAvailable SourceGuardian versions:\n' "$PHP_MAJDOTMINDOTPAT_VERSION" "$PHP_MAJDOTMIN_VERSION" >&2 + ls -1 "$installSourceGuardian_dir" | grep -E '^ixed\..*\.lin$' | sed -E 's/^[^0-9]+([0-9]+(\.[0-9]+)*).*$/\1/' | sort | uniq >&2 + exit 1 +} + # Install a bundled PHP module given its handle # # Arguments: @@ -2185,6 +2222,10 @@ installRemoteModule() { fi fi ;; + sourceguardian) + installSourceGuardian + installRemoteModule_manuallyInstalled=1 + ;; spx) if test -z "$installRemoteModule_version"; then installRemoteModule_version=1367cbc70194d18888ec9cfe9b06c0a5b4426dff @@ -2581,7 +2622,7 @@ installRemoteModule() { # event must be loaded after sockets docker-php-ext-enable --ini-name "xx-php-ext-$installRemoteModule_module.ini" "$installRemoteModule_module" ;; - ioncube_loader) + ioncube_loader | sourceguardian) # On PHP 5.5, docker-php-ext-enable fails to detect that ionCube Loader is a Zend Extension if test $PHP_MAJMIN_VERSION -le 505; then printf 'zend_extension=%s/%s.so\n' "$(getPHPExtensionsDir)" "$installRemoteModule_module" >"$PHP_INI_DIR/conf.d/docker-php-ext-$installRemoteModule_module.ini" diff --git a/scripts/tests/sourceguardian b/scripts/tests/sourceguardian new file mode 100755 index 0000000..73e1161 --- /dev/null +++ b/scripts/tests/sourceguardian @@ -0,0 +1,30 @@ +#!/usr/bin/env php + 'PHP module', true => 'Zend extension'] as $type => $typeName) { + $extensions = get_loaded_extensions($type); + $extensionsLowerCase = array_map('strtolower', $extensions); + if (in_array('sourceguardian', $extensionsLowerCase, true)) { + fwrite(STDOUT, "The SourceGuardian {$typeName} is loaded.\n"); + } else { + fwrite(STDERR, "The SourceGuardian {$typeName} is not loaded.\nLoaded extensions are: \n- " . implode("\n- ", $extensions)); + $rc = 1; + } +} +exit($rc);