403Webshell
Server IP : 192.158.238.246  /  Your IP : 52.14.137.94
Web Server : LiteSpeed
System : Linux uniform.iwebfusion.net 4.18.0-553.27.1.lve.1.el8.x86_64 #1 SMP Wed Nov 20 15:58:00 UTC 2024 x86_64
User : jenniferflocom ( 1321)
PHP Version : 8.1.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /usr/local/lsws/add-ons/cpanel/lsws_whm_plugin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/local/lsws/add-ons/cpanel/lsws_whm_plugin/buildtimezone.sh
#!/bin/sh
set -o errexit

# /********************************************************************
# LiteSpeed timezonedb.so builder
# @Author: LiteSpeed Technologies, Inc. (https://www.litespeedtech.com)
# @Copyright: (c) 2016-2018
# @Version: 1.4.0
# *********************************************************************/

show_help()
{
    cat <<EOF

    # ***********************************************************************
    #
    # This script will auto build the source version of timezonedb.so for PHP.
    #
    # Prerequisites:
    #    1. cPanel's EA PHP environment only.
    #
    # Command:
    #    buildtimezone.sh PHPVERSION
    #
    # Example:
    #    buildtimezone.sh 7.0.1
    #
    # Input parameters:
    #
    # 1. (Required) PHPVERSION
    #    This will build timezonedb.so for the specified version of PHP.
    # 2. (Optional) CHECK
    #    Either y or n . Checks to see if latest
    #    If y then it will exit on check. It will always check but won't always
    #    continue unless CHECK=n
    # 3. (Optional) PHPPATH
    #    This will look for phpize and php-config in the specified path.
    # 4. (Optional) MODULEPATH
    #    This will look for php modules in the specified path.
    # 5. (Optional) INIPATH
    #    This will look for php.ini in the specified path.
    #
    # ***********************************************************************

EOF
exit 1
}

# Check args
if [[ $# -eq 0 ]] ; then
    echo "Invalid params!"
    show_help
fi

# Check to make sure php version is all numbers
if [[ $# -gt 0 ]] ; then
    if [[ "$1" =~ ([0-9]+\.)?[0-9]+\.[0-9]+ ]] ; then
        PHPVERSION="$1"
        MMVERSION="${PHPVERSION//.}"
        MMVERSION="${MMVERSION:0:2}"
    else
        echo "Invalid PHP Version!"
        show_help
    fi
fi

if [[ $# -gt 1 ]]; then
    if [[ "$2" = "y" ]]; then
        CHECK="y"
    fi
    if [[ "$2" = "ignorecagefs" ]]; then
        IGNORECAGEFS=true
    else
        IGNORECAGEFS=false
    fi
fi

if [[ $# -gt 2 ]]; then
    PHPPATH="$3"
else
    PHPPATH=/opt/cpanel/ea-php"$MMVERSION"/root/usr/bin
fi

if [[ $# -gt 3 ]]; then
    MODULEPATH="$4"
else
    MODULEPATH=/opt/cpanel/ea-php"$MMVERSION"/root/usr/lib64/php/modules/
fi

if [[ $# -gt 4 ]]; then
    INIPATH="$5"
else
    INIPATH=/opt/cpanel/ea-php"$MMVERSION"/root/etc/
fi

# Variables
TMPFOLDER=/usr/src/buildtimezone
SOURCETZ=timezone

# Be sure to set POSSIBLE_INI as Greatest to Least in hierarchy
POSSIBLE_INIS=('php.d/02-pecl.ini' 'php.d/local.ini' 'php.d/timezonedb.ini' 'php.ini')

# check if user is root
checkPermission()
{
    INST_USER=`id`
    INST_USER=`expr "$INST_USER" : 'uid=.*(\(.*\)) gid=.*'`
    if [[ "$INST_USER" != "root" ]]  ; then
	     checkErrs 1 "Require root permission to install this script. Abort!"
    fi
}

# Error Handling
checkErrs()
{
    if [[ "${1}" -ne "0" ]] ; then
        if [[ "$BACKUPMODULE" = true ]]; then
            cp ""$MODULEPATH"/timezonedb.so."$NOW"" ""$MODULEPATH"/timezonedb.so"
        fi
        if [[ "$BACKUPINI" = true ]]; then
            cp ""$INIPATH"/php.ini."$NOW"" ""$INIPATH"/php.ini"
        fi
        echo "**ERROR** EA4 PHP ""$PHPVERSION"" ${2}"
        exit ${1}
    fi
}

# Get timezonedb source
getTimeZone()
{
    wget -q --output-document="$SOURCETZ".tar.gz https://pecl.php.net/get/timezonedb
}

success()
{
    echo "Success!"
}

# funcIni: Handle adding/removing/checking to make sure extension is loaded via ini
# Updated: December 17
funcIni() {
  local COUNT=$(grep -Ro "^extension=.*timezonedb.so.*$" ${INIPATH} | grep -v 'grep' | wc -l)
  if [[ "${COUNT}" -gt 1 ]] || [[ ! -f "${MODULEPATH}/timezonedb.so" ]]; then
    local ENABLED_INIS=( $(grep -Ro "^extension=.*timezonedb.so.*$" ${INIPATH} |  grep -v 'grep' | cut -d : -f 1 | sed "s/\/opt\/cpanel\/ea-php${MMVERSION}\/root\/etc\///g") )
    if [[ "${ENABLED_INIS[@]}" =~ 'php.d/02-pecl.ini' ]]; then
      local IGNORED_INI='php.d/02-pecl.ini'
    elif [[ "${ENABLED_INIS[@]}" =~ 'php.d/local.ini' ]]; then
      if [[ ! "${ENABLED_INIS[@]}" =~ 'php.d/02-pecl.ini' ]]; then
        local IGNORED_INI='php.d/local.ini'
      fi
    elif [[ "${ENABLED_INIS[@]}" =~ 'php.d/timezonedb.ini' ]]; then
      if [[ ! "${ENABLED_INIS[@]}" =~ 'php.d/02-pecl.ini' ]] && [[ ! "${ENABLED_INIS[@]}" =~ 'php.d/local.ini' ]]; then
        local IGNORED_INI='php.d/timezonedb.ini'
      fi
    elif [[ "${ENABLED_INIS[@]}" =~ 'php.ini' ]]; then
      if [[ ! "${ENABLED_INIS[@]}" =~ 'php.d/02-pecl.ini' ]] && [[ ! "${ENABLED_INIS[@]}" =~ 'php.d/local.ini' ]] && [[ ! "${ENABLED_INIS[@]}" =~ 'php.d/timezonedb.ini' ]]; then
        local IGNORED_INI='php.ini'
      fi
    fi
    for ENABLED_INI in ${ENABLED_INIS[@]}; do
      if [[ "${ENABLED_INI}" == "${IGNORED_INI}" ]] && [[ -f "${MODULEPATH}/timezonedb.so" ]]; then
        continue
      fi
      sed -i "/extension=.*timezonedb.so.*/d" ${INIPATH}${ENABLED_INI}
    done
  elif [[ "${COUNT}" -eq 0 ]] && [[ -f "${MODULEPATH}/timezonedb.so" ]]; then
    for POSSIBLE_INI in ${POSSIBLE_INIS[@]}; do
      if [[ -f ${INIPATH}${POSSIBLE_INI} ]]; then
        sed -i -e '$a\' ${INIPATH}${POSSIBLE_INI}
        echo "extension=\"timezonedb.so\"" >> ${INIPATH}${POSSIBLE_INI}
        break
      fi
    done
  else
    local ONLY_INI=$(grep -Ro "^extension=.*timezonedb.so.*$" ${INIPATH} |  grep -v 'grep' | cut -d : -f 1 | sed "s/\/opt\/cpanel\/ea-php${MMVERSION}\/root\/etc\///g")
    echo "TimeZoneDB already loaded via a '${ONLY_INI}'."
  fi
}

checkTimeZone()
{
    # Lets check to see if latest or not.
    LATEST=$(curl -I https://pecl.php.net/get/timezonedb 2>/dev/null | grep 'filename=')
    LATEST=$(grep -o '[0-9]\+.[0-9]\+' <<< "$LATEST")
    echo "Latest Version: ""$LATEST"
    NOW=$(date +"%Y_%m_%d-%H_%M_%S")
    if [[ -e ""$MODULEPATH"/timezonedb.so" ]]; then
        echo "timezonedb.so already installed"
        echo "checking to see if it is enabled in ini"
        funcIni
        OLSON=$("$PHPPATH"/php -i | grep '"Olson" Timezone Database Version')
        OLSON=$(grep -o '[0-9]\+.[0-9]\+' <<< "$OLSON")
        if [[ "$LATEST" > "$OLSON" ]]; then
            echo "Installed Version: ""$OLSON"
            if [[ "$CHECK" = "y" ]]; then
                echo "Newer version found for ""$PHPVERSION"
                exit 1
            else
                if [[ -e ""$MODULEPATH"/timezonedb.so" ]]; then
                    BACKUPMODULE=true
                    cp ""$MODULEPATH"/timezonedb.so" ""$MODULEPATH"/timezonedb.so."$NOW""
                    rm -rf ""$MODULEPATH"/timezonedb.so"
                fi
                if [[ ! -e ""$INIPATH"/php.d/timezonedb.ini" ]] || [[ ! -e ""$INIPATH"/php.d/local.ini" ]] ; then
                    if grep -q -e "extension=timezonedb.so" ""$INIPATH"/php.ini" ; then
                        BACKUPINI=true
                        cp ""$INIPATH"/php.ini" ""$INIPATH"/php.ini."$NOW""
                        sed -i -e "/extension=timezonedb.so/d" ""$INIPATH"/php.ini"
                    fi
                fi
            fi
            NEEDSUPDATE=true
        else
            echo "Success! timezonedb.so already built, latest version, and enabled"
            echo "Installed Version: ""$OLSON"
            echo "EA4 PHP ""$PHPVERSION"" timezonedb "$LATEST" already installed!"
            exit 1
        fi
    else
        if [[ "$CHECK" = "y" ]]; then
            echo "Installed Version: N/A Not Installed"
            exit 1
        fi
    fi
}

cagefs()
{
    if [[ "$IGNORECAGEFS" != true ]]; then
        echo "Checking to see if CageFS is enabled."
        if [[ -e "/usr/sbin/cagefsctl" ]]; then
            if /usr/sbin/cagefsctl --cagefs-status | grep -q "Enabled"; then
                echo "CageFS found and enabled."
                echo "Updating CageFS to support the new module."
                /usr/sbin/cagefsctl --force-update &>/dev/null
                if [ $? -eq 0 ]; then
                    echo "CageFS updated successfully."
                else
                    echo "Error running 'cagefsctl --force-update'. Please try running it manually."
                fi
            else
                echo "CageFS not enabled."
                echo "Skipping."
            fi
        else
            echo "CageFS not installed."
            echo "Skipping."
        fi
    fi
}

# Check for root
echo "Checking if user is root....."
checkPermission
success

# Run fixIni to fix if multiple ini files have extension=timezonedb.so
funcIni

# Check to see if timezonedb is already installed and latest version
checkTimeZone

echo "Setup temporary directory and move to the directory....."
# Setup the temporary folder where we will store everything
if [[ -e "$TMPFOLDER" ]]; then
    echo "Temp folder already found, deleting"
    rm -rf "$TMPFOLDER"
fi
mkdir -p "$TMPFOLDER"
if [[ -e "$TMPFOLDER" ]]; then
    cd "$TMPFOLDER"
else
    checkErrs 1 ""$TMPFOLDER" not found please try running the script again."
fi
success

# Extract the files
echo "Download and extract latest timezonedb pecl from php.net....."
getTimeZone
if [[ -e "$SOURCETZ"".tar.gz" ]]; then
    tar -xzf "$SOURCETZ".tar.gz
else
    checkErrs 1 ""$SOURCETZ".tar.gz was not found. Make sure the file was actually downloaded and try the script again."
fi
success

# Figure out which folder to use
echo "Check to see if easy apache 4 php directory exsists......."
if [[ ! -e "$PHPPATH" ]]; then
    checkErrs 1 "Easy Apache 4 PHP Folder for version given not found. Please make sure Easy Apache 4 PHP version is installed."
fi
success

# Build the extension
cd timezone*/
echo "Building extension this process could take awhile (5-20min depending on machine). Please do not stop the process......."
if [[ -e ""$PHPPATH"/phpize" ]]; then
    "$PHPPATH"/phpize
    if [[ -e ""$PHPPATH"/php-config" ]]; then
        ./configure --with-php-config="$PHPPATH"/php-config 2>/dev/null
        make 2>/dev/null
        make install 2>/dev/null
    else
        checkErrs 1 "php-config was not found please make sure the corresponding Easy Apache 4 php-config for "$PHPVERSION" is in default location"
    fi
else
    checkErrs 1 "phpize was not found please make sure the corresponding Easy Apache 4 phpize for "$PHPVERSION" is in default location"
fi
success

# Enable newly build extension in php.ini
echo "Enable timezonedb.so in php.ini......"
funcIni
success

# Check and Enable CageFS
cagefs

# Remove TMPFOLDER
rm -rf "$TMPFOLDER"

# check to make sure everything is installed
# Updated: December 17
if [[ -e "$MODULEPATH/timezonedb.so" ]]; then
  for POSSIBLE_INI in ${POSSIBLE_INIS[@]}; do
    if [[ -f ${INIPATH}${POSSIBLE_INI} ]]; then
      grep -Rqo "^extension=.*timezonedb.so.*$" ${INIPATH}${POSSIBLE_INI}
      if [[ $? -eq 0 ]]; then
        FOUND=true
        echo "TimeZoneDB has successfully been built from source and is now installed and enabled by PHP."
        echo "Please restart LSWS for changes to take effect."
        if [[ "${NEEDSUPDATE}" == true ]]; then
          echo "EA4 PHP ${PHPVERSION} timezonedb has been updated from ${OLSON} to ${LATEST}!"
        else
          echo "EA4 PHP ${PHPVERSION} timezonedb ${OLSON} has been installed!"
        fi
        break
      fi
    fi
  done
  if [[ "${FOUND}" != true ]]; then
    checkErrs 1 "Extension not loaded by any ini, please run script again."
  fi
else
  checkErrs 1 "Module not located where it should be, please run script again."
fi

# remove NOW files as long as it updated correctly
# three ini
# Add if they exisit#
if [[ -e ""$MODULEPATH"/timezonedb.so."$NOW"" ]]; then
    rm -rf ""$MODULEPATH"/timezonedb.so."$NOW""
fi
if [[ -e ""$INIPATH"/php.ini."$NOW"" ]]; then
    rm -rf ""$INIPATH"/php.ini."$NOW""
fi
if [[ -e ""$INIPATH"/php.d/local.ini."$NOW"" ]]; then
    rm -rf ""$INIPATH"/php.d/local.ini."$NOW""
fi
if [[ -e ""$INIPATH"/php.d/timezonedb.ini."$NOW"" ]]; then
    rm -rf ""$INIPATH"/php.d/timezonedb.ini."$NOW""
fi

exit 0

Youez - 2016 - github.com/yon3zu
LinuXploit