#!/bin/sh # Copyright (C) 2014-2016 Franco Fichtner # Copyright (C) 2010 Scott Ullrich # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. if [ -d /usr/local/lib/php/20151012 ]; then # PHP 7 EXTENSIONSDIR="/usr/local/lib/php/20151012/" elif [ -d /usr/local/lib/php/20131226 ]; then # PHP 5.6 EXTENSIONSDIR="/usr/local/lib/php/20131226/" else echo "No supported PHP version was found." exit 1 fi # Define php modules. Do not add .so, it will # be done automatically by the script below. # Config read/write PHPMODULES="dom xml simplexml" # Downloading via HTTP/FTP (pkg mgr, etc) PHPMODULES="$PHPMODULES curl" # Internationalization PHPMODULES="$PHPMODULES gettext" # User manager PHPMODULES="$PHPMODULES ldap openssl" PHPMODULES="$PHPMODULES hash mcrypt" # Login sessions PHPMODULES="$PHPMODULES session" # Extra sanity seatbelts PHPMODULES="$PHPMODULES suhosin" # Firewall rules edit PHPMODULES="$PHPMODULES ctype" # Page compression PHPMODULES="$PHPMODULES zlib" # SQLlite & Database PHPMODULES="$PHPMODULES pdo" PHPMODULES="$PHPMODULES pdo_sqlite" PHPMODULES="$PHPMODULES sqlite3" # RADIUS PHPMODULES="$PHPMODULES radius" # pfSense extensions PHPMODULES="$PHPMODULES pfSense" # json PHPMODULES="$PHPMODULES json" # bcmath PHPMODULES="$PHPMODULES bcmath" # filter PHPMODULES="$PHPMODULES filter" # OPNsense PHPMODULES="$PHPMODULES phalcon" _EXTENSIONS_INI=$(mktemp -q /tmp/extensions_ini.XXXXXX) EXTENSIONS_INI=/usr/local/etc/php/extensions.ini touch ${EXTENSIONS_INI} cp ${EXTENSIONS_INI} ${_EXTENSIONS_INI} chmod 644 ${_EXTENSIONS_INI} # Clear the .ini file to make sure we are clean rm -f /usr/local/etc/php.ini rm -f /usr/local/lib/php.ini # Fetch the timezone from the XML and set it here. We set it later too in the running scripts TIMEZONE=Etc/UTC if [ -f /conf/config.xml ]; then TIMEZONE=`cat /conf/config.xml | egrep -E '(.*?)' | awk -F'>' '{print $2}'|awk -F'<' '{print $1}'` fi # Get a loaded module list in the stock php # Populate a dummy php.ini to avoid # the file being clobbered and the firewall # not being able to boot back up. cat >> /usr/local/lib/php.ini << EOF ; File generated via rc.php_ini_setup output_buffering = "0" expose_php = Off implicit_flush = true magic_quotes_gpc = Off max_execution_time = 900 max_input_time = 1800 max_input_vars = 5000 register_argc_argv = On register_long_arrays = Off variables_order = "GPCS" file_uploads = On upload_tmp_dir = /tmp upload_max_filesize = 200M post_max_size = 200M html_errors = Off zlib.output_compression = Off zlib.output_compression_level = 1 include_path = ".:/usr/local/etc/inc:/usr/local/www:/usr/local/opnsense/mvc:/usr/local/share/pear:/usr/local/opnsense/contrib" ignore_repeated_errors = on error_reporting = E_ALL ^ (E_NOTICE | E_DEPRECATED | E_STRICT) display_errors=on log_errors=on error_log=/tmp/PHP_errors.log extension_dir=${EXTENSIONSDIR} date.timezone="${TIMEZONE}" EOF # Loop through and generate modules to load. for EXT in ${PHPMODULES}; do sed -i '' -e "/${EXT}.so/d" ${_EXTENSIONS_INI} echo "extension=${EXT}.so" >> ${_EXTENSIONS_INI} done # Enable XDebug if installed if [ -f "${EXTENSIONSDIR}xdebug.so" ]; then sed -i '' -e "/xdebug.so/d" ${_EXTENSIONS_INI} echo "zend_extension=${EXTENSIONSDIR}xdebug.so" >> ${_EXTENSIONS_INI} cat >> /usr/local/lib/php.ini << EOF [xdebug] xdebug.profiler_enable_trigger = 1 xdebug.profiler_output_name = cachegrind.out.%t.%p EOF fi cat >> /usr/local/lib/php.ini << EOF [suhosin] suhosin.get.max_array_depth = 5000 suhosin.get.max_array_index_length = 256 suhosin.get.max_vars = 5000 suhosin.get.max_value_length = 500000 suhosin.post.max_array_depth = 5000 suhosin.post.max_array_index_length = 256 suhosin.post.max_vars = 5000 suhosin.post.max_value_length = 9000000 suhosin.request.max_array_depth = 5000 suhosin.request.max_array_index_length = 256 suhosin.request.max_vars = 5000 suhosin.request.max_value_length = 9000000 suhosin.memory_limit = 512435456 suhosin.session.cryptdocroot=Off EOF # Copy php.ini file to etc/ too (cli) cp /usr/local/lib/php.ini /usr/local/etc/php.ini mv ${_EXTENSIONS_INI} ${EXTENSIONS_INI}