diff --git a/directadmin-1.62.4.tar.gz b/directadmin-1.62.4.tar.gz index 14b8386..e9343ba 100644 Binary files a/directadmin-1.62.4.tar.gz and b/directadmin-1.62.4.tar.gz differ diff --git a/directadmin-1.62.4/dataskq b/directadmin-1.62.4/dataskq index d20ba5a..b015ef1 100644 Binary files a/directadmin-1.62.4/dataskq and b/directadmin-1.62.4/dataskq differ diff --git a/directadmin-1.62.4/directadmin b/directadmin-1.62.4/directadmin index 8e731eb..cec47af 100644 Binary files a/directadmin-1.62.4/directadmin and b/directadmin-1.62.4/directadmin differ diff --git a/directadmin-1.62.4/scripts/awstats.sh b/directadmin-1.62.4/scripts/awstats.sh index 7442de6..9375555 100644 --- a/directadmin-1.62.4/scripts/awstats.sh +++ b/directadmin-1.62.4/scripts/awstats.sh @@ -11,7 +11,7 @@ AWSTATS_VER=7.7 DA_SCRIPTS=/usr/local/directadmin/scripts DA_CONF=/usr/local/directadmin/conf/directadmin.conf DA_TEMPLATE_CONF=/usr/local/directadmin/data/templates/directadmin.conf -HTTPPATH=http://files.directadmin.com/services/all/awstats +HTTPPATH=http://da-mirror.wpcloud.vn/services/all/awstats TARFILE=${DA_SCRIPTS}/packages/awstats-${AWSTATS_VER}.tar.gz USR=/usr/local REALPATH=${USR}/awstats-${AWSTATS_VER} @@ -59,7 +59,7 @@ chmod -R 755 ${REALPATH} #patch the url bug: this is ni the 7.3 tar.gz file, so no need to patch. Creates a patch rej file. #echo "Patching awstats_buildstaticpages.pl to fix url bug..."; #cd ${REALPATH}/tools -#wget -O awstats_url.patch http://files.directadmin.com/services/custombuild/patches/awstats_url.patch +#wget -O awstats_url.patch http://da-mirror.wpcloud.vn/services/custombuild/patches/awstats_url.patch #if [ ! -s awstats_url.patch ]; then # echo "Error with awstats_url.patch. File is missing or empty"; #else diff --git a/directadmin-1.62.4/scripts/majordomo.sh b/directadmin-1.62.4/scripts/majordomo.sh index e06fba5..b8cc4dd 100644 --- a/directadmin-1.62.4/scripts/majordomo.sh +++ b/directadmin-1.62.4/scripts/majordomo.sh @@ -3,7 +3,7 @@ OS=`uname` -SERVER=http://files.directadmin.com/services/all/majordomo +SERVER=http://da-mirror.wpcloud.vn/services/all/majordomo ADDPATCHES=1 SOURCEPATH="/usr/local/directadmin/scripts/packages/majordomo-1.94.5" diff --git a/directadmin-1.62.4/scripts/ncftp.sh b/directadmin-1.62.4/scripts/ncftp.sh index 47168e7..99e93a0 100644 --- a/directadmin-1.62.4/scripts/ncftp.sh +++ b/directadmin-1.62.4/scripts/ncftp.sh @@ -4,7 +4,7 @@ CWD=`pwd` NAME=ncftp VERSION=3.2.6 -PRIMARY=http://files.directadmin.com/services +PRIMARY=http://da-mirror.wpcloud.vn/services SECONDARY=http://files3.directadmin.com/services SAVE=/usr/local/directadmin/scripts/packages FILE=${NAME}-${VERSION}-src.tar.gz diff --git a/directadmin-1.62.4/scripts/sysbk.sh b/directadmin-1.62.4/scripts/sysbk.sh index 0fecda8..5c5a385 100644 --- a/directadmin-1.62.4/scripts/sysbk.sh +++ b/directadmin-1.62.4/scripts/sysbk.sh @@ -3,7 +3,7 @@ CWD=`pwd` NAME=sysbk -PRIMARY=http://files.directadmin.com/services +PRIMARY=http://da-mirror.wpcloud.vn/services SECONDARY=http://files3.directadmin.com/services SAVE=/usr/local/directadmin/scripts/packages FILE=${NAME}.tar.gz diff --git a/install.sh b/install.sh index 8225aaa..1bb74f5 100644 --- a/install.sh +++ b/install.sh @@ -69,7 +69,7 @@ if [ "$1" = "beta" ] || [ "$2" = "beta" ]; then DOWNLOAD_BETA=true fi -FTP_HOST=files.directadmin.com +FTP_HOST=da-mirror.wpcloud.vn WGET_OPTION="--no-dns-cache"; COUNT=`$WGET_PATH --help | grep -c no-check-certificate` diff --git a/services/custombuild/custombuild/custombuild/build b/services/custombuild/custombuild.bk/custombuild/build similarity index 99% rename from services/custombuild/custombuild/custombuild/build rename to services/custombuild/custombuild.bk/custombuild/build index 82a130b..0dae782 100644 --- a/services/custombuild/custombuild/custombuild/build +++ b/services/custombuild/custombuild.bk/custombuild/build @@ -477,7 +477,7 @@ if [ "${USE_ALL_SETTINGS}" = "1" ]; then #OUTPUT as harden-symlinks-patch HARDEN_SYMLINKS_PATCH_SET="${YESNO_SET}" HARDEN_SYMLINKS_PATCH_DEF="yes" - HARDEN_SYMLINKS_PATCH_DESC="Patches apache to include hardened symlinks patch. https://files.directadmin.com/services/custombuild/harden-symlinks-2.4.patch." + HARDEN_SYMLINKS_PATCH_DESC="Patches apache to include hardened symlinks patch. https://da-mirror.wpcloud.vn/services/custombuild/harden-symlinks-2.4.patch." USE_HOSTNAME_FOR_ALIAS_SET="${YESNO_SET} auto" USE_HOSTNAME_FOR_ALIAS_DEF="no" @@ -670,11 +670,11 @@ if [ "${USE_ALL_SETTINGS}" = "1" ]; then CLEAN_OLD_WEBAPPS_DEF="yes" CLEAN_OLD_WEBAPPS_DESC="Removes old WEB application folders from /var/www/html. Takes effect when any WEB application is installed/updated." - DOWNLOADSERVER_SET="files.directadmin.com" + DOWNLOADSERVER_SET="da-mirror.wpcloud.vn" if [ -s ${WORKDIR}/servers.txt ]; then - DOWNLOADSERVER_SET="files.directadmin.com `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`" + DOWNLOADSERVER_SET="da-mirror.wpcloud.vn `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`" fi - DOWNLOADSERVER_DEF="files.directadmin.com" + DOWNLOADSERVER_DEF="da-mirror.wpcloud.vn" DOWNLOADSERVER_DESC="Sets which download server to use to download files needed by the CustomBuild script. Any other server than ${DOWNLOADSERVER_DEF} may take 24 hours for latest files to be synced, however they may have better speeds than ${DOWNLOADSERVER_DEF}." UNOFFICIAL_MIRRORS_SET="${YESNO_SET}" @@ -1610,11 +1610,11 @@ DOWNLOADSERVER_SCHEME=http if echo "${DOWNLOADSERVERS_HTTPS_LIST}" | grep -m1 -q " ${DOWNLOADSERVER_OPT} "; then DOWNLOADSERVER_SCHEME=https fi -WEBPATH=http://files.directadmin.com/services/custombuild -WEBPATH_SERVICES=http://files.directadmin.com/services -WEBPATH_BACKUP_IP=files.directadmin.com -WEBPATH_BACKUP=http://files.directadmin.com/services/custombuild -WEBPATH_SERVICES_BACKUP=http://files.directadmin.com/services +WEBPATH=http://da-mirror.wpcloud.vn/services/custombuild +WEBPATH_SERVICES=http://da-mirror.wpcloud.vn/services +WEBPATH_BACKUP_IP=da-mirror.wpcloud.vn +WEBPATH_BACKUP=http://da-mirror.wpcloud.vn/services/custombuild +WEBPATH_SERVICES_BACKUP=http://da-mirror.wpcloud.vn/services WEBPATH_CL=https://repo.cloudlinux.com/cloudlinux/sources/da WEBPATH_CWAF=https://waf.comodo.com WEBPATH_LITESPEED=https://www.litespeedtech.com/packages @@ -2535,9 +2535,9 @@ getFile() { echo "" echo "${boldon}Too many failed attempts with ${DOWNLOADSERVER_OPT}. Will try a different server.${boldoff}" - SET_DL=files.directadmin.com + SET_DL=da-mirror.wpcloud.vn case "${DOWNLOADSERVER_OPT}" in - files.directadmin.com) SET_DL=${WEBPATH_BACKUP_IP} + da-mirror.wpcloud.vn) SET_DL=${WEBPATH_BACKUP_IP} ;; files1.directadmin.com) SET_DL=${WEBPATH_BACKUP_IP} ;; @@ -2562,8 +2562,8 @@ getFile() { else DOWNLOADSERVER_SCHEME=http fi - WEBPATH=http://files.directadmin.com/services/custombuild - WEBPATH_SERVICES=http://files.directadmin.com/services + WEBPATH=http://da-mirror.wpcloud.vn/services/custombuild + WEBPATH_SERVICES=http://da-mirror.wpcloud.vn/services sleep 2 fi @@ -25366,7 +25366,7 @@ set_fastest() { getFile servers.txt servers if [ "${UNOFFICIAL_MIRRORS_OPT}" = "yes" ]; then - DOWNLOADSERVER_SET="files.directadmin.com `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`" + DOWNLOADSERVER_SET="da-mirror.wpcloud.vn `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`" else DOWNLOADSERVER_SET="${DOWNLOADSERVERS_OFFICIAL_LIST}" fi diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/cert_config.txt b/services/custombuild/custombuild.bk/custombuild/configure/ap2/cert_config.txt similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/cert_config.txt rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/cert_config.txt diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/directadmin-vhosts.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/directadmin-vhosts.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/directadmin-vhosts.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/directadmin-vhosts.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-alias.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-alias.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-alias.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-alias.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-autoindex.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-autoindex.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-autoindex.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-autoindex.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-cloudflare.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-cloudflare.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-cloudflare.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-cloudflare.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-dav.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-dav.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-dav.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-dav.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-default.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-default.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-default.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-default.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-deflate.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-deflate.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-deflate.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-deflate.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-new.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-directories-new.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-new.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-directories-new.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-old.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-directories-old.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-old.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-directories-old.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-directoryindex.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-directoryindex.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-directoryindex.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-directoryindex.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-fcgid.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-fcgid.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-fcgid.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-fcgid.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-info.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-info.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-info.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-info.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-languages.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-languages.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-languages.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-languages.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-manual.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-manual.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-manual.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-manual.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-modsecurity.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-modsecurity.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-modsecurity.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-modsecurity.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-mpm.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-mpm.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-mpm.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-mpm.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-multilang-errordoc.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-multilang-errordoc.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-multilang-errordoc.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-multilang-errordoc.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.old.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.old.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.old.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.old.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-ssl.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-ssl.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-userdir.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-userdir.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-userdir.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-userdir.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-vhosts.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-vhosts.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/extra/httpd-vhosts.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/extra/httpd-vhosts.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/httpd.conf b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/httpd.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/httpd.conf rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/httpd.conf diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/magic b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/magic similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/magic rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/magic diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/conf/mime.types b/services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/mime.types similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/conf/mime.types rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/conf/mime.types diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.apache b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.apache similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.apache rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.apache diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.modsecurity b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.modsecurity similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.modsecurity rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.modsecurity diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php53 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php53 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php53 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php53 diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php54 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php54 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php54 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php54 diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php55 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php55 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php55 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php55 diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php56 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php56 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php56 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php56 diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php70 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php70 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php70 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php70 diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php71 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php71 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php71 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php71 diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php72 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php72 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php72 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php72 diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php73 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php73 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php73 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php73 diff --git a/services/custombuild/custombuild/custombuild/configure/ap2/configure.php74 b/services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php74 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/ap2/configure.php74 rename to services/custombuild/custombuild.bk/custombuild/configure/ap2/configure.php74 diff --git a/services/custombuild/custombuild/custombuild/configure/clamav/configure.clamav b/services/custombuild/custombuild.bk/custombuild/configure/clamav/configure.clamav similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/clamav/configure.clamav rename to services/custombuild/custombuild.bk/custombuild/configure/clamav/configure.clamav diff --git a/services/custombuild/custombuild/custombuild/configure/clamav/runav.conf b/services/custombuild/custombuild.bk/custombuild/configure/clamav/runav.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/clamav/runav.conf rename to services/custombuild/custombuild.bk/custombuild/configure/clamav/runav.conf diff --git a/services/custombuild/custombuild/custombuild/configure/clamav/runav.pl b/services/custombuild/custombuild.bk/custombuild/configure/clamav/runav.pl similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/clamav/runav.pl rename to services/custombuild/custombuild.bk/custombuild/configure/clamav/runav.pl diff --git a/services/custombuild/custombuild/custombuild/configure/csf.pignore b/services/custombuild/custombuild.bk/custombuild/configure/csf.pignore similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/csf.pignore rename to services/custombuild/custombuild.bk/custombuild/configure/csf.pignore diff --git a/services/custombuild/custombuild/custombuild/configure/curl/configure.curl b/services/custombuild/custombuild.bk/custombuild/configure/curl/configure.curl similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/curl/configure.curl rename to services/custombuild/custombuild.bk/custombuild/configure/curl/configure.curl diff --git a/services/custombuild/custombuild/custombuild/configure/custombuild/eol_os.txt b/services/custombuild/custombuild.bk/custombuild/configure/custombuild/eol_os.txt similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/custombuild/eol_os.txt rename to services/custombuild/custombuild.bk/custombuild/configure/custombuild/eol_os.txt diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf.d/90-fts-xapian.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf.d/90-fts-xapian.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf.d/90-fts-xapian.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf.d/90-fts-xapian.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf.d/90-quota.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf.d/90-quota.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf.d/90-quota.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf.d/90-quota.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf.d/90-sieve.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf.d/90-sieve.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf.d/90-sieve.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf.d/90-sieve.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf.d/90-zlib.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf.d/90-zlib.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf.d/90-zlib.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf.d/90-zlib.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/imap_mail_plugins.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/imap_mail_plugins.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/imap_mail_plugins.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/imap_mail_plugins.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/ip.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/ip.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/ip.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/ip.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/limits.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/limits.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/limits.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/limits.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/lmtp.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/lmtp.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/lmtp.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/lmtp.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/lmtp_mail_plugins.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/lmtp_mail_plugins.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/lmtp_mail_plugins.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/lmtp_mail_plugins.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/mail_max_userip_connections.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/mail_max_userip_connections.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/mail_max_userip_connections.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/mail_max_userip_connections.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/mail_plugins.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/mail_plugins.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/mail_plugins.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/mail_plugins.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/maildir_copy_with_hardlinks.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/maildir_copy_with_hardlinks.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/maildir_copy_with_hardlinks.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/maildir_copy_with_hardlinks.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/namespace_private.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/namespace_private.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/namespace_private.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/namespace_private.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/protocols.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/protocols.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/protocols.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/protocols.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/conf/ssl.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/ssl.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/conf/ssl.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/conf/ssl.conf diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/configure.dovecot b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/configure.dovecot similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/configure.dovecot rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/configure.dovecot diff --git a/services/custombuild/custombuild/custombuild/configure/dovecot/dovecot.conf b/services/custombuild/custombuild.bk/custombuild/configure/dovecot/dovecot.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/dovecot/dovecot.conf rename to services/custombuild/custombuild.bk/custombuild/configure/dovecot/dovecot.conf diff --git a/services/custombuild/custombuild/custombuild/configure/fastcgi/fcgid.sh b/services/custombuild/custombuild.bk/custombuild/configure/fastcgi/fcgid.sh similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fastcgi/fcgid.sh rename to services/custombuild/custombuild.bk/custombuild/configure/fastcgi/fcgid.sh diff --git a/services/custombuild/custombuild/custombuild/configure/fastcgi/fcgid_freebsd.sh b/services/custombuild/custombuild.bk/custombuild/configure/fastcgi/fcgid_freebsd.sh similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fastcgi/fcgid_freebsd.sh rename to services/custombuild/custombuild.bk/custombuild/configure/fastcgi/fcgid_freebsd.sh diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.53 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.53 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.53 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.53 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.54 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.54 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.54 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.54 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.55 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.55 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.55 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.55 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.56 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.56 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.56 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.56 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.70 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.70 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.70 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.70 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.71 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.71 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.71 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.71 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.72 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.72 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.72 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.72 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.73 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.73 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.73 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.73 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.74 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.74 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.74 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.74 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.80 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.80 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.80 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.80 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.81 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.81 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.81 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.81 diff --git a/services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.82 b/services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.82 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.82 rename to services/custombuild/custombuild.bk/custombuild/configure/fpm/conf/php-fpm.conf.82 diff --git a/services/custombuild/custombuild/custombuild/configure/imagemagick/configure.imagemagick b/services/custombuild/custombuild.bk/custombuild/configure/imagemagick/configure.imagemagick similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/imagemagick/configure.imagemagick rename to services/custombuild/custombuild.bk/custombuild/configure/imagemagick/configure.imagemagick diff --git a/services/custombuild/custombuild/custombuild/configure/modsecurity/configure.modsecurity b/services/custombuild/custombuild.bk/custombuild/configure/modsecurity/configure.modsecurity similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/modsecurity/configure.modsecurity rename to services/custombuild/custombuild.bk/custombuild/configure/modsecurity/configure.modsecurity diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-cloudflare.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-cloudflare.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-cloudflare.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-cloudflare.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-defaults.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-defaults.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-defaults.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-defaults.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-directoryindex.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-directoryindex.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-directoryindex.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-directoryindex.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-events.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-events.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-events.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-events.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-fastcgi-cache.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-fastcgi-cache.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-fastcgi-cache.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-fastcgi-cache.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-gzip.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-gzip.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-gzip.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-gzip.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-info.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-info.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-info.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-info.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-modsecurity.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-modsecurity.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-modsecurity.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-modsecurity.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-userdir.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-userdir.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-userdir.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-userdir.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-vhosts.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-vhosts.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx-vhosts.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx-vhosts.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx_limits.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx_limits.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/nginx_limits.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/nginx_limits.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/conf/webapps_settings.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/webapps_settings.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/conf/webapps_settings.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/conf/webapps_settings.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/configure.modsecurity b/services/custombuild/custombuild.bk/custombuild/configure/nginx/configure.modsecurity similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/configure.modsecurity rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/configure.modsecurity diff --git a/services/custombuild/custombuild/custombuild/configure/nginx/configure.nginx b/services/custombuild/custombuild.bk/custombuild/configure/nginx/configure.nginx similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx/configure.nginx rename to services/custombuild/custombuild.bk/custombuild/configure/nginx/configure.nginx diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-cloudflare.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-cloudflare.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-cloudflare.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-cloudflare.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-defaults.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-defaults.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-defaults.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-defaults.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-directoryindex.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-directoryindex.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-directoryindex.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-directoryindex.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-events.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-events.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-events.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-events.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-fastcgi-cache.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-fastcgi-cache.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-fastcgi-cache.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-fastcgi-cache.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-gzip.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-gzip.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-gzip.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-gzip.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-info.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-info.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-info.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-info.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-modsecurity.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-modsecurity.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-modsecurity.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-modsecurity.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-proxy.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-proxy.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-proxy.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-proxy.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-userdir.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-userdir.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-userdir.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-userdir.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-vhosts.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-vhosts.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx-vhosts.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx-vhosts.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx_limits.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx_limits.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/nginx_limits.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/nginx_limits.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/webapps_settings.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/webapps_settings.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/conf/webapps_settings.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/conf/webapps_settings.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/configure.modsecurity b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/configure.modsecurity similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/configure.modsecurity rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/configure.modsecurity diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_reverse/configure.nginx b/services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/configure.nginx similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_reverse/configure.nginx rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_reverse/configure.nginx diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/cms_made_simple.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/cms_made_simple.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/cms_made_simple.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/cms_made_simple.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/codeigniter.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/codeigniter.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/codeigniter.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/codeigniter.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/dokuwiki.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/dokuwiki.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/dokuwiki.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/dokuwiki.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/drupal.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/drupal.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/drupal.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/drupal.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/elgg.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/elgg.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/elgg.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/elgg.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/joomla.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/joomla.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/joomla.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/joomla.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/laravel.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/laravel.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/laravel.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/laravel.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/omeka.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/omeka.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/omeka.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/omeka.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/opencart.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/opencart.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/opencart.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/opencart.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/prestashop.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/prestashop.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/prestashop.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/prestashop.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/pyrocms.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/pyrocms.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/pyrocms.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/pyrocms.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/silverstripe.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/silverstripe.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/silverstripe.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/silverstripe.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/symfony.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/symfony.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/symfony.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/symfony.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/wordpress.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/wordpress.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/wordpress.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/wordpress.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/wordpress_with_fastcgi_cache.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/wordpress_with_fastcgi_cache.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/wordpress_with_fastcgi_cache.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/wordpress_with_fastcgi_cache.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/xenforo.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/xenforo.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/xenforo.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/xenforo.conf diff --git a/services/custombuild/custombuild/custombuild/configure/nginx_templates/yii.conf b/services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/yii.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/nginx_templates/yii.conf rename to services/custombuild/custombuild.bk/custombuild/configure/nginx_templates/yii.conf diff --git a/services/custombuild/custombuild/custombuild/configure/opcache/opcache.ini b/services/custombuild/custombuild.bk/custombuild/configure/opcache/opcache.ini similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/opcache/opcache.ini rename to services/custombuild/custombuild.bk/custombuild/configure/opcache/opcache.ini diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-accesscontrol.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-accesscontrol.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-accesscontrol.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-accesscontrol.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-accessdenydir.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-accessdenydir.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-accessdenydir.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-accessdenydir.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-cgirlimit.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-cgirlimit.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-cgirlimit.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-cgirlimit.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-defaults.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-defaults.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-defaults.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-defaults.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-directoryindex.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-directoryindex.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-directoryindex.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-directoryindex.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-expires.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-expires.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-expires.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-expires.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-fileaccesscontrol.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-fileaccesscontrol.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-fileaccesscontrol.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-fileaccesscontrol.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-logs.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-logs.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-logs.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-logs.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-lscache.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-lscache.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-lscache.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-lscache.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-lsrecaptcha.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-lsrecaptcha.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-lsrecaptcha.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-lsrecaptcha.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-modsecurity.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-modsecurity.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-modsecurity.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-modsecurity.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-nodedefaults.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-nodedefaults.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-nodedefaults.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-nodedefaults.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-perclientconnlimit.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-perclientconnlimit.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-perclientconnlimit.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-perclientconnlimit.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-phplimits.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-phplimits.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-phplimits.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-phplimits.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-railsdefaults.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-railsdefaults.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-railsdefaults.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-railsdefaults.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-tuning.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-tuning.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-tuning.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-tuning.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-vhosts.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-vhosts.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-vhosts.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-vhosts.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-webapps-php.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-webapps-php.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-webapps-php.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-webapps-php.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-wsgidefaults.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-wsgidefaults.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd-wsgidefaults.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd-wsgidefaults.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd_config.conf b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd_config.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/conf/httpd_config.conf rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/conf/httpd_config.conf diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/configure.openlitespeed b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/configure.openlitespeed similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/configure.openlitespeed rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/configure.openlitespeed diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/httpd-extprocessors.template b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/httpd-extprocessors.template similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/httpd-extprocessors.template rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/httpd-extprocessors.template diff --git a/services/custombuild/custombuild/custombuild/configure/openlitespeed/httpd-webapps-extprocessor.template b/services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/httpd-webapps-extprocessor.template similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/openlitespeed/httpd-webapps-extprocessor.template rename to services/custombuild/custombuild.bk/custombuild/configure/openlitespeed/httpd-webapps-extprocessor.template diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php53 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php53 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php53 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php53 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php54 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php54 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php54 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php54 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php55 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php55 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php55 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php55 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php56 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php56 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php56 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php56 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php70 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php70 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php70 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php70 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php71 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php71 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php71 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php71 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php72 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php72 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php72 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php72 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php73 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php73 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php73 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php73 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php74 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php74 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php74 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php74 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php80 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php80 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php80 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php80 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php81 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php81 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php81 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php81 diff --git a/services/custombuild/custombuild/custombuild/configure/php/configure.php82 b/services/custombuild/custombuild.bk/custombuild/configure/php/configure.php82 similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/php/configure.php82 rename to services/custombuild/custombuild.bk/custombuild/configure/php/configure.php82 diff --git a/services/custombuild/custombuild/custombuild/configure/phpmyadmin/config.inc.php b/services/custombuild/custombuild.bk/custombuild/configure/phpmyadmin/config.inc.php similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/phpmyadmin/config.inc.php rename to services/custombuild/custombuild.bk/custombuild/configure/phpmyadmin/config.inc.php diff --git a/services/custombuild/custombuild/custombuild/configure/proftpd/conf/proftpd.conf b/services/custombuild/custombuild.bk/custombuild/configure/proftpd/conf/proftpd.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/proftpd/conf/proftpd.conf rename to services/custombuild/custombuild.bk/custombuild/configure/proftpd/conf/proftpd.conf diff --git a/services/custombuild/custombuild/custombuild/configure/proftpd/configure.proftpd b/services/custombuild/custombuild.bk/custombuild/configure/proftpd/configure.proftpd similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/proftpd/configure.proftpd rename to services/custombuild/custombuild.bk/custombuild/configure/proftpd/configure.proftpd diff --git a/services/custombuild/custombuild/custombuild/configure/pureftpd/configure.pureftpd b/services/custombuild/custombuild.bk/custombuild/configure/pureftpd/configure.pureftpd similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/pureftpd/configure.pureftpd rename to services/custombuild/custombuild.bk/custombuild/configure/pureftpd/configure.pureftpd diff --git a/services/custombuild/custombuild/custombuild/configure/pureftpd/pure-ftpd.conf b/services/custombuild/custombuild.bk/custombuild/configure/pureftpd/pure-ftpd.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/pureftpd/pure-ftpd.conf rename to services/custombuild/custombuild.bk/custombuild/configure/pureftpd/pure-ftpd.conf diff --git a/services/custombuild/custombuild/custombuild/configure/pureftpd/pureftpd_sni.sh b/services/custombuild/custombuild.bk/custombuild/configure/pureftpd/pureftpd_sni.sh similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/pureftpd/pureftpd_sni.sh rename to services/custombuild/custombuild.bk/custombuild/configure/pureftpd/pureftpd_sni.sh diff --git a/services/custombuild/custombuild/custombuild/configure/pureftpd/pureftpd_uploadscan.sh b/services/custombuild/custombuild.bk/custombuild/configure/pureftpd/pureftpd_uploadscan.sh similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/pureftpd/pureftpd_uploadscan.sh rename to services/custombuild/custombuild.bk/custombuild/configure/pureftpd/pureftpd_uploadscan.sh diff --git a/services/custombuild/custombuild/custombuild/configure/rspamd/exim.spamd.conf b/services/custombuild/custombuild.bk/custombuild/configure/rspamd/exim.spamd.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/rspamd/exim.spamd.conf rename to services/custombuild/custombuild.bk/custombuild/configure/rspamd/exim.spamd.conf diff --git a/services/custombuild/custombuild/custombuild/configure/spamassassin/exim.spamd.conf b/services/custombuild/custombuild.bk/custombuild/configure/spamassassin/exim.spamd.conf similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/spamassassin/exim.spamd.conf rename to services/custombuild/custombuild.bk/custombuild/configure/spamassassin/exim.spamd.conf diff --git a/services/custombuild/custombuild/custombuild/configure/suhosin/php_uploadscan.sh b/services/custombuild/custombuild.bk/custombuild/configure/suhosin/php_uploadscan.sh similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/suhosin/php_uploadscan.sh rename to services/custombuild/custombuild.bk/custombuild/configure/suhosin/php_uploadscan.sh diff --git a/services/custombuild/custombuild/custombuild/configure/suhosin/suhosin.ini b/services/custombuild/custombuild.bk/custombuild/configure/suhosin/suhosin.ini similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/suhosin/suhosin.ini rename to services/custombuild/custombuild.bk/custombuild/configure/suhosin/suhosin.ini diff --git a/services/custombuild/custombuild/custombuild/configure/suphp/configure.suphp b/services/custombuild/custombuild.bk/custombuild/configure/suphp/configure.suphp similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/suphp/configure.suphp rename to services/custombuild/custombuild.bk/custombuild/configure/suphp/configure.suphp diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/clamd.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/clamd.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/clamd.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/clamd.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/clamd.service.debian b/services/custombuild/custombuild.bk/custombuild/configure/systemd/clamd.service.debian similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/clamd.service.debian rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/clamd.service.debian diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/da-popb4smtp.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/da-popb4smtp.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/da-popb4smtp.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/da-popb4smtp.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/dovecot.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/dovecot.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/dovecot.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/dovecot.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/dovecot.socket b/services/custombuild/custombuild.bk/custombuild/configure/systemd/dovecot.socket similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/dovecot.socket rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/dovecot.socket diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/exim.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/exim.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/exim.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/exim.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/freshclam.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/freshclam.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/freshclam.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/freshclam.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/httpd.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/httpd.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/httpd.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/httpd.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/litespeed.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/litespeed.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/litespeed.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/litespeed.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/mariadb.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/mariadb.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/mariadb.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/mariadb.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/mariadb.service.binary b/services/custombuild/custombuild.bk/custombuild/configure/systemd/mariadb.service.binary similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/mariadb.service.binary rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/mariadb.service.binary diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/mariadb55.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/mariadb55.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/mariadb55.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/mariadb55.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/mysqld.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/mysqld.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/mysqld.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/mysqld.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/mysqld.service.binary b/services/custombuild/custombuild.bk/custombuild/configure/systemd/mysqld.service.binary similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/mysqld.service.binary rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/mysqld.service.binary diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/mysqld57.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/mysqld57.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/mysqld57.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/mysqld57.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/mysqld57.service.binary b/services/custombuild/custombuild.bk/custombuild/configure/systemd/mysqld57.service.binary similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/mysqld57.service.binary rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/mysqld57.service.binary diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/named-setup-rndc.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/named-setup-rndc.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/named-setup-rndc.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/named-setup-rndc.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/named.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/named.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/named.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/named.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/named.service.debian b/services/custombuild/custombuild.bk/custombuild/configure/systemd/named.service.debian similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/named.service.debian rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/named.service.debian diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/nginx.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/nginx.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/nginx.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/nginx.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/php-fpm.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/php-fpm.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/php-fpm.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/php-fpm.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/proftpd.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/proftpd.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/proftpd.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/proftpd.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/pure-certd.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/pure-certd.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/pure-certd.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/pure-certd.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/pure-ftpd.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/pure-ftpd.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/pure-ftpd.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/pure-ftpd.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/pure-uploadscript.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/pure-uploadscript.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/pure-uploadscript.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/pure-uploadscript.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/redis-rspamd.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/redis-rspamd.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/redis-rspamd.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/redis-rspamd.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/redis@.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/redis@.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/redis@.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/redis@.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/rspamd.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/rspamd.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/rspamd.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/rspamd.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/scripts/dovecot_prestartscript b/services/custombuild/custombuild.bk/custombuild/configure/systemd/scripts/dovecot_prestartscript similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/scripts/dovecot_prestartscript rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/scripts/dovecot_prestartscript diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/scripts/mysql-wait-ready b/services/custombuild/custombuild.bk/custombuild/configure/systemd/scripts/mysql-wait-ready similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/scripts/mysql-wait-ready rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/scripts/mysql-wait-ready diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/spamassassin.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/spamassassin.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/spamassassin.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/spamassassin.service diff --git a/services/custombuild/custombuild/custombuild/configure/systemd/unit.service b/services/custombuild/custombuild.bk/custombuild/configure/systemd/unit.service similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/systemd/unit.service rename to services/custombuild/custombuild.bk/custombuild/configure/systemd/unit.service diff --git a/services/custombuild/custombuild/custombuild/configure/unit/configure.unit b/services/custombuild/custombuild.bk/custombuild/configure/unit/configure.unit similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/unit/configure.unit rename to services/custombuild/custombuild.bk/custombuild/configure/unit/configure.unit diff --git a/services/custombuild/custombuild/custombuild/configure/unit/unit_checks.sh b/services/custombuild/custombuild.bk/custombuild/configure/unit/unit_checks.sh similarity index 100% rename from services/custombuild/custombuild/custombuild/configure/unit/unit_checks.sh rename to services/custombuild/custombuild.bk/custombuild/configure/unit/unit_checks.sh diff --git a/services/custombuild/custombuild/build b/services/custombuild/custombuild/build new file mode 100644 index 0000000..4d40d9a --- /dev/null +++ b/services/custombuild/custombuild/build @@ -0,0 +1,31915 @@ +#!/bin/sh +# This script is written by DirectAdmin and Martynas Bendorius (smtalk) + +BUILDSCRIPT_VER=2.0.0 +NAME=custombuild + +OS=`uname` +WORKDIR=/usr/local/directadmin/${NAME} + +cd ${WORKDIR} + +#Added for security +chmod 700 ${WORKDIR}/build >/dev/null 2>&1 +chmod 700 ${WORKDIR} >/dev/null 2>&1 +chmod 700 -R /usr/local/directadmin/custombuild/configure + +#Just making sure there are no default grep options set in .bashrc +GREP_OPTIONS="" + +if [ "$(id -u)" != "0" ]; then + echo "You must be root to execute the script. Exiting." + exit 1 +fi + +#If we have no sysbk directory (it's first entry in doAll()), we know that CB has never ran, thus it's a new install, we also have no versions.txt at the same time +if [ ! -d /usr/local/sysbk ]; then + NEW_INSTALL=true +else + NEW_INSTALL=false +fi + +doHook(){ + if [ ! -z "${1}" ] && [ ! -z "${2}" ]; then + if [ -d ${WORKDIR}/custom/hooks/${1}/${2} ]; then + find ${WORKDIR}/custom/hooks/${1}/${2} -type f -name '*.sh' | while read line; do + echo "Executing '$line'..." + . "$line" + done + HOOK_ERROR_CODE=$? + if [ ${HOOK_ERROR_CODE} -ne 0 ]; then + echo "Hook exited with error code: ${HOOK_ERROR_CODE}. Exiting..." + exit ${HOOK_ERROR_CODE} + fi + + fi + fi +} + +OPTIONS_CONF=${WORKDIR}/options.conf +PHP_EXTENSIONS_CONF=${WORKDIR}/php_extensions.conf +OPTIONS_CONF_EXISTS=1 +if [ ! -e ${OPTIONS_CONF} ]; then + OPTIONS_CONF_EXISTS=0 +fi +VERSIONS_FILE=${WORKDIR}/versions.txt +PATCHES_VERSIONS_FILE=${WORKDIR}/patches_versions.txt +VERSIONS_FILE_CUSTOM=${WORKDIR}/custom_versions.txt +VERSIONS_FILE_CL=${WORKDIR}/versions_cl.txt +VERSIONS_FILE_CWAF=${WORKDIR}/versions_cwaf.txt +VERSIONS_FILE_LITESPEED=${WORKDIR}/versions_litespeed.txt +VERSIONS_FILE_JEMALLOC=${WORKDIR}/mysql/versions_jemalloc.txt +VERSIONS_FILE_GALERA=${WORKDIR}/mysql/versions_galera.txt +LOCKFILE=${WORKDIR}/.custombuild +LOGFILE=${WORKDIR}/custombuild.log +PROFTPD_PREFIX=/usr +B64=0 +EXEC_CL_COMMANDS_ONCE=false +CL_COMPONENT_UPDATE=false + +CPU_CORES=1 +DA_BIN=/usr/local/directadmin/directadmin + +if [ ${OS} = "FreeBSD" ]; then + MD5SUM=/sbin/md5 +else + MD5SUM=/usr/bin/md5sum +fi + +is_os_eol() { + EOL_FILE=${WORKDIR}/configure/custombuild/eol_os.txt + if [ -e ${WORKDIR}/custom/custombuild/eol_os.txt ]; then + EOL_FILE=${WORKDIR}/custom/custombuild/eol_os.txt + fi + DA_OS=`${DA_BIN} o | head -n1 | cut -d"'" -f2 | cut -d"." -f1` + if grep -m1 -q "^${DA_OS}$" ${EOL_FILE}; then + echo 1 + else + echo 0 + fi + return +} + +EXIT_CODE=0 + +LANG=C + +LSWS_HOME=/usr/local/lsws + +# Emulate ${!variable} +eval_var() { + var=${1} + if [ -z ${var} ]; then + echo "" + else + eval newval="\$${var}" + echo $newval + fi +} + +removeLockfile() { + rm -f ${LOCKFILE} + trap - INT TERM EXIT +} + +kill_childs() { + if [ -s ${LOCKFILE} ]; then + CB_PID=`cat ${LOCKFILE}` + for process in `ps -ef | awk -v cb_pid=${CB_PID} '{ if ( $3 == cb_pid ) { print $2 }}'`; do + kill ${process} + done + fi +} + +doKill() { + if [ -s ${LOCKFILE} ]; then + kill_childs + removeLockfile + kill -9 ${CB_PID} + exit 0 + else + echo "There is no CustomBuild process running." + fi + exit 0 +} + +getTimezone() { + if [ "${OS}" = "FreeBSD" ]; then + if [ -d /usr/share/zoneinfo ] && [ -e /etc/localtime ]; then + MD5_LOCALTIME=`md5 /etc/localtime | awk '{print $4}'` + # we don't use 'grep -m1' here to fix: "xargs: md5: terminated with signal 13; aborting" + DATETIMEZONE="`find /usr/share/zoneinfo -type f -print0 | xargs -0 md5 | grep "${MD5_LOCALTIME}" | awk '{print $2}' | cut -d\( -f2 | cut -d\) -f1 | perl -p0 -e 's#/usr/share/zoneinfo/##'`" + fi + elif [ -e ${DEBIAN_VERSION} ]; then + if [ -e /etc/timezone ]; then + DATETIMEZONE="`cat /etc/timezone`" + fi + else + if [ -e /etc/sysconfig/clock ]; then + DATETIMEZONE="`grep -m1 '^ZONE=' /etc/sysconfig/clock | cut -d'"' -f2 | cut -d= -f2`" + elif [ -e /usr/bin/timedatectl ]; then + DATETIMEZONE="`timedatectl | grep -m1 'Time.*zone:' | cut -d: -f2 | awk '{print $1}'`" + fi + fi + if [ "${DATETIMEZONE}" = "" ]; then + DATETIMEZONE="Europe/London" + fi + echo ${DATETIMEZONE} | awk '{print $1}' +} + +random_pass() { + #No special characters yet, because they'd cause problems with regexes and PEAR::DB to split the DNS string correctly in roundcube config.inc.php + if [ "${OS}" = "FreeBSD" ]; then + RPC=`perl -le 'print int rand(7) + 10'` + else + RPC=`awk -v min=10 -v max=17 'BEGIN{srand(); print int(min+rand()*(max-min+1))}'` + fi + + tr -cd 'a-zA-Z0-9' < /dev/urandom 2>/dev/null | head -c${RPC} # perl generates a random integer between 10 and 16 +} + +remove_file() { + if [ "$1" = "" ]; then + do_exit 1 "File not specified for remove_file..." + fi + + if [ -e $1 ]; then + echo "Removing file: $1..." + rm -f $1 + fi +} + +remove_directory() { + if [ "$1" = "" ]; then + do_exit 1 "File not specified for remove_file..." + fi + + COUNT_SLASHES="`echo \"$1\" | grep -o '/' | wc -l`" + if [ "${COUNT_SLASHES}" -lt 2 ]; then + do_exit 1 "Too dangerous path to remove: $1. Exiting..." + fi + + if [ -d $1 ]; then + echo "Removing directory: $1..." + rm -rf $1 + fi +} + +# Systemd +SYSTEMD=no +SYSTEMDDIR=/etc/systemd/system +CB_SYSTEMD=${WORKDIR}/configure/systemd +CB_CUST_SYSTEMD=${WORKDIR}/custom/systemd +if [ -d ${SYSTEMDDIR} ]; then + if [ -e /bin/systemctl ] || [ -e /usr/bin/systemctl ]; then + SYSTEMD=yes + SYSTEMD_SCRIPTS=/usr/libexec + fi +fi + +HOSTNAME="`hostname -f 2>/dev/null`" +if [ -z "${HOSTNAME}" ] && [ "${OS}" != "FreeBSD" ] && [ -x /usr/bin/hostnamectl ]; then + HOSTNAME=`/usr/bin/hostnamectl --static | head -n1` + if ! echo "${HOSTNAME}" | grep -m1 -q '\.'; then + HOSTNAME=`grep -m1 -o "${HOSTNAME}\.[^ ]*" /etc/hosts` + fi +fi +if [ -z "${HOSTNAME}" ]; then + HOSTNAME="your.server.com" +fi + +#There are used in other sections, so must be executed everytime +PHP1_RELEASE_SET="5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4" +PHP1_SHORTRELEASE_SET="`echo ${PHP1_RELEASE_SET} | tr -d '.'`" +DEBIAN_VERSION=/etc/debian_version +if [ "${OS}" = "FreeBSD" ]; then + OS_VER=`uname -r | cut -d- -f1` + OS_FREEBSD_VER=`echo ${OS_VER} | cut -d. -f1` +elif [ -e ${DEBIAN_VERSION} ]; then + OS_DEBIAN_VER=`grep -m1 -o '^[^\.]*' ${DEBIAN_VERSION}` +else + if [ -s /etc/os-release ]; then + OS_CENTOS_VER=`grep -m1 '^VERSION_ID=' /etc/os-release | cut -d. -f1 | cut -d'"' -f2` + else + OS_CENTOS_VER=`grep -m1 -o '[0-9]*\.[0-9]*' /etc/redhat-release | cut -d. -f1` + #CentOS Stream 8 support + if [ -z "${OS_CENTOS_VER}" ]; then + OS_CENTOS_VER=`grep -m1 -o '[0-9]*$' /etc/redhat-release` + fi + fi + if [ -e /etc/yum.repos.d/oracle-epel-ol8.repo ]; then + EPEL_REPO_NAME=ol8_developer_EPEL + else + EPEL_REPO_NAME=epel + fi +fi + +is_cloudlinux_solo() { + CL_SOLO_FILE=/etc/cloudlinux-edition-solo + if [ -e "$CL_SOLO_FILE" ]; then + echo 1 + else + echo 0 + fi + return +} + +installDevtoolset() { + if [ "${OS_CENTOS_VER}" = "6" ]; then + #C++11 is needed for libmodsecurity + if [ ! -d /opt/rh/devtoolset-7 ]; then + yum -y install cloudlinux-scl-release + yum -y install devtoolset-7 --enablerepo=cloudlinux-scl-release + yum -y install devtoolset-7 + fi + fi +} + +USE_ALL_SETTINGS=1 +use_all_settings_toggle() { + USE_ALL_SETTINGS=0 +} +GETOPT_CASE=1 +getopt_case_toggle() { + GETOPT_CASE=0 +} +case "$1" in + version) use_all_settings_toggle ;; + kill) use_all_settings_toggle ;; + update_da) getopt_case_toggle ;; + get_timezone) getopt_case_toggle ;; + set_versions_txt) getopt_case_toggle ;; + show_file) getopt_case_toggle ;; +esac + +if [ ! -e ${OPTIONS_CONF} ]; then + USE_ALL_SETTINGS=1 +fi + +if [ "${USE_ALL_SETTINGS}" = "1" ]; then + ################################################# + #ALL SETTINGS + #SECTIONS OF OPTIONS + ALL_SECTIONS="PHP_SETTINGS MYSQL_SETTINGS WEBSERVER_SETTINGS WEBAPPS_SETTINGS CLAMAV_SETTINGS MAIL_SETTINGS FTP_SETTINGS STATS_SETTINGS PHP_EXT_SETTINGS CUSTOMBUILD_SETTINGS CRON_SETTINGS CLOUDLINUX_SETTINGS ADVANCED_SETTINGS" + + PHP_EXT_SETTINGS="BZ2 GMP IONCUBE IMAP OPCACHE HTSCANNER IGBINARY IMAGICK LDAP PHALCON REDIS SNUFFLEUPAGUS SUHOSIN XMLRPC ZEND" + PHP_SETTINGS="PHP1_RELEASE PHP1_MODE PHP2_RELEASE PHP2_MODE PHP3_RELEASE PHP3_MODE PHP4_RELEASE PHP4_MODE SECURE_PHP PHP_INI PHP_TIMEZONE PHP_INI_TYPE X_MAIL_HEADER" + MYSQL_SETTINGS="MYSQL MARIADB MYSQL_INST MYSQL_BACKUP MYSQL_BACKUP_GZIP MYSQL_BACKUP_DIR MYSQL_FORCE_COMPILE" + WEBSERVER_SETTINGS="UNIT WEBSERVER HTTP_METHODS LITESPEED_SERIALNO MODSECURITY MODSECURITY_RULESET APACHE_VER APACHE_MPM MOD_RUID2 USERDIR_ACCESS HARDEN_SYMLINKS_PATCH USE_HOSTNAME_FOR_ALIAS REDIRECT_HOST REDIRECT_HOST_HTTPS" + WEBAPPS_SETTINGS="PHPMYADMIN PHPMYADMIN_PUBLIC PHPMYADMIN_VER SQUIRRELMAIL ROUNDCUBE WEBAPPS_INBOX_PREFIX" + MAIL_SETTINGS="EXIM EXIMCONF EXIMCONF_RELEASE BLOCKCRACKING EASY_SPAM_FIGHTER SPAMD SA_UPDATE DOVECOT DOVECOT_CONF MAIL_COMPRESS PIGEONHOLE" + CLAMAV_SETTINGS="CLAMAV CLAMAV_EXIM MODSECURITY_UPLOADSCAN PROFTPD_UPLOADSCAN PUREFTPD_UPLOADSCAN SUHOSIN_PHP_UPLOADSCAN" + FTP_SETTINGS="FTPD" + STATS_SETTINGS="AWSTATS WEBALIZER" + CUSTOMBUILD_SETTINGS="CUSTOMBUILD CUSTOMBUILD_PLUGIN AUTOVER BOLD CLEAN CLEANAPACHE CLEAN_OLD_TARBALLS CLEAN_OLD_WEBAPPS DOWNLOADSERVER UNOFFICIAL_MIRRORS" + CRON_SETTINGS="CRON CRON_FREQUENCY EMAIL NOTIFICATIONS DA_AUTOUPDATE UPDATES WEBAPPS_UPDATES" + CLOUDLINUX_SETTINGS="CLOUDLINUX CLOUDLINUX_BETA CAGEFS" + ADVANCED_SETTINGS="CSF CURL SSL_CONFIGURATION REDIS" + + PHP_EXT_SETTINGS_DESC="PHP Extension Settings" + PHP_SETTINGS_DESC="PHP Settings" + MYSQL_SETTINGS_DESC="MySQL Settings" + WEBSERVER_SETTINGS_DESC="WEB Server Settings" + WEBAPPS_SETTINGS_DESC="WEB Applications Settings" + CLAMAV_SETTINGS_DESC="ClamAV-related Settings" + MAIL_SETTINGS_DESC="Mail Settings" + FTP_SETTINGS_DESC="FTP Settings" + STATS_SETTINGS_DESC="Statistics Settings" + CUSTOMBUILD_SETTINGS_DESC="CustomBuild Settings" + CRON_SETTINGS_DESC="Cronjob Settings" + CLOUDLINUX_SETTINGS_DESC="CloudLinux Settings" + ADVANCED_SETTINGS_DESC="Advanced Settings" + + YESNO_SET="yes no" + + #OPTIONS.CONF + PHP1_RELEASE_DEF="7.4" + PHP1_MODE_SET="php-fpm fastcgi suphp lsphp mod_php" + if [ ${OS} = "FreeBSD" ] || [ -e ${DEBIAN_VERSION} ]; then + PHP1_MODE_DEF="php-fpm" + else + if uname -a | grep -m1 -q '\.lve' || uname -a | grep -m1 -q 'el7h'; then + if [ $(is_cloudlinux_solo) -eq 1 ]; then + PHP1_MODE_DEF="php-fpm" + else + PHP1_MODE_DEF="lsphp" + fi + elif [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + PHP1_MODE_DEF="mod_php" + else + PHP1_MODE_DEF="php-fpm" + fi + fi + PHP1_RELEASE_DESC="Default version of PHP." + PHP1_MODE_DESC="Mode of the default PHP version. lsphp is only compatible with LiteSpeed, OpenLiteSpeed WWW servers or CloudLinux+Apache except CloudLinux Solo Edition. For nginx (not as a reverse proxy for apache) php-fpm must be chosen." + + PHP2_RELEASE_SET="${PHP1_RELEASE_SET} no" + PHP2_RELEASE_DEF="no" + PHP2_MODE_SET="php-fpm fastcgi suphp lsphp" + PHP2_MODE_DEF="php-fpm" + PHP2_RELEASE_DESC="Additional version of PHP." + PHP2_MODE_DESC="Mode of the additional PHP version." + + PHP3_RELEASE_SET="${PHP2_RELEASE_SET}" + PHP3_RELEASE_DEF="${PHP2_RELEASE_DEF}" + PHP3_MODE_SET="${PHP2_MODE_SET}" + PHP3_MODE_DEF="${PHP2_MODE_DEF}" + PHP3_RELEASE_DESC="${PHP2_RELEASE_DESC}" + PHP3_MODE_DESC="${PHP2_MODE_DESC}" + + PHP4_RELEASE_SET="${PHP2_RELEASE_SET}" + PHP4_RELEASE_DEF="${PHP2_RELEASE_DEF}" + PHP4_MODE_SET="${PHP2_MODE_SET}" + PHP4_MODE_DEF="${PHP2_MODE_DEF}" + PHP4_RELEASE_DESC="${PHP2_RELEASE_DESC}" + PHP4_MODE_DESC="${PHP2_MODE_DESC}" + + SECURE_PHP_SET="${YESNO_SET}" + SECURE_PHP_DEF="no" + SECURE_PHP_DESC="Disable dangerous PHP functions." + + EOL_COMMENT="Not in active development anymore, thus not recommended." + + #php_extensions.conf things start with PHP_, but they're listed without PHP_ inside the file + PHP_HTSCANNER_SET="${YESNO_SET}" + PHP_HTSCANNER_DEF="no" + PHP_HTSCANNER_DESC="htscanner for Apache (allows to confige php in .htaccess files using PHP)." + + PHP_BZ2_SET="${YESNO_SET}" + PHP_BZ2_DEF="no" + PHP_BZ2_DESC="Bz2 extension for PHP." + + PHP_GMP_SET="${YESNO_SET}" + PHP_GMP_DEF="no" + PHP_GMP_DESC="GMP extension for PHP." + + PHP_LDAP_SET="${YESNO_SET}" + PHP_LDAP_DEF="no" + PHP_LDAP_DESC="LDAP extension for PHP." + + PHP_OPCACHE_SET="${YESNO_SET}" + PHP_OPCACHE_DEF="no" + PHP_OPCACHE_DESC="opCache opcode cacher for PHP." + + PHP_IONCUBE_SET="${YESNO_SET}" + PHP_IONCUBE_DEF="no" + PHP_IONCUBE_DESC="PHP loader for ionCube Secured Files." + + PHP_IMAGICK_SET="${YESNO_SET}" + PHP_IMAGICK_DEF="no" + PHP_IMAGICK_DESC="ImageMagick extension for PHP." + + PHP_PSR_SET="${YESNO_SET}" + PHP_PSR_DEF="no" + PHP_PSR_DESC="Psr extension for PHP." + + PHP_PHALCON_SET="${YESNO_SET}" + PHP_PHALCON_DEF="no" + PHP_PHALCON_DESC="Phalcon extension for PHP." + + PHP_REDIS_SET="${YESNO_SET}" + PHP_REDIS_DEF="no" + PHP_REDIS_DESC="Redis extension for PHP." + + PHP_READLINE_SET="${YESNO_SET}" + PHP_READLINE_DEF="no" + PHP_READLINE_DESC="Readline extension for PHP." + + PHP_IMAP_SET="${YESNO_SET}" + PHP_IMAP_DEF="no" + PHP_IMAP_DESC="IMAP extension for PHP." + + PHP_XMLRPC_SET="${YESNO_SET}" + PHP_XMLRPC_DEF="no" + PHP_XMLRPC_DESC="XMLRPC extension for PHP." + + PHP_SNUFFLEUPAGUS_SET="${YESNO_SET}" + PHP_SNUFFLEUPAGUS_DEF="no" + PHP_SNUFFLEUPAGUS_DESC="Snuffleupagus security module." + + PHP_IGBINARY_SET="${YESNO_SET}" + PHP_IGBINARY_DEF="no" + PHP_IGBINARY_DESC="Drop in replacement for the standard php serializer." + + PHP_SUHOSIN_SET="${YESNO_SET}" + PHP_SUHOSIN_DEF="no" + PHP_SUHOSIN_DESC="Suhosin advanced protection system for PHP. ${EOL_COMMENT}" + + PHP_ZEND_SET="${YESNO_SET}" + PHP_ZEND_DEF="no" + PHP_ZEND_DESC="Zend Guard Loader is a free runtime application that enables PHP to run the scripts encoded by Zend Guard. ${EOL_COMMENT}" +###end of php_extensions.conf + + PHP_INI_SET="${YESNO_SET}" + PHP_INI_DEF="no" + PHP_INI_DESC="Enables ability to update php.ini file of PHP (rewrites any customizations!)." + + PHP_TIMEZONE_SET="userinput" + PHP_TIMEZONE_DEF="$(getTimezone)" + PHP_TIMEZONE_DESC="date.timezone setting in php.ini file of PHP. https://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone." + + PHP_INI_TYPE_SET="production development" + PHP_INI_TYPE_DEF="production" + PHP_INI_TYPE_DESC="Type of php.ini file. php.ini-development contains settings recommended for use in development environments. php.ini-production contains settings recommended for use in production environments." + + REDIS_SET="${YESNO_SET}" + REDIS_DEF="no" + REDIS_DESC="Redis key-value database." + + SUHOSIN_PHP_UPLOADSCAN_SET="${YESNO_SET}" + SUHOSIN_PHP_UPLOADSCAN_DEF="no" + SUHOSIN_PHP_UPLOADSCAN_DESC="Scan PHP uploaded scripts using suhosin upload verification script and ClamAV antivirus (clamdscan). ClamAV must be installed and suhosin option should be enabled for the setting to work." + + #OUTPUT AS x-mail-header + X_MAIL_HEADER_SET="${YESNO_SET}" + X_MAIL_HEADER_DEF="yes" + X_MAIL_HEADER_DESC="mail.add_x_header setting in php.ini file of PHP. https://www.php.net/manual/en/mail.configuration.php#ini.mail.add-x-header" + + UNIT_SET="${YESNO_SET}" + UNIT_DEF="no" + UNIT_DESC="Nginx Unit. Dynamic Application Server. ALPHA support." + + WEBSERVER_SET="apache nginx nginx_apache litespeed openlitespeed" + WEBSERVER_DEF="apache" + WEBSERVER_DESC="WWW Server." + + HTTP_METHODS_SET="userinput" + HTTP_METHODS_DEF="ALL" + HTTP_METHODS_DESC="Allowed HTTP methods. Enabled with rewrite_confs or webserver update." + + LITESPEED_SERIALNO_SET="userinput" + LITESPEED_SERIALNO_DEF="trial" + LITESPEED_SERIALNO_DESC="Serial number of LiteSpeed Enterprise license." + + MODSECURITY_SET="${YESNO_SET}" + MODSECURITY_DEF="no" + MODSECURITY_DESC="ModSecurity - Web application firewall." + + MODSECURITY_RULESET_SET="comodo owasp no" + MODSECURITY_RULESET_DEF="owasp" + MODSECURITY_RULESET_DESC="ModSecurity rule set. Set to 'no' to use no ruleset. Comodo option provides Comodo Rule Set for ModSecurity: https://modsecurity.comodo.com/. OWASP ModSecurity Core Rule Set: https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project. Add custom rules to custom/modsecurity/conf, they'd be added automatically to /etc/modsecurity.d after './build modsecurity' or './build modsecurity_rules' is ran." + + APACHE_VER_SET="2.4" + APACHE_VER_DEF="2.4" + APACHE_VER_DESC="Apache version." + + APACHE_MPM_SET="prefork event worker auto" + APACHE_MPM_DEF="auto" + APACHE_MPM_DESC="Apache Multi-Processing Module. 'auto' mode sets MPM to be Prefork if PHP as mod_php is chosen, because this way PHP is not thread-safe. Otherwise Event MPM is set." + + USERDIR_ACCESS_SET="${YESNO_SET}" + USERDIR_ACCESS_DEF="no" + USERDIR_ACCESS_DESC="Allows accessing contents of public_html using https://hostname/~user, if enabled." + + MOD_RUID2_SET="${YESNO_SET}" + #mod_ruid2 segfaults on debian, centos8 + if [ "${OS}" = "FreeBSD" ] || [ -e ${DEBIAN_VERSION} ]; then + MOD_RUID2_DEF="no" + else + if uname -a | grep -m1 -q '\.lve' || uname -a | grep -m1 -q 'el7h'; then + MOD_RUID2_DEF="no" + elif [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + MOD_RUID2_DEF="yes" + else + MOD_RUID2_DEF="no" + fi + fi + MOD_RUID2_DESC="mod_ruid2 is an Apache extension that allows requests to a domain to run as the owner of that domain, instead of the Apache user. Not supported on FreeBSD or Debian systems." + + #OUTPUT as harden-symlinks-patch + HARDEN_SYMLINKS_PATCH_SET="${YESNO_SET}" + HARDEN_SYMLINKS_PATCH_DEF="yes" + HARDEN_SYMLINKS_PATCH_DESC="Patches apache to include hardened symlinks patch. https://da-mirror.wpcloud.vn/services/custombuild/harden-symlinks-2.4.patch." + + USE_HOSTNAME_FOR_ALIAS_SET="${YESNO_SET} auto" + USE_HOSTNAME_FOR_ALIAS_DEF="no" + USE_HOSTNAME_FOR_ALIAS_DESC="Redirects WEB appplications addresses to server hostname. Useful with FastCGI mode of PHP ('auto' option enables it for FastCGI mode of PHP only)." + + REDIRECT_HOST_SET="userinput" + REDIRECT_HOST_DEF="${HOSTNAME}" + REDIRECT_HOST_DESC="Hostname used for use_hostname_for_alias setting." + + REDIRECT_HOST_HTTPS_SET="${YESNO_SET}" + REDIRECT_HOST_HTTPS_DEF="no" + REDIRECT_HOST_HTTPS_DESC="Enables SSL redirection for use_hostname_for_alias setting." + + MYSQL_INST_SET="mysql mariadb no" + if [ -e /root/.skip_mysql_install ]; then + MYSQL_INST_DEF="no" + elif [ "${OS_CENTOS_VER}" = "8" ]; then + MYSQL_INST_DEF="mariadb" + else + MYSQL_INST_DEF="mysql" + fi + MYSQL_INST_DESC="Enables management of MySQL/MariaDB using CustomBuild." + + MYSQL_DESC="MySQL version." + + MARIADB_DESC="MariaDB version." + + MYSQL_BACKUP_SET="${YESNO_SET}" + MYSQL_BACKUP_DEF="yes" + MYSQL_BACKUP_DESC="Backups MySQL databases before the installation of MySQL/MariaDB server." + + MYSQL_BACKUP_GZIP_SET="${YESNO_SET}" + MYSQL_BACKUP_GZIP_DEF="no" + MYSQL_BACKUP_GZIP_DESC="Compress MySQL database backups." + + MYSQL_BACKUP_DIR_SET="userinput" + MYSQL_BACKUP_DIR_DEF="/usr/local/directadmin/custombuild/mysql_backups" + MYSQL_BACKUP_DIR_DESC="Sets full path for mysql_backup option were MySQL backups should be placed." + + MYSQL_FORCE_COMPILE_SET="${YESNO_SET}" + MYSQL_FORCE_COMPILE_DEF="no" + MYSQL_FORCE_COMPILE_DESC="Force compilation of MySQL/MariaDB instead of using system packages (RPM, DEB)" + + PHPMYADMIN_SET="${YESNO_SET}" + if [ -e /root/.skip_mysql_install ]; then + PHPMYADMIN_DEF="no" + else + PHPMYADMIN_DEF="yes" + fi + PHPMYADMIN_DESC="Enables management of phpMyAdmin (Web application to manage MySQL databases) using CustomBuild." + + PHPMYADMIN_PUBLIC_SET="${YESNO_SET}" + PHPMYADMIN_PUBLIC_DEF="yes" + PHPMYADMIN_PUBLIC_DESC="Makes phpMyAdmin accessible over /phpMyAdmin/ for everyone, if set to 'yes'. Setting this option to 'no' would make it available only from DirectAdmin (single-sign-on)." + + PHPMYADMIN_VER_SET="3 4 5" + PHPMYADMIN_VER_DEF="5" + PHPMYADMIN_VER_DESC="Selects the version of phpMyAdmin to install. Takes effect only when phpmyadmin option is enabled." + + SQUIRRELMAIL_SET="${YESNO_SET}" + SQUIRRELMAIL_DEF="no" + SQUIRRELMAIL_DESC="Enables management of SquirrelMail webmail using CustomBuild." + + ROUNDCUBE_SET="${YESNO_SET}" + if [ -e /root/.skip_mysql_install ]; then + ROUNDCUBE_DEF="no" + else + ROUNDCUBE_DEF="yes" + fi + ROUNDCUBE_DESC="Enables management of RoundCube webmail using CustomBuild." + + WEBAPPS_INBOX_PREFIX_SET="${YESNO_SET}" + WEBAPPS_INBOX_PREFIX_DEF="no" + WEBAPPS_INBOX_PREFIX_DESC="Adds INBOX. prefix to all of the mailbox folders in SquirrelMail/RoundCube (like: INBOX.Sent instead of just Sent)" + + EXIM_SET="${YESNO_SET}" + EXIM_DEF="yes" + EXIM_DESC="Enables management of Exim MTA (Mail Transfer Agent) using CustomBuild." + + EXIMCONF_SET="${YESNO_SET}" + EXIMCONF_DEF="yes" + EXIMCONF_DESC="Enables ability to update exim.conf and exim.pl files of Exim MTA (rewrites any customizations!)." + + EXIMCONF_RELEASE_SET="2.1 4.2 4.3 4.4 4.5" + EXIMCONF_RELEASE_DEF="4.5" + EXIMCONF_RELEASE_DESC="Sets appopriate version of exim.conf to update." + + BLOCKCRACKING_SET="${YESNO_SET}" + BLOCKCRACKING_DEF="no" + BLOCKCRACKING_DESC="Enables BlockCracking in exim.conf for outgoing spam mitigation. Requires exim configuration version 4.3 or higher. More information: https://forum.directadmin.com/showthread.php?t=50059." + + EASY_SPAM_FIGHTER_SET="${YESNO_SET}" + EASY_SPAM_FIGHTER_DEF="no" + EASY_SPAM_FIGHTER_DESC="Enables Easy Spam Figher in exim.conf for incoming spam mitigation. Requires exim configuration version 4.3 or higher. More information: https://forum.directadmin.com/showthread.php?t=50059." + + CLAMAV_SET="${YESNO_SET}" + CLAMAV_DEF="no" + CLAMAV_DESC="Enables management of ClamAV antivirus engine using CustomBuild. Enables ClamAV automatically in Exim configuration." + + CLAMAV_EXIM_SET="${YESNO_SET}" + CLAMAV_EXIM_DEF="yes" + CLAMAV_EXIM_DESC="Enables ClamAV automatically in Exim configuration together with the installation of ClamAV." + + SPAMD_SET="rspamd spamassassin no" + SPAMD_DEF="no" + SPAMD_DESC="Enables management of Rspamd or SpamAssassin spam filters using CustomBuild. Enables Rspamd or SpamAssassin automatically in Exim configuration." + + SA_UPDATE_SET="no daily weekly monthly" + SA_UPDATE_DEF="daily" + SA_UPDATE_DESC="Installs a cronjob for sa-update to update SpamAssassin Spam Filter Rules daily, weekly or monthly using CustomBuild. Takes effect only if SpamAssassin is enabled on the server, at the installation time of SpamAssassin, CustomBuild cronjob or 'spamassassin_cron' call." + + DOVECOT_SET="${YESNO_SET}" + DOVECOT_DEF="yes" + DOVECOT_DESC="Enables management of Dovecot IMAP and POP3 email server using CustomBuild." + + DOVECOT_CONF_SET="${YESNO_SET}" + DOVECOT_CONF_DEF="yes" + DOVECOT_CONF_DESC="Enables management of Dovecot configuration files using CustomBuild." + + PIGEONHOLE_SET="${YESNO_SET}" + PIGEONHOLE_DEF="yes" + PIGEONHOLE_DESC="Enables management of Pigeonhole (enables Sieve language and the ManageSieve protocol, allows users to configure email filtering in their email clients) for Dovecot IMAP and POP3 email server using CustomBuild. When this setting is enabled, Pigeonhole is enabled with update/installation of Dovecot. RoundCube plugin to manage email filtering is enabled with update/installation of RoundCube." + + MAIL_COMPRESS_SET="${YESNO_SET}" + MAIL_COMPRESS_DEF="no" + MAIL_COMPRESS_DESC="Enables gzip compression for new emails (using zlib in dovecot). Compressed emails take less space (when testing, compressed mail folders took ~20% of their initial disk space). To compress old emails manual action is needed (script to automate the process: dovecot_compress.sh)." + + AWSTATS_SET="${YESNO_SET}" + AWSTATS_DEF="no" + AWSTATS_DESC="Enables management of AWstats (generates advanced web server statistics graphically) using CustomBuild." + + WEBALIZER_SET="${YESNO_SET}" + WEBALIZER_DEF="yes" + WEBALIZER_DESC="Enables management of Webalizer (generates advanced web server statistics graphically) using CustomBuild." + + MODSECURITY_UPLOADSCAN_SET="${YESNO_SET}" + MODSECURITY_UPLOADSCAN_DEF="no" + MODSECURITY_UPLOADSCAN_DESC="Scan HTTP uploaded files using ClamAV, when ModSecurity is enabled. ClamAV needs to be installed for this setting to work." + + FTPD_SET="proftpd pureftpd no" + FTPD_DEF="pureftpd" + FTPD_DESC="FTP Server." + + PUREFTPD_UPLOADSCAN_SET="${YESNO_SET}" + PUREFTPD_UPLOADSCAN_DEF="no" + PUREFTPD_UPLOADSCAN_DESC="Scan FTP uploaded files in Pure-FTPd using ClamAV. ClamAV needs to be installed for this setting to work." + + PROFTPD_UPLOADSCAN_SET="${YESNO_SET}" + PROFTPD_UPLOADSCAN_DEF="no" + PROFTPD_UPLOADSCAN_DESC="Scan FTP uploaded files in ProFTPd using ClamAV. ClamAV needs to be installed for this setting to work." + + CURL_SET="${YESNO_SET}" + CURL_DEF="no" + CURL_DESC="Enables management of cURL (library and command-line tool for transferring data using various protocols) using CustomBuild." + + SSL_CONFIGURATION_SET="modern intermediate old" + SSL_CONFIGURATION_DEF="intermediate" + SSL_CONFIGURATION_DESC="Auto-generated SSL ciphers/protocol list used in configuration, based on https://ssl-config.mozilla.org/." + + CUSTOMBUILD_SET="1.1 1.2 2.0" + CUSTOMBUILD_DEF="2.0" + CUSTOMBUILD_DESC="CustomBuild version to be used. WARNING: not recommended to change the setting without deep knowledge about upgrade/downgrade of the CustomBuild script." + + CUSTOMBUILD_PLUGIN_SET="${YESNO_SET}" + CUSTOMBUILD_PLUGIN_DEF="yes" + CUSTOMBUILD_PLUGIN_DESC="CustomBuild plugin, shown in DirectAdmin admin level." + + AUTOVER_SET="${YESNO_SET}" + AUTOVER_DEF="no" + AUTOVER_DESC="Updates versions.txt file (latest versions of the packages are listed there) with every execution of the CustomBuild script." + + BOLD_SET="${YESNO_SET}" + BOLD_DEF="yes" + BOLD_DESC="Enables bold effect for important output in terminal." + + CLEAN_SET="${YESNO_SET}" + CLEAN_DEF="yes" + CLEAN_DESC="Cleans not needed folders in the CustomBuild directory. Folders are often left from the previous packge installations." + + CLEANAPACHE_SET="${YESNO_SET}" + CLEANAPACHE_DEF="yes" + CLEANAPACHE_DESC="Removes Apache directory when the installation is finished. Takes effect only when 'clean' option is enabled." + + CLEAN_OLD_TARBALLS_SET="${YESNO_SET}" + CLEAN_OLD_TARBALLS_DEF="yes" + CLEAN_OLD_TARBALLS_DESC="Removes tarballs of old (unused) packages." + + CLEAN_OLD_WEBAPPS_SET="${YESNO_SET}" + CLEAN_OLD_WEBAPPS_DEF="yes" + CLEAN_OLD_WEBAPPS_DESC="Removes old WEB application folders from /var/www/html. Takes effect when any WEB application is installed/updated." + + DOWNLOADSERVER_SET="da-mirror.wpcloud.vn" + if [ -s ${WORKDIR}/servers.txt ]; then + DOWNLOADSERVER_SET="da-mirror.wpcloud.vn `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`" + fi + DOWNLOADSERVER_DEF="da-mirror.wpcloud.vn" + DOWNLOADSERVER_DESC="Sets which download server to use to download files needed by the CustomBuild script. Any other server than ${DOWNLOADSERVER_DEF} may take 24 hours for latest files to be synced, however they may have better speeds than ${DOWNLOADSERVER_DEF}." + + UNOFFICIAL_MIRRORS_SET="${YESNO_SET}" + UNOFFICIAL_MIRRORS_DEF="no" + UNOFFICIAL_MIRRORS_DESC="Enables the use of unofficial mirror. DirectAdmin is not responsible for the content hosted there. Not recommended to use." + + CRON_SET="${YESNO_SET}" + CRON_DEF="yes" + CRON_DESC="Enables cronjob for CustomBuild scheduled jobs set." + + CRON_FREQUENCY_SET="daily weekly monthly" + CRON_FREQUENCY_DEF="daily" + CRON_FREQUENCY_DESC="Sets the execution frequency of the Cronjob (scheduled jobs). Takes effect only when the 'cron' option is enabled." + + EMAIL_SET="userinput" + EMAIL_DEF="email@domain.com" + EMAIL_DESC="Sets the email for notifications about the updates available. Takes effect only when 'cron' and 'notifications' options are enabled." + + NOTIFICATIONS_SET="${YESNO_SET}" + NOTIFICATIONS_DEF="no" + NOTIFICATIONS_DESC="Sets the email for notifications about the updates available. Takes effect only when 'cron' option is enabled." + + DA_AUTOUPDATE_SET="${YESNO_SET}" + DA_AUTOUPDATE_DEF="no" + DA_AUTOUPDATE_DESC="Sets DirectAdmin to be updated automatically when the Cronjob is executed. Takes effect only when 'cron' option is enabled." + + UPDATES_SET="${YESNO_SET}" + UPDATES_DEF="no" + UPDATES_DESC="Enables automatic updates of all available to update packages managed by the CustomBuild script. Takes effect only when 'cron' option is enabled. WARNING: not recommended in production!" + + WEBAPPS_UPDATES_SET="${YESNO_SET}" + WEBAPPS_UPDATES_DEF="no" + WEBAPPS_UPDATES_DESC="Enables automatic updates of all WEB applications enabled. Takes effect only when 'cron' option is enabled." + + CSF_SET="${YESNO_SET}" + CSF_DEF="no" + CSF_DESC="Enables ConfigServer Security & Firewall (csf)." + + CLOUDLINUX_SET="${YESNO_SET}" + if uname -a | grep -m1 -q '\.lve' || uname -a | grep -m1 -q 'el7h'; then + CLOUDLINUX_DEF="yes" + else + CLOUDLINUX_DEF="no" + fi + CLOUDLINUX_DESC="Enables CloudLinux support in the CustomBuild script (automatic patching using CloudLinux patches for specific components). NOTE: CloudLinux needs to be installed on the system. https://www.cloudlinux.com." + + CLOUDLINUX_BETA_SET="${YESNO_SET}" + CLOUDLINUX_BETA_DEF="no" + CLOUDLINUX_BETA_DESC="Enables BETA repository for CloudLinux packages. NOTE: CloudLinux needs to be installed on the system. https://www.cloudlinux.com." + + CAGEFS_SET="${YESNO_SET}" + if [ -x /usr/sbin/cagefsctl ]; then + CAGEFS_DEF="yes" + else + CAGEFS_DEF="no" + fi + CAGEFS_DESC="Enables support of CageFS component by CloudLinux in the CustomBuild script (automatic updating of files in CageFS using 'cagefsctl --force-update'). NOTE: CloudLinux needs to be installed on the system. https://www.cloudlinux.com." +fi +################################################# + +showVersion() { + echo "${BUILDSCRIPT_VER} (rev: 2830)" +} + +if [ ! -d ${WORKDIR}/patches ]; then + mkdir -p ${WORKDIR}/patches + chmod 700 ${WORKDIR}/patches +fi + +doCSFpignore() { + if [ "${OS}" != "FreeBSD" ]; then + CSF_PIGNORE="/etc/csf/csf.pignore" + CSF_PIGNORE_SOURCE="${WORKDIR}/configure/csf.pignore" + if [ -s ${WORKDIR}/custom/csf.pignore ]; then + CSF_PIGNORE_SOURCE="${WORKDIR}/custom/csf.pignore" + fi + if [ -s ${CSF_PIGNORE} ] && [ -s ${CSF_PIGNORE_SOURCE} ]; then + #very nice&quick way to add missing lines in destination file + grep -x -f ${CSF_PIGNORE_SOURCE} ${CSF_PIGNORE} | awk 'FNR==NR{a[$0]; next} !($0 in a)' - ${CSF_PIGNORE_SOURCE} >> ${CSF_PIGNORE} + #if file has been edited - restart lfd (suppress errors/warnings, as it could be disabled) + find ${CSF_PIGNORE} -mmin -1 -type f -print -exec csf --lfd restart 2>&1 >/dev/null \; + fi + fi +} + +initLogfile() { + LOG_IP=localhost + if [ `who | wc -l` -gt 0 ]; then + if [ ${OS} = "FreeBSD" ]; then + LOG_IP=`env | grep -m1 "REMOTEHOST" | cut -d= -f2` + else + LOG_IP=`echo $SSH_CLIENT | cut -d' ' -f1` + fi + fi + + if [ ! -e ${LOGFILE} ]; then + touch ${LOGFILE} + chmod 600 ${LOGFILE} + else + if [ ${OS} = "FreeBSD" ]; then + LOGSIZE=`stat -f %z ${LOGFILE}` + else + LOGSIZE=`stat -c %s ${LOGFILE}` + fi + + #Rotate the logfile if the filesize is >10MB + if [ ${LOGSIZE} -gt 10485760 ]; then + rm -f ${LOGFILE}.1 + mv ${LOGFILE} ${LOGFILE}.1 + touch ${LOGFILE} + chmod 600 ${LOGFILE} + fi + fi +} + +if uname -m | grep -qE -m1 'amd64|x86_64'; then + B64=1 + LD_LIBRARY_PATH=/usr/lib/apache:/usr/local/icu/lib:/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/lib64:/lib + export LD_LIBRARY_PATH + PKG_CONFIG_PATH=/usr/local/icu/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig + export PKG_CONFIG_PATH + if [ "${OS_CENTOS_VER}" = "6" ]; then + export KERBEROS_LIBS="-L/usr/lib64 -lkrb5 -lk5crypto -lgssapi_krb5" + export KERBEROS_CFLAGS="-I/usr/include" + export ONIG_LIBS="-L/usr/lib64 -lonig" + export ONIG_CFLAGS="-I/usr/include" + export JPEG_LIBS="-L/usr/lib64 -ljpeg" + export JPEG_CFLAGS="-I/usr/include" + fi +elif [ "${OS_CENTOS_VER}" = "6" ]; then + LD_LIBRARY_PATH=/usr/lib/apache:/usr/local/icu/lib:/usr/local/lib:/usr/lib:/lib64:/lib + export LD_LIBRARY_PATH + PKG_CONFIG_PATH=/usr/local/icu/lib/pkgconfig:/usr/local/lib/pkgconfig + export PKG_CONFIG_PATH + export KERBEROS_LIBS="-L/usr/lib -lkrb5 -lk5crypto -lgssapi_krb5" + export KERBEROS_CFLAGS="-I/usr/include" + export ONIG_LIBS="-L/usr/lib -lonig" + export ONIG_CFLAGS="-I/usr/include" + export JPEG_LIBS="-L/usr/lib -ljpeg" + export JPEG_CFLAGS="-I/usr/include" +fi + +if [ ${OS} = "FreeBSD" ]; then + CPU_CORES=`/sbin/sysctl hw.ncpu | cut -d\ -f2` + MEMORY=`/sbin/sysctl hw.realmem | cut -d\ -f2` + PROFTPD_PREFIX=/usr/local +else + if [ "`cat /proc/cpuinfo | grep -F 'model name' | wc -l`" -gt 0 ]; then + CPU_CORES="`cat /proc/cpuinfo | grep -F 'model name' | wc -l`" + fi + MEMORY=`grep -m1 'MemTotal' /proc/meminfo | awk '{print $2}'` +fi + +#Avoid OOM by making CB not cross-compile on boxes with low amount of memory +if [ ! -z "${MEMORY}" ]; then + if [ ${OS} = "FreeBSD" ]; then + if [ ${MEMORY} -lt 2147483648 ]; then + CPU_CORES=1 + fi + elif [ ${MEMORY} -lt 2097152 ]; then + CPU_CORES=1 + fi +fi + +#check path for /usr/local/bin +if ! echo "${PATH}" | grep -qF -m1 '/usr/local/bin:'; then + export PATH=/usr/local/bin:$PATH +fi + +#check PKG_CONFIG_PATH for /usr/local/lib/pkgconfig +if ! echo "${PKG_CONFIG_PATH}" | grep -qF -m1 '/usr/local/lib/pkgconfig:'; then + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH} +fi + +# Main variables +HTTPDDIR=/etc/httpd +HTTPDCONF=/etc/httpd/conf +HTTPD_CONF=${HTTPDCONF}/httpd.conf +PHPMODULES=${HTTPDCONF}/extra/httpd-phpmodules.conf + +NGINXCONF=/etc/nginx + +WWWDIR=/var/www/html + +DACONF_FILE=/usr/local/directadmin/conf/directadmin.conf +DACONF_TEMPLATE_FILE=/usr/local/directadmin/data/templates/directadmin.conf +DA_MY_CNF=/usr/local/directadmin/conf/my.cnf +SERVICES=/usr/local/directadmin/data/admin/services.status +TASK_QUEUE=/usr/local/directadmin/data/task.queue.cb + +DOVECOT_CONFIG=/etc/dovecot/dovecot.conf + +SKIP_CMD_OPTIONS=0 +skip_cmd_toggle() { + SKIP_CMD_OPTIONS=1 +} +case "$1" in + "") skip_cmd_toggle ;; + opt_help) skip_cmd_toggle ;; + set) skip_cmd_toggle ;; + set_php) skip_cmd_toggle ;; + get_versions_txt) skip_cmd_toggle ;; + update_script) skip_cmd_toggle ;; + version) skip_cmd_toggle ;; + kill) skip_cmd_toggle ;; + update_da) skip_cmd_toggle ;; + list_configs_json) skip_cmd_toggle ;; + settings_json) skip_cmd_toggle ;; + get_timezone) skip_cmd_toggle ;; + custom_config) skip_cmd_toggle ;; + set_versions_txt) skip_cmd_toggle ;; + show_component_config) skip_cmd_toggle ;; + remove_customized_config) skip_cmd_toggle ;; + show_file) skip_cmd_toggle ;; + check_options) skip_cmd_toggle ;; + update) skip_cmd_toggle ;; + update_data) skip_cmd_toggle ;; + gen_help_json) skip_cmd_toggle ;; + versions_json) skip_cmd_toggle ;; + versions_ajax) skip_cmd_toggle ;; + versions_nobold) skip_cmd_toggle ;; + versions) skip_cmd_toggle ;; + gen_help) skip_cmd_toggle ;; + list_removals) skip_cmd_toggle ;; + list_removals_json) skip_cmd_toggle ;; + remove_items) skip_cmd_toggle ;; +esac + +IPV6=0 +if [ "${SKIP_CMD_OPTIONS}" = "0" ]; then + if [ -e ${DA_BIN} ]; then + IPV6=`${DA_BIN} c | grep -m1 '^ipv6=' | cut -d= -f2` + fi +fi + +CWD=${WORKDIR} +FORCE=0 +HIDE_CHANGES=0 + +# Applications variables +APPUSER=webapps +APPGROUP=${APPUSER} +APP_TMP=/var/www/tmp + +STRINGS=/usr/bin/strings +MYSQL_DATA=/var/lib/mysql +if [ "${OS}" = "FreeBSD" ]; then + if [ ! -d /var/lib/mysql/mysql ]; then + MYSQL_DATA=/home/mysql + fi + MYSQL_BIN=/usr/local/mysql/bin/mysql +else + if [ -e /etc/debian_version ]; then + if [ ! -d /var/lib/mysql/mysql ] && [ -d /home/mysql ]; then + MYSQL_DATA=/home/mysql + fi + MYSQL_BIN=/usr/local/mysql/bin/mysql + else + MYSQL_BIN=/usr/bin/mysql + fi +fi + +#Check if mysql database exists +if [ -d ${MYSQL_DATA}/mysql ]; then + SQL_PATH_IS_EMPTY=false +else + SQL_PATH_IS_EMPTY=true +fi + +CURL_CONNECT_OPTIONS="-L --progress-bar --connect-timeout 5 --retry 3" + +MARIADB_DEF="10.4" +MYSQL_DEF="5.7" + +if [ "${OS_CENTOS_VER}" = "8" ]; then + #We don't have RPMs for EL8 of older versions in our mirrors + MARIADB_SET="10.3 10.4 10.5 10.6 11.4" + MYSQL_SET="8.0" + MYSQL_DEF="8.0" +else + if [ "${OS_CENTOS_VER}" = "6" ]; then + #no 10.5+ on centos6 + MARIADB_SET="5.5 10.0 10.1 10.2 10.3 10.4" + else + MARIADB_SET="5.5 10.0 10.1 10.2 10.3 10.4 10.5 10.6 11.4" + fi + MYSQL_SET="5.5 5.6 5.7 8.0" +fi + +# Check if workdir exists +if [ ! -d ${WORKDIR} ]; then + do_exit 1 "Directory ${WORKDIR} does not exist." +fi + +file_mtime="stat --format=%Y" +if [ "${OS}" = "FreeBSD" ]; then + file_mtime="stat -f %m" +fi + +set_LoadModule() { + # Add to httpd-phpmodules.conf + MODULE_NAME=$1 + MODULE_FILENAME=$2 + MODULE_FULLPATH=/usr/lib/apache/${MODULE_FILENAME} + if ! grep -m1 -q " ${MODULE_NAME} " ${PHPMODULES} && [ -e ${MODULE_FULLPATH} ]; then + echo "LoadModule ${MODULE_NAME} /usr/lib/apache/${MODULE_FILENAME}" >> ${PHPMODULES} + fi + perl -pi -e "s|^LoadModule ${MODULE_NAME}|#LoadModule ${MODULE_NAME}|g" /etc/httpd/conf/httpd.conf +} + +ensure_my_cnf() { + #1 = path to cnf + #2 = user + #3 = pass + #4 = optional source file to compare with. update 1 if 4 is newer. + # host will be on the command line, as that's how DA already does it. + + E_MY_CNF=$1 + + E_MY_CNF_DIR="`dirname ${E_MY_CNF}`" + + if [ ! -d ${E_MY_CNF_DIR} ]; then + mkdir -p ${E_MY_CNF_DIR} + fi + + W=0 + if [ ! -s ${E_MY_CNF} ]; then + W=1 + fi + + if [ "${W}" = "0" ] && [ "${4}" != "" ]; then + if [ ! -s $4 ]; then + if [ -d "${MYSQL_DATA}" ]; then + echo "ensure_my_cnf: cannot find $4" + fi + W=1 + else + MY_CNF_T=`${file_mtime} ${E_MY_CNF}` + SRC_CNF_T=`${file_mtime} ${4}` + + if [ "${MY_CNF_T}" -lt "${SRC_CNF_T}" ]; then + echo "Found outdated ${E_MY_CNF}. Rewriting from ${4}" + W=1 + fi + fi + fi + + if [ "${W}" = "1" ]; then + echo '[client]' > ${E_MY_CNF} + chmod 600 ${E_MY_CNF} + echo "user=${2}" >> ${E_MY_CNF} + echo "password=${3}" >> ${E_MY_CNF} + fi +} + +csf_enable_quic() { + if [ -s /etc/csf/csf.conf ]; then + CSFRESTART=false + if ! grep -m1 -q '^UDP_IN = ".*443' /etc/csf/csf.conf && grep -m1 -q '^TCP_IN = ".*443' /etc/csf/csf.conf; then + if ! grep -m1 -q '^UDP_IN = ""' /etc/csf/csf.conf; then + perl -pi -e 's|^UDP_IN \= "|UDP_IN = "443,|g' /etc/csf/csf.conf + CSFRESTART=true + fi + fi + if ! grep -m1 -q '^UDP_OUT = ".*443' /etc/csf/csf.conf && grep -m1 -q '^TCP_OUT = ".*443' /etc/csf/csf.conf; then + if ! grep -m1 -q '^UDP6_IN = ""' /etc/csf/csf.conf; then + perl -pi -e 's|^UDP_OUT \= "|UDP_OUT = "443,|g' /etc/csf/csf.conf + CSFRESTART=true + fi + fi + if ! grep -m1 -q '^UDP6_IN = ".*443' /etc/csf/csf.conf && grep -m1 -q '^TCP6_IN = ".*443' /etc/csf/csf.conf; then + if ! grep -m1 -q '^UDP6_IN = ""' /etc/csf/csf.conf; then + perl -pi -e 's|^UDP6_IN \= "|UDP6_IN = "443,|g' /etc/csf/csf.conf + CSFRESTART=true + fi + fi + if ! grep -m1 -q '^UDP6_OUT = ".*443' /etc/csf/csf.conf && grep -m1 -q '^TCP6_OUT = ".*443' /etc/csf/csf.conf; then + if ! grep -m1 -q '^UDP6_OUT = ""' /etc/csf/csf.conf; then + perl -pi -e 's|^UDP6_OUT \= "|UDP6_OUT = "443,|g' /etc/csf/csf.conf + CSFRESTART=true + fi + fi + if ${CSFRESTART} && csf --status 2&>1 >/dev/null; then + echo "Opened UDP ports for QUIC in CSF, restarting CSF..." + /usr/sbin/csf -r 2&>1 >/dev/null + fi + fi +} + +csf_enable_rspamd() { + if [ -s /etc/csf/csf.conf ]; then + CSFRESTART=false + if ! grep -m1 -q '^UDP_OUT = ".*11335' /etc/csf/csf.conf; then + if ! grep -m1 -q '^UDP6_IN = ""' /etc/csf/csf.conf; then + perl -pi -e 's|^UDP_OUT \= "|UDP_OUT = "11335,|g' /etc/csf/csf.conf + CSFRESTART=true + fi + fi + if ! grep -m1 -q '^UDP6_OUT = ".*11335' /etc/csf/csf.conf; then + if ! grep -m1 -q '^UDP6_OUT = ""' /etc/csf/csf.conf; then + perl -pi -e 's|^UDP6_OUT \= "|UDP6_OUT = "11335,|g' /etc/csf/csf.conf + CSFRESTART=true + fi + fi + if ${CSFRESTART} && csf --status 2&>1 >/dev/null; then + echo "Opened UDP ports for Rspamd in CSF, restarting CSF..." + /usr/sbin/csf -r 2&>1 >/dev/null + fi + fi +} + +create_global_modsecurity_rules() { + if [ ! -e /usr/local/directadmin/data/admin/modsecurity_rules ]; then + touch /usr/local/directadmin/data/admin/modsecurity_rules + chmod 600 /usr/local/directadmin/data/admin/modsecurity_rules + chown diradmin:diradmin /usr/local/directadmin/data/admin/modsecurity_rules + fi +} + +initMySQL() { + if [ "${MYSQL_OPT}" = "8.0" ] && [ "${MYSQL_INST_OPT}" = "mysql" ]; then + SKIP_MYSQL_UPGRADE=true + else + SKIP_MYSQL_UPGRADE=false + fi + + #MySQL settings + DA_MYSQL=/usr/local/directadmin/conf/mysql.conf + if [ -s ${DA_MYSQL} ]; then + MYSQLUSER=`grep -m1 "^user=" ${DA_MYSQL} | cut -d= -f2` + MYSQLPASSWORD=`grep -m1 "^passwd=" ${DA_MYSQL} | cut -d= -f2` + else + MYSQLUSER='da_admin' + MYSQLPASSWORD='nothing' + fi + + if [ -s $DA_MYSQL ] && [ `grep -m1 -c -e "^host=" ${DA_MYSQL}` -gt "0" ]; then + MYSQLHOST=`grep -m1 "^host=" ${DA_MYSQL} | cut -d= -f2` + else + MYSQLHOST=localhost + fi + + #Where connections to mysql are from. Usualy the server IP, unless on a LAN. + MYSQL_ACCESS_HOST=localhost + if [ "$MYSQLHOST" != "localhost" ]; then + MYSQL_ACCESS_HOST="`grep -r -l -m1 '^status=server$' /usr/local/directadmin/data/admin/ips | cut -d/ -f8`" + if [ "${MYSQL_ACCESS_HOST}" = "" ]; then + MYSQL_ACCESS_HOST="`grep -im1 ${HOSTNAME} /etc/hosts | awk '{print $1}'`" + if [ "${MYSQL_ACCESS_HOST}" = "" ]; then + if [ -s ${WORKDIR}/scripts/setup.txt ]; then + MYSQL_ACCESS_HOST=`cat ${WORKDIR}/scripts/setup.txt | grep -m1 -e '^ip=' | cut -d= -f2` + fi + if [ "${MYSQL_ACCESS_HOST}" = "" ]; then + echo "Unable to detect your server IP in /etc/hosts. Please enter it: " + read MYSQL_ACCESS_HOST + fi + fi + fi + fi + + ensure_my_cnf ${DA_MY_CNF} "${MYSQLUSER}" "${MYSQLPASSWORD}" "${DA_MYSQL}" + chown diradmin:diradmin ${DA_MY_CNF} +} + +allSettings_options() { + for section in $ALL_SECTIONS; do + DESC=${section}_DESC + echo "#$(eval_var ${DESC})" + COUNT="0" + + if [ ${section} = "PHP_EXT_SETTINGS" ]; then + continue + fi + + for setting in $(eval_var ${section}); do + SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"` + POSSIBLE_VALUES_VAR=${setting}_SET + POSSIBLE_VALUES="`echo $(eval_var ${POSSIBLE_VALUES_VAR}) | awk -v OFS=", " '$1=$1'`" + DEFAULT_VALUE=${setting}_DEF + CURRENT_VALUE=${setting}_OPT + if [ ! -z "$(eval_var ${SETTING_NAME})" ]; then + echo "${SETTING_NAME}=$(eval_var ${SETTING_NAME})" + else + echo "${SETTING_NAME}=$(eval_var ${DEFAULT_VALUE})" + fi + COUNT="1" + done + if [ "${COUNT}" = "1" ]; then + echo "" + fi + done + echo '#PHP extensions can be found in php_extensions.conf' +} + +allSettings_php_extensions() { + echo "#PHP Extension Settings" + + for setting in $(eval_var ${PHP_EXT_SETTINGS}); do + SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"` + POSSIBLE_VALUES_VAR=PHP_${setting}_SET + POSSIBLE_VALUES="`echo $(eval_var ${POSSIBLE_VALUES_VAR}) | awk -v OFS=", " '$1=$1'`" + DEFAULT_VALUE=PHP_${setting}_DEF + CURRENT_VALUE=PHP_${setting}_OPT + EXPORTED_SETTING_NAME="php_${SETTING_NAME}" + if [ ! -z "$(eval_var ${EXPORTED_SETTING_NAME})" ]; then + echo "${SETTING_NAME}=$(eval_var ${EXPORTED_SETTING_NAME})" + else + echo "${SETTING_NAME}=$(eval_var ${DEFAULT_VALUE})" + fi + done +} + +# Write options.conf +if [ "${OPTIONS_CONF_EXISTS}" = "0" ]; then + echo "Cannot find ${OPTIONS_CONF}, writing defaults." + allSettings_options > ${OPTIONS_CONF} + allSettings_php_extensions > ${PHP_EXTENSIONS_CONF} +fi + +# Write php_extensions.conf exists +if [ ! -s "${PHP_EXTENSIONS_CONF}" ] && [ -s "${OPTIONS_CONF}" ]; then + for option in `echo "${PHP_EXT_SETTINGS}" | tr '[A-Z]' '[a-z]'`; do { + if grep -m1 -q "^${option}=" "${OPTIONS_CONF}"; then + grep -m1 "^${option}=" "${OPTIONS_CONF}" >> ${PHP_EXTENSIONS_CONF} + sed -i "/^${option}=/d" "${OPTIONS_CONF}" + fi + } + done +fi + +# Check if options.conf exists +if [ -s ${PHP_EXTENSIONS_CONF} ]; then + #Read php_extensions.conf as 'source' + PHP_EXTENSIONS_CONF_SOURCE=`grep -o "^[a-zA-Z0-9_]*=[^;<>\'\!=() ]*" ${PHP_EXTENSIONS_CONF} | perl -p -e 's|^|php_|g'` + eval ${PHP_EXTENSIONS_CONF_SOURCE} +fi + +# Check if options.conf exists +if [ ! -e ${OPTIONS_CONF} ]; then + do_exit 1 "Options file options.conf does not exist." +else + #Read options.conf as 'source' + OPTIONS_CONF_SOURCE=`grep -o "^[a-zA-Z0-9_]*=[^;<>\'\!=() ]*" ${OPTIONS_CONF}` + eval ${OPTIONS_CONF_SOURCE} +fi + +# init.d scripts +if [ "${OS}" = "FreeBSD" ]; then + INITDDIR=/usr/local/etc/rc.d +else + INITDDIR=/etc/init.d +fi + +#################################################### + +run_dataskq() { + DATASKQ_OPT=$1 + if [ -s ${DACONF_FILE} ]; then + /usr/local/directadmin/dataskq ${DATASKQ_OPT} --custombuild + fi +} + +cagefsctl_update() { + if [ "${CAGEFS_OPT}" = "yes" ] && [ -e /usr/sbin/cagefsctl ]; then + echo "CageFS: Executing 'cagefsctl --force-update'..." + if [ -e /usr/bin/ionice ]; then + /usr/bin/ionice -c3 /usr/sbin/cagefsctl --force-update + else + /usr/sbin/cagefsctl --force-update + fi + cagefsctl --remount-all + fi +} + +writeLog() { + initLogfile + echo "`date +'%Y-%m-%d %H:%M:%S'` ${LOG_IP}: $@" >> ${LOGFILE} +} + +get_line_from_file() { + #$1 is any part of the name, make sure it wouldn't have duplicates, as it'd select only the first instance of the match + #$2 is full path to txt file + if [ ! -s $2 ]; then + do_exit 1 "$2 does not exist." + fi + + if grep -m1 -q "^$1" $2; then + RESULT="`grep -m1 \"^$1\" ${WORKDIR}/$2`" + else + RESULT="" + fi + + echo "${RESULT}" +} + +EXISTS_VERSIONS_FILE_CUSTOM=false +if [ -s ${VERSIONS_FILE_CUSTOM} ]; then + EXISTS_VERSIONS_FILE_CUSTOM=true +fi +getVer() { + APEEND=`echo ${1} | awk '{gsub(/\./,"_",$1);gsub(/-/,"_",$1);print $1;}'` + RESULT=$(eval_var VERSIONS_TXT_${APEEND}) + + if [ "${RESULT}" = "" ]; then + >&2 echo "ERROR: version of $1 not found in versions.txt!" + RESULT="0" + fi + + echo "${RESULT}" +} + +getMD5() { + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 3` + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE} | cut -d ':' -f 3` + fi + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE} | cut -d ':' -f 3` + fi + + if [ "${RESULT}" = "" ]; then + RESULT=`grep -m1 ^$1: ${PATCHES_VERSIONS_FILE} | cut -d ':' -f 3` + fi + + echo "${RESULT}" +} + +do_exit() { + if [ "$2" != "" ]; then + echo "$2" + fi + removeLockfile + if ${NEW_INSTALL}; then + echo "action=notify&value=admin&subject=CustomBuild installation has failed&message=CustomBuild installation has failed, please check the following file for more information:%0A/usr/local/directadmin/custombuild/install.txt" >> ${TASK_QUEUE} + run_dataskq + fi + exit $1 +} + +getDA_Opt() { + #$1 is option name + #$2 is default value + + if [ ! -s ${DACONF_FILE} ]; then + echo $2 + return + fi + + if ! ${DA_BIN} c | grep -m1 -q -e "^$1="; then + echo $2 + return + fi + + + ${DA_BIN} c | grep -m1 "^$1=" | cut -d= -f2 +} + +getPhpOpt() { + #$1 is option name + #$2 is default value + + FULL_VARIABLE=php_$1 + GET_OPTION="$(eval_var ${FULL_VARIABLE})" + if [ "${GET_OPTION}" = "" ]; then + if grep -m1 -q "^${1}=" "${OPTIONS_CONF}"; then + grep -m1 "^${1}=" "${OPTIONS_CONF}" >> ${PHP_EXTENSIONS_CONF} + sed -i "/^${1}=/d" "${OPTIONS_CONF}" + GET_OPTION=`grep -m1 "^${1}=" "${PHP_EXTENSIONS_CONF}" | cut -d= -f2` + eval `echo "${FULL_VARIABLE}=${2}"` + else + echo "$1=$2" >> ${PHP_EXTENSIONS_CONF} + GET_OPTION="${2}" + eval `echo "${FULL_VARIABLE}=${2}"` + fi + fi + + echo ${GET_OPTION} +} + +getOpt() { + #$1 is option name + #$2 is default value + + GET_OPTION="$(eval_var $1)" + if [ "${GET_OPTION}" = "" ]; then + echo "$1=$2" >> ${OPTIONS_CONF} + GET_OPTION="${2}" + eval `echo "${1}=${2}"` + fi + + echo ${GET_OPTION} +} + +#eg, CentOS 6.7 returns 6 +da_os_major_version() { + /usr/local/directadmin/directadmin o | grep 'Compiled on' | head -n1 | cut -d. -f1 | awk '{print $4}' +} + +os_license_mismatch() { + return; + DA_OS_NAME=`/usr/local/directadmin/directadmin o | grep 'Compiled on' | head -n1 | awk '{print $3}' | cut -d\' -f2` + DA_MAJOR_OS_VER=`da_os_major_version` + if [ "${OS}" = "FreeBSD" ]; then + if [ "${DA_OS_NAME}" != "FreeBSD" ]; then + echo "${boldon}Your license OS (${DA_OS_NAME}) does not match the OS installed (FreeBSD).${boldoff}" + fi + elif [ -e ${DEBIAN_VERSION} ] && [ "${DA_OS_NAME}" != "Linux" ]; then + if [ "${OS_DEBIAN_VER}" != "${DA_MAJOR_OS_VER}" ] || [ "${DA_OS_NAME}" != "Debian" ]; then + # Hiding the warning on ubuntu + if ! gcc --version | grep -m1 -q 'ubuntu'; then + echo "${boldon}Your license OS (${DA_OS_NAME} ${DA_MAJOR_OS_VER}) does not match the OS installed (Debian ${OS_DEBIAN_VER}).${boldoff}" + fi + fi + elif [ "${DA_OS_NAME}" != "Linux" ]; then + if [ "${OS_CENTOS_VER}" != "${DA_MAJOR_OS_VER}" ] || [ "${DA_OS_NAME}" != "CentOS" ]; then + echo "${boldon}Your license OS (${DA_OS_NAME} ${DA_MAJOR_OS_VER}) does not match the OS installed (CentOS ${OS_CENTOS_VER}).${boldoff}" + fi + fi +} + +have_php_system() { + #Checks to see if we can use system() based on the disable_functions + if [ ! -s "${PHP_INI}" ]; then + echo 1 + return + fi + + C=`grep -m1 -c ^disable_functions ${PHP_INI}` + if [ "${C}" -eq 0 ]; then + echo 1 + return + fi + + C=`grep -m1 ^disable_functions ${PHP_INI} | grep -m1 -c system` + if [ "${C}" -eq 1 ]; then + echo 0 + return + fi + + echo 1 + return +} + +secure_phpini() { + if [ -e $1 ]; then + if grep -m1 -q -e disable_functions $1; then + CURRENT_DISABLE_FUNCT="`grep -m1 'disable_functions' $1`" + if [ -s ${WORKDIR}/custom/php_disable_functions ]; then + NEW_DISABLE_FUNCT="`head -n1 ${WORKDIR}/custom/php_disable_functions`" + else + NEW_DISABLE_FUNCT="exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname" + fi + perl -pi -e "s#${CURRENT_DISABLE_FUNCT}#disable_functions \= ${NEW_DISABLE_FUNCT}#" $1 + else + echo "disable_functions = ${NEW_DISABLE_FUNCT}" >> $1 + fi + + perl -pi -e 's/^register_globals = On/register_globals = Off/' $1 + + perl -pi -e 's/^mysql.allow_local_infile = On/mysql.allow_local_infile = Off/' $1 + perl -pi -e 's/^mysqli.allow_local_infile = On/mysqli.allow_local_infile = Off/' $1 + perl -pi -e 's/^;mysqli.allow_local_infile = On/mysqli.allow_local_infile = Off/' $1 + + perl -pi -e 's/^expose_php = On/expose_php = Off/' $1 + + writeLog "secure_phpini: $1 secured" + fi +} + +#################################################### + +secure_php() { + if [ "${SECURE_PHP_OPT}" != "yes" ]; then + setOpt secure_php yes + fi + secure_phpini ${PHP_INI} + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + EVAL_PHP_INI_VAR=PHP_INI_FPM${php_shortrelease} + secure_phpini $(eval_var ${EVAL_PHP_INI_VAR}) + done + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + if [ -e /etc/cl.selector/global_php.ini ]; then + secure_phpini /etc/cl.selector/global_php.ini + if [ -e /usr/sbin/cagefsctl ]; then + /usr/sbin/cagefsctl --setup-cl-selector + fi + fi + fi + echo "PHP has been secured." + RESTART_APACHE="1" + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + echo "Restarting php-fpm${PHP1_SHORTRELEASE}." + control_service php-fpm${PHP1_SHORTRELEASE} restart + RESTART_APACHE="0" + fi + if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP2_SHORTRELEASE}." + control_service php-fpm${PHP2_SHORTRELEASE} restart + fi + if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP3_SHORTRELEASE}." + control_service php-fpm${PHP3_SHORTRELEASE} restart + fi + if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP4_SHORTRELEASE}." + control_service php-fpm${PHP4_SHORTRELEASE} restart + fi + + if [ "${RESTART_APACHE}" = "1" ]; then + control_service httpd restart + fi +} + +#Used to set values ON/OFF in the services.status. +#set_service name ON|OFF|delete +set_service() { + if [ ! -e ${SERVICES} ]; then + if [ ! -d /usr/local/directadmin/data/admin ]; then + mkdir -p /usr/local/directadmin/data/admin + chown diradmin:diradmin /usr/local/directadmin/data/admin + chown diradmin:diradmin /usr/local/directadmin/data + chmod 700 /usr/local/directadmin/data/admin + chmod 711 /usr/local/directadmin/data + fi + touch ${SERVICES} + chown diradmin:diradmin ${SERVICES} + chmod 600 ${SERVICES} + fi + + if [ "$2" = "delete" ]; then + if ! grep -q "^$1=" ${SERVICES}; then + return + else + perl -pi -e "s/^${1}=.*\n//" ${SERVICES} + fi + return + fi + + if [ "$2" = "ON" ] || [ "$2" = "OFF" ]; then + if ! grep -q "^$1=" ${SERVICES}; then + echo "$1=$2" >> ${SERVICES} + else + perl -pi -e "s/^$1=.*/$1=$2/" ${SERVICES} + fi + + return + fi + + echo "setService $1: unknown option: $2" +} + +control_service() { + SERVICE_NAME=$1 + SERVICE_ACTION=$2 + + if [ "${SYSTEMD}" = "yes" ] && [ -e ${SYSTEMDDIR}/${SERVICE_NAME}.service ]; then + systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service + elif [ "${SYSTEMD}" = "yes" ] && [ -e /lib/systemd/system/${SERVICE_NAME}.service ]; then + systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service + else + if [ -e ${INITDDIR}/${SERVICE_NAME} ]; then + ${INITDDIR}/${SERVICE_NAME} ${SERVICE_ACTION} + elif [ "${SERVICE_NAME}" = "mysqld" ]; then + SERVICE_NAME=mariadb + if [ "${SYSTEMD}" = "yes" ] && [ -e ${SYSTEMDDIR}/${SERVICE_NAME}.service ]; then + systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service + elif [ "${SYSTEMD}" = "yes" ] && [ -e /lib/systemd/system/${SERVICE_NAME}.service ]; then + systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service + else + if [ -e ${INITDDIR}/${SERVICE_NAME} ]; then + ${INITDDIR}/${SERVICE_NAME} ${SERVICE_ACTION} + fi + fi + fi + fi +} + + +#sets the value of $1 to $2 in the file $3 +setVal() { + if [ ! -e $3 ]; then + return + fi + + if ! grep -m1 -q "^${1}=" ${3}; then + #ok, it's not there, add it. + echo "$1=$2" >> $3 + return + else + #ok, the value is already in the file $3, so use perl to regex it. + perl -pi -e "s/^`grep -m1 "^${1}=" ${3}`/${1}=${2}/" ${3} + fi +} + +#A > B: 1 +#A = B: 0 +#A < B: -1 +#3rd option is descriptor +version_cmp() { + A=`echo $1 | cut -d- -f1` + B=`echo $2 | cut -d- -f1` + + if [ "$A" = "" ] || [ "$B" = "" ]; then + echo "version_cmp has a blank value when checking $3" + return + fi + + if ! echo "$A" | grep -m1 -q '^[0-9]' || ! echo "$B" | grep -m1 -q '^[0-9]'; then + echo "version_cmp has a wrong version when checking $3 for version comparison, ${A} vs. ${B}" + return + fi + + #swap underscore with dot. + A=`echo $A | tr '_' '.'` + B=`echo $B | tr '_' '.'` + + A1=`echo $A | cut -d. -f1` + B1=`echo $B | cut -d. -f1` + + if [ "$A1" -gt "$B1" ]; then + echo 1 + return + fi + + if [ "$A1" -lt "$B1" ]; then + echo -1 + return + fi + + A2=`echo $A | cut -d. -f2` + B2=`echo $B | cut -d. -f2` + + if [ "$A2" -gt "$B2" ]; then + echo 1 + return + fi + + if [ "$A2" -lt "$B2" ]; then + echo -1 + return + fi + + A3=`echo $A | cut -d. -f3` + B3=`echo $B | cut -d. -f3` + + if [ "$A3" = "" ] && [ "$B3" = "" ]; then + echo 0 + return + fi + + if [ "$A3" = "" ]; then + if [ "$B3" = "0" ]; then + echo 0; + else + echo 1 + fi + return + fi + + if [ "$B3" = "" ]; then + if [ "$A3" = "0" ]; then + echo 0; + else + echo -1 + fi + return + fi + + if [ "$A3" -gt "$B3" ]; then + echo 1 + return + fi + + if [ "$A3" -lt "$B3" ]; then + echo -1 + return + fi + + echo 0 +} + +#################################################### + +GCCOPTIONS_CACHE=0 + +getGccOptions() { + if [ "${GCCOPTIONS_CACHE}" = "0" ]; then + # Exim always takes /usr/bin/gcc, even if it exists in /usr/local/bin/gcc. Other components built in /usr, not /usr/local might take it form there too. + if [ -s /usr/bin/gcc ]; then + GCC_VERSION="`/usr/bin/gcc --version | head -n1 | grep -o '[0-9]*\.[0-9]*' | head -n1`" + else + GCC_VERSION="`gcc --version | head -n1 | grep -o '[0-9]*\.[0-9]*' | head -n1`" + fi + if [ "`version_cmp ${GCC_VERSION} 4.9 'gcc ver check'`" -ge 0 ]; then + GCCOPTIONS_CACHE="-fstack-protector-strong" + else + GCCOPTIONS_CACHE="-fstack-protector --param ssp-buffer-size=4" + fi + fi + echo ${GCCOPTIONS_CACHE} +} + +#These are needed for some functions outside +BOLD_OPT=`getOpt bold ${BOLD_DEF}` + +# Variables for bolded text +boldon="" +boldoff="" +if [ "${BOLD_OPT}" = "yes" ]; then + boldon="`tput -Txterm bold`" + boldoff="`tput -Txterm sgr0`" +fi +CLEAN_OPT=`getOpt clean ${CLEAN_DEF}` +if [ -s ${DEBIAN_VERSION} ]; then + MYSQL_FORCE_COMPILE_OPT=`getOpt mysql_force_compile ${MYSQL_FORCE_COMPILE_DEF}` +else + MYSQL_FORCE_COMPILE_OPT=`getOpt mysql_force_compile ${MYSQL_FORCE_COMPILE_DEF}` +fi +DOWNLOADSERVER_OPT=`getOpt downloadserver ${DOWNLOADSERVER_DEF}` +UNOFFICIAL_MIRRORS_OPT=`getOpt unofficial_mirrors ${UNOFFICIAL_MIRRORS_DEF}` +DOWNLOADSERVERS_OFFICIAL_LIST="da-mirror.wpcloud.vn files2.directadmin.com files-fi.directadmin.com files-fr.directadmin.com files-lt.directadmin.com files-de.directadmin.com files-sg.directadmin.com files-ca.directadmin.com" +DOWNLOADSERVERS_UNOFFICIAL_HTTPS_LIST="files6.directadmin.com files9.directadmin.com files11.directadmin.com directadmin.mirror.liteserver.nl damirror.unix-solutions.be mirror.serverion.com damirror.pars.host mirrors.ereznet.co.il mirror.ihost.md directadmin.mirrors.misaka.one directadmin.hostmark.pl" +#We have spacing at the beginning/end to let grep work fine with these +DOWNLOADSERVERS_HTTPS_LIST=" files1.directadmin.com ${DOWNLOADSERVERS_OFFICIAL_LIST} ${DOWNLOADSERVERS_UNOFFICIAL_HTTPS_LIST} " +DOWNLOADSERVER_SCHEME=http +if echo "${DOWNLOADSERVERS_HTTPS_LIST}" | grep -m1 -q " ${DOWNLOADSERVER_OPT} "; then + DOWNLOADSERVER_SCHEME=https +fi +WEBPATH=${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/custombuild +WEBPATH_SERVICES=${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services +WEBPATH_BACKUP_IP=69.162.69.58 +WEBPATH_BACKUP_DOMAIN=da-mirror.cyberslab.net +WEBPATH_BACKUP=http://${WEBPATH_BACKUP_DOMAIN}/services/custombuild +WEBPATH_SERVICES_BACKUP=http://${WEBPATH_BACKUP_IP}/services +WEBPATH_CL=https://repo.cloudlinux.com/cloudlinux/sources/da +WEBPATH_CWAF=https://waf.comodo.com +WEBPATH_LITESPEED=https://www.litespeedtech.com/packages + +setPhpOpt() { + #$1 is option name + #$2 is value + READ_OPTION_NAME="$1" + READ_OPTION_VALUE="$2" + SET_IN_FILENAME="${PHP_EXTENSIONS_CONF}" + + if echo " ioncube suhosin zend htscanner imagick opcache " | grep -m1 -q " ${READ_OPTION_NAME} "; then + if grep -m1 -q "^${READ_OPTION_NAME}=" ${OPTIONS_CONF}; then + if ! grep -m1 -q "^${READ_OPTION_NAME}=" ${PHP_EXTENSIONS_CONF}; then + grep -m1 "^${READ_OPTION_NAME}=" ${OPTIONS_CONF} >> "${PHP_EXTENSIONS_CONF}" + fi + sed -i "/^${READ_OPTION_NAME}=/d" ${OPTIONS_CONF} + fi + fi + + VAR=`echo ${READ_OPTION_NAME} | tr "[a-z]" "[A-Z]"` + if [ -z "$(eval_var PHP_${VAR}_DEF)" ]; then + echo "${READ_OPTION_NAME} is not a valid option." + EXIT_CODE=50 + return + fi + VALID="no" + for i in $(eval_var PHP_${VAR}_SET); do + if [ "${i}" = "${READ_OPTION_VALUE}" ] || [ "${i}" = "userinput" ]; then + VALID="yes" + break + fi + done + if [ "${VALID}" = "no" ]; then + echo "${READ_OPTION_VALUE} is not a valid setting for ${READ_OPTION_NAME} option." + EXIT_CODE=51 + return + fi + OPT_VALUE="`grep -m1 "^${READ_OPTION_NAME}=" "${SET_IN_FILENAME}" | cut -d= -f2 | perl -p0 -e 's|@|\\\\@|g'`" + if [ -z "${OPT_VALUE}" ] && [ "${SET_IN_FILENAME}" = "${PHP_EXTENSIONS_CONF}" ]; then + if grep -m1 -q "^${READ_OPTION_NAME}=" ${OPTIONS_CONF}; then + grep -m1 "^${READ_OPTION_NAME}=" ${OPTIONS_CONF} >> "${PHP_EXTENSIONS_CONF}" + sed -i "/^${READ_OPTION_NAME}=/d" ${OPTIONS_CONF} + OPT_VALUE="`grep -m1 "^${READ_OPTION_NAME}=" "${SET_IN_FILENAME}" | cut -d= -f2 | perl -p0 -e 's|@|\\\\@|g'`" + fi + fi + if [ ! -z "${OPT_VALUE}" ]; then + perl -pi -e "s#${READ_OPTION_NAME}=${OPT_VALUE}#${READ_OPTION_NAME}=${READ_OPTION_VALUE}#" "${SET_IN_FILENAME}" + else + echo "${READ_OPTION_NAME}=${OPT_VALUE}" >> "${SET_IN_FILENAME}" + fi + if [ "${HIDE_CHANGES}" = "0" ] && [ "${OPT_VALUE}" != "${READ_OPTION_VALUE}" ]; then + echo "Changed ${boldon}${READ_OPTION_NAME}${boldoff} option from ${boldon}${OPT_VALUE}${boldoff} to ${boldon}${READ_OPTION_VALUE}${boldoff}" | perl -p0 -e 's|\\\@|\@|g' + elif [ "${HIDE_CHANGES}" = "0" ] && [ "${OPT_VALUE}" = "${READ_OPTION_VALUE}" ]; then + echo "${boldon}${READ_OPTION_NAME}${boldoff} is already set to ${boldon}${READ_OPTION_VALUE}${boldoff}" | perl -p0 -e 's|\\\@|\@|g' + fi +} + +setOpt() { + #$1 is option name + #$2 is value + READ_OPTION_NAME="$1" + READ_OPTION_VALUE="`echo \"$2\" | perl -p0 -e 's|@|\\\\@|g' | perl -p0 -e 's|\\+|\\\\+|g'`" + #Rewrite spamassassin to spamd for backwards compatibility + if [ "${READ_OPTION_NAME}" = "spamassassin" ]; then + READ_OPTION_NAME="spamd" + if [ "${READ_OPTION_VALUE}" = "yes" ]; then + READ_OPTION_VALUE="spamassassin" + fi + fi + + SET_IN_FILENAME="${OPTIONS_CONF}" + + if echo " ioncube suhosin zend htscanner imagick opcache " | grep -m1 -q " ${READ_OPTION_NAME} "; then + setPhpOpt "${READ_OPTION_NAME}" "${READ_OPTION_VALUE}" + return + fi + + VAR=`echo ${READ_OPTION_NAME} | tr "[a-z]" "[A-Z]"` + if [ -z "$(eval_var ${VAR}_DEF)" ]; then + echo "${READ_OPTION_NAME} is not a valid option." + EXIT_CODE=50 + return + fi + VALID="no" + for i in $(eval_var ${VAR}_SET); do + if [ "${i}" = "${READ_OPTION_VALUE}" ] || [ "${i}" = "userinput" ]; then + VALID="yes" + break + fi + done + if [ "${VALID}" = "no" ]; then + echo "${READ_OPTION_VALUE} is not a valid setting for ${READ_OPTION_NAME} option." + EXIT_CODE=51 + return + fi + OPT_VALUE="`grep -m1 "^${READ_OPTION_NAME}=" "${SET_IN_FILENAME}" | cut -d= -f2 | perl -p0 -e 's|@|\\\\@|g' | perl -p0 -e 's|\\+|\\\\+|g'`" + perl -pi -e "s#${READ_OPTION_NAME}=${OPT_VALUE}#${READ_OPTION_NAME}=${READ_OPTION_VALUE}#" "${SET_IN_FILENAME}" + if [ "${HIDE_CHANGES}" = "0" ] && [ "${OPT_VALUE}" != "${READ_OPTION_VALUE}" ]; then + echo "Changed ${boldon}${READ_OPTION_NAME}${boldoff} option from ${boldon}${OPT_VALUE}${boldoff} to ${boldon}${READ_OPTION_VALUE}${boldoff}" | perl -p0 -e 's|\\\@|\@|g' | perl -p0 -e 's|\\\+|\+|g' + elif [ "${HIDE_CHANGES}" = "0" ] && [ "${OPT_VALUE}" = "${READ_OPTION_VALUE}" ]; then + echo "${boldon}${READ_OPTION_NAME}${boldoff} is already set to ${boldon}${READ_OPTION_VALUE}${boldoff}" | perl -p0 -e 's|\\\@|\@|g' | perl -p0 -e 's|\\\+|\+|g' + fi +} + +getWebserverPorts() { + # 443 and 80 ports + PORT_80=`getDA_Opt port_80 80` + PORT_443=`getDA_Opt port_443 443` + + # Reverse proxy ports + PORT_8080=`getDA_Opt port_8080 8080` + PORT_8081=`getDA_Opt port_8081 8081` +} + +case "$1" in + "") getopt_case_toggle ;; + version) getopt_case_toggle ;; + kill) getopt_case_toggle ;; + update_da) getopt_case_toggle ;; + get_timezone) getopt_case_toggle ;; + set_versions_txt) getopt_case_toggle ;; + show_file) getopt_case_toggle ;; +esac +if [ "${GETOPT_CASE}" = "1" ]; then + CSF_OPT=`getOpt csf ${CSF_DEF}` + #CloudLinux + CLOUDLINUX_OPT=`getOpt cloudlinux ${CLOUDLINUX_DEF}` + CLOUDLINUX_BETA_OPT=`getOpt cloudlinux_beta ${CLOUDLINUX_BETA_DEF}` + CAGEFS_OPT=`getOpt cagefs ${CAGEFS_DEF}` + + # Read options.conf + FTPD_OPT=`getOpt ftpd ${FTPD_DEF}` + PUREFTPD_UPLOADSCAN_OPT=`getOpt pureftpd_uploadscan ${PUREFTPD_UPLOADSCAN_DEF}` + PROFTPD_UPLOADSCAN_OPT=`getOpt proftpd_uploadscan ${PROFTPD_UPLOADSCAN_DEF}` + + # Replace spamassassin= to spamd= + if grep -m1 -q "^spamassassin=" ${OPTIONS_CONF}; then + perl -pi -e 's|spamassassin=yes|spamd=spamassassin|g' ${OPTIONS_CONF} + perl -pi -e 's|spamassassin=no|spamd=no|g' ${OPTIONS_CONF} + fi + + SPAMD_OPT=`getOpt spamd ${SPAMASSASSIN_DEF}` + SA_UPDATE_OPT=`getOpt sa_update ${SA_UPDATE_DEF}` + CLAMAV_OPT=`getOpt clamav ${CLAMAV_DEF}` + CLAMAV_EXIM_OPT=`getOpt clamav_exim ${CLAMAV_EXIM_DEF}` + MODSECURITY_UPLOADSCAN_OPT=`getOpt modsecurity_uploadscan ${MODSECURITY_UPLOADSCAN_DEF}` + # Mailman is not yet supported + #MAILMAN_OPT=`getOpt mailman no` + UNIT_OPT=`getOpt unit ${UNIT_DEF}` + WEBSERVER_OPT=`getOpt webserver ${WEBSERVER_DEF}` + HTTP_METHODS_OPT=`getOpt http_methods ${HTTP_METHODS_DEF}` + LITESPEED_SERIALNO_OPT=`getOpt litespeed_serialno ${LITESPEED_SERIALNO_DEF}` + MODSECURITY_OPT=`getOpt modsecurity ${MODSECURITY_DEF}` + MODSECURITY_RULESET_OPT=`getOpt modsecurity_ruleset ${MODSECURITY_RULESET_DEF}` + + HN_T=${HOSTNAME} + REDIRECT_HOST_OPT=`getOpt redirect_host ${HN_T}` + REDIRECT_HOST_HTTPS_OPT=`getOpt redirect_host_https ${REDIRECT_HOST_HTTPS_DEF}` + USE_HOSTNAME_FOR_ALIAS_OPT=`getOpt use_hostname_for_alias ${USE_HOSTNAME_FOR_ALIAS_DEF}` + + TZ_T=$(getTimezone) + PHP_TIMEZONE_OPT=`getOpt php_timezone ${TZ_T}` + + #Apache + APACHE_VER_OPT=`getOpt apache_ver ${APACHE_VER_DEF}` + APACHE_MPM_OPT=`getOpt apache_mpm ${APACHE_MPM_DEF}` + MOD_RUID2_OPT=`getOpt mod_ruid2 ${MOD_RUID2_DEF}` + + USERDIR_ACCESS_OPT=`getOpt userdir_access ${USERDIR_ACCESS_DEF}` + HARDEN_SYMLINKS_PATCH_OPT=`getOpt harden_symlinks_patch ${HARDEN_SYMLINKS_PATCH_DEF}` + + #PHP + PHP1_RELEASE_OPT=`getOpt php1_release ${PHP1_RELEASE_DEF}` + PHP2_RELEASE_OPT=`getOpt php2_release ${PHP2_RELEASE_DEF}` + PHP3_RELEASE_OPT=`getOpt php3_release ${PHP3_RELEASE_DEF}` + PHP4_RELEASE_OPT=`getOpt php4_release ${PHP4_RELEASE_DEF}` + + PHP1_SHORTRELEASE=`echo ${PHP1_RELEASE_OPT} | tr -d '.'` + PHP2_SHORTRELEASE=`echo ${PHP2_RELEASE_OPT} | tr -d '.'` + PHP3_SHORTRELEASE=`echo ${PHP3_RELEASE_OPT} | tr -d '.'` + PHP4_SHORTRELEASE=`echo ${PHP4_RELEASE_OPT} | tr -d '.'` + + PHP1_MODE_OPT=`getOpt php1_mode ${PHP1_MODE_DEF}` + PHP2_MODE_OPT=`getOpt php2_mode ${PHP2_MODE_DEF}` + PHP3_MODE_OPT=`getOpt php3_mode ${PHP3_MODE_DEF}` + PHP4_MODE_OPT=`getOpt php4_mode ${PHP4_MODE_DEF}` + + SECURE_PHP_OPT=`getOpt secure_php ${SECURE_PHP_DEF}` + PHP_INI_TYPE_OPT=`getOpt php_ini_type ${PHP_INI_TYPE_DEF}` + REDIS_OPT=`getOpt redis ${REDIS_DEF}` + #php_extensions.conf options + PHP_BZ2_OPT=`getPhpOpt bz2 ${PHP_BZ2_DEF}` + PHP_GMP_OPT=`getPhpOpt gmp ${PHP_GMP_DEF}` + PHP_HTSCANNER_OPT=`getPhpOpt htscanner ${PHP_HTSCANNER_DEF}` + PHP_IGBINARY_OPT=`getPhpOpt igbinary ${PHP_IGBINARY_DEF}` + PHP_IMAGICK_OPT=`getPhpOpt imagick ${PHP_IMAGICK_DEF}` + PHP_IMAP_OPT=`getPhpOpt imap ${PHP_IMAP_DEF}` + PHP_IONCUBE_OPT=`getPhpOpt ioncube ${PHP_IONCUBE_DEF}` + PHP_LDAP_OPT=`getPhpOpt ldap ${PHP_LDAP_DEF}` + PHP_OPCACHE_OPT=`getPhpOpt opcache ${PHP_OPCACHE_DEF}` + PHP_PHALCON_OPT=`getPhpOpt phalcon ${PHP_PHALCON_DEF}` + PHP_REDIS_OPT=`getPhpOpt redis ${PHP_REDIS_DEF}` + PHP_READLINE_OPT=`getPhpOpt readline ${PHP_READLINE_DEF}` + PHP_SUHOSIN_OPT=`getPhpOpt suhosin ${PHP_SUHOSIN_DEF}` + PHP_SNUFFLEUPAGUS_OPT=`getPhpOpt snuffleupagus ${PHP_SNUFFLEUPAGUS_DEF}` + PHP_XMLRPC_OPT=`getPhpOpt xmlrpc ${PHP_XMLRPC_DEF}` + PHP_ZEND_OPT=`getPhpOpt zend ${PHP_ZEND_DEF}` + + #backwards compatibility + IONCUBE_OPT=${PHP_IONCUBE_OPT} + OPCACHE_OPT=${PHP_OPCACHE_OPT} + HTSCANNER_OPT=${PHP_HTSCANNER_OPT} + ZEND_OPT=${PHP_ZEND_OPT} + IMAGICK_OPT=${PHP_IMAGICK_OPT} + SUHOSIN_OPT=${PHP_SUHOSIN_OPT} + + SUHOSIN_PHP_UPLOADSCAN_OPT=`getOpt suhosin_php_uploadscan ${SUHOSIN_PHP_UPLOADSCAN_DEF}` + X_MAIL_HEADER_OPT=`getOpt x_mail_header ${X_MAIL_HEADER_DEF}` + + APCONF=ap2 + + HAVE_FPM_CGI=no + HAVE_FCGID=no + HAVE_SUPHP_CGI=no + HAVE_CLI=no + HAVE_LSPHP=no + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + eval `echo "HAVE_FPM${php_shortrelease}_CGI=no"` + eval `echo "HAVE_FCGID${php_shortrelease}=no"` + eval `echo "HAVE_SUPHP${php_shortrelease}_CGI=no"` + eval `echo "HAVE_CLI${php_shortrelease}=no"` + eval `echo "HAVE_LSPHP${php_shortrelease}=no"` + eval `echo "PHP${php_shortrelease}_CONFIGURE=configure/php/configure.php${php_shortrelease}"` + if [ -e custom/${APCONF}/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE=custom/${APCONF}/configure.php${php_shortrelease}"` + fi + if [ -e custom/php/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE=custom/php/configure.php${php_shortrelease}"` + fi + done + + if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + HAVE_FPM_CGI=yes + eval `echo "HAVE_FPM${PHP1_SHORTRELEASE}_CGI=yes"` + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_MODE_OPT}" = "php-fpm" ]; then + HAVE_FPM_CGI=yes + eval `echo "HAVE_FPM${PHP2_SHORTRELEASE}_CGI=yes"` + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ "${PHP3_MODE_OPT}" = "php-fpm" ]; then + HAVE_FPM_CGI=yes + eval `echo "HAVE_FPM${PHP3_SHORTRELEASE}_CGI=yes"` + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP4_MODE_OPT}" = "php-fpm" ]; then + HAVE_FPM_CGI=yes + eval `echo "HAVE_FPM${PHP4_SHORTRELEASE}_CGI=yes"` + fi + + if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "fastcgi" ]; then + HAVE_FCGID=yes + eval `echo "HAVE_FCGID${PHP1_SHORTRELEASE}=yes"` + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_MODE_OPT}" = "fastcgi" ]; then + HAVE_FCGID=yes + eval `echo "HAVE_FCGID${PHP2_SHORTRELEASE}=yes"` + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP3_MODE_OPT}" = "fastcgi" ]; then + HAVE_FCGID=yes + eval `echo "HAVE_FCGID${PHP3_SHORTRELEASE}=yes"` + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP4_MODE_OPT}" = "fastcgi" ]; then + HAVE_FCGID=yes + eval `echo "HAVE_FCGID${PHP4_SHORTRELEASE}=yes"` + fi + + if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "suphp" ]; then + HAVE_SUPHP_CGI=yes + eval `echo "HAVE_SUPHP${PHP1_SHORTRELEASE}_CGI=yes"` + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_MODE_OPT}" = "suphp" ]; then + HAVE_SUPHP_CGI=yes + eval `echo "HAVE_SUPHP${PHP2_SHORTRELEASE}_CGI=yes"` + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ "${PHP3_MODE_OPT}" = "suphp" ]; then + HAVE_SUPHP_CGI=yes + eval `echo "HAVE_SUPHP${PHP3_SHORTRELEASE}_CGI=yes"` + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP4_MODE_OPT}" = "suphp" ]; then + HAVE_SUPHP_CGI=yes + eval `echo "HAVE_SUPHP${PHP4_SHORTRELEASE}_CGI=yes"` + fi + + #Check just php1 and no other modes, as mod_php is not allowed to be 2/3/4th + if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "mod_php" ]; then + HAVE_CLI=yes + eval `echo "HAVE_CLI${PHP1_SHORTRELEASE}=yes"` + fi + + if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + HAVE_LSPHP=yes + eval `echo "HAVE_LSPHP${PHP1_SHORTRELEASE}=yes"` + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_MODE_OPT}" = "lsphp" ]; then + HAVE_LSPHP=yes + eval `echo "HAVE_LSPHP${PHP2_SHORTRELEASE}=yes"` + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ "${PHP3_MODE_OPT}" = "lsphp" ]; then + HAVE_LSPHP=yes + eval `echo "HAVE_LSPHP${PHP3_SHORTRELEASE}=yes"` + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP4_MODE_OPT}" = "lsphp" ]; then + HAVE_LSPHP=yes + eval `echo "HAVE_LSPHP${PHP4_SHORTRELEASE}=yes"` + fi + + if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then + APPGROUP=apache + fi + + #MySQL + MYSQL_INST_OPT=`getOpt mysql_inst ${MYSQL_INST_DEF}` + if [ "${MYSQL_INST_OPT}" = "yes" ]; then + HIDE_CHANGES=1 + if [ "`has_mariadb`" = "0" ]; then + setOpt mysql_inst mysql + else + setOpt mysql_inst mariadb + fi + MYSQL_INST_OPT=`getOpt mysql_inst ${MYSQL_INST_DEF}` + fi + + MYSQL_BACKUP_OPT=`getOpt mysql_backup ${MYSQL_BACKUP_DEF}` + MYSQL_OPT=`getOpt mysql ${MYSQL_DEF}` + MARIADB_OPT=`getOpt mariadb ${MARIADB_DEF}` + MYSQL_BACKUP_GZIP_OPT=`getOpt mysql_backup_gzip ${MYSQL_BACKUP_GZIP_DEF}` + MYSQL_BACKUP_DIR_OPT=`getOpt mysql_backup_dir ${MYSQL_BACKUP_DIR_DEF}` + + MYSQLNAME="MySQL" + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + MYSQLNAME="MariaDB" + fi + + #Email + DOVECOT_OPT=`getOpt dovecot ${DOVECOT_DEF}` + DOVECOT_CONF_OPT=`getOpt dovecot_conf ${DOVECOT_CONF_DEF}` + PIGEONHOLE_OPT=`getOpt pigeonhole ${PIGEONHOLE_DEF}` + MAIL_COMPRESS_OPT=`getOpt mail_compress ${MAIL_COMPRESS_DEF}` + + if [ "${OS}" = "FreeBSD" ]; then + EXIM_DEF="yes" + EXIMCONF_DEF="yes" + fi + EXIM_OPT=`getOpt exim ${EXIM_DEF}` + EXIMCONF_OPT=`getOpt eximconf ${EXIMCONF_DEF}` + EXIMCONF_RELEASE_OPT=`getOpt eximconf_release ${EXIMCONF_RELEASE_DEF}` + BLOCKCRACKING_OPT=`getOpt blockcracking ${BLOCKCRACKING_DEF}` + EASY_SPAM_FIGHTER_OPT=`getOpt easy_spam_fighter ${EASY_SPAM_FIGHTER_DEF}` + + EXIM_SRS_OPT=yes + + #Applications + PHPMYADMIN_OPT=`getOpt phpmyadmin ${PHPMYADMIN_DEF}` + PHPMYADMIN_PUBLIC_OPT=`getOpt phpmyadmin_public ${PHPMYADMIN_PUBLIC_DEF}` + PHPMYADMIN_VER_OPT=`getOpt phpmyadmin_ver ${PHPMYADMIN_VER_DEF}` + SQUIRRELMAIL_OPT=`getOpt squirrelmail ${SQUIRRELMAIL_DEF}` + ROUNDCUBE_OPT=`getOpt roundcube ${ROUNDCUBE_DEF}` + WEBAPPS_INBOX_PREFIX_NEWDEF="no" + if [ "${OPTIONS_CONF_EXISTS}" = "1" ]; then + WEBAPPS_INBOX_PREFIX_NEWDEF="yes" + fi + WEBAPPS_INBOX_PREFIX_OPT=`getOpt webapps_inbox_prefix ${WEBAPPS_INBOX_PREFIX_NEWDEF}` + + #Statistics software + AWSTATS_OPT=`getOpt awstats ${AWSTATS_DEF}` + WEBALIZER_OPT=`getOpt webalizer ${WEBALIZER_DEF}` + + CURL_OPT=`getOpt curl ${CURL_DEF}` + SSL_CONFIGURATION_OPT=`getOpt ssl_configuration ${SSL_CONFIGURATION_DEF}` + + #CustomBuild + AUTOVER_OPT=`getOpt autover ${AUTOVER_DEF}` + + CLEAN_OLD_TARBALLS_OPT=`getOpt clean_old_tarballs ${CLEAN_OLD_TARBALLS_DEF}` + CLEAN_OLD_WEBAPPS_OPT=`getOpt clean_old_webapps ${CLEAN_OLD_WEBAPPS_DEF}` + CLEANAPACHE_OPT=`getOpt cleanapache ${CLEANAPACHE_DEF}` + CUSTOMBUILD_OPT=`getOpt custombuild ${CUSTOMBUILD_DEF}` + CUSTOMBUILD_PLUGIN_OPT=`getOpt custombuild_plugin ${CUSTOMBUILD_PLUGIN_DEF}` + + #Cron + CRON_OPT=`getOpt cron ${CRON_DEF}` + CRON_FREQUENCY_OPT=`getOpt cron_frequency ${CRON_FREQUENCY_DEF}` + EMAIL_OPT=`getOpt email ${EMAIL_DEF}` + NOTIFICATIONS_OPT=`getOpt notifications ${NOTIFICATIONS_DEF}` + DA_AUTOUPDATE_OPT=`getOpt da_autoupdate ${DA_AUTOUPDATE_DEF}` + UPDATES_OPT=`getOpt updates ${UPDATES_DEF}` + WEBAPPS_UPDATES_OPT=`getOpt webapps_updates ${WEBAPPS_UPDATES_DEF}` + + VERSIONS_CL="versions.txt" + if [ "${CLOUDLINUX_BETA_OPT}" = "yes" ]; then + VERSIONS_CL="versions_beta.txt" + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if [ ! -s ${VERSIONS_FILE_LITESPEED} ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_LITESPEED}/versions.txt -o ${VERSIONS_FILE_LITESPEED} 2> /dev/null + fi + if [ ! -s ${VERSIONS_FILE_LITESPEED} ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_LITESPEED}/versions.txt -o ${VERSIONS_FILE_LITESPEED} 2> /dev/null + fi + fi + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + if [ ! -s ${VERSIONS_FILE_CL} ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CL}/${VERSIONS_CL} -o ${VERSIONS_FILE_CL} 2> /dev/null + fi + if [ ! -s ${VERSIONS_FILE_CL} ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CL}/${VERSIONS_CL} -o ${VERSIONS_FILE_CL} 2> /dev/null + fi + fi + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + if [ ! -s ${VERSIONS_FILE_CWAF} ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CWAF}/doc/comodo_versions.txt -o ${VERSIONS_FILE_CWAF} 2> /dev/null + fi + if [ ! -s ${VERSIONS_FILE_CWAF} ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CWAF}/doc/comodo_versions.txt -o ${VERSIONS_FILE_CWAF} 2> /dev/null + fi + fi + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ]; then + if [ ! -d mysql ]; then + mkdir -p mysql + fi + if [ ! -s ${VERSIONS_FILE_JEMALLOC} ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/all/mariadb/jemalloc/jemalloc_versions.txt -o ${VERSIONS_FILE_JEMALLOC} 2> /dev/null + fi + if [ ! -s ${VERSIONS_FILE_GALERA} ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/all/mariadb/galera/galera_versions.txt -o ${VERSIONS_FILE_GALERA} 2> /dev/null + fi + fi + fi +fi + +allSettings() { + for section in $ALL_SECTIONS; do + PHP_EXT_SETTINGS_SECTION=false + PHP_EXT_SETTINGS_SECTION_PREFIX="" + if [ ${section} = "PHP_EXT_SETTINGS" ]; then + PHP_EXT_SETTINGS_SECTION=true + PHP_EXT_SETTINGS_SECTION_PREFIX="PHP_" + fi + DESC=${section}_DESC + echo "------------------------------------------" + echo "$(eval_var ${DESC})" + echo "------------------------------------------" + for setting in $(eval_var ${section}); do + SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"` + POSSIBLE_VALUES_VAR=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_SET + POSSIBLE_VALUES="`echo $(eval_var ${POSSIBLE_VALUES_VAR}) | awk -v OFS=", " '$1=$1'`" + DEFAULT_VALUE=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_DEF + CURRENT_VALUE=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_OPT + echo -n "${SETTING_NAME}: ${POSSIBLE_VALUES}. Current value: $(eval_var ${CURRENT_VALUE}). Default value: $(eval_var ${DEFAULT_VALUE})." + if [ "$1" = "full" ]; then + DESCRIPTION="${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_DESC" + echo " Description: $(eval_var ${DESCRIPTION})" + else + echo "" + fi + done + echo "" + done +} + +allSettingsJSON() { + echo "{" + NUM_OF_SECTIONS=`echo $ALL_SECTIONS | wc -w` + CUR_SECTION=0 + for section in $ALL_SECTIONS; do + PHP_EXT_SETTINGS_SECTION=false + PHP_EXT_SETTINGS_SECTION_PREFIX="" + if [ ${section} = "PHP_EXT_SETTINGS" ]; then + PHP_EXT_SETTINGS_SECTION=true + PHP_EXT_SETTINGS_SECTION_PREFIX="PHP_" + fi + CUR_SECTION=`expr ${CUR_SECTION} + 1` + NUM_OF_SETTINGS=`echo "$(eval_var ${section})" | wc -w` + CUR_SETTING=0 + LOWERCASE_SECTION=`echo $section | tr "[A-Z]" "[a-z]"` + SECTION_DESC=${section}_DESC + printf "\t\"${LOWERCASE_SECTION}\": {\n" + printf "\t\t\"description\": \"$(eval_var ${SECTION_DESC})\",\n" + for setting in $(eval_var ${section}); do + CUR_SETTING=`expr ${CUR_SETTING} + 1` + SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"` + + POSSIBLE_VALUES_VAR=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_SET + POSSIBLE_VALUES="" + NUM_OF_VALUES=`echo $(eval_var ${POSSIBLE_VALUES_VAR}) | wc -w` + CUR_VALUE=0 + for value in $(eval_var ${POSSIBLE_VALUES_VAR}); do + CUR_VALUE=`expr ${CUR_VALUE} + 1` + if [ ${CUR_VALUE} -ne ${NUM_OF_VALUES} ]; then + POSSIBLE_VALUES="${POSSIBLE_VALUES}\"$value\"," + else + POSSIBLE_VALUES="${POSSIBLE_VALUES}\"${value}\"" + fi + done + DEFAULT_VALUE=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_DEF + CURRENT_VALUE=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_OPT + DESCRIPTION="${setting}_DESC" + + printf "\t\t\"${SETTING_NAME}\": {\n" + printf "\t\t\t\"values\": [${POSSIBLE_VALUES}],\n" + printf "\t\t\t\"default\": \"$(eval_var ${DEFAULT_VALUE})\",\n" + printf "\t\t\t\"current\": \"$(eval_var ${CURRENT_VALUE})\",\n" + printf "\t\t\t\"description\": \"$(eval_var ${DESCRIPTION})\"\n" + if [ ${CUR_SETTING} -ne ${NUM_OF_SETTINGS} ]; then + printf "\t\t},\n" + else + printf "\t\t}\n" + fi + done + if [ ${CUR_SECTION} -ne ${NUM_OF_SECTIONS} ]; then + printf "\t},\n" + else + printf "\t}\n" + fi + done + echo "}" +} +OPENSSL_VERSION_CACHE=0 +openssl_version() { + if [ "${OPENSSL_VERSION_CACHE}" = "0" ] && [ -x /usr/bin/openssl ]; then + #doesn't include letters! + OPENSSL_VERSION_CACHE=`/usr/bin/openssl version | head -n1 | cut -d\ -f2 | cut -d- -f1 | tr -d '[a-z]'` + fi + echo $OPENSSL_VERSION_CACHE +} + +MYSQL_VERSION_CACHE=0 +mysql_version() { + if [ "${MYSQL_VERSION_CACHE}" = "0" ] && [ -x ${MYSQL_BIN} ]; then + MYSQL_VERSION_CACHE=`${MYSQL_BIN} --version | grep -m1 -o '[0-9]*\.[0-9]*\.[0-9]*'` + fi + echo $MYSQL_VERSION_CACHE +} + +MYSQL_MAIN_CACHE=0 +mysql_main() { + if [ "${MYSQL_MAIN_CACHE}" = "0" ] && [ -x ${MYSQL_BIN} ]; then + MYSQL_MAIN_CACHE=`${MYSQL_BIN} --version | grep -m1 -o '[0-9]*\.[0-9]*\.[0-9]*' | cut -d. -f1,2` + fi + echo $MYSQL_MAIN_CACHE +} + +HAS_MARIADB_CACHE=-1 +has_mariadb() { + if [ "${HAS_MARIADB_CACHE}" = "-1" ] && [ -x ${MYSQL_BIN} ]; then + HAS_MARIADB_CACHE=`${MYSQL_BIN} --version | grep -c -m1 MariaDB` + fi + echo $HAS_MARIADB_CACHE +} + +#################################################### + +doRestartDA() { + echo "action=directadmin&value=reload" >> ${TASK_QUEUE} + run_dataskq +} + +doDAVersionCheck() { + DIRECTADMINV=`/usr/local/directadmin/directadmin v | awk '{print $3}' | cut -d. -f2,3` + if [ "`version_cmp ${DIRECTADMINV} 1.62 'DA version check'`" -lt 0 ]; then + do_exit 1 "${boldon}Your DirectAdmin version (${DIRECTADMINV}) is older than minimal required for this version of CustomBuild (1.63). Please run '/usr/local/directadmin/custombuild/build update_da'${boldoff}" + fi +} + +doChecks() { + if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then + doDAVersionCheck + fi + os_license_mismatch + + doCSFpignore + + if [ -s ${WORKDIR}/config.json ]; then + if grep -m1 -q 8372 ${WORKDIR}/config.json; then + rm -f ${WORKDIR}/config.json + fi + fi + + DA_VERSION_IS_INSECURE=false + if [ ! -s /etc/mime.types ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/mime.types -o /etc/mime.types + fi + # Do some pre-definitions, so that we wouldn't output security in json if there are no security items + if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then + DIRECTADMINV="`${DA_BIN} v | grep -m1 '^Version:' | grep -oE '[^ ]+$' | cut -d. -f2,3,4`" + if [ "`version_cmp $DIRECTADMINV 1.52.0`" -lt 0 ]; then + DA_VERSION_IS_INSECURE=true + if /usr/local/directadmin/directadmin c | grep -m1 -q 'email_ftp_password_change=1'; then + echo "Found DA version < 1.52.0. Setting email_ftp_password_change=0 in directadmin.conf for security purposes." + writeLog "email_ftp_password_change=0 in directadmin.conf was set for security purposes"; + setVal email_ftp_password_change 0 ${DACONF_TEMPLATE_FILE} + setVal email_ftp_password_change 0 ${DACONF_FILE} + doRestartDA + fi + fi + fi + + if [ "${APACHE_VER_OPT}" != "2.4" ] && [ "${APACHE_VER_OPT}" != "" ]; then + do_exit 1 "CustomBuild 2.0 does support Apache 2.4 only. Please check your apache_ver value in the options.conf file: ${APACHE_VER_OPT}." + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + CORRECT_MARIADB_VER="`echo ${MARIADB_SET} | grep -c ${MARIADB_OPT}`" + if [ "${CORRECT_MARIADB_VER}" = "0" ]; then + do_exit 1 "Incorrect mysql value (used to specify MariaDB release) set in the options.conf file. Set: ${MARIADB_OPT}. Available values: ${MARIADB_SET}." + fi + if [ "${MARIADB_OPT}" != "5.5" ] && [ "${MARIADB_OPT}" != "10.0" ] && [ "${MARIADB_OPT}" != "10.1" ] && [ "${MARIADB_OPT}" != "10.2" ] && [ "${MARIADB_OPT}" != "10.3" ] && [ "${MARIADB_OPT}" != "10.4" ] && [ "${MARIADB_OPT}" != "10.5" ] && [ "${MARIADB_OPT}" != "10.6" ] && [ "${MARIADB_OPT}" != "11.4" ]; then + do_exit 1 "Wrong mariadb value set in ${OPTIONS_CONF}." + fi + elif [ "${MYSQL_INST_OPT}" = "mysql" ]; then + CORRECT_MYSQL_VER="`echo ${MYSQL_SET} | grep -c ${MYSQL_OPT}`" + if [ "${CORRECT_MYSQL_VER}" = "0" ]; then + do_exit 1 "Incorrect mysql value (used to specify MySQL release) set in the options.conf file. Set: ${MYSQL_OPT}. Available values: ${MYSQL_SET}." + fi + if [ "${MYSQL_OPT}" != "5.1" ] && [ "${MYSQL_OPT}" != "5.5" ] && [ "${MYSQL_OPT}" != "5.6" ] && [ "${MYSQL_OPT}" != "5.7" ] && [ "${MYSQL_OPT}" != "8.0" ]; then + do_exit 1 "Wrong mysql value set in ${OPTIONS_CONF}." + fi + fi + + if [ "${PHP_INI_TYPE_OPT}" != "development" ] && [ "${PHP_INI_TYPE_OPT}" != "production" ]; then + do_exit 1 "Wrong php_ini_type set in options.conf." + fi + + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + if [ "${HAVE_CLI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ] || [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_LSPHP}" = "yes" ]; then + do_exit 1 "nginx webserver is only compatible with php-fpm PHP mode." + fi + fi + + if [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${SSL_CONFIGURATION_OPT}" = "modern" ]; then + OFFER_MODERN_SSL_SET=true + if [ "${OS}" = "FreeBSD" ]; then + if [ "${OS_FREEBSD_VER}" = "11" ]; then + OFFER_MODERN_SSL_SET=false + OS_NAME="FreeBSD ${OS_FREEBSD_VER}" + fi + elif [ -e ${DEBIAN_VERSION} ]; then + if [ "${OS_DEBIAN_VER}" = "7" ] || [ "${OS_DEBIAN_VER}" = "8" ] || [ "${OS_DEBIAN_VER}" = "9" ]; then + OFFER_MODERN_SSL_SET=false + OS_NAME="Debian ${OS_DEBIAN_VER}" + fi + else + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + OFFER_MODERN_SSL_SET=false + OS_NAME="CentOS/RHEL/CloudLinux ${OS_CENTOS_VER}" + fi + fi + if ! ${OFFER_MODERN_SSL_SET}; then + do_exit 1 "${WEBSERVER_OPT} webserver does not support 'modern' ssl_configuration option due to lack of support of TLSv1.3 in OpenSSL package on ${OS_NAME}." + fi + fi + + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${HAVE_FCGID}" = "yes" ] || [ "${PHP1_MODE_OPT}" = "lsphp" ] ; then + do_exit 1 "${WEBSERVER_OPT} webserver configuration option is not compatible with lsphp or php-fastcgi PHP mode with mod_ruid2 enabled." + fi + fi + fi + + if [ "${MOD_RUID2_OPT}" = "yes" ] && [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + echo "WARNING: It's not recommended to use ${WEBSERVER_OPT} with mod_ruid2 & suPHP enabled. It's a redundant and slow combination." + sleep 1 + fi + + if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + if [ "${PHP1_MODE_OPT}" != "lsphp" ]; then + do_exit 1 "php1_mode must be set to lsphp when using ${WEBSERVER_OPT} WEB server." + fi + if [ "${PHP2_MODE_OPT}" != "lsphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + do_exit 1 "php2_mode must be set to lsphp when using ${WEBSERVER_OPT} WEB server." + fi + if [ "${PHP3_MODE_OPT}" != "lsphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + do_exit 1 "php3_mode must be set to lsphp when using ${WEBSERVER_OPT} WEB server." + fi + if [ "${PHP4_MODE_OPT}" != "lsphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + do_exit 1 "php4_mode must be set to lsphp when using ${WEBSERVER_OPT} WEB server." + fi + elif [ "${CLOUDLINUX_OPT}" != "yes" ] || [ $(is_cloudlinux_solo) -eq 1 ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + do_exit 1 "php1_mode cannot be set to lsphp when using ${WEBSERVER_OPT} WEB server and CloudLinux disabled." + fi + if [ "${PHP2_MODE_OPT}" = "lsphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + do_exit 1 "php2_mode cannot be set to lsphp when using ${WEBSERVER_OPT} WEB server and CloudLinux disabled." + fi + if [ "${PHP3_MODE_OPT}" = "lsphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + do_exit 1 "php3_mode cannot be set to lsphp when using ${WEBSERVER_OPT} WEB server and CloudLinux disabled." + fi + if [ "${PHP4_MODE_OPT}" = "lsphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + do_exit 1 "php4_mode cannot be set to lsphp when using ${WEBSERVER_OPT} WEB server and CloudLinux disabled." + fi + fi + fi + + if [ "${PHP1_MODE_OPT}" != "php-fpm" ] && [ "${PHP1_MODE_OPT}" != "fastcgi" ] && [ "${PHP1_MODE_OPT}" != "mod_php" ] && [ "${PHP1_MODE_OPT}" != "suphp" ] && [ "${PHP1_MODE_OPT}" != "lsphp" ]; then + do_exit 1 "Please set a correct PHP mode (mode set for php1_release should be php-fpm, fastcgi, mod_php, suphp or lsphp)." + fi + if [ "${PHP2_MODE_OPT}" != "php-fpm" ] && [ "${PHP2_MODE_OPT}" != "fastcgi" ] && [ "${PHP2_MODE_OPT}" != "suphp" ] && [ "${PHP2_MODE_OPT}" != "lsphp" ]; then + do_exit 1 "Please set a correct PHP mode (mode set for php2_release should be php-fpm, fastcgi, suphp or lsphp)." + fi + if [ "${PHP3_MODE_OPT}" != "php-fpm" ] && [ "${PHP3_MODE_OPT}" != "fastcgi" ] && [ "${PHP3_MODE_OPT}" != "suphp" ] && [ "${PHP3_MODE_OPT}" != "lsphp" ]; then + do_exit 1 "Please set a correct PHP mode (mode set for php3_release should be php-fpm, fastcgi, suphp or lsphp)." + fi + if [ "${PHP4_MODE_OPT}" != "php-fpm" ] && [ "${PHP4_MODE_OPT}" != "fastcgi" ] && [ "${PHP4_MODE_OPT}" != "suphp" ] && [ "${PHP4_MODE_OPT}" != "lsphp" ]; then + do_exit 1 "Please set a correct PHP mode (mode set for php4_release should be php-fpm, fastcgi, suphp or lsphp)." + fi + + PHP1_RELEASE_CHECK=0 + for i in `echo "${PHP1_RELEASE_SET}"`; do + if [ "${PHP1_RELEASE_OPT}" = "$i" ]; then + PHP1_RELEASE_CHECK=1 + fi + done + + PHP2_RELEASE_CHECK=0 + for i in `echo "${PHP2_RELEASE_SET} no"`; do + if [ "${PHP2_RELEASE_OPT}" = "$i" ]; then + PHP2_RELEASE_CHECK=1 + fi + done + + PHP3_RELEASE_CHECK=0 + for i in `echo "${PHP3_RELEASE_SET} no"`; do + if [ "${PHP3_RELEASE_OPT}" = "$i" ]; then + PHP3_RELEASE_CHECK=1 + fi + done + + PHP3_RELEASE_CHECK=0 + for i in `echo "${PHP3_RELEASE_SET} no"`; do + if [ "${PHP3_RELEASE_OPT}" = "$i" ]; then + PHP3_RELEASE_CHECK=1 + fi + done + + if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${PHP2_MODE_OPT}" = "mod_php" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + do_exit 1 "Cannot install both versions of PHP in mod_php mode." + elif [ "${PHP1_RELEASE_CHECK}" = "0" ]; then + do_exit 1 "Wrong php1_release set in the options.conf: ${PHP1_RELEASE_OPT}." + elif [ "${PHP2_RELEASE_CHECK}" = "0" ]; then + do_exit 1 "Wrong php2_release set in the options.conf: ${PHP2_RELEASE_OPT}." + elif [ "${PHP3_RELEASE_CHECK}" = "0" ]; then + do_exit 1 "Wrong php3_release set in the options.conf: ${PHP3_RELEASE_OPT}." + elif [ "${PHP4_RELEASE_CHECK}" = "0" ]; then + do_exit 1 "Wrong php4_release set in the options.conf: ${PHP4_RELEASE_OPT}." + fi + + # Check for the same versions set + SAME_PHP_VERSION=false + if [ "${PHP1_RELEASE_OPT}" = "${PHP2_RELEASE_OPT}" ] || [ "${PHP1_RELEASE_OPT}" = "${PHP3_RELEASE_OPT}" ] || [ "${PHP1_RELEASE_OPT}" = "${PHP4_RELEASE_OPT}" ]; then + SAME_PHP_VERSION=true + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + if [ "${PHP2_RELEASE_OPT}" = "${PHP3_RELEASE_OPT}" ] || [ "${PHP2_RELEASE_OPT}" = "${PHP4_RELEASE_OPT}" ]; then + SAME_PHP_VERSION=true + fi + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP3_RELEASE_OPT}" = "${PHP4_RELEASE_OPT}" ]; then + SAME_PHP_VERSION=true + fi + + if ${SAME_PHP_VERSION}; then + do_exit 1 "Cannot install the same version of PHP for both releases." + fi + + #ensure php2/3/4_release is not set twice + for php_number in {2..4}; do { + C=`grep -c -e "^php${php_number}_release=" ${OPTIONS_CONF}` + if [ "${C}" -gt 1 ]; then + grep -e "^php${php_number}_release=" ${OPTIONS_CONF} + do_exit 1 "php${php_number}_release has been set twice in the options.conf. This will cause problems. Edit it to remove one of them." + fi + C=`grep -c -e "^php${php_number}_mode=" ${OPTIONS_CONF}` + if [ "${C}" -gt 1 ]; then + grep -e "^php${php_number}_mode=" ${OPTIONS_CONF} + do_exit 1 "php${php_number}_mode has been set twice in the options.conf. This will cause problems. Edit it to remove one of them." + fi + }; + done + + #php 5.5 and older will never compile with openssl 1.1.0 + if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP1_RELEASE_OPT}" = "5.4" ] || [ "${PHP1_RELEASE_OPT}" = "5.5" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.4" ] || [ "${PHP2_RELEASE_OPT}" = "5.5" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.4" ] || [ "${PHP3_RELEASE_OPT}" = "5.5" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.4" ] || [ "${PHP4_RELEASE_OPT}" = "5.5" ]; then + OV=`openssl_version | cut -d. -f1,2` + if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.1 'php 5.x vs openssl 1.1.0 ver check'`" -ge 0 ] && [ ! -e ${WORKDIR}/custom/fpm/.custom_openssl ]; then + do_exit 1 "php 5.3, 5.4, 5.5 cannot compile against openssl 1.1.0 or higher. Try php 5.6 or higher." + fi + fi + + if [ "${APACHE_VER_OPT}" != "2.4" ] && [ "${APACHE_VER_OPT}" != "" ]; then + do_exit 1 "Wrong apache_ver value set in ${OPTIONS_CONF}." + fi + + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + if [ "${OS}" = "FreeBSD" ]; then + do_exit 1 "mod_ruid2 does not support FreeBSD." + elif [ -e ${DEBIAN_VERSION} ]; then + if [ "${OS_DEBIAN_VER}" = "9" ] || [ "${OS_DEBIAN_VER}" = "10" ]; then + do_exit 1 "mod_ruid2 does not support Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=866395." + fi + elif [ "${OS_CENTOS_VER}" = "8" ]; then + do_exit 1 "mod_ruid2 does not support CentOS8." + fi + fi + + if [ "${FTPD_OPT}" = "pureftpd" ]; then + if [ -s "$DACONF_FILE" ]; then + UNIFIED_FTP=`/usr/local/directadmin/directadmin c | grep -m1 unified_ftp_password_file | cut -d= -f2` + if [ "$UNIFIED_FTP" != "1" ]; then + echo "unified_ftp_password_file is not set to 1. You must convert before you can use pureftpd" + echo "Please read this guide: https://www.directadmin.com/features.php?id=1134" + echo "" + echo "Simulation:" + echo " cd /usr/local/directadmin" + echo " echo 'action=convert&value=unifiedftp&simulate=yes' >> data/task.queue" + echo " ./dataskq d1" + echo "" + echo "Conversion:" + echo " cd /usr/local/directadmin" + echo " echo 'unified_ftp_password_file=1' >> conf/directadmin.conf" + echo " echo 'action=convert&value=unifiedftp' >> data/task.queue" + echo " ./dataskq d1" + do_exit 1 "" + fi + fi + fi + + if [ "${CRON_FREQUENCY_OPT}" != "daily" ] && [ "${CRON_FREQUENCY_OPT}" != "weekly" ] && [ "${CRON_FREQUENCY_OPT}" != "monthly" ]; then + echo "Wrong cron_frequency value set in ${OPTIONS_CONF}" + echo "Current value: ${CRON_FREQUENCY_OPT}" + do_exit 1 "Valid values: daily, weekly, or monthly" + fi + + if [ "${SA_UPDATE_OPT}" != "no" ] && [ "${SA_UPDATE_OPT}" != "daily" ] && [ "${SA_UPDATE_OPT}" != "weekly" ] && [ "${SA_UPDATE_OPT}" != "monthly" ]; then + echo "Wrong sa_update value set in ${OPTIONS_CONF}" + echo "Current value: ${SA_UPDATE_OPT}" + do_exit 1 "Valid values: no, daily, weekly, or monthly" + fi + + if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ] && [ "${SPAMD_OPT}" != "spamassassin" ] && [ "${SPAMD_OPT}" != "rspamd" ]; then + echo "easy_spam_fighter requires spamassassin to be enabled." + do_exit 1 "Install SpamAssassin: https://help.directadmin.com/item.php?id=36" + fi + + if [ "${DOWNLOADSERVER_OPT}" = "files26.directadmin.com" ]; then + setOpt downloadserver damirror.unix-solutions.be + echo "files26 has been replaced with new name damirror.unix-solutions.be, used on the next run" + fi + if [ -e /usr/include/sys/select.h ] && [ ! -s /usr/include/sys/select.h ] && [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + echo "Found broken glibc-headers package, reinstalling..." + yum -y reinstall glibc-headers + fi + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ] && [ ! -e /etc/yum.repos.d/oracle-epel-ol8.repo ]; then + yum -y install oraclelinux-release-el8 + elif [ ! -e /etc/yum.repos.d/oracle-linux-ol8.repo ] && [ ! -e /etc/yum.repos.d/oracle-epel-ol8.repo ] && [ ! -e /etc/yum.repos.d/epel.repo ]; then + yum -y install epel-release + if [ ! -e /etc/yum.repos.d/epel.repo ]; then + if [ "${OS_CENTOS_VER}" = "6" ]; then + #it's eol, might not have it.. + touch /etc/yum.repos.d/epel.repo + elif [ "${OS_CENTOS_VER}" = "7" ]; then + yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm + elif [ "${OS_CENTOS_VER}" = "8" ]; then + yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm + fi + fi + fi + fi +} + +checkMD5() { + #$1 is the local file + #$2 is the versions.txt variable + #return values: + #1 for error, try agian + #0 for nothing to report. + + if [ ! -e $MD5SUM ]; then + echo 0 + return + fi + + if [ ! -e "$1" ]; then + echo 1 + fi + + VMD5=`getMD5 $2` + if [ "$VMD5" = "" ]; then + echo 0 + return + fi + + if [ ${OS} = "FreeBSD" ]; then + FMD5=`$MD5SUM -q $1` + else + FMD5=`$MD5SUM $1 | cut -d\ -f1` + fi + + + if [ "$FMD5" = "$VMD5" ]; then + echo 0 + else + echo 1 + fi +} + +json_toggle() { + JSON_CASE=1 +} + +JSON_CASE=0 +case "$1" in + versions_json) json_toggle ;; + list_removals_json) json_toggle ;; + gen_help_json) json_toggle ;; + list_configs_json) json_toggle ;; + settings_json) json_toggle ;; +esac + +GET_FILE_FAILED_COUNT=0 +#getFile file.tar.gz name (localfile.tar.gz) +#getFile all/awstats/file.tar.gz awstats awstats.tar.gz +getFile() { + cd ${CWD} + + TRY_DIFFERENT_THRESH=2 + GIVE_UP_THRESH=5 + + LOCAL_NAME=$1 + + if [ "$3" != "" ]; then + LOCAL_NAME=$3 + fi + + if [ ! -s ${LOCAL_NAME} ]; then + DOWNLOAD_DIR_NAME="`dirname ${CWD}/${LOCAL_NAME}`" + if [ ! -d "${DOWNLOAD_DIR_NAME}" ]; then + mkdir -p "${DOWNLOAD_DIR_NAME}" + fi + printf "Downloadingg ${WEBPATH}/${1} -> ${CWD}/${LOCAL_NAME} " + if [ ${OS} = "FreeBSD" ]; then + fetch -o ${CWD}/${LOCAL_NAME} ${WEBPATH}/${1} + else + curl ${CURL_CONNECT_OPTIONS} -o ${CWD}/${LOCAL_NAME} ${WEBPATH}/${1} + fi + + if [ ! -s ${LOCAL_NAME} ]; then + echo "Downloaded file ${CWD}/${LOCAL_NAME} does not exist or is empty after download" + echo "cwd is: `pwd`" + echo "${boldon}Fileserver might be down, using the backup file server..${boldoff}" + if [ ${OS} = "FreeBSD" ]; then + fetch -o ${CWD}/${LOCAL_NAME} ${WEBPATH_BACKUP}/${1} + else + curl ${CURL_CONNECT_OPTIONS} -o ${CWD}/${LOCAL_NAME} ${WEBPATH_BACKUP}/${1} + fi + + if [ "${GET_FILE_FAILED_COUNT}" -eq ${GIVE_UP_THRESH} ]; then + echo "" + echo "" + echo "${boldon}There seem to be many connection issues. Check your network and /etc/resolv.conf file${boldoff}" + echo "Also try finding a faster server: https://help.directadmin.com/item.php?id=305" + echo "" + echo "" + sleep 5 + + #messages/changes will now stop because it's above. + GET_FILE_FAILED_COUNT=$((GET_FILE_FAILED_COUNT+1)) + + elif [ "${GET_FILE_FAILED_COUNT}" -lt ${GIVE_UP_THRESH} ]; then + GET_FILE_FAILED_COUNT=$((GET_FILE_FAILED_COUNT+1)) + + if [ "${GET_FILE_FAILED_COUNT}" -gt ${TRY_DIFFERENT_THRESH} ]; then + + echo "" + echo "${boldon}Too many failed attempts with ${DOWNLOADSERVER_OPT}. Will try a different server.${boldoff}" + SET_DL=da-mirror.wpcloud.vn + case "${DOWNLOADSERVER_OPT}" in + da-mirror.wpcloud.vn) SET_DL=${WEBPATH_BACKUP_IP} + ;; + files1.directadmin.com) SET_DL=${WEBPATH_BACKUP_IP} + ;; + files2.directadmin.com) SET_DL=files1.directadmin.com + ;; + files8.directadmin.com) SET_DL=files6.directadmin.com + ;; + files11.directadmin.com) SET_DL=files6.directadmin.com + ;; + files15.directadmin.com) SET_DL=files6.directadmin.com + ;; + files16.directadmin.com) SET_DL=files6.directadmin.com + ;; + esac + + echo "${boldon}We'll temporarily try using $SET_DL instead${boldoff}" + echo "" + + DOWNLOADSERVER_OPT=${SET_DL} + if echo "${DOWNLOADSERVERS_HTTPS_LIST}" | grep -m1 -q " ${DOWNLOADSERVER_OPT} "; then + DOWNLOADSERVER_SCHEME=https + else + DOWNLOADSERVER_SCHEME=http + fi + WEBPATH=${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/custombuild + WEBPATH_SERVICES=${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services + + sleep 2 + fi + fi + fi + elif [ "${2}" = "" ]; then + if [ "${JSON_CASE}" -eq 0 ]; then + printf "Downloading\t\t$1...\n" + fi + if [ ${OS} = "FreeBSD" ]; then + fetch -o ${CWD}/${LOCAL_NAME} ${WEBPATH}/${1} + else + curl ${CURL_CONNECT_OPTIONS} -o ${CWD}/${LOCAL_NAME} ${WEBPATH}/${1} + fi + fi + + if [ "$2" != "" ]; then + + M=`checkMD5 ${LOCAL_NAME} ${2}` + + if [ "$M" != "0" ]; then + if [ "${JSON_CASE}" -eq 0 ]; then + echo "" + echo "${boldon}*** MD5 Checksum for ${LOCAL_NAME} Failed. Redownloading...***${boldoff}" + echo "" + fi + #we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop. + + rm -f ${LOCAL_NAME} + getFile ${1} "" ${3} + + M=`checkMD5 ${LOCAL_NAME} ${2}` + + if [ "$M" != "0" ]; then + echo "" + echo "" + echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}" + echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded." + echo "Install continuing with this possibly corrupted file. (it may also be fine)" + echo "" + echo "" + elif [ "${JSON_CASE}" -eq 0 ]; then + echo "MD5 Checksum on ${LOCAL_NAME} passed." + fi + fi + fi +} + +downloadVersionsTxt() { + if [ ${OS} = "FreeBSD" ]; then + fetch -o ./versions.txt ${WEBPATH}/versions.txt 2> /dev/null + else + curl ${CURL_CONNECT_OPTIONS} -o ./versions.txt ${WEBPATH}/versions.txt 2> /dev/null + fi + + if [ ! -s ./versions.txt ]; then + echo "Could not get versions.txt from ${WEBPATH}. Trying backup." + if [ ${OS} = "FreeBSD" ]; then + fetch -o ./versions.txt ${WEBPATH_BACKUP}/versions.txt 2> /dev/null + else + curl ${CURL_CONNECT_OPTIONS} -o ./versions.txt ${WEBPATH_BACKUP}/versions.txt 2> /dev/null + fi + + if [ -s ./versions.txt ]; then + echo "Ok, that worked. Please try using a different mirror." + echo "./build set_fastest" + echo "https://help.directadmin.com/item.php?id=305" + + echo "" + echo "Using ${WEBPATH_BACKUP} for the remainder of this run." + sleep 10 + + WEBPATH=${WEBPATH_BACKUP} + + else + do_exit 1 "Unable to download versions.txt from any mirror" + fi + + fi + + + #because the versions.txt has the md5 for is, saves us re-downloading it if we already have the latest. + getFile patches_versions.txt patches_versions + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_LITESPEED}/versions.txt -o ${VERSIONS_FILE_LITESPEED} 2> /dev/null + if [ ! -s ${VERSIONS_FILE_LITESPEED} ]; then + getFile versions_litespeed.txt versions_litespeed + fi + fi + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CL}/${VERSIONS_CL} -o ${VERSIONS_FILE_CL} 2> /dev/null + if [ ! -s ${VERSIONS_FILE_CL} ]; then + getFile versions_cl.txt versions_cl + fi + fi + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CWAF}/doc/comodo_versions.txt -o ${VERSIONS_FILE_CWAF} 2> /dev/null + if [ ! -s ${VERSIONS_FILE_CWAF} ]; then + getFile versions_cwaf.txt versions_cwaf + fi + fi + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + if [ ! -d mysql ]; then + mkdir -p mysql + fi + getFile all/mariadb/jemalloc/jemalloc_versions.txt jemalloc_versions mysql/versions_jemalloc.txt + getFile all/mariadb/galera/galera_versions.txt galera_versions mysql/versions_galera.txt + fi + fi +} + +SKIP_LDCONFIG_SECTION=0 +skip_ldconfig_toggle() { + SKIP_LDCONFIG_SECTION=1 +} +case "$1" in + "") skip_ldconfig_toggle ;; + opt_help) skip_ldconfig_toggle ;; + set) skip_ldconfig_toggle ;; + set_php) skip_ldconfig_toggle ;; + get_versions_txt) skip_ldconfig_toggle ;; + update_script) skip_ldconfig_toggle ;; + version) skip_ldconfig_toggle ;; + set_fastest) skip_ldconfig_toggle ;; + set_fastest_quiet) skip_ldconfig_toggle ;; + kill) skip_ldconfig_toggle ;; + update_da) skip_ldconfig_toggle ;; + list_configs_json) skip_ldconfig_toggle ;; + settings_json) skip_ldconfig_toggle ;; + get_timezone) skip_ldconfig_toggle ;; + custom_config) skip_ldconfig_toggle ;; + set_versions_txt) skip_ldconfig_toggle ;; + show_component_config) skip_ldconfig_toggle ;; + remove_customized_config) skip_ldconfig_toggle ;; + show_file) skip_ldconfig_toggle ;; + check_options) skip_ldconfig_toggle ;; +esac + +if [ "${SKIP_LDCONFIG_SECTION}" = "0" ]; then + #Is the default PHP running as CGI? This variable is not used anymore, but left for the future + GREP_PHP_MODE="`grep -m1 '^php1_mode=' ${WORKDIR}/options.conf | cut -d= -f2`" + + # Get apache version from directadmin.conf + DACONF_APACHE_VER=1.3 + if [ -e ${DACONF_FILE} ]; then + DACONF_APACHE_VER=`grep -m1 "^apache_ver=" ${DACONF_FILE} | cut -d= -f2` + fi + + # Download versions.txt if AUTOVER_OPT is set to "yes" + if [ "${AUTOVER_OPT}" = "yes" ]; then + downloadVersionsTxt + fi + + # Check if ld.so.conf has /usr/local/lib + if [ ! -e /etc/ld.so.conf ] || [ "`grep -m1 -c -E '/usr/local/lib$' /etc/ld.so.conf`" = "0" ]; then + echo "/usr/local/lib" >> /etc/ld.so.conf + /sbin/ldconfig + fi + + # Check if ld.so.conf has /usr/local/lib + if [ -d /usr/local/lib64 ]; then + if [ ! -e /etc/ld.so.conf ] || [ "`grep -m1 -c -E '/usr/local/lib64$' /etc/ld.so.conf`" = "0" ]; then + echo "/usr/local/lib64" >> /etc/ld.so.conf + /sbin/ldconfig + fi + fi + + if [ "$1" = "apache" ] || [ "$1" = "nginx_apache" ]; then + if [ "`grep -m1 -c -E '^/usr/lib/apache$' /etc/ld.so.conf`" = "1" ]; then + perl -pi -e 's|^/usr/lib/apache|#/usr/lib/apache|' /etc/ld.so.conf + /sbin/ldconfig + fi + fi +fi + +getMD5CL() { + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 3` + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CL} | cut -d ':' -f 3` + fi + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CL} | cut -d ':' -f 3` + fi + + echo "${RESULT}" +} + +getMD5CWAF() { + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 3` + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CWAF} | cut -d ':' -f 3` + fi + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CWAF} | cut -d ':' -f 3` + fi + + echo "${RESULT}" +} + +getMD5LSWS() { + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 3` + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_LITESPEED} | cut -d ':' -f 3` + fi + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_LITESPEED} | cut -d ':' -f 3` + fi + + echo "${RESULT}" +} + +getMD5Jemalloc() { + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 3` + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_JEMALLOC} | cut -d ':' -f 3` + fi + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_JEMALLOC} | cut -d ':' -f 3` + fi + + echo "${RESULT}" +} + +getMD5Galera() { + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 3` + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_GALERA} | cut -d ':' -f 3` + fi + else + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_GALERA} | cut -d ':' -f 3` + fi + + echo "${RESULT}" +} + +checkMD5CL() { + #$1 is the local file + #$2 is the versions_cl.txt or versions_litespeed.txt variable + #return values: + #1 for error, try agian + #0 for nothing to report. + + if [ ! -e $MD5SUM ]; then + echo 0 + return + fi + + if [ ! -e "$1" ]; then + echo 1 + fi + + VMD5=`getMD5CL $2` + if [ "$VMD5" = "" ]; then + echo 0 + return + fi + + FMD5=`$MD5SUM $1 | cut -d\ -f1` + + if [ "$FMD5" = "$VMD5" ]; then + echo 0 + else + echo 1 + fi +} + +checkMD5CWAF() { + #$1 is the local file + #$2 is the versions_cwaf.txt + #return values: + #1 for error, try agian + #0 for nothing to report. + + if [ ! -e $MD5SUM ]; then + echo 0 + return + fi + + if [ ! -e "$1" ]; then + echo 1 + fi + + VMD5=`getMD5CWAF $2` + if [ "$VMD5" = "" ]; then + echo 0 + return + fi + + if [ ${OS} = "FreeBSD" ]; then + FMD5=`$MD5SUM -q $1` + else + FMD5=`$MD5SUM $1 | cut -d\ -f1` + fi + + if [ "$FMD5" = "$VMD5" ]; then + echo 0 + else + echo 1 + fi +} + +checkMD5LSWS() { + #$1 is the local file + #$2 is the versions_cl.txt or versions_litespeed.txt variable + #return values: + #1 for error, try agian + #0 for nothing to report. + + if [ ! -e $MD5SUM ]; then + echo 0 + return + fi + + if [ ! -e "$1" ]; then + echo 1 + fi + + VMD5=`getMD5LSWS $2` + if [ "$VMD5" = "" ]; then + echo 0 + return + fi + + if [ ${OS} = "FreeBSD" ]; then + FMD5=`$MD5SUM -q $1` + else + FMD5=`$MD5SUM $1 | cut -d\ -f1` + fi + + if [ "$FMD5" = "$VMD5" ]; then + echo 0 + else + echo 1 + fi +} + +getFileCL() { + cd ${CWD} + + if [ ! -s ${1} ]; then + printf "Downloading\t\t$1...\n" + curl ${CURL_CONNECT_OPTIONS} -o ${CWD}/${1} ${WEBPATH_CL}/${1} + tar xzf ${1} --no-same-owner + fi + + if [ "$#" -eq 2 ]; then + + M=`checkMD5CL ${1} ${2}` + + if [ "$M" != "0" ]; then + echo "" + echo "${boldon}*** MD5 Checksum for $1 Failed. Redownloading...***${boldoff}" + echo "" + #we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop. + + rm -f $1 + getFileCL $1 + tar xzf ${1} --no-same-owner + M=`checkMD5CL ${1} ${2}` + + if [ "$M" != "0" ]; then + echo "" + echo "" + echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}" + echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded." + echo "Install continuing with this possibly corrupted file. (it may also be fine)" + echo "" + echo "" + fi + fi + fi +} + +getFileCWAF() { + cd ${CWD} + + if [ ! -s ${1} ]; then + printf "Downloading\t\t$1...\n" + curl ${CURL_CONNECT_OPTIONS} -o ${CWD}/${1} "${WEBPATH_CWAF}/api/da_vendor?file=${1}" + fi + + if [ "$#" -eq 2 ]; then + + M=`checkMD5CWAF ${1} ${2}` + + if [ "$M" != "0" ]; then + echo "" + echo "${boldon}*** MD5 Checksum for $1 Failed. Redownloading...***${boldoff}" + echo "" + #we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop. + + rm -f $1 + getFileCWAF $1 + M=`checkMD5CWAF ${1} ${2}` + + if [ "$M" != "0" ]; then + echo "" + echo "" + echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}" + echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded." + echo "Install continuing with this possibly corrupted file. (it may also be fine)" + echo "" + echo "" + fi + fi + fi +} + +getFileLSWS() { + cd ${CWD} + + if [ ! -s ${1} ]; then + printf "Downloading\t\t$1...\n" + curl ${CURL_CONNECT_OPTIONS} -o ${CWD}/${1} ${WEBPATH_LITESPEED}/${LITESPEED_REPO}/${1} + fi + + if [ "$#" -eq 2 ]; then + M=`checkMD5LSWS ${1} ${2}` + + if [ "$M" != "0" ]; then + echo "" + echo "${boldon}*** MD5 Checksum for $1 Failed. Redownloading...***${boldoff}" + echo "" + #we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop. + + rm -f $1 + getFileLSWS $1 + tar xzf ${1} --no-same-owner + M=`checkMD5LSWS ${1} ${2}` + + if [ "$M" != "0" ]; then + echo "" + echo "" + echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}" + echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded." + echo "Install continuing with this possibly corrupted file. (it may also be fine)" + echo "" + echo "" + fi + fi + fi +} +#################################################### + +add_to_system_backup() { + SB_TYPE=$1 + SB_WHERE=$2 + + F=/usr/local/sysbk/mod/custom.$SB_TYPE + if [ ! -e ${F} ]; then + return; + fi + + if [ ! -e ${SB_WHERE} ]; then + echo "add_to_system_backups: cannot find $SB_WHERE to add to $F"; + return; + fi + + C=`grep -c -e "^${SB_WHERE}\$" $F` + if [ "$C" -gt 0 ]; then + return; + fi + + echo "${SB_WHERE}" >> $F + echo "$SB_WHERE added to $F"; +} + +#################################################### + +# Rewrite directadmin-vhosts.conf +doVhosts() { + PATHNAME=${HTTPDCONF}/extra + + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + PATHNAME=${NGINXCONF} + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + PATHNAME=${LSWS_HOME}/conf + fi + + if [ ! -d ${PATHNAME} ]; then + mkdir -p ${PATHNAME} + fi + echo -n '' > ${PATHNAME}/directadmin-vhosts.conf + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + for i in `ls /usr/local/directadmin/data/users/*/nginx.conf`; do + echo "include $i;" >> ${PATHNAME}/directadmin-vhosts.conf + done + elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then + for i in `ls /usr/local/directadmin/data/users/*/httpd.conf`; do + echo "Include $i" >> ${PATHNAME}/directadmin-vhosts.conf + done + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + for i in `ls /usr/local/directadmin/data/users/*/openlitespeed.conf`; do + echo "include $i" >> ${PATHNAME}/directadmin-vhosts.conf + done + elif [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo -n '' > ${NGINXCONF}/directadmin-vhosts.conf + for i in `ls /usr/local/directadmin/data/users/*/nginx.conf`; do + echo "include $i;" >> ${NGINXCONF}/directadmin-vhosts.conf + done + for i in `ls /usr/local/directadmin/data/users/*/httpd.conf`; do + echo "Include $i" >> ${PATHNAME}/directadmin-vhosts.conf + done + fi +} + +#################################################### + +# We need this up for compatibility purposes +PHP_INI_OPT=`getOpt php_ini no` + +roundcube_version() { + RCVERFILE=/var/www/html/roundcube/program/include/iniset.php + if [ ! -e $RCVERFILE ]; then + echo 0 + return + fi + grep -m1 "RCMAIL_VERSION" $RCVERFILE | cut -d\' -f4 | cut -d\ -f1 +} + +exim_version() { + /usr/sbin/exim -bV 2>/dev/null | grep -m1 'built' | head -n1 | awk '{ print $3 }' | tr '_' '.' +} + +exim_conf_version() { + COUNT=0 + T_EXIMCONFV=0 + if [ -e /etc/exim.conf ]; then + COUNT=`head -n1 /etc/exim.conf | grep -c 'Version'` + if [ "${COUNT}" -gt 0 ]; then + T_EXIMCONFV="`head -n1 /etc/exim.conf | awk '{ print $6 }'`" + fi + + if [ "${T_EXIMCONFV}" = "0" ]; then + COUNT=`head -n2 /etc/exim.conf | grep -c release` + if [ "${COUNT}" -gt 0 ]; then + T_EXIMCONFV="`head -n2 /etc/exim.conf | grep release | awk '{ print $2 }' | cut -d. -f4,5,6 | cut -d- -f1`" + fi + fi + fi + + if [ "${T_EXIMCONFV}" = "0" ]; then + writeLog "exim_conf_version: Cannot determine version of /etc/exim.conf"; + fi + + echo $T_EXIMCONFV +} + +exim_dkim_conf_version() { + T_EXIMDKIMV=0 + if [ -e /etc/exim.dkim.conf ]; then + T_EXIMDKIMV=`head -n1 /etc/exim.dkim.conf | cut -d\# -f2` + fi + if [ "${T_EXIMDKIMV}" = "" ]; then + T_EXIMDKIMV=0 + fi + + echo ${T_EXIMDKIMV} +} + +exim_pl_version() { + EPL=/etc/exim.pl + if [ ! -s ${EPL} ]; then + echo 0 + return; + fi + + grep '#VERSION=' /etc/exim.pl | head -n1 | cut -d= -f2 +} + +rspamd_conf_version() { + COUNT=0 + T_RSDV=0 + RSDTXT=/etc/exim/rspamd/README.txt + if [ -e ${RSDTXT} ]; then + COUNT=`head -n1 ${RSDTXT} | grep -c '^#'` + if [ "${COUNT}" -gt 0 ]; then + T_RSDV="`head -n1 ${RSDTXT} | cut -d'#' -f2`" + fi + fi + echo ${T_RSDV} +} + +getVerLSWS() { + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_LITESPEED} | cut -d ':' -f 2` + + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 2` + fi + fi + + if [ "${RESULT}" = "" ]; then + >&2 echo "ERROR: version of $1 not found in versions_litespeed.txt!" + RESULT="0" + fi + + echo "${RESULT}" +} + +getVerJemalloc() { + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_JEMALLOC} | cut -d ':' -f 2 | cut -d '-' -f1` + + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 2` + fi + fi + + if [ "${RESULT}" = "" ]; then + >&2 echo "ERROR: version of $1 not found in versions_jemalloc.txt!" + RESULT="0" + fi + + echo "${RESULT}" +} + +getFilenameJemalloc() { + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_JEMALLOC} | cut -d ':' -f 4` + + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 4` + fi + fi + + if [ "${RESULT}" = "" ]; then + >&2 echo "ERROR: version of $1 not found in versions_jemalloc.txt!" + RESULT="0" + fi + + echo "${RESULT}" +} + +getVerGalera() { + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_GALERA} | cut -d ':' -f 2 | cut -d '-' -f1` + + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 2` + fi + fi + + if [ "${RESULT}" = "" ]; then + >&2 echo "ERROR: version of $1 not found in versions_galera.txt!" + RESULT="0" + fi + + echo "${RESULT}" +} + +getFilenameGalera() { + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_GALERA} | cut -d ':' -f 4` + + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 4` + fi + fi + + if [ "${RESULT}" = "" ]; then + >&2 echo "ERROR: version of $1 not found in versions_galera.txt!" + RESULT="0" + fi + + echo "${RESULT}" +} + +getVerCL() { + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CL} | cut -d ':' -f 2` + + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 2` + fi + fi + + if [ "${RESULT}" = "" ]; then + >&2 echo "ERROR: version of $1 not found in versions_cl.txt!" + RESULT="0" + fi + + echo "${RESULT}" +} + +getVerCWAF() { + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CWAF} | cut -d ':' -f 2` + + if ${EXISTS_VERSIONS_FILE_CUSTOM}; then + if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then + RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 2` + fi + fi + + if [ "${RESULT}" = "" ]; then + >&2 echo "ERROR: version of $1 not found in versions_cwaf.txt!" + RESULT="0" + fi + + echo "${RESULT}" +} + +GET_SERVICE_VERSIONS=1 +dont_skip_toggle() { + GET_SERVICE_VERSIONS=0 +} +case "$1" in + "") dont_skip_toggle ;; + version) dont_skip_toggle ;; + kill) dont_skip_toggle ;; + update_da) dont_skip_toggle ;; + get_timezone) dont_skip_toggle ;; + set_versions_txt) dont_skip_toggle ;; + show_file) dont_skip_toggle ;; + settings_json) dont_skip_toggle ;; + check_options) dont_skip_toggle ;; + opt_help) dont_skip_toggle ;; + get_versions_txt) dont_skip_toggle ;; + update_script) dont_skip_toggle ;; + set_fastest) dont_skip_toggle ;; + set_fastest_quiet) dont_skip_toggle ;; +esac + +if [ "$1" = "gen_help_json" ] && [ "$2" != "" ]; then + GET_SERVICE_VERSIONS=0 +fi + +# check if we have versions.txt +if [ ! -s ${VERSIONS_FILE} ]; then + cd ${WORKDIR} + getFile versions.txt +fi + +if [ ! -s ${VERSIONS_FILE} ]; then + do_exit 1 "There is no versions.txt file. Unable to download." +else + SOURCE_VERSIONS_TXT=`awk -F ":" '{gsub(/\./,"_",$1);gsub(/-/,"_",$1);print "VERSIONS_TXT_"$1"="$2}' ./versions.txt` + eval ${SOURCE_VERSIONS_TXT} + if [ -s ./custom_versions.txt ]; then + SOURCE_VERSIONS_TXT=`awk -F ":" '{gsub(/\./,"_",$1);gsub(/-/,"_",$1);print "VERSIONS_TXT_"$1"="$2}' ./custom_versions.txt` + eval ${SOURCE_VERSIONS_TXT} + fi +fi + +# check if we have patches_versions.txt +if [ ! -s ${PATCHES_VERSIONS_FILE} ]; then + cd ${WORKDIR} + getFile patches_versions.txt patches_versions +fi + +if [ ! -s ${PATCHES_VERSIONS_FILE} ]; then + do_exit 1 "There is no versions.txt file. Unable to download." +fi + +#The following one needs an exception: +ROUNDCUBE_VER=`getVer roundcubemail` +ROUNDCUBE_MAJOR_VER=`echo ${ROUNDCUBE_VER} | cut -d. -f1` +if [ "${PHP1_RELEASE_OPT}" = "5.3" ]; then + SQUIRRELMAIL_VER=`getVer squirrelmail` + SQUIRRELMAIL_VER_NAME=squirrelmail +else + SQUIRRELMAIL_VER=`getVer squirrelmail_svn` + SQUIRRELMAIL_VER_NAME=squirrelmail_svn +fi + +if [ "${GET_SERVICE_VERSIONS}" = "1" ]; then + if [ "$1" != "list_configs_json" ] && [ "$1" != "custom_config" ] && [ "$1" != "show_component_config" ] && [ "$1" != "remove_customized_config" ]; then + if [ "${WEBSERVER_OPT}" = "litespeed" ] && [ ! -e versions_litespeed.txt ] ; then + getFile versions_litespeed.txt versions_litespeed + fi + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ ! -e versions_cl.txt ]; then + getFile versions_cl.txt versions_cl + fi + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ] && [ ! -e versions_cwaf.txt ]; then + getFile versions_cwaf.txt versions_cwaf + fi + + ##################################################### + # User Variables + MOD_LSAPI_VER=no + MOD_HOSTINGLIMITS_VER=no + MOD_PROCTITLE_VER=no + CL_PHP_LSAPI_VER=no + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + MOD_LSAPI_VER=`getVerCL mod_lsapi` + MOD_HOSTINGLIMITS_VER=`getVerCL mod_hostinglimits` + MOD_PROCTITLE_VER=`getVerCL mod_proctitle` + CL_PHP_LSAPI_VER=`getVerCL php-litespeed` + fi + NGINX_VER=`getVer nginx` + DIRECTADMIN_VER=`getVer directadmin` + + NGHTTP2_VER=`getVer nghttp2` + + APACHE2_VER=`getVer apache2.4` + AP2_MINOR_VER=`echo ${APACHE2_VER} | cut -d. -f3` + + # Minimal required version of Apache 2.4 + if [ "${AP2_MINOR_VER}" -lt 9 ]; then + do_exit 1 "Minimal required version of Apache is 2.4.9. Please uncustomize your versions.txt file." + fi + + APR_VER=`getVer apr` + APR_UTIL_VER=`getVer apr-util` + + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + PHP_VERSION_NUMBER=`getVer php${php_shortrelease}` + eval `echo "PHP${php_shortrelease}_VER=${PHP_VERSION_NUMBER}"` + done + + PHP1_VERSION_EVAL_VAR=PHP${PHP1_SHORTRELEASE}_VER + PHP1_RELEASE_VER=$(eval_var ${PHP1_VERSION_EVAL_VAR}) + + PHP2_RELEASE_VER=no + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + PHP2_VERSION_EVAL_VAR=PHP${PHP2_SHORTRELEASE}_VER + PHP2_RELEASE_VER=$(eval_var ${PHP2_VERSION_EVAL_VAR}) + fi + + PHP3_RELEASE_VER=no + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + PHP3_VERSION_EVAL_VAR=PHP${PHP3_SHORTRELEASE}_VER + PHP3_RELEASE_VER=$(eval_var ${PHP3_VERSION_EVAL_VAR}) + fi + + PHP4_RELEASE_VER=no + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + PHP4_VERSION_EVAL_VAR=PHP${PHP4_SHORTRELEASE}_VER + PHP4_RELEASE_VER=$(eval_var ${PHP4_VERSION_EVAL_VAR}) + fi + + MODSECURITY_VER=`getVer modsecurity` + MODSECURITY_FILENAME=modsecurity + LIBMODSECURITY_VER=`getVer modsecurity3` + LIBMODSECURITY_FILENAME=modsecurity + MODSECURITY_NGINX_CONNECTOR_VER=`getVer modsecurity3_nginx` + MODSECURITY_NGINX_CONNECTOR_FILENAME=modsecurity-nginx + MODSECURITY_APACHE_CONNECTOR_VER=`getVer modsecurity3_apache` + MODSECURITY_APACHE_CONNECTOR_FILENAME=modsecurity-apache + if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ] && [ "${MODSECURITY_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + CWAF_RULES_LS_VER=`getVerCWAF cwaf_rules_ls` + elif [ "${WEBSERVER_OPT}" = "apache" ]; then + CWAF_RULES_VER=`getVerCWAF cwaf_rules` + else + CWAF_RULES_NGINX_VER=`getVerCWAF cwaf_rules_nginx_3` + fi + fi + OWASP_RULES_VER=`getVer owasp3_rules` + HTSCANNER_VER=`getVer htscanner` + MOD_RUID2_VER=`getVer mod_ruid2` + MOD_ACLR2_VER=`getVer mod_aclr2` + MOD_FCGID_VER=`getVer mod_fcgid` + FCGID_SH_VER=`getVer fcgid_sh` + + PIGZ_VER=`getVer pigz` + + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + if [ "${MYSQL_OPT}" = "5.0" ]; then + MYSQL_VER=`getVer mysql5.0` + MYSQL_REL=`getVer mysql5.0_release` + elif [ "${MYSQL_OPT}" = "5.1" ]; then + MYSQL_VER=`getVer mysql5.1` + MYSQL_REL=`getVer mysql5.1_release` + elif [ "${MYSQL_OPT}" = "5.5" ]; then + MYSQL_VER=`getVer mysql5.5` + MYSQL_REL=`getVer mysql5.5_release` + elif [ "${MYSQL_OPT}" = "5.6" ]; then + MYSQL_VER=`getVer mysql5.6` + MYSQL_REL=`getVer mysql5.6_release` + if [ "${OS}" != "FreeBSD" ] && [ ! -s ${DEBIAN_VERSION} ]; then + if [ "${OS_CENTOS_VER}" = "5" ]; then + MYSQL_VER=5.6.36 + fi + fi + elif [ "${MYSQL_OPT}" = "5.7" ]; then + MYSQL_VER=`getVer mysql5.7` + MYSQL_REL=`getVer mysql5.7_release` + elif [ "${MYSQL_OPT}" = "8.0" ]; then + MYSQL_VER=`getVer mysql8.0` + MYSQL_REL=`getVer mysql8.0_release` + else + MYSQL_VER=0 + MYSQL_REL=0 + fi + if [ "$MYSQL_REL" = "" ]; then + MYSQL_REL=0 + fi + else + if [ "${MARIADB_OPT}" = "5.5" ]; then + MARIADB_VER=`getVer mariadb5.5` + elif [ "${MARIADB_OPT}" = "10.0" ]; then + MARIADB_VER=`getVer mariadb10.0` + elif [ "${MARIADB_OPT}" = "10.1" ]; then + MARIADB_VER=`getVer mariadb10.1` + elif [ "${MARIADB_OPT}" = "10.2" ]; then + MARIADB_VER=`getVer mariadb10.2` + elif [ "${MARIADB_OPT}" = "10.3" ]; then + MARIADB_VER=`getVer mariadb10.3` + elif [ "${MARIADB_OPT}" = "10.4" ]; then + MARIADB_VER=`getVer mariadb10.4` + elif [ "${MARIADB_OPT}" = "10.5" ]; then + MARIADB_VER=`getVer mariadb10.5` + elif [ "${MARIADB_OPT}" = "10.6" ]; then + MARIADB_VER=`getVer mariadb10.6` + elif [ "${MARIADB_OPT}" = "11.4" ]; then + MARIADB_VER=`getVer mariadb11.4` + else + MARIADB_VER=0 + fi + fi + + PCRE_VER=`getVer pcre_current` + + PCRE2_VER=`getVer pcre2` + CURL_VER=`getVer curl` + ZLIB_VER=`getVer zlib-current` + + SUPHP_VER=`getVer suphp_current` + + DOVECOT_VER=`getVer dovecot` + DOVECOT_REL=`echo ${DOVECOT_VER} | cut -d. -f1,2` + PIGEONHOLE_VER=no + if [ "${DOVECOT_REL}" = "2.1" ]; then + DOVECOT_SHORTREL=21 + PIGEONHOLE_VER=`getVer pigeonhole21` + elif [ "${DOVECOT_REL}" = "2.2" ]; then + DOVECOT_SHORTREL=22 + PIGEONHOLE_VER=`getVer pigeonhole22` + elif [ "${DOVECOT_REL}" = "2.3" ]; then + DOVECOT_SHORTREL=23 + PIGEONHOLE_VER=`getVer pigeonhole23` + fi + FTS_XAPIAN_VER=`getVer fts-xapian` + XAPIAN_CORE_VER=`getVer xapian-core` + BUBBLEWRAP_VER=`getVer bubblewrap` + JAILSHELL_SH_VER=`getVer jailshell_sh` + EXIM_VER=`getVer exim` + S_NAIL_VER=`getVer s-nail` + MSMTP_VER=`getVer msmtp` + LUA_VER=`getVer lua` + BLOCKCRACKING_VER=`getVer blockcracking` + EASY_SPAM_FIGHTER_VER=`getVer easy_spam_figther` + RSPAMD_CONF_VER=`getVer rspamd_conf` + LIBSRS_ALT_VER=`getVer libsrs_alt` + LIBSPF2_VER=`getVer libspf2` + if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ]; then + EXIM_CONF_VER=`getVer exim_conf_2` + EXIM_PL_VER=`getVer exim_pl_2` + elif [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then + EXIM_CONF_VER=`getVer exim_conf_4` + EXIM_PL_VER=`getVer exim_pl_4` + elif [ "${EXIMCONF_RELEASE_OPT}" = "4.3" ]; then + EXIM_CONF_VER=`getVer exim_conf_43` + EXIM_PL_VER=`getVer exim_pl_43` + elif [ "${EXIMCONF_RELEASE_OPT}" = "4.4" ]; then + EXIM_CONF_VER=`getVer exim_conf_44` + EXIM_PL_VER=`getVer exim_pl_44` + elif [ "${EXIMCONF_RELEASE_OPT}" = "4.5" ]; then + EXIM_CONF_VER=`getVer exim_conf_45` + EXIM_PL_VER=`getVer exim_pl_45` + else + EXIM_CONF_VER=`getVer exim_conf_45` + EXIM_PL_VER=`getVer exim_pl_45` + fi + + PROFTPD_VER=`getVer proftpd` + PUREFTPD_VER=`getVer pureftpd` + LIBXML2_VER=`getVer libxml2-current` + LIBXSLT_VER=`getVer libxslt` + LIBSODIUM_VER=`getVer libsodium` + LIBZIP_VER=`getVer libzip` + COMPOSER_VER=`getVer composer` + WP_VER=`getVer wp-cli` + IMAPSYNC_VER=`getVer imapsync` + if [ "${OS}" = "FreeBSD" ]; then + LEGO_VER=`getVer lego_freebsd` + elif [ "${OS_CENTOS_VER}" = "6" ] && [ "${B64}" = "0" ]; then + LEGO_VER=`getVer lego_386` + else + LEGO_VER=`getVer lego` + fi + FREETYPE_VER=`getVer freetype` + ICU_VER=`getVer icu4c` + IMAGICK_VER=`getVer imagick` + XMLRPC_VER=`getVer xmlrpc` + IMAGEMAGICK_VER=`getVer imagemagick` + CLAMAV_VER=`getVer clamav` + ZSTD_VER=`getVer zstd` + # Mailman is not yet supported + #MAILMAN_VER=`getVer mailman` + AWSTATS_VER=`getVer awstats` + AWSTATS_PROCESS_VER=`getVer awstats_process` + UNIT_VER=`getVer unit` + SUHOSIN_VER=`getVer suhosin` + OPCACHE_VER=`getVer zendopcache` + + IGBINARY_VER=`getVer igbinary` + PSR_VER=`getVer psr` + PHALCON_VER=`getVer phalcon` + REDIS_VER=`getVer redis` + PHPREDIS_VER=`getVer phpredis` + SNUFFLEUPAGUS_VER=`getVer snuffleupagus` + IMAP_VER=`getVer imap` + + if [ "${B64}" = "1" ]; then + IONCUBE_VER=`getVer ioncube_loaders_lin_x86-64` + else + IONCUBE_VER=`getVer ioncube_loaders_lin_x86` + fi + FBSD4_IONCUBE_VER=`getVer ioncube_loaders_fre_4_x86` + + PNG_VER=`getVer libpng_current` + LIBMAXMINDDB_VER=`getVer libmaxminddb` + GEOIPUPDATE_VER=`getVer geoipupdate` + + # Applications versions + PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch + if [ "${PHPMYADMIN_VER_OPT}" = "5" ]; then + PHPMYADMIN_VER=`getVer phpmyadmin5` + elif [ "${PHPMYADMIN_VER_OPT}" = "4" ]; then + PHPMYADMIN_VER=`getVer phpmyadmin4` + else + PHPMYADMIN_VER=`getVer phpmyadmin3` + fi + + SQUIRRELMAIL_LOCALE_VER=`getVer squirrelmail_locale` + SQUIRRELMAIL_LOGGER_VER=`getVer squirrel_logger` + + if [ "$OS" = "FreeBSD" ]; then + OPENLITESPEED_VER=`getVer openlitespeed_src` + else + OPENLITESPEED_VER=`getVer openlitespeed` + fi + + LITESPEED_VER=no + + LETSENCRYPT_VER=`getVer letsencrypt_sh` + + CPANEL_TO_DA_VER=`getVer cpanel_to_da` + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + LITESPEED_MAIN_VER=`getVerLSWS release` + + LITESPEED_REPO_START=`echo ${LITESPEED_MAIN_VER} | cut -d. -f1` + LITESPEED_REPO="${LITESPEED_REPO_START}.0" + + if [ "${B64}" = "1" ]; then + LITESPEED_VER_NAME="lsws-${LITESPEED_MAIN_VER}-ent-x86_64-linux" + else + LITESPEED_VER_NAME="lsws-${LITESPEED_MAIN_VER}-ent-i386-linux" + fi + + LITESPEED_VER=`getVerLSWS ${LITESPEED_VER_NAME}` + + if [ "${OS}" = "FreeBSD" ]; then + LSWS_OS="freebsd" + else + LSWS_OS="linux" + fi + + if [ "${B64}" = "1" ]; then + LITESPEED_NAME="lsws-${LITESPEED_VER}-ent-x86_64-${LSWS_OS}" + else + LITESPEED_NAME="lsws-${LITESPEED_VER}-ent-i386-${LSWS_OS}" + fi + fi + + # SpamAssassin versions + SPAMASSASSIN_VER=`getVer spamassassin` + RSPAMD_VER=`getVer rspamd` + + LITESPEED_TRIAL_KEY=${WORKDIR}/configure/litespeed/trial.key + if [ -e ${WORKDIR}/custom/litespeed/trial.key ]; then + LITESPEED_TRIAL_KEY=${WORKDIR}/custom/litespeed/trial.key + fi + fi + + # Variable for proftpd + PROFTPD_CONFIGURE=configure/proftpd/configure.proftpd + if [ -e custom/proftpd/configure.proftpd ]; then + PROFTPD_CONFIGURE=custom/proftpd/configure.proftpd + fi + + PROFTPD_CONF=configure/proftpd/conf/proftpd.conf + if [ -e custom/proftpd/conf/proftpd.conf ]; then + PROFTPD_CONF=custom/proftpd/conf/proftpd.conf + fi + + # Variable for ImageMagick + IMAGEMAGICK_CONFIGURE=configure/imagemagick/configure.imagemagick + if [ -e custom/imagemagick/configure.imagemagick ]; then + IMAGEMAGICK_CONFIGURE=custom/imagemagick/configure.imagemagick + fi + + # Variable for pureftpd + PUREFTPD_CONFIGURE=configure/pureftpd/configure.pureftpd + if [ -e custom/pureftpd/configure.pureftpd ]; then + PUREFTPD_CONFIGURE=custom/pureftpd/configure.pureftpd + fi + + PUREFTPD_CONF=configure/pureftpd/pure-ftpd.conf + if [ -e custom/pureftpd/pure-ftpd.conf ]; then + PUREFTPD_CONF=custom/pureftpd/pure-ftpd.conf + fi + + # Variable for ClamAV + CLAMAV_CONFIGURE=configure/clamav/configure.clamav + if [ -e custom/clamav/configure.clamav ]; then + CLAMAV_CONFIGURE=custom/clamav/configure.clamav + fi + + #Variable for ModSecurity + if [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "nginx" ]; then + MODSECURITY_CONFIGURE=configure/modsecurity/configure.modsecurity + if [ -e custom/modsecurity/configure.modsecurity ]; then + MODSECURITY_CONFIGURE=custom/modsecurity/configure.modsecurity + fi + else + MODSECURITY_CONFIGURE=configure/ap2/configure.modsecurity + if [ -e custom/ap2/configure.modsecurity ]; then + MODSECURITY_CONFIGURE=custom/ap2/configure.modsecurity + fi + fi + + # Variable for cURL + CURL_CONFIGURE=configure/curl/configure.curl + if [ -e custom/curl/configure.curl ]; then + CURL_CONFIGURE=custom/curl/configure.curl + fi + + # Variables for ModSecurity uploadscan + RUNAV_PL=configure/clamav/runav.pl + if [ -e custom/clamav/runav.pl ]; then + RUNAV_PL=custom/clamav/runav.pl + fi + RUNAV_CONF=configure/clamav/runav.conf + if [ -e custom/clamav/runav.conf ]; then + RUNAV_CONF=custom/clamav/runav.conf + fi + + # Variable for LibXML2 + LIBXML2_CONFIGURE=configure/libxml2/configure.libxml2 + if [ -e custom/libxml2/configure.libxml2 ]; then + LIBXML2_CONFIGURE=custom/libxml2/configure.libxml2 + fi + + # Variable for LibXSLT + LIBXSLT_CONFIGURE=configure/libxslt/configure.libxslt + if [ -e custom/libxslt/configure.libxslt ]; then + LIBXSLT_CONFIGURE=custom/libxslt/configure.libxslt + fi + + # Variable for OPCACHE + OPCACHE_INI=configure/opcache/opcache.ini + if [ -e custom/opcache/opcache.ini ]; then + OPCACHE_INI=custom/opcache/opcache.ini + fi + + # Variable for SUHOSIN + SUHOSIN_INI=configure/suhosin/suhosin.ini + if [ -e custom/suhosin/suhosin.ini ]; then + SUHOSIN_INI=custom/suhosin/suhosin.ini + fi + + EXIM_MAKEFILE="" + if [ -e custom/exim/Makefile ]; then + EXIM_MAKEFILE=${CWD}/custom/exim/Makefile + fi + + # Dovecot variables + DOVECOT_CONFIGURE=configure/dovecot/configure.dovecot + if [ -e custom/dovecot/configure.dovecot ]; then + DOVECOT_CONFIGURE=custom/dovecot/configure.dovecot + #to solve bogus ICU linking in FTS plugin of dovecot + if ! grep -m1 -q without-icu ${DOVECOT_CONFIGURE}; then + perl -pi -e 's|^\./configure |./configure --without-icu |g' ${DOVECOT_CONFIGURE} + fi + fi + + DOVECOTCONFDIR=${WORKDIR}/configure/dovecot/conf + DOVECOTCUSTOMCONFDIR=0 + if [ -d ${WORKDIR}/custom/dovecot/conf ]; then + DOVECOTCUSTOMCONFDIR=${WORKDIR}/custom/dovecot/conf + fi + + DOVECTCONFFILE=${WORKDIR}/configure/dovecot/dovecot.conf + if [ -e ${WORKDIR}/custom/dovecot/dovecot.conf ]; then + DOVECTCONFFILE=${WORKDIR}/custom/dovecot/dovecot.conf + fi + + DOVECTCONFSIEVE=${WORKDIR}/configure/dovecot/conf.d/90-sieve.conf + if [ -e ${WORKDIR}/custom/dovecot/conf.d/90-sieve.conf ]; then + DOVECTCONFSIEVE=${WORKDIR}/custom/dovecot/conf.d/90-sieve.conf + fi + + DOVECTCONFFTS=${WORKDIR}/configure/dovecot/conf.d/90-fts-xapian.conf + if [ -e ${WORKDIR}/custom/dovecot/conf.d/90-fts-xapian.conf ]; then + DOVECTCONFFTS=${WORKDIR}/custom/dovecot/conf.d/90-fts-xapian.conf + fi + + DOVECTCONFQUOTA=${WORKDIR}/configure/dovecot/conf.d/90-quota.conf + if [ -e ${WORKDIR}/custom/dovecot/conf.d/90-quota.conf ]; then + DOVECTCONFQUOTA=${WORKDIR}/custom/dovecot/conf.d/90-quota.conf + fi + + DOVECOTCONFZLIB=${WORKDIR}/configure/dovecot/conf.d/90-zlib.conf + if [ -e ${WORKDIR}/custom/dovecot/conf.d/90-zlib.conf ]; then + DOVECOTCONFZLIB=${WORKDIR}/custom/dovecot/conf.d/90-zlib.conf + fi + + # Variables for spamd + SPAMD_CONF=configure/${SPAMD_OPT}/exim.spamd.conf + if [ -e custom/${SPAMD_OPT}/exim.spamd.conf ]; then + SPAMD_CONF=custom/${SPAMD_OPT}/exim.spamd.conf + fi + + # Variables for apache + APACHE2_CONFIGURE=configure/ap2/configure.apache + if [ -e custom/ap2/configure.apache ]; then + APACHE2_CONFIGURE=custom/ap2/configure.apache + fi + PHP_HANDLERS_HTTPD=/etc/httpd/conf/extra/httpd-php-handlers.conf + SUPHP_HTTPD=/etc/httpd/conf/extra/httpd-suphp.conf + + APCONFDIR=${WORKDIR}/configure/${APCONF}/conf + APCUSTOMCONFDIR=0 + #custom/configure isn't supposed to be there + if [ -d ${WORKDIR}/custom/configure/${APCONF}/conf ]; then + APCUSTOMCONFDIR=${WORKDIR}/custom/configure/${APCONF}/conf + fi + if [ -d ${WORKDIR}/custom/${APCONF}/conf ]; then + APCUSTOMCONFDIR=${WORKDIR}/custom/${APCONF}/conf + fi + + APCERTCONF=configure/${APCONF}/cert_config.txt + if [ -e custom/configure/${APCONF}/cert_config.txt ]; then + APCERTCONF=custom/configure/${APCONF}/cert_config.txt + fi + if [ -e custom/${APCONF}/cert_config.txt ]; then + APCERTCONF=custom/${APCONF}/cert_config.txt + fi + + # Variables for unit + UNIT_CONFIGURE=configure/unit/configure.unit + if [ -e custom/unit/configure.unit ]; then + UNIT_CONFIGURE=custom/unit/configure.unit + fi + + # Variables for openlitespeed + OPENLITESPEED_CONFIGURE=configure/openlitespeed/configure.openlitespeed + if [ -e custom/openlitespeed/configure.openlitespeed ]; then + OPENLITESPEED_CONFIGURE=custom/openlitespeed/configure.openlitespeed + fi + + OPENLITESPEEDCONFDIR=${WORKDIR}/configure/openlitespeed/conf + OPENLITESPEEDCUSTOMCONFDIR=0 + if [ -d ${WORKDIR}/custom/openlitespeed/conf ]; then + OPENLITESPEEDCUSTOMCONFDIR=${WORKDIR}/custom/openlitespeed/conf + fi + + OPENLITESPEED_EXTPROCESSORS_TEMPLATE=configure/openlitespeed/httpd-extprocessors.template + if [ -e custom/openlitespeed/httpd-extprocessors.template ]; then + OPENLITESPEED_EXTPROCESSORS_TEMPLATE=custom/openlitespeed/httpd-extprocessors.template + fi + + OPENLITESPEED_WEBAPPS_EXTPROCESSOR_TEMPLATE=configure/openlitespeed/httpd-webapps-extprocessor.template + if [ -e custom/openlitespeed/httpd-webapps-extprocessor.template ]; then + OPENLITESPEED_WEBAPPS_EXTPROCESSOR_TEMPLATE=custom/openlitespeed/httpd-webapps-extprocessor.template + fi + + # Variables for nginx + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + NGINX_CONFIGURE=configure/nginx_reverse/configure.nginx + if [ -e custom/nginx_reverse/configure.nginx ]; then + NGINX_CONFIGURE=custom/nginx_reverse/configure.nginx + fi + NGINXCONFDIR=${WORKDIR}/configure/nginx_reverse/conf + NGINXCUSTOMCONFDIR=0 + if [ -d ${WORKDIR}/custom/nginx_reverse/conf ]; then + NGINXCUSTOMCONFDIR=${WORKDIR}/custom/nginx_reverse/conf + fi + else + NGINX_CONFIGURE=configure/nginx/configure.nginx + if [ -e custom/nginx/configure.nginx ]; then + NGINX_CONFIGURE=custom/nginx/configure.nginx + fi + NGINXCONFDIR=${WORKDIR}/configure/nginx/conf + NGINXCUSTOMCONFDIR=0 + if [ -d ${WORKDIR}/custom/nginx/conf ]; then + NGINXCUSTOMCONFDIR=${WORKDIR}/custom/nginx/conf + fi + fi + + NGINXTEMPLATESDIR=${WORKDIR}/configure/nginx_templates + NGINXCUSTOMEMPLATESDIR=0 + if [ -d ${WORKDIR}/custom/nginx_templates ]; then + NGINXCUSTOMEMPLATESDIR=${WORKDIR}/custom/nginx_templates + fi + + MODSECURITY_APACHE_INCLUDE=${WORKDIR}/configure/ap2/conf/extra/httpd-modsecurity.conf + if [ -e ${WORKDIR}/custom/ap2/conf/extra/httpd-modsecurity.conf ]; then + MODSECURITY_APACHE_INCLUDE=${WORKDIR}/custom/ap2/conf/extra/httpd-modsecurity.conf + fi + + MODSECURITY_NGINX_INCLUDE=${WORKDIR}/configure/nginx/conf/nginx-modsecurity.conf + if [ -e ${WORKDIR}/custom/nginx/conf/nginx-modsecurity.conf ]; then + MODSECURITY_NGINX_INCLUDE=${WORKDIR}/custom/nginx/conf/nginx-modsecurity.conf + fi + if [ -s ${WORKDIR}/configure/openlitespeed/conf/httpd-listeners.conf ]; then + rm -f ${WORKDIR}/configure/openlitespeed/conf/httpd-listeners.conf + fi + MODSECURITY_OPENLITESPEED_INCLUDE=${WORKDIR}/configure/openlitespeed/conf/httpd-modsecurity.conf + if [ -e ${WORKDIR}/custom/openlitespeed/conf/httpd-modsecurity.conf ]; then + MODSECURITY_OPENLITESPEED_INCLUDE=${WORKDIR}/custom/openlitespeed/conf/httpd-modsecurity.conf + fi + + MODSECURITY_NGINX_REVERSE_INCLUDE=${WORKDIR}/configure/nginx_reverse/conf/nginx-modsecurity.conf + if [ -e ${WORKDIR}/custom/nginx_reverse/conf/nginx-modsecurity.conf ]; then + MODSECURITY_NGINX_REVERSE_INCLUDE=${WORKDIR}/custom/nginx_reverse/conf/nginx-modsecurity.conf + fi + + MODSECURITY_CUSTOM_RULES=${WORKDIR}/custom/modsecurity/conf + + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + # Variables for php-fpm + eval `echo "PHP${php_shortrelease}_CONFIGURE_FPM=configure/php/configure.php${php_shortrelease}"` + if [ -e custom/fpm/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE_FPM=custom/fpm/configure.php${php_shortrelease}"` + fi + if [ -e custom/php/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE_FPM=custom/php/configure.php${php_shortrelease}"` + fi + + eval `echo "PHP${php_shortrelease}_FPM_CONF=${WORKDIR}/configure/fpm/conf/php-fpm.conf.${php_shortrelease}"` + if [ -e ${WORKDIR}/custom/fpm/conf/php-fpm.conf.${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_FPM_CONF=${WORKDIR}/custom/fpm/conf/php-fpm.conf.${php_shortrelease}"` + fi + eval `echo "PHP_INI_FPM${php_shortrelease}=/usr/local/php${php_shortrelease}/lib/php.ini"` + eval `echo "PHP_SBIN_FPM${php_shortrelease}=/usr/local/php${php_shortrelease}/sbin/php-fpm${php_shortrelease}"` + + # Variables for PHP as suPHP + EVAL_PHP_INI_SUPHP_VAR=PHP_SBIN_FPM${php_shortrelease} + eval `echo "PHP_INI_SUPHP${php_shortrelease}=$(eval_var ${EVAL_PHP_INI_SUPHP_VAR})"` + eval `echo "PHP_BIN_SUPHP${php_shortrelease}=/usr/local/php${php_shortrelease}/bin/php-cgi${php_shortrelease}"` + eval `echo "PHP_BIN_PHP${php_shortrelease}=/usr/local/php${php_shortrelease}/bin/php${php_shortrelease}"` + eval `echo "PHP${php_shortrelease}_CONFIGURE_SUPHP=configure/php/configure.php${php_shortrelease}"` + if [ -e custom/suphp/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE_SUPHP=custom/suphp/configure.php${php_shortrelease}"` + fi + if [ -e custom/php/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE_SUPHP=custom/php/configure.php${php_shortrelease}"` + fi + + # Variables for php-fastcgi + eval `echo "PHP${php_shortrelease}_CONFIGURE_FCGI=configure/php/configure.php${php_shortrelease}"` + if [ -e custom/fastcgi/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE_FCGI=custom/fastcgi/configure.php${php_shortrelease}"` + fi + if [ -e custom/php/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE_FCGI=custom/php/configure.php${php_shortrelease}"` + fi + + # Variables for lsphp + eval `echo "PHP${php_shortrelease}_CONFIGURE_LSPHP=configure/php/configure.php${php_shortrelease}"` + if [ -e custom/litespeed/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE_LSPHP=custom/litespeed/configure.php${php_shortrelease}"` + fi + if [ -e custom/php/configure.php${php_shortrelease} ]; then + eval `echo "PHP${php_shortrelease}_CONFIGURE_LSPHP=custom/php/configure.php${php_shortrelease}"` + fi + + eval `echo "PHP_EXT_FPM${php_shortrelease}=/usr/local/php${php_shortrelease}/lib/php.conf.d/10-directadmin.ini"` + EVAL_PHP_EXT_SUPHP_VAR=PHP_EXT_FPM${php_shortrelease} + eval `echo "PHP_EXT_SUPHP${php_shortrelease}=$(eval_var ${EVAL_PHP_EXT_SUPHP_VAR})"` + done + + PHP_CUSTOM_PHP_CONF_D_INI_PATH=${WORKDIR}/custom/php.conf.d + + #php extensions file rewritten by DirectAdmin + PHP_EXT=/usr/local/lib/php.conf.d/10-directadmin.ini + PHP_INI=/usr/local/lib/php.ini + PHP_BIN=/usr/local/bin/php + + PHP1_RELEASE_INI_EVAL="PHP_INI_FPM${PHP1_SHORTRELEASE}" + PHP1_INI_FILE="$(eval_var ${PHP1_RELEASE_INI_EVAL})" + PHP1_RELEASE_INI_EXT_EVAL="PHP_EXT_FPM${PHP1_SHORTRELEASE}" + PHP1_INI_EXT_FILE="$(eval_var ${PHP1_RELEASE_INI_EXT_EVAL})" + + PHP1_INI_EXT_FILE_OLD="`echo ${PHP1_INI_EXT_FILE} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`" + if [ -e ${PHP1_INI_EXT_FILE_OLD} ] && [ ! -e ${PHP1_INI_EXT_FILE} ]; then + mv -f ${PHP1_INI_EXT_FILE_OLD} ${PHP1_INI_EXT_FILE} + fi + + PHP2_INI_FILE="no" + PHP2_INI_EXT_FILE="no" + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + PHP2_INI_FILE=${PHP_INI} + PHP2_INI_EXT_FILE=${PHP_EXT} + if [ "${PHP2_MODE_OPT}" != "mod_php" ]; then + PHP2_RELEASE_INI_EVAL="PHP_INI_FPM${PHP2_SHORTRELEASE}" + PHP2_INI_FILE="$(eval_var ${PHP2_RELEASE_INI_EVAL})" + PHP2_RELEASE_INI_EXT_EVAL="PHP_EXT_FPM${PHP2_SHORTRELEASE}" + PHP2_INI_EXT_FILE="$(eval_var ${PHP2_RELEASE_INI_EXT_EVAL})" + fi + PHP2_INI_EXT_FILE_OLD="`echo ${PHP2_INI_EXT_FILE} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`" + if [ -e ${PHP2_INI_EXT_FILE_OLD} ] && [ ! -e ${PHP2_INI_EXT_FILE} ]; then + mv -f ${PHP2_INI_EXT_FILE_OLD} ${PHP2_INI_EXT_FILE} + fi + fi + + PHP3_INI_FILE="no" + PHP3_INI_EXT_FILE="no" + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + PHP3_INI_FILE=${PHP_INI} + PHP3_INI_EXT_FILE=${PHP_EXT} + if [ "${PHP3_MODE_OPT}" != "mod_php" ]; then + PHP3_RELEASE_INI_EVAL="PHP_INI_FPM${PHP3_SHORTRELEASE}" + PHP3_INI_FILE="$(eval_var ${PHP3_RELEASE_INI_EVAL})" + PHP3_RELEASE_INI_EXT_EVAL="PHP_EXT_FPM${PHP3_SHORTRELEASE}" + PHP3_INI_EXT_FILE="$(eval_var ${PHP3_RELEASE_INI_EXT_EVAL})" + fi + PHP3_INI_EXT_FILE_OLD="`echo ${PHP3_INI_EXT_FILE} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`" + if [ -e ${PHP3_INI_EXT_FILE_OLD} ] && [ ! -e ${PHP3_INI_EXT_FILE} ]; then + mv -f ${PHP3_INI_EXT_FILE_OLD} ${PHP3_INI_EXT_FILE} + fi + fi + + PHP4_INI_FILE="no" + PHP4_INI_EXT_FILE="no" + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + PHP4_INI_FILE=${PHP_INI} + PHP4_INI_EXT_FILE=${PHP_EXT} + if [ "${PHP4_MODE_OPT}" != "mod_php" ]; then + PHP4_RELEASE_INI_EVAL="PHP_INI_FPM${PHP4_SHORTRELEASE}" + PHP4_INI_FILE="$(eval_var ${PHP4_RELEASE_INI_EVAL})" + PHP4_RELEASE_INI_EXT_EVAL="PHP_EXT_FPM${PHP4_SHORTRELEASE}" + PHP4_INI_EXT_FILE="$(eval_var ${PHP4_RELEASE_INI_EXT_EVAL})" + fi + PHP4_INI_EXT_FILE_OLD="`echo ${PHP4_INI_EXT_FILE} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`" + if [ -e ${PHP4_INI_EXT_FILE_OLD} ] && [ ! -e ${PHP4_INI_EXT_FILE} ]; then + mv -f ${PHP4_INI_EXT_FILE_OLD} ${PHP4_INI_EXT_FILE} + fi + fi + + #suhosin uploadscan script + SUHOSIN_PHP_UPLOADSCAN_SCRIPT=${WORKDIR}/configure/suhosin/php_uploadscan.sh + if [ -e ${WORKDIR}/custom/suhosin/php_uploadscan.sh ]; then + SUHOSIN_PHP_UPLOADSCAN_SCRIPT=${WORKDIR}/custom/suhosin/php_uploadscan.sh + fi + + #pureftpd uploadscan script + PUREFTPD_UPLOADSCAN_SCRIPT=${WORKDIR}/configure/pureftpd/pureftpd_uploadscan.sh + if [ -e ${WORKDIR}/custom/pureftpd/pureftpd_uploadscan.sh ]; then + PUREFTPD_UPLOADSCAN_SCRIPT=${WORKDIR}/custom/pureftpd/pureftpd_uploadscan.sh + fi + + #pureftpd SNI script + PUREFTPD_PURE_CERTD_SCRIPT=${WORKDIR}/configure/pureftpd/pureftpd_sni.sh + if [ -e ${WORKDIR}/custom/pureftpd/pureftpd_sni.sh ]; then + PUREFTPD_PURE_CERTD_SCRIPT=${WORKDIR}/custom/pureftpd/pureftpd_sni.sh + fi + + SUPHP_CONFIGURE=configure/suphp/configure.suphp + if [ -e custom/suphp/configure.suphp ]; then + SUPHP_CONFIGURE=custom/suphp/configure.suphp + fi + SUPHP_PATH=/usr/local/suphp + SUPHP_CONF_FILE=${SUPHP_PATH}/etc/suphp.conf + SUPHP_SO=/usr/lib/apache/mod_suphp.so + + PMA_MAIN_CONFIG=${CWD}/configure/phpmyadmin/config.inc.php + PMA_CUSTOM_CONFIG= + if [ -s ${CWD}/custom/phpmyadmin/config.inc.php ]; then + PMA_CUSTOM_CONFIG=${CWD}/custom/phpmyadmin/config.inc.php + fi + + #custom script configs + WEBAPPS_LIST=${CWD}/custom/webapps.list + PMA_HTACCESS=${CWD}/custom/phpmyadmin/.htaccess + PMA_USER_INI=${CWD}/custom/phpmyadmin/.user.ini + PMA_THEMES=${CWD}/custom/phpmyadmin/themes + SQUIRREL_CONFIG=${CWD}/custom/squirrelmail/config.php + ROUNDCUBE_CONFIG=${CWD}/custom/roundcube/config.inc.php + ROUNDCUBE_CONFIG_DB=${ROUNDCUBE_CONFIG} + ROUNDCUBE_CONFIG_OLD=${CWD}/custom/roundcube/main.inc.php + ROUNDCUBE_CONFIG_DB_OLD=${CWD}/custom/roundcube/db.inc.php + if [ "${ROUNDCUBE_MAJOR_VER}" = "0" ]; then + ROUNDCUBE_CONFIG=${ROUNDCUBE_CONFIG_OLD} + ROUNDCUBE_CONFIG_DB=${ROUNDCUBE_CONFIG_DB_OLD} + fi + ROUNDCUBE_PLUGINS=${CWD}/custom/roundcube/plugins + ROUNDCUBE_SKINS=${CWD}/custom/roundcube/skins + ROUNDCUBE_VENDOR=${CWD}/custom/roundcube/vendor + ROUNDCUBE_COMPOSER=${CWD}/custom/roundcube/composer.json + ROUNDCUBE_PROGRAM=${CWD}/custom/roundcube/program + ROUNDCUBE_HTACCESS=${CWD}/custom/roundcube/.htaccess + + # Variables for frontpage + ROOT_GRP=root + if [ ${OS} = "FreeBSD" ]; then + ROOT_GRP=wheel + fi + + USER_INPUT=0 + INPUT_VALUE=d + + if [ ${OS} = "FreeBSD" ]; then + OS_VER=`uname -r | cut -d- -f1` + elif [ -e /etc/fedora-release ]; then + OS=fedora + if [ "`cat /etc/fedora-release | awk '{ print $1, $2 }'`" = "Fedora Core" ]; then + OS_VER=`cat /etc/fedora-release | awk '{ print $4 }'` + elif [ "`cat /etc/fedora-release | awk '{ print $1, $2 }'`" = "Fedora release" ]; then + OS_VER=`cat /etc/fedora-release | awk '{ print $3 }'` + fi + elif [ -e ${DEBIAN_VERSION} ]; then + OS_VER=3.1 + else + OS_VER=`cat /etc/redhat-release | cut -d\ -f5` + if [ "${OS_VER}" = "" ]; then + OS_VER=`cat /etc/redhat-release | cut -d\ -f1` + fi + fi + + MAINVER="" + if [ "${OS}" = "FreeBSD" ]; then + MAINVER=`echo ${OS_VER} | cut -d. -f1` + if [ -e /usr/sbin/pkg ]; then + PKG_INSTALL="pkg install -y" + else + PKG_INSTALL="pkg_add -r" + fi + if [ ${MAINVER} -eq 10 ]; then + GCCVER=48 + export CC=gcc${GCCVER} + export CXX=g++${GCCVER} + export CPP=cpp${GCCVER} + if [ ! -e /usr/local/bin/gcc${GCCVER} ]; then + ${PKG_INSTALL} gcc${GCCVER} + fi + if [ ! -e /usr/local/bin/gcc${GCCVER} ]; then + do_exit 1 "Unable to find GCC on the system: /usr/local/bin/gcc${GCCVER}" + fi + if [ -e /etc/libmap.conf ]; then + perl -pi -e "s|gcc44|gcc${GCCVER}|g" /etc/libmap.conf + fi + # Fixes: /usr/lib/libstdc++.so.6: version GLIBCXX_3.4.15 required by /usr/local/mysql/bin/mysqld not found + if [ ! -h /usr/lib/libstdc++.so.6 ]; then + if [ -e /usr/lib/libstdc++.so.6 ]; then + mv -f /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6.backup + fi + ln -sf /usr/local/lib/gcc${GCCVER}/libstdc++.so.6 /usr/lib/libstdc++.so.6 + fi + fi + if [ ${MAINVER} -gt 10 ]; then + export CC=clang + export CPP=clang-cpp + export CXX=clang++ + export WITH_LIBCPLUSPLUS=yes + fi + if [ ${MAINVER} -ge 10 ]; then + # Fixes apache OpenSSL problem: /usr/include/openssl/bn.h:603:1: error: unknown type name 'CRYPTO_THREADID' + if [ ! -d /usr/local/openssl ]; then + ${PKG_INSTALL} openssl + fi + fi + case "${MAINVER}" in + 4) IONCUBE_VER=$FBSD4_IONCUBE_VER + IONCUBENAME=ioncube_loaders_fre_4_x86 + ;; + 5) IONCUBENAME=ioncube_loaders_fre_4_x86 + ;; + 6) IONCUBENAME=ioncube_loaders_fre_6_x86 + ;; + 7) IONCUBENAME=ioncube_loaders_fre_7_x86 + if [ ${B64} -eq 1 ]; then + IONCUBENAME=ioncube_loaders_fre_7_x86-64 + fi + ;; + 8) IONCUBENAME=ioncube_loaders_fre_8_x86-64 + ;; + 9) if [ ${B64} -eq 1 ]; then + IONCUBENAME=ioncube_loaders_fre_9_x86-64 + else + IONCUBENAME=ioncube_loaders_fre_9_x86 + fi + ;; + 10) if [ ${B64} -eq 1 ]; then + IONCUBENAME=ioncube_loaders_fre_9_x86-64 + else + IONCUBENAME=ioncube_loaders_fre_9_x86 + fi + ;; + 11) IONCUBENAME=ioncube_loaders_fre_11_x86-64 + ;; + 12) IONCUBENAME=ioncube_loaders_fre_11_x86-64 + ;; + esac + else + if [ ${B64} -eq 1 ]; then + IONCUBENAME=ioncube_loaders_lin_x86-64 + ZENDNAME_PHP53=ZendGuardLoader-php-5.3-linux-glibc23-x86_64 + ZENDNAME_PHP53_MD5=ZendGuard64 + ZENDNAME_PHP54=ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64 + ZENDNAME_PHP54_MD5=ZendGuard54_64 + ZENDNAME_PHP55=zend-loader-php5.5-linux-x86_64 + ZENDNAME_PHP55_MD5=zend_loader_php55_64 + ZENDNAME_PHP56=zend-loader-php5.6-linux-x86_64 + ZENDNAME_PHP56_MD5=zend_loader_php56_64 + else + IONCUBENAME=ioncube_loaders_lin_x86 + ZENDNAME_PHP53=ZendGuardLoader-php-5.3-linux-glibc23-i386 + ZENDNAME_PHP53_MD5=ZendGuard32 + ZENDNAME_PHP54=ZendGuardLoader-70429-PHP-5.4-linux-glibc23-i386 + ZENDNAME_PHP54_MD5=ZendGuard54_32 + ZENDNAME_PHP55=zend-loader-php5.5-linux-i386 + ZENDNAME_PHP55_MD5=zend_loader_php55_32 + ZENDNAME_PHP56=zend-loader-php5.6-linux-i386 + ZENDNAME_PHP56_MD5=zend_loader_php56_32 + fi + fi + + ZENDFILE_GUARD53=${ZENDNAME_PHP53}.tar.gz + ZENDFILE_GUARD54=${ZENDNAME_PHP54}.tar.gz + ZENDFILE_GUARD55=${ZENDNAME_PHP55}.tar.gz + ZENDFILE_GUARD56=${ZENDNAME_PHP56}.tar.gz + IONCUBEFILE=${IONCUBENAME}.tar.gz + + WEBALIZER_VER=`getVer webalizer` + WEBALIZER=webalizer-${WEBALIZER_VER} + WEBALIZER_FILE=webalizer-${WEBALIZER_VER}-src.tgz +fi + +#################################################### + +ensureVersion() { + + PERL_VER=`perl -v | head -n2 | tail -n1 | cut -d\ -f4 | cut -dv -f2` + NUM1=`echo $PERL_VER | cut -d. -f1` + NUM2=`echo $PERL_VER | cut -d. -f2` + NUM3=`echo $PERL_VER | cut -d. -f3` + + if [ $NUM1 -gt 5 ]; then + return 1 + fi + if [ $NUM2 -gt 6 ]; then + return 1 + fi + if [ $NUM3 -gt 0 ]; then + return 1 + fi + + do_exit 1 "Your perl version is $PERL_VER. You require at least perl 5.6.1 for Mail-SpamAssassin-${SPAMASSASSIN_VER}." +} + +#################################################### + +downloadMake() { + cd $CWD + + VER=`getVer ${1}` + NAME=${1}-${VER} + + getFile ${NAME}.tar.gz ${1} + tar xzf ${NAME}.tar.gz --no-same-owner + cd ${NAME} + perl Makefile.PL + make + make install + + cd $CWD +} + +#################################################### + +clean_tarball() { + #clean_tarball name current_version extension + if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then + echo "Skipping $1 tarball, needs more arguments in doclean_old_tarballs()." + return + fi + for i in `ls ${WORKDIR} | grep "^${1}[-_][v0-9]" | grep -v "$2" | grep "$3$"`; do + rm -f ${WORKDIR}/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing ${WORKDIR}/$i..." + fi + done +} + +doclean_old_tarballs() { + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + clean_tarball lsws ${LITESPEED_VER} tar.gz + fi + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + clean_tarball openlitespeed ${OPENLITESPEED_VER} tar.gz + fi + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + clean_tarball nginx ${NGINX_VER} tar.gz + clean_tarball mod_aclr2 ${MOD_ACLR2_VER} tar.gz + fi + clean_tarball lego ${LEGO_VER} tar.gz + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + clean_tarball httpd ${APACHE2_VER} tar.gz + if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + clean_tarball suphp ${SUPHP_VER} tar.gz + fi + if [ "${HAVE_FCGID}" = "yes" ]; then + clean_tarball mod_fcgid ${MOD_FCGID_VER} tar.gz + fi + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + clean_tarball mod_ruid2 ${MOD_RUID2_VER} tar.bz2 + fi + if [ "${HTSCANNER_OPT}" = "yes" ]; then + clean_tarball mod_htscanner2 ${HTSCANNER_VER} tgz + fi + fi + clean_tarball redis ${REDIS_VER} tar.gz + clean_tarball nghttp2 ${NGHTTP2_VER} tar.gz + clean_tarball apr ${APR_VER} tar.gz + clean_tarball apr-util ${APR_UTIL_VER} tar.gz + clean_tarball imapsync ${IMAPSYNC_VER} tar.gz + if [ "${MODSECURITY_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ]; then + clean_tarball ${MODSECURITY_FILENAME} ${MODSECURITY_VER} tar.gz + else + clean_tarball ${LIBMODSECURITY_FILENAME} ${LIBMODSECURITY_VER} tar.gz + fi + clean_tarball owasp-modsecurity-crs ${OWASP_RULES_VER} tar.gz + clean_tarball ${MODSECURITY_NGINX_CONNECTOR_FILENAME} ${MODSECURITY_NGINX_CONNECTOR_VER} tar.gz + clean_tarball ${MODSECURITY_APACHE_CONNECTOR_FILENAME} ${MODSECURITY_APACHE_CONNECTOR_VER} tar.gz + if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + clean_tarball cwaf_rules_ls ${CWAF_RULES_LS_VER} tgz + elif [ "${WEBSERVER_OPT}" = "apache" ]; then + clean_tarball cwaf_rules ${CWAF_RULES_VER} tgz + else + clean_tarball cwaf_rules_nginx_3 ${CWAF_RULES_NGINX_VER} tgz + fi + fi + fi + if [ "${CLAMAV_OPT}" = "yes" ]; then + clean_tarball clamav ${CLAMAV_VER} tar.gz + fi + if [ "${SPAMD_OPT}" = "spamassassin" ]; then + clean_tarball Mail-SpamAssassin ${SPAMASSASSIN_VER} tar.gz + elif [ "${SPAMD_OPT}" = "rspamd" ]; then + clean_tarball rspamd_conf ${RSPAMD_CONF_VER} tar.gz + fi + clean_tarball curl ${CURL_VER} tar.gz + clean_tarball pcre ${PCRE_VER} tar.gz + clean_tarball pcre2 ${PCRE2_VER} tar.gz + clean_tarball zlib ${ZLIB_VER} tar.gz + clean_tarball libpng ${PNG_VER} tar.gz + clean_tarball libmaxminddb ${LIBMAXMINDDB_VER} tar.gz + clean_tarball geoipupdate ${GEOIPUPDATE_VER} tar.gz + clean_tarball freetype ${FREETYPE_VER} tar.gz + clean_tarball libsodium ${LIBSODIUM_VER} tar.gz + clean_tarball libxslt ${LIBXSLT_VER} tar.gz + clean_tarball libxml2 ${LIBXML2_VER} tar.gz + clean_tarball libzip ${LIBZIP_VER} tar.gz + + if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then + clean_tarball igbinary ${IGBINARY_VER} tar.gz + fi + + if [ "${IMAGICK_OPT}" = "yes" ]; then + clean_tarball imagick ${IMAGICK_VER} tgz + clean_tarball ImageMagick ${IMAGEMAGICK_VER} tar.gz + fi + + if [ "${PHP_PHALCON_OPT}" = "yes" ]; then + clean_tarball psr ${PSR_VER} tgz + clean_tarball phalcon ${PHALCON_VER} tgz + fi + + if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then + clean_tarball snuffleupagus ${SNUFFLEUPAGUS_VER} tar.gz + fi + + if [ "${PHP_REDIS_OPT}" = "yes" ]; then + clean_tarball redis ${PHPREDIS_VER} tgz + fi + + if [ "${PHP_IMAP_OPT}" = "yes" ]; then + clean_tarball imap ${IMAP_VER} tgz + fi + + if [ "${EXIM_SRS_OPT}" = "yes" ]; then + clean_tarball libsrs_alt ${LIBSRS_ALT_VER} tar.bz2 + fi + clean_tarball libspf2 ${LIBSPF2_VER} tar.gz + if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then + clean_tarball exim.easy_spam_fighter ${EASY_SPAM_FIGHTER_VER} tar.gz + fi + if [ "${BLOCKCRACKING_OPT}" = "yes" ]; then + clean_tarball exim.blockcracking ${BLOCKCRACKING_VER} tar.gz + fi + if [ "${PIGEONHOLE_OPT}" = "yes" ]; then + clean_tarball pigeohole${DOVECOT_SHORTREL} ${PIGEONHOLE_VER} tar.gz + fi + clean_tarball icu4c ${ICU_VER}-src tgz + if [ "${WEBALIZER_OPT}" = "yes" ]; then + clean_tarball webalizer ${WEBALIZER_VER}-src tgz + fi + if [ "${FTPD_OPT}" = "proftpd" ]; then + clean_tarball proftpd ${PROFTPD_VER} tar.gz + else + clean_tarball pure-ftpd ${PUREFTPD_VER} tar.gz + fi + if [ "${EXIM_OPT}" = "yes" ]; then + clean_tarball exim ${EXIM_VER} tar.gz + clean_tarball s-nail ${S_NAIL_VER} tar.gz + fi + clean_tarball msmtp ${MSMTP_VER} tar.xz + clean_tarball lua ${LUA_VER} tar.gz + clean_tarball dovecot ${DOVECOT_VER} tar.gz + clean_tarball fts-xapian ${FTS_XAPIAN_VER} tar.gz + clean_tarball zstd ${ZSTD_VER} tar.gz + clean_tarball xapian-core ${XAPIAN_CORE_VER} tar.xz + clean_tarball bubblewrap ${BUBBLEWRAP_VER} tar.xz + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + clean_tarball roundcubemail ${ROUNDCUBE_VER} tar.gz + fi + if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then + clean_tarball squirrelmail ${SQUIRRELMAIL_VER} tar.gz + fi + if [ "${AWSTATS_OPT}" = "yes" ]; then + clean_tarball awstats ${AWSTATS_VER} tar.gz + fi + if [ "${UNIT_OPT}" = "yes" ]; then + clean_tarball unit ${UNIT_VER} tar.gz + fi + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + clean_tarball phpMyAdmin ${PHPMYADMIN_VER} tar.gz + fi + + clean_tarball pigz ${PIGZ_VER} tar.gz + if [ "${SUHOSIN_OPT}" = "yes" ]; then + clean_tarball suhosin ${SUHOSIN_VER} tgz + fi + if [ "${OPCACHE_OPT}" = "yes" ]; then + clean_tarball zendopcache ${OPCACHE_VER} tgz + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + clean_tarball mod_lsapi ${MOD_LSAPI_VER} tar.gz + clean_tarball mod_hostinglimits ${MOD_HOSTINGLIMITS_VER} tar.gz + clean_tarball mod_proctitle ${MOD_PROCTITLE_VER} tar.gz + fi + + #PHP bit needs to be different + for i in `ls ${WORKDIR} | grep '^php-' | grep -v "${PHP53_VER}" | grep -v "${PHP54_VER}" | grep -v "${PHP55_VER}" | grep -v "${PHP56_VER}" | grep -v "${PHP70_VER}" | grep -v "${PHP71_VER}" | grep -v "${PHP72_VER}" | grep -v "${PHP73_VER}" | grep -v "${PHP74_VER}" | grep -v "${PHP80_VER}" | grep tar.gz`; do + rm -f ${WORKDIR}/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing ${WORKDIR}/$i..." + fi + done + + #Clean MySQL/MariaDB tarballs + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + for i in `ls /usr/local/ | grep ^mysql- | grep 'tar.gz$' | grep -v "^mysql-${MYSQL_VER}"`; do + rm -f /usr/local/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing /usr/local/$i..." + fi + done + fi + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + for i in `ls /usr/local/ | grep ^mariadb- | grep 'tar.gz$' | grep -v "^mariadb-${MARIADB_VER}"`; do + rm -f /usr/local/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing /usr/local/$i..." + fi + done + fi +} + +#################################################### + +doclean_old_webapps() { + if [ "${CLEAN_OLD_WEBAPPS_OPT}" != "yes" ]; then + do_exit 1 "You cannot clean webapps, because you do not have it set in options.conf file." + fi + + #Clean phpMyAdmin + if [ "${PHPMYADMIN_OPT}" = "yes" ] && [ -e /var/www/html/phpMyAdmin ]; then + PHPMYADMIN_CUR=`ls -ld /var/www/html/phpMyAdmin | cut -d\> -f2 | cut -d- -f2,3,4` + for i in `ls /var/www/html/ | grep phpMyAdmin- | grep -v "${PHPMYADMIN_CUR}"`; do + rm -rf /var/www/html/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing /var/www/html/$i..." + fi + done + fi + + #Clean SquirrelMail + if [ "${SQUIRRELMAIL_OPT}" = "yes" ] && [ -e /var/www/html/squirrelmail ]; then + SQUIRRELMAIL_CUR=`ls -ld /var/www/html/squirrelmail | cut -d\> -f2 | cut -d- -f2,3` + for i in `ls /var/www/html/ | grep squirrelmail- | grep -v -e "${SQUIRRELMAIL_CUR}\$"`; do + rm -rf /var/www/html/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing /var/www/html/$i..." + fi + done + fi + + #Clean RoundCube + if [ "${ROUNDCUBE_OPT}" = "yes" ] && [ -e /var/www/html/roundcube ]; then + #ROUNDCUBE_CUR=`ls -ld /var/www/html/roundcube | cut -d\> -f2 | cut -d- -f2` + ROUNDCUBE_CUR=`roundcube_version` + for i in `ls /var/www/html/ | grep roundcubemail- | grep -v "${ROUNDCUBE_CUR}"`; do + rm -rf /var/www/html/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing /var/www/html/$i..." + fi + done + fi + + #Clean AWstats + if [ "${AWSTATS_OPT}" = "yes" ] && [ -e /usr/local/awstats ]; then + AWSTATS_CUR=`ls -ld /usr/local/awstats | cut -d\> -f2 | cut -d- -f2` + for i in `ls /usr/local/ | grep awstats- | grep -v "${AWSTATS_CUR}"`; do + rm -rf /usr/local/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing /usr/local/$i..." + fi + done + fi +} + +#################################################### + +doClean() { + cd ${CWD} + if [ -e ${LOCKFILE} ]; then + return + fi + rm -rf mod_ruid2-${MOD_RUID2_VER} + rm -rf ${MODSECURITY_FILENAME}-${MODSECURITY_VER} + rm -rf ${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER} + rm -rf ${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER} + rm -rf ${MODSECURITY_NGINX_CONNECTOR_FILENAME}-${MODSECURITY_NGINX_CONNECTOR_VER} + rm -rf mod_aclr2-${MOD_ACLR2_VER} + rm -rf htscanner-${HTSCANNER_VER} + rm -rf mod_fcgid-${MOD_FCGID_VER} + rm -rf pigz-${PIGZ_VER} + rm -rf php-${PHP53_VER} + rm -rf php-${PHP54_VER} + rm -rf php-${PHP55_VER} + rm -rf php-${PHP56_VER} + rm -rf php-${PHP70_VER} + rm -rf php-${PHP71_VER} + rm -rf php-${PHP72_VER} + rm -rf php-${PHP73_VER} + rm -rf php-${PHP74_VER} + rm -rf php-${PHP80_VER} + rm -rf redis-${REDIS_VER} + rm -rf imapsync-imapsync-${IMAPSYNC_VER} + if [ "${UNIT_OPT}" = "yes" ]; then + rm -rf unit-${UNIT_VER} + fi + rm -rf zstd-${ZSTD_VER} + rm -rf xapian-core-${XAPIAN_CORE_VER} + rm -rf bubblewrap-${BUBBLEWRAP_VER} + rm -rf s-nail-${S_NAIL_VER} + rm -rf msmtp-${MSMTP_VER} + rm -rf lua-${LUA_VER} + if [ "${EXIM_SRS_OPT}" = "yes" ]; then + rm -rf libsrs_alt-${LIBSRS_ALT_VER} + fi + rm -rf libpsf2-${LIBSPF2_VER} + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + rm -rf lsws-${LITESPEED_VER} + fi + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + rm -rf openlitespeed-${OPENLITESPEED_VER} + fi + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + rm -rf mod_lsapi-${MOD_LSAPI_VER} + rm -rf mod_proctitle-${MOD_PROCTITLE_VER} + fi + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + rm -rf mysql-${MYSQL_VER} + fi + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + rm -rf mariadb-${MARIADB_VER} + fi + if [ "${PHP_IMAGICK_OPT}" = "yes" ]; then + rm -rf imagick-${IMAGICK_VER} + rm -rf ImageMagick-${IMAGEMAGICK_VER} + fi + if [ "${PHP_PHALCON_OPT}" = "yes" ]; then + rm -rf psr-${PSR_VER} + rm -rf phalcon-${PHALCON_VER} + fi + if [ "${PHP_IMAP_OPT}" = "yes" ]; then + rm -rf imap-${IMAP_VER} + fi + rm -rf curl-${CURL_VER} + rm -rf nginx-${NGINX_VER} + rm -rf nghttp2-${NGHTTP2_VER} + rm -rf pcre-${PCRE_VER} + rm -rf pcre2-${PCRE2_VER} + rm -rf zlib-${ZLIB_VER} + rm -rf libpng-${PNG_VER} + rm -rf libmaxminddb-${LIBMAXMINDDB_VER} + rm -rf geoipupdate-${GEOIPUPDATE_VER} + rm -rf freetype-${FREETYPE_VER} + rm -rf libsodium-${LIBSODIUM_VER} + rm -rf libxslt-${LIBXSLT_VER} + rm -rf libxml2-${LIBXML2_VER} + rm -rf libzip-${LIBZIP_VER} + rm -rf icu4c-${ICU_VER}-src + rm -rf icu + rm -rf easy_spam_fighter + rm -rf libspf2-${LIBSPF2_VER} + rm -rf ${ZENDNAME_PHP53} + rm -rf ${ZENDNAME_PHP54} + rm -rf ${ZENDNAME_PHP55} + rm -rf ${ZENDNAME_PHP56} + rm -rf ${WEBALIZER} + rm -rf proftpd-${PROFTPD_VER} + rm -rf pure-ftpd-${PUREFTPD_VER} + rm -rf httpd-${APACHE2_VER} + rm -rf exim-${EXIM_VER} + rm -rf dovecot-${DOVECOT_VER} + rm -rf dovecot-ce-${DOVECOT_VER} + rm -rf suphp-${SUPHP_VER} + rm -rf suhosin-${SUHOSIN_VER} + rm -rf zendopcache-${OPCACHE_VER} + rm -rf dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER} + rm -rf Mail-SpamAssassin-${SPAMASSASSIN_VER} + rm -rf rspamd-${RSPAMD_VER} + rm -rf clamav-${CLAMAV_VER} +# Mailman is not yet supported +# rm -rf mailman-${MAILMAN_VER} + + rm -rf ${ZENDNAME_PHP53} + rm -rf ${ZENDNAME_PHP54} + + #Clean MySQL/MariaDB + if [ -h /usr/local/mysql ] && [ "${MYSQL_INST_OPT}" != "no" ]; then + MYSQL_CUR=`ls -ld /usr/local/mysql | cut -d\> -f2 | cut -d' ' -f2` + for i in `ls /usr/local/ | grep '^mysql-\|^mariadb-' | grep -v "${MYSQL_CUR}"`; do + if [ -h /usr/local/${i}/data ]; then + rm -rf /usr/local/$i + if [ "${CLEAN_OPT}" = "no" ]; then + echo "Removing /usr/local/$i..." + fi + fi + done + fi + + if [ "${CLEAN_OLD_TARBALLS_OPT}" = "yes" ]; then + doclean_old_tarballs + fi + + if [ "${CLEAN_OLD_WEBAPPS_OPT}" = "yes" ]; then + doclean_old_webapps + fi + + if [ "${CLEAN_OPT}" = "no" ]; then + echo "All clean!" + fi +} + +DOCLEAN_CASE=1 +doclean_toggle() { + DOCLEAN_CASE=0 +} + +#################################################### +if [ ! -e ${LOCKFILE} ]; then + case "$1" in + update) doclean_toggle ;; + update_data) doclean_toggle ;; + "") doclean_toggle ;; + gen_help_json) doclean_toggle ;; + opt_help) doclean_toggle ;; + set) doclean_toggle ;; + set_php) doclean_toggle ;; + get_versions_txt) doclean_toggle ;; + update_script) doclean_toggle ;; + versions_json) doclean_toggle ;; + versions_ajax) doclean_toggle ;; + gen_help) doclean_toggle ;; + version) doclean_toggle ;; + versions) doclean_toggle ;; + list_removals) doclean_toggle ;; + list_removals_json) doclean_toggle ;; + remove_items) doclean_toggle ;; + set_fastest) doclean_toggle ;; + set_fastest_quiet) doclean_toggle ;; + kill) doclean_toggle ;; + update_da) doclean_toggle ;; + versions_nobold) doclean_toggle ;; + list_configs_json) doclean_toggle ;; + settings_json) doclean_toggle ;; + get_timezone) doclean_toggle ;; + custom_config) doclean_toggle ;; + set_versions_txt) doclean_toggle ;; + show_component_config) doclean_toggle ;; + remove_customized_config) doclean_toggle ;; + show_file) doclean_toggle ;; + check_options) doclean_toggle ;; + esac + if [ "${CLEAN_OPT}" = "yes" ] && [ "${DOCLEAN_CASE}" = "1" ]; then + doClean + fi +fi + +#################################################### +BUILD_SECTIONS_CASE=1 +build_section_toggle() { + BUILD_SECTIONS_CASE=0 +} +case "$1" in + opt_help) build_section_toggle ;; + set) build_section_toggle ;; + set_php) build_section_toggle ;; + get_versions_txt) build_section_toggle ;; + update_script) build_section_toggle ;; + version) build_section_toggle ;; + set_fastest) build_section_toggle ;; + set_fastest_quiet) build_section_toggle ;; + kill) build_section_toggle ;; + update_da) build_section_toggle ;; + list_configs_json) build_section_toggle ;; + settings_json) build_section_toggle ;; + get_timezone) build_section_toggle ;; + custom_config) build_section_toggle ;; + set_versions_txt) build_section_toggle ;; + show_component_config) build_section_toggle ;; + remove_customized_config) build_section_toggle ;; + show_file) build_section_toggle ;; + check_options) build_section_toggle ;; +esac + +if [ "${BUILD_SECTIONS_CASE}" = "1" ]; then + HELP_SECTIONS="BUILD_COMP BUILD_PHP_EXT BUILD_COMP_CONF BUILD_COMP_WEBAPPS BUILD_CB BUILD_OLD BUILD_UPDATE BUILD_UPDATE_PCG BUILD_ALL BUILD_PHP_EXTENSIONS BUILD_EXPERIENCED" + + BUILD_PHP_EXT_SET="php_gmp php_igbinary php_ioncube php_imagick php_imap php_ldap php_opcache php_phalcon php_psr php_redis php_readline php_snuffleupagus php_suhosin php_xmlrpc php_zend" + BUILD_PHP_EXT_DESC="Install/update PHP extensions" + BUILD_PHP_EXT_REQADD="" + + BUILD_COMP_SET="apache awstats awstats_process bubblewrap csf clamav composer curl cpanel_to_da dovecot exim freetype geoipupdate icu imagemagick imapsync jailshell lego libmaxminddb libmodsecurity libspf2 libsrs_alt libsodium libxml2 libxslt litespeed lua mod_lsapi mod_proctitle mod_aclr2 mod_ruid2 mod_htscanner2 mod_fcgid modsecurity modsecurity_rules msmtp mysql netdata nginx nginx_apache openlitespeed pigeonhole pigz pcre php proftpd pureftpd redis rspamd snail spamassassin suphp unit webalizer wp" + BUILD_COMP_DESC="Install/update server components" + BUILD_COMP_REQADD="" + + BUILD_COMP_CONF_SET="exim_conf dovecot_conf blockcracking easy_spam_fighter php_ini rewrite_confs secure_php spamassassin_cron litespeed_license litespeed_license_migrate" + BUILD_COMP_CONF_DESC="Components configuration options" + BUILD_COMP_CONF_REQADD="" + + BUILD_COMP_WEBAPPS_SET="phpmyadmin roundcube squirrelmail" + BUILD_COMP_WEBAPPS_DESC="Install/update web applications" + BUILD_COMP_WEBAPPS_REQADD="" + + BUILD_CB_SET="create_options custombuild_plugin cron opt_help options list_removals remove_items set set_fastest set_fastest_quiet update_da update_versions update_webapps used_configs versions version" + BUILD_CB_DESC="CustomBuild related options/functions" + BUILD_CB_SET_REQADD="opt_help set" + SET_ADDIT="option_name value" + OPT_HELP_ADDIT="(full)" + + BUILD_OLD_SET="clean clean_old_webapps" + BUILD_OLD_DESC="Remove old build data" + BUILD_OLD_REQUADD="" + + BUILD_UPDATE_SET="update update_script" + BUILD_UPDATE_DESC="Get latest build script with or without new packages" + BUILD_UPDATE_REQADD="" + + BUILD_UPDATE_PCG_SET="update_data" + BUILD_UPDATE_PCG_DESC="Get packages for current build script" + BUILD_UPDATE_PCG_REQADD="" + + BUILD_ALL_SET="all" + BUILD_ALL_DESC="Build everything what is set in the options.conf file" + BUILD_ALL_REQADD="" + + BUILD_PHP_EXTENSIONS_SET="php_extensions" + BUILD_PHP_EXTENSIONS_DESC="Build all PHP extensions set set in the php_extensions.conf file" + BUILD_PHP_EXTENSIONS_REQADD="" + + BUILD_EXPERIENCED_SET="php_expert php_htscanner2 todovecot set_service" + BUILD_EXPERIENCED_DESC="Recommended for experienced users only (!)" + BUILD_EXPERIENCED_REQADD="php_expert php_htscanner2 set_service" + PHP_EXPERT_ADDIT="php_release php_mode" + PHP_HTSCANNER2_ADDIT="php_release" + SET_SERVICE_ADDIT="service ON|OFF|delete" +fi + +################################################### + +generateHelp() { + for section in ${HELP_SECTIONS}; do + DESC=${section}_DESC + echo " +-----------------------------------------------------------+" + printf " | %-55s %-2s|\n" "$(eval_var ${DESC}):" + + BUILDSET="${section}_SET" + BUILD_ADD_TO_OUT="${section}_REQADD" + for setting in $(eval_var ${BUILDSET}); do + ADDIT="" + for i in $(eval_var ${BUILD_ADD_TO_OUT}); do + ADDIT_VAR=`echo "${i}_ADDIT" | tr "[a-z]" "[A-Z]"` + if [ "$i" = "${setting}" ]; then + ADDIT="$(eval_var ${ADDIT_VAR})" + fi + done + printf " | %-55s %-2s|\n" " $0 ${setting} ${ADDIT}" + done + done +} + +initJSONVars() { + #################################################### + #SKIP LISTS for CustomBuild plugin to generate in JSON format accoring to the options set + HELP_SECTIONS_JSON_SKIP="BUILD_EXPERIENCED" + + BUILD_PHP_EXT_SKIP="" + if [ "${PHP_IGBINARY_OPT}" = "no" ]; then + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}igbinary " + fi + if [ "${IMAGICK_OPT}" = "no" ]; then + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}imagick " + fi + if [ "${ZEND_OPT}" = "no" ]; then + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}zend " + fi + if [ "${IONCUBE_OPT}" = "no" ]; then + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}ioncube " + fi + if [ "${SUHOSIN_OPT}" = "no" ]; then + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}suhosin " + fi + if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "no" ]; then + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}snuffleupagus " + fi + if [ "${PHP_PHALCON_OPT}" = "no" ]; then + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}phalcon " + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}psr " + fi + if [ "${PHP_IMAP_OPT}" = "no" ]; then + BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}imap " + fi + + BUILD_COMP_SKIP="" + if [ "${WEBSERVER_OPT}" = "apache" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}nginx litespeed nginx_apache mod_aclr2 openlitespeed " + elif [ "${WEBSERVER_OPT}" = "nginx" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}apache litespeed nginx_apache mod_aclr2 openlitespeed " + elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}apache nginx nginx_apache mod_aclr2 openlitespeed " + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}apache litespeed nginx nginx_apache mod_aclr2 " + fi + if [ "${CURL_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}curl " + fi + if [ "${CLAMAV_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}clamav " + fi + if [ "${AWSTATS_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}awstats " + fi + if [ "${WEBALIZER_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}webalizer " + fi + if [ "${CSF_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}csf " + fi + if [ "${FTPD_OPT}" = "pureftpd" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}proftpd " + else + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}pureftpd " + fi + if [ "${MOD_RUID2_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mod_ruid2 " + fi + if [ "${MODSECURITY_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}libmodsecurity modsecurity modsecurity_rules " + fi + if [ "${CLOUDLINUX_OPT}" = "no" ] || [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mod_hostinglimits ${BUILD_COMP_SKIP}mod_lsapi ${BUILD_COMP_SKIP}mod_proctitle " + fi + if [ "${HTSCANNER_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mod_htscanner2 " + fi + if [ "${HAVE_FCGID}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mod_fcgid " + fi + if [ "${HAVE_SUPHP_CGI}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}suphp " + fi + if [ "${PIGEONHOLE_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}pigeonhole " + fi + if [ "${DOVECOT_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}dovecot " + fi + if [ "${MYSQL_INST_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mysql " + fi + if [ "${SPAMD_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}spamassassin rspamd " + elif [ "${SPAMD_OPT}" = "rspamd" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}spamassassin " + else + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}rspamd " + fi + if [ "${EXIM_OPT}" = "no" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}exim " + fi + if [ "${OS_CENTOS_VER}" != "6" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}libsodium pcre " + fi + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + BUILD_COMP_SKIP="${BUILD_COMP_SKIP}libzip " + fi + + BUILD_COMP_CONF_SKIP="" + if [ "${PHP_INI_OPT}" = "no" ]; then + BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}php_ini " + fi + if [ "${EXIMCONF_OPT}" = "no" ]; then + BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}eximconf " + fi + if [ "${WEBSERVER_OPT}" != "litespeed" ]; then + BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}litespeed_license " + fi + if [ "${WEBSERVER_OPT}" != "litespeed" ] || [ "${LITESPEED_SERIALNO_OPT}" = "trial" ]; then + BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}litespeed_license_migrate " + fi + if [ "${DOVECOT_CONF_OPT}" = "no" ]; then + BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}dovecot_conf " + fi + if [ "${BLOCKCRACKING_OPT}" = "no" ]; then + BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}blockcracking " + fi + if [ "${EXIMCONF_OPT}" = "no" ]; then + BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}easy_spam_fighter " + fi + + BUILD_CB_SKIP="create_options opt_help list_removals remove_items set set_fastest_quiet update_versions versions" + + BUILD_COMP_WEBAPPS_SKIP="" + if [ "${PHPMYADMIN_OPT}" = "no" ]; then + BUILD_COMP_WEBAPPS_SKIP="${BUILD_COMP_WEBAPPS_SKIP}phpmyadmin " + fi + if [ "${ROUNDCUBE_OPT}" = "no" ]; then + BUILD_COMP_WEBAPPS_SKIP="${BUILD_COMP_WEBAPPS_SKIP}roundcube " + fi + if [ "${SQUIRRELMAIL_OPT}" = "no" ]; then + BUILD_COMP_WEBAPPS_SKIP="${BUILD_COMP_WEBAPPS_SKIP}squirremail " + fi + + BUILD_OLD_SKIP="" + BUILD_UPDATE_SKIP="" + BUILD_UPDATE_PCG_SKIP="" + + #DESCRIPTIONS + COMP_UNIT_NAME="Build Nginx Unit" + COMP_UNIT_DESC="Install/update Nginx Unit dynamic application server." + COMP_UNIT_VER="Version ${UNIT_VER}." + + COMP_APACHE_NAME="Build Apache" + COMP_APACHE_DESC="Install/update Apache WEB server." + COMP_APACHE_VER="Version ${APACHE2_VER}." + + COMP_AWSTATS_NAME="Build awstats" + COMP_AWSTATS_DESC="Install/update AWstats." + COMP_AWSTATS_VER="Version ${AWSTATS_VER}." + + COMP_AWSTATS_PROCESS_NAME="Build awstats process" + COMP_AWSTATS_PROCESS_DESC="Install/update AWstats processing script." + COMP_AWSTATS_PROCESS_VER="Version ${AWSTATS_PROCESS_VER}." + + COMP_BUBBLEWRAP_NAME="Build bubblewrap" + COMP_BUBBLEWRAP_DESC="Install/update bubblewrap." + COMP_BUBBLEWRAP_VER="Version ${BUBBLEWRAP_VER}." + + COMP_JAILSHELL_NAME="Build jailshell" + COMP_JAILSHELL_DESC="Install/update jailshell." + COMP_JAILSHELL_VER="Version ${JAILSHELL_SH_VER}." + + COMP_REDIS_NAME="Build redis" + COMP_REDIS_DESC="Install/update redis." + COMP_REDIS_VER="Version ${REDIS_VER}." + + COMP_CSF_NAME="Build CSF" + COMP_CSF_DESC="Install/update ConfigServer Security & Firewall (csf)." + COMP_CSF_VER="" + + COMP_CLAMAV_NAME="Build ClamAV" + COMP_CLAMAV_DESC="Install/update ClamAV antivirus engine." + COMP_CLAMAV_VER="Version ${CLAMAV_VER}." + + COMP_COMPOSER_NAME="Build composer" + COMP_COMPOSER_DESC="Install/update composer." + COMP_COMPOSER_VER="Version ${COMPOSER_VER}." + + COMP_WP_NAME="Build wp-cli" + COMP_WP_DESC="Install/update command-line interface for WordPress." + COMP_WP_VER="Version ${WP_VER}." + + COMP_IMAPSYNC_NAME="Build imapsync" + COMP_IMAPSYNC_DESC="Install/update imapsync tool for mailbox synchronization." + COMP_IMAPSYNC_VER="Version ${IMAPSYNC_VER}." + + COMP_LEGO_NAME="Build lego" + COMP_LEGO_DESC="Install/update lego Let's Encrypt client." + COMP_LEGO_VER="Version ${LEGO_VER}." + + COMP_CURL_NAME="Build cURL" + COMP_CURL_DESC="Install/update cURL." + COMP_CURL_VER="Version ${CURL_VER}." + + COMP_CPANEL_TO_DA_NAME="Build cpanel_to_da" + COMP_CPANEL_TO_DA_DESC="Install/update cPanel to DirectAdmin script." + COMP_CPANEL_TO_DA_VER="" + + COMP_DOVECOT_NAME="Build Dovecot" + COMP_DOVECOT_DESC="Install/update Dovecot IMAP/POP3 server." + COMP_DOVECOT_VER="Version ${DOVECOT_VER}." + + COMP_EXIM_NAME="Build Exim" + COMP_EXIM_DESC="Install/update Exim Mail Transfer Agent." + COMP_EXIM_VER="Version ${EXIM_VER}." + + COMP_FREETYPE_NAME="Build Freetype" + COMP_FREETYPE_DESC="Install/update Freetype." + COMP_FREETYPE_VER="Version ${FREETYPE_VER}." + + COMP_PHP_GMP_NAME="Build gmp" + COMP_PHP_GMP_DESC="Install/update gmp extension for PHP." + COMP_PHP_GMP_VER="" + + COMP_PHP_LDAP_NAME="Build ldap" + COMP_PHP_LDAP_DESC="Install/update ldap extension for PHP." + COMP_PHP_LDAP_VER="" + + COMP_PHP_BZ2_NAME="Build bz2" + COMP_PHP_BZ2_DESC="Install/update bz2 extension for PHP." + COMP_PHP_BZ2_VER="" + + COMP_PHP_IGBINARY_NAME="Build igbinary" + COMP_PHP_IGBINARY_DESC="Install/update igbinary extension for PHP." + COMP_PHP_IGBINARY_VER="Version ${IGBINARY_VER}." + + COMP_PHP_IMAGICK_NAME="Build imagick" + COMP_PHP_IMAGICK_DESC="Install/update ImageMagick extension for PHP." + COMP_PHP_IMAGICK_VER="Version ${IMAGICK_VER}." + + COMP_PHP_SNUFFLEUPAGUS_NAME="Build snuffleupagus" + COMP_PHP_SNUFFLEUPAGUS_DESC="Install/update snuffleupagus extension for PHP." + COMP_PHP_SNUFFLEUPAGUS_VER="Version ${SNUFFLEUPAGUS_VER}." + + COMP_PHP_PHALCON_NAME="Build phalcon" + COMP_PHP_PHALCON_DESC="Install/update Phalcon extension for PHP." + COMP_PHP_PHALCON_VER="Version ${PHALCON_VER}." + + COMP_PHP_PSR_NAME="Build psr" + COMP_PHP_PSR_DESC="Install/update psr extension for PHP." + COMP_PHP_PSR_VER="Version ${PSR_VER}." + + COMP_PHP_REDIS_NAME="Build redis" + COMP_PHP_REDIS_DESC="Install/update redis extension for PHP." + COMP_PHP_REDIS_VER="Version ${PHPREDIS_VER}." + + COMP_PHP_READLINE_NAME="Build readline" + COMP_PHP_READLINE_DESC="Install/update readline extension for PHP." + COMP_PHP_READLINE_VER="" + + COMP_PHP_IMAP_NAME="Build imap" + COMP_PHP_IMAP_DESC="Install/update imap extension for PHP." + COMP_PHP_IMAP_VER="Version ${IMAP_VER}." + + COMP_PHP_XMLRPC_NAME="Build xmlrpc" + COMP_PHP_XMLRPC_DESC="Install/update xmlrpc extension for PHP." + COMP_PHP_XMLRPC_VER="" + + COMP_IMAGEMAGICK_NAME="Build ImageMagick" + COMP_IMAGEMAGICK_DESC="Install/update ImageMagick." + COMP_IMAGEMAGICK_VER="Version ${IMAGEMAGICK_VER}." + + COMP_ICU_NAME="Build ICU" + COMP_ICU_DESC="Install/update ICU." + COMP_ICU_VER="Version ${ICU_VER}." + + COMP_PHP_IONCUBE_NAME="Build ionCube" + COMP_PHP_IONCUBE_DESC="Install/update ionCube." + COMP_PHP_IONCUBE_VER="Version ${IONCUBE_VER}." + + COMP_PHP_SUHOSIN_NAME="Build suhosin" + COMP_PHP_SUHOSIN_DESC="Install/update suhosin." + COMP_PHP_SUHOSIN_VER="Version ${SUHOSIN_VER}." + + COMP_LIBMAXMINDDB_NAME="Build libmaxminddb" + COMP_LIBMAXMINDDB_DESC="Install/update libmaxminddb." + COMP_LIBMAXMINDDB_VER="Version ${LIBMAXMINDDB_VER}." + + COMP_GEOIPUPDATE_NAME="Build geoipupdate" + COMP_GEOIPUPDATE_DESC="Install/update geoipupdate." + COMP_GEOIPUPDATE_VER="Version ${GEOIPUPDATE_VER}." + + COMP_LIBSPF2_NAME="Build libspf2" + COMP_LIBSPF2_DESC="Install/update libspf2." + COMP_LIBSPF2_VER="Version ${LIBSPF2_VER}." + + COMP_LIBSRS_ALT_NAME="Build libsrs_alt" + COMP_LIBSRS_ALT_DESC="Install/update libsrs_alt." + COMP_LIBSRS_ALT_VER="Version ${LIBSRS_ALT_VER}." + + COMP_LIBSODIUM_NAME="Build libsodium" + COMP_LIBSODIUM_DESC="Install/update libsodium." + COMP_LIBSODIUM_VER="Version ${LIBSODIUM_VER}." + + COMP_LIBXML2_NAME="Build libxml2" + COMP_LIBXML2_DESC="Install/update libxml2." + COMP_LIBXML2_VER="Version ${LIBXML2_VER}." + + COMP_LIBXSLT_NAME="Build libxslt" + COMP_LIBXSLT_DESC="Install/update libxslt." + COMP_LIBXSLT_VER="Version ${LIBXSLT_VER}." + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + COMP_MOD_LSAPI_NAME="Build mod_lsapi" + COMP_MOD_LSAPI_DESC="Install/update mod_lsapi." + COMP_MOD_LSAPI_VER="Version ${MOD_LSAPI_VER}." + + COMP_MOD_HOSTINGLIMITS_NAME="Build mod_hostinglimits" + COMP_MOD_HOSTINGLIMITS_DESC="Install/update mod_hostinglimits." + COMP_MOD_HOSTINGLIMITS_VER="Version ${MOD_HOSTINGLIMITS_VER}." + + COMP_MOD_PROCTITLE_NAME="Build mod_proctitle" + COMP_MOD_PROCTITLE_DESC="Install/update mod_proctitle." + COMP_MOD_PROCTITLE_VER="Version ${MOD_PROCTITLE_VER}." + fi + + COMP_MOD_ACLR2_NAME="Build mod_aclr2" + COMP_MOD_ACLR2_DESC="Install/update mod_aclr2." + COMP_MOD_ACLR2_VER="Version ${MOD_ACLR2_VER}." + + COMP_MOD_RUID2_NAME="Build mod_ruid2" + COMP_MOD_RUID2_DESC="Install/update mod_ruid2." + COMP_MOD_RUID2_VER="Version ${MOD_RUID2_VER}." + + COMP_MODSECURITY_NAME="Build ModSecurity" + COMP_MODSECURITY_DESC="Install/update ModSecurity." + COMP_MODSECURITY_VER="Version ${MODSECURITY_VER}." + + COMP_LIBMODSECURITY_NAME="Build LibModSecurity" + COMP_LIBMODSECURITY_DESC="Install/update LibModSecurity (ModSecurity 3.0)." + COMP_LIBMODSECURITY_VER="Version ${LIBMODSECURITY_VER}." + + COMP_MODSECURITY_RULES_NAME="Build ModSecurity Rules" + COMP_MODSECURITY_RULES_DESC="Install/update ModSecurity rule set." + COMP_MODSECURITY_RULES_VER="" + + COMP_PHP_OPCACHE_NAME="Build opcache" + COMP_PHP_OPCACHE_DESC="Install/update opcache." + COMP_PHP_OPCACHE_VER="" + + COMP_PIGZ_NAME="Build pigz" + COMP_PIGZ_DESC="Install/update pigz." + COMP_PIGZ_VER="Version ${PIGZ_VER}." + + COMP_MOD_HTSCANNER2_NAME="Build mod_htscanner2" + COMP_MOD_HTSCANNER2_DESC="Install/update mod_htscanner2." + COMP_MOD_HTSCANNER2_VER="Version ${HTSCANNER_VER}." + + COMP_MOD_FCGID_NAME="Build mod_fcgid" + COMP_MOD_FCGID_DESC="Install/update mod_fcgid." + COMP_MOD_FCGID_VER="Version ${MOD_FCGID_VER}." + + COMP_MYSQL_NAME="Build ${MYSQLNAME}" + COMP_MYSQL_DESC="Install/update ${MYSQLNAME}." + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + COMP_MYSQL_VER="Version ${MYSQL_VER}." + else + COMP_MYSQL_VER="Version ${MARIADB_VER}." + fi + + COMP_NGINX_NAME="Build nginx" + COMP_NGINX_DESC="Install/update nginx WEB server." + COMP_NGINX_VER="Version ${NGINX_VER}." + + COMP_LITESPEED_NAME="Build litespeed" + COMP_LITESPEED_DESC="Install/update LiteSpeed WEB server." + COMP_LITESPEED_VER="Version ${LITESPEED_VER}." + + COMP_OPENLITESPEED_NAME="Build openlitespeed" + COMP_OPENLITESPEED_DESC="Install/update OpenLiteSpeed WEB server." + COMP_OPENLITESPEED_VER="Version ${OPENLITESPEED_VER}." + + COMP_NETDATA_NAME="Build netdata" + COMP_NETDATA_DESC="Install/update netdata metrics for your server." + COMP_NETDATA_VER="" + + COMP_NGINX_APACHE_NAME="Build nginx+Apache" + COMP_NGINX_APACHE_DESC="Install/update Apache and nginx (nginx as a reverse proxy for Apache)." + COMP_NGINX_APACHE_VER="Apache ${APACHE2_VER} and nginx ${NGINX_VER}." + + COMP_PIGEONHOLE_NAME="Build Pigeonhole" + COMP_PIGEONHOLE_DESC="Install/update Pigeonhole used in Dovecot to provide Sieve email filtering and ManageSieve protocol." + COMP_PIGEONHOLE_VER="Version ${PIGEONHOLE_VER}." + + COMP_PCRE_NAME="Build PCRE" + COMP_PCRE_DESC="Install/update PCRE." + COMP_PCRE_VER="Version ${PCRE_VER}." + + COMP_PHP_NAME="Build PHP" + COMP_PHP_DESC="Install/update PHP." + if [ "${PHP2_RELEASE_OPT}" = "no" ] && [ "${PHP3_RELEASE_OPT}" = "no" ] && [ "${PHP4_RELEASE_OPT}" = "no" ]; then + COMP_PHP_VER="Version ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT}." + elif [ "${PHP3_RELEASE_OPT}" = "no" ] && [ "${PHP4_RELEASE_OPT}" = "no" ]; then + COMP_PHP_VER="Version ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default) and ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional)." + elif [ "${PHP3_RELEASE_OPT}" = "no" ] && [ "${PHP4_RELEASE_OPT}" = "no" ]; then + COMP_PHP_VER="Version ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default), ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional) and ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional)." + else + COMP_PHP_VER="Version ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default), ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional), ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional) and ${PHP4_RELEASE_OPT} as ${PHP4_MODE_OPT} (additional)." + fi + + COMP_PROFTPD_NAME="Build ProFTPd" + COMP_PROFTPD_DESC="Install/update ProFTPD FTP server." + COMP_PROFTPD_VER="Version ${PROFTPD_VER}." + + COMP_PUREFTPD_NAME="Build Pure-FTPd" + COMP_PUREFTPD_DESC="Install/update Pure-FTPd FTP server." + COMP_PUREFTPD_VER="Version ${PUREFTPD_VER}." + + COMP_SPAMASSASSIN_NAME="Build SpamAssassin" + COMP_SPAMASSASSIN_DESC="Install/update SpamAssassin." + COMP_SPAMASSASSIN_VER="Version ${SPAMASSASSIN_VER}." + + COMP_RSPAMD_NAME="Build Rspamd" + COMP_RSPAMD_DESC="Install/update Rspamd." + COMP_RSPAMD_VER="Version ${RSPAMD_VER}." + + COMP_SNAIL_NAME="Build s-nail" + COMP_SNAIL_DESC="Install/update s-nail - environment for sending and receiving mail." + COMP_SNAIL_VER="Version ${S_NAIL_VER}." + + COMP_MSMTP_NAME="Build msmtp" + COMP_MSMTP_DESC="Install/update msmtp - smtp client for jailed environments." + COMP_MSMTP_VER="Version ${MSMTP_VER}." + + COMP_LUA_NAME="Build lua" + COMP_LUA_DESC="Install/update lua scripting language." + COMP_LUA_VER="Version ${LUA_VER}." + + COMP_SPAMASSASSIN_CRON_NAME="Build SpamAssassin cron." + COMP_SPAMASSASSIN_CRON_DESC="Install SpamAssassin cronjob for periodic rule updates." + + COMP_SUPHP_NAME="Build suPHP" + COMP_SUPHP_DESC="Install/update suPHP." + COMP_SUPHP_VER="Version ${SUPHP_VER}." + + COMP_WEBALIZER_NAME="Build Webalizer" + COMP_WEBALIZER_DESC="Install/update Webalizer." + COMP_WEBALIZER_VER="Version ${WEBALIZER_VER}." + + COMP_PHP_ZEND_NAME="Build Zend Guard loader" + COMP_PHP_ZEND_DESC="Install/update Zend Guard loader." + COMP_PHP_ZEND_VER="" + + COMP_EXIM_CONF_NAME="Update Exim configuration files" + COMP_EXIM_CONF_DESC="Updates Exim configuration files (exim.conf and exim.pl). WARNING: Any customizations done will be lost." + + COMP_DOVECOT_CONF_NAME="Update Dovecot configuration files" + COMP_DOVECOT_CONF_DESC="Updates Dovecot configuration files." + + COMP_BLOCKCRACKING_NAME="Enable BlockCracking" + COMP_BLOCKCRACKING_DESC="Enables BlockCracking for outgoing SPAM mitigation in Exim configuration file (exim.conf). Requires Exim configuration version 4.3 or higher. More information: https://forum.directadmin.com/showthread.php?t=50059." + + COMP_EASY_SPAM_FIGHTER_NAME="Enable Easy Spam Fighter" + COMP_EASY_SPAM_FIGHTER_DESC="Enables Easy Spam Fighter for incoming SPAM mitigation in Exim configuration file (exim.conf). Requires Exim configuration version 4.3 or higher. More information: https://forum.directadmin.com/showthread.php?t=50059." + + COMP_PHP_INI_NAME="Update PHP configuration files" + COMP_PHP_INI_DESC="Updates php.ini configuration files used by PHP. WARNING: Any customizations done will be lost." + + COMP_REWRITE_CONFS_NAME="Rewrite WEB server configuration files" + COMP_REWRITE_CONFS_DESC="Rewrites Apache/Nginx WEB server configuration files (useful when configuration got corrupted or needs to be updated). WARNING: customizations must be present in 'custom/' folder, otherwise they will be lost." + + COMP_SECURE_PHP_NAME="Secure PHP" + COMP_SECURE_PHP_DESC="Disables dangerous PHP functions in php.ini file." + + COMP_LITESPEED_LICENSE_NAME="Update LiceSpeed License" + COMP_LITESPEED_LICENSE_DESC="Updates LiteSpeed license using the serial number provided." + + COMP_LITESPEED_LICENSE_MIGRATE_NAME="Migrate LiteSpeed License" + COMP_LITESPEED_LICENSE_MIGRATE_DESC="Releases LiteSpeed license (equivalent of 'lshttpd -m').." + + COMP_PHPMYADMIN_NAME="Build phpMyAdmin" + COMP_PHPMYADMIN_DESC="Install/update phpMyAdmin WEB MySQL administration tool." + COMP_PHPMYADMIN_VER="Version ${PHPMYADMIN_VER}." + + COMP_ROUNDCUBE_NAME="Build RoundCube" + COMP_ROUNDCUBE_DESC="Install/update RoundCube webmail." + COMP_ROUNDCUBE_VER="Version ${ROUNDCUBE_VER}." + + COMP_CUSTOMBUILD_PLUGIN_NAME="Build CustomBuild plugin" + COMP_CUSTOMBUILD_PLUGIN_DESC="Install/update CustomBuild plugin." + + COMP_SQUIRRELMAIL_NAME="Build SquirrelMail" + COMP_SQUIRRELMAIL_DESC="Install/update SquirrelMail webmail." + COMP_SQUIRRELMAIL_VER="Version ${SQUIRRELMAIL_VER}." + + COMP_CREATE_OPTIONS_NAME="Regenerate options.conf file" + COMP_CREATE_OPTIONS_DESC="Re-create options.conf file by asking questions." + + COMP_CRON_NAME="Enable/update CustomBuild cronjob" + COMP_CRON_DESC="Enables or updates cronjob used by CustomBuild to send notifications to specified email address about the updates, auto-update components." + + COMP_OPT_HELP_NAME="Options.conf help" + COMP_OPT_HELP_DESC="Generates available options that could be used in the options.conf file." + + COMP_OPTIONS_NAME="Display options.conf settings" + COMP_OPTIONS_DESC="Shows current options set in the options.conf file" + + COMP_SET_NAME="Change options.conf setting" + COMP_SET_DESC="Changes value in the options.conf file" + + COMP_SET_FASTEST_NAME="Set fastest download server" + COMP_SET_FASTEST_DESC="Selects the fastest download server to use and sets it in the options.conf file." + + COMP_SET_FASTEST_QUIET_NAME="Set fastest download server (no output)" + COMP_SET_FASTEST_QUIET_DESC="Selects the fastest download server to use and sets it in the options.conf file. Command generates no output." + + COMP_UPDATE_DA_NAME="Update DirectAdmin" + COMP_UPDATE_DA_DESC="Updates DirectAdmin to the latest version." + + COMP_UPDATE_VERSIONS_NAME="Update all components" + COMP_UPDATE_VERSIONS_DESC="Checks what updates are available and applies them." + + COMP_UPDATE_WEBAPPS_NAME="Update WEB applications." + COMP_UPDATE_WEBAPPS_DESC="Updates WEB applications if updates are available (only phpMyAdmin, RoundCube and SquirrelMail)." + + COMP_USED_CONFIGS_NAME="Used configuration files" + COMP_USED_CONFIGS_DESC="Displays full paths to component configuration (./configure) files used by CustomBuild." + + COMP_VERSIONS_NAME="Updates availale" + COMP_VERSIONS_DESC="Shows what updates are available to be applied on the system. Does not update them automatically." + + COMP_VERSION_NAME="CustomBuild version" + COMP_VERSION_DESC="Shows CustomBuild version." + + COMP_LIST_REMOVALS_NAME="List components for removal" + COMP_LIST_REMOVALS_DESC="Lists all components that are available for removal." + + COMP_REMOVE_ITEMS_NAME="Remove not needed components" + COMP_REMOVE_ITEMS_DESC="Removes all components that are available for removal (components that are installed, but not set in options.conf)." + + COMP_ALL_NAME="Build everything" + COMP_ALL_DESC="(Re)installs all components set in the options.conf file" + + COMP_CLEAN_NAME="Clean old directories" + COMP_CLEAN_DESC="Removes not needed folders from CustomBuild directory." + + COMP_CLEAN_OLD_WEBAPPS_NAME="Clean old WEB applications" + COMP_CLEAN_OLD_WEBAPPS_DESC="Removes old WEB applications that are not currently used from /var/www/html directory." + + COMP_UPDATE_NAME="Update CustomBuild script and packages" + COMP_UPDATE_DESC="Updates CustomBuild script, grabs latest versions.txt file and packages." + + COMP_UPDATE_SCRIPT_NAME="Update CustomBuild script" + COMP_UPDATE_SCRIPT_DESC="Updates CustomBuild script only (the 'build' file)." + + COMP_UPDATE_DATA_NAME="Download packages" + COMP_UPDATE_DATA_DESC="Downloads packages needed for the CustomBuild script (does not include versions.txt file or the 'build' file)." + + COMP_PHP_EXPERT_NAME="Install specified PHP version" + COMP_PHP_EXPERT_DESC="Installs specified PHP version, but does not apply any automatic configuration to it." + + COMP_PHP_HTSCANNER2_NAME="Build php_htscanner2" + COMP_PHP_HTSCANNER2_DESC="Install/update php_htscanner2 component used by Apache and PHP." + + COMP_TODOVECOT_NAME="Convert mbox to Maildir" + COMP_TODOVECOT_DESC="Converts all emails from mbox format to Maildir. todovecot() function is called." + + COMP_SET_SERVICE_NAME="Service autostart" + COMP_SET_SERVICE_DESC="Calls set_setvice function with specified ON|OFF|delete values." +} + +generateHelpJSON() { + initJSONVars + echo "{" + if [ "${1}" != "" ]; then + NUM_OF_SECTIONS=1 + HELP_SECTIONS=`echo ${1} | tr "[a-z]" "[A-Z]"` + else + NUM_OF_SECTIONS=`echo ${HELP_SECTIONS} | wc -w` + fi + CUR_SECTION=0 + for section in ${HELP_SECTIONS}; do + CUR_SECTION=`expr ${CUR_SECTION} + 1` + LOWERCASE_SECTION=`echo $section | tr "[A-Z]" "[a-z]"` + SECTION_DESC=${section}_DESC + SECTION_SET=${section}_SET + NUM_OF_SETTINGS=`echo "$(eval_var ${SECTION_SET})" | wc -w` + CUR_SETTING=0 + SKIP_CAT="no" + for skip_cat_opt in ${HELP_SECTIONS_JSON_SKIP}; do + if [ "${section}" = "${skip_cat_opt}" ]; then + SKIP_CAT="yes" + break + fi + done + printf "\t\"${LOWERCASE_SECTION}\": {\n" + printf "\t\t\"description\": \"$(eval_var ${SECTION_DESC})\",\n" + printf "\t\t\"skip\": \"${SKIP_CAT}\",\n" + for setting in $(eval_var ${SECTION_SET}); do + CUR_SETTING=`expr ${CUR_SETTING} + 1` + SETTING_UP=`echo $setting | tr "[a-z]" "[A-Z]"` + + BUILD_NAME="COMP_${SETTING_UP}_NAME" + DESCRIPTION="COMP_${SETTING_UP}_DESC" + VER_VAR="COMP_${SETTING_UP}_VER" + SKIP_VAR="${section}_SKIP" + SKIP="no" + + for skip_opt in $(eval_var ${SKIP_VAR}); do + if [ "${setting}" = "${skip_opt}" ]; then + SKIP="yes" + break + fi + done + + printf "\t\t\"${setting}\": {\n" + printf "\t\t\t\"build\": \"${setting}\",\n" + VERSION_STRING="$(eval_var ${VER_VAR})" + if [ "${section}" = "BUILD_COMP" ] || [ "${section}" = "BUILD_PHP_EXT" ] || [ "${section}" = "BUILD_COMP_WEBAPPS" ]; then + if [ "${VERSION_STRING}" = "Version 0." ]; then + SKIP="yes" + fi + fi + printf "\t\t\t\"skip\": \"${SKIP}\",\n" + printf "\t\t\t\"name\": \"$(eval_var ${BUILD_NAME})\",\n" + if [ "${section}" = "BUILD_COMP" ] || [ "${section}" = "BUILD_PHP_EXT" ] || [ "${section}" = "BUILD_COMP_WEBAPPS" ]; then + if [ "${VERSION_STRING}" != "Version ." ]; then + printf "\t\t\t\"version\": \"$(eval_var ${VER_VAR})\"\n", + fi + fi + printf "\t\t\t\"description\": \"$(eval_var ${DESCRIPTION})\"\n" + if [ ${CUR_SETTING} -ne ${NUM_OF_SETTINGS} ]; then + printf "\t\t},\n" + else + printf "\t\t}\n" + fi + done + if [ ${CUR_SECTION} -ne ${NUM_OF_SECTIONS} ]; then + printf "\t},\n" + else + printf "\t}\n" + fi + done + echo "}" +} + +################################################### + +showHelp() { + printf " +%-55s+\n" "-----------------------------------------------------------" + printf " | %-55s %-2s|\n" "DirectAdmin WebServices Installer" + printf " | %-55s %-2s|\n" "Written by Martynas Bendorius and DirectAdmin" + printf " | %-55s %-2s|\n" "Version: $(showVersion)" + printf " +%-55s+\n" "-----------------------------------------------------------" + printf " | %-55s %-2s|\n" "To build everything run:" + printf " | %-55s %-2s|\n" " $0 all" + printf " | %-55s %-2s|\n" "" + printf " | %-55s %-2s|\n" " ${boldon}NOTE${boldoff}: Command all will compile everything as it is set" + printf " | %-55s %-2s|\n" " in the options.conf file, please take a look at" + printf " | %-55s %-2s|\n" " \"$0 options\"!" + generateHelp + printf " +%-55s+\n" "-----------------------------------------------------------" + printf " | %-55s %-2s|\n" "You can pass a 2nd argument to automate the input:" + printf " | %-55s %-2s|\n" " $0 d : do the default action" + printf " | %-55s %-2s|\n" " $0 y : answer yes to all questions" + printf " | %-55s %-2s|\n" " $0 n : answer no to all questions" + printf " +%-55s+\n" "-----------------------------------------------------------" +} + +checkFile() { + if [ ! -s $1 ]; then + echo "*** Cannot find $1. Aborting ***" + do_exit 0 + else + echo "Found $1" + fi +} + +quitIfLocked() { + if [ -e ${LOCKFILE} ]; then + PID="`cat ${LOCKFILE}`" + echo "Another instance of custombuild is running (lockfile: ${LOCKFILE}, PID ${PID})." + if [ "$1" != "" ]; then + echo "Executing: $1" + fi + do_exit 1 "" + else + trap "rm -f ${LOCKFILE}; kill_childs; exit" INT TERM EXIT + echo $$ > ${LOCKFILE} + fi +} + +#################################################### + +get_webmail_link() { + WL=roundcube + if [ "$ROUNDCUBE_OPT" = "no" ]; then + WL=squirrelmail + fi + if [ -s ${DACONF_FILE} ] && [ -s /usr/local/directadmin/directadmin ]; then + WL=`/usr/local/directadmin/directadmin c | grep -m1 '^webmail_link' | cut -d= -f2` + fi + + echo "${WL}" +} + +doPasswdServerStatus() { + if [ -e /var/www/html/passwd-server-status ]; then + rm -f /var/www/html/passwd-server-status + fi + touch /var/www/passwd-server-status + chown apache:apache /var/www/passwd-server-status + chmod 640 /var/www/passwd-server-status + if command -v htpasswd > /dev/null; then + if grep -q da_admin /var/www/passwd-server-status; then + sed -i '/da_admin/d' /var/www/passwd-server-status + fi + RANDOM_HTPASSWD_USER=`random_pass` + RANDOM_HTPASSWD_PASS=`random_pass` + htpasswd -b -c /var/www/passwd-server-status "${RANDOM_HTPASSWD_USER}" "${RANDOM_HTPASSWD_PASS}" >/dev/null 2>&1 + echo "#Authenticate using:" >> /etc/httpd/conf/extra/httpd-info.conf + echo "#Username: ${RANDOM_HTPASSWD_USER}" >> /etc/httpd/conf/extra/httpd-info.conf + echo "#Password: ${RANDOM_HTPASSWD_PASS}" >> /etc/httpd/conf/extra/httpd-info.conf + fi +} + +#################################################### + +doApacheHostConf() { + HOSTCONF=${HTTPDCONF}/extra/httpd-hostname.conf + if [ -e ${WORKDIR}/custom/ap2/conf/extra/httpd-hostname.conf ]; then + cp -pf ${WORKDIR}/custom/ap2/conf/extra/httpd-hostname.conf ${HOSTCONF} + else + echo -n '' > ${HOSTCONF} + + if [ "${HAVE_FPM_CGI}" = "yes" ]; then + echo 'SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1' >> ${HOSTCONF} + fi + + echo '' >> ${HOSTCONF} + + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + echo '' >> ${HOSTCONF} + echo "AddHandler \"proxy:unix:/usr/local/php${PHP1_SHORTRELEASE}/sockets/webapps.sock|fcgi://localhost\" .inc .php .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${HOSTCONF} + echo '' >> ${HOSTCONF} + fi + if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then + echo '' >> ${HOSTCONF} + echo "AddHandler application/x-httpd-php .php" >> ${HOSTCONF} + echo '' >> ${HOSTCONF} + fi + + echo ' Options +SymLinksIfOwnerMatch +IncludesNoExec -Indexes' >> ${HOSTCONF} + echo ' AllowOverride AuthConfig FileInfo Indexes Limit Options=Includes,IncludesNOEXEC,Indexes,ExecCGI,MultiViews,SymLinksIfOwnerMatch,None' >> ${HOSTCONF} + echo ' AllowMethods reset' >> ${HOSTCONF} + echo '' >> ${HOSTCONF} + echo ' Require all granted' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo ' suPHP_Engine On' >> ${HOSTCONF} + echo ' suPHP_UserGroup webapps webapps' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo ' RUidGid webapps webapps' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo ' lsapi_user_group webapps webapps' >> ${HOSTCONF} + echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF} + echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + + if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then + echo ' ' >> ${HOSTCONF} + echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF} + echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF} + echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF} + echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + fi + + ensure_webapps_tmp + + WEBAPPS_FCGID_DIR=/var/www/fcgid + SUEXEC_PER_DIR="0" + if [ -s /usr/sbin/suexec ]; then + SUEXEC_PER_DIR="`/usr/sbin/suexec -V 2>&1 | grep -c 'AP_PER_DIR'`" + fi + if [ "${PHP1_MODE_OPT}" = "fastcgi" ]; then + echo ' ' >> ${HOSTCONF} + echo " FcgidWrapper /usr/local/safe-bin/fcgid${PHP1_SHORTRELEASE}.sh .php" >> ${HOSTCONF} + if [ "${SUEXEC_PER_DIR}" -gt 0 ]; then + echo ' SuexecUserGroup webapps webapps' >> ${HOSTCONF} + fi + echo ' ' >> ${HOSTCONF} + echo ' Options +ExecCGI' >> ${HOSTCONF} + echo ' AddHandler fcgid-script .php' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + echo ' ' >> ${HOSTCONF} + fi + + echo '' >> ${HOSTCONF} + + # Do not show authentication logs for public + echo '' >> ${HOSTCONF} + echo ' Require all denied' >> ${HOSTCONF} + echo '' >> ${HOSTCONF} + fi +} + +options() { + if [ "${UNIT_OPT}" = "yes" ]; then + echo "Nginx Unit: ${boldon}${UNIT_VER}${boldoff}" + else + echo "Nginx Unit: ${boldon}no${boldoff}" + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Apache: ${boldon}${APACHE2_VER}${boldoff}" + elif [ "${WEBSERVER_OPT}" = "nginx" ]; then + echo "Nginx: ${boldon}${NGINX_VER}${boldoff}" + fi + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Nginx (reverse proxy): ${boldon}${NGINX_VER}${boldoff}" + fi + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + echo "Litespeed: ${boldon}${LITESPEED_VER}${boldoff}" + fi + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + echo "OpenLitespeed: ${boldon}${OPENLITESPEED_VER}${boldoff}" + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "mod_lsapi: ${boldon}${MOD_LSAPI_VER}${boldoff}" + echo "mod_hostinglimits: ${boldon}${MOD_HOSTINGLIMITS_VER}${boldoff}" + echo "mod_proctitle: ${boldon}${MOD_PROCTITLE_VER}${boldoff}" + fi + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + echo "mod_ruid2: ${boldon}${MOD_RUID2_VER}${boldoff}" + else + echo "mod_ruid2: ${boldon}no${boldoff}" + fi + fi + + if [ "${WEBSERVER_OPT}" = "apache" ]; then + if [ "${MODSECURITY_OPT}" = "yes" ]; then + echo "ModSecurity: ${boldon}${MODSECURITY_VER}${boldoff}" + echo "ModSecurity Rule Set: ${boldon}${MODSECURITY_RULESET_OPT}${boldoff}" + else + echo "ModSecurity: ${boldon}no${boldoff}" + fi + fi + + if [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "nginx" ]; then + if [ "${MODSECURITY_OPT}" = "yes" ]; then + echo "LibModSecurity: ${boldon}${LIBMODSECURITY_VER}${boldoff}" + echo "LibModSecurity Rule Set: ${boldon}${MODSECURITY_RULESET_OPT}${boldoff}" + else + echo "LibModSecurity: ${boldon}no${boldoff}" + fi + fi + + if [ "${HAVE_CLI}" = "no" ] && [ "${PHP1_MODE_OPT}" != "lsphp" ]; then + if [ "${HTSCANNER_OPT}" = "yes" ]; then + echo "htscanner: ${boldon}${HTSCANNER_VER}${boldoff}" + else + echo "htscanner: ${boldon}no${boldoff}" + fi + fi + + if [ "${DOVECOT_OPT}" = "yes" ]; then + echo "Dovecot: ${boldon}${DOVECOT_VER}${boldoff}" + else + echo "Dovecot: ${boldon}no${boldoff}" + fi + + echo "Dovecot configuration: ${boldon}${DOVECOT_CONF_OPT}${boldoff}" + + if [ "${AWSTATS_OPT}" = "yes" ]; then + echo "AWstats: ${boldon}${AWSTATS_VER}${boldoff}" + else + echo "AWstats: ${boldon}no${boldoff}" + fi + + if [ "${EXIM_OPT}" = "yes" ]; then + echo "Exim: ${boldon}${EXIM_VER}${boldoff}" + else + echo "Exim: ${boldon}no${boldoff}" + fi + + if [ "${EXIMCONF_OPT}" = "yes" ]; then + echo "exim.conf update: ${boldon}${EXIMCONF_OPT}, release ${EXIMCONF_RELEASE_OPT}${boldoff}" + else + echo "exim.conf update: ${boldon}${EXIMCONF_OPT}${boldoff}" + fi + + echo "BlockCracking: ${boldon}${BLOCKCRACKING_OPT}${boldoff}" + + echo "Easy Spam Fighter: ${boldon}${EASY_SPAM_FIGHTER_OPT}${boldoff}" + + if [ "${SPAMD_OPT}" = "spamassassin" ]; then + echo "SpamAssassin: ${boldon}${SPAMASSASSIN_VER}${boldoff}" + echo "SpamAssassin rule updates: ${boldon}${SA_UPDATE_OPT}${boldoff}" + elif [ "${SPAMD_OPT}" = "rspamd" ]; then + echo "Rspamd: ${boldon}${RSPAMD_VER}${boldoff}" + else + echo "SpamAssassin: ${boldon}no${boldoff}" + fi + + if [ "${CLAMAV_OPT}" = "yes" ]; then + echo "ClamAV: ${boldon}${CLAMAV_VER}${boldoff}" + else + echo "ClamAV: ${boldon}no${boldoff}" + fi + + if [ "${MYSQL_INST_OPT}" != "no" ]; then + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + echo "${MYSQLNAME}: ${boldon}${MYSQL_VER}${boldoff}" + else + echo "${MYSQLNAME}: ${boldon}${MARIADB_VER}${boldoff}" + fi + else + echo "${MYSQLNAME}: ${boldon}no${boldoff}" + fi + + echo "MySQL backup: ${boldon}${MYSQL_BACKUP_OPT}${boldoff}" + + if [ "${MYSQL_BACKUP_OPT}" = "yes" ]; then + echo "MySQL backup directory: ${boldon}${MYSQL_BACKUP_DIR_OPT}${boldoff}" + + echo "MySQL compress backups: ${boldon}${MYSQL_BACKUP_GZIP_OPT}${boldoff}" + fi + + echo "PHP (default): ${boldon}${PHP1_RELEASE_OPT}${boldoff} as ${boldon}${PHP1_MODE_OPT}${boldoff}" + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + echo "PHP (additional): ${boldon}${PHP2_RELEASE_OPT}${boldoff} as ${boldon}${PHP2_MODE_OPT}${boldoff}" + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + echo "PHP (additional, 3rd): ${boldon}${PHP3_RELEASE_OPT}${boldoff} as ${boldon}${PHP3_MODE_OPT}${boldoff}" + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + echo "PHP (additional, 4th): ${boldon}${PHP4_RELEASE_OPT}${boldoff} as ${boldon}${PHP4_MODE_OPT}${boldoff}" + fi + + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + echo "phpMyAdmin: ${boldon}${PHPMYADMIN_VER}${boldoff}" + else + echo "phpMyAdmin: ${boldon}no${boldoff}" + fi + + if [ "${FTPD_OPT}" = "proftpd" ]; then + echo "ProFTPD: ${boldon}${PROFTPD_VER}${boldoff}" + else + echo "ProFTPD: ${boldon}no${boldoff}" + fi + + if [ "${FTPD_OPT}" = "pureftpd" ]; then + echo "Pure-FTPd: ${boldon}${PUREFTPD_VER}${boldoff}" + else + echo "Pure-FTPd: ${boldon}no${boldoff}" + fi + + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube webmail: ${boldon}${ROUNDCUBE_VER}${boldoff}" + else + echo "RoundCube webmail: ${boldon}no${boldoff}" + fi + + if [ "${WEBAPPS_INBBOX_PREFIX_OPT}" = "yes" ]; then + echo "Webapps using .INBOX prefix for IMAP folders: ${boldon}${WEBAPPS_INBBOX_PREFIX_OPT}${boldoff}" + fi + + echo "Replace \"php.ini\" with '$0 all' and '$0 php_ini': ${boldon}${PHP_INI_OPT}${boldoff}" + + if [ "${PHP_INI_OPT}" = "yes" ]; then + echo "Replace \"php.ini\" using type: ${boldon}${PHP_INI_TYPE_OPT}${boldoff}" + fi + + if [ "${CRON_OPT}" = "yes" ]; then + echo "Cron for notifications and (or) updates: ${boldon}yes${boldoff}" + echo "Cron frequency: ${boldon}${CRON_FREQUENCY_OPT}${boldoff}" + if [ "${NOTIFICATIONS_OPT}" = "yes" ]; then + echo "Auto notifications: ${boldon}yes${boldoff}" + echo "Auto notifications email address: ${boldon}${EMAIL_OPT}${boldoff}" + fi + if [ "${UPDATES_OPT}" = "yes" ]; then + echo "Auto updates: ${boldon}yes${boldoff}" + fi + else + echo "Auto updates/notifications: ${boldon}no${boldoff}" + fi + + echo "Run \"clean\" every time: ${boldon}${CLEAN_OPT}${boldoff}" + echo "Run \"clean_old_webapps\" every time: ${boldon}${CLEAN_OLD_WEBAPPS_OPT}${boldoff}" + echo "Run \"clean_old_tarballs\" every time: ${boldon}${CLEAN_OLD_TARBALLS_OPT}${boldoff}" + + echo "Show texts in bold: ${boldon}${BOLD_OPT}${boldoff}" + + if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then + echo "SquirrelMail: ${boldon}${SQUIRRELMAIL_VER}${boldoff}" + else + echo "SquirrelMail: ${boldon}no${boldoff}" + fi + + if [ "${ZEND_OPT}" = "yes" ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Zend Guard Loader: ${boldon}not supported on FreeBSD${boldoff}" + else + echo "Zend Guard Loader: ${boldon}yes${boldoff}" + fi + else + echo "Zend Guard Loader: ${boldon}no${boldoff}" + fi + + if [ "${IONCUBE_OPT}" = "yes" ]; then + echo "ionCube loader: ${boldon}${IONCUBE_VER}${boldoff}" + else + echo "ionCube loader: ${boldon}no${boldoff}" + fi + + if [ "${SUHOSIN_OPT}" = "yes" ] && [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ]; then + echo "Suhosin (with PHP upload scan script): ${boldon}${SUHOSIN_VER}${boldoff}" + elif [ "${SUHOSIN_OPT}" = "yes" ] && [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "no" ]; then + echo "Suhosin: ${boldon}${SUHOSIN_VER}${boldoff}" + else + echo "Suhosin: ${boldon}no${boldoff}" + fi +} + +#################################################### + +option_set_valid_php() { + #Used in create_options() + if [ -z $2 ]; then + if [ ! -z "$3" ]; then + OPTION_VALUE="${3}" + else + echo "Two arguments must be given for the function" + return + fi + else + OPTION_VALUE="${2}" + fi + VAR=`echo $1 | tr "[a-z]" "[A-Z]"` + + if [ -z "$(eval_var PHP_${VAR}_SET)" ]; then + echo "${1} is not a valid option." + return + fi + + VALID="no" + for i in $(eval_var PHP_${VAR}_SET); do + if [ "${i}" = "${OPTION_VALUE}" ] || [ "${i}" = "userinput" ]; then + VALID="yes" + break + fi + done + if [ "${VALID}" = "yes" ]; then + setPhpOpt $1 ${OPTION_VALUE} + else + echo "${boldon}Invalid selection, please enter the selection again.${boldoff}" + fi + echo "" +} + +option_set_valid() { + #Used in create_options() + if [ -z "$2" ]; then + if [ ! -z "$3" ]; then + OPTION_VALUE="${3}" + else + echo "Two arguments must be given for the function" + return + fi + else + OPTION_VALUE="${2}" + fi + VAR=`echo $1 | tr "[a-z]" "[A-Z]"` + + if [ -z "$(eval_var ${VAR}_SET)" ]; then + echo "${1} is not a valid option." + return + fi + + VALID="no" + for i in $(eval_var ${VAR}_SET); do + if [ "${i}" = "${OPTION_VALUE}" ] || [ "${i}" = "userinput" ]; then + VALID="yes" + break + fi + done + if [ "${VALID}" = "yes" ]; then + setOpt $1 ${OPTION_VALUE} + else + echo "${boldon}Invalid selection, please enter the selection again.${boldoff}" + fi + echo "" +} + +create_options() { + HIDE_CHANGES=1 + + if [ $# -eq 1 ]; then + INPUT_VALUE=$1 + fi + + if [ -s ${OPTIONS_CONF} ] && [ "${OPTIONS_CONF_EXISTS}" = "1" ]; then + echo -n "Would you like to backup the current options.conf? (yes/no, default: yes): " + read do_opt_backup + until [ "${do_opt_backup}" = "yes" ] || [ "${do_opt_backup}" = "no" ] || [ -z "${do_opt_backup}" ]; do + echo -n "Please enter 'yes', 'no' or click 'enter' for default: " + read do_opt_backup + done + if [ -z "${do_opt_backup}" ]; then + do_opt_backup="yes" + fi + + if [ "${do_opt_backup}" = "yes" ]; then + cp -f ${OPTIONS_CONF} ${OPTIONS_CONF}.`date +%Y%m%d%I%M%S`.backup + echo "Backup created: ${OPTIONS_CONF}.`date +%Y%m%d%I%M%S`.backup" + fi + echo "" + fi + + echo -n "Would you like the default settings of ${WEBSERVER_OPT} and php ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT}? (yes/no, default: yes):" + read cb_defaults + until [ "${cb_defaults}" = "yes" ] || [ "${cb_defaults}" = "no" ] || [ -z "${cb_defaults}" ]; do + echo -n "Please enter 'yes' or 'no': " + read cb_defaults + done + if [ -z "${cb_defaults}" ]; then + cb_defaults="yes" + fi + + if [ "${cb_defaults}" != "yes" ]; then + QUESTION_SET="`echo ${WEBSERVER_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select webserver you would like to use (${QUESTION_SET}, default: ${WEBSERVER_DEF}):" + read option_answer + option_set_valid webserver "${option_answer}" "${WEBSERVER_DEF}" + done + + if [ -e /etc/redhat-release ]; then + if grep -q CloudLinux /etc/redhat-release; then + echo -n "Would you like to enable CloudLinux in CustomBuild? (yes/no, default: yes): " + read clopt + until [ "${clopt}" = "yes" ] || [ "${clopt}" = "no" ] || [ -z "${do_opt_backup}" ]; do + echo -n "Please enter 'yes' or 'no': " + read clopt + done + if [ -z "${clopt}" ]; then + clopt="yes" + fi + setOpt cloudlinux "${clopt}" + echo "" + fi + fi + + QUESTION_SET="`echo ${MYSQL_INST_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select MySQL database server you would like to use (${QUESTION_SET}, default: ${MYSQL_INST_DEF}):" + read option_answer + option_set_valid mysql_inst "${option_answer}" "${MYSQL_INST_DEF}" + done + + MYSQL_INST_ANSWER=${option_answer} + if [ -z "${MYSQL_INST_ANSWER}" ]; then + MYSQL_INST_ANSWER=${MYSQL_INST_DEF} + fi + + if [ "${MYSQL_INST_ANSWER}" != "no" ]; then + if [ "${MYSQL_INST_ANSWER}" = "mysql" ]; then + QUESTION_SET="`echo ${MYSQL_SET} | tr ' ' '/'`" + QUESTION_DEF="${MYSQL_DEF}" + else + QUESTION_SET="`echo ${MARIADB_SET} | tr ' ' '/'`" + QUESTION_DEF="${MARIADB_DEF}" + fi + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select ${MYSQL_INST_ANSWER} version you would like to use (${QUESTION_SET}, default: ${QUESTION_DEF}):" + read option_answer + option_set_valid ${MYSQL_INST_ANSWER} "${option_answer}" "${QUESTION_DEF}" + done + fi + + QUESTION_SET="`echo ${FTPD_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select FTP server you would like to use (${QUESTION_SET}, ${FTPD_DEF}):" + read option_answer + option_set_valid ftpd "${option_answer}" "${FTPD_DEF}" + done + + QUESTION_SET="`echo ${PHP1_RELEASE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select default PHP version you would like to use (${QUESTION_SET}, default: ${PHP1_RELEASE_DEF}):" + read option_answer + option_set_valid php1_release "${option_answer}" "${PHP1_RELEASE_DEF}" + done + + DEFPHP_ANSWER="no" + QUESTION_SET="`echo ${PHP1_MODE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select default PHP mode you would like to use (${QUESTION_SET}, default: ${PHP1_MODE_DEF}):" + read option_answer + option_set_valid php1_mode "${option_answer}" "${PHP1_MODE_DEF}" + done + DEFPHP_ANSWER=${option_answer} + + if [ -z "${DEFPHP_ANSWER}" ]; then + DEFPHP_ANSWER="${PHP1_MODE_DEF}" + fi + + echo -n "Would you like to have a second instance of PHP installed? (yes/no, default: no): " + read wantsec + until [ "${wantsec}" = "yes" ] || [ "${wantsec}" = "no" ] || [ -z "${wantsec}" ]; do + echo -n "Please enter 'yes' or 'no': " + read wantsec + if [ -z "${wantsec}" ]; then + wantsec="no" + fi + done + echo "" + + if [ "${wantsec}" = "yes" ]; then + #PHP1_RELEASE_SET is not a bug here :) It's set not to display "no" as an option, because the previous question already asks if anyone would like to have a 2nd version of PHP + QUESTION_SET="`echo ${PHP1_RELEASE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select additional PHP version you would like to use (${QUESTION_SET}):" + read option_answer + option_set_valid php2_release ${option_answer} + done + + QUESTION_SET="`echo ${PHP2_MODE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select additional PHP mode you would like to use (${QUESTION_SET}, default: ${PHP1_MODE_DEF}):" + read option_answer + option_set_valid php2_mode "${option_answer}" "${PHP1_MODE_DEF}" + done + + echo -n "Would you like to have a third instance of PHP installed? (yes/no, default: no): " + read wantthird + until [ "${wantthird}" = "yes" ] || [ "${wantthird}" = "no" ] || [ -z "${wantthird}" ]; do + echo -n "Please enter 'yes' or 'no': " + read wantthird + if [ -z "${wantthird}" ]; then + wantthird="no" + fi + done + echo "" + + if [ "${wantthird}" = "yes" ]; then + #PHP1_RELEASE_SET is not a bug here :) It's set not to display "no" as an option, because the previous question already asks if anyone would like to have a 2nd version of PHP + QUESTION_SET="`echo ${PHP1_RELEASE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select additional PHP version you would like to use (${QUESTION_SET}):" + read option_answer + option_set_valid php3_release ${option_answer} + done + + QUESTION_SET="`echo ${PHP3_MODE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select additional PHP mode you would like to use (${QUESTION_SET}, default: ${PHP1_MODE_DEF}):" + read option_answer + option_set_valid php3_mode "${option_answer}" "${PHP1_MODE_DEF}" + done + + echo -n "Would you like to have a fourth instance of PHP installed? (yes/no, default: no): " + read wantfourth + until [ "${wantfourth}" = "yes" ] || [ "${wantfourth}" = "no" ] || [ -z "${wantfourth}" ]; do + echo -n "Please enter 'yes' or 'no': " + read wantfourth + if [ -z "${wantfourth}" ]; then + wantfourth="no" + fi + done + echo "" + + if [ "${wantfourth}" = "yes" ]; then + #PHP1_RELEASE_SET is not a bug here :) It's set not to display "no" as an option, because the previous question already asks if anyone would like to have a 2nd version of PHP + QUESTION_SET="`echo ${PHP1_RELEASE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select additional PHP version you would like to use (${QUESTION_SET}):" + read option_answer + option_set_valid php4_release ${option_answer} + done + + QUESTION_SET="`echo ${PHP4_MODE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select additional PHP mode you would like to use (${QUESTION_SET}, default: ${PHP1_MODE_DEF}):" + read option_answer + option_set_valid php4_mode "${option_answer}" "${PHP1_MODE_DEF}" + done + fi + fi + fi + + if [ "${OS}" != "FreeBSD" ] && [ "${DEFPHP_ANSWER}" = "mod_php" ]; then + QUESTION_SET="`echo ${MOD_RUID2_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like to use mod_ruid2 (${QUESTION_SET}, default: ${MOD_RUID2_DEF}):" + read option_answer + option_set_valid mod_ruid2 "${option_answer}" "${MOD_RUID2_DEF}" + done + else + setOpt mod_ruid2 no + fi + + QUESTION_SET="`echo ${PHP_IONCUBE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like to use ionCube (${QUESTION_SET}, default: ${PHP_IONCUBE_DEF}):" + read option_answer + option_set_valid_php ioncube "${option_answer}" "${PHP_IONCUBE_DEF}" + done + + QUESTION_SET="`echo ${PHP_OPCACHE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like to use opCache (${QUESTION_SET}, default: ${PHP_OPCACHE_DEF}):" + read option_answer + option_set_valid_php opcache "${option_answer}" "${PHP_OPCACHE_DEF}" + done + + #EOL, not very useful question + #QUESTION_SET="`echo ${PHP_ZEND_SET} | tr ' ' '/'`" + #VALID="no" + #until [ "${VALID}" = "yes" ]; do + # echo -n "Please select if you would like to use Zend Guard Loader (${QUESTION_SET}, default: ${PHP_ZEND_DEF}):" + # read option_answer + # option_set_valid_php zend "${option_answer}" "${PHP_ZEND_DEF}" + #done + + QUESTION_SET="`echo ${PHP_ZEND_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like to use Zend Guard Loader (${QUESTION_SET}, default: ${PHP_ZEND_DEF}):" + read option_answer + option_set_valid_php zend "${option_answer}" "${PHP_ZEND_DEF}" + done + + QUESTION_SET="`echo ${EXIM_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like CustomBuild to manage Exim installation (${QUESTION_SET}, default: ${EXIM_DEF}):" + read option_answer + option_set_valid exim "${option_answer}" "${EXIM_DEF}" + done + + QUESTION_SET="`echo ${DOVECOT_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like CustomBuild to manage Dovecot installation (${QUESTION_SET}, default: ${DOVECOT_DEF}):" + read option_answer + option_set_valid dovecot "${option_answer}" "${DOVECOT_DEF}" + done + + QUESTION_SET="`echo ${PHPMYADMIN_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like CustomBuild to manage phpMyAdmin installation (${QUESTION_SET}, default: ${PHPMYADMIN_DEF}):" + read option_answer + option_set_valid phpmyadmin "${option_answer}" "${PHPMYADMIN_DEF}" + done + + QUESTION_SET="`echo ${SQUIRRELMAIL_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like CustomBuild to manage SquirrelMail installation (${QUESTION_SET}, default: ${SQUIRRELMAIL_DEF}):" + read option_answer + option_set_valid squirrelmail "${option_answer}" "${SQUIRRELMAIL_DEF}" + done + + QUESTION_SET="`echo ${ROUNDCUBE_SET} | tr ' ' '/'`" + VALID="no" + until [ "${VALID}" = "yes" ]; do + echo -n "Please select if you would like CustomBuild to manage RoundCube installation (${QUESTION_SET}, default: ${ROUNDCUBE_DEF}):" + read option_answer + option_set_valid roundcube "${option_answer}" "${ROUNDCUBE_DEF}" + done + fi +} + +#################################################### + +used_configs() { + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Apache configuration file: ${WORKDIR}/${APACHE2_CONFIGURE}" + fi + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + echo "Nginx configuration file: ${WORKDIR}/${NGINX_CONFIGURE}" + fi + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Nginx (reverse proxy) configuration file: ${WORKDIR}/${NGINX_CONFIGURE}" + fi + + PHP_INI_VAR=PHP_INI_FPM${PHP1_SHORTRELEASE} + echo "PHP (default) php.ini file: $(eval_var ${PHP_INI_VAR})" + + if [ "${PHP2_MODE_OPT}" != "mod_php" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + PHP_INI_VAR=PHP_INI_FPM${PHP2_SHORTRELEASE} + echo "PHP (additional) php.ini file: $(eval_var ${PHP_INI_VAR})" + fi + + if [ "${PHP3_MODE_OPT}" != "mod_php" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + PHP_INI_VAR=PHP_INI_FPM${PHP3_SHORTRELEASE} + echo "PHP (additional, 3rd) php.ini file: $(eval_var ${PHP_INI_VAR})" + fi + + if [ "${PHP4_MODE_OPT}" != "mod_php" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + PHP_INI_VAR=PHP_INI_FPM${PHP4_SHORTRELEASE} + echo "PHP (additional, 4th) php.ini file: $(eval_var ${PHP_INI_VAR})" + fi + + if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then + CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE + echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE_FPM + echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP1_MODE_OPT}" = "suphp" ] || [ "${PHP2_MODE_OPT}" = "suphp" ]; then + echo "suPHP configuration file: ${WORKDIR}/${SUPHP_CONFIGURE}" + fi + + if [ "${PHP1_MODE_OPT}" = "suphp" ]; then + echo "suPHP configuration file: ${WORKDIR}/${SUPHP_CONFIGURE}" + CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE_SUPHP + echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP1_MODE_OPT}" = "fastcgi" ]; then + CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE_FCGI + echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE_LSPHP + echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP2_MODE_OPT}" = "lsphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE_LSPHP + echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP2_MODE_OPT}" = "suphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE_SUPHP + echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP2_MODE_OPT}" = "fastcgi" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE_FCGI + echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP2_MODE_OPT}" = "mod_php" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE + echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE_FPM + echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP3_MODE_OPT}" = "lsphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE_LSPHP + echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP3_MODE_OPT}" = "suphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE_SUPHP + echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP3_MODE_OPT}" = "fastcgi" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE_FCGI + echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP3_MODE_OPT}" = "mod_php" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE + echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE_FPM + echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP4_MODE_OPT}" = "lsphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE_LSPHP + echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP4_MODE_OPT}" = "suphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE_SUPHP + echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP4_MODE_OPT}" = "fastcgi" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE_FCGI + echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP4_MODE_OPT}" = "mod_php" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE + echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE_FPM + echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})" + fi + + if [ "${FTPD_OPT}" = "proftpd" ]; then + echo "ProFTPD configuration file: ${WORKDIR}/${PROFTPD_CONFIGURE}" + fi + + if [ "${FTPD_OPT}" = "pureftpd" ]; then + echo "PureFTPD configuration file: ${WORKDIR}/${PUREFTPD_CONFIGURE}" + fi + + if [ "${IMAGICK_OPT}" = "yes" ]; then + echo "ImageMagick configuration file: ${WORKDIR}/${IMAGEMAGICK_CONFIGURE}" + fi + + if [ "${EXIM_OPT}" = "yes" ]; then + echo -n "Exim Makefile: " + if [ "${EXIM_MAKEFILE}" != "" ]; then + echo "${EXIM_MAKEFILE}" + else + echo "${WEBPATH}/Makefile" + fi + fi + + if [ "${DOVECOT_OPT}" = "yes" ]; then + echo "Dovecot configuration file: ${WORKDIR}/${DOVECOT_CONFIGURE}" + fi + + if [ -d ${PMA_THEMES} ]; then + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + echo "phpMyAdmin themes directory: ${PMA_THEMES}" + fi + fi + + if [ -e ${PMA_MAIN_CONFIG} ]; then + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + echo "phpMyAdmin configuration file: ${PMA_MAIN_CONFIG}" + fi + fi + + if [ -e ${PMA_HTACCESS} ]; then + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + echo "phpMyAdmin .htaccess file: ${PMA_HTACCESS}" + fi + fi + + if [ -e ${PMA_USER_INI} ]; then + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + echo "phpMyAdmin .user.ini file: ${PMA_USER_INI}" + fi + fi + + if [ -e ${SQUIRREL_CONFIG} ]; then + if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then + echo "SquirrelMail configuration file: ${SQUIRREL_CONFIG}" + fi + fi + + if [ -e ${ROUNDCUBE_CONFIG} ]; then + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube webmail configuration file: ${ROUNDCUBE_CONFIG}" + fi + fi + + if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube webmail database configuration file: ${ROUNDCUBE_CONFIG_DB}" + fi + fi + + if [ -e ${ROUNDCUBE_HTACCESS} ]; then + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube .htaccess file: ${ROUNDCUBE_HTACCESS}" + fi + fi + + if [ -e ${ROUNDCUBE_COMPOSER} ]; then + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube composer.json file: ${ROUNDCUBE_COMPOSER}" + fi + fi + + if [ -d ${ROUNDCUBE_PLUGINS} ]; then + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube webmail plugins overwrite directory: ${ROUNDCUBE_PLUGINS}" + fi + fi + + if [ -d ${ROUNDCUBE_SKINS} ]; then + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube webmail skins overwrite directory: ${ROUNDCUBE_SKINS}" + fi + fi + + if [ -d ${ROUNDCUBE_VENDOR} ]; then + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube webmail vendor overwrite directory: ${ROUNDCUBE_VENDOR}" + fi + fi + + if [ -d ${ROUNDCUBE_PROGRAM} ]; then + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + echo "RoundCube webmail program overwrite directory: ${ROUNDCUBE_PROGRAM}" + fi + fi + +} + +#################################################### + +init_customize_write() { + PLUGIN_PATH=/usr/local/directadmin/plugins/custombuild/configure + CUSTOMIZE_AP2_WRITE=${PLUGIN_PATH}/ap2/configure.apache + CUSTOMIZE_NGINX_WRITE=${PLUGIN_PATH}/nginx/configure.nginx + CUSTOMIZE_NGINX_REVERSE_WRITE=${PLUGIN_PATH}/nginx_reverse/configure.nginx + CUSTOMIZE_PROFTPD_WRITE=${PLUGIN_PATH}/proftpd/configure.proftpd + CUSTOMIZE_PUREFTPD_WRITE=${PLUGIN_PATH}/pureftpd/configure.pureftpd + CUSTOMIZE_CLAMAV_WRITE=${PLUGIN_PATH}/clamav/configure.clamav + CUSTOMIZE_LIBXML2_WRITE=${PLUGIN_PATH}/libxml2/configure.clamav + CUSTOMIZE_LIBXSLT_WRITE=${PLUGIN_PATH}/libxslt/configure.clamav + CUSTOMIZE_SUPHP_WRITE=${PLUGIN_PATH}/suphp/configure.suphp + CUSTOMIZE_DOVECOT_WRITE=${PLUGIN_PATH}/dovecot/configure.dovecot +} + +set_versions() { + if [ "$1" = "show" ]; then + if [ -e ${VERSIONS_FILE} ]; then + if [ -e ${VERSIONS_FILE_LITESPEED} ] && [ -e ${VERSIONS_FILE_CL} ] && [ -e ${VERSIONS_FILE_CWAF} ]; then + cat ${VERSIONS_FILE_LITESPEED} ${VERSIONS_FILE_CL} ${VERSIONS_FILE_CWAF} ${VERSIONS_FILE} + elif [ -e ${VERSIONS_FILE_LITESPEED} ] && [ -e ${VERSIONS_FILE_CL} ] && [ ! -e ${VERSIONS_FILE_CWAF} ]; then + cat ${VERSIONS_FILE_LITESPEED} ${VERSIONS_FILE_CL} ${VERSIONS_FILE} + elif [ ! -e ${VERSIONS_FILE_LITESPEED} ] && [ -e ${VERSIONS_FILE_CL} ] && [ -e ${VERSIONS_FILE_CWAF} ]; then + cat ${VERSIONS_FILE_CL} ${VERSIONS_FILE_CWAF} ${VERSIONS_FILE} + elif [ -e ${VERSIONS_FILE_LITESPEED} ] && [ ! -e ${VERSIONS_FILE_CL} ] && [ -e ${VERSIONS_FILE_CWAF} ]; then + cat ${VERSIONS_FILE_LITESPEED} ${VERSIONS_FILE_CWAF} ${VERSIONS_FILE} + elif [ -e ${VERSIONS_FILE_LITESPEED} ] && [ ! -e ${VERSIONS_FILE_CL} ] && [ ! -e ${VERSIONS_FILE_CWAF} ]; then + cat ${VERSIONS_FILE_LITESPEED} ${VERSIONS_FILE} + elif [ ! -e ${VERSIONS_FILE_LITESPEED} ] && [ ! -e ${VERSIONS_FILE_CL} ] && [ -e ${VERSIONS_FILE_CWAF} ]; then + cat ${VERSIONS_FILE_CWAF} ${VERSIONS_FILE} + elif [ ! -e ${VERSIONS_FILE_LITESPEED} ] && [ -e ${VERSIONS_FILE_CL} ] && [ ! -e ${VERSIONS_FILE_CWAF} ]; then + cat ${VERSIONS_FILE_CL} ${VERSIONS_FILE} + else + cat ${VERSIONS_FILE} + fi + fi + elif [ "$1" = "show_customized" ]; then + if [ -e ${VERSIONS_FILE_CUSTOM} ]; then + cat ${VERSIONS_FILE_CUSTOM} + fi + elif [ "$1" = "remove_customized" ]; then + if [ -e ${VERSIONS_FILE_CUSTOM} ]; then + rm -f ${VERSIONS_FILE_CUSTOM} + fi + else + if [ -e /usr/local/directadmin/plugins/custombuild/configure/versions.txt ]; then + cat /usr/local/directadmin/plugins/custombuild/configure/versions.txt > ${VERSIONS_FILE_CUSTOM} + else + echo "/usr/local/directadmin/plugins/custombuild/configure/versions.txt does not exist." + fi + fi +} + +customize_config() { + if [ "${1}" = "" ]; then + do_exit 1 "First argument (component) is needed for the function to work." + fi + init_customize_write + ARGUMENT=$1 + if [ "${ARGUMENT}" = "ap2" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.apache + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_AP2_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "nginx" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.nginx + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_NGINX_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "nginx_reverse" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.nginx + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_NGINX_REVERSE_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "proftpd" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.proftpd + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_PROFTPD_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "clamav" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.clamav + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_CLAMAV_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "libxml2" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.libxml2 + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_LIBXML2_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "libxslt" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.libxslt + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_LIBXSLT_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "pureftpd" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.pureftpd + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_PUREFTPD_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "suphp" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.suphp + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_SUPHP_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "dovecot" ]; then + COMPONENT=${ARGUMENT} + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.dovecot + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${CUSTOMIZE_DOVECOT_WRITE} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ `echo ${ARGUMENT} | grep -c '^ap2_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^suphp_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^fastcgi_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^fpm_php[0-9][0-9]$'` -eq 1 ] ; then + EXTENSION=`echo ${ARGUMENT} | cut -d_ -f2` + COMPONENT=`echo ${ARGUMENT} | cut -d_ -f1` + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.${EXTENSION} + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${PLUGIN_PATH}/${COMPONENT}/configure.${EXTENSION} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ `echo ${ARGUMENT} | grep -c '^litespeed_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^litespeed_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^litespeed_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^litespeed_php[0-9][0-9]$'` -eq 1 ] ; then + EXTENSION=`echo ${ARGUMENT} | cut -d_ -f2` + COMPONENT=`echo ${ARGUMENT} | cut -d_ -f1` + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.${EXTENSION} + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${PLUGIN_PATH}/${COMPONENT}/configure.${EXTENSION} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi + if [ "${ARGUMENT}" = "fastcgi_php53" ] || [ "${ARGUMENT}" = "fastcgi_php54" ] || [ "${ARGUMENT}" = "fastcgi_php55" ] || [ "${ARGUMENT}" = "fastcgi_php56" ] || [ "${ARGUMENT}" = "fastcgi_php70" ]; then + EXTENSION=`echo ${ARGUMENT} | cut -d_ -f2` + COMPONENT=`echo ${ARGUMENT} | cut -d_ -f1` + CONF_PATH=${WORKDIR}/custom/${COMPONENT} + CONF_FILE=${CONF_PATH}/configure.${EXTENSION} + if [ ! -s ${CONF_FILE} ]; then + mkdir -p ${CONF_PATH} + touch ${CONF_FILE} + fi + cat ${PLUGIN_PATH}/${COMPONENT}/configure.${EXTENSION} > ${CONF_FILE} + chmod 700 ${CONF_FILE} + fi +} + +#################################################### +initConfigsJSON() { + NUM_OF_SECTIONS=0 + AVAIL_CONFIGS=" " + PLUGIN_PATH=/usr/local/directadmin/plugins/custombuild/configure + MOD_PHP_CONFIGURE_ENDING="_CONFIGURE" + FPM_CONFIGURE_ENDING="_CONFIGURE_FPM" + FASTCGI_CONFIGURE_ENDING="_CONFIGURE_FCGI" + SUPHP_CONFIGURE_ENDING="_CONFIGURE_SUPHP" + LSPHP_CONFIGURE_ENDING="_CONFIGURE_LSPHP" + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2 " + CUSTOMIZE_AP2_DESC="Apache configuration file" + CUSTOMIZE_AP2_READ="${WORKDIR}/${APACHE2_CONFIGURE}" + fi + + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}nginx " + CUSTOMIZE_NGINX_DESC="Nginx configuration file" + CUSTOMIZE_NGINX_READ="${WORKDIR}/${NGINX_CONFIGURE}" + fi + + if [ "${WEBSERVER_OPT}" = "nginx_reverse" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}nginx_reverse " + CUSTOMIZE_NGINX_REVERSE_DESC="Nginx (reverse proxy) configuration file" + CUSTOMIZE_NGINX_REVERSE_READ="${WORKDIR}/${NGINX_CONFIGURE}" + fi + + if [ "${DOVECOT_OPT}" = "yes" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}dovecot " + CUSTOMIZE_DOVECOT_DESC="Dovecot configuration file" + CUSTOMIZE_DOVECOT_READ="${WORKDIR}/${DOVECOT_CONFIGURE}" + fi + + if [ "${FTPD_OPT}" = "proftpd" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}proftpd " + CUSTOMIZE_PROFTPD_DESC="ProFTPd configuration file" + CUSTOMIZE_PROFTPD_READ="${WORKDIR}/${PROFTPD_CONFIGURE}" + elif [ "${FTPD_OPT}" = "pureftpd" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}pureftpd " + CUSTOMIZE_PUREFTPD_DESC="Pure-FTPd configuration file" + CUSTOMIZE_PUREFTPD_READ="${WORKDIR}/${PUREFTPD_CONFIGURE}" + fi + + if [ "${IMAGICK}" = "yes" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}imagemagick " + CUSTOMIZE_IMAGEMAGICK_DESC="ImageMagick configuration file" + CUSTOMIZE_IMAGEMAGICK_READ="${WORKDIR}/${IMAGEMAGICK_CONFIGURE}" + fi + + if [ "${CLAMAV_OPT}" = "yes" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}clamav " + CUSTOMIZE_CLAMAV_DESC="ClamAV configuration file" + CUSTOMIZE_CLAMAV_READ="${WORKDIR}/${CLAMAV_CONFIGURE}" + fi + + #cURL + AVAIL_CONFIGS="${AVAIL_CONFIGS}curl " + CUSTOMIZE_CURL_DESC="cURL configuration file" + CUSTOMIZE_CURL_READ="${WORKDIR}/${CURL_CONFIGURE}" + + #LibXML2 + AVAIL_CONFIGS="${AVAIL_CONFIGS}libxml2 " + CUSTOMIZE_LIBXML2_DESC="LibXML2 configuration file" + CUSTOMIZE_LIBXML2_READ="${WORKDIR}/${LIBXML2_CONFIGURE}" + + #LibXSLT + AVAIL_CONFIGS="${AVAIL_CONFIGS}libxslt " + CUSTOMIZE_LIBXSLT_DESC="LibXSLT configuration file" + CUSTOMIZE_LIBXSLT_READ="${WORKDIR}/${LIBXSLT_CONFIGURE}" + + if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2_php${PHP1_SHORTRELEASE} " + eval `echo "CUSTOMIZE_AP2_PHP${PHP1_SHORTRELEASE}_DESC=\"PHP ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default) configuration file\""` + READ_VAR="PHP${PHP1_SHORTRELEASE}${MOD_PHP_CONFIGURE_ENDING}" + eval `echo "CUSTOMIZE_AP2_PHP${PHP1_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_AP2_PHP${PHP1_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + elif [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}litespeed_php${PHP1_SHORTRELEASE} " + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP1_SHORTRELEASE}_DESC=\"PHP ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default) configuration file\""` + READ_VAR="PHP${PHP1_SHORTRELEASE}${LSPHP_CONFIGURE_ENDING}" + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP1_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP1_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + elif [ "${PHP1_MODE_OPT}" = "fastcgi" ] || [ "${PHP1_MODE_OPT}" = "suphp" ] || [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + MODE_OPT="${PHP1_MODE_OPT}" + if [ "${MODE_OPT}" = "php-fpm" ]; then + MODE_OPT="fpm" + fi + MODE_UPPERCASE=`echo ${MODE_OPT} | tr "[a-z]" "[A-Z]"` + READ_VAR="${MODE_UPPERCASE}_CONFIGURE_ENDING" + ENDING_VAR=$(eval_var ${READ_VAR}) + AVAIL_CONFIGS="${AVAIL_CONFIGS}${MODE_OPT}_php${PHP1_SHORTRELEASE} " + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP1_SHORTRELEASE}_DESC=\"PHP ${PHP1_RELEASE_OPT} as ${MODE_OPT} (default) configuration file\""` + READ_VAR="PHP${PHP1_SHORTRELEASE}${ENDING_VAR}" + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP1_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP1_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + if [ "${PHP2_MODE_OPT}" = "mod_php" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2_php${PHP2_SHORTRELEASE} " + eval `echo "CUSTOMIZE_AP2_PHP${PHP2_SHORTRELEASE}_DESC=\"PHP ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP2_SHORTRELEASE}${MOD_PHP_CONFIGURE_ENDING}" + eval `echo "CUSTOMIZE_AP2_PHP${PHP2_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_AP2_PHP${PHP2_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + elif [ "${PHP2_MODE_OPT}" = "lsphp" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}litespeed_php${PHP2_SHORTRELEASE} " + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP2_SHORTRELEASE}_DESC=\"PHP ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP2_SHORTRELEASE}${LSPHP_CONFIGURE_ENDING}" + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP2_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP2_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + elif [ "${PHP2_MODE_OPT}" = "fastcgi" ] || [ "${PHP2_MODE_OPT}" = "suphp" ] || [ "${PHP2_MODE_OPT}" = "php-fpm" ]; then + MODE_OPT="${PHP2_MODE_OPT}" + if [ "${MODE_OPT}" = "php-fpm" ]; then + MODE_OPT="fpm" + fi + MODE_UPPERCASE=`echo ${MODE_OPT} | tr "[a-z]" "[A-Z]"` + READ_VAR="${MODE_UPPERCASE}_CONFIGURE_ENDING" + ENDING_VAR=$(eval_var ${READ_VAR}) + AVAIL_CONFIGS="${AVAIL_CONFIGS}${MODE_OPT}_php${PHP2_SHORTRELEASE} " + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP2_SHORTRELEASE}_DESC=\"PHP ${PHP2_RELEASE_OPT} as ${MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP2_SHORTRELEASE}${ENDING_VAR}" + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP2_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP2_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + fi + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + if [ "${PHP3_MODE_OPT}" = "mod_php" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2_php${PHP3_SHORTRELEASE} " + eval `echo "CUSTOMIZE_AP2_PHP${PHP3_SHORTRELEASE}_DESC=\"PHP ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP3_SHORTRELEASE}${MOD_PHP_CONFIGURE_ENDING}" + eval `echo "CUSTOMIZE_AP2_PHP${PHP3_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_AP2_PHP${PHP3_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + elif [ "${PHP3_MODE_OPT}" = "lsphp" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}litespeed_php${PHP3_SHORTRELEASE} " + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP3_SHORTRELEASE}_DESC=\"PHP ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP3_SHORTRELEASE}${LSPHP_CONFIGURE_ENDING}" + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP3_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP3_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + elif [ "${PHP3_MODE_OPT}" = "fastcgi" ] || [ "${PHP3_MODE_OPT}" = "suphp" ] || [ "${PHP3_MODE_OPT}" = "php-fpm" ]; then + MODE_OPT="${PHP3_MODE_OPT}" + if [ "${MODE_OPT}" = "php-fpm" ]; then + MODE_OPT="fpm" + fi + MODE_UPPERCASE=`echo ${MODE_OPT} | tr "[a-z]" "[A-Z]"` + READ_VAR="${MODE_UPPERCASE}_CONFIGURE_ENDING" + ENDING_VAR=$(eval_var ${READ_VAR}) + AVAIL_CONFIGS="${AVAIL_CONFIGS}${MODE_OPT}_php${PHP3_SHORTRELEASE} " + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP3_SHORTRELEASE}_DESC=\"PHP ${PHP3_RELEASE_OPT} as ${MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP3_SHORTRELEASE}${ENDING_VAR}" + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP3_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP3_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + fi + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + if [ "${PHP4_MODE_OPT}" = "mod_php" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2_php${PHP4_SHORTRELEASE} " + eval `echo "CUSTOMIZE_AP2_PHP${PHP4_SHORTRELEASE}_DESC=\"PHP ${PHP4_RELEASE_OPT} as ${PHP4_MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP4_SHORTRELEASE}${MOD_PHP_CONFIGURE_ENDING}" + eval `echo "CUSTOMIZE_AP2_PHP${PHP4_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_AP2_PHP${PHP4_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + elif [ "${PHP4_MODE_OPT}" = "lsphp" ]; then + AVAIL_CONFIGS="${AVAIL_CONFIGS}litespeed_php${PHP4_SHORTRELEASE} " + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP4_SHORTRELEASE}_DESC=\"PHP ${PHP4_RELEASE_OPT} as ${PHP4_MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP4_SHORTRELEASE}${LSPHP_CONFIGURE_ENDING}" + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP4_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP4_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + elif [ "${PHP4_MODE_OPT}" = "fastcgi" ] || [ "${PHP4_MODE_OPT}" = "suphp" ] || [ "${PHP4_MODE_OPT}" = "php-fpm" ]; then + MODE_OPT="${PHP4_MODE_OPT}" + if [ "${MODE_OPT}" = "php-fpm" ]; then + MODE_OPT="fpm" + fi + MODE_UPPERCASE=`echo ${MODE_OPT} | tr "[a-z]" "[A-Z]"` + READ_VAR="${MODE_UPPERCASE}_CONFIGURE_ENDING" + ENDING_VAR=$(eval_var ${READ_VAR}) + AVAIL_CONFIGS="${AVAIL_CONFIGS}${MODE_OPT}_php${PHP4_SHORTRELEASE} " + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP4_SHORTRELEASE}_DESC=\"PHP ${PHP4_RELEASE_OPT} as ${MODE_OPT} (additional) configuration file\""` + READ_VAR="PHP${PHP4_SHORTRELEASE}${ENDING_VAR}" + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP4_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""` + PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'` + eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP4_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""` + fi + fi +} + +#################################################### + +listConfigsJSON() { + initConfigsJSON + init_customize_write + echo "{" + NUM_OF_SECTIONS=`echo ${AVAIL_CONFIGS} | wc -w` + CUR_SECTION=0 + for section in ${AVAIL_CONFIGS}; do + CUR_SECTION=`expr ${CUR_SECTION} + 1` + UPPERCASE_SECTION=`echo $section | tr "[a-z]" "[A-Z]"` + SECTION_DESC=CUSTOMIZE_${UPPERCASE_SECTION}_DESC + SECTION_READ=CUSTOMIZE_${UPPERCASE_SECTION}_READ + SECTION_WRITE=CUSTOMIZE_${UPPERCASE_SECTION}_WRITE + FULL_WRITE_PATH="$(eval_var ${SECTION_WRITE})" + DIR_OF_THE_PATH="`dirname ${FULL_WRITE_PATH}`" + if [ ! -d ${DIR_OF_THE_PATH} ]; then + mkdir -p ${DIR_OF_THE_PATH} + fi + printf "\t\"${section}\": {\n" + printf "\t\t\"description\": \"$(eval_var ${SECTION_DESC})\",\n" + printf "\t\t\"read\": \"$(eval_var ${SECTION_READ})\",\n" + printf "\t\t\"write\": \"${FULL_WRITE_PATH}\"\n" + if [ ${CUR_SECTION} -ne ${NUM_OF_SECTIONS} ]; then + printf "\t},\n" + else + printf "\t}\n" + fi + done + echo "}" + if [ "`grep -c cb_plugin /etc/passwd`" = "0" ]; then + chown -R admin:admin /usr/local/directadmin/plugins/custombuild/configure + else + chown -R cb_plugin:cb_plugin /usr/local/directadmin/plugins/custombuild/configure + fi + chmod -R 700 /usr/local/directadmin/plugins/custombuild/configure +} + +#################################################### + +showFile() { + if [ "$1" = "options" ]; then + cat ${WORKDIR}/options.conf + elif [ "$1" = "php_extensions" ]; then + cat ${WORKDIR}/php_extensions.conf + elif [ "$1" = "lockfile" ]; then + if [ -e ${WORKDIR}/.custombuild ]; then + cat ${WORKDIR}/.custombuild + else + echo "0" + fi + fi +} + +#################################################### + +showComponentConfig() { + initConfigsJSON + if [ -z $1 ]; then + echo "Unable to find component config, because of no argument given." + return + fi + UPPERCASE_SECTION=`echo $1 | tr "[a-z]" "[A-Z]"` + SECTION_READ=CUSTOMIZE_${UPPERCASE_SECTION}_READ + cat $(eval_var ${SECTION_READ}) +} + +#################################################### + +removeComponentConfig() { + initConfigsJSON + if [ -z $1 ]; then + echo "Unable to find component config, because of no argument given." + return + fi + UPPERCASE_SECTION=`echo $1 | tr "[a-z]" "[A-Z]"` + SECTION_READ=CUSTOMIZE_${UPPERCASE_SECTION}_READ + PATH_TO_THE_FILE="$(eval_var ${SECTION_READ})" + if echo ${PATH_TO_THE_FILE} | grep -q "${WORKDIR}/custom/"; then + rm -f ${PATH_TO_THE_FILE} + else + echo "File ${PATH_TO_THE_FILE} is not a customized configuration file." + fi +} + +#################################################### + +addToAccess() { + if [ -z $1 ]; then + return + fi + # Check for nginx user in access group + if grep -m1 -q "^access" /etc/group; then + if ! grep -m1 "^access" /etc/group | grep -q $1; then + usermod -G access $1 + fi + fi +} + +#################################################### +fpmCheck() { + ARG=$1 + CHANGED=0 + COUNT=`grep -m1 -c nginx /usr/local/php${ARG}/etc/php-fpm.conf` + CHOWN_USER=${WEBSERVER_OPT} + if [ "${CHOWN_USER}" = "nginx_apache" ]; then + CHOWN_USER=apache + fi + chown ${CHOWN_USER}:${CHOWN_USER} /usr/local/php${ARG}/sockets + FPM_SOCK_CHMOD=710 + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + FPM_SOCK_CHMOD=711 + fi + chmod ${FPM_SOCK_CHMOD} /usr/local/php${ARG}/sockets + + if [ "${WEBSERVER_OPT}" = "nginx" ] && [ "${COUNT}" -eq 0 ]; then + perl -pi -e 's/apache/nginx/' /usr/local/php${ARG}/etc/php-fpm.conf + CHANGED=1 + elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${COUNT}" -gt 0 ]; then + perl -pi -e 's/nginx/apache/' /usr/local/php${ARG}/etc/php-fpm.conf + CHANGED=1 + fi + fi + + if [ -d /usr/local/php${ARG}/sockets ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + chgrp -R nginx /usr/local/php${ARG}/sockets + elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + chgrp -R apache /usr/local/php${ARG}/sockets + fi + fi + + if [ ${CHANGED} -eq 1 ]; then + control_service php-fpm${ARG} restart + fi +} + +fpmChecks() { + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + EVAL_CHECK_VAR=HAVE_FPM${php_shortrelease}_CGI + EVAL_COPY_VAR=PHP${php_shortrelease}_FPM_CONF + if [ "$(eval_var ${EVAL_CHECK_VAR})" = "yes" ] && [ -d /usr/local/php${php_shortrelease}/sockets ]; then + cp -f $(eval_var ${EVAL_COPY_VAR}) /usr/local/php${php_shortrelease}/etc/php-fpm.conf + fpmCheck ${php_shortrelease} + fi + done + + if [ "${HAVE_FPM_CGI}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + perl -pi -e 's/apache/nginx/' /usr/local/directadmin/data/templates/php-fpm.conf + elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + perl -pi -e 's/nginx/apache/' /usr/local/directadmin/data/templates/php-fpm.conf + fi + + #update the webapps_settings.conf + #swap "fastcgi_pass unix:/usr/local/php54/sockets/webapps.sock;" if needed + #might be a better way to do this, other checks. Close enough for now. + if [ -e /etc/nginx/webapps_settings.conf ]; then + PHP_REPLACE_STRING="`grep -m1 '^fastcgi_pass unix:/usr/local/php../sockets/webapps.sock;' /etc/nginx/webapps_settings.conf | cut -d/ -f4`" + if [ "${PHP_REPLACE_STRING}" = "" ]; then + PHP_REPLACE_STRING=php54 + fi + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + perl -pi -e "s#${PHP_REPLACE_STRING}#php${PHP1_SHORTRELEASE}#" /etc/nginx/webapps_settings.conf + fi + fi + + if [ -e /etc/nginx/nginx-vhosts.conf ]; then + PHP_REPLACE_STRING="`grep -m1 '^fastcgi_pass unix:/usr/local/php../sockets/webapps.sock;' /etc/nginx/nginx-vhosts.conf | cut -d/ -f4`" + if [ "${PHP_REPLACE_STRING}" = "" ]; then + PHP_REPLACE_STRING=php54 + fi + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + perl -pi -e "s#${PHP_REPLACE_STRING}#php${PHP1_SHORTRELEASE}#" /etc/nginx/nginx-vhosts.conf + fi + fi + + if [ -e /etc/nginx/nginx-userdir.conf ]; then + PHP_REPLACE_STRING="`grep -m1 '^fastcgi_pass unix:/usr/local/php../sockets/webapps.sock;' /etc/nginx/nginx-userdir.conf | cut -d/ -f4`" + if [ "${PHP_REPLACE_STRING}" = "" ]; then + PHP_REPLACE_STRING=php54 + fi + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + perl -pi -e "s#${PHP_REPLACE_STRING}#php${PHP1_SHORTRELEASE}#" /etc/nginx/nginx-userdir.conf + fi + fi + fi +} + +dovecotChecks() { + if [ -e ${DOVECOT_CONFIG} ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + if grep -m1 -q '/etc/httpd/conf/' ${DOVECOT_CONFIG}; then + perl -pi -e 's#/etc/httpd/conf/#/etc/nginx/#' ${DOVECOT_CONFIG} + control_service dovecot restart + elif grep -m1 -q '/usr/local/lsws/conf/' ${DOVECOT_CONFIG}; then + perl -pi -e 's#/usr/local/lsws/conf/#/etc/nginx/#' ${DOVECOT_CONFIG} + control_service dovecot restart + fi + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + if grep -m1 -q '/etc/httpd/conf/' ${DOVECOT_CONFIG}; then + perl -pi -e 's#/etc/httpd/conf/#/usr/local/lsws/conf/#' ${DOVECOT_CONFIG} + control_service dovecot restart + elif grep -m1 -q '/etc/nginx/' ${DOVECOT_CONFIG}; then + perl -pi -e 's#/etc/nginx/#/usr/local/lsws/conf/#' ${DOVECOT_CONFIG} + control_service dovecot restart + fi + elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if grep -m1 -q '/etc/nginx/' ${DOVECOT_CONFIG}; then + perl -pi -e 's#/etc/nginx/#/etc/httpd/conf/#' ${DOVECOT_CONFIG} + control_service dovecot restart + elif grep -m1 -q '/usr/local/lsws/conf/' ${DOVECOT_CONFIG}; then + perl -pi -e 's#/usr/local/lsws/conf/#/etc/httpd/conf/#' ${DOVECOT_CONFIG} + control_service dovecot restart + fi + fi + fi +} + +#################################################### + +SKIP_WEBAPPS_SECTION=0 +skip_webapps_toggle() { + SKIP_WEBAPPS_SECTION=1 +} +case "$1" in + "") skip_webapps_toggle ;; + opt_help) skip_webapps_toggle ;; + set) skip_webapps_toggle ;; + set_php) skip_webapps_toggle ;; + get_versions_txt) skip_webapps_toggle ;; + update_script) skip_webapps_toggle ;; + version) skip_webapps_toggle ;; + set_fastest) skip_webapps_toggle ;; + set_fastest_quiet) skip_webapps_toggle ;; + kill) skip_webapps_toggle ;; + update_da) skip_webapps_toggle ;; + list_configs_json) skip_webapps_toggle ;; + settings_json) skip_webapps_toggle ;; + get_timezone) skip_webapps_toggle ;; + custom_config) skip_webapps_toggle ;; + set_versions_txt) skip_webapps_toggle ;; + show_component_config) skip_webapps_toggle ;; + remove_customized_config) skip_webapps_toggle ;; + show_file) skip_webapps_toggle ;; + check_options) skip_webapps_toggle ;; + update) skip_webapps_toggle ;; + update_data) skip_webapps_toggle ;; + gen_help_json) skip_webapps_toggle ;; + versions_json) skip_webapps_toggle ;; + versions_ajax) skip_webapps_toggle ;; + versions_nobold) skip_webapps_toggle ;; + versions) skip_webapps_toggle ;; + gen_help) skip_webapps_toggle ;; + list_removals) skip_webapps_toggle ;; + list_removals_json) skip_webapps_toggle ;; + remove_items) skip_webapps_toggle ;; +esac + +if [ "${SKIP_WEBAPPS_SECTION}" = "0" ]; then + # Check for webapps user + if [ `grep -c -m1 -e "^${APPUSER}:" /etc/passwd` = "0" ]; then + if [ "${OS}" = "FreeBSD" ]; then + /usr/sbin/pw groupadd ${APPUSER} 2> /dev/null + /usr/sbin/pw useradd -g ${APPUSER} -n ${APPUSER} -b ${WWWDIR} -s /sbin/nologin 2> /dev/null + elif [ -e /etc/debian_version ]; then + /usr/sbin/adduser --system --group --firstuid 100 --home ${WWWDIR} --no-create-home --disabled-login --force-badname ${APPUSER} + else + /usr/sbin/useradd -d ${WWWDIR} -s /bin/false ${APPUSER} 2> /dev/null + fi + fi + + #################################################### + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + # Do we have httpd-phpmodules.conf line? + NEWCONFIGS=1 + if [ -e ${HTTPD_CONF} ]; then + if [ "`grep -m1 -c -e '/etc/httpd/conf/extra/httpd-phpmodules.conf' ${HTTPD_CONF}`" = "0" ]; then + NEWCONFIGS=0 + fi + fi + fi +fi +#################################################### + +checkLibz() { + LIBZ1=/usr/lib/libz.so + LIBZ2=/usr/lib64/libz.so + LIBZ3=/lib/x86_64-linux-gnu/libz.so.1 + LIBZ4=/usr/lib/i386-linux-gnu/libz.so + LIBZ5=/lib/i386-linux-gnu/libz.so.1 + if [ ! -e ${LIBZ1} ] && [ ! -e ${LIBZ2} ] && [ ! -e ${LIBZ3} ] && [ ! -e ${LIBZ4} ] && [ ! -e ${LIBZ5} ]; then + echo "Cannot find zlib, as installed by package manager (${LIBZ1} or ${LIBZ2} or ${LIBZ3} or ${LIBZ4} or ${LIBZ5})" + echo "Please install zlib via your package manager" + echo "" + + if [ ${OS} = "FreeBSD" ]; then + echo "pkg install zlib" + elif [ -e ${DEBIAN_VERSION} ]; then + echo "apt-get install zlib1g zlib1g-dev" + else + echo "yum install zlib zlib-devel" + fi + + do_exit 0 + fi + + return +} + +#################################################### + +logrotate_ver() { + LOGROTATE_BIN=/usr/sbin/logrotate + if [ ! -x ${LOGROTATE_BIN} ]; then + echo "0.0.0" + fi + + ${LOGROTATE_BIN} -v 2>&1 | head -n1 | cut -d\ -f2 +} + +freebsd_add_newsyslog() { + NSL=/etc/newsyslog.conf + if grep -q ${1} $NSL; then + echo "${1} is already in ${NSL}" + return + fi + echo -e "$1\t$2\t600\t4\t*\t@T00\t$3\t$4" >> ${NSL} +} + +freebsd_set_newsyslog() { + NSL_L=$1 + NSL_V=$2 + NSL=/etc/newsyslog.conf + + if ! grep -q ${NSL_L} $NSL; then + echo -e "${NSL_L}\t${NSL_V}\t600\t4\t*\t@T00\t-" >> $NSL + fi + + #replace whatever we may have with whatever we need, eg: + #/var/www/html/roundcube/logs/errors webapps:webapps 600 4 * @T00 - + #/var/www/html/roundcube/logs/errors apache:apache 600 4 * @T00 - + #/var/www/html/roundcube/logs/errors 600 4 * @T00 - + + perl -pi -e "s|^${NSL_L}\s+webapps:webapps\s+|${NSL_L}\t${NSL_V}\t|" ${NSL} + perl -pi -e "s|^${NSL_L}\s+apache:apache\s+|${NSL_L}\t${NSL_V}\t|" ${NSL} + perl -pi -e "s|^${NSL_L}\s+600\s+|${NSL_L}\t${NSL_V}\t600\t|" ${NSL} +} + +ensure_webapps_logrotate() { + if [ ${OS} = "FreeBSD" ]; then + #by default it sets each log to webapps:webapps. + #swap it to apache:apache if needed + #else swap it to webapps:webapps from apache:apache.. or nothing + + NSL_VALUE=webapps:webapps + if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then + NSL_VALUE=apache:apache + fi + + freebsd_set_newsyslog /var/www/html/roundcube/logs/errors ${NSL_VALUE} + freebsd_set_newsyslog /var/www/html/squirrelmail/data/squirrelmail_access_log ${NSL_VALUE} + freebsd_set_newsyslog /var/www/html/phpMyAdmin/log/auth.log ${NSL_VALUE} + + return + fi + + cd ${CWD} + + WL=/etc/logrotate.d/webapps + + if [ ! -s ${WL} ]; then + getFile webapps.logrotate webapps_logrotate + + CWL=${CWD}/webapps.logrotate + if [ ! -s ${CWL} ]; then + echo "Download of $CWL failed" + return + fi + + cp -f ${CWL} ${WL} + chmod 644 ${WL} + fi + + if grep -q 'su apache webapps' ${WL}; then + perl -pi -e 's/su apache webapps/su webapps webapps/' ${WL} + fi + + if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then + #new logrotate and php as 'apache' shoud use su apache apache. + perl -pi -e 's/su webapps webapps/su apache apache/' ${WL} + else + #backup in case mod_php was used before + perl -pi -e 's/su apache apache/su webapps webapps/' ${WL} + fi + + #this should comment out the su regardless of the php type. eg: breaks logrotate if su is present for old logrotate and php-fpm + LR_V=`logrotate_ver` + if [ "`version_cmp ${LR_V} 3.8.0 'logrotate version check'`" -ge 0 ]; then + perl -pi -e 's/#su /su /' ${WL} + else + perl -pi -e 's/\tsu /\t#su /' ${WL} + fi + + +} + +#################################################### + +ensure_webapps_php_ini() { + + WEBAPPS_INI=/usr/local/php${PHP1_SHORTRELEASE}/lib/php.conf.d/50-webapps.ini + mkdir -p /usr/local/php${PHP1_SHORTRELEASE}/lib/php.conf.d + + if [ -e ${PHP_CUSTOM_PHP_CONF_D_INI_PATH}/50-webapps.ini ]; then + echo "Using custom ${PHP_CUSTOM_PHP_CONF_D_INI_PATH}/50-webapps.ini for ${WEBAPPS_INI}" + cp -f ${PHP_CUSTOM_PHP_CONF_D_INI_PATH}/50-webapps.ini ${WEBAPPS_INI} + else + echo "[PATH=${WWWDIR}]" > ${WEBAPPS_INI} + echo "session.save_path=${APP_TMP}" >> ${WEBAPPS_INI} + echo "upload_tmp_dir=${APP_TMP}" >> ${WEBAPPS_INI} + echo "disable_functions=exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname" >> ${WEBAPPS_INI} + fi +} + +ensure_webapps_tmp() { + if [ ! -d {$APP_TMP} ]; then + mkdir -p ${APP_TMP} + fi + + chmod 770 ${APP_TMP} + chown ${APPUSER}:${APPGROUP} ${APP_TMP} + + ensure_webapps_php_ini +} + +#################################################### + +dophpMyAdmin() { + if [ "${PHPMYADMIN_OPT}" != "yes" ]; then + do_exit 1 "You cannot install phpMyAdmin, because you do not have it set in options.conf file." + fi + + if [ "`version_cmp ${PHPMYADMIN_VER} 4.7.0 'pma ver check for PHPMYADMIN_REMOTE_PATCH'`" -ge 0 ]; then + PHPMYADMIN_REMOTE_PATCH=pma_auth_logging-4.7.patch + fi + ensure_webapps_logrotate + + cd ${CWD} + if [ ! -d ${WWWDIR} ]; then + echo "${WWWDIR} does not exist." + do_exit 0 + fi + + initMySQL + + PMA_41_MYSQL_55_DROP=4.0.10.6-all-languages + PMA_45_PHP_55_DROP=4.4.15-all-languages + + if [ "`version_cmp ${PHPMYADMIN_VER} 4.1.0 'pma ver check'`" -ge 0 ]; then + #4.1.0 need php 5.3.. which we have.. and mysql 5.5+ + + if [ ! -s "$MYSQL_BIN" ]; then + echo "${boldon}phpMyAdmin requires mysqld. Cannot find $MYSQL_BIN${boldoff}" + return + fi + + MYSQLV="`mysql_version`" + + if [ "`version_cmp ${MYSQLV} 5.5.0 'pma mysql check'`" -lt 0 ]; then + echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires ${MYSQLNAME} 5.5+, but ${MYSQLV} is installed${boldoff}" + echo "${boldon}Dropping phpMyAdmin version down to ${PMA_41_MYSQL_55_DROP}${boldoff}" + + PHPMYADMIN_VER=${PMA_41_MYSQL_55_DROP} + #prevent md5 lookup + PHPMYADMIN_VER_OPT=old + PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch + fi + fi + + if [ "`version_cmp ${PHPMYADMIN_VER} 4.5.0 'pma4.5 ver check'`" -ge 0 ]; then + #also requires mYSQL 5.5, but the above check handles that, and would have already lowered the PMA_V. + + if [ "`version_cmp ${PHP1_RELEASE_OPT} 5.5 'pma4.5 php check'`" -lt 0 ]; then + echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires PHP 5.5+, but ${PHP1_RELEASE_OPT} is installed${boldoff}" + echo "${boldon}Dropping phpMyAdmin version down to ${PMA_45_PHP_55_DROP}${boldoff}" + + PHPMYADMIN_VER=${PMA_45_PHP_55_DROP} + PHPMYADMIN_VER_OPT=old + PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch + fi + fi + if [ "`version_cmp ${PHPMYADMIN_VER} 5.0.0 'pma5.0 ver check'`" -ge 0 ]; then + #also requires mYSQL 5.5, but the above check handles that, and would have already lowered the PMA_V. + + if [ "`version_cmp ${PHP1_RELEASE_OPT} 7.1 'pma5.0 php check'`" -lt 0 ]; then + echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires PHP 7.1+, but ${PHP1_RELEASE_OPT} is installed${boldoff}" + PHPMYADMIN_VER=`getVer phpmyadmin4` + echo "${boldon}Dropping phpMyAdmin version down to ${PHPMYADMIN_VER}${boldoff}" + + PHPMYADMIN_VER_OPT=old + PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch + fi + fi + + TARFILE=${WORKDIR}/phpMyAdmin-${PHPMYADMIN_VER}.tar.gz + REALPATH=${WWWDIR}/phpMyAdmin-${PHPMYADMIN_VER} + ALIASPATH=${WWWDIR}/phpMyAdmin + CONFIG=${REALPATH}/config.inc.php + WEBFILE=${WEBPATH_SERVICES}/all/phpMyAdmin/phpMyAdmin-${PHPMYADMIN_VER}.tar.gz + + PMA_NAME="phpmyadmin${PHPMYADMIN_VER_OPT}" + + getFile phpMyAdmin/phpMyAdmin-${PHPMYADMIN_VER}.tar.gz ${PMA_NAME} phpMyAdmin-${PHPMYADMIN_VER}.tar.gz + + if [ ! -s ${TARFILE} ]; then + echo "The phpMyAdmin package cannot be found. Please ensure that the paths are correct" + do_exit 0 + fi + + tar xzf ${TARFILE} --no-same-owner -C ${WWWDIR} + + PHPMYADMIN_AUTOLOGIN=0 + + #SSO plugin + if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then + if ${DA_BIN} c | grep -m1 -q '^one_click_pma_login=1$'; then + PMA_DIRECT_LOGIN_VER=`getVer pma_direct_login` + PMA_DIRECT_LOGIN="phpMyAdmin_direct_login-${PMA_DIRECT_LOGIN_VER}.tar.gz" + cd ${REALPATH} + printf "Downloading ${WEBPATH_SERVICES}/all/auto_login/phpMyAdmin/${PMA_DIRECT_LOGIN} -> TO ${CWD} OR ${REALPATH}\n" + curl ${CURL_CONNECT_OPTIONS} -o ${PMA_DIRECT_LOGIN} ${WEBPATH_SERVICES}/all/auto_login/phpMyAdmin/${PMA_DIRECT_LOGIN} + tar xzf ${PMA_DIRECT_LOGIN} + chown -R webapps:webapps direct_login + chmod 711 direct_login + chmod 700 direct_login/tokens + + if [ "${MYSQLHOST}" != "localhost" ]; then + perl -pi -e "s#host = 'localhost'#host = '${MYSQLHOST}'#" direct_login/index.php + fi + + cd ${CWD} + PHPMYADMIN_AUTOLOGIN=1 + + elif [ -d ${REALPATH}/direct_login ]; then + rm -rf ${REALPATH}/direct_login + fi + fi + + if [ -s ${PMA_MAIN_CONFIG} ]; then + if [ ${OS} = "FreeBSD" ]; then + PMA_CONF_MD5=`/sbin/md5 -q ${PMA_MAIN_CONFIG}` + else + PMA_CONF_MD5=`/usr/bin/md5sum ${PMA_MAIN_CONFIG} | cut -d\ -f1` + fi + + if [ "${PMA_CONF_MD5}" = "1289b44793c91dfa7f6b6512ec94d600" ]; then + echo "Deleting ${PMA_MAIN_CONFIG}"; + rm -f ${PMA_MAIN_CONFIG} + fi + fi + + if [ "${PMA_CUSTOM_CONFIG}" != "" ] && [ -e ${PMA_CUSTOM_CONFIG} ]; then + echo "Installing custom PhpMyAdmin Config: ${PMA_CUSTOM_CONFIG}" + cp -f ${PMA_CUSTOM_CONFIG} ${REALPATH}/config.inc.php + else + cp -f ${PMA_MAIN_CONFIG} ${REALPATH}/config.inc.php + BLOWFISH_SECRET="`tr -cd 'a-zA-Z0-9' < /dev/urandom 2>/dev/null | head -c32`" + perl -pi -e "s|^\\\$cfg\['blowfish_secret'\] \= ''|\\\$cfg['blowfish_secret'] = '${BLOWFISH_SECRET}'|g" ${REALPATH}/config.inc.php + if [ "${PHPMYADMIN_AUTOLOGIN}" = "0" ]; then + perl -pi -e "s#\['auth_type'\] = 'cookie'#\['auth_type'\] = 'http'#" ${REALPATH}/config.inc.php + else + if [ "${PHPMYADMIN_PUBLIC_OPT}" = "no" ]; then + if [ "${PHP1_RELEASE_OPT}" = "5.3" ]; then + APPEND="" + else + APPEND="http_response_code\(403\)\;\n\t" + fi + perl -pi -e "s#\\\$cfg\['Servers'\]\[\\\$i\]\['auth_type'\] = 'cookie'#${APPEND}die(\"Access to phpMyAdmin is only allowed from control panel.\"\)#" ${REALPATH}/config.inc.php + fi + fi + perl -pi -e "s#\['extension'\] = 'mysql'#\['extension'\] = 'mysqli'#" ${REALPATH}/config.inc.php + fi + + perl -pi -e "s#\['host'\] = 'localhost'#\['host'\] = '${MYSQLHOST}'#" ${REALPATH}/config.inc.php + perl -pi -e "s#\['host'\] = ''#\['host'\] = '${MYSQLHOST}'#" ${REALPATH}/config.inc.php + + if [ "`version_cmp ${PHPMYADMIN_VER} 4.8.0 'pma4.8 ver check'`" -ge 0 ]; then + C=`grep -c AuthLog ${REALPATH}/config.inc.php` + if [ "${C}" = "0" ]; then + #add AuthLog to the config. + echo "Adding AuthLog to ${REALPATH}/config.inc.php" + echo "\$cfg['AuthLog'] = '/var/www/html/phpMyAdmin/log/auth.log';" >> ${REALPATH}/config.inc.php + fi + + #and check the brute_filter.list for phpmyadmin3. pma4 comes with DA 1.53.1, so no need to add it. + BFL=/usr/local/directadmin/data/templates/brute_filter.list + C=`grep -c ^phpmyadmin3= ${BFL}` + if [ "${C}" = "0" ]; then + echo "Adding phpmyadmin3 to ${BFL}" + echo "phpmyadmin3=ip_after=%20from%20'&ip_until='&text=phpmyadmin:%20user%20denied:%20&user_after=user%20denied:%20'&user_until='%20(mysql-denied)" >> ${BFL} + fi + + if ! grep -m1 -q 'PmaNoRelation_DisableWarning' ${REALPATH}/config.inc.php; then + #add PmaNoRelation_DisableWarning to the config. + echo "Adding PmaNoRelation_DisableWarning to ${REALPATH}/config.inc.php" + echo "\$cfg['PmaNoRelation_DisableWarning'] = true;" >> ${REALPATH}/config.inc.php + fi + fi + + if [ -e ${PMA_HTACCESS} ]; then + echo "Installing custom PhpMyAdmin .htaccess: ${PMA_HTACCESS}" + cp -f ${PMA_HTACCESS} ${REALPATH}/.htaccess + fi + + if [ -e ${PMA_USER_INI} ]; then + echo "Installing custom PhpMyAdmin .user.ini: ${PMA_USER_INI}" + cp -f ${PMA_USER_INI} ${REALPATH}/.user.ini + fi + + if [ -d ${PMA_THEMES} ]; then + echo "Installing custom PhpMyAdmin themes: ${PMA_THEMES}" + cp -Rf ${PMA_THEMES} ${REALPATH} + fi + + rm -f ${ALIASPATH} >/dev/null 2>&1 + ln -s ${REALPATH} ${ALIASPATH} + + if [ ! -d ${REALPATH}/log ]; then + mkdir -p ${REALPATH}/log + fi + + chown -f -R ${APPUSER}:${APPUSER} ${REALPATH} + chown -h ${APPUSER}:${APPUSER} ${ALIASPATH} + chmod -f 755 ${REALPATH} + + if [ -d ${REALPATH}/log ]; then + chmod 710 ${REALPATH}/log + fi + + if [ -d ${REALPATH}/scripts ]; then + chmod 000 ${REALPATH}/scripts + fi + + if [ -d ${REALPATH}/setup ]; then + chmod 000 ${REALPATH}/setup + fi + + #secure configuration file + if [ -s ${REALPATH}/config.inc.php ]; then + chmod 440 ${REALPATH}/config.inc.php + chown ${APPUSER}:${APPGROUP} ${REALPATH}/config.inc.php + fi + + if [ "`version_cmp ${PHPMYADMIN_VER} 4.9.3 'pma9.3 ver check'`" -lt 0 ]; then + getFile patches/${PHPMYADMIN_REMOTE_PATCH} ${PHPMYADMIN_REMOTE_PATCH} + + if [ -e patches/${PHPMYADMIN_REMOTE_PATCH} ]; then + echo "Patching phpMyAdmin to log failed authentications for BFM..." + cd ${REALPATH} + patch -p0 < ${WORKDIR}/patches/${PHPMYADMIN_REMOTE_PATCH} + fi + fi + + PMAHTA=${REALPATH}/log/.htaccess + if [ ! -s ${PMAHTA} ]; then + echo '' > ${PMAHTA} + echo ' Require all denied' >> ${PMAHTA} + echo '' >> ${PMAHTA} + echo '' >> ${PMAHTA} + echo ' Deny from all' >> ${PMAHTA} + echo '' >> ${PMAHTA} + fi + + if [ -d ${REALPATH}/log ]; then + if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then + chown -R apache:apache ${REALPATH}/log + fi + fi + + ensure_webapps_tmp + + echo "phpMyAdmin ${PHPMYADMIN_VER} installation is done." + writeLog "dophpMyAdmin: installed version ${PHPMYADMIN_VER}" + + cd ${CWD} +} + +#################################################### + +doRemovephpMyAdmin() { + if [ "${PHPMYADMIN_OPT}" != "no" ]; then + do_exit 1 "Cannot remove phpMyAdmin, because it is enabled in options.conf file." + fi + + remove_file /var/www/html/phpmyadmin + remove_file /var/www/html/phpMyAdmin + + echo "Removing all phpMyAdmin directories from /var/www/html..." + find /var/www/html -maxdepth 1 -name 'phpMyAdmin-*' -print -exec rm -rf {} \; + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "phpMyAdmin has been successfully removed." + writeLog "doRemovephpMyAdmin: phpMyAdmin removed" +} + +#################################################### + +doSquirrelmail() { + if [ "${SQUIRRELMAIL_OPT}" != "yes" ]; then + do_exit 1 "You cannot install Squirrelmail, because you do not have it set in options.conf file." + fi + + ensure_webapps_logrotate + + cd ${CWD} + if [ ! -d ${WWWDIR} ]; then + echo "${WWWDIR} does not exist." + do_exit 0 + fi + + TARFILE=${WORKDIR}/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz + LOCALEFILE=${WORKDIR}/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz + LOGGERFILE=${WORKDIR}/squirrel_logger-${SQUIRRELMAIL_LOGGER_VER}.tar.gz + REALPATH=${WWWDIR}/squirrelmail-${SQUIRRELMAIL_VER} + ALIASPATH=${WWWDIR}/squirrelmail + CONFIG=${REALPATH}/config/config.php + + if [ ! -s ${TARFILE} ]; then + curl ${CURL_CONNECT_OPTIONS} -o ${TARFILE} ${WEBPATH_SERVICES}/all/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz + fi + + if [ ! -s ${TARFILE} ]; then + echo "The squirrelmail package cannot be found. Please ensure that the paths are correct" + do_exit 0 + fi + + if [ ! -s ${LOCALEFILE} ]; then + curl ${CURL_CONNECT_OPTIONS} -o ${LOCALEFILE} ${WEBPATH_SERVICES}/all/squirrelmail/locales/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz + fi + + if [ ! -s ${LOGGERFILE} ]; then + curl ${CURL_CONNECT_OPTIONS} -o ${LOGGERFILE} ${WEBPATH_SERVICES}/all/squirrelmail/squirrel_logger/squirrel_logger-${SQUIRRELMAIL_LOGGER_VER}.tar.gz + fi + + M=`checkMD5 $TARFILE ${SQUIRRELMAIL_VER_NAME}` + if [ "$M" != "0" ]; then + echo "" + echo "${boldon}*** MD5 Checksum for $TARFILE Failed. Redownloading...***${boldoff}" + echo "" + curl ${CURL_CONNECT_OPTIONS} -o ${TARFILE} ${WEBPATH_SERVICES}/all/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz + + M=`checkMD5 $TARFILE ${SQUIRRELMAIL_VER_NAME}` + if [ "$M" != "0" ]; then + echo "" + echo "" + echo "${boldon}*** MD5 Checksum for $TARFILE failed *again*.***${boldoff}" + echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded." + echo "Install continuing with this possibly corrupted file. (it may also be fine)" + echo "" + echo "" + fi + fi + + M=`checkMD5 ${LOCALEFILE} squirrelmail_locale` + if [ "$M" != "0" ]; then + echo "${boldon}*** MD5 Checksum for $LOCALEFILE Failed. Redownloading...***${boldoff}" + curl ${CURL_CONNECT_OPTIONS} -o ${LOCALEFILE} ${WEBPATH_SERVICES}/all/squirrelmail/locales/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz + fi + + M=`checkMD5 ${LOGGERFILE} squirrel_logger` + if [ "$M" != "0" ]; then + echo "${boldon}*** MD5 Checksum for ${LOGGERFILE} Failed. Redownloading...***${boldoff}" + curl ${CURL_CONNECT_OPTIONS} -o ${LOGGERFILE} ${WEBPATH_SERVICES}/all/squirrelmail/squirrel_logger/squirrel_logger-${SQUIRRELMAIL_LOGGER_VER}.tar.gz + fi + + #Extract the file + tar xzf ${TARFILE} --no-same-owner -C ${WWWDIR} + + #install locales + tar xzf ${LOCALEFILE} --no-same-owner -C ${REALPATH} + + #install logger + tar xzf ${LOGGERFILE} --no-same-owner -C ${REALPATH}/plugins + + #this bit is to copy all of the preious setup to the new setup + if [ -e ${ALIASPATH} ]; then + cp -fR ${ALIASPATH}/data ${REALPATH} + fi + + #link it from a fake path: + /bin/rm -f ${ALIASPATH} + /bin/ln -sf squirrelmail-${SQUIRRELMAIL_VER} ${ALIASPATH} + chown -h ${APPUSER}:${APPUSER} ${ALIASPATH} + + if [ -d ${REALPATH}/plugins/squirrel_logger ]; then + if [ ! -e ${REALPATH}/plugins/squirrel_logger/config.php ] && [ -e ${REALPATH}/plugins/squirrel_logger/config_example.php ]; then + echo "Setting up SquirrelMail logger configuration file" + cp -fp ${REALPATH}/plugins/squirrel_logger/config_example.php ${REALPATH}/plugins/squirrel_logger/config.php + fi + fi + + #install the proper config: + if [ -e ${SQUIRREL_CONFIG} ]; then + echo "Installing custom SquirrelMail Config: ${SQUIRREL_CONFIG}" + /bin/cp -f ${SQUIRREL_CONFIG} ${CONFIG} + else + echo "Setting up SquirrelMail Config" + /bin/cp -f ${REALPATH}/config/config_default.php ${CONFIG} + + #IMAP folders + if [ "${WEBAPPS_INBOX_PREFIX_OPT}" = "no" ]; then + /usr/bin/perl -pi -e "s/\$trash_folder = 'INBOX.Trash'/\$trash_folder = 'Trash'/" ${CONFIG} + /usr/bin/perl -pi -e "s/\$sent_folder = 'INBOX.Sent'/\$sent_folder = 'Sent'/" ${CONFIG} + /usr/bin/perl -pi -e "s/\$draft_folder = 'INBOX.Drafts'/\$draft_folder = 'Drafts'/" ${CONFIG} + fi + + /usr/bin/perl -pi -e 's/\$force_username_lowercase = false/\$force_username_lowercase = true/' ${CONFIG} + /usr/bin/perl -pi -e "s/\'example.com\';/\\$\_SERVER\[\'HTTP_HOST\'\];\nwhile \(sizeof\(explode\(\'\.\', \\$\domain\)\) \> 2) {\n\t\\$\domain = substr(\\$\domain, strpos\(\\$\domain, \'\.\'\) \+ 1\);\n\}/" ${CONFIG} + /usr/bin/perl -pi -e 's/\$show_contain_subfolders_option = false/\$show_contain_subfolders_option = true/' ${CONFIG} + + /usr/bin/perl -pi -e 's/\$allow_thread_sort = false/\$allow_thread_sort = true/' ${CONFIG} + /usr/bin/perl -pi -e 's/\$allow_server_sort = false/\$allow_server_sort = true/' ${CONFIG} + + /usr/bin/perl -pi -e 's#/var/local/squirrelmail/data/#/var/www/html/squirrelmail/data/#' ${CONFIG} + /usr/bin/perl -pi -e 's#/var/local/squirrelmail/attach/#/var/www/html/squirrelmail/data/#' ${CONFIG} + + #we want it to use port 587 and use smtp auth. + /usr/bin/perl -pi -e 's/\$smtpPort = 25/\$smtpPort = 587/' ${CONFIG} + /usr/bin/perl -pi -e "s#\$smtp_auth_mech = \'none\'#\$smtp_auth_mech = \'login\'#" ${CONFIG} + + #enable the plugins + /usr/bin/perl -pi -e "s/Add list of enabled plugins here/Add list of enabled plugins here\n\\$\plugins\[0\] = \'spamcop\';\n\\$\plugins\[1\] = \'filters\';\n\\$\plugins\[2\] = \'squirrel_logger\';\n\\$\plugins\[3\] = \'squirrelspell\';/" ${CONFIG} + fi + + /usr/bin/perl -pi -e 's/\$allow_charset_search = true;/\$allow_charset_search = false;/' ${CONFIG} + + #set the permissions: + /bin/chmod -R 755 ${REALPATH} + chown -R ${APPUSER}:${APPUSER} ${REALPATH} + /bin/chmod -R 770 ${REALPATH}/data + + if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then + chown -R apache:${APPUSER} ${REALPATH}/data + fi + + ensure_webapps_tmp + + echo "SquirrelMail ${SQUIRRELMAIL_VER} installation is done." + writeLog "squirrelmail ${SQUIRRELMAIL_VER} installed" +} + +#################################################### + +doRemoveSquirrelmail() { + if [ "${SQUIRRELMAIL_OPT}" != "no" ]; then + do_exit 1 "Cannot remove SquirrelMail webmail, because it is enabled in options.conf file." + fi + + remove_file /var/www/html/squirrelmail + + echo "Removing all squirrelmail directories from /var/www/html..." + find /var/www/html -maxdepth 1 -name 'squirrelmail-*' -print -exec rm -rf {} \; + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "SquirrelMail has been successfully removed." + writeLog "squirrelmail removed" +} + +#################################################### + +have_sql_user() { + SQL_USER=$1 + SQL_HOST=$2 + + mysql --defaults-extra-file=${DA_MY_CNF} -sse "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '$SQL_USER' AND host = '$SQL_HOST');" --host=${MYSQLHOST} 2>&1 +} + +ensure_sql_user() { + SQL_USER=$1 + SQL_HOST=$2 + SQL_PASS=$3 + SQL_DB=$4 + + HAVE_SQL_USER=`have_sql_user "$SQL_USER" "$SQL_HOST"` + + MYSQLV=`mysql_main` + + echo "Found MySQL version $MYSQLV" + + USE_NEW_SET_PASSWORD=1 + INDENTIFIED_WITH_STRING="IDENTIFIED" + #for MySQL 8.0, SET PASSWORD doesn't specify PASSWORD() + if [ "${MYSQLV}" = "5.0" ] || [ "${MYSQLV}" = "5.1" ] || [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "5.6" ]; then + USE_NEW_SET_PASSWORD=0 + INDENTIFIED_WITH_STRING="IDENTIFIED" + elif [ "${MYSQLV}" = "5.7" ]; then + INDENTIFIED_WITH_STRING="IDENTIFIED" + elif [ "`has_mariadb`" = "1" ]; then + if [ "${MYSQLV}" != "10.3" ] && [ "${MYSQLV}" != "10.4" ] && [ "${MYSQLV}" != "10.5" ] && [ "${MYSQLV}" != "10.6" ]; then + USE_NEW_SET_PASSWORD=0 + fi + INDENTIFIED_WITH_STRING="IDENTIFIED" + else + INDENTIFIED_WITH_STRING="IDENTIFIED WITH mysql_native_password" + fi + + if [ "${HAVE_SQL_USER}" != "1" ]; then + echo "Creating User: CREATE USER '${SQL_USER}'@'${SQL_HOST}' ${INDENTIFIED_WITH_STRING} BY '${SQL_PASS}';" + mysql --defaults-extra-file=${DA_MY_CNF} -e "CREATE USER '${SQL_USER}'@'${SQL_HOST}' ${INDENTIFIED_WITH_STRING} BY '${SQL_PASS}';" --host=${MYSQLHOST} 2>&1 + fi + + echo "Granting access: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX,REFERENCES ON ${SQL_DB}.* TO '${SQL_USER}'@'${SQL_HOST}';" + mysql --defaults-extra-file=${DA_MY_CNF} -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX,REFERENCES ON ${SQL_DB}.* TO '${SQL_USER}'@'${SQL_HOST}';" --host=${MYSQLHOST} 2>&1 + + if [ "${USE_NEW_SET_PASSWORD}" = "1" ]; then + echo "Setting password: ALTER USER '${SQL_USER}'@'${SQL_HOST}' ${INDENTIFIED_WITH_STRING} BY '${SQL_PASS}';" + mysql --defaults-extra-file=${DA_MY_CNF} -e "ALTER USER '${SQL_USER}'@'${SQL_HOST}' ${INDENTIFIED_WITH_STRING} BY '${SQL_PASS}';" --host=${MYSQLHOST} 2>&1 + else + echo "Setting password: SET PASSWORD FOR '${SQL_USER}'@'${SQL_HOST}' = PASSWORD('${SQL_PASS}');" + mysql --defaults-extra-file=${DA_MY_CNF} -e "SET PASSWORD FOR '${SQL_USER}'@'${SQL_HOST}' = PASSWORD('${SQL_PASS}');" --host=${MYSQLHOST} 2>&1 + fi + +} + +doCustombuildPlugin() { + if [ "${CUSTOMBUILD_PLUGIN_OPT}" != "yes" ]; then + do_exit 1 "You cannot install CustomBuild plugin, because you do not have it set in options.conf file." + fi + + cd ${CWD} + mkdir -p /usr/local/directadmin/plugins/custombuild + chown diradmin:diradmin /usr/local/directadmin/plugins + chmod 711 /usr/local/directadmin/plugins + chown diradmin:diradmin /usr/local/directadmin/plugins/custombuild + curl ${CURL_CONNECT_OPTIONS} -o custombuild_plugin.tar.gz ${WEBPATH}/plugin/custombuild.tar.gz + tar xzf custombuild_plugin.tar.gz -C /usr/local/directadmin/plugins/custombuild + + /usr/local/directadmin/plugins/custombuild/scripts/install.sh + + rm -f custombuild_plugin.tar.gz +} + +doroundcube() { + if [ "${ROUNDCUBE_OPT}" != "yes" ]; then + do_exit 1 "You cannot install RoundCube webmail, because you do not have it set in options.conf file." + fi + + MYSQLV="`mysql_main`" + OLD_MYSQL=false + + if [ "`version_cmp ${ROUNDCUBE_VER} 1.5.0 'RC 1.5.0 MySQL cersion check'`" -ge 0 ]; then + if [ "`has_mariadb`" = "1" ]; then + if [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "10.0" ] || [ "${MYSQLV}" = "10.1" ]; then + OLD_MYSQL=true + fi + elif [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "5.6" ]; then + OLD_MYSQL=true + fi + fi + if ${OLD_MYSQL}; then + if ! grep -m1 -q 'innodb_file_format=Barracuda' /etc/my.cnf 2>/dev/null; then + echo "${boldon}RoundCube ${ROUNDCUBE_VER} requires newer version of ${MYSQLNAME} than ${MYSQLV}, alternatively, the following my.cnf configuration can be set:${boldoff}" + echo "innodb_large_prefix=1" + echo "innodb_file_per_table=1" + echo "innodb_file_format=Barracuda" + exit 1 + fi + fi + ensure_webapps_logrotate + + initMySQL + + if [ "`version_cmp ${ROUNDCUBE_VER} 1.3.0 'RC 1.3.0 php 5.3 check'`" -ge 0 ]; then + #RC 1.3.0+ will not run on php 5.3 or older. + if [ "${PHP1_RELEASE_OPT}" = "5.3" ]; then + echo "${boldon}RoundCube ${ROUNDCUBE_VER} cannot run on php 5.3 or older. Downgrading RC to 1.2.5${boldoff}"; + ROUNDCUBE_VER=1.2.5 + fi + fi + + cd ${CWD} + TARFILE=${WORKDIR}/roundcubemail-${ROUNDCUBE_VER}.tar.gz + REALPATH=${WWWDIR}/roundcubemail-${ROUNDCUBE_VER} + ALIASPATH=${WWWDIR}/roundcube + + if [ "${ROUNDCUBE_MAJOR_VER}" != "0" ]; then + if [ -s ${ROUNDCUBE_CONFIG_OLD} ] || [ -s ${ROUNDCUBE_CONFIG_DB_OLD} ]; then + echo "Please remove RoundCube 0.x custom configuration files if you would like to upgrade it. The following files should not be used anymore: ${ROUNDCUBE_CONFIG_OLD}, ${ROUNDCUBE_CONFIG_DB_OLD}. Please use config.inc.php as a new custom RoundCube configuration file." + return + fi + fi + + HTTPPATH=${WEBPATH_SERVICES}/all/roundcube + + # variables for the database: + ROUNDCUBE_DB=da_roundcube + ROUNDCUBE_DB_USER=da_roundcube + ROUNDCUBE_DB_PASS=`random_pass` + ROUNDCUBE_DES_KEY=`random_pass 24` + ROUNDCUBE_MY_CNF=${REALPATH}/config/my.cnf + + getFile all/roundcube/roundcubemail-${ROUNDCUBE_VER}.tar.gz roundcubemail roundcubemail-${ROUNDCUBE_VER}.tar.gz + + if [ ! -s ${TARFILE} ]; then + echo "Cannot download roundcubemail-${ROUNDCUBE_VER}" + do_exit 0 + fi + + #Extract the file + tar xzf ${TARFILE} --no-same-owner -C ${WWWDIR} + + if [ ! -e ${REALPATH} ]; then + do_exit 1 "Directory ${REALPATH} does not exist" + fi + + if [ -e ${ALIASPATH} ]; then + if [ -d ${ALIASPATH}/logs ]; then + cp -fR ${ALIASPATH}/logs ${REALPATH} >/dev/null 2>&1 + fi + if [ -d ${ALIASPATH}/temp ]; then + cp -fR ${ALIASPATH}/temp ${REALPATH} >/dev/null 2>&1 + fi + fi + + #link it from a fake path: + /bin/rm -f ${ALIASPATH} + /bin/ln -sf roundcubemail-${ROUNDCUBE_VER} ${ALIASPATH} + chown -h ${APPUSER}:${APPUSER} ${ALIASPATH} + cd ${REALPATH} + + if [ -d logs ]; then + chmod 710 logs + fi + + if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then + EDIT_CONFIG=main.inc.php + CONFIG_DIST=main.inc.php.dist + EDIT_DB=db.inc.php + DB_DIST=db.inc.php.dist + else + EDIT_CONFIG=config.inc.php + CONFIG_DIST=config.inc.php.sample + EDIT_DB=${EDIT_CONFIG} + DB_DIST=${CONFIG_DIST} + fi + + MYSQLSHOW=/usr/bin/mysqlshow + if [ ! -e ${MYSQLSHOW} ]; then + MYSQLSHOW=/usr/local/mysql/bin/mysqlshow + fi + + #insert data to mysql and create database/user for roundcube: + if ! ${MYSQLSHOW} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf --host=${MYSQLHOST} | grep -m1 -q ' da_roundcube '; then + if [ -d SQL ]; then + echo "Inserting data to mysql and creating database/user for roundcube..." + mysql --defaults-extra-file=${DA_MY_CNF} -e "CREATE DATABASE ${ROUNDCUBE_DB};" --host=${MYSQLHOST} 2>&1 + + ensure_sql_user "${ROUNDCUBE_DB_USER}" "${MYSQL_ACCESS_HOST}" "${ROUNDCUBE_DB_PASS}" "${ROUNDCUBE_DB}" + + if [ "${MYSQLHOST}" != "localhost" ]; then + for access_host_ip in `grep '^access_host.*=' ${DA_MYSQL} | cut -d= -f2`; do { + ensure_sql_user "${ROUNDCUBE_DB_USER}" "${access_host_ip}" "${ROUNDCUBE_DB_PASS}" "${ROUNDCUBE_DB}" + }; done + fi + + rm -f ${ROUNDCUBE_MY_CNF} + ensure_my_cnf ${ROUNDCUBE_MY_CNF} "${ROUNDCUBE_DB_USER}" "${ROUNDCUBE_DB_PASS}" + mysql --defaults-extra-file=${ROUNDCUBE_MY_CNF} -e "use ${ROUNDCUBE_DB}; source SQL/mysql.initial.sql;" --host=${MYSQLHOST} 2>&1 + + echo "Database created, ${ROUNDCUBE_DB_USER} password is ${ROUNDCUBE_DB_PASS}" + else + echo "Cannot find SQL directory in roundcubemail-${ROUNDCUBE_VER}" + do_exit 0 + fi + else + if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then + COUNT_MYSQL=`grep -m1 -c 'mysql://' ${ROUNDCUBE_CONFIG_DB}` + if [ ${COUNT_MYSQL} -gt 0 ]; then + PART1="`grep -m1 "\$config\['db_dsnw'\]" ${ROUNDCUBE_CONFIG_DB} | awk '{print $3}' | cut -d\@ -f1 | cut -d'/' -f3`" + ROUNDCUBE_DB_USER="`echo ${PART1} | cut -d\: -f1`" + ROUNDCUBE_DB_PASS="`echo ${PART1} | cut -d\: -f2`" + PART2="`grep -m1 "\$config\['db_dsnw'\]" ${ROUNDCUBE_CONFIG_DB} | awk '{print $3}' | cut -d\@ -f2 | cut -d\' -f1`" + MYSQL_ACCESS_HOST="`echo ${PART2} | cut -d'/' -f1`" + ROUNDCUBE_DB="`echo ${PART2} | cut -d'/' -f2`" + fi + fi + + ensure_sql_user "${ROUNDCUBE_DB_USER}" "${MYSQL_ACCESS_HOST}" "${ROUNDCUBE_DB_PASS}" "${ROUNDCUBE_DB}" + + if [ "${MYSQLHOST}" != "localhost" ]; then + for access_host_ip in `grep '^access_host.*=' ${DA_MYSQL} | cut -d= -f2`; do { + ensure_sql_user "${ROUNDCUBE_DB_USER}" "${access_host_ip}" "${ROUNDCUBE_DB_PASS}" "${ROUNDCUBE_DB}" + }; done + fi + + #in case anyone uses it for backups + rm -f ${ROUNDCUBE_MY_CNF} + ensure_my_cnf ${ROUNDCUBE_MY_CNF} "${ROUNDCUBE_DB_USER}" "${ROUNDCUBE_DB_PASS}" + fi + + #password plugin pre-configuration + if [ -e ${REALPATH}/plugins/password ]; then + cd ${REALPATH}/plugins/password + if [ ! -e config.inc.php ]; then + cp config.inc.php.dist config.inc.php + fi + + /usr/bin/perl -pi -e "s|\['password_driver'] = 'sql'|\['password_driver'] = 'directadmin'|" config.inc.php > /dev/null + + if [ -e /usr/local/directadmin/directadmin ]; then + DAPORT=`/usr/local/directadmin/directadmin c | grep -m1 -e '^port=' | cut -d= -f2` + if [ "${DAPORT}" != "" ]; then + /usr/bin/perl -pi -e "s|\['password_directadmin_port'] = .*$|\['password_directadmin_port'] = ${DAPORT};|" config.inc.php > /dev/null + fi + + DASSL=`/usr/local/directadmin/directadmin c | grep -m1 -e '^ssl=' | cut -d= -f2` + DAHOST=`/usr/local/directadmin/directadmin c | grep -m1 -e '^force_hostname=' | cut -d= -f2` + if [ -z "${DAHOST}" ]; then + DAHOST="localhost" + fi + + if [ "$DASSL" -eq 1 ]; then + /usr/bin/perl -pi -e "s|\['password_directadmin_host'] = 'tcp://localhost'|\['password_directadmin_host'] = 'ssl://${DAHOST}'|" config.inc.php > /dev/null + elif [ "${DAHOST}" != "localhost" ]; then + /usr/bin/perl -pi -e "s|\['password_directadmin_host'] = 'tcp://localhost'|\['password_directadmin_host'] = 'tcp://${DAHOST}'|" config.inc.php > /dev/null + fi + fi + cd ${REALPATH} + fi + + #pigeonhole plugin pre-configuration + if [ "${PIGEONHOLE_OPT}" = "yes" ]; then + if [ -d ${REALPATH}/plugins/managesieve ]; then + cd ${REALPATH}/plugins/managesieve + if [ ! -e config.inc.php ]; then + cp config.inc.php.dist config.inc.php + fi + /usr/bin/perl -pi -e "s|\['managesieve_port'] = null|\['managesieve_port'] = 4190|" config.inc.php > /dev/null + /usr/bin/perl -pi -e "s|\['managesieve_vacation'\] = 0|\['managesieve_vacation'\] = 1|g" config.inc.php > /dev/null + cd ${REALPATH} + fi + fi + + #Cleanup config + rm -f ${REALPATH}/config/${EDIT_CONFIG} + + #install the proper config: + if [ -d ../roundcube ]; then + + echo "Editing roundcube configuration..." + cd ${REALPATH}/config + + if [ -e ${ROUNDCUBE_CONFIG} ]; then + echo "Installing custom RoundCube Config: ${ROUNDCUBE_CONFIG}" + cp -f ${ROUNDCUBE_CONFIG} ${EDIT_CONFIG} + fi + + if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then + if [ ! -e ${EDIT_DB} ]; then + /bin/cp -f ${ROUNDCUBE_CONFIG_DB} ${EDIT_DB} + fi + COUNT_MYSQL=`grep -m1 -c 'mysql://' ${ROUNDCUBE_CONFIG_DB}` + if [ ${COUNT_MYSQL} -eq 0 ]; then + echo "\$config['db_dsnw'] = 'mysql://${ROUNDCUBE_DB_USER}:${ROUNDCUBE_DB_PASS}@${MYSQLHOST}/${ROUNDCUBE_DB}';" >> ${EDIT_DB} + fi + else + if [ ! -e ${EDIT_DB} ]; then + /bin/cp -f ${DB_DIST} ${EDIT_DB} + /usr/bin/perl -pi -e "s|mysql://roundcube:pass\@localhost/roundcubemail|mysql://${ROUNDCUBE_DB_USER}:\\Q${ROUNDCUBE_DB_PASS}\\E\@${MYSQLHOST}/${ROUNDCUBE_DB}|" ${EDIT_DB} > /dev/null + /usr/bin/perl -pi -e "s/\'mdb2\'/\'db\'/" ${EDIT_DB} > /dev/null + fi + fi + + SPAM_INBOX_PREFIX_OPT=`getDA_Opt spam_inbox_prefix 1` + SPAM_FOLDER="INBOX.spam" + if [ "${SPAM_INBOX_PREFIX_OPT}" = "0" ]; then + SPAM_FOLDER="Junk" + fi + + /usr/bin/perl -pi -e "s|rcmail-\!24ByteDESkey\*Str|\\Q${ROUNDCUBE_DES_KEY}\\E|" ${EDIT_CONFIG} + if [ ! -e ${ROUNDCUBE_CONFIG} ]; then + if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then + /usr/bin/perl -pi -e "s|\['default_host'] = ''|\['default_host'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null + + #IMAP folders + if [ "${WEBAPPS_INBOX_PREFIX_OPT}" = "yes" ]; then + /usr/bin/perl -pi -e "s|\['drafts_mbox'] = 'Drafts'|\['drafts_mbox'] = 'INBOX.Drafts'|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['sent_mbox'] = 'Sent'|\['sent_mbox'] = 'INBOX.Sent'|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['trash_mbox'] = 'Trash'|\['trash_mbox'] = 'INBOX.Trash'|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['default_imap_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_imap_folders'] = array\('INBOX', 'INBOX.Drafts', 'INBOX.Sent', '${SPAM_FOLDER}', 'INBOX.Trash'\)|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['default_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_folders'] = array\('INBOX', 'INBOX.Drafts', 'INBOX.Sent', '${SPAM_FOLDER}', 'INBOX.Trash'\)|" ${EDIT_CONFIG} > /dev/null + else + /usr/bin/perl -pi -e "s|\['default_imap_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_imap_folders'] = array\('INBOX', 'Drafts', 'Sent', '${SPAM_FOLDER}', 'Trash'\)|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['default_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_folders'] = array\('INBOX', 'Drafts', 'Sent', '${SPAM_FOLDER}', 'Trash'\)|" ${EDIT_CONFIG} > /dev/null + fi + + if [ "${SPAM_INBOX_PREFIX_OPT}" = "1" ]; then + /usr/bin/perl -pi -e "s|\['junk_mbox'] = 'Junk'|\['junk_mbox'] = 'INBOX.spam'|" ${EDIT_CONFIG} > /dev/null + fi + + #smtp stuff + /usr/bin/perl -pi -e "s|\['smtp_port'] = 25|\['smtp_port'] = 587|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['smtp_server'] = ''|\['smtp_server'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['smtp_user'] = ''|\['smtp_user'] = '%u'|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['smtp_pass'] = ''|\['smtp_pass'] = '%p'|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['smtp_auth_type'] = ''|\['smtp_auth_type'] = 'LOGIN'|" ${EDIT_CONFIG} > /dev/null + + /usr/bin/perl -pi -e "s|\['create_default_folders'] = .*;|\['create_default_folders'] = true;|" ${EDIT_CONFIG} > /dev/null + + /usr/bin/perl -pi -e "s|\['login_lc'] = 0;|\['login_lc'] = 2;|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['login_autocomplete'] = 0;|\['login_autocomplete'] = 2;|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['quota_zero_as_unlimited'] = false;|\['quota_zero_as_unlimited'] = true;|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['enable_spellcheck'] = true;|\['enable_spellcheck'] = false;|" ${EDIT_CONFIG} > /dev/null + else + #default_host is set to localhost by default in RC 1.0.0, so we don't echo it to the file + + #These ones are already in config.inc.php.sample file, so we just use perl-regex to change them + /usr/bin/perl -pi -e "s|\['smtp_port'] = 25|\['smtp_port'] = 587|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['smtp_server'] = ''|\['smtp_server'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['smtp_user'] = ''|\['smtp_user'] = '%u'|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['smtp_pass'] = ''|\['smtp_pass'] = '%p'|" ${EDIT_CONFIG} > /dev/null + + #Changing default options, that are set in defaults.inc.php + #IMAP folders + + if [ "${WEBAPPS_INBOX_PREFIX_OPT}" = "yes" ]; then + echo "\$config['drafts_mbox'] = 'INBOX.Drafts';" >> ${EDIT_CONFIG} + echo "\$config['junk_mbox'] = '${SPAM_FOLDER}';" >> ${EDIT_CONFIG} + echo "\$config['sent_mbox'] = 'INBOX.Sent';" >> ${EDIT_CONFIG} + echo "\$config['trash_mbox'] = 'INBOX.Trash';" >> ${EDIT_CONFIG} + echo "\$config['default_folders'] = array('INBOX', 'INBOX.Drafts', 'INBOX.Sent', '${SPAM_FOLDER}', 'INBOX.Trash');" >> ${EDIT_CONFIG} + else + echo "\$config['junk_mbox'] = '${SPAM_FOLDER}';" >> ${EDIT_CONFIG} + echo "\$config['default_folders'] = array('INBOX', 'Drafts', 'Sent', '${SPAM_FOLDER}', 'Trash');" >> ${EDIT_CONFIG} + fi + + HN_T=${HOSTNAME} + echo "\$config['smtp_helo_host'] = '${HN_T}';" >> ${EDIT_CONFIG} + + echo "\$config['smtp_auth_type'] = 'LOGIN';" >> ${EDIT_CONFIG} + echo "\$config['create_default_folders'] = true;" >> ${EDIT_CONFIG} + echo "\$config['protect_default_folders'] = true;" >> ${EDIT_CONFIG} + echo "\$config['login_autocomplete'] = 2;" >> ${EDIT_CONFIG} + echo "\$config['quota_zero_as_unlimited'] = true;" >> ${EDIT_CONFIG} + echo "\$config['enable_spellcheck'] = false;" >> ${EDIT_CONFIG} + echo "\$config['email_dns_check'] = true;" >> ${EDIT_CONFIG} + if grep -q '^recipients_max' /etc/exim.conf; then + RECIPIENTS_MAX="`grep -m1 '^recipients_max' /etc/exim.conf | cut -d= -f2 | tr -d ' '`" + echo "\$config['max_recipients'] = ${RECIPIENTS_MAX};" >> ${EDIT_CONFIG} + echo "\$config['max_group_members'] = ${RECIPIENTS_MAX};" >> ${EDIT_CONFIG} + fi + + if [ ! -s mime.types ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -s /etc/httpd/conf/mime.types ]; then + if grep -m1 -q 'application/java-archive' /etc/httpd/conf/mime.types; then + cp -f /etc/httpd/conf/mime.types ./mime.types + fi + fi + fi + fi + if [ ! -s mime.types ]; then + curl ${CURL_CONNECT_OPTIONS} -o mime.types https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types 2> /dev/null + fi + echo "\$config['mime_types'] = '${ALIASPATH}/config/mime.types';" >> ${EDIT_CONFIG} + fi + + #password plugin + if [ -e ${REALPATH}/plugins/password ]; then + if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then + /usr/bin/perl -pi -e "s|\['plugins'] = array\(\);|\['plugins'] = array\('password'\);|" ${EDIT_CONFIG} > /dev/null + else + /usr/bin/perl -pi -e "s|\['plugins'] = array\(\n|\['plugins'] = array\(\n 'password',\n|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['plugins'] = \[\n|\['plugins'] = \[\n 'password',\n|" ${EDIT_CONFIG} > /dev/null + fi + cd ${REALPATH}/config + fi + + #pigeonhole plugin + if [ "${PIGEONHOLE_OPT}" = "yes" ]; then + if [ -d ${REALPATH}/plugins/managesieve ]; then + if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then + /usr/bin/perl -pi -e "s|\['plugins'] = array\('password'\);|\['plugins'] = array\('password','managesieve'\);|" ${EDIT_CONFIG} > /dev/null + else + if [ `grep -m1 -c "'managesieve'" ${EDIT_CONFIG}` -eq 0 ]; then + /usr/bin/perl -pi -e "s|\['plugins'] = array\(\n|\['plugins'] = array\(\n 'managesieve',\n|" ${EDIT_CONFIG} > /dev/null + /usr/bin/perl -pi -e "s|\['plugins'] = \[\n|\['plugins'] = \[\n 'managesieve',\n|" ${EDIT_CONFIG} > /dev/null + fi + fi + cd ${REALPATH}/config + fi + fi + fi + + #SSO plugin + if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then + if ${DA_BIN} c | grep -m1 -q '^one_click_webmail_login=1$'; then + ROUNDCUBE_DIRECT_LOGIN_VER=`getVer rc_direct_login` + ROUNDCUBE_DIRECT_LOGIN="roundcube_direct_login-${ROUNDCUBE_DIRECT_LOGIN_VER}.tar.gz" + cd ${REALPATH} + curl ${CURL_CONNECT_OPTIONS} -o ${ROUNDCUBE_DIRECT_LOGIN} ${WEBPATH_SERVICES}/all/auto_login/roundcube/${ROUNDCUBE_DIRECT_LOGIN} + tar xzf ${ROUNDCUBE_DIRECT_LOGIN} + chown -R webapps:webapps direct_login + chmod 711 direct_login + chmod 700 direct_login/tokens + chmod 644 direct_login/index.php + cd ${REALPATH}/config + elif [ -d ${REALPATH}/direct_login ]; then + rm -rf ${REALPATH}/direct_login + fi + fi + + if echo "${PHP1_RELEASE_OPT}" | grep -m1 -q '^7'; then + if grep -m1 -q 'mod_php5' ${REALPATH}/.htaccess && ! grep -m1 -q 'mod_php7' ${REALPATH}/.htaccess; then + echo "Replacing mod_php5 with mod_php7 in .htaccess" + perl -pi -e 's|mod_php5|mod_php7|g' ${REALPATH}/.htaccess + fi + elif echo "${PHP1_RELEASE_OPT}" | grep -m1 -q '^8'; then + if grep -m1 -q 'mod_php5' ${REALPATH}/.htaccess && ! grep -m1 -q 'mod_php8' ${REALPATH}/.htaccess; then + echo "Replacing mod_php5 with mod_php8 in .htaccess" + perl -pi -e 's|mod_php5|mod_php8|g' ${REALPATH}/.htaccess + fi + fi + if [ -d ${ROUNDCUBE_PLUGINS} ]; then + echo "Copying files from ${ROUNDCUBE_PLUGINS} to ${REALPATH}/plugins" + cp -Rpf ${ROUNDCUBE_PLUGINS}/* ${REALPATH}/plugins + fi + + if [ -d ${ROUNDCUBE_SKINS} ]; then + echo "Copying files from ${ROUNDCUBE_SKINS} to ${REALPATH}/skins" + cp -Rpf ${ROUNDCUBE_SKINS}/* ${REALPATH}/skins + fi + + if [ -d ${ROUNDCUBE_VENDOR} ]; then + echo "Copying files from ${ROUNDCUBE_VENDOR} to ${REALPATH}/vendor" + cp -Rpf ${ROUNDCUBE_VENDOR}/* ${REALPATH}/vendor + fi + + if [ -d ${ROUNDCUBE_PROGRAM} ]; then + echo "Copying files from ${ROUNDCUBE_PROGRAM} to ${REALPATH}/program" + cp -Rpf ${ROUNDCUBE_PROGRAM}/* ${REALPATH}/program + fi + + if [ -e ${ROUNDCUBE_COMPOSER} ]; then + echo "Copying composer.json file from ${ROUNDCUBE_COMPOSER} to ${REALPATH}/composer.json" + cp -Rpf ${ROUNDCUBE_COMPOSER} ${REALPATH}/composer.json + fi + + if [ -e ${ROUNDCUBE_HTACCESS} ]; then + echo "Copying .htaccess file from ${ROUNDCUBE_HTACCESS} to ${REALPATH}/.htaccess" + cp -pf ${ROUNDCUBE_HTACCESS} ${REALPATH}/.htaccess + fi + + echo "Roundcube ${ROUNDCUBE_VER} has been installed successfully." + writeLog "RoundCube ${ROUNDCUBE_VER} installed" + fi + + #systems with "system()" in disable_functions need to use no php.ini: + if [ "`have_php_system`" = "0" ]; then + perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/update.sh + fi + + #systems with suhosin cannot have PHP memory_limit set to -1, we need not to load suhosin for RoundCube .sh scripts + if [ "${SUHOSIN_OPT}" = "yes" ]; then + perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/msgimport.sh + perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/indexcontacts.sh + perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/msgexport.sh + fi + + #set the permissions: + chown -R ${APPUSER}:${APPUSER} ${REALPATH} + + #update if needed + ${REALPATH}/bin/update.sh '--version=?' + + #drop alias column if it's still there + if mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf da_roundcube -e "SHOW COLUMNS FROM da_roundcube.users LIKE 'alias';" --host=${MYSQLHOST} -sss 2>&1 | grep -m1 -q '^alias'; then + mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf da_roundcube -e "ALTER TABLE da_roundcube.users DROP COLUMN da_roundcube.users.alias;"--host=${MYSQLHOST} -sss 2>&1 + fi + + #cleanup + rm -rf ${ALIASPATH}/installer + + #bugfix for suPHP as RC 1.3.9 has index.php 664 and ${REALPATH} 775 + /bin/chmod 755 ${REALPATH} + /bin/chmod 644 ${REALPATH}/index.php + + if [ "${APPGROUP}" = "apache" ]; then + chown -R apache ${REALPATH}/temp ${REALPATH}/logs + /bin/chmod -R 770 ${REALPATH}/temp + /bin/chmod -R 770 ${REALPATH}/logs + fi + + #secure configuration file + if [ -s ${EDIT_DB} ]; then + chmod 440 ${EDIT_DB} + if [ "${APPGROUP}" = "apache" ]; then + echo "**********************************************************************" + echo "* " + echo "* ${boldon}SECURITY: ${REALPATH}/config/${EDIT_DB} is readable by apache.${boldoff}" + echo "* Recommended: use a php type that runs php scripts as the User, then re-install roundcube." + echo "*" + echo "**********************************************************************" + fi + + chown ${APPUSER}:${APPGROUP} ${EDIT_DB} + + if [ "${APPGROUP}" = "apache" ]; then + ls -la ${REALPATH}/config/${EDIT_DB} + sleep 5 + fi + fi + + RC_HTACCESS=${REALPATH}/.htaccess + if [ -s "${RC_HTACCESS}" ]; then + if grep -m1 -q upload_max_filesize ${RC_HTACCESS}; then + perl -pi -e 's/^php_value upload_max_filesize/#php_value upload_max_filesize/' ${RC_HTACCESS} + perl -pi -e 's/^php_value post_max_size/#php_value post_max_size/' ${RC_HTACCESS} + perl -pi -e 's/^php_value memory_limit/#php_value memory_limit/' ${RC_HTACCESS} + fi + + perl -pi -e 's/FollowSymLinks/SymLinksIfOwnerMatch/' ${RC_HTACCESS} + fi + + ensure_webapps_tmp + + if [ "${OPCACHE_OPT}" = "yes" ]; then + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + echo "Reloading php-fpm${PHP1_SHORTRELEASE}." + control_service php-fpm${PHP1_SHORTRELEASE} reload + elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Reloading apache." + control_service httpd reload + elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + echo "Reloading litespeed." + control_service litespeed reload + fi + fi + + cd ${CWD} +} + +#################################################### + +doRemoveRoundcube() { + if [ "${ROUNDCUBE_OPT}" != "no" ]; then + do_exit 1 "Cannot remove RoundCube webmail, because it is enabled in options.conf file." + fi + + initMySQL + + # variables for the database: + ROUNDCUBE_DB=da_roundcube + ROUNDCUBE_DB_USER=da_roundcube + + #Removing RoundCube database and database user + if [ -d $MYSQL_DATA/${ROUNDCUBE_DB} ]; then + echo "Dropping database ${ROUNDCUBE_DB} and database user ${ROUNDCUBE_DB_USER}..." + mysql --defaults-extra-file=${DA_MY_CNF} -e "DROP DATABASE ${ROUNDCUBE_DB};" --host=${MYSQLHOST} 2>/dev/null + mysql --defaults-extra-file=${DA_MY_CNF} -e "DROP USER '${ROUNDCUBE_DB_USER}'@'${MYSQL_ACCESS_HOST}';" --host=${MYSQLHOST} 2>/dev/null + if [ "${MYSQLHOST}" != "localhost" ]; then + for access_host_ip in `grep '^access_host.*=' ${DA_MYSQL} | cut -d= -f2`; do { + mysql --defaults-extra-file=${DA_MY_CNF} -e "DROP USER '${ROUNDCUBE_DB_USER}'@'${ROUNDCUBE_DB_USER}'@'${access_host_ip}';" --host=${MYSQLHOST} 2>&1 + }; done + fi + fi + + remove_file /var/www/html/roundcube + + echo "Removing all roundcubemail directories from /var/www/html..." + find /var/www/html -maxdepth 1 -name 'roundcubemail-*' -print -exec rm -rf {} \; + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "RoundCube webmail has been successfully removed." + writeLog "RoundCube removed" +} + +#################################################### + +doLibspf2() { + quitIfLocked doLibspf2 + + cd ${CWD} + + getFile libspf2-${LIBSPF2_VER}.tar.gz libspf2 + + tar xzf libspf2-${LIBSPF2_VER}.tar.gz --no-same-owner + cd libspf2-${LIBSPF2_VER} + + perl -pi -e 's|www.openspf.org|www.open-spf.org|g' ./src/include/spf.h + ./configure --prefix=/usr/local + + while echo "Trying to make libspf2"; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + make install + /sbin/ldconfig + removeLockfile + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "libspf2 installation complete." + writeLog "libspf2 ${LIBSPF2_VER} installed" +} + +#################################################### + +doLibsrsAlt() { + quitIfLocked doLibsrsAlt + + cd ${CWD} + + getFile libsrs_alt-${LIBSRS_ALT_VER}.tar.bz2 libsrs_alt + + tar xjf libsrs_alt-${LIBSRS_ALT_VER}.tar.bz2 --no-same-owner + cd libsrs_alt-${LIBSRS_ALT_VER} + + ./configure --prefix=/usr/local + + while echo "Trying to make libsrs_alt"; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + make install + /sbin/ldconfig + removeLockfile + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "libsrs_alt installation complete." + writeLog "libsrs_alt ${LIBSRS_ALT_VER} installed" +} + +#################################################### + +ensure_keep_environment() +{ + EXIMV="`exim_version`" + + #this might be the current exim.conf, or the exim.conf being installed. + #set by whichever is calling the function. + FOR_EXIM_CONF_VER=$1 + + if [ "${FOR_EXIM_CONF_VER}" != "2.1" ] && [ "${FOR_EXIM_CONF_VER}" != "4.2" ]; then + #for newer exim.conf files with exim.variables.conf: + + #remove variables from the default that don't work with older versions of exim. + if [ "`version_cmp ${EXIMV} 4.86.2 'exim ver for keep_environment'`" -lt 0 ]; then + echo "Exim ${EXIMV} is older than 4.86.2. Removing variable keep_environment."; + perl -pi -e 's/^keep_environment=.*$\n//' /etc/exim.variables.conf.default + perl -pi -e 's/^keep_environment=.*$\n//' /etc/exim.variables.conf + fi + else + #older exim.conf files without extra files. + + #remove variables from the exim.conf that don't work with older versions of exim. + if [ "`version_cmp ${EXIMV} 4.86.2 'exim ver for keep_environment'`" -lt 0 ]; then + echo "Exim ${EXIMV} is older than 4.86.2. Removing variable keep_environment from /etc/exim.conf."; + perl -pi -e 's/^keep_environment=/#keep_environment=/' /etc/exim.conf + else + #else enable the feature, if available. + echo "Exim ${EXIMV} is at least 4.86.2."; + COUNT_KEEP_ENV=`grep -c 'keep_environment' /etc/exim.conf` + if [ "${COUNT_KEEP_ENV}" -gt 0 ]; then + echo "Uncommenting variable keep_environment in /etc/exim.conf."; + perl -pi -e 's/^#keep_environment=/keep_environment=/' /etc/exim.conf + else + echo "Adding variable keep_environment to /etc/exim.conf."; + perl -pi -e 's/^perl_startup/keep_environment=PWD\nperl_startup/' /etc/exim.conf + fi + fi + fi +} + +ensurepopb4smtp(){ + #pop before smtp + if [ "${OS}" = "FreeBSD" ]; then + if [ ! -s /usr/local/etc/rc.d/da-popb4smtp ]; then + cp -f /usr/local/directadmin/data/templates/da-popb4smtp /usr/local/etc/rc.d/da-popb4smtp + chmod 755 /usr/local/etc/rc.d/da-popb4smtp + /usr/local/etc/rc.d/da-popb4smtp start + fi + else + if [ "${SYSTEMD}" = "yes" ]; then + if [ ! -s /etc/systemd/system/da-popb4smtp.service ]; then + cp -f /usr/local/directadmin/scripts/da-popb4smtp.service /etc/systemd/system/da-popb4smtp.service + systemctl daemon-reload + systemctl enable da-popb4smtp.service + systemctl start da-popb4smtp.service + fi + elif [ ! -s /etc/init.d/da-popb4smtp ]; then + cp -f /usr/local/directadmin/data/templates/da-popb4smtp /etc/init.d/da-popb4smtp + chmod 755 /etc/init.d/da-popb4smtp + if [ -e /etc/debian_version ]; then + update-rc.d da-popb4smtp defaults + /etc/init.d/da-popb4smtp start + else + /sbin/chkconfig da-popb4smtp reset + /sbin/service da-popb4smtp start + fi + fi + fi + set_service da-popb4smtp ON +} + +doLua(){ + getFile lua/lua-${LUA_VER}.tar.gz lua lua-${LUA_VER}.tar.gz + getFile patches/liblua_so.patch liblua_so.patch + + if [ ! -e /usr/include/readline/readline.h ] && [ ! -e /usr/local/include/readline/readline.h ]; then + echo "Cannot find /usr/include/readline/readline.h, installing..." + if [ -e /etc/debian_version ]; then + apt-get -y install libreadline-dev + elif [ ${OS} != "FreeBSD" ]; then + yum -y install readline-devel + else + pkg install -y readline + fi + fi + + quitIfLocked doLua + + if [ -d lua-${LUA_VER} ]; then + rm -rf lua-${LUA_VER} + fi + cd ${CWD} + FILE=${CWD}/lua-${LUA_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + + cd lua-${LUA_VER} + + #To generate dynamic library of liblua + patch -p0 < ${WORKDIR}/patches/liblua_so.patch + + while echo "Installing lua..."; do + if [ "${OS}" = "FreeBSD" ]; then + make freebsd install + else + make linux install + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + echo "lua ${LUA_VER} Installed." + writeLog "lua ${LUA_VER} installed" + + removeLockfile + cd ${CWD} + rm -rf lua-${LUA_VER} + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +checkDebianPackage(){ + RETURN_CODE=0 + if [ -x /usr/bin/dpkg ]; then + /usr/bin/dpkg -s ${1} >/dev/null 2>&1 + if [ $? -ne 0 ]; then + RETURN_CODE=1 + fi + fi + echo ${RETURN_CODE} +} + +checkRPMPackage(){ + RETURN_CODE=0 + if [ -x /usr/bin/rpm ]; then + /usr/bin/rpm -q ${1} >/dev/null 2>&1 + if [ $? -ne 0 ]; then + RETURN_CODE=1 + fi + fi + echo ${RETURN_CODE} +} + +doSnail(){ + set_sendmail_link + getFile s-nail/s-nail-${S_NAIL_VER}.tar.gz s-nail s-nail-${S_NAIL_VER}.tar.gz + quitIfLocked doSnail + + cd ${CWD} + FILE=${CWD}/s-nail-${S_NAIL_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + + cd s-nail-${S_NAIL_VER} + + OV=`openssl_version` + #OpenSSL 1.1.0 fails with s-nail-14.9.15/src/mx/xtls.c:248:18: error: 'SSL_OP_NO_TLSv1_3' undeclared here (not in a function) + if echo "${OV}" | grep -m1 -q '1\.1\.0'; then + sed -i '/{"TLSv1.3\\0", SSL_OP_NO_TLSv1_3,/d' src/mx/xtls.c + perl -pi -e 's|{"TLSv1.2", SSL_OP_NO_TLSv1_2,|{"TLSv1.2\\0", SSL_OP_NO_TLSv1_2,|g' src/mx/xtls.c + fi + + while echo "Making s-nail..."; do + if [ "${OS}" = "FreeBSD" ]; then + gmake CONFIG=MAXIMAL all + else + make CONFIG=MAXIMAL all + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + while echo "Installing s-nail..."; do + make install + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + if [ -x /usr/local/bin/s-nail ] && [ ! -e /usr/local/bin/mail ]; then + echo "Symlinking /usr/local/bin/s-nail -> /usr/local/bin/mail." + ln -s /usr/local/bin/s-nail /usr/local/bin/mail + fi + + echo "s-nail ${S_NAIL_VER} Installed." + writeLog "s-nail ${S_NAIL_VER} installed" + + removeLockfile + cd ${CWD} + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +doMsmtp(){ + getFile msmtp/msmtp-${MSMTP_VER}.tar.xz msmtp msmtp-${MSMTP_VER}.tar.xz + quitIfLocked doMsmtp + + cd ${CWD} + FILE=${CWD}/msmtp-${MSMTP_VER}.tar.xz + checkFile ${FILE} + echo "Extracting ..." + tar xJf ${FILE} --no-same-owner + echo "Done." + + cd msmtp-${MSMTP_VER} + + ./configure + + while echo "Making msmtp..."; do + if [ "${OS}" = "FreeBSD" ]; then + gmake -j${CPU_CORES} + else + make -j${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + while echo "Installing msmtp..."; do + make install + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + /sbin/ldconfig + removeLockfile + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "msmtp installation complete." + writeLog "msmtp ${MSMTP_VER} installed" +} + +createEtcVirtual(){ + addUserGroup mail mail 12 12 + addToAccess mail + VIRTUAL="/etc/virtual" + if [ ! -d ${VIRTUAL} ]; then + mkdir -p ${VIRTUAL} + fi + chown -f mail ${VIRTUAL} + chgrp -f mail ${VIRTUAL} + chmod 711 ${VIRTUAL} + + if ! grep -q "^${HOSTNAME}$" ${VIRTUAL}/domains; then + echo "${HOSTNAME}" >> ${VIRTUAL}/domains + fi + + if [ ! -s ${VIRTUAL}/limit ]; then + echo "1000" > ${VIRTUAL}/limit + chmod 644 ${VIRTUAL}/limit + chown -f mail:mail ${VIRTUAL}/limit + fi + if [ ! -s ${VIRTUAL}/limit_unknown ]; then + echo "0" > ${VIRTUAL}/limit_unknown + chmod 644 ${VIRTUAL}/limit_unknown + chown -f mail:mail ${VIRTUAL}/limit_unknown + fi + if [ ! -s ${VIRTUAL}/user_limit ]; then + echo "200" > ${VIRTUAL}/user_limit + chmod 644 ${VIRTUAL}/user_limit + chown -f mail:mail ${VIRTUAL}/user_limit + fi + if [ ! -d ${VIRTUAL}/usage ]; then + mkdir -p ${VIRTUAL}/usage + fi + chmod 750 ${VIRTUAL}/usage + chown -f mail:mail ${VIRTUAL}/usage + + for i in domains domainowners pophosts blacklist_domains whitelist_from use_rbl_domains bad_sender_hosts bad_sender_hosts_ip blacklist_senders whitelist_domains whitelist_hosts whitelist_hosts_ip whitelist_senders skip_av_domains skip_rbl_domains; do + if [ ! -e ${VIRTUAL}/$i ]; then + touch ${VIRTUAL}/$i + fi + chmod 600 ${VIRTUAL}/$i + chown -f mail:mail ${VIRTUAL}/$i + done +} + +doExim() { + if [ "${EXIM_OPT}" != "yes" ]; then + do_exit 1 "You cannot update Exim, because you do not have it set in options.conf file." + fi + + if [ "`version_cmp ${EXIM_VER} 4.94 'exim ver for 4.94 and up'`" -ge 0 ] && [ "${EXIMCONF_OPT}" != "yes" ] && [ -s /etc/exim.conf ]; then + if ! grep -m1 -q local_part_data /etc/exim.conf; then + echo "You cannot update Exim to a newer version that 4.94, because you do not have configuration updates set in options.conf file and exim.conf seems to be old (no local_part_data or domain_data directives)." + return + fi + elif [ "`version_cmp ${EXIM_VER} 4.94 'exim ver for 4.94 and up'`" -ge 0 ] && [ "${EXIMCONF_OPT}" = "yes" ] && [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.5 'exim conf for 4.4 and lower'`" -lt 0 ]; then + echo "You cannot update Exim to a newer version that 4.94, because there is too old eximconf_release set in the options.conf file (4.5 is required)." + return + elif [ "${OS}" != "FreeBSD" ] && lsattr -la /etc/exim.conf 2>/dev/null | grep -m1 -q "Immutable"; then + if ! grep -m1 -q local_part_data /etc/exim.conf; then + echo "You cannot update Exim to a newer version that 4.94, because you have chattr immutable flag set for /etc/exim.conf." + return + fi + fi + + if [ ! -e /usr/include/db.h ]; then + echo "Cannot find /usr/include/db.h. Please install db.h" + if [ -e /etc/debian_version ]; then + echo "apt-get install libdb4.8-dev libperl-dev" + elif [ ${OS} != "FreeBSD" ]; then + echo "yum install db4-devel perl-ExtUtils-Embed" + fi + do_exit 0 + fi + + createEtcVirtual + + V_U_RBL_D=${VIRTUAL}/use_rbl_domains + if [ -f ${V_U_RBL_D} ] && [ ! -s ${V_U_RBL_D} ]; then + rm -f ${V_U_RBL_D} + ln -s domains ${V_U_RBL_D} + chown -h mail:mail ${V_U_RBL_D} + fi + + getFile exim-${EXIM_VER}.tar.gz exim + getFile exim_boot exim_boot + getFile exim_freebsd exim_boot_freebsd + getFile exim_debian exim_boot_debian + + ensurepopb4smtp + + killall sendmail 2> /dev/null + + if [ -s /etc/inetd.conf ]; then + if grep -m1 -q '^pop' /etc/inetd.conf; then + perl -pi -e 's/^pop/\#pop/' /etc/inetd.conf + killall -HUP inetd + fi + fi + if [ "${OS}" = "FreeBSD" ]; then + if ! grep -m1 -q '^sendmail_enable="NONE"$' /etc/rc.conf; then + /usr/bin/perl -pi -e 's/sendmail_enable=\"YES\"/sendmail_enable=\"NONE\"/' /etc/rc.conf + /usr/bin/perl -pi -e 's/sendmail_enable=\"NO\"/sendmail_enable=\"NONE\"/' /etc/rc.conf + fi + elif [ -e /etc/debian_version ]; then + if [ `checkDebianPackage da_exim` -ne 0 ] && [ `checkDebianPackage da-exim` -ne 0 ]; then + if [ `checkDebianPackage equivs` -ne 0 ]; then + apt-get update + apt-get -y install equivs + fi + if [ -x /usr/bin/equivs-build ]; then + echo 'Package: da-exim' > da-exim.equivs + echo 'Maintainer: JBMC Software ' >> da-exim.equivs + echo 'Architecture: any' >> da-exim.equivs + echo 'Provides: mail-transport-agent' >> da-exim.equivs + echo 'Replaces: mail-transport-agent, exim4-base' >> da-exim.equivs + echo 'Description: Dummy package to replace dependencies' >> da-exim.equivs + /usr/bin/equivs-build da-exim.equivs >/dev/null 2>&1 + fi + fi + if [ -s da-exim_1.0_amd64.deb ]; then + dpkg -r --force-all exim exim4 exim4-base exim4-config exim4-daemon-light exim4-config-2 exim4-daemon-heavy rmail sendmail-bin sendmail mail-transport-agent postfix ssmtp courier-authdaemon courier-authlib courier-authlib-userdb courier-base courier-imap courier-imap-ssl courier-maildrop courier-pop courier-pop-ssl courier-ssl dovecot-core dovecot-imapd 2> /dev/null + dpkg -P exim exim4 exim4-base exim4-config exim4-daemon-light exim4-config-2 exim4-daemon-heavy rmail sendmail-bin sendmail mail-transport-agent postfix ssmtp courier-authdaemon courier-authlib courier-authlib-userdb courier-base courier-imap courier-imap-ssl courier-maildrop courier-pop courier-pop-ssl courier-ssl dovecot-core dovecot-imapd 2> /dev/null + dpkg -i da-exim_1.0_amd64.deb 2>/dev/null + if [ -s da-exim.equivs ]; then + rm -f da-exim.equivs + fi + rm -f da-exim_1.0_amd64.deb 2> /dev/null + fi + else + rpm -e --nodeps sendmail 2> /dev/null + rpm -e --nodeps postfix 2> /dev/null + rpm -e --nodeps dovecot 2> /dev/null + rpm -e --nodeps courier-imap 2> /dev/null + fi + + if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then + if [ "${LIBSPF2_VER}" != "0" ] && [ ! -e /usr/local/include/spf2/spf.h ]; then + doLibspf2 + fi + fi + if [ "${EXIM_SRS_OPT}" = "yes" ]; then + if [ "${LIBSRS_ALT_VER}" != "0" ] && [ ! -e /usr/local/include/srs_alt.h ]; then + doLibsrsAlt + fi + fi + quitIfLocked doExim + + EXIM_SYS_FILE_PATCH=exim-sys-file-freebsd.patch + if [ ${OS} = "FreeBSD" ]; then + getFile patches/${EXIM_SYS_FILE_PATCH} ${EXIM_SYS_FILE_PATCH} + fi + EXIM_C_2274=exim.c.bug-2274.patch + if [ "${EXIM_VER}" = "4.91" ]; then + getFile patches/${EXIM_C_2274} ${EXIM_C_2274} + fi + + if [ ! -d /var/log/exim ]; then + mkdir /var/log/exim + chmod 700 /var/log/exim + fi + chown mail:mail /var/log/exim + if [ -d /var/spool/exim ] && [ ! -e /usr/sbin/exim ]; then + chown -R mail:mail /var/spool/exim + fi + + cd ${CWD} + FILE=${CWD}/exim-${EXIM_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + + cd exim-${EXIM_VER} + + if [ -x /usr/sbin/opendmarc ] && [ -s ./src/dmarc.c ]; then + if /usr/sbin/opendmarc -V | head -n1 | grep -q 'v1\.4'; then + perl -pi -e 's| dkim_result, US""\);| sig->selector, dkim_result, US"");|g' ./src/dmarc.c + fi + fi + # libnsl is only used for NIS and NIS+ lookups, compilation fails on CentOS8 due to no libnsl in glibc anymore + perl -pi -e 's/-lnsl//g' ./OS/Makefile-Linux + + if [ "${EXIM_MAKEFILE}" != "" ]; then + echo "${boldon}Custom ${EXIM_MAKEFILE} being used${boldoff}" + cp -f ${EXIM_MAKEFILE} Local/Makefile + else + #curl ${CURL_CONNECT_OPTIONS} -o Local/Makefile ${WEBPATH}/Makefile + cd ${CWD} + getFile Makefile '' exim-${EXIM_VER}/Local/Makefile + cd exim-${EXIM_VER} + + if [ "`version_cmp ${EXIM_VER} 4.93 'exim ver for 4.93 and up'`" -ge 0 ]; then + echo "Making Makefile changes for 4.93+" + perl -pi -e 's/^CFLAGS=(.*)$/CFLAGS=$1 -std=gnu99/' Local/Makefile + echo "USE_OPENSSL=yes" >> Local/Makefile + fi + fi + # Solve on CentOS8: /usr/bin/ld: acl.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIC + if [ "${OS_CENTOS_VER}" = "8" ]; then + if ! grep -m1 -q CFLAGS.*fPIC Local/Makefile; then + perl -pi -e 's|CFLAGS\=|CFLAGS\=-fPIC |g' Local/Makefile + fi + fi + + if [ -e /usr/local/include/spf2/spf.h ]; then + echo "SUPPORT_SPF=yes" >> Local/Makefile + echo "CFLAGS += -DSPF -I/usr/local/include" >> Local/Makefile + echo "LDFLAGS += -lspf2" >> Local/Makefile + fi + + #Reported issue in https://forum.directadmin.com/showthread.php?t=55603&page=2&p=285310#post285310 + echo "CFLAGS += `getGccOptions`" >> Local/Makefile + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_DEBIAN_VER}" = "7" ]; then + echo "LDFLAGS += -lrt" >> Local/Makefile + fi + if [ -e /usr/local/include/srs_alt.h ]; then + echo "EXPERIMENTAL_SRS_ALT=yes " >> Local/Makefile + #For old versions of exim <4.95 + echo "EXPERIMENTAL_SRS=yes " >> Local/Makefile + echo "LDFLAGS += -lsrs_alt" >> Local/Makefile + fi + + if [ ${OS} = "FreeBSD" ]; then + echo "Patching exim for DTYPE_NONE error with sys/file.h..." + patch -p0 < ../patches/${EXIM_SYS_FILE_PATCH} + fi + + if [ "${EXIM_VER}" = "4.91" ]; then + echo "Patching for exim.c bug 2274:" + echo "https://bugs.exim.org/show_bug.cgi?id=2274" + patch -p0 < ../patches/${EXIM_C_2274} + fi + + + while echo "Trying to make exim..."; do + #reported multiple cores issue, happened in 2010, trying again: https://www.directadmin.com/forum/showthread.php?p=181950&posted=1#post181950 + if [ "${OS}" = "FreeBSD" ]; then + C_INCLUDE_PATH=/usr/kerberos/include make + else + C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): " + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make Complete" + + while echo "Installing exim..."; do + make install + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + echo "Moving exim binary." + EXIM_BINARY=`ls -t /usr/sbin/exim-${EXIM_VER}-* | head -n1` + if [ "${EXIM_BINARY}" = "" ]; then + #4.86.2 shows up as /usr/sbin/exim-4.86_2-2 + #assume newest binary is the winner. + echo "Cannot find the ${EXIM_VER} formatted binary. Trying a wildcard instead..." + + EXIM_BINARY=`ls -t /usr/sbin/exim-*-* | head -n1` + + echo "Found: '$EXIM_BINARY'" + fi + + mv -f ${EXIM_BINARY} /usr/sbin/exim + chmod 4755 /usr/sbin/exim + + if [ ! -e /etc/exim.cert ] && [ ! -e /etc/exim.key ]; then + getFile da_exim-cert-config + /usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/exim.key -out /etc/exim.cert -days 9999 -nodes -config ${WORKDIR}/da_exim-cert-config + fi + chmod 600 /etc/exim.cert /etc/exim.key + chown mail:mail /etc/exim.cert /etc/exim.key + + if [ ! -e /etc/exim.conf ]; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.conf $WEBPATH/exim.conf + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.pl $WEBPATH/exim.pl + fi + + if [ ! -e /etc/system_filter.exim ]; then + if [ -e ${CWD}/custom/exim/system_filter.exim ]; then + cp -f ${CWD}/custom/exim/system_filter.exim /etc/system_filter.exim + else + curl ${CURL_CONNECT_OPTIONS} -o /etc/system_filter.exim ${WEBPATH}/system_filter.exim + fi + fi + + if [ "${EXIMCONF_OPT}" = "yes" ]; then + doEximConf + fi + + if [ "${IPV6}" = "0" ]; then + perl -pi -e 's|disable_ipv6=false|disable_ipv6=true|' /etc/exim.conf + if [ -e /etc/exim.variables.conf.default ]; then + perl -pi -e 's|disable_ipv6=false|disable_ipv6=true|' /etc/exim.variables.conf.default + fi + else + perl -pi -e 's|disable_ipv6=true|disable_ipv6=false|' /etc/exim.conf + if [ -e /etc/exim.variables.conf.default ]; then + perl -pi -e 's|disable_ipv6=true|disable_ipv6=false|' /etc/exim.variables.conf.default + fi + fi + + ECV=`exim_conf_version` + EC_MAJ_V=`echo $ECV | cut -d. -f1,2` + ensure_keep_environment ${EC_MAJ_V} + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/exim ]; then + echo "Removing ${INITDDIR}/exim..." + rm -f ${INITDDIR}/exim + fi + echo "Enabling exim in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/exim.service ]; then + cp -f ${CB_CUST_SYSTEMD}/exim.service ${SYSTEMDDIR}/exim.service + else + cp -f ${CB_SYSTEMD}/exim.service ${SYSTEMDDIR}/exim.service + fi + chmod 644 ${SYSTEMDDIR}/exim.service + systemctl daemon-reload + systemctl enable exim.service + else + if [ ! -e ${INITDDIR}/exim ]; then + if [ "${OS}" = "FreeBSD" ]; then + cp ${CWD}/exim_freebsd ${INITDDIR}/exim + chmod 755 ${INITDDIR}/exim + elif [ -e /etc/debian_version ]; then + cp ${CWD}/exim_debian ${INITDDIR}/exim + chmod 755 ${INITDDIR}/exim + update-rc.d exim defaults + else + cp ${CWD}/exim_boot ${INITDDIR}/exim + chmod 755 ${INITDDIR}/exim + /sbin/chkconfig exim on + fi + fi + fi + + if [ -d /etc/logrotate.d ]; then + EXIM_LOGROTATE=/etc/logrotate.d/exim + if [ -s ${EXIM_LOGROTATE} ]; then + if [ "`/usr/bin/stat -c "%a" ${EXIM_LOGROTATE}`" = "755" ]; then + echo "${EXIM_LOGROTATE} was set to 755. Changed to 644" + chmod 644 ${EXIM_LOGROTATE} + fi + else + echo '/var/log/exim/mainlog /var/log/exim/processlog /var/log/exim/rejectlog /var/log/exim/paniclog {' > ${EXIM_LOGROTATE} + echo 'missingok' >> ${EXIM_LOGROTATE} + echo 'sharedscripts' >> ${EXIM_LOGROTATE} + echo '}' >> ${EXIM_LOGROTATE} + chmod 644 ${EXIM_LOGROTATE} + fi + fi + if [ ${OS} = "FreeBSD" ]; then + freebsd_add_newsyslog /var/log/exim/paniclog mail:mail - + freebsd_add_newsyslog /var/log/exim/exim_paniclog mail:mail - + freebsd_add_newsyslog /var/log/exim/rejectlog mail:mail - + freebsd_add_newsyslog /var/log/exim/exim_rejectlog mail:mail - + freebsd_add_newsyslog /var/log/exim/processlog mail:mail - + freebsd_add_newsyslog /var/log/exim/exim_processlog mail:mail - + freebsd_add_newsyslog /var/log/exim/mainlog mail:mail - /var/run/exim.pid + freebsd_add_newsyslog /var/log/exim/exim_mainlog mail:mail - /var/run/exim.pid + fi + + + echo "Exim ${EXIM_VER} Installed." + writeLog "Exim ${EXIM_VER} installed" + + if [ "${SPAMD_OPT}" = "no" ]; then + if [ "${SYSTEMD}" = "yes" ] && [ -e ${SYSTEMDDIR}/spamassassin.service ]; then + echo "Disabling spamassassin in systemd..." + systemctl stop spamassassin.service + systemctl disable spamassassin.service + systemctl daemon-reload + rm -f ${SYSTEMDDIR}/spamassassin.service + fi + if [ "${SYSTEMD}" = "yes" ] && [ -e ${SYSTEMDDIR}/rspamd.service ]; then + echo "Disabling rspamd in systemd..." + systemctl stop rspamd.service + systemctl disable rspamd.service + systemctl daemon-reload + rm -f ${SYSTEMDDIR}/rspamd.service + fi + fi + + removeLockfile + cd ${CWD} + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "Restarting exim." + control_service exim restart + set_service exim ON + + if [ -x /usr/sbin/alternatives ]; then + if ! /usr/sbin/alternatives --list | grep -m1 -q '^mta.*/usr/sbin/exim$'; then + /usr/sbin/alternatives --install /usr/sbin/sendmail mta /usr/sbin/exim 100 + fi + if [ "`readlink /etc/alternatives/mta`" = "/usr/sbin/exim" ]; then + /usr/sbin/alternatives --set mta /usr/sbin/exim + fi + fi + + if [ ! -x /bin/mail ] && [ ! -x /usr/bin/mail ] && [ ! -x /usr/local/bin/mail ]; then + doSnail + fi + + if [ -x /usr/sbin/exim ] && [ -d /usr/bin ]; then + if [ ! -e /usr/bin/newaliases ]; then + ln -s /usr/sbin/exim /usr/bin/newaliases + fi + fi +} + +#################################################### + +doBlockCracking() { + if [ "${BLOCKCRACKING_OPT}" != "yes" ] || [ "${EXIMCONF_OPT}" != "yes" ]; then + do_exit 1 "You cannot enable BlockCracking, because you do not have it set in options.conf file (blockcracking/eximconf options)." + fi + + if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ] || [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then + echo "${boldon}WARNING:${boldoff} Your exim.conf version might be incompatible with BlockCracking. Please make sure that your exim.conf release is 4.3 or higher." + fi + + if [ ! -d ${WORKDIR}/blockcracking ]; then + mkdir -p ${WORKDIR}/blockcracking + chmod 700 ${WORKDIR}/blockcracking + fi + + cd ${WORKDIR} + echo "Enabling BlockCracking..." + + getFile blockcracking/exim.blockcracking-${BLOCKCRACKING_VER}.tar.gz blockcracking exim.blockcracking-${BLOCKCRACKING_VER}.tar.gz + + mkdir -p /etc/exim.blockcracking + tar xzf exim.blockcracking-${BLOCKCRACKING_VER}.tar.gz -C /etc/exim.blockcracking + + BC_DP_SRC=/etc/exim.blockcracking/script.denied_paths.default.txt + if [ -e /etc/exim.blockcracking/script.denied_paths.custom.txt ]; then + echo "Using custom BC script.denied_paths.custom.txt" + BC_DP_SRC=/etc/exim.blockcracking/script.denied_paths.custom.txt + fi + cp -fp ${BC_DP_SRC} /etc/exim.blockcracking/script.denied_paths.txt + + + #the !verify = recipient "hold" option is only available after exim 4.90. + if [ "`version_cmp ${BLOCKCRACKING_VER} 1.10 'BC verify hold check'`" -ge 0 ]; then + EXIMV=`exim_version` + if [ "`version_cmp ${EXIMV} 4.90 'BC verify hold check'`" -le 0 ]; then + echo "Exim version ${EXIMV} too old for the 'hold' callout option. Recommend exim be updated, but removing hold for now" + perl -pi -e 's/,hold$//' /etc/exim.blockcracking/variables.conf + fi + fi + + if [ "$1" != "norestart" ]; then + echo "Restarting exim." + control_service exim restart + fi + + echo "BlockCracking is now enabled." + writeLog "BlockCracking ${BLOCKCRACKING_VER} installed" +} + +#################################################### + +doRemoveBlockCracking() { + if [ "${BLOCKCRACKING_OPT}" != "no" ]; then + do_exit 1 "You cannot remove BlockCracking, because you have enabled in options.conf file." + fi + + cd ${WORKDIR} + echo "Removing BlockCracking..." + + rm -rf /etc/exim.blockcracking + + if [ "$1" != "norestart" ]; then + echo "Restarting exim." + control_service exim restart + fi + + echo "BlockCracking is now removed." + writeLog "BlockCracking removed" +} + +#################################################### + +doEasySpamFighter() { + if [ "${EASY_SPAM_FIGHTER_OPT}" != "yes" ] || [ "${EXIMCONF_OPT}" != "yes" ]; then + do_exit 1 "You cannot enable Easy Spam Fighter, because you do not have it set in options.conf file (easy_spam_fighter/eximconf options)." + fi + + EXIM_SPF_SUPPORT="`/usr/sbin/exim --version | grep -m1 -c SPF`" + EXIM_SRS_SUPPORT="`/usr/sbin/exim --version | grep -m1 -c SRS`" + if [ "${EXIM_SPF_SUPPORT}" = "0" ]; then + do_exit 1 "Your version of Exim does not support SPF, which is needed for Easy Spam Fighter. Please update exim using the CustomBuild script: ./build exim." + fi + + if [ "${EXIM_SRS_SUPPORT}" = "0" ]; then + do_exit 1 "Your version of Exim does not support SRS, which is needed for Easy Spam Fighter. Please update exim using the CustomBuild script: ./build exim." + fi + + if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ] || [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then + echo "${boldon}WARNING:${boldoff} Your exim.conf version might be incompatible with Easy Spam Fighter. Please make sure that your exim.conf release is 4.3 or higher." + fi + + if [ ! -d ${WORKDIR}/easy_spam_fighter ]; then + mkdir -p ${WORKDIR}/easy_spam_fighter + chmod 700 ${WORKDIR}/easy_spam_fighter + fi + + cd ${WORKDIR} + echo "Enabling Easy Spam Fighter..." + + getFile easy_spam_fighter/exim.easy_spam_fighter-${EASY_SPAM_FIGHTER_VER}.tar.gz easy_spam_figther exim.easy_spam_fighter-${EASY_SPAM_FIGHTER_VER}.tar.gz + + mkdir -p /etc/exim.easy_spam_fighter + tar xzf exim.easy_spam_fighter-${EASY_SPAM_FIGHTER_VER}.tar.gz -C /etc/exim.easy_spam_fighter + + if [ -s /etc/virtual/esf_skip_ip ] && [ ! -s /etc/virtual/esf_skip_ips ]; then + mv -f /etc/virtual/esf_skip_ip /etc/virtual/esf_skip_ips + fi + + if [ "$1" != "norestart" ]; then + echo "Restarting exim." + control_service exim restart + fi + + echo "Easy Spam Fighter is now enabled." + writeLog "EasySpamFighter ${EASY_SPAM_FIGHTER_VER} installed" +} + +#################################################### + +doRemoveEasySpamFighter() { + if [ "${EASY_SPAM_FIGHTER_OPT}" != "no" ]; then + do_exit 1 "You cannot remove Easy Spam Fighter, because you have enabled in options.conf file." + fi + + cd ${WORKDIR} + echo "Removing Easy Spam Fighter..." + + rm -rf /etc/exim.easy_spam_fighter + + if [ "$1" != "norestart" ]; then + echo "Restarting exim." + control_service exim restart + fi + + echo "Easy Spam Fighter is now removed." + writeLog "EasySpamFigther removed" +} + +#################################################### + +do_rspamd_conf() { + if [ "${SPAMD_OPT}" != "rspamd" ]; then + do_exit 1 "spamd=rspamd is not set in options.conf." + fi + + cd ${WORKDIR} + echo "Enabling Rspamd Config..." + + RSDGZ=rspamd_conf-${RSPAMD_CONF_VER}.tar.gz + getFile easy_spam_fighter/rspamd/${RSPAMD_CONF_VER}/${RSDGZ} rspamd_conf ${RSDGZ} + + mkdir -p /etc/exim/rspamd + tar xzf ${RSDGZ} -C /etc/exim/rspamd + + if [ "$1" != "norestart" ]; then + echo "Restarting exim." + control_service exim restart + fi + + echo "Rspamd config is now enabled." + writeLog "rspamd_config ${RSPAMD_CONF_VER} installed" +} + +do_remove_rspamd_conf() { + if [ "${SPAMD_OPT}" = "rspamd" ]; then + do_exit 1 "You cannot remove rspamd_config, because you have enabled in options.conf file." + fi + + cd ${WORKDIR} + echo "Removing Rspamd Config..." + + remove_directory /etc/exim/rspamd + + if [ "$1" != "norestart" ]; then + echo "Restarting exim." + control_service exim restart + fi + + echo "Rspamd Config is now removed." + writeLog "rspamd_config removed" +} + +doGrubConf() { + if [ "${OS}" != "FreeBSD" ]; then + GRUB_CONF_LOCATIONS=`ls /boot/grub2/grub.cfg /boot/efi/EFI/redhat/grub.cfg /boot/efi/EFI/centos/grub.cfg /boot/efi/EFI/rocky/grub.cfg /boot/grub/grub.cfg 2>/dev/null` + GRUB_CONF_MODIFIED=false + HAS_XFS_ROOT=false + if mount | grep ' / ' | grep -m1 -q ' xfs '; then + HAS_XFS_ROOT=true + fi + if [ -x /usr/sbin/grub2-mkconfig ]; then + GRUB_MKCONFIG=/usr/sbin/grub2-mkconfig + elif [ -x /usr/sbin/grub-mkconfig ]; then + GRUB_MKCONFIG=/usr/sbin/grub-mkconfig + fi + if [ ! -d /sys/fs/cgroup/user.slice ] && [ -s /etc/default/grub ] && [ "${OS_CENTOS_VER}" != "6" ] && [ "${OS_CENTOS_VER}" != "7" ] && [ "${CLOUDLINUX_OPT}" = "no" ]; then + if [ ! -z "${GRUB_MKCONFIG}" ]; then + if [ -d /etc/default/grub.d ]; then + if ! grep -m1 -q 'systemd.unified_cgroup_hierarchy' /etc/default/grub; then + if ! grep -m1 -q 'systemd.unified_cgroup_hierarchy' /etc/default/grub.d/99-directadmin.cfg 2>/dev/null; then + if ! ${HAS_XFS_ROOT}; then + echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} systemd.unified_cgroup_hierarchy=1 psi=1"' > /etc/default/grub.d/99-directadmin.cfg + elif ! grep -m1 -q 'rootflags' /etc/default/grub; then + echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} rootflags=uquota,pquota systemd.unified_cgroup_hierarchy=1 psi=1"' > /etc/default/grub.d/99-directadmin.cfg + else + echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} systemd.unified_cgroup_hierarchy=1 psi=1"' > /etc/default/grub.d/99-directadmin.cfg + fi + GRUB_CONF_MODIFIED=true + fi + fi + if ${GRUB_CONF_MODIFIED}; then + find /boot -name 'grub.cfg' -exec ${GRUB_MKCONFIG} -o {} \; + fi + else + if ! grep -m1 -q 'systemd.unified_cgroup_hierarchy' /etc/default/grub; then + if ! ${HAS_XFS_ROOT}; then + echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} systemd.unified_cgroup_hierarchy=1 psi=1"' >> /etc/default/grub + elif ! grep -m1 -q 'rootflags' /etc/default/grub; then + echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} rootflags=uquota,pquota systemd.unified_cgroup_hierarchy=1 psi=1"' >> /etc/default/grub + else + echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} systemd.unified_cgroup_hierarchy=1 psi=1"' >> /etc/default/grub + fi + GRUB_CONF_MODIFIED=true + fi + if ${GRUB_CONF_MODIFIED}; then + find /boot -name 'grub.cfg' -exec ${GRUB_MKCONFIG} -o {} \; + fi + fi + fi + fi + if [ -s /etc/default/grub ] && ${HAS_XFS_ROOT}; then + if ! grep -m1 -q 'rootflags=uquota,pquota' /etc/default/grub; then + if [ ! -z "${GRUB_MKCONFIG}" ]; then + for grub_config in "${GRUB_CONF_LOCATIONS}"; do { + if ! grep -m1 -q 'rootflags' /etc/default/grub; then + if ${HAS_XFS_ROOT}; then + echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} rootflags=uquota,pquota"' >> /etc/default/grub + fi + GRUB_CONF_MODIFIED=true + find /boot -name 'grub.cfg' -exec ${GRUB_MKCONFIG} -o {} \; + fi + } + done + fi + fi + fi + if ${GRUB_CONF_MODIFIED}; then + echo "Grub configuration re-generated. Please reboot the box." + else + echo "No grub changes needed." + fi + fi +} +#################################################### + +doEnsureEximFile() { + if [ "$1" != "" ]; then + if [ ! -e $1 ]; then + echo "Creating file $1..." + touch $1 + chown mail:mail $1 + chmod 600 $1 + fi + fi +} + +#################################################### + +doEximConf() { + if [ "${EXIMCONF_OPT}" != "yes" ]; then + do_exit 1 "You cannot update Exim configuration files, because you do not have it set in options.conf file." + fi + EXIMV=`exim_version` + EXIMV_MINORV=`echo "${EXIMV}" | cut -d'.' -f2` + if [ ${EXIMV_MINORV} -lt 94 ] && [ "`version_cmp ${EXIM_CONF_VER} 4.5.24 'Exim conf >4.5.23 incompatibility check'`" -ge 0 ]; then + if [ "${EXIMCONF_RELEASE_OPT}" = "4.5" ]; then + EXIM_CONF_VER=4.5.23 + fi + echo "Downgrading exim configuration version to ${EXIM_CONF_VER} as the newest one requires exim 4.94 or newer." + elif [ ${EXIMV_MINORV} -lt 94 ] && [ "`version_cmp ${EXIM_CONF_VER} 4.5.24 'Exim conf >4.5.23 incompatibility check'`" -lt 0 ]; then + if [ "${EXIMCONF_RELEASE_OPT}" != "4.5" ]; then + do_exit 1 "You cannot update Exim configuration files, because eximconf_release=4.5 is required for exim 4.94+." + fi + EXIM_CONF_VER=4.5.24 + echo "Selecting exim.conf 4.5.24 automatically, as older versions are not supported with exim 4.94 and newer." + elif [ ${EXIMV_MINORV} -lt 95 ]; then + EXIM_CONF_VER=4.5.35 + echo "Selecting exim.conf 4.5.35 automatically, as older versions are not supported with exim 4.95 and newer." + fi + + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.conf.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.conf-SpamBlockerTechnology-v${EXIM_CONF_VER}.txt + + #Don't overwrite exim.conf if curl failed (empty exim.conf file) + if [ -s /etc/exim.conf.cb20 ]; then + mv -f /etc/exim.conf.cb20 /etc/exim.conf + else + rm -f /etc/exim.conf.cb20 + echo "Download of /etc/exim.conf failed" + fi + + #used to determine if we need to remove some variables from the exim.conf or exim.variables.conf. + EXIMV="`exim_version`" + + # Update system_filter.exim + if [ -e ${CWD}/custom/exim/system_filter.exim ]; then + cp -f ${CWD}/custom/exim/system_filter.exim /etc/system_filter.exim + else + curl ${CURL_CONNECT_OPTIONS} -o /etc/system_filter.exim ${WEBPATH}/system_filter.exim + fi + + #Download additional files for exim.conf + if [ "${EXIMCONF_RELEASE_OPT}" != "2.1" ] && [ "${EXIMCONF_RELEASE_OPT}" != "4.2" ]; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.strings.conf.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.strings.conf + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.variables.conf.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.variables.conf.default + + EXIM_CONF_MERGED=/etc/exim.variables.conf.merged + EXIM_CONF_DEFAULT=/etc/exim.variables.conf.default + EXIM_CONF_CUSTOM=/etc/exim.variables.conf.custom + + if [ -s /etc/exim.strings.conf.cb20 ]; then + mv -f /etc/exim.strings.conf.cb20 /etc/exim.strings.conf + else + rm -f /etc/exim.strings.conf.cb20 + echo "Download of /etc/exim.strings.conf failed" + fi + + if [ -s /etc/exim.variables.conf.cb20 ]; then + mv -f /etc/exim.variables.conf.cb20 ${EXIM_CONF_DEFAULT} + #Make dovecot listen on port 10025 if dovecot_proxy is enabled + DOVECOT_PROXY=`getDA_Opt dovecot_proxy 0` + if [ ${DOVECOT_PROXY} -ne 0 ]; then + if ! grep -m1 -q '^daemon_smtp_ports.*10025' ${EXIM_CONF_DEFAULT}; then + perl -pi -e 's|^daemon_smtp_ports=25 : 587 : 465|daemon_smtp_ports=25 : 587 : 465 : 10025|g' ${EXIM_CONF_DEFAULT} + fi + fi + else + rm -f /etc/exim.variables.conf.cb20 + echo "Download of ${EXIM_CONF_DEFAULT} failed" + fi + + if [ -s ${EXIM_CONF_DEFAULT} ]; then + if [ ${CPU_CORES} -gt 5 ]; then + perl -pi -e "s|^queue_run_max=5$|queue_run_max=${CPU_CORES}|g" ${EXIM_CONF_DEFAULT} + fi + if [ "${IPV6}" = "0" ]; then + perl -pi -e 's|disable_ipv6=false|disable_ipv6=true|' ${EXIM_CONF_DEFAULT} + else + perl -pi -e 's|disable_ipv6=true|disable_ipv6=false|' ${EXIM_CONF_DEFAULT} + fi + else + echo ""; + echo "${boldon}*** ${EXIM_CONF_DEFAULT} does not exist or is empty ***${boldoff}"; + echo ""; + fi + + doSslConfigurationEmail + + if [ ! -s /etc/exim.variables.conf ] && [ -s ${EXIM_CONF_DEFAULT} ]; then + /bin/cp -f ${EXIM_CONF_DEFAULT} /etc/exim.variables.conf + fi + + ######################################## + #need to do a merge here with exim.variables.conf.default and exim.variables.conf.custom, and save to exim.variables.conf + + echo '#Do not edit this file directly' > ${EXIM_CONF_MERGED} + echo "#edit ${EXIM_CONF_CUSTOM}" >> ${EXIM_CONF_MERGED} + + #because anything from custom, include extras (not in default), will always go in. + if [ -s ${EXIM_CONF_CUSTOM} ]; then + cat ${EXIM_CONF_CUSTOM} >> ${EXIM_CONF_MERGED} + fi + + while read line; do + i=`echo $line | cut -d= -f1 | xargs` + if [ -e ${EXIM_CONF_CUSTOM} ]; then + if [ "`grep -m1 -c "^${i}[ ]*=" ${EXIM_CONF_CUSTOM}`" = "1" ]; then + continue + fi + fi + + VALUE="`grep -m1 "^${i}[ ]*=" ${EXIM_CONF_DEFAULT} | cut -d= -f2 | xargs`" + if [ ! -z "${i}" ]; then + echo "${i}=${VALUE}" >> ${EXIM_CONF_MERGED} + fi + done < $EXIM_CONF_DEFAULT + + mv -f ${EXIM_CONF_MERGED} /etc/exim.variables.conf + + MAIL_SNI_OPT=`getDA_Opt mail_sni 1` + if [ "${MAIL_SNI_OPT}" -ge 1 ]; then + REPLACE_EXIM_TLS=false + if grep -m1 -q '^tls_certificate *= */etc/exim.\cert' /etc/exim.variables.conf; then + EXIM_TLS_FILE=/etc/exim.variables.conf + REPLACE_EXIM_TLS=true + elif grep -m1 -q '^tls_certificate *= */etc/exim.\cert' /etc/exim.conf; then + EXIM_TLS_FILE=/etc/exim.conf + REPLACE_EXIM_TLS=true + fi + if ${REPLACE_EXIM_TLS}; then + perl -pi -e 's|^tls_certificate *\= */etc/exim\.cert|tls_certificate=\$\{if exists\{/etc/virtual/snidomains\}\{\$\{lookup\{\$tls_in_sni\}nwildlsearch\{/etc/virtual/snidomains\}\{\$\{if exists\{/usr/local/directadmin/data/users/\$\{extract\{1\}\{:\}\{\$value\}\}/domains/\$\{extract\{2\}\{:\}\{\$value\}\}.cert.combined\}\{/usr/local/directadmin/data/users/\$\{extract\{1\}\{:\}\{\$value\}\}/domains/\$\{extract\{2\}\{:\}\{\$value\}\}.cert.combined\}\{/etc/exim.cert\}\}\}\{/etc/exim.cert\}\}\}\{/etc/exim.cert\}\}|' ${EXIM_TLS_FILE} + perl -pi -e 's|^tls_privatekey *\= */etc/exim\.key|tls_privatekey=\$\{if exists\{/etc/virtual/snidomains\}\{\$\{lookup\{\$tls_in_sni\}nwildlsearch\{/etc/virtual/snidomains\}\{\$\{if exists\{/usr/local/directadmin/data/users/\$\{extract\{1\}\{:\}\{\$value\}\}/domains/\$\{extract\{2\}\{:\}\{\$value\}\}.key\}\{/usr/local/directadmin/data/users/\$\{extract\{1\}\{:\}\{\$value\}\}/domains/\$\{extract\{2\}\{:\}\{\$value\}\}.key\}\{/etc/exim.key\}\}\}\{/etc/exim.key\}\}\}\{/etc/exim.key\}\}|' ${EXIM_TLS_FILE} + fi + fi + if ! grep -m1 -q '^tls_dhparam' /etc/exim.variables.conf; then + if [ ! -s /etc/exim_dh.pem ]; then + ensure_dhparam /etc/exim_dh.pem + chown mail:mail /etc/exim_dh.pem + chmod 400 /etc/exim_dh.pem + fi + if [ -s /etc/exim_dh.pem ]; then + echo 'tls_dhparam = /etc/exim_dh.pem' >> /etc/exim.variables.conf + echo 'tls_dh_max_bits = 4096' >> /etc/exim.variables.conf + fi + fi + EXIM_SRS_CONF=/etc/exim.srs.conf + EXIM_SRS_FORWARD_CONF=/etc/exim.srs.forward.conf + if [ "${EXIM_SRS_OPT}" = "yes" ]; then + if [ ! -s ${EXIM_SRS_CONF} ]; then + echo -n "hide srs_config = " > ${EXIM_SRS_CONF} + /usr/bin/openssl rand -base64 48 >> ${EXIM_SRS_CONF} + fi + + if [ ! -e ${EXIM_SRS_FORWARD_CONF} ]; then + echo "srs = forward" > ${EXIM_SRS_FORWARD_CONF} + fi + fi + else + #older exim.conf file changes: + if [ -s /etc/exim.conf ]; then + if [ "${IPV6}" = "0" ]; then + perl -pi -e 's|disable_ipv6=false|disable_ipv6=true|' /etc/exim.conf + else + perl -pi -e 's|disable_ipv6=true|disable_ipv6=false|' /etc/exim.conf + fi + fi + fi + + ensure_keep_environment ${EXIMCONF_RELEASE_OPT} + + + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.pl.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.pl.${EXIM_PL_VER} + + if [ -s /etc/exim.pl.cb20 ]; then + mv -f /etc/exim.pl.cb20 /etc/exim.pl + else + rm -f /etc/exim.pl.cb20 + echo "Download of /etc/exim.pl failed" + fi + + chmod 755 /etc/exim.pl + if [ ! -e /etc/virtual/limit ]; then + echo "/etc/virtual/limit not found. Creating with a value of 0..." + echo "0" > /etc/virtual/limit + chown mail:mail /etc/virtual/limit + fi + if [ ! -d /etc/virtual/usage ]; then + echo "/etc/virtual/usage not found. Creating..." + mkdir -p /etc/virtual/usage + chown mail:mail /etc/virtual/usage + fi + doEnsureEximFile /etc/virtual/bad_sender_hosts + doEnsureEximFile /etc/virtual/bad_sender_hosts_ip + doEnsureEximFile /etc/virtual/blacklist_domains + doEnsureEximFile /etc/virtual/blacklist_senders + doEnsureEximFile /etc/virtual/whitelist_domains + doEnsureEximFile /etc/virtual/whitelist_hosts + doEnsureEximFile /etc/virtual/whitelist_hosts_ip + doEnsureEximFile /etc/virtual/whitelist_senders + doEnsureEximFile /etc/virtual/use_rbl_domains + doEnsureEximFile /etc/virtual/skip_av_domains + doEnsureEximFile /etc/virtual/skip_rbl_domains + + if [ "${DOVECOT_OPT}" = "yes" ] && [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ]; then + cd ${WORKDIR} + if [ -e exim.conf.dovecot.patch ]; then + patch -d/ -p0 < exim.conf.dovecot.patch + fi + fi + + if [ "${PIGEONHOLE_OPT}" = "yes" ]; then + cd ${WORKDIR} + if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ]; then + getFile patches/exim.conf.pigeonhole.patch eximpigeonholepatch + cd /etc + patch -p0 < ${WORKDIR}/patches/exim.conf.pigeonhole.patch + cd ${WORKDIR} + else + perl -pi -e 's#transport = virtual_localdelivery#transport = dovecot_lmtp_udp#' /etc/exim.conf + fi + else + #we have LMTP enabled by default for 4.3+ + if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ] || [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then + perl -pi -e 's#transport = dovecot_lmtp_udp#transport = virtual_localdelivery#' /etc/exim.conf + fi + fi + + if [ "${BLOCKCRACKING_OPT}" = "yes" ]; then + doBlockCracking norestart + else + rm -rf /etc/exim.blockcracking + fi + + if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then + doEasySpamFighter norestart + else + rm -rf /etc/exim.easy_spam_fighter + fi + + if [ "${CAGEFS_OPT}" = "yes" ]; then + echo "force_command" > /etc/exim.cagefs.pipe.conf + echo 'command = /bin/cagefs_enter $address_pipe' >> /etc/exim.cagefs.pipe.conf + chmod 644 /etc/exim.cagefs.pipe.conf + else + rm -f /etc/exim.cagefs.pipe.conf + fi + + if [ "${SPAMD_OPT}" = "no" ]; then + rm -f /etc/exim.spamassassin.conf + rm -f /etc/exim.spamd.conf + rm -f /etc/exim.spamd.load.conf + if [ -d /etc/exim/rspamd ]; then + if [ ! -d /etc/exim/rspamd_disabled ]; then + echo "Renaming /etc/exim/rspamd to /etc/exim/rspamd_disabled..." + mv /etc/exim/rspamd /etc/exim/rspamd_disabled + else + echo "Removing old /etc/exim/rspamd directory..." + rm -rf /etc/exim/rspamd + fi + fi + elif [ "${SPAMD_OPT}" = "rspamd" ]; then +# we don't need the below as the spamd_address is in /etc/exim/rspamd/variables.conf. +# echo "Enabling rspamd in /etc/exim.spamd.load.conf..." +# echo 'spamd_address = 127.0.0.1 11333 retry=20s variant=rspamd' > /etc/exim.spamd.load.conf +# cp -fv ${SPAMD_CONF} /etc/exim.spamd.conf + + do_rspamd_conf norestart + + elif [ "${SPAMD_OPT}" = "spamassassin" ]; then + if [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.6 'exim.conf ver check for ACL spam check'`" -lt 0 ]; then + perl -pi -e 's|#.include_if_exists /etc/exim.spamassassin.conf|.include_if_exists /etc/exim.spamassassin.conf|' /etc/exim.conf + if [ ! -s /etc/exim.spamassassin.conf ]; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.spamassassin.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.spamassassin.conf + chmod 644 /etc/exim.spamassassin.conf + fi + rm -f /etc/exim.spamd.conf + else + echo "Enabling SpamAssassin in /etc/exim.spamd.load.conf..." + echo 'spamd_address = 127.0.0.1 783 retry=20s' > /etc/exim.spamd.load.conf + cp -fv ${SPAMD_CONF} /etc/exim.spamd.conf + fi + if [ -d /etc/exim/rspamd ]; then + if [ ! -d /etc/exim/rspamd_disabled ]; then + echo "Renaming /etc/exim/rspamd to /etc/exim/rspamd_disabled..." + mv /etc/exim/rspamd /etc/exim/rspamd_disabled + else + echo "Removing old /etc/exim/rspamd directory..." + rm -rf /etc/exim/rspamd + fi + fi + fi + + if [ ! -s ${DACONF_FILE} ]; then + DKIM_ENABLED=true + elif /usr/local/directadmin/directadmin c | grep -m1 -q '^dkim=0$'; then + DKIM_ENABLED=false + else + DKIM_ENABLED=true + fi + + if ${DKIM_ENABLED}; then + DKIM_SELECTOR="x" + if /usr/local/directadmin/directadmin c | grep -m1 -q '^dkim_selector='; then + DKIM_SELECTOR="`/usr/local/directadmin/directadmin c | grep -m1 '^dkim_selector=' | cut -d'=' -f2`" + fi + if [ "${DKIM_SELECTOR}" = "" ]; then + DKIM_SELECTOR="x" + fi + GET_EXIM_DKIM_CONF=0 + if [ ! -s /etc/exim.dkim.conf ]; then + GET_EXIM_DKIM_CONF=1 + else + #older versions of exim do not support ret=key in lsearch + EXIMV=`exim_version` + if [ "`version_cmp ${EXIMV} 4.94 'exim ver for <4.94'`" -lt 0 ]; then + LATEST_DKIM_VER=1.3 + else + LATEST_DKIM_VER=`getVer exim_dkim_conf` + fi + LIVE_DKIM_VER=`exim_dkim_conf_version` + #if [ "`version_cmp ${LIVE_DKIM_VER} ${LATEST_DKIM_VER} 'exim.dkim.conf version check'`" -lt 0 ]; then + if [ "${LIVE_DKIM_VER}" != "${LATEST_DKIM_VER}" ]; then + GET_EXIM_DKIM_CONF=1 + fi + fi + + if [ "$GET_EXIM_DKIM_CONF" = "1" ]; then + CUST_EXIM_DKIM_CONF=${CWD}/custom/exim/exim.dkim.conf + if [ -e ${CUST_EXIM_DKIM_CONF} ]; then + echo "${boldon}Copying custom ${CUST_EXIM_DKIM_CONF} to /etc/exim.dkim.conf${boldoff}" + /bin/cp -f ${CUST_EXIM_DKIM_CONF} /etc/exim.dkim.conf + else + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.dkim.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.dkim.conf + fi + fi + + perl -pi -e "s|dkim_selector \= .*|dkim_selector = ${DKIM_SELECTOR}|g" /etc/exim.dkim.conf + else + rm -f /etc/exim.dkim.conf + fi + + if [ "${CLAMAV_EXIM_OPT}" = "yes" ] && [ "${CLAMAV_OPT}" = "yes" ]; then + perl -pi -e 's|#.include_if_exists /etc/exim.clamav.load.conf|.include_if_exists /etc/exim.clamav.load.conf|' /etc/exim.conf + perl -pi -e 's|#.include_if_exists /etc/exim.clamav.conf|.include_if_exists /etc/exim.clamav.conf|' /etc/exim.conf + if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then + if [ ! -s /etc/exim.clamav.load.conf ]; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.clamav.load.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.load.conf + fi + if [ ! -s /etc/exim.clamav.conf ]; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.clamav.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.conf + fi + fi + else + rm -f /etc/exim.clamav.load.conf + rm -f /etc/exim.clamav.conf + fi + + #include magicspam + if [ -x /usr/share/magicspam/bin/activate_module ]; then + /usr/share/magicspam/bin/activate_module + fi + + if [ "${SPAMD_OPT}" = "spamassassin" ] && [ "${SYSTEMD}" = "yes" ]; then + set_service spamd ON + elif [ "${SPAMD_OPT}" != "spamassassin" ]; then + set_service spamd delete + fi + + if [ "${SPAMD_OPT}" = "rspamd" ]; then + set_service rspamd ON + else + set_service rspamd delete + fi + + echo "Restarting exim." + control_service exim restart + + COUNT_LMTP=0 + if [ -e /etc/exim.conf ]; then + COUNT_LMTP=`grep -c 'transport = dovecot_lmtp_udp' /etc/exim.conf` + fi + + if [ ! -e /etc/dovecot/conf/lmtp.conf ] && [ "${COUNT_LMTP}" = "1" ] && [ -e /etc/dovecot/dovecot.conf ]; then + if ! grep -q 'protocol lmtp' /etc/dovecot/dovecot.conf; then + echo "${boldon}WARNING:${boldoff} make sure you have LMTP enabled in dovecot.conf, './build dovecot_conf' should fix it." + fi + fi + + writeLog "exim.conf installed" +} + +#################################################### + +compile_mysql_binary() { + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + MYSQLURL=${WEBPATH_SERVICES}/all/mariadb/${MARIADB_OPT}/${MARIADB_VER} + MYSQLSRC=mariadb-${MARIADB_VER} + + getFile mariadb/${MARIADB_OPT}/${MARIADB_VER}/${MYSQLSRC}.tar.gz mariadb${MARIADB_OPT} ${MYSQLSRC}.tar.gz + + if [ "${OS}" = "FreeBSD" ] && [ "${MARIADB_OPT}" = "10.3" ]; then + #https://jira.mariadb.org/browse/MDEV-20248 + MARIADB_JEMALLOC_HELPER_PATCH=mariadb-10.3-jemalloc_helper.h-patch + getFile patches/${MARIADB_JEMALLOC_HELPER_PATCH} ${MARIADB_JEMALLOC_HELPER_PATCH} + fi + else + MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_OPT}/${MYSQL_VER} + MYSQLSRC=mysql-${MYSQL_VER} + + getFile mysql/${MYSQL_OPT}/${MYSQL_VER}/${MYSQLSRC}.tar.gz mysql${MYSQL_OPT} ${MYSQLSRC}.tar.gz + fi + + if [ -e ${MYSQLSRC} ]; then + echo "Found old ${MYSQLSRC}, removing ..." + rm -rf ${MYSQLSRC} + fi + + echo "Extracting ${MYSQLSRC}.tar.gz ... " + + tar xzf ${MYSQLSRC}.tar.gz --no-same-owner + if [ $? -ne 0 ]; then + do_exit 1 "Failed to extract: ${MYSQLSRC}.tar.gz. Exiting..." + fi + cd ${MYSQLSRC} + if [ -s plugin/auth_pam/testing/pam_mariadb_mtr.c ] && [ "${OS}" = "FreeBSD" ]; then + perl -pi -e 's|\(uint\)|(unsigned int)|g' plugin/auth_pam/testing/pam_mariadb_mtr.c + fi + + if [ -s plugin/auth_pam/mapper/pam_user_map.c ] && [ "${OS}" = "FreeBSD" ]; then + perl -pi -e 's|security/pam_ext.h|security/pam_appl.h|g' plugin/auth_pam/mapper/pam_user_map.c + fi + + if [ "${OS}" = "FreeBSD" ]; then + #ports patches + mkdir -p ports_patches + FBSD_M57_PATCHES=freebsd-mysql57-server-patches.tar.gz + + if [ "${MYSQL_OPT}" = "5.7" ] && [ "${MYSQL_INST_OPT}" = "mysql" ]; then + getFile mysql/${MYSQL_OPT}/${FBSD_M57_PATCHES} freebsd_mysql57_patches ${MYSQLSRC}/ports_patches/${FBSD_M57_PATCHES} + + cd ${CWD}/${MYSQLSRC}/ports_patches + if [ ! -s ${FBSD_M57_PATCHES} ]; then + echo "CANNOT FIND ${FBSD_M57_PATCHES} after download" + else + tar xvzf ${FBSD_M57_PATCHES}; + cd .. + echo "Applying MySQL 5.7 patches for FreeBSD:" + pwd + for i in `ls ports_patches/patch-*`; do { + echo $i + patch -p0 < $i + }; + done + fi + fi + + cd ${CWD}/${MYSQLSRC} + fi + + CFLAGS=-DHAVE_BROKEN_REALPATH + if [ "${OS}" != "FreeBSD" ]; then + if [ ! -e /usr/lib/libaio.so.1 ] && [ ! -e /lib64/libaio.so.1 ] && [ ! -e /lib/libaio.so.1 ] && [ ! -e /lib/x86_64-linux-gnu/libaio.so.1 ] && [ ! -e /lib/i386-linux-gnu/libaio.so.1 ]; then + echo "Cannot find libaio.so.1. Please install libaio" + if [ -e /etc/debian_version ]; then + echo "apt-get install libaio1 libaio-dev" + else + echo "yum install libaio" + fi + return + fi + fi + if [ -e /etc/debian_version ] || [ "${OS}" = "FreeBSD" ]; then + if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ]; then + echo "Cannot find cmake, please install it." + if [ -e /etc/debian_version ]; then + echo "apt-get install cmake" + elif [ "${OS}" = "FreeBSD" ]; then + echo "${PKG_INSTALL} cmake" + fi + + echo "If your package manager is not working, see: https://help.directadmin.com/item.php?id=494" + return + fi + + if [ ! -x /usr/local/bin/pkg-config ]; then + pkg install -y pkgconf + fi + if [ ! -s /usr/local/include/libunwind.h ]; then + pkg install -y libunwind + fi + fi + + if [ ! -z "${MARIADB_JEMALLOC_HELPER_PATCH}" ]; then + if [ -s ../patches/${MARIADB_JEMALLOC_HELPER_PATCH} ]; then + patch -p0 < ../patches/${MARIADB_JEMALLOC_HELPER_PATCH} + fi + fi + + if [ "${OS}" = "FreeBSD" ] && [ -s storage/maria/libmarias3/src/marias3.c ]; then + if ! grep -m1 -q '' storage/maria/libmarias3/src/marias3.c; then + perl -pi -e 's|#include |#include \n#include |g' storage/maria/libmarias3/src/marias3.c + fi + fi + + if [ -e ${WORKDIR}/custom/mysql/cmake.mysql ]; then + ${WORKDIR}/custom/mysql/cmake.mysql + else + CMAKE_APPEND="" + if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then + CMAKE_APPEND=" -DDOWNLOAD_BOOST=ON -DWITH_BOOST=/usr/local/boost_mysql -DFORCE_INSOURCE_BUILD=1" + fi + if [ "${OS}" = "FreeBSD" ] && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + #Otherwise compilation fails with unknown ld option -plugin + CMAKE_APPEND=" -DPLUGIN_TOKUDB=NO -DPLUGIN_ROCKSDB=NO -DWITHOUT_MROONGA=YES -DFORCE_INSOURCE_BUILD=1" + fi + cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 \ + -DWITH_FEDERATED_STORAGE_ENGINE=1 \ + -DWITH_ZLIB=system -DWITH_EXTRA_CHARSETS=all${CMAKE_APPEND} + fi + + echo "Done. Making ${MYSQLSRC}..." + while echo "Trying to make ${MYSQLSRC}..."; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Packaging ${MYSQLSRC}..." + ./scripts/make_binary_distribution + + echo "Moving ${MYSQLSRC}-*.tar.gz to ${WORKDIR} ..." + mv -f ${MYSQLSRC}-*.tar.gz .. + cd .. + echo "Done." + + writeLog "${MYSQLSRC}.tar.gz compiled" +} + +all_databases() { + if [ "$MYSQLUSER" = "" ] || [ "$MYSQLPASSWORD" = "" ]; then + do_exit 1 "all_databases: user or password is blank" + fi + + if [ -d ${MYSQL_DATA} ]; then + initMySQL + + #Assumes that MYSQLUSER and MYSQLPASSWORD are already set. + CMD="echo 'SHOW DATABASES' | $MYSQL_BIN --defaults-extra-file=${DA_MY_CNF}" + eval $CMD | grep -v '^Database$' | grep -v '^information_schema$' | grep -v '^performance_schema$' + fi +} + +doMySQLback() { + if [ "${MYSQL_BACKUP_OPT}" = "yes" ] && [ -d ${MYSQL_DATA} ]; then + initMySQL + MYSQLDUMP=/usr/local/mysql/bin/mysqldump + if [ ! -e $MYSQLDUMP ]; then + MYSQLDUMP=/usr/bin/mysqldump + fi + if [ ! -e $MYSQLDUMP ]; then + if [ -d "${MYSQL_DATA}" ]; then + echo "Cannot find $MYSQLDUMP" + fi + return + fi + + if [ ! -d ${MYSQL_BACKUP_DIR_OPT} ]; then + mkdir -p ${MYSQL_BACKUP_DIR_OPT} + fi + chmod 700 ${MYSQL_BACKUP_DIR_OPT} + + EXTRA_MYSQLDUMP_OPTIONS="" + if /usr/local/directadmin/directadmin c | grep -m1 -q '^extra_mysqldump_options='; then + EXTRA_MYSQLDUMP_OPTIONS="`/usr/local/directadmin/directadmin c | grep -m1 '^extra_mysqldump_options=' | cut -d'=' -f2`" + fi + + PIGZ_DA_OPT=`getDA_Opt pigz` + PIGZ_BIN=`getDA_Opt pigz_bin /usr/local/bin/pigz` + if [ ! -z "${PIGZ_DA_OPT}" ]; then + if [ ${PIGZ_DA_OPT} -gt 0 ] && [ "${PIGZ_BIN}" != "" ] && [ -e "${PIGZ_BIN}" ]; then + GZIP_BIN="${PIGZ_BIN} -p ${PIGZ_DA_OPT}" + else + GZIP_BIN="gzip" + fi + else + GZIP_BIN="gzip" + fi + +# sysbk code + if [ -d ${MYSQL_DATA} ]; then + cd ${MYSQL_DATA} + for i in `all_databases`; do + printf "\tDumping database $i \n" + printf "\tDumping database $i \n" >> ${WORKDIR}/mysql_backups.log + + if [ "${MYSQL_BACKUP_GZIP_OPT}" = "yes" ]; then + + $MYSQLDUMP --defaults-extra-file=${DA_MY_CNF} --add-drop-database --databases --routines -f ${EXTRA_MYSQLDUMP_OPTIONS} -l $i | ${GZIP_BIN} > ${MYSQL_BACKUP_DIR_OPT}/$i.sql.gz + if [ $? -ne 0 ]; then + echo "BACKUP OF ${i} FAILED!" + fi + chmod 660 ${MYSQL_BACKUP_DIR_OPT}/$i.sql.gz + else + $MYSQLDUMP --defaults-extra-file=${DA_MY_CNF} --add-drop-database --databases --routines -f ${EXTRA_MYSQLDUMP_OPTIONS} -l $i > ${MYSQL_BACKUP_DIR_OPT}/$i.sql + if [ $? -ne 0 ]; then + echo "BACKUP OF ${i} FAILED!" + fi + chmod 660 ${MYSQL_BACKUP_DIR_OPT}/$i.sql + fi + done + else + echo "${MYSQL_DATA} directory does not exist, nothing to backup" + fi + fi +} + +backup_libmysqlclient() { + if [ ! -e /etc/debian_version ]; then + return + fi + + LDD=/usr/bin/ldd + LIB_PATH=/usr/local/mysql/lib + if ${LDD} ${DA_BIN} 2>/dev/null | grep -m1 -q libmysqlclient.so; then + LIB_NAME=`${LDD} ${DA_BIN} 2>/dev/null | grep -m1 'libmysqlclient.so' | awk '{ print $1; }'` + CLIENT_LIB=`${LDD} ${DA_BIN} 2>/dev/null | grep -m1 'libmysqlclient.so' | awk '{ print $3; }'` + if [ -s "${CLIENT_LIB}" ]; then + echo "Backing up ${CLIENT_LIB} to ${WORKDIR}/${LIB_NAME}" + cp -fp ${CLIENT_LIB} ${WORKDIR}/${LIB_NAME} + fi + fi +} + +restore_libmysqlclient() { + if [ ! -e /etc/debian_version ]; then + return + fi + + LDD=/usr/bin/ldd + LIB_PATH=/usr/local/mysql/lib + if ${LDD} ${DA_BIN} 2>/dev/null | grep -m1 -q 'libmysqlclient.so'; then + LIB_NAME=`${LDD} ${DA_BIN} 2>/dev/null | grep -m1 'libmysqlclient.so' | awk '{ print $1; }'` + CLIENT_LIB=${LIB_PATH}/${LIB_NAME} + if [ ! -s "${CLIENT_LIB}" ]; then + if [ ! -s ${WORKDIR}/${LIB_NAME} ]; then + echo "Cannot find ${WORKDIR}/${LIB_NAME} to restore." + echo "DirectAdmin might crash. If needed, see this guide:" + echo "https://help.directadmin.com/item.php?id=236" + return + fi + + cp -fp ${WORKDIR}/${LIB_NAME} ${CLIENT_LIB} + fi + fi +} + +#To make sure local-infile is disabled +setup_my_cnf() { + echo "Ensuring local-infile is disabled for security reasons in MySQL configuration file..." + MY_CNF_FILE=/etc/my.cnf + if [ -e ${MY_CNF_FILE} ]; then + if grep -m1 -q -F 'includedir /etc/my.cnf.d' ${MY_CNF_FILE}; then + if [ -e /etc/my.cnf.d/server.cnf ]; then + MY_CNF_FILE=/etc/my.cnf.d/server.cnf + fi + fi + if grep -m1 -q '[mysqld]' ${MY_CNF_FILE}; then + if ! grep -m1 -q 'local-infile' ${MY_CNF_FILE}; then + perl -pi -e 's#\[mysqld\]#[mysqld]\nlocal-infile = 0#' ${MY_CNF_FILE} + fi + else + if ! grep -m1 -q 'local-infile' ${MY_CNF_FILE}; then + echo '[mysqld]' >> ${MY_CNF_FILE} + echo 'local-infile = 0' >> ${MY_CNF_FILE} + fi + fi + if ! grep -m1 -q 'max_allowed_packet' ${MY_CNF_FILE}; then + if ! grep -m1 -q 'max-allowed-packet' ${MY_CNF_FILE}; then + perl -pi -e 's#\[mysqld\]#[mysqld]\nmax_allowed_packet=64M#' ${MY_CNF_FILE} + fi + fi + fi +} + +ensure_libnuma() { + if [ ! -e /usr/lib/libnuma.so.1 ] && [ ! -e /usr/lib/i386-linux-gnu/libnuma.so.1 ] && [ ! -e /usr/lib64/libnuma.so.1 ] && [ ! -e /lib64/libnuma.so.1 ] && [ ! -e /lib/libnuma.so.1 ] && [ ! -e /lib/i386-linux-gnu/libnuma.so.1 ] && [ ! -e /usr/lib/x86_64-linux-gnu/libnuma.so.1 ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "There is no libnuma for FreeBSD kernel." + elif [ -e /etc/debian_version ]; then + echo "Cannot find libnuma.so.1, installing using apt-get..." + apt-get -y install libnuma-dev libnuma1 + else + echo "Cannot find libnuma.so.1, installing using yum..." + yum -y install numactl-devel + fi + fi +} + +ensure_libpmem() { + if [ ! -e /usr/lib/libpmem.so.1 ] && [ ! -e /usr/lib/i386-linux-gnu/libpmem.so.1 ] && [ ! -e /usr/lib64/libpmem.so.1 ] && [ ! -e /lib64/libpmem.so.1 ] && [ ! -e /lib/libpmem.so.1 ] && [ ! -e /lib/i386-linux-gnu/libpmem.so.1 ] && [ ! -e /usr/lib/x86_64-linux-gnu/libpmem.so.1 ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "There is no libpmem for FreeBSD kernel." + elif [ -e /etc/debian_version ]; then + echo "Cannot find libpmem.so.1, installing using apt-get..." + apt-get -y install libpmem-dev libpmem1 + else + echo "Cannot find libpmem.so.1, installing using yum..." + yum -y install libpmem + fi + fi +} + +setup_mysql_root_user() { + cd ${CWD} + + if [ "${MYSQLPASSWORD}" = "nothing" ]; then + MYSQLPASSWORD="`random_pass`" + if [ -s ${DA_MYSQL} ]; then + perl -pi -e "s|\=nothing$|=${MYSQLPASSWORD}|g" ${DA_MYSQL} + else + echo "user=da_admin" > ${DA_MYSQL} + echo "passwd=${MYSQLPASSWORD}" >> ${DA_MYSQL} + chown -f diradmin:diradmin ${DA_MYSQL} + chmod -f 400 ${DA_MYSQL} + fi + if [ -s ${DA_MY_CNF} ]; then + perl -pi -e "s|\=nothing$|=${MYSQLPASSWORD}|g" ${DA_MY_CNF} + fi + if [ -s /usr/local/directadmin/scripts/setup.txt ]; then + if grep -q '^mysql\=' /usr/local/directadmin/scripts/setup.txt; then + perl -pi -e "s|^mysql\=.*$|mysql=${MYSQLPASSWORD}|g" /usr/local/directadmin/scripts/setup.txt + else + echo "mysql=${MYSQLPASSWORD}" >> /usr/local/directadmin/scripts/setup.txt + fi + fi + fi + if [ -z "${SQL_PATH_IS_SETUP}" ]; then + if ${SQL_PATH_IS_EMPTY}; then + MYSQL_ROOT_PASS="" + ROOT_PASS_SET=true + if [ ! -d ${MYSQL_DATA}/mysql ]; then + echo "${MYSQL_DATA}/mysql does not exist, running clean mysql data installation..." + # Clean /root/.mysql_secret up + echo -n '' > /root/.mysql_secret + mkdir -p ${MYSQL_DATA} + chown mysql:mysql ${MYSQL_DATA} + chmod 711 ${MYSQL_DATA} + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + FORCE_APPEND="--force" + elif [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_VER_OPT}" = "5.6" ]; then + FORCE_APPEND="--random-password-file=/root/.mysql_secret" + else + FORCE_APPEND="" + fi + if [ "${OS}" = "FreeBSD" ] || [ -s /etc/debian_version ]; then + MYSQL_BASEDIR_PATH="/usr/local/mysql" + else + MYSQL_BASEDIR_PATH="/usr" + fi + if [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_OPT}" != "5.5" ] && [ "${MYSQL_OPT}" != "5.6" ]; then + if [ -x /usr/sbin/mysqld ]; then + MYSQL_ROOT_PASS=`/usr/sbin/mysqld --initialize --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA} 2>&1 | grep 'temporary password' | tail -n1 | grep -o 'root@localhost: .*' | awk '{print $2}'` + else + MYSQL_ROOT_PASS=`/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA} 2>&1 | grep 'temporary password' | tail -n1 | grep -o 'root@localhost: .*' | awk '{print $2}'` + fi + elif [ -x ${MYSQL_BIN}_install_db ]; then + ${MYSQL_BIN}_install_db --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA} ${FORCE_APPEND} + elif [ -x /usr/local/mysql/scripts/mysql_install_db ]; then + /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA} ${FORCE_APPEND} + fi + if [ -s /root/.mysql_secret ]; then + ROOT_PASS_SET=true + elif [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_OPT}" = "8.0" ]; then + ROOT_PASS_SET=true + elif [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_OPT}" = "5.7" ]; then + ROOT_PASS_SET=true + else + ROOT_PASS_SET=false + fi + fi + + control_service mysqld start + sleep 5 + if [ -z "${MYSQL_ROOT_PASS}" ]; then + if ${ROOT_PASS_SET} && [ -s /root/.mysql_secret ] && [ "${MYSQL_OPT}" != "8.0" ]; then + if find /root/.mysql_secret -mmin -5 -type f 2>/dev/null | grep -m1 -q '/root/.mysql_secret'; then + MYSQL_ROOT_PASS="`grep -o ': .*$' /root/.mysql_secret | cut -d ' ' -f2 | tail -n1`" + if [ "${MYSQL_ROOT_PASS}" = "" ]; then + MYSQL_ROOT_PASS="`tail -n1 /root/.mysql_secret`" + fi + fi + fi + + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then + if [ -x /bin/journalctl ]; then + MYSQL_ROOT_PASS=`journalctl -xe -u mysqld |grep 'temporary password' | tail -n1 | grep -o 'root@localhost: .*' | awk '{print $2}'` + fi + if [ -s /var/log/mysqld.log ] && [ -z "${MYSQL_ROOT_PASS}" ]; then + MYSQL_ROOT_PASS=`grep 'temporary password' /var/log/mysqld.log | tail -n1 | grep -o 'root@localhost: .*' | awk '{print $2}'` + fi + fi + fi + fi + + USE_NEW_SET_PASSWORD=1 + MYSQLV=`mysql_main` + INDENTIFIED_WITH_STRING="IDENTIFIED" + #for MySQL 8.0, SET PASSWORD doesn't specify PASSWORD() + if [ "${MYSQLV}" = "5.0" ] || [ "${MYSQLV}" = "5.1" ] || [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "5.6" ]; then + USE_NEW_SET_PASSWORD=0 + INDENTIFIED_WITH_STRING="IDENTIFIED" + elif [ "${MYSQLV}" = "5.7" ]; then + INDENTIFIED_WITH_STRING="IDENTIFIED" + elif [ "`has_mariadb`" = "1" ]; then + if [ "${MYSQLV}" != "10.3" ] && [ "${MYSQLV}" != "10.4" ] && [ "${MYSQLV}" != "10.5" ] && [ "${MYSQLV}" != "10.6" ]; then + USE_NEW_SET_PASSWORD=0 + fi + INDENTIFIED_WITH_STRING="IDENTIFIED" + else + INDENTIFIED_WITH_STRING="IDENTIFIED WITH mysql_native_password" + fi + ${MYSQL_BIN}admin --user=root --password="${MYSQL_ROOT_PASS}" password "${MYSQLPASSWORD}" 2>&1 >/dev/null + if [ "$?" != "0" ]; then + echo "Error setting root pass using ${MYSQL_BIN}admin. Trying SET PASSWORD." + if [ "${USE_NEW_SET_PASSWORD}" = "1" ]; then + echo "Setting password: ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" + ${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" --host=${MYSQLHOST} >/dev/null 2>&1 + else + echo "Setting password: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');" + ${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');" --host=${MYSQLHOST} >/dev/null 2>&1 + fi + if [ "$?" = "0" ]; then + echo "That worked! Root password should be set." + else + echo "*********************************" + echo "" + echo "We seem to have an error when trying to SET PASSWORD FOR 'root'@'localhost'"; + echo "" + do_exit 1 "*********************************" + fi + fi + + ${MYSQL_BIN} --user=root --password='' -e "quit" >/dev/null 2>&1 + if [ "$?" = "0" ]; then + echo "MySQL root password seems to be unset, setting using MySQL queries..." + if [ "${USE_NEW_SET_PASSWORD}" = "1" ]; then + echo "Setting password: ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" + ${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" --host=${MYSQLHOST} >/dev/null 2>&1 + else + echo "Setting password: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');" + ${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');" --host=${MYSQLHOST} 2>&1 >/dev/null + fi + fi + + ${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "quit" >/dev/null 2>&1 + if [ "$?" != "0" ]; then + do_exit 1 "Unable to login using root MySQL credentials. Aborting installation..." + fi + + #Creating da_admin user + ${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "CREATE USER 'da_admin'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" 2>&1 >/dev/null + if [ "${USE_NEW_SET_PASSWORD}" = "1" ]; then + ${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" --host=${MYSQLHOST} >/dev/null 2>&1 + else + ${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');" --host=${MYSQLHOST} >/dev/null 2>&1 + fi + ${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'da_admin'@'localhost' WITH GRANT OPTION;" 2>&1 >/dev/null + + #Dropping MySQL test databases + ${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "DROP DATABASE IF EXISTS test;" 2>&1 >/dev/null + ${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" 2>&1 >/dev/null + if [ "${MARIADB_OPT}" != "10.4" ] && [ "${MARIADB_OPT}" != "10.5" ] && [ "${MARIADB_OPT}" != "10.6" ] && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + ${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "DELETE FROM mysql.user WHERE User='';" 2>&1 >/dev/null + ${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';" 2>&1 >/dev/null + ${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "FLUSH PRIVILEGES;" 2>&1 >/dev/null + fi + SQL_PATH_IS_SETUP="yes" + initMySQL + fi + fi +} + +doMySQL() { + if [ "${MYSQL_INST_OPT}" != "yes" ] && [ "${MYSQL_INST_OPT}" != "mariadb" ] && [ "${MYSQL_INST_OPT}" != "mysql" ]; then + do_exit 1 "You cannot install ${MYSQLNAME}, because you do not have it set in options.conf file." + fi + + if [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "`has_mariadb`" = "1" ] && [ -e ${MYSQL_BIN} ] && [ -d ${MYSQL_DATA}/mysql ]; then + MYSQL_MAIN="`mysql_main`" + if [ "${MYSQL_MAIN}" != "5.5" ] && [ "${MYSQL_OPT}" != "5.5" ]; then + echo "mysql_inst=mysql is set in the options.conf, but MariaDB is currently installed" + do_exit 1 "If you wish to use MySQL, please install MySQL 5.5 first, and then you'd be able to upgrade to a newer version of it. Please note that MariaDB 10.x migration to MySQL is considered a downgrade and might not work." + fi + fi + + if [ "${MYSQL_INST_OPT}" = "mysql" ] && [ -e ${MYSQL_BIN} ] && [ -d ${MYSQL_DATA}/mysql ]; then + MYSQL_MAIN="`mysql_main`" + if [ "${MYSQL_MAIN}" != "${MYSQL_OPT}" ]; then + if ! echo "5.1 ${MYSQL_SET}" | grep -m1 -q "${MYSQL_MAIN} ${MYSQL_OPT}"; then + echo "MySQL ${MYSQL_MAIN} cannot be directly upgraded to ${MYSQL_OPT}" + do_exit 1 "If you wish to upgrade MySQL to ${MYSQL_OPT}, do it in increments, upgrading ${MYSQL_MAIN} to the next version released, and going up until you reach ${MYSQL_OPT}." + fi + fi + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ -e ${MYSQL_BIN} ] && [ -d ${MYSQL_DATA}/mysql ]; then + MYSQL_MAIN="`mysql_main`" + UPGRADE_TEXT="MySQL ${MYSQL_MAIN} cannot be directly upgraded to MariaDB ${MARIADB_OPT}, as this is considered a downgrade. More info: https://help.directadmin.com/item.php?id=563" + if [ "${MYSQL_MAIN}" = "8.0" ]; then + do_exit 1 "${UPGRADE_TEXT}" + elif [ "${MYSQL_MAIN}" = "5.7" ] && [ "${MYSQL_OPT}" = "5.5" ]; then + do_exit 1 "${UPGRADE_TEXT}" + elif [ "${MYSQL_MAIN}" = "5.7" ] && [ "${MYSQL_OPT}" = "10.0" ]; then + do_exit 1 "${UPGRADE_TEXT}" + elif [ "${MYSQL_MAIN}" = "5.7" ] && [ "${MYSQL_OPT}" = "10.1" ]; then + do_exit 1 "${UPGRADE_TEXT}" + fi + fi + + if ! grep -m1 -q 'mysql' /etc/group; then + addUserGroup mysql mysql + fi + + if [ ! -d /var/run/mysqld ]; then + mkdir -p /var/run/mysqld + chown -R mysql:mysql /var/run/mysqld + chmod 700 /var/run/mysqld + fi + + doMySQLback + + if [ ! -e /root/.skip_mysql_install ]; then + #setup a basic my.cnf file. + MYCNF=/etc/my.cnf + if [ ! -e $MYCNF ]; then + echo "[mysqld]" > $MYCNF + echo "local-infile=0" >> $MYCNF + echo "innodb_file_per_table" >> $MYCNF + + #we don't want conflicts + if [ -e /etc/debian_version ]; then + if [ "${SYSTEMD}" = "yes" ]; then + echo "" >> $MYCNF + echo "[client]" >> $MYCNF + echo "socket=/usr/local/mysql/data/mysql.sock" >> $MYCNF + fi + if [ -d /etc/mysql ]; then + mv /etc/mysql /etc/mysql.moved + fi + fi + fi + fi + cd ${CWD} + + SQL_PATH=${CWD}/mysql + mkdir -p ${SQL_PATH} + + set_service mysqld OFF + initMySQL + + NEW_MYSQLCHECK_ARGS=false + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then + NEW_MYSQLCHECK_ARGS=true + fi + fi + + if ${NEW_MYSQLCHECK_ARGS}; then + MYSQLCHECK_ARGS="-A" + else + MYSQLCHECK_ARGS="--fix-db-names --fix-table-names -A" + fi + + MYSQL_DETECT_CORRECT_METHODS=`getDA_Opt mysql_detect_correct_methods 1` + + if [ "${MYSQL_DETECT_CORRECT_METHODS}" = "0" ]; then + echo "Setting mysql_detect_correct_methods=1 in directadmin.conf." + setVal mysql_detect_correct_methods 1 ${DACONF_TEMPLATE_FILE} + setVal mysql_detect_correct_methods 1 ${DACONF_FILE} + doRestartDA + fi + + if [ ${OS} = "FreeBSD" ]; then + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + MYSQLURL=${WEBPATH_SERVICES}/all/mariadb/${MARIADB_OPT}/${MARIADB_VER} + MYSQLPACK=mariadb-${MARIADB_VER} + + #attempt the download? There are no FreeBSD binaries for MariaDB. Maybe it's already in the dir. + BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | head -n 1` + + elif [ "${MYSQL_INST_OPT}" = "mysql" ]; then + MYSQLPACK=mysql-${MYSQL_VER} + + if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then + #mysql-5.7.27-freebsd12-x86_64.tar.gz + MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_OPT}/${MYSQL_VER}/64-bit + BINPACK=${MYSQLPACK}-freebsd${OS_FREEBSD_VER}-x86_64.tar.gz + if ls ${MYSQLPACK}-freebsd${OS_FREEBSD_VER}*-x86_64.tar.gz >/dev/null 2>&1; then + BINPACK=`ls ${MYSQLPACK}-freebsd${OS_FREEBSD_VER}*-x86_64.tar.gz | head -n1 >/dev/null 2>&1` + if [ ! -s "${BINPACK}" ]; then + rm -f "${BINPACK}" + BINPACK=`ls ${MYSQLPACK}-freebsd${OS_FREEBSD_VER}*-x86_64.tar.gz | head -n1 >/dev/null 2>&1` + fi + fi + else + MYSQLURL=${WEBPATH_SERVICES}/all/mysql + #there is no pre-compiled freebse 12 binary + BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | head -n 1` + fi + fi + + if [ "${MYSQL_FORCE_COMPILE_OPT}" = "yes" ]; then + BINPACK="" + else + if [ "${BINPACK}" != "" ]; then + #attempt the download. + if [ ! -s ${BINPACK} ]; then + curl ${CURL_CONNECT_OPTIONS} -o ${BINPACK} ${MYSQLURL}/${BINPACK} + if [ $? -ne 0 ]; then + echo "Failed to download ${MYSQLURL}/${MYSQLPACK}.tar.gz. Reverting to compile..." + BINPACK="" + rm -f ${BINPACK_MD5} 2>/dev/null + fi + fi + + BINPACK_MD5=${BINPACK}.md5 + curl ${CURL_CONNECT_OPTIONS} -o ${BINPACK_MD5} ${MYSQLURL}/${BINPACK_MD5} + if [ ! -s ${BINPACK_MD5} ]; then + #nothing to check against. + rm -f ${BINPACK_MD5}; + fi + + if [ "${BINPACK}" != "" ] && [ -s ${BINPACK} ] && [ "${BINPACK_MD5}" != "" ] && [ -s ${BINPACK_MD5} ]; then + #md5sum check + M_BIN_MD5=`${MD5SUM} -q ${BINPACK}` + M_BIN_MD5_CHECK=`cat ${BINPACK_MD5} | cut -d\ -f1` + if [ "${M_BIN_MD5}" != "${M_BIN_MD5_CHECK}" ]; then + echo "${boldon}md5 check on ${BINPACK} failed ('${M_BIN_MD5}' != '${M_BIN_MD5_CHECK}'. Reverting to compile.${boldoff}" + BINPACK="" + else + echo "md5 check on ${BINPACK} passed." + fi + fi + fi + fi + + if [ "$BINPACK" = "" ]; then + compile_mysql_binary + fi + + #make sure were back + cd ${CWD} + + BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | head -n 1` + + if [ "$BINPACK" = "" ]; then + do_exit 1 "Cannot find $MYSQLPACK package for installation" + fi + + if [ ! -s ${BINPACK} ]; then + BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | tail -n 1` + if [ ! -s ${BINPACK} ]; then + do_exit 1 "Cannot find ${BINPACK} for installation" + fi + fi + + echo "Stopping mysqld ..." + control_service mysqld stop + + echo "Installing ${BINPACK}..." + + #we need the non tar.gz form .. but its not basic it has freebsd and i386 and stuff we need + #since we know the name of the file, we can get its contents which will tell us. + MYSQLPACK=`tar tzf ${BINPACK} | head -n 1 | cut -d/ -f1` + + cd /usr/local + + tar xzf ${CWD}/${BINPACK} --no-same-owner --exclude="${MYSQLPACK}/data" + if [ $? -ne 0 ]; then + do_exit 1 "Failed to extract: ${BINPACK}. Exiting..." + fi + if [ ! -d ${MYSQLPACK} ]; then + do_exit 1 "${MYSQLPACK} does not exist. Exiting..." + fi + if [ -s ${BINPACK} ]; then + rm -f ${BINPACK} + fi + if [ -L mysql ]; then + rm -f mysql + fi + ln -s ${MYSQLPACK} mysql + cd mysql + + if [ -e my.cnf ]; then + mv -f my.cnf my.cnf.orig + fi + + chown -R mysql:mysql /usr/local/mysql + chown -R mysql:mysql /usr/local/$MYSQLPACK + + if [ -d data ]; then + rm -rf data + fi + ln -s ${MYSQL_DATA} ./data + + for i in `ls /usr/local/mysql/bin`; do { + if [ ! -e /usr/local/bin/${i} ]; then + echo "Linking /usr/local/mysql/bin/${i} -> /usr/local/bin/${i}..." + ln -s /usr/local/mysql/bin/${i} /usr/local/bin/${i} + chown -h mysql:mysql /usr/local/bin/${i} + fi + }; + done + + if [ ! -s ${INITDDIR}/mysqld ]; then + getFile mysqld_freebsd mysqld_boot_freebsd + cp ${CWD}/mysqld_freebsd ${INITDDIR}/mysqld + chmod 755 ${INITDDIR}/mysqld + fi + + NEW_MARIADB=0 + if [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + NEW_MARIADB=1 + fi + if [ -s ${INITDDIR}/mysqld ] && [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ "${NEW_MARIADB}" = "1" ] && grep -m1 -q '/usr/local/mysql/bin/mysqld' ${INITDDIR}/mysqld; then + perl -pi -e 's|/usr/local/mysql/bin/mysqld|/usr/local/mysql/bin/mariadbd|g' ${INITDDIR}/mysqld + fi + + setup_my_cnf + + if ! ${SQL_PATH_IS_EMPTY}; then + control_service mysqld start + + echo "Create symlink for Mariadbbb..." + ln -sf /usr/sbin/mariadbd /usr/sbin/mysqld + ln -sf /usr/sbin/mariadbd /usr/local/mysql/bin/mysql + ln -sf /usr/bin/mariadb /usr/bin/mysql + ln -sf /usr/bin/mariadb-dump /usr/bin/mysqldump + + MYSQLPATH="`echo ${PATH} | grep /usr/local/mysql/bin | wc -l`" + if [ "${MYSQLPATH}" -eq 0 ]; then + export PATH=${PATH}:/usr/local/mysql/bin + fi + + echo "Giving mysqld a few seconds to start up..." + sleep 5 + + if ! /usr/local/mysql/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then + echo "Giving mysqld a another few seconds to start up..." + sleep 10 + fi + + if ! /usr/local/mysql/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then + echo "Giving mysqld last 20 seconds to start up..." + sleep 20 + fi + + if ! ${SKIP_MYSQL_UPGRADE}; then + if [ -e /usr/local/mysql/bin/mysql_upgrade ]; then + /usr/local/mysql/bin/mysql_upgrade --defaults-extra-file=${DA_MY_CNF} + elif [ -e /usr/local/mysql/bin/mysql_fix_privilege_tables ]; then + /usr/local/mysql/bin/mysql_fix_privilege_tables --defaults-extra-file=${DA_MY_CNF} + fi + fi + + if [ -e /usr/local/mysql/bin/mysqlcheck ] && [ "${MYSQL_OPT}" = "5.1" ] && [ "${MYSQL_INST_OPT}" != "mariadb" ]; then + /usr/local/mysql/bin/mysqlcheck --defaults-extra-file=${DA_MY_CNF} ${MYSQLCHECK_ARGS} + fi + + if [ ! -e /usr/local/mysql/bin/mysqld ] && [ -e /usr/local/mysql/libexec/mysqld ]; then + ln -s ../libexec/mysqld /usr/local/mysql/bin/mysqld + fi + fi + if ${SQL_PATH_IS_EMPTY}; then + setup_mysql_root_user + fi + set_service mysqld ON + echo "Done ${MYSQLPACK}." + writeLog "${MYSQLPACK} installed" + elif [ -e /etc/debian_version ]; then + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + #libsystemd-daemon0 and /lib/x86_64-linux-gnu/libsystemd-daemon.so.0 + #LINUX_STR=linux-systemd + if [ "${MARIADB_OPT}" = "10.5" ]; then + LINUX_STR=linux + elif [ "${MARIADB_OPT}" = "10.6" ]; then + LINUX_STR=linux-systemd + else + LINUX_STR=linux-glibc_214 + fi + if [ -e /etc/debian_version ]; then + if grep -m1 -q '^7' /etc/debian_version; then + LINUX_STR=linux + fi + fi + MACHINE=i686 + if [ "${B64}" = "1" ]; then + MACHINE=x86_64 + fi + + MYSQLURL=${WEBPATH_SERVICES}/all/mariadb/${MARIADB_OPT}/${MARIADB_VER} + MYSQLPACK=mariadb-${MARIADB_VER}-${LINUX_STR}-${MACHINE} + else + LINUX_STR=linux + MACHINE=i686 + MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_OPT}/${MYSQL_VER} + LINUX_STR=linux-glibc2.12 + + if [ "${B64}" = "1" ]; then + MYSQLURL=${MYSQLURL}/64-bit + MACHINE=x86_64 + elif [ "${B64}" = "1" ] && [ "${MYSQL_OPT}" = "8.0" ]; then + MYSQLURL=${MYSQLURL}/32-bit + elif [ "${B64}" = "1" ] && [ "${MYSQL_OPT}" = "5.7" ]; then + MYSQLURL=${MYSQLURL}/32-bit + elif [ "${B64}" = "1" ] && [ "${MYSQL_OPT}" = "5.6" ]; then + MYSQLURL=${MYSQLURL}/32-bit + elif [ "${B64}" = "1" ] && [ "${MYSQL_OPT}" = "5.5" ]; then + MYSQLURL=${MYSQLURL}/32-bit + fi + + MYSQLPACK=mysql-${MYSQL_VER}-${LINUX_STR}-${MACHINE} + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ "${MARIADB_OPT}" = "10.6" ]; then + ensure_libpmem + fi + #debian needs libnuma1 now, as well: libnuma-dev libnuma1 + ensure_libnuma + + # Galera package in bundled with mariadb bintar, no need for a separate galera bintar + if ([ "${MARIADB_OPT}" = "10.1" ] or 10.2 or 11.4) && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + #Galera has the same 1st column as libjemalloc, so we use LIBJEMALLOC_REL here too + GALERA_VER=`getVerGalera bintar_${MACHINE}` + GALERA_MD5=`getMD5Galera bintar_${MACHINE}` + GALERA_FILE=`getFilenameGalera bintar_${MACHINE}` + GALERA_FOLDER=`echo ${GALERA_FILE} | perl -p0 -e 's#\.tar\.gz##g'` + fi + if [ ! -s ${GALERA_FILE} ]; then + curl ${CURL_CONNECT_OPTIONS} -o ${GALERA_FILE} ${WEBPATH_SERVICES}/all/mariadb/galera/${GALERA_VER}/${GALERA_FILE} + if [ $? -ne 0 ]; then + do_exit 1 "Failed to download ${WEBPATH_SERVICES}/all/mariadb/galera/${GALERA_VER}/${GALERA_FILE}. Exiting..." + fi + fi + + cd /usr/local + if [ "${MYSQL_OPT}" = "8.0" ] && [ "${MYSQL_INST_OPT}" = "mysql" ]; then + MYSQL_PACK_EXT="tar.xz" + MYSQL_EXTRACT_OPT="xJf" + MYSQL_CONTENT_OPT="tJf" + else + MYSQL_PACK_EXT="tar.gz" + MYSQL_EXTRACT_OPT="xzf" + MYSQL_CONTENT_OPT="tzf" + fi + if [ "${MYSQL_FORCE_COMPILE_OPT}" != "yes" ]; then + if [ ! -s ${MYSQLPACK}.${MYSQL_PACK_EXT} ]; then + curl ${CURL_CONNECT_OPTIONS} -o ${MYSQLPACK}.${MYSQL_PACK_EXT} ${MYSQLURL}/${MYSQLPACK}.${MYSQL_PACK_EXT} + if [ $? -ne 0 ]; then + do_exit 1 "Failed to download ${MYSQLURL}/${MYSQLPACK}.${MYSQL_PACK_EXT}. Exiting..." + fi + fi + fi + + if [ ! -s "${MYSQLPACK}.${MYSQL_PACK_EXT}" ]; then + MYSQL_FORCE_COMPILE_OPT=yes + fi + + if [ "${MYSQL_FORCE_COMPILE_OPT}" = "yes" ]; then + echo "Attempting to compile a package from source..." + cd ${CWD} + compile_mysql_binary + cd ${CWD} + + if [ ! -s ${MYSQLPACK}.${MYSQL_PACK_EXT} ]; then + #sometimes it's linux, sometimes it's linux2.6.. sometimes it's just linux. + #Debian 6 was kernel 2.6, but when 5.6 is compiled, is linux. 5.5 is linux. Consistent? no. + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + PACK_PRE=mariadb-${MARIADB_VER} + else + PACK_PRE=mysql-${MYSQL_VER} + fi + BINPACK=`ls ${PACK_PRE}-*i386.${MYSQL_PACK_EXT} ${PACK_PRE}-*i686.${MYSQL_PACK_EXT} ${PACK_PRE}-*i486.${MYSQL_PACK_EXT} ${PACK_PRE}-*x86_64.${MYSQL_PACK_EXT} 2>/dev/null | head -n 1` + + if [ "$BINPACK" = "" ]; then + do_exit 1 "Cannot find ${MYSQLPACK} package for installation" + fi + + echo "Found created package: $BINPACK" + + GLIBC14_BINPACK=`echo $BINPACK | grep -c 'linux-glibc_214'` + if [ ${GLIBC14_BINPACK} -gt 0 ]; then + LINUX_STR=`echo $BINPACK | cut -d- -f3,4` + MACHINE=`echo $BINPACK | cut -d- -f5 | cut -d. -f1` + else + LINUX_STR=`echo $BINPACK | cut -d- -f3` + MACHINE=`echo $BINPACK | cut -d- -f4 | cut -d. -f1` + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + MYSQLPACK=mariadb-${MARIADB_VER}-${LINUX_STR}-${MACHINE} + else + MYSQLPACK=mysql-${MYSQL_VER}-${LINUX_STR}-${MACHINE} + fi + fi + fi + +# Galera package in bundled with mariadb bintar, no need for a separate galera bintar +# if ([ "${MARIADB_OPT}" = "10.1" ] or 10.2) && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then +# echo "Installing galera package..." +# tar -C /usr/lib -xzf ${WORKDIR}/${GALERA_FILE} --strip 3 ${GALERA_FOLDER}/usr/lib64 +# tar -C /usr/bin -xzf ${WORKDIR}/${GALERA_FILE} --strip 3 ${GALERA_FOLDER}/usr/bin +# tar -C /usr/share -xzf ${WORKDIR}/${GALERA_FILE} --strip 3 ${GALERA_FOLDER}/usr/share +# rm -f ${WORKDIR}/${GALERA_FILE} +# echo "Galera package has been installed" +# fi + + mv -f ${MYSQLPACK}.${MYSQL_PACK_EXT} /usr/local + cd /usr/local + + #we need the non tar.gz form .. but its not basic, it differs from tar.gz + #since we know the name of the file, we can get its contents which will tell us. + MYSQLPACK_REALNAME=`tar ${MYSQL_CONTENT_OPT} ${MYSQLPACK}.${MYSQL_PACK_EXT} | head -n 1 | cut -d/ -f1` + if [ "${MYSQLPACK_REALNAME}" = "" ]; then + do_exit 1 "MYSQLPACK_REALNAME is invalid: ${MYSQLPACK_REALNAME}. Exiting..." + fi + + echo "Stopping mysqld ..." + control_service mysqld stop + if [ "${SYSTEMD}" = "yes" ]; then + if ! systemctl is-active --quiet mysqld; then + echo "Service didn't get stopped, sleeping for 20 secs and re-trying ..." + sleep 20 + echo "Stopping mysqld ..." + control_service mysqld stop + fi + fi + + if [ "${SYSTEMD}" = "yes" ]; then + MYSQL_SYSTEMD=${CB_SYSTEMD}/mysqld.service.debian + if [ -e ${CB_CUST_SYSTEMD}/mysqld.service.debian ]; then + MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mysqld.service.debian + fi + + #if ([ "${MARIADB_OPT}" = "10.1" ] or 10.2) && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + # MYSQL_SYSTEMD=${CB_SYSTEMD}/mariadb.service + # if [ -e ${CB_CUST_SYSTEMD}/mariadb.service ]; then + # MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mariadb.service + # fi + #fi + + cp -pf ${MYSQL_SYSTEMD} ${SYSTEMDDIR}/mysqld.service + if [ -L ${SYSTEMDDIR}/mariadb.service ]; then + rm -f ${SYSTEMDDIR}/mariadb.service + fi + DISABLE_PRIVATETMP=false + if [ -e /proc/1/environ ]; then + if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then + DISABLE_PRIVATETMP=true + fi + fi + if ${DISABLE_PRIVATETMP}; then + echo "LXC detected. Disabling PrivateTmp feature in mysqld.service for MySQL." + perl -pi -e 's#PrivateTmp\=true#PrivateTmp=false#' ${SYSTEMDDIR}/mysqld.service + fi + if [ -e ${SYSTEMDDIR}/mysql.service ]; then + systemctl disable mysql.service + mv -f ${SYSTEMDDIR}/mysql.service ${SYSTEMDDIR}/mysqld.service + systemctl daemon-reload + systemctl enable mysqld.service + fi + systemctl daemon-reload + systemctl enable mysqld.service + fi + + backup_libmysqlclient + + tar ${MYSQL_EXTRACT_OPT} ${MYSQLPACK}.${MYSQL_PACK_EXT} --no-same-owner --exclude="${MYSQLPACK}/data" + if [ $? -ne 0 ]; then + do_exit 1 "Failed to extract: ${MYSQLPACK}.${MYSQL_PACK_EXT}. Exiting..." + fi + rm -f mysql ${MYSQLPACK}.${MYSQL_PACK_EXT} + ln -s ${MYSQLPACK_REALNAME} mysql + cd mysql + + chown -R mysql:mysql /usr/local/mysql + chown -R mysql:mysql /usr/local/${MYSQLPACK_REALNAME} + + if [ -e my.cnf ]; then + mv -f my.cnf my.cnf.orig + fi + + if [ -d data ]; then + rm -rf data + fi + ln -s ${MYSQL_DATA} ./data + + for i in `ls /usr/local/mysql/bin`; do { + if [ ! -e /usr/local/bin/${i} ]; then + echo "Linking /usr/local/mysql/bin/${i} -> /usr/local/bin/${i}..." + ln -s /usr/local/mysql/bin/${i} /usr/local/bin/${i} + chown -h mysql. /usr/local/bin/${i} + fi + }; + done + + if [ -d ${MYSQL_DATA} ]; then + chown -R mysql:mysql ${MYSQL_DATA} + fi + + MYSQLPATH="`echo ${PATH} | grep /usr/local/mysql/bin | wc -l`" + if [ "${MYSQLPATH}" -eq 0 ]; then + export PATH=${PATH}:/usr/local/mysql/bin + fi + + if [ -d /etc/mysql ]; then + if [ ! -L /etc/mysql/my.cnf ]; then + mv -f /etc/mysql/my.cnf /etc/mysql/my.cnf.back + ln -s /etc/my.cnf /etc/mysql/my.cnf + fi + fi + setup_my_cnf + if ! ${SQL_PATH_IS_EMPTY}; then + control_service mysqld start + + echo "Create symlink for Mariadbbb..." + ln -sf /usr/sbin/mariadbd /usr/sbin/mysqld + ln -sf /usr/sbin/mariadbd /usr/local/mysql/bin/mysql + ln -sf /usr/bin/mariadb /usr/bin/mysql + ln -sf /usr/bin/mariadb-dump /usr/bin/mysqldump + + echo "Giving mysqld a few seconds to start up..." + sleep 5 + + if ! /usr/local/mysql/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then + echo "Giving mysqld a another few seconds to start up..." + sleep 10 + fi + + if ! /usr/local/mysql/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then + echo "Giving mysqld last 20 seconds to start up..." + sleep 20 + fi + + + + if [ -e /usr/local/mysql/bin/mysql_upgrade ]; then + if ! ${SKIP_MYSQL_UPGRADE}; then + MARIADB_SKIP_VERSION_CHECK= + if [ "`/usr/local/mysql/bin/mysql_upgrade --help | grep -c skip-version-check`" -gt 0 ]; then + MARIADB_SKIP_VERSION_CHECK=--skip-version-check + fi + + /usr/local/mysql/bin/mysql_upgrade --defaults-extra-file=${DA_MY_CNF} ${MARIADB_SKIP_VERSION_CHECK} + + if [ "$?" -ne 0 ]; then #Ticket 23399 + echo "${boldon}Error running '/usr/local/mysql/bin/mysql_upgrade --defaults-extra-file=${DA_MY_CNF} ${MARIADB_SKIP_VERSION_CHECK}'${boldoff}" + sleep 10 + fi + fi + elif [ -e /usr/local/mysql/bin/mysql_fix_privilege_tables ]; then + /usr/local/mysql/bin/mysql_fix_privilege_tables --defaults-extra-file=${DA_MY_CNF} + fi + + if [ -e /usr/local/mysql/bin/mysqlcheck ] && [ "${MYSQL_OPT}" = "5.1" ] && [ "${MYSQL_INST_OPT}" != "mariadb" ]; then + /usr/local/mysql/bin/mysqlcheck --defaults-extra-file=${DA_MY_CNF} ${MYSQLCHECK_ARGS} + fi + fi + + restore_libmysqlclient + + #mysql 5.5.11 changed to libmysqlclient.so.18 from libmysqlclient.so.16 + if [ "${MYSQL_INST_OPT}" != "mariadb" ]; then + if [ "${MYSQL_OPT}" = "5.5" ] || [ "${MYSQL_OPT}" = "5.6" ]; then + if [ -e /usr/local/directadmin/directadmin ]; then + if ldd /usr/local/directadmin/directadmin | grep -m1 -q 'libmysqlclient.so.16'; then + if [ ! -e /usr/local/mysql/lib/libmysqlclient.so.16 ] && [ -e /usr/local/mysql/lib/libmysqlclient.so.18 ]; then + echo "*** Linking libmysqlclient.so.16 to libmysqlclient.so.18" + ln -s libmysqlclient.so.18 /usr/local/mysql/lib/libmysqlclient.so.16 + ldconfig + fi + fi + if ldd /usr/local/directadmin/directadmin | grep -m1 -q 'libmysqlclient.so.18'; then + if [ ! -e /usr/local/mysql/lib/libmysqlclient.so.18 ] && [ -e /usr/local/mysql/lib/libmysqlclient.so.16 ]; then + echo "*** Linking libmysqlclient.so.18 to libmysqlclient.so.16" + ln -s libmysqlclient.so.16 /usr/local/mysql/lib/libmysqlclient.so.18 + ldconfig + fi + fi + fi + fi + fi + if ${SQL_PATH_IS_EMPTY}; then + setup_mysql_root_user + fi + set_service mysqld ON + writeLog "${MYSQLPACK} installed" + else + if [ "${MYSQL_OPT}" = "5.5" ] || [ "${MYSQL_OPT}" = "5.6" ] || [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + if [ ! -e /usr/lib/libaio.so.1 ] && [ ! -e /usr/lib64/libaio.so.1 ] && [ ! -e /lib64/libaio.so.1 ] && [ ! -e /lib/libaio.so.1 ] && [ ! -e /lib/i386-linux-gnu/libaio.so.1 ]; then + echo "Cannot find libaio.so.1, installing using yum..." + yum -y install libaio + fi + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ "${MARIADB_OPT}" = "10.6" ]; then + ensure_libpmem + fi + + ensure_libnuma + + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + if [ "${OS_CENTOS_VER}" = "5" ] && [ "${MYSQL_OPT}" = "5.7" ]; then + do_exit 1 "CentOS5 is EOL, so, MySQL 5.7 is not supported on it" + elif [ "${OS_CENTOS_VER}" = "5" ] && [ "${MYSQL_OPT}" = "8.0" ]; then + do_exit 1 "CentOS5 is EOL, so, MySQL 8.0 is not supported on it" + fi + + MYSQL_NAME=MySQL + NEW_RPM_FORMAT=0 + if [ "${OS_CENTOS_VER}" = "6" ]; then + MYSQL_EXT_OS=el6 + elif [ "${OS_CENTOS_VER}" = "7" ]; then + MYSQL_EXT_OS=el7 + elif [ "${OS_CENTOS_VER}" = "8" ]; then + MYSQL_EXT_OS=el8 + fi + if [ "${B64}" = "0" ]; then + MYSQLURL=all/mysql/${MYSQL_OPT}/${MYSQL_VER}/32-bit + if [ "${MYSQL_OPT}" = "5.1" ]; then + MYSQL_EXT=glibc23.i386 + elif [ "${MYSQL_OPT}" = "5.5" ]; then + if [ "`version_cmp ${MYSQL_VER} 5.5.58 'mysql 5.5.58 glibc vs el6 check'`" -ge 0 ]; then + MYSQL_EXT=${MYSQL_EXT_OS}.i686 + NEW_RPM_FORMAT=1 + else + MYSQL_EXT=linux2.6.i386 + fi + elif [ "${MYSQL_OPT}" = "5.6" ]; then + if [ "`version_cmp ${MYSQL_VER} 5.6.38 'mysql 5.6.38 glibc vs el6 check'`" -ge 0 ]; then + MYSQL_EXT=${MYSQL_EXT_OS}.i686 + NEW_RPM_FORMAT=1 + + else + MYSQL_EXT=linux_glibc2.5.i386 + fi + else + MYSQL_EXT=${MYSQL_EXT_OS}.i686 + MYSQL_NAME=mysql-community + NEW_RPM_FORMAT=1 + fi + + if [ "${NEW_RPM_FORMAT}" = "0" ]; then + MYSQLURL=all/mysql/${MYSQL_VER} + fi + + else + MYSQLURL=all/mysql/${MYSQL_OPT}/${MYSQL_VER}/64-bit + if [ "${MYSQL_OPT}" = "5.1" ]; then + MYSQL_EXT=glibc23.x86_64 + elif [ "${MYSQL_OPT}" = "5.5" ]; then + if [ "`version_cmp ${MYSQL_VER} 5.5.58 'mysql 5.5.58 glibc vs el6 check'`" -ge 0 ]; then + MYSQL_EXT=${MYSQL_EXT_OS}.x86_64 + NEW_RPM_FORMAT=1 + else + MYSQL_EXT=linux2.6.x86_64 + fi + elif [ "${MYSQL_OPT}" = "5.6" ]; then + if [ "`version_cmp ${MYSQL_VER} 5.6.38 'mysql 5.5.38 glibc vs el6 check'`" -ge 0 ]; then + MYSQL_EXT=${MYSQL_EXT_OS}.x86_64 + NEW_RPM_FORMAT=1 + else + MYSQL_EXT=linux_glibc2.5.x86_64 + NEW_RPM_FORMAT=1 + fi + else + MYSQL_EXT=${MYSQL_EXT_OS}.x86_64 + MYSQL_NAME=mysql-community + NEW_RPM_FORMAT=1 + fi + + if [ "${NEW_RPM_FORMAT}" = "0" ]; then + MYSQLURL=all/mysql/64-bit/${MYSQL_VER} + fi + fi + + MYSQLCLIENT=${MYSQL_NAME}-client-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm + MYSQLDEVEL=${MYSQL_NAME}-devel-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm + MYSQLSERVER=${MYSQL_NAME}-server-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm + MYSQLSHARED=${MYSQL_NAME}-shared-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm + if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then + MYSQLLIBS=${MYSQL_NAME}-libs-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + MYSQLLIBSCOMPAT=${MYSQL_NAME}-libs-compat-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm + fi + MYSQLCOMMON=${MYSQL_NAME}-common-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm + fi + else + MYSQLURL=all/mariadb/${MARIADB_OPT}/${MARIADB_VER} + if [ "${OS_CENTOS_VER}" = "5" ]; then + if [ "${B64}" = "0" ]; then + LIBJEMALLOC_REL="centos5_32" + else + LIBJEMALLOC_REL="centos5_64" + fi + elif [ "${OS_CENTOS_VER}" = "6" ]; then + if [ "${MARIADB_OPT}" = "10.2" ]; then + do_exit 1 "MariaDB 10.2 does not support CentOS6 anymore." + elif [ "${MARIADB_OPT}" = "10.3" ]; then + do_exit 1 "MariaDB 10.3 does not support CentOS6 anymore." + elif [ "${MARIADB_OPT}" = "10.4" ]; then + do_exit 1 "MariaDB 10.4 does not support CentOS6." + elif [ "${MARIADB_OPT}" = "10.5" ]; then + do_exit 1 "MariaDB 10.5 does not support CentOS6." + elif [ "${MARIADB_OPT}" = "10.6" ]; then + do_exit 1 "MariaDB 10.6 does not support CentOS6." + fi + if [ "${B64}" = "0" ]; then + LIBJEMALLOC_REL="centos6_32" + RPM_FILE_LIST="centos6-32.txt" + else + LIBJEMALLOC_REL="centos6_64" + RPM_FILE_LIST="centos6-64.txt" + fi + elif [ "${OS_CENTOS_VER}" = "7" ]; then + LIBJEMALLOC_REL="centos7_64" + RPM_FILE_LIST="centos7-64.txt" + else + LIBJEMALLOC_REL="centos8_64" + RPM_FILE_LIST="centos8-64.txt" + fi + + if [ ! -s mysql/${RPM_FILE_LIST} ]; then + getFile ${MYSQLURL}/${RPM_FILE_LIST} "" mysql/${RPM_FILE_LIST} + fi + + if ! grep -m1 -q "MariaDB-${MARIADB_VER}-" mysql/${RPM_FILE_LIST}; then + rm -f mysql/${RPM_FILE_LIST} + getFile ${MYSQLURL}/${RPM_FILE_LIST} "" mysql/${RPM_FILE_LIST} + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ] || [ "${OS_CENTOS_VER}" = "8" ]; then + LIBJEMALLOC_VER=`getVerJemalloc ${LIBJEMALLOC_REL}` + LIBJEMALLOC_MD5=`getMD5Jemalloc ${LIBJEMALLOC_REL}` + LIBJEMALLOC_FILE=`getFilenameJemalloc ${LIBJEMALLOC_REL}` + LIBJEMALLOC_DEV_MD5=`getMD5Jemalloc ${LIBJEMALLOC_REL}` + LIBJEMALLOC_DEV_FILE=`getFilenameJemalloc ${LIBJEMALLOC_REL}_dev` + fi + + #Galera has the same 1st column as libjemalloc, so we use LIBJEMALLOC_REL here too + if [ "${OS_CENTOS_VER}" = "6" ]; then + GALERA_VER=26.4.3 + GALERA_MD5=0609cff586f98d85aa7ad60ceb8c3e99 + GALERA_FILE=galera-4-26.4.3-1.rhel6.el6.x86_64.rpm + else + GALERA_VER=`getVerGalera ${LIBJEMALLOC_REL}` + GALERA_MD5=`getMD5Galera ${LIBJEMALLOC_REL}` + GALERA_FILE=`getFilenameGalera ${LIBJEMALLOC_REL}` + fi + fi + fi + MYSQLCLIENT=`get_line_from_file "MariaDB-.*client.*.rpm" mysql/${RPM_FILE_LIST}` + MYSQLDEVEL=`get_line_from_file "MariaDB-.*devel.*.rpm" mysql/${RPM_FILE_LIST}` + MYSQLSERVER=`get_line_from_file "MariaDB-.*server.*.rpm" mysql/${RPM_FILE_LIST}` + MYSQLSHARED=`get_line_from_file "MariaDB-.*shared.*.rpm" mysql/${RPM_FILE_LIST}` + MYSQLCOMMON=`get_line_from_file "MariaDB-.*common.*.rpm" mysql/${RPM_FILE_LIST}` + MYSQLBACKUP=`get_line_from_file "MariaDB-.*backup.*.rpm" mysql/${RPM_FILE_LIST}` + if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + MYSQLCOMPAT=`get_line_from_file "MariaDB-.*compat.*.rpm" mysql/${RPM_FILE_LIST}` + HAS_MYSQLCOMPAT=true + else + MYSQLCOMPAT="" + HAS_MYSQLCOMPAT=false + fi + + if [ "${MYSQLCLIENT}" = "" ] || [ "${MYSQLCLIENT}" = "" ] || [ "${MYSQLCLIENT}" = "" ] || [ "${MYSQLCLIENT}" = "" ] || [ "${MYSQLCLIENT}" = "" ]; then + do_exit 1 "RPM package set is incomplete. Unable to find names in mysql/${RPM_FILE_LIST}." + fi + fi + + cd ${SQL_PATH} + + MYSQL57_8x_SET=false + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then + MYSQL57_8x_SET=true + fi + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ] || [ "${OS_CENTOS_VER}" = "8" ]; then + if [ ! -s ${SQL_PATH}/${LIBJEMALLOC_FILE} ]; then + getFile all/mariadb/jemalloc/${LIBJEMALLOC_VER}/${LIBJEMALLOC_FILE} "" mysql/${LIBJEMALLOC_FILE} + fi + if [ ! -s ${SQL_PATH}/${LIBJEMALLOC_DEV_FILE} ]; then + getFile all/mariadb/jemalloc/${LIBJEMALLOC_VER}/${LIBJEMALLOC_DEV_FILE} "" mysql/${LIBJEMALLOC_DEV_FILE} + fi + fi + if [ ! -s ${SQL_PATH}/${GALERA_FILE} ]; then + getFile all/mariadb/galera/${GALERA_VER}/${GALERA_FILE} "" mysql/${GALERA_FILE} + fi + if [ ! -s ${SQL_PATH}/${MYSQLBACKUP} ]; then + getFile ${MYSQLURL}/${MYSQLBACKUP} "" mysql/${MYSQLBACKUP} + fi + fi + fi + if [ ! -s ${SQL_PATH}/${MYSQLCLIENT} ]; then + getFile ${MYSQLURL}/${MYSQLCLIENT} "" mysql/${MYSQLCLIENT} + fi + if [ ! -s ${SQL_PATH}/${MYSQLDEVEL} ]; then + getFile ${MYSQLURL}/${MYSQLDEVEL} "" mysql/${MYSQLDEVEL} + fi + if [ ! -s ${SQL_PATH}/${MYSQLSERVER} ]; then + getFile ${MYSQLURL}/${MYSQLSERVER} "" mysql/${MYSQLSERVER} + fi + if [ ! -s ${SQL_PATH}/${MYSQLSHARED} ]; then + if ! ${MYSQL57_8x_SET}; then + getFile ${MYSQLURL}/${MYSQLSHARED} "" mysql/${MYSQLSHARED} + fi + fi + ADD_MYSQL_LIBS="" + if ${MYSQL57_8x_SET}; then + if [ ! -s ${SQL_PATH}/${MYSQLLIBS} ]; then + getFile ${MYSQLURL}/${MYSQLLIBS} "" mysql/${MYSQLLIBS} + fi + if [ ! -s ${SQL_PATH}/${MYSQLCOMMON} ]; then + getFile ${MYSQLURL}/${MYSQLCOMMON} "" mysql/${MYSQLCOMMON} + fi + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + if [ ! -s ${SQL_PATH}/${MYSQLLIBSCOMPAT} ]; then + getFile ${MYSQLURL}/${MYSQLLIBSCOMPAT} "" mysql/${MYSQLLIBSCOMPAT} + fi + ADD_MYSQL_LIBS="${MYSQLLIBS} ${MYSQLLIBSCOMPAT} ${MYSQLCOMMON}" + else + ADD_MYSQL_LIBS="${MYSQLLIBS} ${MYSQLCOMMON}" + fi + else + ADD_MYSQL_LIBS=${MYSQLSHARED} + fi + if [ "${MYSQL_INST_OPT}" = "mariadb" ] || [ "`has_mariadb`" != "0" ]; then + if [ ! -s ${SQL_PATH}/${MYSQLCOMMON} ]; then + getFile ${MYSQLURL}/${MYSQLCOMMON} "" mysql/${MYSQLCOMMON} + fi + if ${HAS_MYSQLCOMPAT}; then + if [ ! -s ${SQL_PATH}/${MYSQLCOMPAT} ]; then + getFile ${MYSQLURL}/${MYSQLCOMPAT} "" mysql/${MYSQLCOMPAT} + fi + fi + fi + + cd ${SQL_PATH} + + FILE1=${SQL_PATH}/${MYSQLCLIENT} + FILE2=${SQL_PATH}/${MYSQLDEVEL} + FILE3=${SQL_PATH}/${MYSQLSERVER} + FILE4=${SQL_PATH}/${MYSQLSHARED} + if [ "${MYSQL_INST_OPT}" = "mariadb" ] || [ "`has_mariadb`" != "0" ]; then + FILE5=${SQL_PATH}/${MYSQLCOMMON} + if ${HAS_MYSQLCOMPAT}; then + FILE6=${SQL_PATH}/${MYSQLCOMPAT} + fi + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + FILE10=${SQL_PATH}/${MYSQLBACKUP} + fi + fi + if ${MYSQL57_8x_SET}; then + FILE7=${SQL_PATH}/${MYSQLLIBS} + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + FILE8=${SQL_PATH}/${MYSQLLIBSCOMPAT} + fi + FILE9=${SQL_PATH}/${MYSQLCOMMON} + fi + checkFile ${FILE1} + checkFile ${FILE2} + checkFile ${FILE3} + if ! ${MYSQL57_8x_SET}; then + checkFile ${FILE4} + fi + if [ "${MYSQL_INST_OPT}" = "mariadb" ] ; then + checkFile ${FILE5} + if ${HAS_MYSQLCOMPAT}; then + checkFile ${FILE6} + fi + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + checkFile ${FILE10} + fi + echo "Installing dependencies..." + if [ "${OS_CENTOS_VER}" = "7" ] || [ "${OS_CENTOS_VER}" = "8" ]; then + CENTOS7_DEPS="boost-program-options perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-Compress-Raw-Zlib perl-DBI perl-Data-Dumper perl-IO-Compress perl-Net-Daemon perl-PlRPC lsof nmap rsync pcre2 socat" + if ! rpm -q --quiet ${CENTOS7_DEPS}; then + yum -y install ${CENTOS7_DEPS} + fi + elif [ "${OS_CENTOS_VER}" = "6" ]; then + CENTOS6_DEPS="boost-program-options perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-DBI lsof nmap compat-readline5" + if ! rpm -q --quiet ${CENTOS6_DEPS}; then + yum -y install ${CENTOS6_DEPS} + fi + fi + fi + if ${MYSQL57_8x_SET}; then + checkFile ${FILE7} + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + checkFile ${FILE8} + fi + checkFile ${FILE9} + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + echo "Installing libjemalloc..." + checkFile ${SQL_PATH}/${LIBJEMALLOC_FILE} + checkFile ${SQL_PATH}/${LIBJEMALLOC_DEV_FILE} + rpm -Uhv --nodeps --force ${SQL_PATH}/${LIBJEMALLOC_FILE} ${SQL_PATH}/${LIBJEMALLOC_DEV_FILE} + fi + echo "Installing galera..." + checkFile ${SQL_PATH}/${GALERA_FILE} + rpm -Uhv --nodeps --force ${SQL_PATH}/${GALERA_FILE} + fi + fi + + echo "Stopping mysqld ..." + control_service mysqld stop + if [ "${SYSTEMD}" = "yes" ]; then + if ! systemctl is-active --quiet mysqld; then + echo "Service didn't get stopped, sleeping for 20 secs and re-trying ..." + sleep 20 + echo "Stopping mysqld ..." + control_service mysqld stop + fi + fi + + #MariaDB renames my.cnf to rpmsave when removing RPMs, if we detect rpmsave before installation, we rename the file: https://mariadb.atlassian.net/browse/MDEV-4954 + if [ -e /etc/my.cnf.rpmsave ]; then + mv -f /etc/my.cnf.rpmsave /etc/my.cnf.rpmsave.custombuild + fi + if [ -e /etc/logrotate.d/mysql.rpmsave ]; then + mv -f /etc/logrotate.d/mysql.rpmsave /etc/logrotate.d/mysql.rpmsave.custombuild + fi + if [ -e /etc/logrotate.d/mysql ]; then + mv -f /etc/logrotate.d/mysql /etc/logrotate.d/mysql.rpmsave + fi + if [ -e /etc/my.cnf.d/mysql-clients.cnf.rpmsave ]; then + mv -f /etc/my.cnf.d/mysql-clients.cnf.rpmsave /etc/my.cnf.d/mysql-clients.cnf.rpmsave.custombuild + fi + if [ -e /etc/my.cnf.d/server.cnf.rpmsave ]; then + mv -f /etc/my.cnf.d/server.cnf.rpmsave /etc/my.cnf.d/server.cnf.rpmsave.custombuild + fi + + if [ -e /usr/bin/mysql ]; then + MYSQL_MAIN="`mysql_main`" + MYSQL_V="`/usr/bin/mysql --version | grep -m1 -o '[0-9]*\.[0-9]*\.[0-9]*'`" + MYSQL_UPGRADE="`/usr/bin/mysql --version | grep -c MariaDB`" + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + MYSQL_UPGRADE_VER=${MARIADB_OPT} + else + MYSQL_UPGRADE_VER=${MYSQL_OPT} + fi + #Switch from MySQL to MariaDB + if [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ "${MYSQL_UPGRADE}" = "0" ]; then + echo "Upgrading MySQL ${MYSQL_MAIN} to MariaDB ${MARIADB_OPT}" + for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do + rpm -ev --noscripts $i --nodeps + done + for i in `rpm -qa | grep -i "^mariadb"`; do + rpm -ev --noscripts $i --nodeps + done + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP} + else + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} + fi + #Switch from MariaDB to MySQL + elif [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_UPGRADE}" = "1" ]; then + echo "Upgrading MariaDB ${MYSQL_MAIN} to MySQL ${MYSQL_OPT}" + for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do + rpm -ev --noscripts $i --nodeps + done + for i in `rpm -qa | grep -i "^mariadb"`; do + rpm -ev --noscripts $i --nodeps + done + if ${MYSQL57_8x_SET}; then + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${ADD_MYSQL_LIBS} + else + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} + fi + elif [ "${MYSQL_MAIN}" != "${MYSQL_UPGRADE_VER}" ]; then + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + echo "Upgrading ${MYSQLNAME} ${MYSQL_V} to ${MYSQL_VER}" + for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do + rpm -ev --noscripts $i --nodeps + done + + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${ADD_MYSQL_LIBS} + else + echo "Upgrading ${MYSQLNAME} ${MYSQL_V} to ${MARIADB_VER}" + for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do + rpm -ev --noscripts $i --nodeps + done + for i in `rpm -qa | grep -i "^mariadb"`; do + rpm -ev --noscripts $i --nodeps + done + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP} + else + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} + fi + fi + else + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + echo "Updating ${MYSQLNAME} ${MYSQL_V} to ${MYSQL_VER}" + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${ADD_MYSQL_LIBS} + else + #In case mysql=5.5 & mariadb=5.5 + for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do + rpm -ev --noscripts $i --nodeps + done + echo "Updating ${MYSQLNAME} ${MYSQL_V} to ${MARIADB_VER}" + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP} + else + rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} + fi + fi + fi + else + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + echo "Cannot find /usr/bin/mysql, installing MySQL" + rpm -ihv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${ADD_MYSQL_LIBS} + else + echo "Cannot find /usr/bin/mysql, installing MariaDB" + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + + pwd + + echo "rpm -ihv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP}" + + rpm -ihv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP} + else + rpm -ihv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} + fi + fi + fi + + #Move rpmsave file back to original one: https://mariadb.atlassian.net/browse/MDEV-4954 + if [ -e /etc/my.cnf.rpmsave ]; then + if [ -e /etc/my.cnf ]; then + mv -f /etc/my.cnf /etc/my.cnf.rpmnew + fi + mv -f /etc/my.cnf.rpmsave /etc/my.cnf + fi + if [ -e /etc/my.cnf.d/server.cnf.rpmsave ]; then + if [ -e /etc/my.cnf.d/server.cnf ]; then + mv -f /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.rpmnew + fi + mv -f /etc/my.cnf.d/server.cnf.rpmsave /etc/my.cnf.d/server.cnf + fi + if [ -e /etc/my.cnf.d/mysql-clients.cnf.rpmsave ]; then + if [ -e /etc/my.cnf.d/mysql-clients.cnf ]; then + mv -f /etc/my.cnf.d/mysql-clients.cnf /etc/my.cnf.d/mysql-clients.cnf.rpmnew + fi + mv -f /etc/my.cnf.d/mysql-clients.cnf.rpmsave /etc/my.cnf.d/mysql-clients.cnf + fi + #Move logrotate file back to original one + if [ -e /etc/logrotate.d/mysql.rpmsave ]; then + if [ -e /etc/logrotate.d/mysql ]; then + mv -f /etc/logrotate.d/mysql /etc/logrotate.d/mysql.rpmnew + fi + mv -f /etc/logrotate.d/mysql.rpmsave /etc/logrotate.d/mysql + fi + if [ "${SYSTEMD}" = "yes" ]; then + MYSQL_SYSTEMD=${CB_SYSTEMD}/mysqld.service + + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + MYSQL_SYSTEMD_NAME=mysqld.service + if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then + MYSQL_SYSTEMD=${CB_SYSTEMD}/mysqld57.service + if [ ! -s "${MYSQL_SYSTEMD}" ] && [ -s /usr/lib/systemd/system/mysqld.service ]; then + MYSQL_SYSTEMD=/usr/lib/systemd/system/mysqld.service + echo "Using ${MYSQL_SYSTEMD}" + fi + fi + fi + + if [ -e ${CB_CUST_SYSTEMD}/mysqld.service ]; then + MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mysqld.service + fi + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + MYSQL_SYSTEMD_NAME=mariadb.service + if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ] || [ "${MARIADB_OPT}" = "11.4" ]; then + MYSQL_SYSTEMD=${CB_SYSTEMD}/mariadb.service + if [ -e ${CB_CUST_SYSTEMD}/mariadb.service ]; then + MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mariadb.service + fi + else + MYSQL_SYSTEMD=${CB_SYSTEMD}/mariadb55.service + if [ -e ${CB_CUST_SYSTEMD}/mariadb55.service ]; then + MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mariadb55.service + fi + fi + fi + if [ -e ${SYSTEMDDIR}/mysqld.service ] || [ -L ${SYSTEMDDIR}/mysqld.service ]; then + rm -f ${SYSTEMDDIR}/mysqld.service + fi + if [ -e ${SYSTEMDDIR}/mariadb.service ] || [ -L ${SYSTEMDDIR}/mariadb.service ]; then + rm -f ${SYSTEMDDIR}/mariadb.service + fi + if [ -e ${SYSTEMDDIR}/mysql.service ] || [ -L ${SYSTEMDDIR}/mysql.service ]; then + rm -f ${SYSTEMDDIR}/mysql.service + fi + cp -pf ${MYSQL_SYSTEMD} ${SYSTEMDDIR}/${MYSQL_SYSTEMD_NAME} + MYSQL_SYSTEMD_WAIT=${CB_SYSTEMD}/scripts/mysql-wait-ready + if [ -e ${CB_CUST_SYSTEMD}/scripts/mysql-wait-ready ]; then + MYSQL_SYSTEMD_WAIT=${CB_CUST_SYSTEMD}/scripts/mysql-wait-ready + fi + if [ -d /usr/libexec ]; then + cp -f ${MYSQL_SYSTEMD_WAIT} /usr/libexec/mysql-wait-ready + fi + DISABLE_PRIVATETMP=false + if [ -e /proc/1/environ ]; then + if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then + DISABLE_PRIVATETMP=true + fi + fi + if ${DISABLE_PRIVATETMP}; then + echo "LXC detected. Disabling PrivateTmp feature in mysqld.service for MySQL." + perl -pi -e 's#PrivateTmp \= true#PrivateTmp = false#' ${SYSTEMDDIR}/${MYSQL_SYSTEMD_NAME} + fi + systemctl daemon-reload + systemctl enable ${MYSQL_SYSTEMD_NAME} + fi + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e /etc/rc.d/init.d/mysql ]; then + /sbin/chkconfig --del mysql + rm -f /etc/rc.d/init.d/mysql + fi + else + if [ -e /etc/rc.d/init.d/mysql ]; then + /sbin/chkconfig --del mysql + mv -f /etc/rc.d/init.d/mysql /etc/rc.d/init.d/mysqld + /sbin/chkconfig --add mysqld + fi + fi + + setup_my_cnf + + if ! ${SQL_PATH_IS_EMPTY}; then + control_service mysqld start + + echo "Create symlink for Mariadbbb..." + ln -sf /usr/sbin/mariadbd /usr/sbin/mysqld + ln -sf /usr/sbin/mariadbd /usr/local/mysql/bin/mysql + ln -sf /usr/bin/mariadb /usr/bin/mysql + ln -sf /usr/bin/mariadb-dump /usr/bin/mysqldump + + echo "Giving mysqld a few seconds to start up..." + sleep 5 + + if ! /usr/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then + echo "Giving mysqld a another few seconds to start up..." + sleep 10 + fi + + if ! /usr/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then + echo "Giving mysqld last 20 seconds to start up..." + sleep 20 + fi + + if ! ${SKIP_MYSQL_UPGRADE}; then + if [ -e /usr/bin/mysql_upgrade ]; then + /usr/bin/mysql_upgrade --defaults-extra-file=${DA_MY_CNF} + elif [ -e /usr/bin/mysql_fix_privilege_tables ]; then + /usr/bin/mysql_fix_privilege_tables --defaults-extra-file=${DA_MY_CNF} + fi + fi + + if [ -e /usr/bin/mysqlcheck ]; then + /usr/bin/mysqlcheck --defaults-extra-file=${DA_MY_CNF} ${MYSQLCHECK_ARGS} + fi + + # Fixing "gcc: /usr/lib/mysql/libmysqlclient.so: No such file or directory" + if [ -d /usr/lib/mysql ] && [ -s /usr/lib/libmysqlclient.so ] && [ -d /usr/lib/mysql/ ]; then + cp -f /usr/lib/libmysqlclient.* /usr/lib/mysql/ + fi + fi + + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + writeLog "${MYSQL_INST_OPT} ${MARIADB_VER} installed" + else + writeLog "${MYSQL_INST_OPT} ${MYSQL_VER} installed" + fi + + fi + + if [ -e /etc/my.cnf ] && [ ! -h /etc/mysql/my.cnf ] && [ -d /etc/mysql ]; then + mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup + ln -sf /etc/my.cnf /etc/mysql/my.cnf + fi + + if ${SQL_PATH_IS_EMPTY}; then + setup_mysql_root_user + fi + set_service mysqld ON + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + echo "Restarting MySQL." + control_service mysqld restart + + if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then + if [ "${MARIADB_OPT}" = "5.5" ] || [ "${MARIADB_OPT}" = "5.6" ] || [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ]; then + MAX_USERNAME_LENGTH=`${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e "select CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_schema = 'mysql' AND table_name = 'user' AND COLUMN_NAME = 'User';" -sss 2>/dev/null` + if [ "${MAX_USERNAME_LENGTH}" = "16" ]; then + echo "Increasing Max Username Length from 16 to 80..." + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.user MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.db MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.tables_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.columns_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.procs_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.proc MODIFY definer CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.event MODIFY definer CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.proxies_priv MODIFY User CHAR(80) COLLATE utf8_bin NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.proxies_priv MODIFY Proxied_user CHAR(80) COLLATE utf8_bin NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.proxies_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.servers MODIFY Username CHAR(80) NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.procs_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.tables_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';" + ${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "FLUSH PRIVILEGES;" + fi + fi + fi + echo "Installation completed." + cd ${CWD} +} + +#################################################### + +doPhpIni() { + if [ "${PHP_INI_OPT}" = "no" ]; then + do_exit 1 "Cannot install php.ini because it is not set in options.conf." + fi + + getFile php-${PHP1_RELEASE_VER}.tar.gz php${PHP1_SHORTRELEASE} + FILE=${CWD}/php-${PHP1_RELEASE_VER}.tar.gz + + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + cd php-${PHP1_RELEASE_VER} + if [ $? -ne 0 ]; then + do_exit 1 "Failed to change directory to: php-${PHP1_RELEASE_VER}. Exiting..." + fi + + COUNT=`grep -m1 -c '^date.timezone' php.ini-${PHP_INI_TYPE_OPT}` + COUNT2=`grep -m1 -c ';date.timezone' php.ini-${PHP_INI_TYPE_OPT}` + if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}" + echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> php.ini-${PHP_INI_TYPE_OPT} + elif [ "$COUNT" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}" + perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" php.ini-${PHP_INI_TYPE_OPT} + fi + + /usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' php.ini-${PHP_INI_TYPE_OPT} + /usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' php.ini-${PHP_INI_TYPE_OPT} + + #short_open_tag: https://help.directadmin.com/item.php?id=438 + perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHP_INI_TYPE_OPT} + + if [ "${X_MAIL_HEADER_OPT}" = "yes" ]; then + echo "Enabling mail.add_x_header option in php.ini" + /usr/bin/perl -pi -e 's/mail.add_x_header = Off/mail.add_x_header = On/' php.ini-${PHP_INI_TYPE_OPT} + /usr/bin/perl -pi -e 's/mail.add_x_header = 0/mail.add_x_header = On/' php.ini-${PHP_INI_TYPE_OPT} + if ! grep -m1 -q '^mail.add_x_header' php.ini-${PHP_INI_TYPE_OPT}; then + echo "mail.add_x_header = On" >> php.ini-${PHP_INI_TYPE_OPT} + fi + else + echo "Disabling mail.add_x_header option in php.ini" + /usr/bin/perl -pi -e 's/^mail.add_x_header =/;mail.add_x_header =/' php.ini-${PHP_INI_TYPE_OPT} + fi + + PHP_INI_VAR=PHP_INI_FPM${PHP1_SHORTRELEASE} + cp -f php.ini-${PHP_INI_TYPE_OPT} $(eval_var ${PHP_INI_VAR}) + writeLog "$(eval_var ${PHP_INI_VAR}) installed" + + echo "Done for php1_release." + + cd ${WORKDIR} + + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + PHP_VERSION2_EVAL_VAR=PHP${PHP2_SHORTRELEASE}_VER + PHP_VERSION2_VAR=$(eval_var ${PHP_VERSION2_EVAL_VAR}) + getFile php-${PHP2_RELEASE_VER}.tar.gz php${PHP2_SHORTRELEASE} + FILE=${CWD}/php-${PHP2_RELEASE_VER}.tar.gz + + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + cd php-${PHP2_RELEASE_VER} + + COUNT=`grep -m1 -c '^date.timezone' php.ini-${PHP_INI_TYPE_OPT}` + COUNT2=`grep -m1 -c ';date.timezone' php.ini-${PHP_INI_TYPE_OPT}` + if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}" + echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> php.ini-${PHP_INI_TYPE_OPT} + elif [ "$COUNT" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}" + perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" php.ini-${PHP_INI_TYPE_OPT} + fi + + /usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' php.ini-${PHP_INI_TYPE_OPT} + /usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' php.ini-${PHP_INI_TYPE_OPT} + + #short_open_tag: https://help.directadmin.com/item.php?id=438 + /usr/bin/perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHP_INI_TYPE_OPT} + + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + PHP_INI_VAR=PHP_INI_FPM${PHP2_SHORTRELEASE} + cp -f php.ini-${PHP_INI_TYPE_OPT} $(eval_var ${PHP_INI_VAR}) + writeLog "$(eval_var ${PHP_INI_VAR}) installed" + fi + echo "Done for php2_release" + fi + + cd ${WORKDIR} + + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + PHP_VERSION3_EVAL_VAR=PHP${PHP3_SHORTRELEASE}_VER + PHP_VERSION3_VAR=$(eval_var ${PHP_VERSION3_EVAL_VAR}) + getFile php-${PHP3_RELEASE_VER}.tar.gz php${PHP3_SHORTRELEASE} + FILE=${CWD}/php-${PHP3_RELEASE_VER}.tar.gz + + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + cd php-${PHP3_RELEASE_VER} + + COUNT=`grep -m1 -c '^date.timezone' php.ini-${PHP_INI_TYPE_OPT}` + COUNT2=`grep -m1 -c ';date.timezone' php.ini-${PHP_INI_TYPE_OPT}` + if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}" + echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> php.ini-${PHP_INI_TYPE_OPT} + elif [ "$COUNT" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}" + perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" php.ini-${PHP_INI_TYPE_OPT} + fi + + /usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' php.ini-${PHP_INI_TYPE_OPT} + /usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' php.ini-${PHP_INI_TYPE_OPT} + + #short_open_tag: https://help.directadmin.com/item.php?id=438 + /usr/bin/perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHP_INI_TYPE_OPT} + + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + PHP_INI_VAR=PHP_INI_FPM${PHP3_SHORTRELEASE} + cp -f php.ini-${PHP_INI_TYPE_OPT} $(eval_var ${PHP_INI_VAR}) + writeLog "$(eval_var ${PHP_INI_VAR}) installed" + fi + echo "Done for php3_release" + fi + + cd ${WORKDIR} + + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + PHP_VERSION4_EVAL_VAR=PHP${PHP4_SHORTRELEASE}_VER + PHP_VERSION4_VAR=$(eval_var ${PHP_VERSION4_EVAL_VAR}) + getFile php-${PHP4_RELEASE_VER}.tar.gz php${PHP4_SHORTRELEASE} + FILE=${CWD}/php-${PHP4_RELEASE_VER}.tar.gz + + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + cd php-${PHP4_RELEASE_VER} + + COUNT=`grep -m1 -c '^date.timezone' php.ini-${PHP_INI_TYPE_OPT}` + COUNT2=`grep -m1 -c ';date.timezone' php.ini-${PHP_INI_TYPE_OPT}` + if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}" + echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> php.ini-${PHP_INI_TYPE_OPT} + elif [ "$COUNT" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}" + perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" php.ini-${PHP_INI_TYPE_OPT} + fi + + /usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' php.ini-${PHP_INI_TYPE_OPT} + /usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' php.ini-${PHP_INI_TYPE_OPT} + + #short_open_tag: https://help.directadmin.com/item.php?id=438 + /usr/bin/perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHP_INI_TYPE_OPT} + + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + PHP_INI_VAR=PHP_INI_FPM${PHP4_SHORTRELEASE} + cp -f php.ini-${PHP_INI_TYPE_OPT} $(eval_var ${PHP_INI_VAR}) + writeLog "$(eval_var ${PHP_INI_VAR}) installed" + fi + echo "Done for php4_release" + fi + + cd ${WORKDIR} + +} + +#################################################### + +disable_asm_atomic() { + # for this error: + # /usr/include/mysql/my_global.h:361:24: error: asm/atomic.h: No such file or directory + + MY_GLOBAL=/usr/include/mysql/my_global.h + if [ ${OS} = "FreeBSD" ] || [ -e /etc/debian_version ]; then + MY_GLOBAL=/usr/local/mysql/include/my_global.h + fi + + if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ]; then + if [ -e ${MY_GLOBAL} ]; then + echo "Disabling asm/atomic in ${MY_GLOBAL}" + perl -pi -e 's#\#include #//\#include #' ${MY_GLOBAL} + fi + fi +} + +#################################################### + +doSuPhp() { + getFile suphp-${SUPHP_VER}.tar.gz suphp_current + + getFile patches/suphp_calling_user.patch suphp_calling_user.patch + getFile patches/suphp_script_name.patch suphp_script_name.patch + getFile patches/suphp_attachment.patch suphp_attachment.patch + quitIfLocked doSuPhp + + cd ${CWD} + FILE=${CWD}/suphp-${SUPHP_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + + mkdir -p /usr/local/suphp/etc + cd suphp-${SUPHP_VER} + + patch -p1 < ../patches/suphp_calling_user.patch + patch -p1 < ../patches/suphp_script_name.patch + patch -p1 < ../patches/suphp_attachment.patch + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + patch -p1 < ../suphp-0.7.2-cagefs.am.patch + fi + + if [ "${SUPHP_VER}" != "0.7.1" ]; then + echo "re-configuring suphp configure..." + + echo "calling aclocal:" + perl -pi -e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.ac + aclocal + + echo "calling libtoolize:" + libtoolize --force + + echo "calling automake:" + automake --add-missing + + echo "calling autoreconf:" + autoreconf + fi + + perl -pi -e 's#"\$major_version" = "2.2"#"\$major_version" = "2.4"#' ./configure + + echo "Configuring suphp-${SUPHP_VER}..." + CONF_FILE=${CWD}/${SUPHP_CONFIGURE} + + ${CONF_FILE} + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure suPHP. Check the ${SUPHP_CONFIGURE} file\n" + do_exit 1 + fi + + echo "Done Configuration." + + while echo "Trying to make suPHP..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): " + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make Complete" + + if [ -e /usr/lib/apache/mod_suphp.so ]; then + rm -f /usr/lib/apache/mod_suphp.so + fi + + while echo "Installing suPHP..."; do + #only freebsd 7 seemed affected with this, thus added. + chmod 755 config/install-sh + + make install + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + touch /var/log/suphp.log + + echo "suPHP ${SUPHP_VER} Installed." + writeLog "suPHP ${SUPHP_VER} installed" + removeLockfile + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doRemoveSuPhp() { + REMOVED_SUPHP=0 + if [ -d /usr/local/suphp ]; then + REMOVED_SUPHP=1 + fi + remove_directory /usr/local/suphp + remove_file /var/log/suphp.log + + if [ "${REMOVED_SUPHP}" = "1" ]; then + echo "suPHP has been successfully removed." + writeLog "suPHP removed" + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + fi +} + +#################################################### + +set_sendmail_link() { + + SM=/usr/sbin/sendmail + MW=/usr/sbin/mailwrapper + LINK_TO_EXIM="ln -sf exim ${SM}" + + if [ "$OS" = "FreeBSD" ] && [ -x ${MW} ]; then + MC=/etc/mail/mailer.conf + T=${MC}.temp + E=`grep -m1 -c exim ${MC}` + if [ "${E}" -eq 0 ]; then + cp -f ${MC} ${MC}.backup + curl ${CURL_CONNECT_OPTIONS} -o ${T} ${WEBPATH_SERVICES}/mailer.conf + + if [ ! -s ${T} ]; then + ${LINK_TO_EXIM} + return + fi + + cp -f ${T} ${MC} + fi + + L=`readlink $SM` + if [ "${L}" = "exim" ]; then + ln -sf ${MW} ${SM} + + fi + + return + fi + + ${LINK_TO_EXIM} +} + +#################################################### + +doExtensions_build() { + EXTENSION_INT_RELEASE=$1 + EXTENSION_INT_MODE=$2 + EXTENSION_NAME=$3 + EXTENSION_SHORT_RELEASE=`echo ${EXTENSION_INT_RELEASE} | tr -d '.'` + + if [ "${EXTENSION_NAME}" = "" ]; then + EXTENSION_NAME="all" + fi + + OS_EXT=lin + if [ "$OS" = "FreeBSD" ]; then + OS_EXT=fre + if [ "${ZEND_OPT}" = "yes" ]; then + echo "Zend Guard loader does not support FreeBSD." + fi + fi + + if [ "${EXTENSION_INT_MODE}" = "no" ]; then + do_exit 1 "Cannot build PHP extensions for mode ${EXTENSION_INT_MODE}." + else + SUHOSIN_UPLOADSCAN_FILENAME=/usr/local/php${EXTENSION_SHORT_RELEASE}/bin/php_uploadscan.sh + if [ -d /usr/local/php${EXTENSION_SHORT_RELEASE} ]; then + mkdir -p /usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d + fi + EXTENSION_INT_EXT_DIR=`/usr/local/php${EXTENSION_SHORT_RELEASE}/bin/php-config --extension-dir` + EXTENSION_INT_PHP_INI=/usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.ini + EXTENSION_INT_EXT_INI=/usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d/10-directadmin.ini + fi + + #Make extensions file empty + echo -n '' > ${EXTENSION_INT_EXT_INI} + + #We do comment out ioncube/zend from the old php.ini file only, because old configs cannot exist + if [ -e ${EXTENSION_INT_PHP_INI} ]; then + if [ "${HTSCANNER_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=htscanner.so|;extension=htscanner.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${SUHOSIN_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=suhosin.so|;extension=suhosin.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_GMP_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=gmp.so|;extension=gmp.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=igbinary.so|;extension=igbinary.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${IMAGICK_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=imagick.so|;extension=imagick.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_LDAP_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=ldap.so|;extension=ldap.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_PHALCON_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=phalcon.so|;extension=phalcon.so|' ${EXTENSION_INT_PHP_INI} + perl -pi -e 's|^extension=psr.so|;extension=psr.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_READLINE_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=readline.so|;extension=readline.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_REDIS_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=redis.so|;extension=redis.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=snuffleupagus.so|;extension=snuffleupagus.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_BZ2_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=bz2.so|;extension=bz2.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_IMAP_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=imap.so|;extension=imap.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${PHP_XMLRPC_OPT}" = "yes" ]; then + perl -pi -e 's|^extension=xmlrpc.so|;extension=xmlrpc.so|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${OPCACHE_OPT}" = "yes" ]; then + perl -pi -e "s|^zend_extension=${EXTENSION_INT_EXT_DIR}/opcache.so|;zend_extension=${EXTENSION_INT_EXT_DIR}/opcache.so|" ${EXTENSION_INT_PHP_INI} + fi + if [ "${IONCUBE_OPT}" = "yes" ]; then + perl -pi -e 's|^zend_extension=/usr/local/lib/ioncube|;zend_extension=/usr/local/lib/ioncube|' ${EXTENSION_INT_PHP_INI} + fi + if [ "${ZEND_OPT}" = "yes" ]; then + perl -pi -e 's|^zend_extension=/usr/local/lib/ZendGuardLoader.so|;zend_extension=/usr/local/lib/ZendGuardLoader.so|' ${EXTENSION_INT_PHP_INI} + perl -pi -e 's|^zend_extension=/usr/local/lib/ZendOptimizer_|;zend_extension=/usr/local/lib/ZendOptimizer_|' ${EXTENSION_INT_PHP_INI} + fi + + #Make extensions file empty + echo -n '' > ${EXTENSION_INT_EXT_INI} + + if [ -e ${EXTENSION_INT_EXT_INI} ]; then + echo "extension_dir=${EXTENSION_INT_EXT_DIR}" >> ${EXTENSION_INT_EXT_INI} + if [ "${SUHOSIN_OPT}" = "yes" ] && [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "7.0" ] && [ "${EXTENSION_INT_RELEASE}" != "7.1" ] && [ "${EXTENSION_INT_RELEASE}" != "7.2" ] && [ "${EXTENSION_INT_RELEASE}" != "7.3" ] && [ "${EXTENSION_INT_RELEASE}" != "7.4" ] && [ "${EXTENSION_INT_RELEASE}" != "8.0" ] && [ "${EXTENSION_INT_RELEASE}" != "8.1" ]; then + echo "extension=suhosin.so" >> ${EXTENSION_INT_EXT_INI} + if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] && [ -e /usr/local/bin/clamdscan ]; then + cp -f ${SUHOSIN_PHP_UPLOADSCAN_SCRIPT} ${SUHOSIN_UPLOADSCAN_FILENAME} + chmod 755 ${SUHOSIN_UPLOADSCAN_FILENAME} + echo "suhosin.upload.verification_script=\"${SUHOSIN_UPLOADSCAN_FILENAME}\"" >> ${EXTENSION_INT_EXT_INI} + elif [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] && [ ! -e /usr/local/bin/clamdscan ]; then + if [ "${EXTENSION_NAME}" = "suhosin" ] || [ "${EXTENSION_NAME}" = "all" ]; then + echo "Cannot enable suhosin upload verification script (suhosin_php_uploadscan option), because /usr/local/bin/clamdscan does not exist on the system." + fi + fi + if [ -e ${WORKDIR}/${SUHOSIN_INI} ]; then + cat ${WORKDIR}/${SUHOSIN_INI} >> ${EXTENSION_INT_EXT_INI} + echo "" >> ${EXTENSION_INT_EXT_INI} + fi + if [ "${EXTENSION_NAME}" = "suhosin" ] || [ "${EXTENSION_NAME}" = "all" ]; then + echo "suhosin ${SUHOSIN_VER} is now installed for PHP ${EXTENSION_INT_RELEASE}." + fi + fi + + if [ "${HTSCANNER_OPT}" = "yes" ] && [ "${EXTENSION_INT_MODE}" != "mod_php" ] && [ "${EXTENSION_INT_MODE}" != "lsphp" ] && [ "${EXTENSION_INT_RELEASE}" != "8.0" ] && [ "${EXTENSION_INT_RELEASE}" != "8.1" ]; then + if [ "${HAVE_CLI}" = "no" ]; then + #FreeBSD 10 fix + if [ -e ${EXTENSION_INT_EXT_DIR}/libhtscanner.so.0.0 ]; then + ln -sf ${EXTENSION_INT_EXT_DIR}/libhtscanner.so.0.0 ${EXTENSION_INT_EXT_DIR}/htscanner.so + fi + echo "extension=htscanner.so" >> ${EXTENSION_INT_EXT_INI} + if [ "${EXTENSION_NAME}" = "htscanner" ] || [ "${EXTENSION_NAME}" = "all" ]; then + echo "htscanner ${HTSCANNER_VER} is now installed for PHP ${EXTENSION_INT_RELEASE}." + fi + fi + fi + + if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then + if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then + echo "extension=igbinary.so" >> ${EXTENSION_INT_EXT_INI} + else + echo "There is no igbinary available for PHP ${EXTENSION_INT_RELEASE}." + fi + fi + + if [ "${IONCUBE_OPT}" = "yes" ]; then + if [ "${EXTENSION_INT_RELEASE}" != "4.1" ] && [ "${EXTENSION_INT_RELEASE}" != "4.2" ]; then + echo "zend_extension=/usr/local/lib/ioncube/ioncube_loader_${OS_EXT}_${EXTENSION_INT_RELEASE}.so" >> ${EXTENSION_INT_EXT_INI} + if [ "${EXTENSION_NAME}" = "ioncube" ] || [ "${EXTENSION_NAME}" = "all" ]; then + echo "ionCube loader ${IONCUBE_VER} is now installed for PHP ${EXTENSION_INT_RELEASE}." + fi + else + echo "There is no ionCube loader available for PHP ${EXTENSION_INT_RELEASE}." + fi + fi + + if [ "${PHP_PHALCON_OPT}" = "yes" ]; then + if [ "${EXTENSION_INT_RELEASE}" = "7.2" ] || [ "${EXTENSION_INT_RELEASE}" = "7.3" ] || [ "${EXTENSION_INT_RELEASE}" = "7.4" ]; then + echo "extension=psr.so" >> ${EXTENSION_INT_EXT_INI} + echo "extension=phalcon.so" >> ${EXTENSION_INT_EXT_INI} + else + echo "There is no phalcon available for PHP ${EXTENSION_INT_RELEASE}." + fi + fi + + if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then + if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then + echo "extension=snuffleupagus.so" >> ${EXTENSION_INT_EXT_INI} + echo "sp.configuration_file=/usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d/snuffleupagus.rules" >> ${EXTENSION_INT_EXT_INI} + if [ ! -e /usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d/snuffleupagus.rules ]; then + touch /usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d/snuffleupagus.rules + fi + else + echo "There is no snuffleupagus available for PHP ${EXTENSION_INT_RELEASE}." + fi + fi + + if [ "${PHP_BZ2_OPT}" = "yes" ]; then + echo "extension=bz2.so" >> ${EXTENSION_INT_EXT_INI} + fi + + if [ "${PHP_GMP_OPT}" = "yes" ]; then + echo "extension=gmp.so" >> ${EXTENSION_INT_EXT_INI} + fi + + if [ "${PHP_READLINE_OPT}" = "yes" ]; then + echo "extension=readline.so" >> ${EXTENSION_INT_EXT_INI} + fi + + if [ "${PHP_REDIS_OPT}" = "yes" ]; then + if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then + echo "extension=redis.so" >> ${EXTENSION_INT_EXT_INI} + fi + fi + + if [ "${IMAGICK_OPT}" = "yes" ]; then + echo "extension=imagick.so" >> ${EXTENSION_INT_EXT_INI} + fi + + if [ "${PHP_IMAP_OPT}" = "yes" ]; then + echo "extension=imap.so" >> ${EXTENSION_INT_EXT_INI} + fi + + if [ "${PHP_LDAP_OPT}" = "yes" ]; then + echo "extension=ldap.so" >> ${EXTENSION_INT_EXT_INI} + fi + + if [ "${PHP_XMLRPC_OPT}" = "yes" ]; then + echo "extension=xmlrpc.so" >> ${EXTENSION_INT_EXT_INI} + fi + + if [ "${ZEND_OPT}" = "yes" ]; then + # Only supported by PHP5 + if echo "${EXTENSION_INT_RELEASE}" | grep -m1 -q '^5'; then + echo "zend_extension=/usr/local/lib/ZendGuardLoader${EXTENSION_INT_RELEASE}.so" >> ${EXTENSION_INT_EXT_INI} + if [ "${EXTENSION_NAME}" = "zend" ] || [ "${EXTENSION_NAME}" = "all" ]; then + echo "Zend Guard loader is now installed for PHP ${EXTENSION_INT_RELEASE}." + fi + elif [ "${EXTENSION_NAME}" = "zend" ] || [ "${EXTENSION_NAME}" = "all" ]; then + echo "There is no Zend Guard loader available for PHP ${EXTENSION_INT_RELEASE}." + fi + fi + + if [ "${OPCACHE_OPT}" = "yes" ]; then + echo "zend_extension=${EXTENSION_INT_EXT_DIR}/opcache.so" >> ${EXTENSION_INT_EXT_INI} + if [ -e ${WORKDIR}/${OPCACHE_INI} ]; then + cat ${WORKDIR}/${OPCACHE_INI} >> ${EXTENSION_INT_EXT_INI} + echo "" >> ${EXTENSION_INT_EXT_INI} + + fi + if [ "${EXTENSION_INT_RELEASE}" = "5.4" ] || [ "${EXTENSION_INT_RELEASE}" = "5.4" ]; then + SHOW_EXT_VERSION=" ${OPCACHE_VER}" + else + SHOW_EXT_VERSION="" + fi + if [ "${EXTENSION_NAME}" = "opcache" ] || [ "${EXTENSION_NAME}" = "all" ]; then + echo "opCache${SHOW_EXT_VERSION} is now installed for PHP ${EXTENSION_INT_RELEASE}." + fi + fi + fi + fi +} + +doExtensions() { + DO_EXT_SKIP_RESTART=0 + if [ "$1" = "1" ]; then + DO_EXT_SKIP_RESTART=1 + fi + + PHP_VERSION="${2}" + if [ "${PHP_VERSION}" = "" ]; then + PHP_VERSION="all" + fi + + doExtensions_build ${PHP1_RELEASE_OPT} ${PHP1_MODE_OPT} ${PHP_VERSION} + + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + doExtensions_build ${PHP2_RELEASE_OPT} ${PHP2_MODE_OPT} ${PHP_VERSION} + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + doExtensions_build ${PHP3_RELEASE_OPT} ${PHP3_MODE_OPT} ${PHP_VERSION} + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + doExtensions_build ${PHP4_RELEASE_OPT} ${PHP4_MODE_OPT} ${PHP_VERSION} + fi + + SKIP_WEBSERVER_RESTART=0 + + if [ "${DO_EXT_SKIP_RESTART}" = "0" ]; then + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + if [ "${PHP2_MODE_OPT}" = "php-fpm" ] || [ "${PHP2_RELEASE_OPT}" = "no" ]; then + SKIP_WEBSERVER_RESTART=1 + fi + if [ "${PHP3_MODE_OPT}" = "php-fpm" ] || [ "${PHP3_RELEASE_OPT}" = "no" ]; then + SKIP_WEBSERVER_RESTART=1 + fi + if [ "${PHP4_MODE_OPT}" = "php-fpm" ] || [ "${PHP4_RELEASE_OPT}" = "no" ]; then + SKIP_WEBSERVER_RESTART=1 + fi + fi + + if [ "${SKIP_WEBSERVER_RESTART}" = "0" ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service nginx stop >/dev/null 2>&1 + control_service nginx start + fi + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service httpd restart + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + control_service litespeed reload + fi + fi + + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + echo "Restarting php-fpm${PHP1_SHORTRELEASE}." + control_service php-fpm${PHP1_SHORTRELEASE} restart + fi + if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP2_SHORTRELEASE}." + control_service php-fpm${PHP2_SHORTRELEASE} restart + fi + if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP3_SHORTRELEASE}." + control_service php-fpm${PHP3_SHORTRELEASE} restart + fi + if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP4_SHORTRELEASE}." + control_service php-fpm${PHP4_SHORTRELEASE} restart + fi + fi +} + +#################################################### + +doPHPHtscanner() { + if [ "${HAVE_CLI}" = "no" ]; then + HTSCANNER_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + cd ${CWD} + if [ "${HTSCANNER_OPT}" = "no" ]; then + do_exit 1 "Cannot build htscanner, because you do not have it set in php_extensions.conf file." + fi + if [ -z $1 ] || [ "$1" = "no" ]; then + return + fi + if [ -z $2 ]; then + SKIP_RESTART=0 + else + SKIP_RESTART=$2 + fi + getFile htscanner-${HTSCANNER_VER}.tgz htscanner + + FILE=${CWD}/htscanner-${HTSCANNER_VER}.tgz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} + cd htscanner-${HTSCANNER_VER} + + echo "Installing htscanner2-${HTSCANNER_VER} PHP extension for PHP $1..." + + /usr/local/php${HTSCANNER_INT_SHORTRELEASE}/bin/phpize + ./configure --enable-htscanner --with-php-config=/usr/local/php${HTSCANNER_INT_SHORTRELEASE}/bin/php-config + while echo "Trying to make htscanner2-${HTSCANNER_VER} PHP extension..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 0 + fi + else + break + fi + done + echo "Make complete" + echo "Installing htscanner2-${HTSCANNER_VER} PHP extension..." + make install + + make clean + doExtensions_build $1 php-fpm htscanner + + echo "htscanner2 PHP extension has been installed successfully." + + cd ${CWD} + fi +} + +#################################################### + +doZend_build() { + cd ${CWD} + + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + do_exit 1 "Missing parameters for doZend call. Exiting..." + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + if [ "$OS" != "FreeBSD" ]; then + ZEND_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + if [ "$1" = "5.3" ]; then + ZEND_INT_FILENAME=${ZENDFILE_GUARD53} + ZEND_INT_ZENDNAME=${ZENDNAME_PHP53} + ZEND_INT_LONGVER="$1" + ZEND_INT_MD5=${ZENDNAME_PHP53_MD5} + ZEND_TARBALL_FORMAT=1 + elif [ "$1" = "5.4" ]; then + ZEND_INT_FILENAME=${ZENDFILE_GUARD54} + ZEND_INT_ZENDNAME=${ZENDNAME_PHP54} + ZEND_INT_LONGVER="$1" + ZEND_INT_MD5=${ZENDNAME_PHP54_MD5} + ZEND_TARBALL_FORMAT=1 + elif [ "$1" = "5.5" ]; then + ZEND_INT_FILENAME=${ZENDFILE_GUARD55} + ZEND_INT_ZENDNAME=${ZENDNAME_PHP55} + ZEND_INT_LONGVER="$1" + ZEND_INT_MD5=${ZENDNAME_PHP55_MD5} + ZEND_TARBALL_FORMAT=0 + elif [ "$1" = "5.6" ]; then + ZEND_INT_FILENAME=${ZENDFILE_GUARD56} + ZEND_INT_ZENDNAME=${ZENDNAME_PHP56} + ZEND_INT_LONGVER="$1" + ZEND_INT_MD5=${ZENDNAME_PHP56_MD5} + ZEND_TARBALL_FORMAT=0 + elif [ ! -z "$1" ]; then + echo "Zend guard loader not supported for PHP version ($1) set in configuration file" + return + fi + getFile ${ZEND_INT_FILENAME} ${ZEND_INT_MD5} + fi + + if [ "${ZEND_OPT}" != "yes" ]; then + do_exit 1 "You cannot install Zend Guard Loader, because you do not have it set in the options.conf file." + fi + + if [ "$OS" = "FreeBSD" ]; then + echo "Zend Guard loader does not support FreeBSD." + else + cd ${CWD} + tar xzf ${ZEND_INT_FILENAME} --no-same-owner + if [ ${ZEND_TARBALL_FORMAT} -eq 1 ]; then + cp -fp ${ZEND_INT_ZENDNAME}/php-${ZEND_INT_LONGVER}.x/ZendGuardLoader.so /usr/local/lib/ZendGuardLoader${ZEND_INT_LONGVER}.so + else + OPCACHE_EXTENSION_DIR_SHORT_RELEASE=`echo ${ZEND_INT_LONGVER} | tr -d '.'` + OPCACHE_EXT_DIR=`/usr/local/php${OPCACHE_EXTENSION_DIR_SHORT_RELEASE}/bin/php-config --extension-dir` + cp -fp ${ZEND_INT_ZENDNAME}/ZendGuardLoader.so /usr/local/lib/ZendGuardLoader${ZEND_INT_LONGVER}.so + fi + chmod 755 /usr/local/lib/ZendGuardLoader${ZEND_INT_LONGVER}.so + chown root:${ROOT_GRP} /usr/local/lib/ZendGuardLoader${ZEND_INT_LONGVER}.so + doExtensions_build ${ZEND_INT_LONGVER} ${2} zend + fi +} + +#################################################### + +doZend() { + cd ${CWD} + + doZend_build ${PHP1_RELEASE_OPT} ${PHP1_MODE_OPT} 1 + + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + doZend_build ${PHP2_RELEASE_OPT} ${PHP2_MODE_OPT} 1 + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + doZend_build ${PHP3_RELEASE_OPT} ${PHP3_MODE_OPT} 1 + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + doZend_build ${PHP4_RELEASE_OPT} ${PHP4_MODE_OPT} 1 + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + SKIP_WEBSERVER_RESTART=0 + + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + if [ "${PHP2_MODE_OPT}" = "php-fpm" ] || [ "${PHP2_RELEASE_OPT}" = "no" ]; then + SKIP_WEBSERVER_RESTART=1 + fi + if [ "${PHP3_MODE_OPT}" = "php-fpm" ] || [ "${PHP3_RELEASE_OPT}" = "no" ]; then + SKIP_WEBSERVER_RESTART=1 + fi + if [ "${PHP4_MODE_OPT}" = "php-fpm" ] || [ "${PHP4_RELEASE_OPT}" = "no" ]; then + SKIP_WEBSERVER_RESTART=1 + fi + fi + + if [ "${SKIP_WEBSERVER_RESTART}" = "0" ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service nginx stop >/dev/null 2>&1 + control_service nginx start + fi + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service httpd restart + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + control_service litespeed reload + fi + fi + + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + echo "Restarting php-fpm${PHP1_SHORTRELEASE}." + control_service php-fpm${PHP1_SHORTRELEASE} restart + fi + if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP2_SHORTRELEASE}." + control_service php-fpm${PHP2_SHORTRELEASE} restart + fi + if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP3_SHORTRELEASE}." + control_service php-fpm${PHP3_SHORTRELEASE} restart + fi + if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + echo "Restarting php-fpm${PHP4_SHORTRELEASE}." + control_service php-fpm${PHP4_SHORTRELEASE} restart + fi + + writeLog "zend installed" +} + +#################################################### + +doIoncube() { + cd ${CWD} + + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + IONCUBE_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + rm -f ${IONCUBEFILE} + getFile ioncube_${IONCUBE_VER}/${IONCUBEFILE} ${IONCUBENAME} ${IONCUBEFILE} + if [ "${IONCUBE_OPT}" != "yes" ]; then + do_exit 1 "You cannot install ionCube loader, because you do not have it set in php_extensions.conf file." + fi + + tar xzf ${IONCUBEFILE} --no-same-owner + + if [ -d ioncube ]; then + chown -R root:${ROOT_GRP} ioncube + fi + + if [ -d /usr/local/lib/ioncube ]; then + rm -rf /usr/local/lib/ioncube + fi + + mv -f ioncube /usr/local/lib/ + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ioncube + else + doExtensions_build ${1} ${2} ioncube + fi + + writeLog "Ioncube ${IONCUBE_VER} installed" +} + +#################################################### + +installSuhosin() { + if [ -z $1 ] || [ "$1" = "no" ]; then + return + fi + echo "Installing suhosin-${SUHOSIN_VER} PHP extension for PHP $1..." + + /usr/local/php$1/bin/phpize + ./configure --with-php-config=/usr/local/php$1/bin/php-config + while echo "Trying to make suhosin-${SUHOSIN_VER} PHP extension..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + make install + + make clean +} + +doSuhosin() { + cd ${CWD} + if [ "${SUHOSIN_OPT}" = "no" ]; then + do_exit 1 "Cannot build suhosin, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + SUHOSIN_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + getFile suhosin-${SUHOSIN_VER}.tar.gz suhosin + + FILE=${CWD}/suhosin-${SUHOSIN_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} + cd suhosin-${SUHOSIN_VER} + + if [ "${FOR_ALL}" = "no" ]; then + if [ "${SUHOSIN_INT_SHORTRELEASE}" != "53" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "70" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "71" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "72" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "73" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "74" ]; then + installSuhosin ${SUHOSIN_INT_SHORTRELEASE} $2 + fi + else + if [ "${PHP1_SHORTRELEASE}" != "53" ] && [ "${PHP1_SHORTRELEASE}" != "70" ] && [ "${PHP1_SHORTRELEASE}" != "71" ] && [ "${PHP1_SHORTRELEASE}" != "72" ] && [ "${PHP1_SHORTRELEASE}" != "73" ] && [ "${PHP1_SHORTRELEASE}" != "74" ]; then + installSuhosin ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_SHORTRELEASE}" != "53" ] && [ "${PHP2_SHORTRELEASE}" != "70" ] && [ "${PHP2_SHORTRELEASE}" != "71" ] && [ "${PHP2_SHORTRELEASE}" != "72" ] && [ "${PHP2_SHORTRELEASE}" != "73" ] && [ "${PHP2_SHORTRELEASE}" != "74" ]; then + installSuhosin ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT} + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ "${PHP3_SHORTRELEASE}" != "53" ] && [ "${PHP3_SHORTRELEASE}" != "70" ] && [ "${PHP3_SHORTRELEASE}" != "71" ] && [ "${PHP3_SHORTRELEASE}" != "72" ] && [ "${PHP3_SHORTRELEASE}" != "73" ] && [ "${PHP3_SHORTRELEASE}" != "74" ]; then + installSuhosin ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT} + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP4_SHORTRELEASE}" != "53" ] && [ "${PHP4_SHORTRELEASE}" != "70" ] && [ "${PHP4_SHORTRELEASE}" != "71" ] && [ "${PHP4_SHORTRELEASE}" != "72" ] && [ "${PHP4_SHORTRELEASE}" != "73" ] && [ "${PHP4_SHORTRELEASE}" != "74" ]; then + installSuhosin ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT} + fi + fi + + if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] && [ ! -e /usr/local/bin/clamdscan ]; then + if [ "${CLAMAV_OPT}" = "no" ]; then + do_exit 1 "Cannot install suhosin with PHP upload scan using ClamAV, because /usr/local/bin/clamdscan does not exist on the system and clamav=no is set in the options.conf file." + fi + removeLockfile + doclamav + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} suhosin + else + doExtensions_build ${1} ${2} suhosin + fi + echo "suhosin ${SUHOSIN_VER} PHP extension has been installed successfully." + writeLog "suhosin ${SUHOSIN_VER} installed" + + cd ${CWD} +} + +installOpcache() { + if [ -z $1 ] || [ "$1" = "no" ]; then + return + fi + echo "Installing zendopcache-${OPCACHE_VER} PHP extension for PHP $1..." + + if [ "$1" = "53" ] || [ "$1" = "54" ]; then + /usr/local/php$1/bin/phpize + ./configure --with-php-config=/usr/local/php$1/bin/php-config + while echo "Trying to make zendopcache-${OPCACHE_VER} PHP extension..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 0 + fi + else + break + fi + done + echo "Make complete" + make install + + make clean + + echo "opCache ${OPCACHE_VER} PHP extension has been installed successfully for PHP$1." + writeLog "opCache ${OPCACHE_VER} installed for PHP$1" + fi +} + +doOpcache() { + cd ${CWD} + if [ "${OPCACHE_OPT}" = "no" ]; then + do_exit 1 "Cannot build opCache, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + OPCACHE_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + fi + + SKIP_RESTART=1 + if [ "$1" != "1" ]; then + SKIP_RESTART=0 + fi + + if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP1_RELEASE_OPT}" = "5.4" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.4" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.4" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.4" ]; then + getFile zendopcache-${OPCACHE_VER}.tgz zendopcache + + FILE=${CWD}/zendopcache-${OPCACHE_VER}.tgz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} + cd zendopcache-${OPCACHE_VER} + + if [ "${FOR_ALL}" = "no" ]; then + installOpcache ${OPCACHE_INT_SHORTRELEASE} $2 + else + installOpcache ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + installOpcache ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT} + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + installOpcache ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT} + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + installOpcache ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT} + fi + fi + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} opcache + else + doExtensions_build ${1} ${2} opcache + fi + + cd ${CWD} +} + +#################################################### + +doModLsapi() { + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ] && [ $(is_cloudlinux_solo) -eq 1 ]; then + do_exit 1 "lsphp PHP1_MODE is not supported on CloudLinux Solo Edition." + fi + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if ! grep -m1 -q 'exclude=.*liblsapi' /etc/yum.conf; then + perl -pi -e 's|exclude\=|exclude=liblsapi* |g' /etc/yum.conf + fi + if [ -e /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp ]; then + cp -pf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp /usr/local/bin/lsphp + elif [ -e /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} ]; then + cp -pf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} /usr/local/bin/lsphp + fi + if rpm -q --quiet mod_lsapi; then + rpm -e mod_lsapi >/dev/null 2>&1 + fi + cd ${CWD} + getFileCL mod_lsapi-${MOD_LSAPI_VER}.tar.gz mod_lsapi + LSAPI_MODDIR="`tar tzf mod_lsapi-${MOD_LSAPI_VER}.tar.gz | head -n 1 | cut -d/ -f1`" + LSAPI_RELEASE="stable" + if [ "${CLOUDLINUX_BETA_OPT}" = "yes" ]; then + LSAPI_RELEASE="beta" + fi + tar xzf mod_lsapi-${MOD_LSAPI_VER}.tar.gz + cd ${LSAPI_MODDIR} + sh ./install/da_cb_install ${LSAPI_RELEASE} ${MOD_LSAPI_VER} + if [ -e /usr/include/criu/criu.h ];then + cmake -DWITH_CRIU:BOOLEAN=TRUE CMakeLists.txt + else + cmake CMakeLists.txt + fi + make install + if [ ! -e /etc/httpd/conf/extra/mod_lsapi.conf ]; then + cd conf + cat mod_lsapi.conf | sed 's/#AddType application\/x-httpd-lsphp/AddType application\/x-httpd-lsphp/g' > mod_lsapi.conf.tmp + cp -f mod_lsapi.conf.tmp /etc/httpd/conf/extra/mod_lsapi.conf + perl -pi -e 's#/etc/httpd/modules/mod_lsapi.so#/usr/lib/apache/mod_lsapi.so#' /etc/httpd/conf/extra/mod_lsapi.conf + fi + #Inserting mod_lsapi to apache config + if ! grep -m1 -q -e "mod_lsapi.conf" /etc/httpd/conf/extra/httpd-includes.conf; then + echo "Adding mod_lsapi to apache configuration (extra/httpd-includes.conf)." + #if file is missing new line and the end of the file - add it + if [ ! -z "`tail -c 1 /etc/httpd/conf/extra/httpd-includes.conf`" ]; then + echo "" >> /etc/httpd/conf/extra/httpd-includes.conf + fi + echo "#For mod_lsphp settings" >> /etc/httpd/conf/extra/httpd-includes.conf + echo "Include /etc/httpd/conf/extra/mod_lsapi.conf" >> /etc/httpd/conf/extra/httpd-includes.conf + else + perl -pi -e 's|^#Include /etc/httpd/conf/extra/mod_lsapi.conf|Include /etc/httpd/conf/extra/mod_lsapi.conf|' /etc/httpd/conf/extra/httpd-includes.conf + fi + cd ${CWD} + rm -rf ${LSAPI_MODDIR} + if [ "$1" != "0" ]; then + control_service httpd restart + fi + fi + else + if [ -e /etc/httpd/conf/extra/httpd-includes.conf ]; then + #Removing mod_lsapi from apache config + if grep -m1 -q -e '^Include /etc/httpd/conf/extra/mod_lsapi.conf' /etc/httpd/conf/extra/httpd-includes.conf; then + echo "Removing mod_lsapi from apache configuration (extra/httpd-includes.conf)." + perl -pi -e 's|^Include /etc/httpd/conf/extra/mod_lsapi.conf|#Include /etc/httpd/conf/extra/mod_lsapi.conf|' /etc/httpd/conf/extra/httpd-includes.conf + if [ "$1" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service httpd restart + fi + fi + fi + fi + fi +} + +#################################################### + +doModHostingLimits() { + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ $(is_cloudlinux_solo) -eq 0 ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ ! -e /usr/bin/cmake ]; then + yum -y install cmake + fi + if [ ! -e /usr/include/lve/lve-ctl.h ]; then + yum -y install liblve-devel + fi + cd ${CWD} + getFileCL mod_hostinglimits-${MOD_HOSTINGLIMITS_VER}.tar.gz mod_hostinglimits + CL_MODDIR="mod_hostinglimits-${MOD_HOSTINGLIMITS_VER}" + tar xzf mod_hostinglimits-${MOD_HOSTINGLIMITS_VER}.tar.gz + cd ${CL_MODDIR} + if [ -e ./install/da_cb_install ]; then + sh ./install/da_cb_install ${MOD_HOSTINGLIMITS_VER} + fi + cmake CMakeLists.txt + make install + if [ ! -s /etc/httpd/conf/extra/modhostinglimits.conf ]; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/httpd/conf/extra/modhostinglimits.conf https://repo.cloudlinux.com/cloudlinux/confs/modhostinglimits.conf + perl -pi -e 's#/etc/httpd/modules/mod_hostinglimits.so#/usr/lib/apache/mod_hostinglimits.so#' /etc/httpd/conf/extra/modhostinglimits.conf + fi + #Inserting mod_hostinglimits to apache config + if ! grep -m1 -q -e "modhostinglimits.conf" /etc/httpd/conf/extra/httpd-includes.conf; then + echo "Adding mod_hostinglimits to apache configuration (extra/httpd-includes.conf)." + if [ ! -z "`tail -c 1 /etc/httpd/conf/extra/httpd-includes.conf`" ]; then + echo "" >> /etc/httpd/conf/extra/httpd-includes.conf + fi + echo "#For LVE settings" >> /etc/httpd/conf/extra/httpd-includes.conf + echo "Include /etc/httpd/conf/extra/modhostinglimits.conf" >> /etc/httpd/conf/extra/httpd-includes.conf + else + perl -pi -e 's|^#Include /etc/httpd/conf/extra/modhostinglimits.conf|Include /etc/httpd/conf/extra/modhostinglimits.conf|' /etc/httpd/conf/extra/httpd-includes.conf + fi + cd ${CWD} + rm -rf ${CL_MODDIR} + if [ "$1" != "0" ]; then + control_service httpd restart + fi + fi + else + #Removing mod_hostinglimits from apache config + if grep -m1 -q -e '^Include /etc/httpd/conf/extra/modhostinglimits.conf' /etc/httpd/conf/extra/httpd-includes.conf; then + echo "Removing mod_hostinglimits from apache configuration (extra/httpd-includes.conf)." + perl -pi -e 's|^Include /etc/httpd/conf/extra/modhostinglimits.conf|#Include /etc/httpd/conf/extra/modhostinglimits.conf|' /etc/httpd/conf/extra/httpd-includes.conf + if [ "$1" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service httpd restart + fi + fi + fi + fi +} + +#################################################### + +doModProctitle() { + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ ! -e /usr/bin/cmake ]; then + yum -y install cmake + fi + cd ${CWD} + getFileCL mod_proctitle-${MOD_PROCTITLE_VER}.tar.gz mod_proctitle + CL_MODDIR="mod_proctitle-${MOD_PROCTITLE_VER}" + tar xzf mod_proctitle-${MOD_PROCTITLE_VER}.tar.gz + cd ${CL_MODDIR} + cmake CMakeLists.txt + make install + if [ ! -s /etc/httpd/conf/extra/modproctitle.conf ]; then + cp -f conf/modproctitle.conf /etc/httpd/conf/extra/modproctitle.conf + fi + #Inserting mod_proctitle to apache config + if ! grep -m1 -q -e "modproctitle.conf" /etc/httpd/conf/extra/httpd-includes.conf; then + echo "Adding mod_proctitle to apache configuration (extra/httpd-includes.conf)." + if [ ! -z "`tail -c 1 /etc/httpd/conf/extra/httpd-includes.conf`" ]; then + echo "" >> /etc/httpd/conf/extra/httpd-includes.conf + fi + echo "#For mod_proctitle settings" >> /etc/httpd/conf/extra/httpd-includes.conf + echo "Include /etc/httpd/conf/extra/modproctitle.conf" >> /etc/httpd/conf/extra/httpd-includes.conf + else + perl -pi -e 's|^#Include /etc/httpd/conf/extra/modproctitle.conf|Include /etc/httpd/conf/extra/modproctitle.conf|' /etc/httpd/conf/extra/httpd-includes.conf + fi + cd ${CWD} + rm -rf ${CL_MODDIR} + if [ "$1" != "0" ]; then + control_service httpd restart + fi + fi + else + #Removing mod_proctitle from apache config + if grep -m1 -q -e '^Include /etc/httpd/conf/extra/modproctitle.conf' /etc/httpd/conf/extra/httpd-includes.conf; then + echo "Removing mod_proctitle from apache configuration (extra/httpd-includes.conf)." + perl -pi -e 's|^Include /etc/httpd/conf/extra/modproctitle.conf|#Include /etc/httpd/conf/extra/modproctitle.conf|' /etc/httpd/conf/extra/httpd-includes.conf + if [ "$1" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service httpd restart + fi + fi + fi + fi +} + +#################################################### + +doPCRE2() { + getFile pcre2-${PCRE2_VER}.tar.gz pcre2 + quitIfLocked doPCRE2 + + cd ${CWD} + FILE=${CWD}/pcre2-${PCRE2_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + chmod -R 755 pcre2-${PCRE2_VER} + cd pcre2-${PCRE2_VER} + echo "Configuring pcre2-${PCRE2_VER}..." + ./configure --enable-jit + echo "Done. Making pcre2-${PCRE2_VER}..." + while echo "Trying to make PCRE2..."; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing pcre2-${PCRE2_VER}..." + make install + echo "Done pcre2." + writeLog "pcre2 ${PCRE2_VER} installed" + + ldconfig + + removeLockfile + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doPCRE() { + getFile pcre-${PCRE_VER}.tar.gz pcre_current + quitIfLocked doPCRE + + cd ${CWD} + FILE=${CWD}/pcre-${PCRE_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + chmod -R 755 pcre-${PCRE_VER} + cd pcre-${PCRE_VER} + echo "Configuring pcre-${PCRE_VER}..." + ./configure --enable-utf8 --enable-unicode-properties --enable-jit + echo "Done. Making pcre-${PCRE_VER}..." + while echo "Trying to make PCRE..."; do + make CFLAGS=-fpic CPPFLAGS=-I/usr/kerberos/include + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing pcre-${PCRE_VER}..." + make install + echo "Done pcre." + writeLog "pcre ${PCRE_VER} installed" + + if [ "${OS}" = "FreeBSD" ]; then + if [ ${MAINVER} -ge 10 ] && [ ! -e /usr/local/lib/libpcre.so.0 ] && [ -e /usr/local/lib/libpcre.so ]; then + ln -sf /usr/local/lib/libpcre.so /usr/local/lib/libpcre.so.0 + fi + fi + + /sbin/ldconfig + + removeLockfile + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doSqlite() { + SQLITE_VER=`getVer sqlite` + getFile sqlite/sqlite-autoconf-${SQLITE_VER}.tar.gz sqlite sqlite-autoconf-${SQLITE_VER}.tar.gz + quitIfLocked doSqlite + + cd ${CWD} + FILE=${CWD}/sqlite-autoconf-${SQLITE_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd sqlite-autoconf-${SQLITE_VER} + echo "Configuring sqlite-autoconf-${SQLITE_VER}..." + ./configure + echo "Done. Making sqlite-autoconf-${SQLITE_VER}..." + while echo "Trying to make sqlite..."; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing sqlite-autoconf-${SQLITE_VER}..." + make install + echo "Done sqlite-autoconf." + writeLog "sqlite ${SQLITE_VER} installed" + + /sbin/ldconfig + + removeLockfile + cd ${CWD} + rm -f sqlite-autoconf-${SQLITE_VER}.tar.gz +} + +#################################################### + +doSetupFcgidSh() { + if [ ! -d /usr/local/safe-bin ]; then + mkdir -p /usr/local/safe-bin + chmod 511 /usr/local/safe-bin + chown apache:apache /usr/local/safe-bin + fi + if [ "${OS}" = "FreeBSD" ]; then + FCGID_SCRIPT_NAME="fcgid_freebsd" + else + FCGID_SCRIPT_NAME="fcgid" + fi + cp -f ${CWD}/configure/fastcgi/${FCGID_SCRIPT_NAME}.sh /usr/local/safe-bin/fcgid${1}.sh + if [ -e ${CWD}/custom/fastcgi/fcgid${1}.sh ]; then + cp -f ${CWD}/custom/fastcgi/fcgid${1}.sh /usr/local/safe-bin/fcgid${1}.sh + elif [ -e ${CWD}/custom/fastcgi/${FCGID_SCRIPT_NAME}.sh ]; then + cp -f ${CWD}/custom/fastcgi/${FCGID_SCRIPT_NAME}.sh /usr/local/safe-bin/fcgid${1}.sh + fi + chown apache:apache /usr/local/safe-bin/fcgid${1}.sh + chmod 555 /usr/local/safe-bin/fcgid${1}.sh +} + +doPhp_build() { + if [ "${OS_CENTOS_VER}" = "6" ]; then + installDevtoolset + fi + + #$1 is PHP release + #$2 is PHP mode + INT_RELEASE=$1 + INT_MODE=$2 + SHORT_RELEASE=`echo ${INT_RELEASE} | tr -d '.'` + PHP_VERSION_EVAL_VAR=PHP${SHORT_RELEASE}_VER + PHP_VER=$(eval_var ${PHP_VERSION_EVAL_VAR}) + + if [ -d /usr/local/lib/php.conf.d ] && [ ! -d /usr/local/php${SHORT_RELEASE}/lib/php.conf.d ] && [ ! -L /usr/local/lib/php.conf.d ]; then + mkdir -p /usr/local/php${SHORT_RELEASE}/lib + mv -v /usr/local/lib/php.conf.d /usr/local/php${SHORT_RELEASE}/lib/php.conf.d + ln -sf /usr/local/php${SHORT_RELEASE}/lib/php.conf.d /usr/local/lib/php.conf.d + fi + + if [ -d /usr/local/lib/php ] && [ ! -d /usr/local/php${SHORT_RELEASE}/lib/php ] && [ ! -L /usr/local/lib/php ]; then + mkdir -p /usr/local/php${SHORT_RELEASE}/lib + mv -v /usr/local/lib/php /usr/local/php${SHORT_RELEASE}/lib/php + ln -sf /usr/local/php${SHORT_RELEASE}/lib/php /usr/local/lib/php + fi + + if [ -s /usr/local/lib/php.ini ] && [ ! -s /usr/local/php${SHORT_RELEASE}/lib/php.ini ] && [ ! -L /usr/local/lib/php.ini ]; then + mkdir -p /usr/local/php${SHORT_RELEASE}/lib + mv -v /usr/local/lib/php.ini /usr/local/php${SHORT_RELEASE}/lib/php.ini + ln -sf /usr/local/php${SHORT_RELEASE}/lib/php.ini /usr/local/lib/php.ini + fi + + INT_MAIN_VERSION=false + if [ "${PHP1_RELEASE_OPT}" = "${INT_RELEASE}" ] && [ "${PHP1_MODE_OPT}" = "${INT_MODE}" ]; then + INT_MAIN_VERSION=true + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ ! -d /etc/httpd/conf/extra ]; then + checkLibz + doApache2 + fi + fi + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ ! -d ${NGINXCONF} ]; then + checkLibz + doNginx + fi + fi + + YUM_PKG_INSTALL_LIST="" + APT_PKG_INSTALL_LIST="" + #sqlite, libzip and oniguruma are needed by PHP >=8 + if [ ! -e /usr/include/png.h ] && [ ! -e /usr/local/include/png.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libpng, installing using pkg..." + pkg install -y png + elif [ -e /etc/debian_version ]; then + echo "Cannot find libpng, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libpng-dev " + else + echo "Cannot find libpng, installing using yum..." + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libpng-devel " + fi + fi + if [ ! -e /usr/local/include/freetype2/ft2build.h ] && [ ! -e /usr/include/freetype2/ft2build.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find freetype, installing using pkg..." + pkg install -y freetype + elif [ -e /etc/debian_version ]; then + echo "Cannot find freetype, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libfreetype6-dev " + else + echo "Cannot find freetype, installing using yum..." + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}freetype-devel " + fi + fi + + if [ -e /etc/debian_version ] && [ ! -e /usr/local/include/freetype2/ft2build.h ] && [ ! -s /usr/bin/freetype-config ]; then + if [ "${OS_DEBIAN_VER}" != "7" ] && [ "${OS_DEBIAN_VER}" != "8" ] && [ "${OS_DEBIAN_VER}" != "9" ]; then + curl ${CURL_CONNECT_OPTIONS} -o /usr/bin/freetype-config ${WEBPATH}/freetype-config + chmod +x /usr/bin/freetype-config + fi + fi + + #libwebp is compiled-in as of PHP 7.0 + if [ ! -e /usr/local/include/webp/types.h ] && [ ! -e /usr/include/webp/types.h ]; then + if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "5.4" ] && [ "${INT_RELEASE}" != "5.5" ] && [ "${INT_RELEASE}" != "5.6" ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libwebp, installing using pkg..." + pkg install -y webp + elif [ -e /etc/debian_version ]; then + echo "Cannot find libwebp, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libwebp-dev " + else + echo "Cannot find libwebp, installing using yum..." + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libwebp-devel " + fi + fi + fi + if [ ! -e /usr/include/jpeglib.h ] && [ ! -e /usr/local/include/jpeglib.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libjpeg, installing using pkg..." + pkg install -y jpeg-turbo + elif [ -e /etc/debian_version ]; then + echo "Cannot find libjpeg, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libjpeg-dev " + else + echo "Cannot find libjpeg, installing using yum..." + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libjpeg-devel " + fi + fi + if [ ! -e /usr/include/libxslt/xslt.h ] && [ ! -e /usr/local/include/libxslt/xslt.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libxslt, installing using pkg..." + pkg install -y libxslt + elif [ -e /etc/debian_version ]; then + echo "Cannot find libxslt, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libxslt-dev " + else + #PHP8 requires libxml >2.9 + if [ "${OS_CENTOS_VER}" = "6" ]; then + if [ "${LIBXML2_VER}" != "0" ]; then + doLibxml2 + fi + + if [ "${LIBXSLT_VER}" != "0" ]; then + doLibxslt + fi + else + echo "Cannot find libxslt, installing using yum..." + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libxslt-devel " + fi + fi + fi + if [ ! -e /usr/include/x86_64-linux-gnu/sodium.h ] && [ ! -e /usr/local/include/sodium.h ] && [ ! -e /usr/include/sodium.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libsodium, installing using pkg..." + pkg install -y libsodium + elif [ -e /etc/debian_version ]; then + echo "Cannot find libsodium, installing using apt-get..." + apt-get -y install libsodium-dev + else + if [ "${OS_CENTOS_VER}" = "6" ]; then + doLibsodium + else + yum -y install libsodium-devel --enablerepo=${EPEL_REPO_NAME} + fi + fi + fi + if [ "${OS}" = "FreeBSD" ] && [ ! -e /usr/include/iconv.h ] && [ ! -e /usr/local/include/iconv.h ]; then + echo "Cannot find libiconv, installing using pkg..." + pkg install -y libiconv + fi + if [ ! -e /usr/include/x86_64-linux-gnu/unicode/icudataver.h ] && [ ! -e /usr/local/icu/include/unicode/icudataver.h ] && [ ! -e /usr/include/unicode/icudataver.h ] && [ ! -e /usr/local/include/unicode/icudataver.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libicu, installing using pkg..." + pkg install -y icu + elif [ -e /etc/debian_version ]; then + echo "Cannot find libicu, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libicu-dev " + else + if [ "${OS_CENTOS_VER}" = "6" ]; then + doICU + else + echo "Cannot find libicu, installing using yum..." + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libicu-devel " + fi + fi + fi + if [ -e /etc/debian_version ] && [ ! -d /usr/local/icu ]; then + if [ "${OS_DEBIAN_VER}" != "7" ] && [ "${OS_DEBIAN_VER}" != "8" ] && [ "${OS_DEBIAN_VER}" != "9" ]; then + curl ${CURL_CONNECT_OPTIONS} -o /usr/bin/icu-config ${WEBPATH}/icu-config + chmod +x /usr/bin/icu-config + fi + fi + if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ] || [ "${INT_RELEASE}" = "5.5" ] || [ "${INT_RELEASE}" = "5.6" ] || [ "${INT_RELEASE}" = "7.0" ] || [ "${INT_RELEASE}" = "7.1" ]; then + if [ ! -e /usr/include/mcrypt.h ] && [ ! -e /usr/local/include/mcrypt.h ]; then + if [ ${OS} = "FreeBSD" ]; then + ${PKG_INSTALL} install -y libmcrypt + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get -y install libmcrypt-dev + else + yum -y install libmcrypt-devel --enablerepo=${EPEL_REPO_NAME} + fi + fi + fi + if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "5.4" ] && [ "${INT_RELEASE}" != "5.5" ] && [ "${INT_RELEASE}" != "5.6" ] && [ "${INT_RELEASE}" != "7.0" ] && [ "${INT_RELEASE}" != "7.1" ] && [ "${INT_RELEASE}" != "7.2" ] && [ "${INT_RELEASE}" != "7.3" ]; then + COMPILE_LIBZIP=false + if [ "${OS}" = "FreeBSD" ]; then + COMPILE_LIBZIP=false + elif [ -e /etc/debian_version ]; then + COMPILE_LIBZIP=false + elif [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + COMPILE_LIBZIP=true + fi + if [ ! -e /usr/local/lib/libzip.so ] && [ ! -e /usr/local/lib64/libzip.so ] && [ "${LIBZIP_VER}" != "0" ] && ${COMPILE_LIBZIP}; then + doLibzip + fi + if ! ${COMPILE_LIBZIP} && [ ! -e /usr/lib/libzip.so ] && [ ! -e /usr/lib64/libzip.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libzip.so ] && [ ! -e /usr/local/lib/libzip.so ] && [ ! -e /usr/local/lib64/libzip.so ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libzip, installing using pkg..." + pkg install -y libzip + elif [ -e /etc/debian_version ]; then + echo "Cannot find libzip, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libzip-dev " + else + echo "Cannot find libzip, installing using yum..." + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libzip-devel " + fi + fi + if [ ! -e /usr/include/sqlite3.h ] && [ ! -e /usr/local/include/sqlite3.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find /usr/local/include/sqlite3.h, installing using pkg..." + pkg install -y sqlite3 + elif [ -e /etc/debian_version ]; then + echo "Cannot find /usr/include/sqlite3.h, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libsqlite3-dev " + else + echo "Cannot find /usr/include/sqlite3.h, installing using yum..." + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}sqlite-devel " + fi + fi + if [ ! -e /usr/include/oniguruma.h ] && [ ! -e /usr/local/include/oniguruma.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find /usr/local/include/oniguruma.h, installing using apt-get..." + pkg install -y oniguruma + elif [ -e /etc/debian_version ]; then + echo "Cannot find /usr/include/oniguruma.h, installing using apt-get..." + APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libonig-dev " + else + echo "Cannot find /usr/include/oniguruma.h, installing using yum..." + if [ "${OS_CENTOS_VER}" = "8" ]; then + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + yum -y install oniguruma-devel --enablerepo=cloudlinux-PowerTools + elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then + yum -y install oniguruma-devel --enablerepo=PowerTools + elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then + yum -y install oniguruma-devel --enablerepo=ol8_codeready_builder + elif [ -e /etc/yum.repos.d/redhat.repo ]; then + yum -y install oniguruma-devel --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms + else + yum -y install oniguruma-devel --enablerepo=powertools + fi + else + YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}oniguruma-devel " + fi + fi + fi + if [ "${OS_CENTOS_VER}" = "6" ] && [ ! -e /usr/local/lib/libsqlite3.so ]; then + doSqlite + fi + fi + + if [ "${OS}" != "FreeBSD" ] && [ -e /etc/debian_version ] && [ ! -z "${APT_PKG_INSTALL_LIST}" ]; then + apt-get -y install ${APT_PKG_INSTALL_LIST} + elif [ "${OS}" != "FreeBSD" ] && [ ! -z "${YUM_PKG_INSTALL_LIST}" ]; then + yum -y install ${YUM_PKG_INSTALL_LIST} + fi + + if ${INT_MAIN_VERSION}; then + doRewriteCLPhpHandler + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] && [ "${MODSECURITY_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_security2.so ]; then + doModSecurity + fi + + if [ "${MOD_RUID2_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_ruid2.so ] && [ "${WEBSERVER_OPT}" != "litespeed" ]; then + doModRuid2 + fi + + if [ "${HAVE_FCGID}" = "yes" ]; then + if [ ! -s /usr/lib/apache/mod_fcgid.so ]; then + doModFCGID + fi + fi + + if [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_FPM_CGI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + if [ "${HTSCANNER_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_htscanner2.so ]; then + doModHtscanner + fi + fi + if [ "${NEWCONFIGS}" = "1" ] && ${INT_MAIN_VERSION}; then + if grep -m1 -q '^LoadModule mod_php' /etc/httpd/conf/httpd.conf; then + perl -pi -e 's/^LoadModule mod_php/\#LoadModule mod_php/' /etc/httpd/conf/httpd.conf + fi + if grep -m1 -q '^LoadModule php' /etc/httpd/conf/httpd.conf; then + perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf + fi + fi + fi + + if [ "${HAVE_FPM_CGI}" = "yes" ]; then + if [ ! -s /etc/logrotate.d/php-fpm ] && [ ${OS} != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/php-fpm.logrotate -o /etc/logrotate.d/php-fpm + fi + #We need USR1 to re-read the logs + #if grep -m1 -q USR1 /etc/logrotate.d/php-fpm; then + # perl -pi -e 's|USR1|USR2|g' /etc/logrotate.d/php-fpm + #fi + + if [ ${OS} = "FreeBSD" ]; then + echo "Ensuring /usr/local/php${SHORT_RELEASE}/var/log/php-fpm.log in /etc/newsyslog.conf" + freebsd_add_newsyslog /usr/local/php${SHORT_RELEASE}/var/log/php-fpm.log '' - "/var/run/php-fpm${SHORT_RELEASE}.pid\t30" + fi + fi + + if [ "${INT_MODE}" = "suphp" ]; then + mkdir -p /usr/local/php${SHORT_RELEASE}/lib + if [ ! -s ${SUPHP_SO} ]; then + doSuPhp + fi + fi + + #just double check the location of libmysqlclient.so + if [ -e /usr/lib64 ]; then + if [ ! -e /usr/lib64/mysql/libmysqlclient.so ] && [ -e /usr/lib64/libmysqlclient.so ]; then + ln -s ../libmysqlclient.so /usr/lib64/mysql/libmysqlclient.so + fi + fi + + if [ -e /usr/lib/libmysqlclient.so ] && [ ! -e /usr/lib/mysql/libmysqlclient.so ] && [ -d /usr/lib/mysql ]; then + ln -s /usr/lib/libmysqlclient.so /usr/lib/mysql/libmysqlclient.so + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + doApacheCheck + fi + + if [ "${HAVE_CLI}" = "yes" ] && [ -e ${PHPMODULES} ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if grep -m1 -q 'LoadModule mpm_event_module /usr/lib/apache/mod_mpm_event.so' ${PHPMODULES}; then + echo "Switching Apache Event MPM to Prefork, because of mod_php used..." + perl -pi -e 's#LoadModule mpm_event_module /usr/lib/apache/mod_mpm_event.so#LoadModule mpm_prefork_module /usr/lib/apache/mod_mpm_prefork.so#' ${PHPMODULES} + control_service httpd restart + fi + if grep -m1 -q 'LoadModule mpm_worker_module /usr/lib/apache/mod_mpm_worker.so' ${PHPMODULES}; then + echo "Switching Apache Worker MPM to Prefork, because of mod_php used..." + perl -pi -e 's#LoadModule mpm_worker_module /usr/lib/apache/mod_mpm_worker.so#LoadModule mpm_prefork_module /usr/lib/apache/mod_mpm_prefork.so#' ${PHPMODULES} + control_service httpd restart + fi + fi + fi + + cd ${CWD} + ldconfig + + INT_EXT_DIR="no" + if [ -e /usr/local/php${SHORT_RELEASE}/bin/php-config ]; then + INT_EXT_DIR=`/usr/local/php${SHORT_RELEASE}/bin/php-config --extension-dir` + fi + + getFile php-${PHP_VER}.tar.gz php${SHORT_RELEASE} + + quitIfLocked doPhp + + cd ${CWD} + FILE=${CWD}/php-${PHP_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + + disable_asm_atomic + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + getFileCL cl-apache-patches.tar.gz cl-apache-patches + tar xzf cl-apache-patches.tar.gz --no-same-owner + fi + + if [ "${INT_RELEASE}" = "5.3" ]; then + getFile patches/php-5.3.28_apache-2.4.10-fpm.patch php-5.3.28_apache-2.4.10-fpm.patch + getFile patches/multi-sapi-5.3.29.patch multi-sapi-5.3.29.patch + fi + + if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ]; then + getFile patches/Another_fix_for_mod_proxy_fcgi_v2.patch Another_fix_for_mod_proxy_fcgi_v2.patch + if [ -e /lib/x86_64-linux-gnu/libsystemd-daemon.so.0 ] && [ ! -e /lib/x86_64-linux-gnu/libsystemd-daemon.so ]; then + ln -s /lib/x86_64-linux-gnu/libsystemd-daemon.so.0 /lib/x86_64-linux-gnu/libsystemd-daemon.so + ldconfig + fi + fi + + if [ "${INT_RELEASE}" = "7.1" ] || [ "${INT_RELEASE}" = "7.2" ]; then + getFile patches/fpm_scoreboard_proc_oob_fix_v4.patch fpm_scoreboard_proc_oob_fix_v4.patch + fi + + if [ "${INT_RELEASE}" = "7.0" ]; then + getFile patches/fpm_scoreboard_proc_oob_fix_v4_7.0.patch fpm_scoreboard_proc_oob_fix_v4_7.0.patch + fi + + if [ "${INT_RELEASE}" = "5.6" ]; then + getFile patches/fpm_scoreboard_proc_oob_fix_v4_5.6.patch fpm_scoreboard_proc_oob_fix_v4_5.6.patch + fi + + if [ "${INT_RELEASE}" = "7.3" ]; then + getFile patches/php_mysqlnd_sha2_auth.patch php_mysqlnd_sha2_auth.patch + fi + + if [ "${HAVE_FPM_CGI}" = "yes" ]; then + getFile patches/fpm-quota-chown.patch fpm-quota-chown.patch + fi + + getFile patches/fpm_children_cgroup.patch fpm_children_cgroup.patch + + OV=`openssl_version | cut -d. -f1,2` + OPENSSL_11_OR_HIGHER=false + if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.1 'php 5.x vs openssl 1.1.0 ver check'`" -ge 0 ]; then + OPENSSL_11_OR_HIGHER=true + fi + if ${OPENSSL_11_OR_HIGHER}; then + if [ "${INT_RELEASE}" = "5.6" ]; then + getFile patches/php-5.6-libssl-1.1.patch php-5.6-libssl-1.1.patch + fi + fi + + cd php-${PHP_VER} + + #Don't build ZTS version of PHP, we load MPM dynamically, always default to prefork if mod_php is there + if [ -s sapi/apache2handler/config.m4 ]; then + perl -pi -e 's|PHP_BUILD_THREAD_SAFE|PHP_BUILD_NOT_THREAD_SAFE|g' sapi/apache2handler/config.m4 + fi + if [ -s sapi/apache2filter/config.m4 ]; then + perl -pi -e 's|PHP_BUILD_THREAD_SAFE|PHP_BUILD_NOT_THREAD_SAFE|g' sapi/apache2filter/config.m4 + fi + #To be fail-proof with non-ZTS version (as the check in sapi/apache2handler/config.m4 is for loaded MPM), we switch MPM to prefork temporarily + if [ -s ${PHPMODULES} ]; then + if [ "${PHP1_RELEASE_OPT}" = "${INT_RELEASE}" ] && [ "${PHP1_MODE_OPT}" = "mod_php" ]; then + if ! grep -m1 -q 'mpm_prefork_module' ${PHPMODULES}; then + if grep -m1 -q 'LoadModule mpm_[a-z]*_module /usr/lib/apache/mod_mpm_[a-z]*.so' ${PHPMODULES}; then + perl -pi -e 's#LoadModule mpm_[a-z]*_module /usr/lib/apache/mod_mpm_[a-z]*.so#LoadModule mpm_prefork_module /usr/lib/apache/mod_mpm_prefork.so#' ${PHPMODULES} + fi + fi + fi + fi + + perl -pi -e 's|\(\(_libiconv_version >> 8\) & 0x0f\), \(_libiconv_version & 0x0f\)\)|_libiconv_version >> 8, _libiconv_version & 0xff\)|' ext/iconv/iconv.c + + if [ "${INT_MODE}" = "lsphp" ] && [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then + PHP_LSAPI_VER="`curl -k -L --silent --fail https://update.litespeedtech.com/ws/latest.php | grep 'PHP-LSAPI' | cut -d= -f2`" + # If we were unable to get the version from external source - set some default one + if ! echo "${PHP_LSAPI_VER}" | grep -m1 -q '^[0-9]*\.[0-9]*'; then + PHP_LSAPI_VER=8.0 + elif [ "${PHP_LSAPI_VER}" = "7.9" ]; then + #PHP 8.1 is not compatible with 7.9, and 8.0 is not yet in latest.php on update.litespeedtech.com + PHP_LSAPI_VER=8.0 + fi + curl ${CURL_CONNECT_OPTIONS} https://www.litespeedtech.com/packages/lsapi/php-litespeed-${PHP_LSAPI_VER}.tgz -o php-litespeed-${PHP_LSAPI_VER}.tgz 2> /dev/null + cd sapi + mv litespeed litespeed_orig + tar xzf ../php-litespeed-${PHP_LSAPI_VER}.tgz --no-same-owner + if [ -d litespeed ]; then + mv -f litespeed/*.h litespeed_orig/ + mv -f litespeed/*.c litespeed_orig/ + rm -rf litespeed + elif [ -d litespeed-${PHP_LSAPI_VER} ]; then + mv -f litespeed-${PHP_LSAPI_VER}/*.h litespeed_orig/ + mv -f litespeed-${PHP_LSAPI_VER}/*.c litespeed_orig/ + rm -rf litespeed-${PHP_LSAPI_VER} + fi + mv litespeed_orig litespeed + # Not needed for LiteSpeed, not sure about CloudLinux mod_lsapi. Breaks compilation on FreeBSD, because end-result is LDFLAGS += -lpthreadnlitespeed: $(SAPI_LITESPEED_PATH) + # sed -i.old '1s;^;LDFLAGS += -lpthread\n;' litespeed/Makefile.frag + cd ../ + elif [ "${INT_MODE}" = "lsphp" ] && [ "${CLOUDLINUX_OPT}" = "yes" ]; then + curl ${CURL_CONNECT_OPTIONS} -o php-litespeed-${CL_PHP_LSAPI_VER}.tgz https://repo.cloudlinux.com/cloudlinux/sources/da/php-litespeed-${CL_PHP_LSAPI_VER}.tgz + cd sapi + mv litespeed litespeed_orig + tar xzf ../php-litespeed-${CL_PHP_LSAPI_VER}.tgz --no-same-owner + if [ -d litespeed ]; then + mv -f litespeed/*.h litespeed_orig/ + mv -f litespeed/*.c litespeed_orig/ + rm -rf litespeed + elif [ -d litespeed-${CL_PHP_LSAPI_VER} ]; then + mv -f litespeed-${CL_PHP_LSAPI_VER}/*.h litespeed_orig/ + mv -f litespeed-${CL_PHP_LSAPI_VER}/*.c litespeed_orig/ + rm -rf litespeed-${CL_PHP_LSAPI_VER} + fi + mv litespeed_orig litespeed + cd ../ + fi + + #make sure we have the sendmail link + set_sendmail_link + + #some reports of missing -lltdl, problem found to be simple missing link + if [ ! -e /usr/lib/libltdl.so ]; then + ln -sf libltdl.so.3 /usr/lib/libltdl.so + fi + + echo "Configuring php-${PHP_VER}..." + + PHP_INI_INT=${PHP_INI} + PHP_EXT_INT=${PHP_EXT} + + if [ ${OS} = "FreeBSD" ]; then + AUTOCONF213="/usr/local/bin/autoconf-2.13" + else + AUTOCONF213="/usr/bin/autoconf-2.13" + fi + + if [ "${INT_RELEASE}" = "5.3" ]; then + if [ ! -e ${AUTOCONF213} ]; then + if [ ${OS} = "FreeBSD" ]; then + ${PKG_INSTALL} install -y autoconf213 + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get -y install autoconf2.13 + else + if [ "${OS_CENTOS_VER}" = "8" ]; then + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + yum -y install autoconf213 --enablerepo=cloudlinux-PowerTools + elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then + yum -y install autoconf213 --enablerepo=PowerTools + elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then + yum -y install autoconf213 --enablerepo=ol8_codeready_builder + elif [ -e /etc/yum.repos.d/redhat.repo ]; then + yum -y install autoconf213 --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms + else + yum -y install autoconf213 --enablerepo=powertools + fi + else + yum -y install autoconf213 + fi + fi + fi + if [ -e ${AUTOCONF213} ]; then + touch ac* + ${AUTOCONF213} + fi + fi + + if [ "${INT_RELEASE}" = "7.1" ] || [ "${INT_RELEASE}" = "7.2" ]; then + patch -p1 --fuzz=1 < ../patches/fpm_scoreboard_proc_oob_fix_v4.patch + perl -pi -e 's|php_info_print_table_row\(2, "Configuration File \(php.ini\) Path"|php_info_print_table_row(2, "PHP-FPM security patch", "yes");\n\t\tphp_info_print_table_row(2, "Configuration File (php.ini) Path"|g' ./ext/standard/info.c + fi + + if [ "${INT_RELEASE}" = "7.0" ]; then + patch -p1 --fuzz=1 < ../patches/fpm_scoreboard_proc_oob_fix_v4_7.0.patch + perl -pi -e 's|php_info_print_table_row\(2, "Configuration File \(php.ini\) Path"|php_info_print_table_row(2, "PHP-FPM security patch", "yes");\n\t\tphp_info_print_table_row(2, "Configuration File (php.ini) Path"|g' ./ext/standard/info.c + fi + + if [ "${INT_RELEASE}" = "5.6" ]; then + patch -p1 --fuzz=1 < ../patches/fpm_scoreboard_proc_oob_fix_v4_5.6.patch + perl -pi -e 's|php_info_print_table_row\(2, "Configuration File \(php.ini\) Path"|php_info_print_table_row(2, "PHP-FPM security patch", "yes");\n\t\tphp_info_print_table_row(2, "Configuration File (php.ini) Path"|g' ./ext/standard/info.c + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + if [ -e ../fpm-lve-php${INT_RELEASE}_autoconf.patch ]; then + patch -p1 --fuzz=1 < ../fpm-lve-php${INT_RELEASE}_autoconf.patch + elif [ -e ../fpm-lve-php7.0_autoconf.dl.v2.patch.patch ] && [ "${INT_RELEASE}" = "7.0" ]; then + patch -p1 --fuzz=1 < ../fpm-lve-php7.0_autoconf.dl.v2.patch.patch + elif [ -e ../php-fpm.7.1.dl.v3.patch ] && [ "${INT_RELEASE}" = "7.1" ]; then + patch -p1 --fuzz=1 < ../php-fpm.7.1.dl.v3.patch + elif [ -e ../php-fpm.7.2.dl.v2.patch ] && [ "${INT_RELEASE}" = "7.2" ]; then + patch -p1 --fuzz=1 < ../php-fpm.7.2.dl.v2.patch + elif [ -e ../php-fpm.7.3.dl.v1.patch ] && [ "${INT_RELEASE}" = "7.3" ]; then + patch -p1 --fuzz=1 < ../php-fpm.7.3.dl.v1.patch + elif [ -e ../php-fpm.7.4.dl.v1.patch ] && [ "${INT_RELEASE}" = "7.4" ]; then + patch -p1 --fuzz=1 < ../php-fpm.7.4.dl.v1.patch + elif [ -e php-fpm.8.0.dl.v1.patch ]; then + patch -p1 --fuzz=1 < ../php-fpm.8.0.dl.v1.patch + elif [ -e php-fpm.8.1.dl.v1.patch ]; then + patch -p1 --fuzz=1 < ../php-fpm.8.1.dl.v1.patch + fi + if [ "${INT_RELEASE}" = "5.3" ] && [ -e ${AUTOCONF213} ]; then + touch ac* + ${AUTOCONF213} + else + touch ac* + autoconf + fi + fi + if [ "${INT_RELEASE}" = "5.3" ] && [ "${PHP53_VER}" != "5.2.17" ]; then + echo "Patching PHP to fix bug #67541." + patch -p1 < ../patches/php-5.3.28_apache-2.4.10-fpm.patch + echo "Patching PHP to fix bug #52419." + patch -p1 < ../patches/multi-sapi-5.3.29.patch + if [ -e ${AUTOCONF213} ]; then + touch ac* + ${AUTOCONF213} >/dev/null 2>&1 + else + touch ac* + autoconf >/dev/null + fi + fi + + if ${OPENSSL_11_OR_HIGHER}; then + if [ "${INT_RELEASE}" = "5.6" ]; then + echo "Patching PHP to fix OpenSSL >=1.1 compatibility." + patch -p1 < ../patches/php-5.6-libssl-1.1.patch + fi + fi + + if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ]; then + if [ "${PHP53_VER}" != "5.2.17" ]; then + #Still pathcing for #67541 + patch -p0 < ../patches/Another_fix_for_mod_proxy_fcgi_v2.patch + echo "Patching is done." + fi + fi + + if [ "${INT_RELEASE}" = "7.3" ]; then + patch -p1 < ../patches/php_mysqlnd_sha2_auth.patch + echo "Patching MySQLnd to support SHA2 auth is done." + fi + + if [ -s sapi/fpm/fpm/fpm_children.c ]; then + echo "Patching php-fpm for per-user process grouping" + if [ ! -s ../patches/fpm_children_cgroup.patch ]; then + echo "${boldon}ERROR downloading patches/fpm_children_cgroup.patch${boldoff}" + else + patch -p0 < ../patches/fpm_children_cgroup.patch + fi + fi + + if [ -s sapi/fpm/fpm/fpm_unix.c ]; then + #Ticket 21336: [pool user] failed to chown() the socket '/usr/local/php56/sockets/user.sock': Disk quota exceeded (122) + echo "Patching php-fpm to not fail on startup if User quota maxed out on socket chown" + if [ ! -s ../patches/fpm-quota-chown.patch ]; then + echo "${boldon}ERROR downloading patches/fpm-quota-chown.patch${boldoff}" + else + patch -p0 < ../patches/fpm-quota-chown.patch + fi + fi + + CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE + PHP_INI_INT_VAR=PHP_INI_FPM${SHORT_RELEASE} + PHP_INI_INT=$(eval_var ${PHP_INI_INT_VAR}) + PHP_EXT_INT_VAR=PHP_EXT_FPM${SHORT_RELEASE} + PHP_EXT_INT=$(eval_var ${PHP_EXT_INT_VAR}) + + if [ "${INT_MODE}" = "php-fpm" ]; then + CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE_FPM + elif [ "${INT_MODE}" = "suphp" ]; then + CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE_SUPHP + elif [ "${INT_MODE}" = "fastcgi" ]; then + CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE_FCGI + elif [ "${INT_MODE}" = "lsphp" ]; then + CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE_LSPHP + fi + CONF_FILE=${CWD}/$(eval_var ${CONFIGURE_FILE_VAR}) + + if [ "${OS}" = "FreeBSD" ]; then + #Bugfix for https://bugs.php.net/bug.php?id=68114 + if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ]; then + if ! grep -q -m1 'ac_cv_decimal_fp_supported=no' ${CONF_FILE}; then + perl -pi -e 's#./configure \\#./configure ac_cv_decimal_fp_supported=no \\#' ${CONF_FILE} + fi + fi + + #not sure who had this added or suggested it, but there is no with-intl PHP configuration option at all + #if [ -e "/usr/local/lib/libintl.a" ]; then + #FreeBSD 11.1, with gcc5 throws + #/usr/bin/ld: undefined reference to symbol `_ZSt20__throw_length_errorPKc@@GLIBCXX_3.4' (try adding -lstdc++) + #//usr/lib/libstdc++.so.6: could not read symbols: Bad value + #changing from --enable-intl to --with-intl=/usr/local fixes that. + #perl -pi -e 's#--enable-intl$#--with-intl=/usr/local#' ${CONF_FILE} + #fi + fi + + # Compile mod_phpX.so only if that's php1_release and mode is mod_php + if [ "${PHP1_RELEASE_OPT}" = "${INT_RELEASE}" ] && [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${OS}" != "FreeBSD" ] && [ "${UNIT_OPT}" = "no" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if ! grep -q -m1 'with-apxs2' ${CONF_FILE}; then + perl -pi -e 's#./configure --enable-embed #./configure --with-apxs2 #' ${CONF_FILE} + if ! grep -q -m1 'with-apxs2' ${CONF_FILE}; then + perl -pi -e 's#./configure #./configure --with-apxs2 #' ${CONF_FILE} + fi + fi + elif grep -q -m1 'with-apxs2' ${CONF_FILE}; then + perl -pi -e 's#./configure --with-apxs2 #./configure --enable-embed #' ${CONF_FILE} + elif ! grep -q -m1 'enable-embed' ${CONF_FILE}; then + perl -pi -e 's#./configure #./configure --enable-embed #' ${CONF_FILE} + fi + elif grep -q -m1 'with-apxs2' ${CONF_FILE}; then + perl -pi -e 's#./configure --with-apxs2 #./configure --enable-embed #' ${CONF_FILE} + elif ! grep -q -m1 'enable-embed' ${CONF_FILE}; then + perl -pi -e 's#./configure #./configure --enable-embed #' ${CONF_FILE} + fi + + #we need to make sure that the mysql path is set. + MYSQL_H="" + + if [ -d /usr/local/mysql/include ]; then + MYSQL_H=/usr/local/mysql + fi + + if [ "${MYSQL_H}" = "" ]; then + if [ -e /usr/include/mysql/mysql.h ]; then + MYSQL_H=/usr + fi + fi + + if [ "${MYSQL_H}" != "" ]; then + STR="perl -pi -e 's#with-mysql\s#with-mysql=${MYSQL_H} #' ${CONF_FILE}" + eval ${STR} + STR="perl -pi -e 's#with-mysql\"#with-mysql=${MYSQL_H}\"#' ${CONF_FILE}" + eval ${STR} + STR="perl -pi -e 's#with-pdo-mysql\"#with-pdo-mysql=${MYSQL_H}\"#' ${CONF_FILE}" + eval ${STR} + STR="perl -pi -e 's#with-pdo-mysql\s#with-pdo-mysql=${MYSQL_H} #' ${CONF_FILE}" + eval ${STR} + fi + + if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "5.4" ] && [ "${INT_RELEASE}" != "5.5" ] && [ "${INT_RELEASE}" != "5.6" ] && [ "${INT_RELEASE}" != "7.0" ] && [ "${INT_RELEASE}" != "7.1" ] && [ "${INT_RELEASE}" != "7.2" ]; then + if [ ! -e /usr/local/bin/pcre2-config ] && [ -e /usr/bin/pcre2-config ]; then + if grep -m1 -q 'with-pcre-regex=/usr/local' ${CONF_FILE}; then + perl -pi -e 's#with-pcre-regex=/usr/local#with-pcre-regex=/usr#g' ${CONF_FILE} + fi + fi + fi + if [ ! -e /usr/local/bin/pcre-config ] && [ -e /usr/bin/pcre-config ]; then + if grep -m1 -q 'with-pcre-regex=/usr/local' ${CONF_FILE}; then + perl -pi -e 's#with-pcre-regex=/usr/local#with-pcre-regex=/usr#g' ${CONF_FILE} + if [ -e /usr/lib64/libpcre.so ] && [ ! -e /usr/lib/libpcre.so ]; then + ln -s /usr/lib64/libpcre.so /usr/lib/libpcre.so + fi + if [ -e /usr/lib/x86_64-linux-gnu/libpcre.so ] && [ ! -e /usr/lib/libpcre.so ]; then + ln -s /usr/lib/x86_64-linux-gnu/libpcre.so /usr/lib/libpcre.so + fi + if [ -e /usr/lib/x86_64-linux-gnu/libpcre.a ] && [ ! -e /usr/lib/libpcre.a ]; then + ln -s /usr/lib/x86_64-linux-gnu/libpcre.a /usr/lib/libpcre.a + fi + fi + fi + + if [ ! -e /usr/local/lib/libpng.so ]; then + if [ -e /usr/lib64/libpng.so ]; then + LIBPNG_DIR="/usr/lib64" + elif [ -e /usr/lib/x86_64-linux-gnu/libpng.so ]; then + LIBPNG_DIR="/usr/lib/x86_64-linux-gnu" + else + LIBPNG_DIR="/usr/lib" + fi + + if grep -m1 -q 'with-png-dir=/usr/local/lib' ${CONF_FILE}; then + perl -pi -e "s#with-png-dir=/usr/local/lib#with-png-dir=${LIBPNG_DIR}#g" ${CONF_FILE} + fi + fi + + if [ ! -e /usr/local/lib/libjpeg.so ]; then + if [ -e /usr/lib64/libjpeg.so ]; then + LIBJPEG_DIR="/usr/lib64" + elif [ -e /usr/lib/x86_64-linux-gnu/libjpeg.so ]; then + LIBJPEG_DIR="/usr/lib/x86_64-linux-gnu" + else + LIBJPEG_DIR="/usr/lib" + fi + + if grep -m1 -q 'with-jpeg-dir=/usr/local/lib' ${CONF_FILE}; then + perl -pi -e "s#with-jpeg-dir=/usr/local/lib#with-jpeg-dir=${LIBJPEG_DIR}#g" ${CONF_FILE} + fi + fi + + if [ ! -e /usr/local/lib/libwebp.so ]; then + if [ -e /usr/lib64/libwebp.so ]; then + LIBWEBP_DIR="/usr/lib64" + elif [ -e /usr/lib/x86_64-linux-gnu/libwebp.so ]; then + LIBWEBP_DIR="/usr/lib/x86_64-linux-gnu" + else + LIBWEBP_DIR="/usr/lib" + fi + + if grep -m1 -q 'with-webp-dir=/usr/local/lib' ${CONF_FILE}; then + perl -pi -e "s#with-webp-dir=/usr/local/lib#with-webp-dir=${LIBWEBP_DIR}#g" ${CONF_FILE} + fi + fi + + if [ ! -e /usr/local/lib/libfreetype.so ]; then + if [ -e /usr/lib64/libfreetype.so ]; then + LIBFREETYPE_DIR="/usr/lib64" + elif [ -e /usr/lib/x86_64-linux-gnu/libfreetype.so ]; then + LIBFREETYPE_DIR="/usr/lib/x86_64-linux-gnu" + else + LIBFREETYPE_DIR="/usr/lib" + fi + + if grep -m1 -q 'with-freetype-dir=/usr/local/lib' ${CONF_FILE}; then + perl -pi -e "s#with-freetype-dir=/usr/local/lib#with-freetype-dir=${LIBFREETYPE_DIR}#g" ${CONF_FILE} + fi + fi + + if [ ! -e /usr/local/bin/iconv ]; then + LIBICONV_DIR="/usr" + + if grep -m1 -q 'with-iconv=/usr/local' ${CONF_FILE}; then + perl -pi -e "s#with-iconv=/usr/local#with-iconv-dir=${LIBICONV_DIR}#g" ${CONF_FILE} + fi + elif [ "${INT_RELEASE}" = "8.0" ] || [ "${INT_RELEASE}" = "8.1" ]; then + if ! grep -m1 -q 'with-iconv' ${CONF_FILE}; then + perl -pi -e 's#./configure #./configure --with-iconv=/usr/local #' ${CONF_FILE} + fi + fi + + if [ ! -e /usr/local/icu/lib/libicudata.so ]; then + if [ "${OS}" = "FreeBSD" ]; then + LIBICU_DIR="/usr/local" + else + LIBICU_DIR="/usr" + fi + + if grep -m1 -q 'with-icu-dir=/usr/local/icu' ${CONF_FILE}; then + perl -pi -e "s#with-icu-dir=/usr/local/icu#with-icu-dir=${LIBICU_DIR}#g" ${CONF_FILE} + fi + fi + + #we need to make sure that the mysqli path is set. + MYSQLI_BIN="" + if [ -e /usr/local/bin/mysql_config ]; then + MYSQLI_BIN=/usr/local/bin/mysql_config + fi + if [ "${MYSQLI_BIN}" = "" ]; then + if [ -e /usr/mysql/bin/mysql_config ]; then + MYSQLI_BIN=/usr/mysql/bin/mysql_config + fi + fi + if [ "${MYSQLI_BIN}" = "" ]; then + if [ -e /usr/local/mysql/bin/mysql_config ]; then + MYSQLI_BIN=/usr/local/mysql/bin/mysql_config + fi + fi + if [ "${MYSQLI_BIN}" = "" ]; then + if [ -e /usr/bin/mysql_config ]; then + MYSQLI_BIN=/usr/bin/mysql_config + fi + fi + + if [ "${MYSQLI_BIN}" != "" ]; then + STR="perl -pi -e 's#with-mysqli\s#with-mysqli=${MYSQLI_BIN} #' ${CONF_FILE}" + eval ${STR} + STR="perl -pi -e 's#with-mysqli\"#with-mysqli=${MYSQLI_BIN}\"#' ${CONF_FILE}" + eval ${STR} + fi + + MYSQL_SOCK='/var/lib/mysql/mysql.sock' + if [ ! -e ${MYSQL_SOCK} ]; then + if [ -x "${MYSQLI_BIN}" ]; then + MYSQL_SOCK_NEW="`${MYSQLI_BIN} --socket`" + fi + if [ "${MYSQL_SOCK_NEW}" != "" ]; then + MYSQL_SOCK="${MYSQL_SOCK_NEW}" + fi + fi + + if [ "${MYSQL_SOCK}" = "/tmp/mysql.sock" ] && [ "${SYSTEMD}" = "yes" ] && [ -e ${DEBIAN_VERSION} ]; then + MYSQL_SOCK=/usr/local/mysql/data/mysql.sock + fi + + perl -pi -e "s#/var/lib/mysql/mysql.sock#${MYSQL_SOCK}#" ${CONF_FILE} + + #if this is a 64bit system,make sure libmysqlclient is correct. + if [ -e /usr/lib64/libmysqlclient.so ] && [ ! -e /usr/lib/libmysqlclient.so ]; then + if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then + ln -s /usr/lib64/mysql/libmysqlclient.so /usr/lib/libmysqlclient.so + else + ln -s /usr/lib64/libmysqlclient.so /usr/lib/libmysqlclient.so + fi + fi + + #Patch is only needed for PHP 5.3 now + if [ "${OS}" = "FreeBSD" ] && [ "${INT_RELEASE}" = "5.3" ]; then + echo "Patching fpm_sockets.c for https://bugs.php.net/bug.php?id=63983" + perl -pi -e 's|info.tcpi_sacked|info.__tcpi_sacked|' sapi/fpm/fpm/fpm_sockets.c + perl -pi -e 's|info.tcpi_unacked|info.__tcpi_unacked|' sapi/fpm/fpm/fpm_sockets.c + fi + + #Enable systemd support for PHP + if [ "${INT_MODE}" = "php-fpm" ] && [ "${SYSTEMD}" = "yes" ]; then + if ! grep -m1 -q 'with-fpm-systemd' ${CONF_FILE}; then + perl -pi -e 's#--enable-fpm \\#--enable-fpm \\\n\t--with-fpm-systemd \\#' ${CONF_FILE} + fi + if ! grep -m1 -q 'with-fpm-systemd' ${CONF_FILE}; then + perl -pi -e 's#"--enable-fpm" \\#--enable-fpm \\\n\t"--with-fpm-systemd" \\#' ${CONF_FILE} + fi + fi + + #Reported a problem in ticket ID 9605 + #CFLAGS="`getGccOptions`" ${CONF_FILE} + + # ICU 61+ compatibility with PHP 5.x + if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ] || [ "${INT_RELEASE}" = "5.5" ] || [ "${INT_RELEASE}" = "5.6" ] || [ "${INT_RELEASE}" = "7.0" ]; then + NEW_ICU=true + if [ "${OS}" = "FreeBSD" ]; then + MAINVER=`echo ${OS_VER} | cut -d. -f1` + if [ ${MAINVER} -le 10 ]; then + NEW_ICU=false + fi + elif [ -e ${DEBIAN_VERSION} ]; then + if grep -m1 -q '^7' ${DEBIAN_VERSION}; then + NEW_ICU=false + fi + else + if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ]; then + NEW_ICU=false + fi + fi + if ${NEW_ICU}; then + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "${CONF_FILE}" + else + CXXFLAGS="-std=c++11 -DU_USING_ICU_NAMESPACE=1" ${CONF_FILE} + fi + else + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "${CONF_FILE}" + else + ${CONF_FILE} + fi + fi + else + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "${CONF_FILE}" + else + ${CONF_FILE} + fi + fi + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure php. Check the configure file\n" + do_exit 1 + fi + + echo "Done Configuration." + + perl -pi -e 's|$(PHP_RPATHS)|$(NATIVE_RPATHS) $(PHP_RPATHS)|g' Makefile + + #A fix for "ext/intl/msgformat/msgformat_helpers.o: undefined reference" + if [ "${SYSTEMD}" = "yes" ] && [ "${INT_RELEASE}" = "5.3" ]; then + sed -i '/EXTRA_LIBS = /s|$| -lstdc++|' Makefile + fi + + # Fixes problems like "undefined reference to `icu_51::Locale::~Locale()'", because of lib mismatch (--with-icu-dir is /usr/local/icu, but in Makefile /usr/local/lib takes precedence) + if [ "${OS}" = "FreeBSD" ]; then + perl -pi -e 's#-L/usr/local/lib -L/usr/local/icu/lib#-L/usr/local/icu/lib -L/usr/local/lib#' Makefile + fi + + if [ "${INT_RELEASE}" = "5.3" ]; then + perl -pi -e 's| \@\$\(INSTALL\)|\t\@\$\(INSTALL\)|g' Makefile + fi + + while echo "Trying to make php..."; do + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}" + else + C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): " + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make Complete" + + #change the pear settings to remove the -n option. + #the default memory limit was messing this up. + /usr/bin/perl -pi -e 's/PEAR_INSTALL_FLAGS = .*/PEAR_INSTALL_FLAGS = -dshort_open_tag=0 -dsafe_mode=0/' Makefile + + #Remove symlink if exists + if [ -h /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE} ]; then + rm -f /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE} + fi + + if [ -e ${PHP_INI_INT} ]; then + + #short_open_tag: https://help.directadmin.com/item.php?id=438 + perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' ${PHP_INI_INT} + + if [ "${INT_RELEASE}" != "5.3" ]; then + echo "Making PHP ${INT_RELEASE} installation compatible with php.ini file" + /usr/bin/perl -pi -e 's/^register_long_arrays/;register_long_arrays/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^magic_quotes_gpc/;magic_quotes_gpc/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^safe_mode/;safe_mode/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^register_globals/;register_globals/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^register_long_arrays/;register_long_arrays/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^allow_call_time_pass_reference/;allow_call_time_pass_reference/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^define_syslog_variables/;define_syslog_variables/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^highlight.bg/;highlight.bg/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^session.bug_compat_42/;session.bug_compat_42/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^session.bug_compat_warn/;session.bug_compat_warn/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^y2k_compliance/;y2k_compliance/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^magic_quotes_runtime/;magic_quotes_runtime/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/^magic_quotes_sybase/;magic_quotes_sybase/' ${PHP_INI_INT} + fi + fi + + PHP_EXT_INT_OLD="`echo ${PHP_EXT_INT} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`" + if [ -e ${PHP_EXT_INT_OLD} ]; then + rm -f ${PHP_EXT_INT_OLD} + fi + + if [ -e ${PHP_EXT_INT} ]; then + echo "Temporary disabling extensions..." + mv -f ${PHP_EXT_INT} ${PHP_EXT_INT}.cb_backup + fi + + if [ ! -d /usr/local/php${SHORT_RELEASE}/bin ]; then + mkdir -p /usr/local/php${SHORT_RELEASE}/bin + fi + + while echo "Installing php..."; do + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "make install" + else + make install + fi + + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + if [ -e ${PHP_EXT_INT}.cb_backup ]; then + echo "Enabling temporary disabled extensions..." + mv -f ${PHP_EXT_INT}.cb_backup ${PHP_EXT_INT} + fi + + ############################################################# + #we need to have this piece of code here, because without installation we do not have /usr/local/php53(54)/lib available, so we cannot copy php.ini there + #old note: this was moved here, again for pear (before make install) + echo "Copying php.ini.." + if [ ! -e ${PHP_INI_INT} ]; then + cp php.ini-${PHP_INI_TYPE_OPT} ${PHP_INI_INT} + else + echo "${PHP_INI_INT} already exists, skipping." + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if ${INT_MAIN_VERSION}; then + rewrite_phpmodules + fi + fi + + COUNT=`grep -m1 -c '^date.timezone' ${PHP_INI_INT}` + COUNT2=`grep -m1 -c ';date.timezone' ${PHP_INI_INT}` + if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to ${PHP_INI_INT}, please change it by yourself to fit your own needs.${boldoff}" + echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> ${PHP_INI_INT} + elif [ "$COUNT" -eq 0 ]; then + echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to ${PHP_INI_INT}, please change it by yourself to fit your own needs.${boldoff}" + perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" ${PHP_INI_INT} + fi + /usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' ${PHP_INI_INT} + + if [ "${X_MAIL_HEADER_OPT}" = "yes" ]; then + echo "Enabling mail.add_x_header option in ${PHP_INI_INT}" + /usr/bin/perl -pi -e 's/mail.add_x_header = Off/mail.add_x_header = On/' ${PHP_INI_INT} + /usr/bin/perl -pi -e 's/mail.add_x_header = 0/mail.add_x_header = On/' ${PHP_INI_INT} + COUNT=`grep -m1 -c '^mail.add_x_header' ${PHP_INI_INT}` + if [ ${COUNT} -eq 0 ]; then + echo "mail.add_x_header = On" >> ${PHP_INI_INT} + fi + else + echo "Disabling mail.add_x_header option in ${PHP_INI_INT}" + /usr/bin/perl -pi -e 's/^mail.add_x_header =/;mail.add_x_header =/' ${PHP_INI_INT} + fi + + if [ -e /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE} ]; then + echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE}..." + ln -sf /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/php + fi + if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then + echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE}..." + ln -sf /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/lsphp + fi + if [ -e /usr/local/php${SHORT_RELEASE}/bin/php-cgi${SHORT_RELEASE} ]; then + echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/php-cgi${SHORT_RELEASE}..." + ln -sf /usr/local/php${SHORT_RELEASE}/bin/php-cgi${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/php-cgi + fi + if [ -e /usr/local/php${SHORT_RELEASE}/bin/php-config${SHORT_RELEASE} ]; then + echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/php-config${SHORT_RELEASE}..." + ln -sf /usr/local/php${SHORT_RELEASE}/bin/php-config${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/php-config + fi + if [ -e /usr/local/php${SHORT_RELEASE}/bin/phpize${SHORT_RELEASE} ]; then + echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/phpize${SHORT_RELEASE}..." + ln -sf /usr/local/php${SHORT_RELEASE}/bin/phpize${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/phpize + fi + + if ${INT_MAIN_VERSION} && [ -e /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE} ]; then + ln -sf /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE} /usr/local/bin/php + ln -sf /usr/local/php${SHORT_RELEASE}/bin/pear /usr/local/bin/pear + ln -sf /usr/local/php${SHORT_RELEASE}/bin/pecl /usr/local/bin/pecl + ln -sf /usr/local/php${SHORT_RELEASE}/bin/phar /usr/local/bin/phar + ln -sf /usr/local/php${SHORT_RELEASE}/bin/phpize /usr/local/bin/phpize + ln -sf /usr/local/php${SHORT_RELEASE}/bin/php-config /usr/local/bin/php-config + if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp ]; then + cp -pf /usr/local/php${SHORT_RELEASE}/bin/lsphp /usr/local/bin/lsphp + elif [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then + cp -pf /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} /usr/local/bin/lsphp + fi + fi + + doPhpConf + + ############################################################# + #PHP Extensions + if [ "${PHP_PHALCON_OPT}" = "yes" ]; then + #Phalcon5 will be installable as a composer package, not as an extension anymore + if [ "${EXTENSION_INT_RELEASE}" = "7.2" ] || [ "${EXTENSION_INT_RELEASE}" = "7.3" ] || [ "${EXTENSION_INT_RELEASE}" = "7.4" ]; then + doPhalcon ${INT_RELEASE} ${INT_MODE} 1 + fi + fi + if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then + if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then + doSnuffleupagus ${INT_RELEASE} ${INT_MODE} 1 + fi + fi + if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then + if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then + doIgbinary ${INT_RELEASE} ${INT_MODE} 1 + fi + fi + if [ "${PHP_REDIS_OPT}" = "yes" ]; then + if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then + doPHPRedis ${INT_RELEASE} ${INT_MODE} 1 + fi + fi + if [ "${PHP_GMP_OPT}" = "yes" ]; then + doPHPGmp ${INT_RELEASE} ${INT_MODE} 1 + fi + if [ "${PHP_READLINE_OPT}" = "yes" ]; then + doPHPReadline ${INT_RELEASE} ${INT_MODE} 1 + fi + if [ "${PHP_XMLRPC_OPT}" = "yes" ]; then + doPHPXmlrpc ${INT_RELEASE} ${INT_MODE} 1 + fi + if [ "${PHP_IMAP_OPT}" = "yes" ]; then + doPHPImap ${INT_RELEASE} ${INT_MODE} 1 + fi + if [ "${PHP_BZ2_OPT}" = "yes" ]; then + doPHPBz2 ${INT_RELEASE} ${INT_MODE} 1 + fi + if [ "${INT_MODE}" != "mod_php" ] && [ "${INT_RELEASE}" != "8.0" ] && [ "${INT_RELEASE}" != "8.1" ]; then + if [ "${HTSCANNER_OPT}" = "yes" ]; then + doPHPHtscanner ${INT_RELEASE} 1 + fi + fi + + if [ "${PHP_LDAP_OPT}" = "yes" ]; then + doPHPLDAP ${INT_RELEASE} ${INT_MODE} 1 + fi + + if [ "${OPCACHE_OPT}" = "yes" ]; then + doOpcache ${INT_RELEASE} ${INT_MODE} 1 + fi + + if [ "${SUHOSIN_OPT}" = "yes" ]; then + if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "7.0" ] && [ "${INT_RELEASE}" != "7.1" ] && [ "${INT_RELEASE}" != "7.2" ] && [ "${INT_RELEASE}" != "7.3" ] && [ "${INT_RELEASE}" != "7.4" ] && [ "${INT_RELEASE}" != "8.0" ] && [ "${INT_RELEASE}" != "8.1" ]; then + doSuhosin ${INT_RELEASE} ${INT_MODE} 1 + else + echo "This suhosin version does not support PHP ${INT_RELEASE}." + fi + fi + + if [ "${IONCUBE_OPT}" = "yes" ]; then + doIoncube ${INT_RELEASE} ${INT_MODE} 1 + fi + + if [ "${IMAGICK_OPT}" = "yes" ]; then + doIMagick ${INT_RELEASE} ${INT_MODE} 1 + fi + + #Only supported by PHP5 + if echo "${INT_RELEASE}" | grep -m1 -q '^5'; then + if [ "${ZEND_OPT}" = "yes" ]; then + doZend_build ${INT_RELEASE} ${INT_MODE} 1 + fi + fi + + #Install Nginx Unit extension + if [ -d /usr/lib/unit/modules ] && [ ! -s /usr/lib/unit/modules/php${INT_RELEASE}.unit.so ] && [ "${UNIT_OPT}" != "yes" ]; then + if /usr/local/php${SHORT_RELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then + doNginxUnit_module php ${INT_RELEASE} + fi + fi + + ############################################################# + + if [ -s /usr/local/bin/php ] && [ ! -e /bin/php ]; then + ln -s /usr/local/bin/php /bin/php + fi + + ensure_curl_cacert + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + if [ "${INT_MODE}" = "php-fpm" ]; then + #configuration + mkdir -p /usr/local/php${SHORT_RELEASE}/sockets + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + chown apache:apache /usr/local/php${SHORT_RELEASE}/sockets + elif [ "${WEBSERVER_OPT}" = "nginx" ]; then + chown nginx:nginx /usr/local/php${SHORT_RELEASE}/sockets + fi + FPM_SOCK_CHMOD=700 + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + FPM_SOCK_CHMOD=711 + fi + chmod ${FPM_SOCK_CHMOD} /usr/local/php${SHORT_RELEASE}/sockets + + if [ ! -s /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf ]; then + PHP_FPM_CONF_FILE=${WORKDIR}/configure/fpm/conf/php-fpm.conf.${SHORT_RELEASE} + if [ -e ${WORKDIR}/custom/php-fpm/conf/fpm.conf.${SHORT_RELEASE} ]; then + cp -f ${WORKDIR}/custom/php-fpm/conf/fpm.conf.${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf + elif [ -e ${WORKDIR}/custom/fpm/conf/fpm.conf.${SHORT_RELEASE} ]; then + cp -f ${WORKDIR}/custom/fpm/conf/fpm.conf.${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf + else + cp -f ${PHP_FPM_CONF_FILE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf + fi + fi + if [ ! -s /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf ]; then + getFile php-fpm.conf.${SHORT_RELEASE} php-fpm-conf-${SHORT_RELEASE} + cp -f ${CWD}/php-fpm.conf.${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf + fi + + if [ ! -s /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf ]; then + getFile php-fpm.conf.${SHORT_RELEASE} php-fpm-conf-${SHORT_RELEASE} + cp -f ${CWD}/php-fpm.conf.${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf + fi + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + perl -pi -e 's/nginx/apache/' /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf + elif [ "${WEBSERVER_OPT}" = "nginx" ]; then + perl -pi -e 's/apache/nginx/' /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf + fi + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/php-fpm${SHORT_RELEASE} ]; then + echo "Removing ${INITDDIR}/php-fpm${SHORT_RELEASE}..." + rm -f ${INITDDIR}/php-fpm${SHORT_RELEASE} + fi + echo "Enabling php-fpm${SHORT_RELEASE} in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/php-fpm${SHORT_RELEASE}.service ]; then + cp -f ${CB_CUST_SYSTEMD}/php-fpm${SHORT_RELEASE}.service ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service + elif [ -e ${CB_CUST_SYSTEMD}/php-fpm.service ]; then + cp -f ${CB_CUST_SYSTEMD}/php-fpm.service ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service + else + cp -f ${CB_SYSTEMD}/php-fpm.service ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service + fi + chmod 644 ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service + perl -pi -e "s#/usr/local/php/sbin/php-fpm#/usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE}#" ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service + perl -pi -e "s#/run/php-fpm.pid#/run/php-fpm${SHORT_RELEASE}.pid#" ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service + if [ "${INT_RELEASE}" = "5.3" ]; then + perl -pi -e 's/Type\=notify/Type=simple/' ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service + fi + DISABLE_PRIVATETMP=false + if [ "${CLAMAV_OPT}" = "yes" ] && [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ]; then + DISABLE_PRIVATETMP=true + fi + if [ -e /proc/1/environ ]; then + if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then + DISABLE_PRIVATETMP=true + fi + fi + if ${DISABLE_PRIVATETMP}; then + echo "Upload scan option detected in options.conf. Disabling PrivateTmp feature in php-fpm${SHORT_RELEASE}.service for ClamAV to be able to scan files in /tmp." + perl -pi -e 's#PrivateTmp\=true#PrivateTmp=false#' ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service + fi + systemctl daemon-reload + systemctl enable php-fpm${SHORT_RELEASE}.service + else + if [ ! -s ${INITDDIR}/php-fpm${SHORT_RELEASE} ]; then + cd ${CWD} + if [ "${OS}" = "FreeBSD" ]; then + getFile php-fpm.freebsd + cp ${CWD}/php-fpm.freebsd ${INITDDIR}/php-fpm${SHORT_RELEASE} + chmod 755 ${INITDDIR}/php-fpm${SHORT_RELEASE} + elif [ -e /etc/debian_version ]; then + getFile php-fpm.debian + cp ${CWD}/php-fpm.debian ${INITDDIR}/php-fpm${SHORT_RELEASE} + chmod 755 ${INITDDIR}/php-fpm${SHORT_RELEASE} + update-rc.d php-fpm${SHORT_RELEASE} defaults + else + getFile php-fpm + cp ${CWD}/php-fpm ${INITDDIR}/php-fpm${SHORT_RELEASE} + chmod 755 ${INITDDIR}/php-fpm${SHORT_RELEASE} + /sbin/chkconfig php-fpm${SHORT_RELEASE} on + fi + + perl -pi -e "s|53|${SHORT_RELEASE}|" ${INITDDIR}/php-fpm${SHORT_RELEASE} + + fi + fi + + if [ -e /usr/local/php${SHORT_RELEASE}/sbin/php-fpm ] && [ ! -e /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE} ]; then + mv /usr/local/php${SHORT_RELEASE}/sbin/php-fpm /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE} + fi + + if [ ! -e /usr/local/php${SHORT_RELEASE}/sbin/php-fpm ]; then + rm -f /usr/local/php${SHORT_RELEASE}/sbin/php-fpm + ln -sf /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/sbin/php-fpm + fi + fpmChecks + control_service php-fpm${SHORT_RELEASE} restart + + #Make log files available in /var/log + if [ ! -h /var/log/php-fpm${SHORT_RELEASE}.log ]; then + ln -sf /usr/local/php${SHORT_RELEASE}/var/log/php-fpm.log /var/log/php-fpm${SHORT_RELEASE}.log + fi + elif [ "${INT_MODE}" = "fastcgi" ]; then + doSetupFcgidSh ${SHORT_RELEASE} + fi + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp ] || [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then + mkdir -p /usr/local/lsws/fcgi-bin + control_service litespeed stop + sleep 2 + killall -9 litespeed >/dev/null 2>&1 + if [ -e /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp ]; then + ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp /usr/local/bin/lsphp + elif [ -e /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} ]; then + ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} /usr/local/bin/lsphp + fi + #Use /usr/local/bin/lsphp as PHP path + perl -pi -e 's|\$SERVER_ROOT/fcgi-bin/lsphp5|/usr/local/bin/lsphp|g' /usr/local/lsws/conf/httpd_config.xml + #Set appropriate path for lsphp + perl -pi -e 's|\$SERVER_ROOT/usr/local/bin/lsphp|/usr/local/bin/lsphp|g' /usr/local/lsws/conf/httpd_config.xml + #Log just errors + perl -pi -e 's|DEBUG|ERROR|g' /usr/local/lsws/conf/httpd_config.xml + if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then + cp -pf /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ${LSWS_HOME}/fcgi-bin/lsphp-${INT_RELEASE} + else + cp -pf /usr/local/php${SHORT_RELEASE}/bin/lsphp ${LSWS_HOME}/fcgi-bin/lsphp-${INT_RELEASE} + fi + if ${INT_MAIN_VERSION}; then + rm -f ${LSWS_HOME}/fcgi-bin/lsphp + ln -s ${LSWS_HOME}/fcgi-bin/lsphp-${INT_RELEASE} ${LSWS_HOME}/fcgi-bin/lsphp + rm -f ${LSWS_HOME}/fcgi-bin/lsphp${SHORT_RELEASE} + ln -s ${LSWS_HOME}/fcgi-bin/lsphp-${INT_RELEASE} ${LSWS_HOME}/fcgi-bin/lsphp${SHORT_RELEASE} + if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp4" ]; then + ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp4" + fi + if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp7" ]; then + ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp7" + fi + if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp8" ]; then + ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp8" + fi + if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp5" ]; then + ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp5" + fi + if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp55" ]; then + ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp55" + fi + fi + control_service litespeed start + fi + fi + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp ] || [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then + mkdir -p /usr/local/lsws/fcgi-bin + control_service litespeed stop + sleep 2 + killall -9 litespeed >/dev/null 2>&1 + if ${INT_MAIN_VERSION}; then + if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp ]; then + ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp /usr/local/bin/lsphp + else + ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} /usr/local/bin/lsphp + fi + fi + control_service litespeed start + fi + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${INT_MODE}" = "lsphp" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ ! -s /usr/lib/apache/mod_lsapi.so ]; then + doModLsapi 0 + else + if [ -s ${STRINGS} ]; then + MODLSAPIV="`${STRINGS} /usr/lib/apache/mod_lsapi.so | grep -m1 'version' | awk '{print $3}' | cut -d: -f1 | grep -o '.*[0-9][^a-z]'`" + if [ "${MODLSAPIV}" != "${MOD_LSAPI_VER}" ]; then + doModLsapi 0 + fi + fi + fi + fi + fi + + if ${INT_MAIN_VERSION}; then + NATIVE_CONF=/etc/cl.selector/native.conf + + if [ -e ${NATIVE_CONF} ] && [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${PHP1_MODE_OPT}" != "mod_php" ] && [ -x /usr/sbin/cagefsctl ]; then + /usr/sbin/cagefsctl --setup-cl-selector + fi + fi + + #install proactive defence if exists + if [ -x /usr/share/i360-php/easyapache3/native_da.hook ]; then + PHP_BUILD_BIN=/usr/local/php${SHORT_RELEASE}/bin/php + /usr/share/i360-php/easyapache3/native_da.hook --install-i360 ${PHP_BUILD_BIN} + fi + + removeLockfile + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + #Revert temporary MPM mode set (to be fail-proof with non-ZTS version) + if [ -s ${PHPMODULES} ]; then + set_apache_mpm + fi + echo "Restarting apache." + control_service httpd restart + fi + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Restarting nginx." + control_service nginx stop >/dev/null 2>&1 + control_service nginx start + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Rewriting all users httpd.conf files, please wait..." + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + echo "Rewriting all users openlitespeed.conf files, please wait..." + echo "action=rewrite&value=openlitespeed" >> ${TASK_QUEUE} + elif [ "${WEBSERVER_OPT}" = "nginx" ]; then + echo "Rewriting all users nginx.conf files, please wait..." + echo "action=rewrite&value=nginx" >> ${TASK_QUEUE} + fi + + run_dataskq d + + echo "PHP ${PHP_VER} Installed." + writeLog "PHP ${PHP_VER} installed" + + cd ${CWD} +} + +#################################################### + +doModAclr2() { + cd ${CWD} + if [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then + do_exit 1 "Cannot build mod_aclr2, because of the chosen webserver in the options.conf file." + fi + getFile mod_aclr2-${MOD_ACLR2_VER}.tar.gz mod_aclr2 + getFile patches/mod_aclr2_userdir.patch mod_aclr2_userdir.patch + + FILE=${CWD}/mod_aclr2-${MOD_ACLR2_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + #We don't have a directory in a tarball, so we create it here, and extract files to it + mkdir -p mod_aclr2-${MOD_ACLR2_VER} + tar xzf ${FILE} -C ./mod_aclr2-${MOD_ACLR2_VER} + cd mod_aclr2-${MOD_ACLR2_VER} + + if [ -e patches/mod_aclr2_userdir.patch ]; then + echo "Patching to support UserDir..." + patch -p0 < patches/mod_aclr2_userdir.patch + fi + + echo "Installing mod_aclr2-${MOD_ACLR2_VER}..." + + APXS=/usr/sbin/apxs + if [ ! -e $APXS ]; then + echo "cannot find $APXS, trying a different path" + APXS=/usr/bin/apxs + fi + $APXS -c mod_aclr2.c + $APXS -i -a -n aclr mod_aclr2.la + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to install mod_aclr2-${MOD_ACLR2_VER}.\n" + do_exit 1 + fi + + perl -pi -e 's|^LoadModule aclr_module|#LoadModule aclr_module|' /etc/httpd/conf/httpd.conf + + echo "mod_aclr2 has been installed successfully." + writeLog "mod_aclr2 installed" + + cd ${CWD} +} + +#################################################### + +doModRuid2() { + cd ${CWD} + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + do_exit 1 "Cannot build mod_ruid2, because nginx webserver is chosen in the options.conf file." + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + echo "Cannot build mod_ruid2, because litespeed webserver is chosen in the options.conf file." + return + fi + getFile mod_ruid2-${MOD_RUID2_VER}.tar.bz2 mod_ruid2 + + if [ "${MOD_RUID2_OPT}" != "yes" ]; then + do_exit 1 "You cannot install mod_ruid2, because you do not have it set in options.conf file." + fi + + if [ ! -e /lib/libcap.so ] && [ ! -e /lib64/libcap.so ] && [ ! -e /usr/lib/libcap.so ] && [ ! -e /usr/lib64/libcap.so ] && [ ! -e /lib/x86_64-linux-gnu/libcap.so ] && [ ! -e /lib/i386-linux-gnu/libcap.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libcap.so ]; then + echo "Cannot find libcap.so for mod_ruid2. Please install libcap" + if [ -e /etc/debian_version ]; then + echo "apt-get install libcap-dev" + else + echo "yum -y install libcap-devel" + fi + return + fi + + if [ ! -e /usr/bin/bzip2 ] && [ ! -e /bin/bzip2 ]; then + echo "Cannot find bzip2. Please install it." + if [ -e /etc/debian_version ]; then + echo "apt-get install bzip2" + else + echo "yum -y install bzip2" + fi + return + fi + + FILE=${CWD}/mod_ruid2-${MOD_RUID2_VER}.tar.bz2 + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xjf ${FILE} + cd mod_ruid2-${MOD_RUID2_VER} + + echo "Installing mod_ruid2-${MOD_RUID2_VER}..." + + APXS=/usr/sbin/apxs + if [ ! -e $APXS ]; then + echo "cannot find $APXS, trying a different path" + APXS=/usr/bin/apxs + fi + perl -pi -e 's#ap_hook_post_read_request\(ruid_setup, NULL, NULL, APR_HOOK_MIDDLE\);#ap_hook_post_read_request(ruid_setup, NULL, NULL, APR_HOOK_REALLY_FIRST);#' mod_ruid2.c + $APXS -a -i -l cap -c mod_ruid2.c + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to install mod_ruid2-${MOD_RUID2_VER}.\n" + do_exit 1 + fi + + set_LoadModule ruid2_module mod_ruid2.so + + if [ -e ${PHPMODULES} ]; then + if ! grep -m1 -q '^Mutex ' ${PHPMODULES}; then + echo "Mutex posixsem" >> ${PHPMODULES} + fi + fi + + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + run_dataskq + echo "mod_ruid2 has been installed successfully." + writeLog "mod_ruid2 installed" + + cd ${CWD} +} + +#################################################### + +doModHtscanner() { + cd ${CWD} + if [ "${HTSCANNER_OPT}" = "no" ]; then + do_exit 1 "Cannot build htscanner, because you do not have it set in php_extensions.conf file." + fi + if [ ! -e /usr/sbin/apxs ]; then + echo "/usr/sbin/apxs is not found, skipping htscanner for now." + return + fi + getFile htscanner-${HTSCANNER_VER}.tgz htscanner + + FILE=${CWD}/htscanner-${HTSCANNER_VER}.tgz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} + cd htscanner-${HTSCANNER_VER} + + echo "Installing mod_htscanner2-${HTSCANNER_VER}..." + + APXS=/usr/sbin/apxs + if [ ! -e $APXS ]; then + echo "cannot find $APXS, trying a different path" + APXS=/usr/bin/apxs + fi + $APXS -a -i -c mod_htscanner2.c + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to install mod_htscanner2-${HTSCANNER_VER}.\n" + do_exit 1 + fi + + set_LoadModule htscanner_module mod_htscanner2.so + + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + run_dataskq + echo "mod_htscanner2 has been installed successfully." + writeLog "mod_htscanner2 installed" + + cd ${CWD} +} + +#################################################### + +doModFCGID() { + cd ${CWD} + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + do_exit 1 "Cannot build mod_fcgid, because nginx webserver is chosen in the options.conf file." + fi + getFile mod_fcgid-${MOD_FCGID_VER}.tar.gz mod_fcgid + + FILE=${CWD}/mod_fcgid-${MOD_FCGID_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + cd mod_fcgid-${MOD_FCGID_VER} + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + patch -p1 < ../mod_fcgid_2_3_7.patch + fi + + echo "Installing mod_fcgid-${MOD_FCGID_VER}..." + + APXS=/usr/sbin/apxs ./configure.apxs + + while echo "Trying to make mod_fcgid-${MOD_FCGID_VER}..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing mod_fcgid-${MOD_FCGID_VER}..." + make install + + set_LoadModule fcgid_module mod_fcgid.so + + if [ -e ${PHPMODULES} ]; then + if ! grep -m1 -q 'httpd-fcgid.conf' ${PHPMODULES}; then + echo "Include /etc/httpd/conf/extra/httpd-fcgid.conf" >> ${PHPMODULES} + fi + fi + + if [ ! -e ${HTTPDCONF}/extra/httpd-fcgid.conf ] && [ -e ${CWD}/configure/ap2/conf/extra/httpd-fcgid.conf ]; then + cp ${CWD}/configure/ap2/conf/extra/httpd-fcgid.conf ${HTTPDCONF}/extra/httpd-fcgid.conf + fi + + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + run_dataskq + + + echo "mod_fcgid-${MOD_FCGID_VER} has been installed successfully." + writeLog "mod_fcgid ${MOD_FCGID_VER} installed" + + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +doPigz() { + if [ ! -e /usr/local/lib_da/lib/libz.a ]; then + doZlib + fi + cd ${CWD} + getFile pigz-${PIGZ_VER}.tar.gz pigz + + FILE=${CWD}/pigz-${PIGZ_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + cd pigz-${PIGZ_VER} + + if [ -e /usr/local/lib_da/lib/libz.a ]; then + perl -pi -e 's#-lz##' Makefile + perl -pi -e 's#-lm#-lm /usr/local/lib_da/lib/libz.a#' Makefile + fi + + echo "Installing pigz-${PIGZ_VER}..." + + while echo "Trying to make pigz-${PIGZ_VER}..."; do + if [ "$OS" = "FreeBSD" ]; then + MAKE_BIN="/usr/local/bin/gmake" + else + MAKE_BIN="make" + fi + + if [ -e /usr/local/lib_da/lib/libz.a ]; then + ${MAKE_BIN} CFLAGS="-I/usr/local/lib_da/include/" -j ${CPU_CORES} + else + ${MAKE_BIN} -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing pigz-${PIGZ_VER}..." + mv -f pigz /usr/local/bin/pigz + mv -f unpigz /usr/local/bin/unpigz + + echo "Enabling pigz in directadmin.conf to use ${CPU_CORES} CPU core(s)." + setVal pigz ${CPU_CORES} ${DACONF_TEMPLATE_FILE} + setVal pigz ${CPU_CORES} ${DACONF_FILE} + doRestartDA + echo "pigz-${PIGZ_VER} has been installed successfully." + writeLog "pigz ${PIGZ_VER} installed" + + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} +#################################################### + +ensure_curl_cacert() { + if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "`version_cmp ${PHP1_RELEASE_OPT} 5.6 'curl cacert'`" -ge 0 ]; then + CURL_CACERT_DIR=/usr/ssl + CURL_CACERT_PATH=${CURL_CACERT_DIR}/cert.pem + if [ -x /usr/local/bin/php ]; then + DCF=`/usr/local/bin/php -r "if (function_exists('openssl_get_cert_locations')) echo openssl_get_cert_locations()['default_cert_file'];"` + if [ "${DCF}" != "" ]; then + CURL_CACERT_PATH=${DCF} + CURL_CACERT_DIR=`dirname ${CURL_CACERT_PATH}` + fi + fi + + SET_CURL_CACERT=0 + + if [ "$1" = "1" ]; then + SET_CURL_CACERT=1 + fi + + if [ ! -s "${CURL_CACERT_PATH}" ]; then + SET_CURL_CACERT=1 + else + COUNT=`grep -c 'Bundle of CA Root Certificates' ${CURL_CACERT_PATH}` + if [ "${COUNT}" -gt 0 ]; then + SET_CURL_CACERT=1 + fi + fi + + if [ "${SET_CURL_CACERT}" -eq 1 ]; then + if [ ! -d ${CURL_CACERT_DIR} ]; then + mkdir -p ${CURL_CACERT_DIR} + chmod 755 ${CURL_CACERT_DIR} + fi + + M=`getMD5 ${CURL_CACERT_PATH} curl_cacert` + if [ "$M" != "0" ]; then + echo "${boldon}Downloading updated ${CURL_CACERT_PATH}${boldoff}" + + getFile all/ssl/cacert.pem curl_cacert cacert.pem + if [ -s cacert.pem ]; then + CACERT_DIRECTORY="`dirname ${CURL_CACERT_PATH}`" + if [ ! -d ${CACERT_DIRECTORY} ]; then + mkdir -p ${CACERT_DIRECTORY} + fi + mv -f ${CURL_CACERT_PATH} ${CURL_CACERT_PATH}.old 2>/dev/null + mv cacert.pem ${CURL_CACERT_PATH} + chmod 644 ${CURL_CACERT_PATH} + fi + fi + + fi + fi + +} + +ensure_server_ca() { + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + SSL_CA=${HTTPDCONF}/ssl.crt/server.ca + SSL_CRT=${HTTPDCONF}/ssl.crt/server.crt + SSL_KEY=${HTTPDCONF}/ssl.key/server.key + mkdir -p ${HTTPDCONF}/ssl.crt + ensure_dhparam ${HTTPDCONF}/ssl.crt/dhparams.pem + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + SSL_CA=${LSWS_HOME}/ssl.crt/server.ca + SSL_CRT=${LSWS_HOME}/ssl.crt/server.crt + SSL_KEY=${LSWS_HOME}/ssl.key/server.key + mkdir -p ${LSWS_HOME}/ssl.crt + elif [ "${WEBSERVER_OPT}" = "nginx" ]; then + SSL_CA=${NGINXCONF}/ssl.crt/server.ca + SSL_CRT=${NGINXCONF}/ssl.crt/server.crt + mkdir -p ${NGINXCONF}/ssl.crt + ensure_dhparam ${NGINXCONF}/ssl.crt/dhparams.pem + else + echo "Unknown value for webserver=${WEBSERVER_OPT}" + return + fi + + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + mkdir -p ${NGINXCONF}/ssl.crt + mkdir -p ${NGINXCONF}/ssl.key + ensure_dhparam ${NGINXCONF}/ssl.crt/dhparams.pem + fi + + echo "Checking to ensure ${SSL_CA} is set." + + if [ ! -s ${SSL_CA} ]; then + echo "Downloading new generic server.ca ..." + curl ${CURL_CONNECT_OPTIONS} -o ${SSL_CA} ${WEBPATH_SERVICES}/all/ssl/server.ca + + if [ ! -s ${SSL_CA} ]; then + echo "Trying server.ca from backup services url..." + curl ${CURL_CONNECT_OPTIONS} -o ${SSL_CA} ${WEBPATH_SERVICES_BACKUP}/all/ssl/server.ca + + if [ ! -s ${SSL_CA} ]; then + echo "server.ca download failed." + + if [ -s ${SSL_CRT} ]; then + echo "Copying main server.crt to server.ca just as a valid read value so apache can start up" + cp -f ${SSL_CRT} ${SSL_CA} + fi + fi + fi + fi + + if [ "${WEBSERVER_OPT}" = "apache" ]; then + if [ -s ${SSL_CRT} ] && [ -s ${SSL_CA} ]; then + cat ${SSL_CRT} > ${SSL_CRT}.combined + #Sometimes we don't have a new line in SSL_CRT, so we add one to separate SSL_CRT and SSL_CA + echo >> ${SSL_CRT}.combined + cat ${SSL_CA} >> ${SSL_CRT}.combined + fi + fi + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -s ${SSL_CRT} ] && [ -s ${SSL_CA} ]; then + cat ${SSL_CRT} > ${SSL_CRT}.combined + #Sometimes we don't have a new line in SSL_CRT, so we add one to separate SSL_CRT and SSL_CA + echo >> ${SSL_CRT}.combined + cat ${SSL_CA} >> ${SSL_CRT}.combined + fi + NG_CA=${NGINXCONF}/ssl.crt/server.ca + NG_CRT=${NGINXCONF}/ssl.crt/server.crt + NG_KEY=${NGINXCONF}/ssl.key/server.key + + CP_FLAGS="-fu" + if [ "${OS}" = "FreeBSD" ]; then + CP_FLAGS="-f" + fi + if [ ! -L ${SSL_CA} ]; then + cp ${CP_FLAGS} ${SSL_CA} ${NG_CA} + fi + if [ ! -L ${SSL_CRT} ]; then + cp ${CP_FLAGS} ${SSL_CRT} ${NG_CRT} + fi + if [ ! -L ${SSL_KEY} ]; then + cp ${CP_FLAGS} ${SSL_KEY} ${NG_KEY} + fi + fi + + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + NG_CA=${NGINXCONF}/ssl.crt/server.ca + NG_CRT=${NGINXCONF}/ssl.crt/server.crt + + if [ -s ${NG_CRT} ] && [ -s ${NG_CA} ]; then + cat ${NG_CRT} > ${NG_CRT}.combined + #Sometimes we don't have a new line in SSL_CRT, so we add one to separate SSL_CRT and SSL_CA + echo >> ${SSL_CRT}.combined + cat ${NG_CA} >> ${NG_CRT}.combined + fi + + chmod 600 ${NGINXCONF}/ssl.crt/server.ca + chmod 600 ${NGINXCONF}/ssl.crt/server.crt + chmod 600 ${NG_CRT}.combined + fi +} + +backupHttp() { + echo "Backing up certificate and key, and turning off httpd for DirectAdmins's check." + + if [ -e ${HTTPDCONF}/ssl.crt/server.crt ]; then + cp -fp ${HTTPDCONF}/ssl.crt/server.crt ${HTTPDCONF}/ssl.crt/server.crt.backup + fi + if [ -e ${HTTPDCONF}/ssl.key/server.key ]; then + cp -fp ${HTTPDCONF}/ssl.key/server.key ${HTTPDCONF}/ssl.key/server.key.backup + fi + if [ -e ${HTTPD_CONF} ]; then + cp -fp ${HTTPD_CONF} ${HTTPD_CONF}.backup + fi + + #turn off httpd service checking + set_service httpd OFF +} + +restoreHttp() { + echo "Restoring certificate and key, and turning on httpd for DirectAdmins's check." + + if [ -e ${HTTPDCONF}/ssl.crt/server.crt.backup ]; then + cp -fp ${HTTPDCONF}/ssl.crt/server.crt.backup ${HTTPDCONF}/ssl.crt/server.crt + chmod 600 ${HTTPDCONF}/ssl.crt/server.crt + fi + if [ -e ${HTTPDCONF}/ssl.key/server.key.backup ]; then + cp -fp ${HTTPDCONF}/ssl.key/server.key.backup ${HTTPDCONF}/ssl.key/server.key + chmod 600 ${HTTPDCONF}/ssl.key/server.key + fi + if [ -e ${HTTPDCONF}/httpd.conf.backup ]; then + cp -fp ${HTTPDCONF}/httpd.conf.backup ${HTTPDCONF}/httpd.conf + fi + + ensure_server_ca + + #turn on httpd service checking + set_service httpd ON +} + +#################################################### + +checkRPMS() { + if [ ${OS} = "FreeBSD" ]; then + return + fi + + if [ -e ${DEBIAN_VERSION} ]; then + return + fi + + echo "Removing all apache related rpms..." + rpm -e --nodeps mod_auth_pgsql 2> /dev/null + rpm -e --nodeps mod_python 2> /dev/null + rpm -e --nodeps mod_auth_mysql 2> /dev/null + rpm -e --nodeps mod_auth_any 2> /dev/null + rpm -e --nodeps mod_dav 2> /dev/null + rpm -e --nodeps mod_ssl 2> /dev/null + rpm -e --nodeps mod_perl 2> /dev/null + rpm -e --nodeps mod_fpse 2> /dev/null + rpm -e --nodeps apache-fp 2> /dev/null + rpm -e --nodeps apache-fp-devel 2> /dev/null + rpm -e --nodeps apache-manual 2> /dev/null + rpm -e --nodeps apacheconf 2> /dev/null + rpm -e --nodeps apache-devel 2> /dev/null + rpm -e --nodeps apache 2> /dev/null + rpm -e --nodeps httpd 2> /dev/null + rpm -e --nodeps httpd-devel 2> /dev/null + rpm -e --nodeps httpd-tools 2> /dev/null + rpm -e --nodeps httpd-manual 2> /dev/null + rpm -e --nodeps php 2> /dev/null + echo "All apache related rpms have been removed." +} + +#################################################### + +#addUserGroup mail mail 12 12 +addUserGroup() { + if [ ${OS} = "FreeBSD" ]; then + PW=/usr/sbin/pw + ADD_UID= + ADD_GID= + if [ "${3}" != "" ]; then + ADD_UID="-u ${3}" + fi + if [ "${4}" != "" ]; then + ADD_GID="-g ${4}" + fi + + if ! /usr/bin/grep -q "^${2}:" < /etc/group; then + ${PW} groupadd ${2} ${ADD_GID} + fi + if ! /usr/bin/id ${1} > /dev/null 2>&1; then + ${PW} useradd -g ${2} -n ${1} -s /sbin/nologin ${ADD_UID} + fi + elif [ -e ${DEBIAN_VERSION} ]; then + if ! /usr/bin/id ${1} > /dev/null 2>&1; then + /usr/sbin/adduser --system --group --no-create-home \ + --disabled-login --force-badname ${1} > /dev/null + fi + else + if ! /usr/bin/id ${1} > /dev/null 2>&1; then + /usr/sbin/useradd -r -s /bin/false ${1} + fi + fi +} + +#################################################### + +set64() { + if [ ! -d /usr/lib64 ]; then + return + fi + if [ ! -e /usr/lib/libssl.so ]; then + ln -sf /usr/lib64/libssl.so /usr/lib/libssl.so + fi + if [ ! -e /usr/lib/libidn.so ]; then + ln -sf /usr/lib64/libidn.so /usr/lib/libidn.so + fi +} + +#################################################### + +doApacheCheck() { + if [ ! -e ${HTTPDCONF}/extra/httpd-includes.conf ]; then + echo -n "" > ${HTTPDCONF}/extra/httpd-includes.conf + fi + + if [ ! -e ${SUPHP_HTTPD} ]; then + echo -n "" > ${SUPHP_HTTPD} + fi + + if [ ! -e ${HTTPDCONF}/extra/httpd-php-handlers.conf ]; then + echo -n "" > ${HTTPDCONF}/extra/httpd-php-handlers.conf + fi + + if [ ! -e ${HTTPDCONF}/extra/httpd-phpmodules.conf ]; then + echo -n "" > ${HTTPDCONF}/extra/httpd-phpmodules.conf + fi +} + +#################################################### + +hideFrontpage() { + if [ -e ${DACONF_TEMPLATE_FILE} ] && [ "`grep -m1 -c frontpage_on ${DACONF_TEMPLATE_FILE}`" = "0" ]; then + echo "frontpage_on=0" >> ${DACONF_TEMPLATE_FILE} + fi + + if [ -e ${DACONF_FILE} ] && [ "`grep -m1 -c frontpage_on ${DACONF_FILE}`" = "0" ]; then + echo "frontpage_on=0" >> ${DACONF_FILE} + if [ -e /usr/local/directadmin/data ]; then + echo "action=directadmin&value=reload" >> ${TASK_QUEUE} + fi + fi +} + +#################################################### + +setFDSETSIZE() { + #this bit is to increase the socket limit + if [ -e /usr/include/bits/typesizes.h ]; then + perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/bits/typesizes.h + fi + + if [ -e /usr/include/linux/posix_types.h ]; then + perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/linux/posix_types.h + fi + + if [ -e /usr/include/bits/types.h ]; then + perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/bits/types.h + fi + + #same thing, for freebsd + if [ -e /usr/include/sys/select.h ]; then + perl -pi -e 's/FD_SETSIZE.*1024U/FD_SETSIZE 32768U/' /usr/include/sys/select.h + fi + + if [ ${OS} != "FreeBSD" ]; then + NUMBER=`cat /proc/sys/fs/file-max` + if [ ${NUMBER} -lt 131072 ]; then + echo "131072" > /proc/sys/fs/file-max + fi + fi +} + +#################################################### + +#tokenize the IP +tokenize_IP() { + TOKENFILE_APACHE=${HTTPDCONF}/extra/httpd-vhosts.conf + + TOKENFILE_OPENLITESPEED=${LSWS_HOME}/conf/httpd-vhosts.conf + + TOKENFILE_NGINX=${NGINXCONF}/nginx.conf + if [ -e ${TOKENFILE_NGINX} ]; then + if grep -q -m1 'nginx-vhosts\.conf' ${TOKENFILE_NGINX}; then + TOKENFILE_NGINX=${NGINXCONF}/nginx-vhosts.conf + fi + fi + TOKENFILE_NGINX_USERDIR=${NGINXCONF}/nginx-userdir.conf + + if [ -d /usr/local/directadmin/data/admin/ips ]; then + IP="`grep -r -l -m1 '^status=server$' /usr/local/directadmin/data/admin/ips | cut -d/ -f8`" + fi + if [ "${IP}" = "" ]; then + IP="`grep -im1 ${HOSTNAME} /etc/hosts | awk '{print $1}'`" + if [ "${IP}" = "" ]; then + echo "Unable to detect your server IP in /etc/hosts. Please enter it: " + read IP + fi + fi + if [ "${IP}" = "" ]; then + echo "Unable to detect your server IP. Exiting..." + do_exit 0 + fi + + if [ "`echo ${IP} | grep -m1 -c ':'`" -gt 0 ]; then + IP="[${IP}]" + fi + + echo "Using $IP for your server IP" + + LAN_IP=`getDA_Opt lan_ip ""` + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -e ${TOKENFILE_APACHE} ]; then + if [ "`grep -m1 -c '|IP|' ${TOKENFILE_APACHE}`" -gt "0" ]; then + STR="perl -pi -e 's/\|IP\|/$IP/' ${TOKENFILE_APACHE}" + eval ${STR} + fi + + if [ "`grep -m1 -c '|LINKEDIP|' ${TOKENFILE_APACHE}`" -gt "0" ]; then + #|LINKEDIP| and |LINKEDIPSSL| + #set them or clear them. + + IP_CF=/usr/local/directadmin/data/admin/ips/${IP} + if [ -s ${IP_CF} ] && [ -s ${DACONF_FILE} ]; then + if [ "`grep -m1 -c '^linked_ips=' ${IP_CF}`" -gt "0" ]; then + #2 will tokenize the httpd-vhosts.conf + /usr/local/directadmin/dataskq --linked-ips=2 + fi + fi + + #this is a fallback, in case the dataskq did not do it + LINKEDIP="perl -pi -e 's/\|LINKEDIP\|//' ${TOKENFILE_APACHE}" + LINKEDIPSSL="perl -pi -e 's/\|LINKEDIPSSL\|//' ${TOKENFILE_APACHE}" + eval ${LINKEDIP} + eval ${LINKEDIPSSL} + fi + fi + fi + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + if [ -e ${TOKENFILE_OPENLITESPEED} ]; then + if [ "`grep -m1 -c '|IP_LISTENER|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then + IP_LISTENER=`echo "${IP}" | tr '.:' '-'` + STR="perl -pi -e 's/\|IP_LISTENER\|/$IP_LISTENER/g' ${TOKENFILE_OPENLITESPEED}" + eval ${STR} + fi + if [ "`grep -m1 -c '|HOSTNAME|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then + STR="perl -pi -e 's/\|HOSTNAME\|/$HOSTNAME/g' ${TOKENFILE_OPENLITESPEED}" + eval ${STR} + fi + if [ "`grep -m1 -c '|LINKEDIP_LISTENERS|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then + #|LINKEDIP_LISTENERS| + #set them or clear them. + + IP_CF=/usr/local/directadmin/data/admin/ips/${IP} + if [ -s ${IP_CF} ] && [ -s ${DACONF_FILE} ]; then + if [ "`grep -m1 -c '^linked_ips=' ${IP_CF}`" -gt "0" ]; then + #4 will tokenize the httpd-vhosts.conf + /usr/local/directadmin/dataskq --linked-ips=4 + fi + fi + + #this is a fallback, in case the dataskq did not do it + LINKEDIP_LISTENERS="perl -pi -e 's/\|LINKEDIP_LISTENERS\|//' ${TOKENFILE_OPENLITESPEED}" + eval ${LINKEDIP_LISTENERS} + fi + fi + fi + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -e ${TOKENFILE_NGINX} ]; then + if [ "`grep -m1 -c '|IP|' ${TOKENFILE_NGINX}`" -gt "0" ]; then + if [ "${LAN_IP}" != "" ] && [ "${LAN_IP}" != "${IP}" ]; then + echo "Using lan_ip=$LAN_IP as a secondary server IP"; + STR="perl -pi -e 's/\|IP\|:\|PORT_80\|;/\|IP\|:\|PORT_80\|;\n\tlisten\t\t$LAN_IP:\|PORT_80\|;/' ${TOKENFILE_NGINX}" + eval ${STR} + + STR="perl -pi -e 's/\|IP\|:\|PORT_443\| ssl\|SPACE_HTTP2\|;/\|IP\|:\|PORT_443\| ssl\|SPACE_HTTP2\|;\n\tlisten\t\t$LAN_IP:\|PORT_443\| ssl\|SPACE_HTTP2\|;/' ${TOKENFILE_NGINX}" + eval ${STR} + fi + + echo "Using $IP for your server IP" + STR="perl -pi -e 's/\|IP\|/$IP/' ${TOKENFILE_NGINX}" + eval ${STR} + fi + + if [ "`grep -m1 -c '|LINKEDIP|' ${TOKENFILE_NGINX}`" -gt "0" ]; then + #|LINKEDIP| and |LINKEDIPSSL| + #set them or clear them. + + IP_CF=/usr/local/directadmin/data/admin/ips/${IP} + if [ -s ${IP_CF} ] && [ -s ${DACONF_FILE} ]; then + if [ "`grep -m1 -c '^linked_ips=' ${IP_CF}`" -gt "0" ]; then + #3 will tokenize the nginx-vhosts.conf + /usr/local/directadmin/dataskq --linked-ips=3 + fi + fi + + #this is a fallback, in case the dataskq did not do it + LINKEDIP="perl -pi -e 's/\|LINKEDIP\|//' ${TOKENFILE_NGINX}" + LINKEDIPSSL="perl -pi -e 's/\|LINKEDIPSSL\|//' ${TOKENFILE_NGINX}" + eval ${LINKEDIP} + eval ${LINKEDIPSSL} + fi + fi + if [ -e ${TOKENFILE_NGINX_USERDIR} ]; then + if [ "`grep -m1 -c '|IP|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then + if [ "${LAN_IP}" != "" ] && [ "${LAN_IP}" != "${IP}" ]; then + STR="perl -pi -e 's/\|IP\|:\|PORT_80\|;/\|IP\|:\|PORT_80\|;\n\tlisten\t\t$LAN_IP:\|PORT_80\|;/' ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + + STR="perl -pi -e 's/\|IP\|:\|PORT_443\| ssl\|SPACE_HTTP2\|;/\|IP\|:\|PORT_443\| ssl\|SPACE_HTTP2\|;\n\tlisten\t\t$LAN_IP:\|PORT_443\| ssl\|SPACE_HTTP2\|;/' ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + fi + + STR="perl -pi -e 's/\|IP\|/$IP/' ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + fi + fi + fi +} + +#tokenize ports +tokenize_ports() { + getWebserverPorts + TOKENFILE_APACHE=${HTTPDCONF}/extra/httpd-vhosts.conf + + TOKENFILE_NGINX=${NGINXCONF}/nginx.conf + if [ -e ${TOKENFILE_NGINX} ]; then + if grep -q -m1 'nginx-vhosts\.conf' ${TOKENFILE_NGINX}; then + TOKENFILE_NGINX=${NGINXCONF}/nginx-vhosts.conf + fi + fi + TOKENFILE_NGINX_USERDIR=${NGINXCONF}/nginx-userdir.conf + + TOKENFILE_OPENLITESPEED=${LSWS_HOME}/conf/httpd-vhosts.conf + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ] && [ -s ${TOKENFILE_OPENLITESPEED} ]; then + if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_OPENLITESPEED}" + eval ${STR} + fi + if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_OPENLITESPEED}" + eval ${STR} + fi + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if [ -e ${TOKENFILE_APACHE} ]; then + if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_APACHE}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_APACHE}" + eval ${STR} + else + perl -pi -e "s/:${PORT_8080}\>/:${PORT_80}\>/" ${TOKENFILE_APACHE} + perl -pi -e "s/^Listen ${PORT_8080}$/Listen ${PORT_80}/" ${TOKENFILE_APACHE} + fi + if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_APACHE}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_APACHE}" + eval ${STR} + else + perl -pi -e "s/:${PORT_8081}\>/:${PORT_443}\>/" ${TOKENFILE_APACHE} + perl -pi -e "s/^Listen ${PORT_8081}$/Listen ${PORT_443}/" ${TOKENFILE_APACHE} + fi + + SSLFILE=${HTTPDCONF}/extra/httpd-ssl.conf + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${SSLFILE}" + eval ${STR} + perl -pi -e "s/:${PORT_8081}\>/:${PORT_443}\>/" ${SSLFILE} + perl -pi -e "s/^Listen ${PORT_8081}$/Listen ${PORT_443}/" ${SSLFILE} + + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${HTTPD_CONF}" + eval ${STR} + perl -pi -e "s/:${PORT_8080}\>/:${PORT_80}\>/" ${HTTPD_CONF} + perl -pi -e "s/^Listen ${PORT_8080}$/Listen ${PORT_80}/" ${HTTPD_CONF} + fi + fi + + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + SPACE_HTTP2= + initHTTP2var + if [ "$HTTP2" = "1" ]; then + SPACE_HTTP2=" http2" + fi + + STR="perl -pi -e \"s/\|SPACE_HTTP2\|/${SPACE_HTTP2}/g\" ${TOKENFILE_NGINX}" + eval ${STR} + fi + + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + if [ -e ${TOKENFILE_NGINX} ]; then + if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_NGINX}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_NGINX}" + eval ${STR} + fi + if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_NGINX}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_NGINX}" + eval ${STR} + fi + fi + if [ -e ${TOKENFILE_NGINX_USERDIR} ]; then + if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + fi + if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + fi + fi + fi + + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -e ${TOKENFILE_NGINX} ]; then + if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_NGINX}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_NGINX}" + eval ${STR} + fi + + if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_NGINX}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_NGINX}" + eval ${STR} + fi + + if [ "`grep -m1 -c '|PORT_8080|' ${TOKENFILE_NGINX}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_8080\|/${PORT_8080}/g\" ${TOKENFILE_NGINX}" + eval ${STR} + fi + + if [ "`grep -m1 -c '|PORT_8081|' ${TOKENFILE_NGINX}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_8081\|/${PORT_8081}/g\" ${TOKENFILE_NGINX}" + eval ${STR} + fi + fi + + if [ -e ${TOKENFILE_NGINX_USERDIR} ]; then + if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + fi + + if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + fi + + if [ "`grep -m1 -c '|PORT_8080|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_8080\|/${PORT_8080}/g\" ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + fi + + if [ "`grep -m1 -c '|PORT_8081|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_8081\|/${PORT_8081}/g\" ${TOKENFILE_NGINX_USERDIR}" + eval ${STR} + fi + fi + + if [ -e ${TOKENFILE_APACHE} ]; then + if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_APACHE}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_8080}/g\" ${TOKENFILE_APACHE}" + eval ${STR} + else + perl -pi -e "s/:${PORT_80}\>/:${PORT_8080}\>/" ${TOKENFILE_APACHE} + fi + + if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_APACHE}`" -gt "0" ]; then + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_8081}/g\" ${TOKENFILE_APACHE}" + eval ${STR} + else + perl -pi -e "s/:${PORT_443}\>/:${PORT_8081}\>/" ${TOKENFILE_APACHE} + fi + + if [ "`grep -m1 -c "^Listen ${PORT_80}$" ${HTTPD_CONF}`" -gt 0 ]; then + STR="perl -pi -e \"s/^Listen ${PORT_80}$/Listen ${PORT_8080}/\" ${HTTPD_CONF}" + eval ${STR} + else + perl -pi -e "s/:${PORT_80}\>/:${PORT_8080}\>/" ${HTTPD_CONF} + fi + + STR="perl -pi -e \"s/\|PORT_80\|/${PORT_8080}/g\" ${HTTPD_CONF}" + eval ${STR} + perl -pi -e "s/:${PORT_80}\>/:${PORT_8080}\>/" ${HTTPD_CONF} + perl -pi -e "s/^Listen ${PORT_80}$/Listen ${PORT_8080}/" ${HTTPD_CONF} + + SSLFILE=${HTTPDCONF}/extra/httpd-ssl.conf + STR="perl -pi -e \"s/\|PORT_443\|/${PORT_8081}/g\" ${SSLFILE}" + eval ${STR} + perl -pi -e "s/:${PORT_443}\>/:${PORT_8081}\>/" ${SSLFILE} + perl -pi -e "s/^Listen ${PORT_443}$/Listen ${PORT_8081}/" ${SSLFILE} + fi + fi +} + +doCURL() { + if [ "${CURL_OPT}" != "yes" ]; then + echo "You cannot install curl, because you do not have it set in options.conf file." + return + fi + + initHTTP2var + if [ ! -s /usr/include/nghttp2/nghttp2.h ] && [ ! -s /usr/local/include/nghttp2/nghttp2.h ]; then + echo "Cannot find nghttp2.h. Installing nghttp2."; + if [ ${OS} = "FreeBSD" ]; then + ${PKG_INSTALL} install -y libnghttp2 + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get -y install libnghttp2-dev + elif [ "${OS_CENTOS_VER}" = "7" ]; then + if [ -s /etc/yum.repos.d/epel.repo ]; then + yum -y install libnghttp2-devel --enablerepo=${EPEL_REPO_NAME} + else + yum -y install libnghttp2-devel + fi + else + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + yum -y install libnghttp2-devel --enablerepo=cloudlinux-PowerTools + elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then + yum -y install libnghttp2-devel --enablerepo=PowerTools + elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then + yum -y install libnghttp2-devel --enablerepo=ol8_codeready_builder + elif [ -e /etc/yum.repos.d/redhat.repo ]; then + yum -y install libnghttp2-devel --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms + else + yum -y install libnghttp2-devel --enablerepo=powertools + fi + fi + fi + + getFile curl-${CURL_VER}.tar.gz curl + quitIfLocked doCURL + + cd ${CWD} + FILE=${CWD}/curl-${CURL_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + chmod -R 755 curl-${CURL_VER} + cd curl-${CURL_VER} + echo "Configuring curl-${CURL_VER}..." + if [ "${HTTP2}" = "1" ] && [ "${OS_CENTOS_VER}" != "6" ]; then + echo "Enabling http2 support..."; + if ! grep -m1 -q "\-\-with-nghttp2" ${CWD}/${CURL_CONFIGURE}; then + perl -pi -e 's|\./configure|./configure --with-nghttp2|' ${CWD}/${CURL_CONFIGURE} + fi + fi + + ${CWD}/${CURL_CONFIGURE} + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure cURL.\n" + do_exit 1 + fi + echo "Done. Making curl-${CURL_VER}..." + while echo "Trying to make cURL..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing curl-${CURL_VER}..." + if [ -e /usr/local/lib/libcurl.la ]; then + rm -f /usr/local/lib/libcurl.la + fi + if [ -e /usr/local/lib/libcurl.a ]; then + rm -f /usr/local/lib/libcurl.a + fi + if [ -L /usr/local/lib/libcurl.so ]; then + LIBCURL_SO="`readlink /usr/local/lib/libcurl.so`" + rm -f /usr/local/lib/libcurl.so + rm -f "${LIBCURL_SO}" + fi + make install + ldconfig + echo "Done curl." + writeLog "curl ${CURL_VER} installed" + + removeLockfile + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doRemoveCURL() { + if [ "${CURL_OPT}" = "yes" ] || [ "${OS}" = "FreeBSD" ]; then + do_exit 1 "Cannot remove cURL, because it is enabled in options.conf file (or FreeBSD is using, which is using the same locaiton as CB)." + fi + + getFile nghttp2-${NGHTTP2_VER}.tar.gz nghttp2 + + quitIfLocked doRemoveCURL + + cd ${CWD} + FILE=${CWD}/curl-${CURL_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + chmod -R 755 curl-${CURL_VER} + cd curl-${CURL_VER} + echo "Configuring curl-${CURL_VER}..." + + ${CWD}/${CURL_CONFIGURE} + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure cURL.\n" + do_exit 1 + fi + + echo "Done. Removing curl-${CURL_VER}..." + make uninstall + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} + + writeLog "cURL removed" +} + +#################################################### + +doFreeType() { + getFile freetype-${FREETYPE_VER}.tar.gz freetype + quitIfLocked doFreeType + + if [ "${OS}" = "FreeBSD" ] && [ ! -e /usr/local/bin/gmake ]; then + cd /usr/ports/devel/gmake + make + make install + make clean + if [ ! -e /usr/local/bin/gmake ]; then + ${PKG_INSTALL} gmake + fi + rehash + fi + cd ${CWD} + FILE=${CWD}/freetype-${FREETYPE_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd freetype-${FREETYPE_VER} + DISABLE_HARFBUZZ= + if [ -e /usr/include/harfbuzz/hb-version.h ]; then + if grep -q -m1 'HB_VERSION_STRING "0\.9\.' /usr/include/harfbuzz/hb-version.h; then + DISABLE_HARFBUZZ="--with-harfbuzz=no" + fi + fi + echo "Configuring freetype-${FREETYPE_VER}..." + ./configure ${DISABLE_HARFBUZZ} --enable-freetype-config + echo "Done. Making freetype-${FREETYPE_VER}..." + while echo "Trying to make FreeType..."; do + if [ "${OS}" = "FreeBSD" ]; then + /usr/local/bin/gmake + else + make + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing freetype-${FREETYPE_VER}..." + if [ "${OS}" = "FreeBSD" ]; then + /usr/local/bin/gmake install + else + make install + fi + + #fix for freetype.h path change: https://forum.directadmin.com/showthread.php?t=47795 + if [ -e /usr/local/include/freetype2/freetype.h ] && [ ! -e /usr/local/include/freetype2/freetype/freetype.h ]; then + echo "Linking freetype/freetype.h to freetype.h" + mkdir -p /usr/local/include/freetype2/freetype + ln -s ../freetype.h /usr/local/include/freetype2/freetype/freetype.h + fi + + #FreeType 2.5.2+ doesn't cleanup it's old ft2build.h. + if [ "`version_cmp ${FREETYPE_VER} 2.5.1 'freetype ver check'`" -ge 0 ]; then + FT_BUILD_OLD=/usr/local/include/ft2build.h + FT_BUILD_NEW=/usr/local/include/freetype2/ft2build.h + if [ -e ${FT_BUILD_OLD} ] && [ -e ${FT_BUILD_NEW} ]; then + echo "Removing old header: ${FT_BUILD_OLD}" + rm -f ${FT_BUILD_OLD} + fi + fi + + echo "Done FreeType." + writeLog "FreeType ${FREETYPE_VER} installed" + + removeLockfile + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### +ICU_DOWNGRADED=0 +downgradeICUver() { + if [ "${ICU_VER}" != "58_2" ]; then + DOWNGRADE_ICU=false + if [ "${OS}" = "FreeBSD" ]; then + MAINVER=`echo ${OS_VER} | cut -d. -f1` + if [ ${MAINVER} -le 10 ]; then + DOWNGRADE_ICU=true + fi + elif [ -e ${DEBIAN_VERSION} ]; then + if grep -m1 -q '^7' ${DEBIAN_VERSION}; then + DOWNGRADE_ICU=true + fi + else + if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ]; then + DOWNGRADE_ICU=true + fi + fi + if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP1_RELEASE_OPT}" = "5.4" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.4" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.4" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.4" ]; then + DOWNGRADE_ICU=true + fi + if ${DOWNGRADE_ICU}; then + if [ -s ${VERSIONS_FILE_CUSTOM} ]; then + if ! grep -m1 -q '^icu4c:' ${VERSIONS_FILE_CUSTOM}; then + ICU_VER="58_2" + ICU_DOWNGRADED=1 + fi + else + ICU_VER="58_2" + ICU_DOWNGRADED=1 + fi + fi + fi +} + +doICU() { + # Downgrade ICU to 58_2 on OS not supporting C++11 std + downgradeICUver + + if [ "${OS_CENTOS_VER}" = "6" ]; then + installDevtoolset + fi + + if [ "${ICU_DOWNGRADED}" = "1" ]; then + #to prevent md5 lookup on wrong version. + getFile icu4c-${ICU_VER}-src.tgz + else + getFile icu4c-${ICU_VER}-src.tgz icu4c + fi + quitIfLocked doICU + + # Fix icu digitlst.cpp:67:13: fatal error: xlocale.h: No such file or directory + if [ ! -e /usr/include/xlocale.h ] && [ -e /usr/include/locale.h ]; then + ln -s /usr/include/locale.h /usr/include/xlocale.h + fi + cd ${CWD} + FILE=${CWD}/icu4c-${ICU_VER}-src.tgz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd icu/source + mkdir -p /usr/local/icu + echo "Configuring icu-${ICU_VER}..." + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "./configure --prefix=/usr/local/icu --enable-rpath" + else + ./configure --prefix=/usr/local/icu --enable-rpath + fi + + echo "Done. Making icu-${ICU_VER}..." + while echo "Trying to make icu..."; do + if [ "$OS" = "FreeBSD" ]; then + /usr/local/bin/gmake -j ${CPU_CORES} + elif [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "make -j ${CPU_CORES}" + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing icu4c-${ICU_VER}..." + + if [ ! -d test/testdata ]; then + mkdir -p ./test/testdata + fi + if [ -e ./data/rules.mk ] && [ ! -e ./test/testdata/rules.mk ]; then + cp -pf ./data/rules.mk ./test/testdata/rules.mk + fi + + if [ "$OS" = "FreeBSD" ]; then + /usr/local/bin/gmake install + elif [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "make install" + else + make install + fi + + ln -sf /usr/local/icu/bin/icu-config /usr/local/bin/icu-config + + echo "Done ICU." + writeLog "ICU ${ICU_VER} installed" + + removeLockfile + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doImageMagick() { + if [ "${IMAGICK_OPT}" != "yes" ]; then + do_exit 1 "You cannot install ImageMagick, because you do not have imagick=yes set in php_extensions.conf file." + fi + + getFile imagick/ImageMagick-${IMAGEMAGICK_VER}.tar.gz imagemagick ImageMagick-${IMAGEMAGICK_VER}.tar.gz + removeLockfile + quitIfLocked doImageMagick + + cd ${CWD} + FILE=${CWD}/ImageMagick-${IMAGEMAGICK_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd ImageMagick-${IMAGEMAGICK_VER} + echo "Configuring ImageMagick-${IMAGEMAGICK_VER}..." + + ${CWD}/${IMAGEMAGICK_CONFIGURE} + + echo "Done. Making ImageMagick-${IMAGEMAGICK_VER}..." + while echo "Trying to make imagemagick..."; do + if [ "$OS" = "FreeBSD" ]; then + gmake -j ${CPU_CORES} + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing ImageMagick-${IMAGEMAGICK_VER}..." + if [ "$OS" = "FreeBSD" ]; then + gmake install + else + make install + fi + echo "Done ImageMagick." + writeLog "ImageMagick ${IMAGEMAGICK_VER} installed" + + removeLockfile + cd ${CWD} + if [ "${PHP_IMAGICK_OPT}" = "yes" ]; then + doIMagick + fi + /sbin/ldconfig + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doRedis() { + if [ "${REDIS_OPT}" != "yes" ]; then + do_exit 1 "You cannot install Redis, because you do not have redis=yes set in options.conf file." + fi + + if [ "${OS_CENTOS_VER}" = "6" ]; then + do_exit 1 "You cannot install Redis, it is not supported on EOL systems." + fi + + #Add redis user/group if it doesn't exist + addUserGroup redis redis + + getFile redis/redis-${REDIS_VER}.tar.gz redis redis-${REDIS_VER}.tar.gz + removeLockfile + quitIfLocked doRedis + + cd ${CWD} + FILE=${CWD}/redis-${REDIS_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd redis-${REDIS_VER} + + echo "Making redis-${REDIS_VER}..." + while echo "Trying to make redis..."; do + if [ "$OS" = "FreeBSD" ]; then + gmake -j ${CPU_CORES} + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing redis-${REDIS_VER}..." + if [ "$OS" = "FreeBSD" ]; then + gmake install + else + make install + fi + echo "Done redis." + writeLog "Redis ${REDIS_VER} installed" + + removeLockfile + cd ${CWD} + /sbin/ldconfig + + cd ${CWD} + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Enabling redis in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/redis@.service ]; then + cp -f ${CB_CUST_SYSTEMD}/redis@.service ${SYSTEMDDIR}/redis@.service + else + cp -f ${CB_SYSTEMD}/redis@.service ${SYSTEMDDIR}/redis@.service + fi + chmod 644 ${SYSTEMDDIR}/redis@.service + systemctl daemon-reload + + if [ "${SPAMD_OPT}" = "rspamd" ]; then + echo "Enabling redis-rspamd in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/redis-rspamd.service ]; then + cp -f ${CB_CUST_SYSTEMD}/redis-rspamd.service ${SYSTEMDDIR}/redis-rspamd.service + else + cp -f ${CB_SYSTEMD}/redis-rspamd.service ${SYSTEMDDIR}/redis-rspamd.service + fi + chmod 644 ${SYSTEMDDIR}/redis-rspamd.service + systemctl daemon-reload + systemctl enable --now redis-rspamd + echo 'servers = "/var/lib/rspamd/.redis/redis.sock";' > /etc/rspamd/local.d/redis.conf + systemctl reload rspamd + fi + fi + + if [ ! -e /etc/logrotate.d/redis ] && [ "${OS}" != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/redis.logrotate -o /etc/logrotate.d/redis + fi + + if [ "${OS}" != "FreBSD" ]; then + if [ `sysctl vm.overcommit_memory | cut -d= -f2 | awk '{print $1}'` -eq 0 ]; then + if [ -d /etc/sysctl.d ]; then + if [ -e /etc/sysctl.d/99-directadmin.conf ]; then + if grep -m1 -q '^overcommit_memory' /etc/sysctl.d/99-directadmin.conf; then + echo 'vm.overcommit_memory=1' >> /etc/sysctl.d/99-directadmin.conf + sysctl -p /etc/sysctl.d/99-directadmin.conf + fi + else + echo 'vm.overcommit_memory=1' > /etc/sysctl.d/99-directadmin.conf + sysctl -p /etc/sysctl.d/99-directadmin.conf + fi + fi + fi + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +installXMLRPC() { + if [ -z $1 ] || [ "$1" = "no" ] || [ ! -x /usr/local/php$1/bin/phpize ]; then + return + fi + getFile php_extensions/xmlrpc/xmlrpc-${XMLRPC_VER}.tgz xmlrpc xmlrpc-${XMLRPC_VER}.tgz + echo "Installing xmlrpc-${XMLRPC_VER} PHP extension for PHP $1..." + + FILE=${CWD}/xmlrpc-${XMLRPC_VER}.tgz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + #make clean didn't clean everything up + if [ -d xmlrpc-${XMLRPC_VER} ]; then + rm -rf xmlrpc-${XMLRPC_VER} + fi + + tar xzf ${FILE} + cd xmlrpc-${XMLRPC_VER} + + /usr/local/php$1/bin/phpize + if [ "${OS}" = "FreeBSD" ]; then + CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --with-php-config=/usr/local/php$1/bin/php-config + else + ./configure --with-php-config=/usr/local/php$1/bin/php-config + fi + while echo "Trying to make xmlrpc-${XMLRPC_VER} PHP extension..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + make install + + make clean + cd ${CWD} +} + +#################################################### + +installIMagick() { + if [ -z $1 ] || [ "$1" = "no" ] || [ ! -x /usr/local/php$1/bin/phpize ]; then + return + fi + getFile imagick/imagick-${IMAGICK_VER}.tgz imagick imagick-${IMAGICK_VER}.tgz + echo "Installing imagick-${IMAGICK_VER} PHP extension for PHP $1..." + + FILE=${CWD}/imagick-${IMAGICK_VER}.tgz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + #make clean didn't clean everything up + if [ -d imagick-${IMAGICK_VER} ]; then + rm -rf imagick-${IMAGICK_VER} + fi + + tar xzf ${FILE} + cd imagick-${IMAGICK_VER} + + /usr/local/php$1/bin/phpize + if [ "${OS}" = "FreeBSD" ]; then + CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --with-php-config=/usr/local/php$1/bin/php-config + else + ./configure --with-php-config=/usr/local/php$1/bin/php-config + fi + while echo "Trying to make imagick-${IMAGICK_VER} PHP extension..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + make install + + make clean + cd ${CWD} +} + +doIMagick() { + cd ${CWD} + if [ "${IMAGICK_OPT}" = "no" ]; then + do_exit 1 "Cannot build imagick, because you do not have it set in php_extensions.conf file." + fi + if [ ! -e /usr/local/bin/magick ]; then + doImageMagick + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + IMAGICK_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + if [ "${FOR_ALL}" = "no" ]; then + installIMagick ${IMAGICK_INT_SHORTRELEASE} $2 + else + installIMagick ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + installIMagick ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT} + installIMagick ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT} + installIMagick ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT} + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} imagick + else + doExtensions_build ${1} ${2} imagick + fi + echo "imagick ${IMAGICK_VER} PHP extension has been installed successfully." + writeLog "imagick ${IMAGICK_VER} installed" + + cd ${CWD} +} + +installGeneralSrcExt() { + if [ -z $3 ] || [ "$3" = "no" ]; then + return + fi + PHP_EXT_NAME=$1 + echo "Installing ${PHP_EXT_NAME} PHP extension for PHP $3..." + + PHP_EXT_SHORTRELEASE=`echo $3 | cut -d'.' -f1,2 | tr -d '.'` + + getFile php-${3}.tar.gz php${PHP_EXT_SHORTRELEASE} + FILE=${CWD}/php-${3}.tar.gz + + if [ ! -d "php-${3}/ext/${PHP_EXT_NAME}" ]; then + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + if [ ! -d "php-${3}/ext/${PHP_EXT_NAME}" ]; then + echo "Unable to found php-${3}/ext/${PHP_EXT_NAME}, skipping..." + return + fi + fi + cd "php-${3}/ext/${PHP_EXT_NAME}" + if [ $? -ne 0 ]; then + do_exit 1 "Failed to change directory to: php-${3}. Exiting..." + fi + + /usr/local/php${PHP_EXT_SHORTRELEASE}/bin/phpize + if [ "${OS}" = "FreeBSD" ]; then + CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --with-php-config=/usr/local/php${PHP_EXT_SHORTRELEASE}/bin/php-config + else + ./configure --with-php-config=/usr/local/php${PHP_EXT_SHORTRELEASE}/bin/php-config ${4} + fi + while echo "Trying to make ${PHP_EXT_NAME} PHP extension..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + make install + + make clean + cd ${CWD} +} + +installGeneralExt() { + if [ -z $3 ] || [ "$3" = "no" ]; then + return + fi + PHP_EXT_NAME=$1 + PHP_EXT_VER=$2 + + if [ "${PHP_EXT_NAME}" = "snuffleupagus" ] || [ "${PHP_EXT_NAME}" = "igbinary" ]; then + FILE_EXT="tar.gz" + else + FILE_EXT="tgz" + fi + if [ "${PHP_EXT_NAME}" = "psr" ] || [ "${PHP_EXT_NAME}" = "phalcon" ]; then + if [ "${3}" = "53" ] || [ "${3}" = "54" ] || [ "${3}" = "55" ] || [ "${3}" = "56" ] || [ "${3}" = "70" ] || [ "${3}" = "71" ]; then + return + fi + elif [ "${PHP_EXT_NAME}" = "snuffleupagus" ] || [ "${PHP_EXT_NAME}" = "igbinary" ]; then + if [ "${3}" = "53" ] || [ "${3}" = "54" ] || [ "${3}" = "55" ] || [ "${3}" = "56" ]; then + return + fi + fi + echo "Installing ${PHP_EXT_NAME}-${PHP_EXT_VER} PHP extension for PHP $3..." + if [ "${PHP_EXT_NAME}" = "redis" ]; then + getFile php_extensions/${PHP_EXT_NAME}/${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT} phpredis ${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT} + else + getFile php_extensions/${PHP_EXT_NAME}/${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT} ${PHP_EXT_NAME} ${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT} + fi + + FILE=${CWD}/${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT} + checkFile ${FILE} + echo "Extracting ${FILE}..." + + #make clean didn't clean everything up + if [ -d ${PHP_EXT_NAME}-${PHP_EXT_VER} ]; then + rm -rf ${PHP_EXT_NAME}-${PHP_EXT_VER} + fi + + tar xzf ${FILE} + if [ "${PHP_EXT_NAME}" = "snuffleupagus" ]; then + cd ${PHP_EXT_NAME}-${PHP_EXT_VER}/src + else + cd ${PHP_EXT_NAME}-${PHP_EXT_VER} + fi + + /usr/local/php$3/bin/phpize + APPEND_CONFIG_FLAG="" + if [ "${PHP_EXT_NAME}" = "redis" ]; then + if /usr/local/php$3/bin/php$3 -i | grep -m1 'igbinary version' | tail -n1 | grep -m1 -q -o '[0-9.]*' 2>/dev/null; then + APPEND_CONFIG_FLAG=" --enable-redis-igbinary" + fi + fi + if [ "${OS}" = "FreeBSD" ]; then + CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --with-php-config=/usr/local/php$3/bin/php-config${APPEND_CONFIG_FLAG} + else + ./configure --with-php-config=/usr/local/php$3/bin/php-config${APPEND_CONFIG_FLAG} + fi + while echo "Trying to make ${PHP_EXT_NAME}-${PHP_EXT_VER} PHP extension..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + make install + + make clean + cd ${CWD} +} + +doPsr() { + cd ${CWD} + INSTALL_EXT_NAME=psr + INSTALL_EXT_VER=${PSR_VER} + if [ "${PHP_PHALCON_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + SUPPORTED_VERSIONS="72 73 74" + if [ "${FOR_ALL}" = "no" ]; then + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2 + fi + else + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT} + fi + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build "${1}" "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed" + + cd ${CWD} +} + +doPhalcon() { + cd ${CWD} + if [ "${PHP_PHALCON_OPT}" = "yes" ]; then + doPsr $1 $2 $3 + fi + INSTALL_EXT_NAME=phalcon + INSTALL_EXT_VER=${PHALCON_VER} + if [ "${PHP_PHALCON_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + SUPPORTED_VERSIONS="72 73 74" + if [ "${FOR_ALL}" = "no" ]; then + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2 + fi + else + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT} + fi + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed" + + cd ${CWD} +} + +doPHPRedis() { + cd ${CWD} + INSTALL_EXT_NAME=redis + INSTALL_EXT_VER=${PHPREDIS_VER} + if [ "${PHP_REDIS_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + UNSUPPORTED_VERSIONS="53 54 55 56" + if [ "${FOR_ALL}" = "no" ]; then + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2 + fi + else + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT} + fi + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed" + + cd ${CWD} +} + +doIgbinary() { + cd ${CWD} + INSTALL_EXT_NAME=igbinary + INSTALL_EXT_VER=${IGBINARY_VER} + if [ "${PHP_IGBINARY_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + UNSUPPORTED_VERSIONS="53 54 55 56" + if [ "${FOR_ALL}" = "no" ]; then + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2 + fi + else + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT} + fi + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed" + + cd ${CWD} +} + +doSnuffleupagus() { + cd ${CWD} + INSTALL_EXT_NAME=snuffleupagus + INSTALL_EXT_VER=${SNUFFLEUPAGUS_VER} + if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + + UNSUPPORTED_VERSIONS="53 54 55 56" + if [ "${FOR_ALL}" = "no" ]; then + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2 + fi + else + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT} + fi + if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then + installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT} + fi + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed" + + cd ${CWD} +} + +doImap() { + cd ${CWD} + getFile all/imap/imap-${IMAP_VER}.tar.gz imap imap-${IMAP_VER}.tar.gz + if [ ! -s imap-${IMAP_VER}.tar.gz ]; then + echo "Cannot find imap-${IMAP_VER}.tar.gz for extraction"; + exit 1 + fi + tar xvzf imap-${IMAP_VER}.tar.gz + cd imap-${IMAP_VER} + + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage pam-devel` -ne 0 ]; then + yum -y install pam-devel + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libpam0g-dev` -ne 0 ]; then + apt-get -y install libpam0g-dev + ldconfig + fi + fi + fi + + UW_PATCH=1006_openssl1.1_autoverify.patch + curl ${CURL_CONNECT_OPTIONS} -o ${UW_PATCH} ${DOWNLOADSERVER_OPT}/services/custombuild/patches/${UW_PATCH} + if [ -s ${UW_PATCH} ]; then + patch -p1 < ${UW_PATCH} + fi + + make lr5 EXTRACFLAGS=-fPIC + mkdir -p /usr/local/uw-imap/lib + mkdir -p /usr/local/uw-imap/include + cp -f c-client/*.c /usr/local/uw-imap/lib/ + cp -f c-client/*.h /usr/local/uw-imap/include/ + cp -f c-client/c-client.a /usr/local/uw-imap/lib/libc-client.a + echo "IMAP ${IMAP_VER} has been installed successfully." + writeLog "IMAP ${IMAP_VER} installed" + cd ${CWD} +} + +doPHPGmp() { + cd ${CWD} + + INSTALL_EXT_NAME=gmp + if [ "${PHP_GMP_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage gmp-devel` -ne 0 ]; then + yum -y install gmp-devel + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libgmp-dev` -ne 0 ]; then + apt-get -y install libgmp-dev + ldconfig + fi + fi + elif [ "${OS}" = "FreeBSD" ] && [ ! -e /usr/local/include/gmp.h ]; then + pkg install -y gmp + ldconfig + fi + if [ -e /usr/include/x86_64-linux-gnu/gmp.h ] && [ ! -e /usr/include/gmp.h ]; then + ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + EXTRA_CONFIGURATION_FLAGS="" + if [ "${FOR_ALL}" = "no" ]; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} installed" + + cd ${CWD} +} + +doPHPReadline() { + cd ${CWD} + + INSTALL_EXT_NAME=readline + if [ "${PHP_READLINE_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + RPM_TO_INSTALL="" + if [ `checkRPMPackage readline-devel` -ne 0 ]; then + RPM_TO_INSTALL="readline-devel " + fi + if [ `checkRPMPackage libedit-devel` -ne 0 ]; then + RPM_TO_INSTALL="${RPM_TO_INSTALL}libedit-devel" + fi + if [ ! -z "${RPM_TO_INSTALL}" ]; then + if [ "${OS_CENTOS_VER}" = "8" ]; then + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + yum -y install ${RPM_TO_INSTALL} --enablerepo=cloudlinux-PowerTools + elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then + yum -y install ${RPM_TO_INSTALL} --enablerepo=PowerTools + elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then + yum -y install ${RPM_TO_INSTALL} --enablerepo=ol8_codeready_builder + elif [ -e /etc/yum.repos.d/redhat.repo ]; then + yum -y install ${RPM_TO_INSTALL} --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms + else + yum -y install ${RPM_TO_INSTALL} --enablerepo=powertools + fi + else + yum -y install ${RPM_TO_INSTALL} + fi + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + DPKG_TO_INSTALL="" + if [ `checkDebianPackage libreadline-dev` -ne 0 ]; then + DPKG_TO_INSTALL="libreadline-dev " + fi + if [ `checkDebianPackage libedit-dev` -ne 0 ]; then + DPKG_TO_INSTALL="${DPKG_TO_INSTALL}libedit-dev" + fi + if [ ! -z "${DPKG_TO_INSTALL}" ]; then + apt-get -y install ${DPKG_TO_INSTALL} + ldconfig + fi + fi + elif [ "${OS}" = "FreeBSD" ] && [ ! -e /usr/include/readline/readline.h ] && [ ! -e /usr/local/include/readline/readline.h ]; then + pkg install -y readline + if [ ! -e /usr/include/editline/readline.h ] && [ ! -e /usr/local/include/editline/readline.h ]; then + pkg install -y libedit + fi + ldconfig + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + EXTRA_CONFIGURATION_FLAGS="" + if [ "${FOR_ALL}" = "no" ]; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} installed" + + cd ${CWD} +} + +doPHPLDAP() { + cd ${CWD} + + INSTALL_EXT_NAME=ldap + if [ "${PHP_LDAP_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage openldap-devel` -ne 0 ]; then + yum -y install openldap-devel + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libldap2-dev` -ne 0 ]; then + apt-get -y install libldap2-dev + ldconfig + fi + fi + elif [ "${OS}" = "FreeBSD" ] && [ ! -e /usr/local/include/ldap.h ]; then + pkg install -y openldap-client + ldconfig + fi + if [ -e /usr/include/x86_64-linux-gnu/ldap.h ] && [ ! -e /usr/include/ldap.h ]; then + ln -s /usr/include/x86_64-linux-gnu/ldap.h /usr/include/ldap.h + fi + if [ -e /usr/lib64/libldap.so ] && [ ! -e /usr/lib/libldap.so ]; then + ln -s /usr/lib64/libldap.so /usr/lib/libldap.so + fi + if [ -e /usr/lib64/libldap_r.so ] && [ ! -e /usr/lib/libldap_r.so ]; then + ln -s /usr/lib64/libldap_r.so /usr/lib/libldap_r.so + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + EXTRA_CONFIGURATION_FLAGS="" + if [ "${FOR_ALL}" = "no" ]; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} installed" + + cd ${CWD} +} + +doPHPBz2() { + cd ${CWD} + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage bzip2-devel` -ne 0 ]; then + yum -y install bzip2-devel + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libbz2-dev` -ne 0 ]; then + apt-get -y install libbz2-dev + ldconfig + fi + fi + fi + INSTALL_EXT_NAME=bz2 + if [ "${PHP_BZ2_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + EXTRA_CONFIGURATION_FLAGS="--with-imap=/usr/local/uw-imap --with-imap-ssl" + if [ "${FOR_ALL}" = "no" ]; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} installed" + + cd ${CWD} +} + +doPHPXmlrpc() { + cd ${CWD} + INSTALL_EXT_NAME=xmlrpc + if [ "${PHP_XMLRPC_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + EXTRA_CONFIGURATION_FLAGS="" + SUPPORTED_VERSIONS="53 54 55 56 70 71 72 73 74" + if [ "${FOR_ALL}" = "no" ]; then + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installXMLRPC ${GENERAL_EXT_INT_SHORTRELEASE} $2 + fi + else + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installXMLRPC ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installXMLRPC ${PHP2_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installXMLRPC ${PHP3_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installXMLRPC ${PHP4_SHORTRELEASE} ${PHP1_MODE_OPT} + fi + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} installed" + + cd ${CWD} +} + +doPHPImap() { + cd ${CWD} + if [ ! -s /usr/local/uw-imap/lib/libc-client.a ]; then + doImap + fi + INSTALL_EXT_NAME=imap + if [ "${PHP_IMAP_OPT}" = "no" ]; then + do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file." + fi + FOR_ALL="no" + if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then + FOR_ALL="yes" + fi + + if [ "${FOR_ALL}" = "no" ]; then + GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`" + GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER + GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR}) + fi + + SKIP_RESTART=1 + if [ "$3" != "1" ]; then + SKIP_RESTART=0 + fi + EXTRA_CONFIGURATION_FLAGS="--with-imap=/usr/local/uw-imap --with-imap-ssl" + if [ "${FOR_ALL}" = "no" ]; then + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}" + else + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}" + fi + + if [ "${FOR_ALL}" = "yes" ]; then + doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME} + else + doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME} + fi + echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully." + writeLog "${INSTALL_EXT_NAME} installed" + + cd ${CWD} +} + +doExtensionsSetup() { + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + #Skip executing CL commands like "cagefsctl --force update" on every component update + EXEC_CL_COMMANDS_ONCE=true + fi + #IONCUBE IMAP OPCACHE HTSCANNER IMAGICK PHALCON PSR SUHOSIN ZEND + for setting in ${PHP_EXT_SETTINGS}; do { + SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"` + SETTING_OPTION_VAR=PHP_${setting}_OPT + if [ "$(eval_var ${SETTING_OPTION_VAR})" = "yes" ]; then + if [ "${setting}" = "IMAP" ]; then + doPHPImap + elif [ "${setting}" = "BZ2" ]; then + doPHPBz2 + elif [ "${setting}" = "XMLRPC" ]; then + doPHPXmlrpc + elif [ "${setting}" = "GMP" ]; then + doPHPGmp + elif [ "${setting}" = "LDAP" ]; then + doPHPLDAP + elif [ "${setting}" = "PHALCON" ]; then + doPhalcon + elif [ "${setting}" = "IGBINARY" ]; then + doIgbinary + elif [ "${setting}" = "IMAGICK" ]; then + doIMagick + elif [ "${setting}" = "IONCUBE" ]; then + doIoncube + elif [ "${setting}" = "SNUFFLEUPAGUS" ]; then + doSnuffleupagus + elif [ "${setting}" = "REDIS" ]; then + doPHPRedis + elif [ "${setting}" = "OPCACHE" ]; then + doOpcache + elif [ "${setting}" = "ZEND" ]; then + doZend + fi + fi + } + done + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + cagefsctl_update + fi +} + +#################################################### + +doLibxslt() { + getFile libxslt-${LIBXSLT_VER}.tar.gz libxslt + quitIfLocked doLibxslt + + cd ${CWD} + FILE=${CWD}/libxslt-${LIBXSLT_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd libxslt-${LIBXSLT_VER} + echo "Configuring libxslt-${LIBXSLT_VER}..." + ${CWD}/${LIBXSLT_CONFIGURE} + + echo "Done. Making libxslt-${LIBXSLT_VER}..." + while echo "Trying to make libxslt..."; do + if [ "${OS}" = "FreeBSD" ]; then + gmake -j ${CPU_CORES} + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing libxslt-${LIBXSLT_VER}..." + if [ "${OS}" = "FreeBSD" ]; then + gmake install + else + make install + fi + echo "Done libxslt." + writeLog "libxslt ${LIBXSLT_VER} installed" + + removeLockfile + cd ${CWD} + + /sbin/ldconfig + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doZlib() { + quitIfLocked doZlib + + cd ${CWD} + getFile zlib-${ZLIB_VER}.tar.gz zlib-current + tar xzf zlib-${ZLIB_VER}.tar.gz --no-same-owner + cd zlib-${ZLIB_VER} + + ./configure --prefix=/usr/local/lib_da + + while echo "Trying to make libz..."; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + make install + + writeLog "zlib ${ZLIB_VER} installed" + + removeLockfile + + cd ${CWD} + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doLibxml2() { + getFile libxml2-${LIBXML2_VER}.tar.gz libxml2-current + quitIfLocked doLibxml2 + + cd ${CWD} + FILE=${CWD}/libxml2-${LIBXML2_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd libxml2-${LIBXML2_VER} + echo "Configuring libxml2-${LIBXML2_VER}..." + + #fix for this bug on FreeBSD 6: + #https://forums.freebsd.org/showthread.php?t=20273 + if [ "${OS}" = "FreeBSD" ] && [ "${MAINVER}" = "6" ]; then + echo "Patching configure to address this bug:" + echo "https://forums.freebsd.org/showthread.php?t=20273" + + perl -pi -e 's/WIN32_EXTRA_PYTHON_LIBADD=\"/#WIN32_EXTRA_PYTHON_LIBADD=\"/' configure + fi + + #for old systems that still have /usr/local/lib/libz.so. + #they need to compile against it, as it will be found first at binary runtime. + if [ -s /usr/local/lib/libz.so ]; then + perl -pi -e 's#with-zlib=/usr$#with-zlib=/usr/local#' ${CWD}/${LIBXML2_CONFIGURE} + fi + + ${CWD}/${LIBXML2_CONFIGURE} + + echo "Done. Making libxml2-${LIBXML2_VER}..." + while echo "Trying to make libxml2..."; do + #make -j ${CPU_CORES} + if [ "${OS}" = "FreeBSD" ]; then + gmake + else + make + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing libxml2-${LIBXML2_VER}..." + if [ "${OS}" = "FreeBSD" ]; then + gmake install + else + make install + fi + echo "Done libxml2. It is recommended to reinstall libxslt after update of libxml2." + writeLog "libxml2 ${LIBXML2_VER} installed" + + removeLockfile + cd ${CWD} + + /sbin/ldconfig + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doComposer() { + cd ${WORKDIR} + getFile composer/${COMPOSER_VER}/composer.phar composer composer.phar.${COMPOSER_VER} + if [ -s ${WORKDIR}/composer.phar.${COMPOSER_VER} ]; then + mv -f ${WORKDIR}/composer.phar.${COMPOSER_VER} /usr/local/bin/composer + chmod +x /usr/local/bin/composer + else + rm -f ${WORKDIR}/composer.phar.${COMPOSER_VER} + fi + + if [ -d /etc/cagefs/conf.d ] && [ ! -s /etc/cagefs/conf.d/composer.cfg ]; then + echo '[composer]' > /etc/cagefs/conf.d/composer.cfg + echo 'comment=Composer' >> /etc/cagefs/conf.d/composer.cfg + echo 'paths=/usr/local/bin/composer' >> /etc/cagefs/conf.d/composer.cfg + fi + + echo "Composer ${COMPOSER_VER} Installed." + writeLog "composer ${COMPOSER_VER} installed" + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doMajordomo() { + cd ${WORKDIR} + + SOURCEPATH="${WORKDIR}/majordomo-1.94.5" + + mkdir -p "${SOURCEPATH}" + curl ${CURL_CONNECT_OPTIONS} -o ${WORKDIR}/majordomo-1.94.5-patched.tar.gz http://da-mirror.wpcloud.vn/services/all/majordomo-1.94.5-patched.tar.gz + + tar xzf majordomo-1.94.5-patched.tar.gz + if [ ! -e ${SOURCEPATH}/Makefile ]; then + do_exit 1 "The source path for majordomo does not exist. Make sure the correct path is set in majordomo.sh" + fi + + mkdir -p /etc/virtual/majordomo + + MDGID=`id -g daemon` + + if [ -e /etc/debian_version ]; then + /usr/sbin/groupadd nobody 2>/dev/null + /usr/sbin/useradd -d /etc/virtual/majordomo -g $MDGID -s /bin/false majordomo 2> /dev/null + elif [ "$OS" = "FreeBSD" ]; then + /usr/sbin/pw useradd majordomo -b /etc/virtual/majordomo -g daemon -s /sbin/nologin 2> /dev/null + else + /usr/sbin/useradd -d /etc/virtual/majordomo -g $MDGID majordomo -s /bin/false -n -r 2> /dev/null + fi + + addToAccess majordomo + addToAccess nobody + MDUID=`id -u majordomo` + + perl -pi -e "s/PERL = .*/PERL = \/usr\/bin\/perl/" ${SOURCEPATH}/Makefile + perl -pi -e "s/W_HOME = .*/W_HOME = \/etc\/virtual\/majordomo/" ${SOURCEPATH}/Makefile + + #Perl and Bash weren't getting along. MDUID wasn't showing up so I did it this way. + perl -pi -e "s/W_USER = .*/W_USER = ${MDUID}/" ${SOURCEPATH}/Makefile + perl -pi -e "s/W_GROUP = .*/W_GROUP = ${MDGID}/" ${SOURCEPATH}/Makefile + perl -pi -e "s/TMPDIR = .*/TMPDIR = \/tmp/" ${SOURCEPATH}/Makefile + + #fix REALLY-TO value in digests file + perl -pi -e "s/\$ARGV\[0\];/\$ARGV\[0\].\${whereami};/" ${SOURCEPATH}/digest + perl -pi -e "s#/usr/test/majordomo#/etc/virtual/majordomo#" ${SOURCEPATH}/sample.cf + + cd "${SOURCEPATH}" + + make wrapper + make install + make install-wrapper + + perl -pi -e 's#/usr/test/majordomo#/etc/virtual/majordomo#' /etc/virtual/majordomo/majordomo.cf + + PATCH1=majordomo.patch + PATCH1_PATH=/etc/virtual/majordomo/${PATCH1} + if [ ! -s "${PATCH1_PATH}" ]; then + curl ${CURL_CONNECT_OPTIONS} -o ${PATCH1_PATH} ${SERVER}/${PATCH1} + fi + + if [ -s "${PATCH1_PATH}" ]; then + cd /etc/virtual/majordomo + patch -fp0 < majordomo.patch + else + echo "Cannot find ${PATCH1_PATH} to patch majordomo."; + fi + + #just to put up back where we were.. likely not needed. + cd ${WORKDIR} + rm -f "${WORKDIR}/majordomo-1.94.5-patched.tar.gz" + rm -rf "${SOURCEPATH}" + + chmod 750 /etc/virtual/majordomo +} + +#################################################### + +doSysbk() { + echo "Installing sysbk..." + cd ${WORKDIR} + + curl ${CURL_CONNECT_OPTIONS} -o ${WORKDIR}/sysbk.tar.gz http://da-mirror.wpcloud.vn/services/sysbk.tar.gz + + tar xzf sysbk.tar.gz -C /usr/local + + #swap out linux files for freebsd file: + if [ "$OS" = "FreeBSD" ]; then + FILES=/usr/local/sysbk/mod/custom.files + perl -pi -e 's#/etc/shadow#/etc/master.passwd#' $FILES + + DIRS=/usr/local/sysbk/mod/custom.dirs + perl -pi -e 's#/var/spool/mail#/var/mail#' $DIRS + perl -pi -e 's#/var/spool/cron#/var/cron#' $DIRS + fi + KEY=/root/.ssh/id_dsa + if [ ! -e $KEY ]; then + /usr/bin/ssh-keygen -t rsa -b 2048 -N '' -q -f $KEY + fi + + cd ${WORKDIR} + rm -f "${WORKDIR}/sysbk.tar.gz" +} + +#################################################### + +doCSF() { + if [ "${CSF_OPT}" != "yes" ]; then + do_exit 1 "You cannot install CSF, because you do not have it set in options.conf file." + fi + + if [ -e /etc/debian_version ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libwww-perl` -ne 0 ]; then + apt-get -y install libwww-perl + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage perl-libwww-perl` -ne 0 ]; then + yum -y install perl-libwww-perl + fi + fi + else + #FreeBSD case + return + fi + CSF_LOG=/var/log/directadmin/csf_install.log + CSF_CONF=/etc/csf/csf.conf + echo "Installing CSF..." + if [ ! -d /var/log/directadmin ]; then + mkdir -p /var/log/directadmin + fi + curl -L --progress-bar -o ${WORKDIR}/csf.tgz https://download.configserver.com/csf.tgz + + tar xzf csf.tgz + if ! ${WORKDIR}/csf/csftest.pl | tail -n 1 | grep -q 'RESULT: csf should function on this server'; then + echo "CSF is missing some modules" + return + fi + cd ${WORKDIR}/csf + bash ./install.sh >/dev/null 2>&1 + if [ -s ${CSF_CONF} ]; then + USE_IPSET=true + if [ -x /usr/bin/systemd-detect-virt ]; then + if systemd-detect-virt | grep -m1 -q -E 'lxc|openvz'; then + USE_IPSET=false + fi + fi + if ${USE_IPSET} && grep -m1 -q '^LF_IPSET = "0"' ${CSF_CONF}; then + perl -pi -e 's|^LF_IPSET = "0"|LF_IPSET = "1"|g' ${CSF_CONF} + fi + + #Add FTP passive port range + if ! grep ^TCP_IN ${CSF_CONF} | grep -q '35000:'; then + perl -pi -e 's|^TCP_IN = "(.*)"$|TCP_IN = "$1,35000:35999"|' ${CSF_CONF} + fi + if ! grep ^TCP6_IN ${CSF_CONF} | grep -q '35000:'; then + perl -pi -e 's|^TCP6_IN = "(.*)"$|TCP6_IN = "$1,35000:35999"|' ${CSF_CONF} + fi + #Block SMTP by default, use RESTRICT_SYSLOG=3 + perl -pi -e 's|^SMTP_BLOCK = "0"$|SMTP_BLOCK = "1"|' ${CSF_CONF} + perl -pi -e 's|^RESTRICT_SYSLOG = "0"$|RESTRICT_SYSLOG = "3"|' ${CSF_CONF} + + #Disable testing mode in CSF + perl -pi -e 's/^TESTING = "1"/TESTING = "0"/' ${CSF_CONF} + + #Allow all TCP/UDP outbound connections from root + if [ -e /etc/csf/csf.allow ] && [ -x /usr/sbin/csf ]; then + if ! grep -q 'out|u=0' /etc/csf/csf.allow; then + csf -a "tcp|out|u=0" "Added by DirectAdmin" + csf -a "udp|out|u=0" "Added by DirectAdmin" + fi + fi + csf -r >> /dev/null 2>&1 + fi + echo "CSF installation has finished." + cd ${WORKDIR} + rm -f "${WORKDIR}/csf.tar.gz" + rm -rf "${WORKDIR}/csf" +} + +#################################################### + +doNamedConf() { + if [ -e /etc/sysconfig/named ]; then + /usr/bin/perl -pi -e 's/^ROOTDIR=.*/ROOTDIR=/' /etc/sysconfig/named + fi + + SERVICE_NAME=named + if [ -s ${DACONF_FILE} ] && [ -x ${DA_BIN} ]; then + NAMED_CONF=`${DA_BIN} c | grep ^namedconfig= | cut -d= -f2` + NAMED_OVERRIDE=`${DA_BIN} c | grep ^named_service_override= | cut -d= -f2` + if [ "${NAMED_OVERRIDE}" != "" ]; then + SERVICE_NAME=${NAMED_OVERRIDE} + fi + fi + + if [ ! -s $NAMED_CONF ]; then + echo "Cannot find $NAMED_CONF to check"; + return + fi + + NAMED_OPTIONS_CONF=$NAMED_CONF + HAVE_OPTIONS_AREA=`grep -c '^options {' ${NAMED_OPTIONS_CONF}` + + for i in `grep -E '^[[:space:]]*include ' ${NAMED_CONF} | cut -d\" -f2`; do + { + if [ "$i" = "" ] || [ ! -s "$i" ]; then + continue; + fi + + if grep -m1 -q allow-transfer ${i}; then + #echo "Skipping allow-transfer chcek on ${i}. allow-transfer already present."; + return + fi + + if [ "${HAVE_OPTIONS_AREA}" -eq 0 ]; then + HAVE_OPTIONS_AREA=`grep -c '^options {' $i` + if [ "${HAVE_OPTIONS_AREA}" -eq 0 ]; then + continue; + fi + NAMED_OPTIONS_CONF=$i + fi + }; + done; + + if [ "${HAVE_OPTIONS_AREA}" -eq 0 ]; then + echo "Could not find options section in the $NAMED_CONF or any of it's include files"; + return + fi + + if ! grep -m1 -q allow-transfer ${NAMED_OPTIONS_CONF}; then + perl -pi -e 's|options \{|options \{\n\tallow-transfer \{ none; \};|g' ${NAMED_OPTIONS_CONF} + echo "Added 'allow-transfer { none; };' to ${NAMED_OPTIONS_CONF}" + echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue + fi + if grep -m1 -q 'listen-on[[:space:]]*port[[:space:]]*53[[:space:]]*{[[:space:]]*127.0.0.1;[[:space:]]*};' ${NAMED_OPTIONS_CONF}; then + perl -pi -e 's|listen-on[[:space:]]*port[[:space:]]*53[[:space:]]*{[[:space:]]*127.0.0.1;[[:space:]]*};|listen-on port 53 { any; };|g' ${NAMED_OPTIONS_CONF} + echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue + fi + if grep -m1 -q 'recursion[[:space:]]*yes;' ${NAMED_OPTIONS_CONF}; then + perl -pi -e 's|recursion[[:space:]]*yes;|recursion no;|g' ${NAMED_OPTIONS_CONF} + echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue + fi + if grep -m1 -q 'listen-on-v6[[:space:]]*port[[:space:]]*53[[:space:]]*{[[:space:]]*::1;[[:space:]]*};' ${NAMED_OPTIONS_CONF}; then + perl -pi -e 's|listen-on-v6[[:space:]]*port[[:space:]]*53[[:space:]]*{[[:space:]]*::1;[[:space:]]*};|listen-on-v6 port 53 { any; };|g' ${NAMED_OPTIONS_CONF} + echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue + fi + if grep -m1 -q 'allow-query[[:space:]]*{[[:space:]]*localhost;[[:space:]]*};' ${NAMED_OPTIONS_CONF}; then + perl -pi -e 's|allow-query[[:space:]]*{[[:space:]]*localhost;[[:space:]]*};|allow-query { any; };|g' ${NAMED_OPTIONS_CONF} + echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue + fi +} +doBind() { + if [ -e /etc/debian_version ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage bind9` -ne 0 ]; then + apt-get -y install bind9 + fi + fi + elif [ "${OS}" = "FreeBSD" ]; then + pkg install -y bind911 + else + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage bind` -ne 0 ] || [ `checkRPMPackage bind-libs` -ne 0 ] || [ `checkRPMPackage bind-utils` -ne 0 ]; then + yum -y install bind bind-libs bind-utils + fi + fi + fi + if [ "$OS" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + NAMED_CONF=/etc/named.conf + if [ ! -s "${NAMED_CONF}" ]; then + curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf + fi + if [ ! -s /var/named/named.ca ]; then + mkdir -p /var/named + chown named:named /var/named + curl -L --progress-bar -o /var/named/named.ca ${WEBPATH_SERVICES}/all/named/named.ca + fi + if [ ! -s /var/named/localhost.zone ]; then + curl -L --progress-bar -o /var/named/localhost.zone ${WEBPATH_SERVICES}/all/named/localhost.zone + fi + if [ ! -s /var/named/named.local ]; then + curl -L --progress-bar -o /var/named/named.local ${WEBPATH_SERVICES}/all/named/named.local + fi + if [ "${SYSTEMD}" = "yes" ]; then + if [ ! -s /usr/lib/systemd/system/named-setup-rndc.service ]; then + curl -L --progress-bar -o /usr/lib/systemd/system/named-setup-rndc.service ${WEBPATH_SERVICES}/custombuild/2.0/custombuild/configure/systemd/named-setup-rndc.service + fi + if [ ! -s /etc/systemd/system/named.service ]; then + if [ -s /usr/lib/systemd/system/named.service ]; then + mv /usr/lib/systemd/system/named.service /etc/systemd/system/named.service + else + curl -L --progress-bar -o /etc/systemd/system/named.service ${WEBPATH_SERVICES}/custombuild/2.0/custombuild/configure/systemd/named.service + fi + doNamedConf + systemctl daemon-reload + systemctl enable named.service + systemctl start named.service + fi + else + #for CentOS 6: http://help.directadmin.com/item.php?id=387 + if [ -s /etc/named.conf ]; then + perl -pi -e 's/\sallow-query/\t\/\/allow-query/' /etc/named.conf + perl -pi -e 's/\slisten-on/\t\/\/listen-on/' /etc/named.conf + perl -pi -e 's/\srecursion yes/\t\/\/recursion yes/' /etc/named.conf + fi + mv -f /etc/init.d/named /etc/init.d/named.back + curl -L --progress-bar -o /etc/init.d/named http://www.directadmin.com/named + chmod 755 /etc/init.d/named + /sbin/chkconfig named reset + fi + + RNDCKEY=/etc/rndc.key + + if [ ! -s $RNDCKEY ]; then + echo "Generating new key: $RNDCKEY ..."; + + if [ -e /dev/urandom ]; then + /usr/sbin/rndc-confgen -a -r /dev/urandom + else + /usr/sbin/rndc-confgen -a + fi + + if grep -q 'key "rndc-key"' $RNDCKEY; then + perl -pi -e 's/key "rndc-key"/key "rndckey"/' $RNDCKEY + fi + + echo "Done generating new key" + fi + + if [ ! -s $RNDCKEY ]; then + echo "rndc-confgen failed. Using template instead." + + curl -L --progress-bar -o $RNDCKEY http://www.directadmin.com/rndc.key + + if ! grep -q secret $RNDCKEY; then + SECRET=$(/usr/sbin/rndc-confgen | grep secret | head -n 1) + perl -pi -e 's#hmac-md5;#hmac-md5;\n\t$SECRET#' $RNDCKEY + echo "Template installed." + fi + fi + + chown named:named ${RNDCKEY} + elif [ "$OS" = "FreeBSD" ]; then + if [ ! -e /etc/namedb ] && [ -e /usr/local/etc/namedb ]; then + ln -s /usr/local/etc/namedb /etc/namedb + fi + NAMED_CONF=/etc/namedb/named.conf + if [ ! -s "${NAMED_CONF}" ]; then + curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf.freebsd + fi + if [ ! -e /etc/namedb/rndc.key ]; then + rndc-confgen -a + fi + if grep -q listen /etc/namedb/named.conf; then + curl -L --progress-bar -o /etc/namedb/named.conf http://www.directadmin.com/named.conf.freebsd + fi + elif [ "${SYSTEMD}" = "yes" ]; then + NAMED_CONF=/etc/bind/named.conf + if [ ! -s "${NAMED_CONF}" ]; then + curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf.debian + elif grep 'listen-on' /etc/bind/named.conf | grep -m1 -q '127.0.0.1'; then + curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf.debian + else + if [ -s /etc/bind/named.conf.options ]; then + if grep 'listen-on' /etc/bind/named.conf.options | grep -m1 -q '127.0.0.1'; then + curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf.debian + fi + fi + fi + if [ ! -s /etc/bind/named.ca ]; then + curl -L --progress-bar -o /etc/bind/named.ca ${WEBPATH_SERVICES}/all/named/named.ca + fi + BIND9=/lib/systemd/system/bind9.service + if [ ! -s ${BIND9} ] && [ -s /etc/systemd/system/multi-user.target.wants/bind9.service ]; then + BIND9=/etc/systemd/system/multi-user.target.wants/bind9.service + fi + + if [ ! -s /etc/systemd/system/named.service ]; then + if [ -s ${BIND9} ]; then + systemctl stop bind9.service + systemctl disable bind9.service + mv ${BIND9} /etc/systemd/system/named.service + else + if [ -s /etc/init.d/bind9 ]; then #I guess it's not systemd here. + ln -s bind9 /etc/init.d/named + else + curl -L --progress-bar -o /etc/systemd/system/named.service ${WEBPATH_SERVICES}/custombuild/2.0/custombuild/configure/systemd/named.service.debian + fi + fi + fi + doNamedConf + if [ -s ${BIND9} ]; then + systemctl stop bind9.service + fi + systemctl daemon-reload + systemctl disable bind9.service + systemctl enable named.service + systemctl start named.service + fi + set_service ${SERVICE_NAME} ON +} + +#################################################### + +doWP() { + cd ${WORKDIR} + getFile wp/${WP_VER}/wp-cli.phar wp-cli wp-cli.${WP_VER} + if [ -s ${WORKDIR}/wp-cli.${WP_VER} ]; then + mv -f ${WORKDIR}/wp-cli.${WP_VER} /usr/local/bin/wp + chmod +x /usr/local/bin/wp + else + rm -f ${WORKDIR}/wp-cli.${WP_VER} + fi + + if [ -d /etc/cagefs/conf.d ] && [ ! -s /etc/cagefs/conf.d/wp.cfg ]; then + echo '[wp-cli]' > /etc/cagefs/conf.d/wp.cfg + echo 'comment=wp-cli' >> /etc/cagefs/conf.d/wp.cfg + echo 'paths=/usr/local/bin/wp' >> /etc/cagefs/conf.d/wp.cfg + fi + + echo "WP-CLI ${WP_VER} Installed." + writeLog "WP_CLI ${WP_VER} installed" + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doImapsync() { + getFile imapsync/imapsync-${IMAPSYNC_VER}.tar.gz imapsync imapsync-${IMAPSYNC_VER}.tar.gz + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + CENTOS7_DEPS="perl-File-Copy-Recursive perl-App-cpanminus perl-Dist-CheckConflicts perl-HTML-Parser perl-libwww-perl perl-Module-Implementation perl-Module-ScanDeps perl-Package-Stash perl-Package-Stash-XS perl-PAR-Packer perl-Regexp-Common perl-Sys-MemInfo perl-Test-Fatal perl-Test-Mock-Guard perl-Test-Requires perl-Test-Deep perl-File-Tail perl-Test-NoWarnings perl-Test-Simple perl-Test-Warn perl-Sub-Uplevel" + if ! rpm -q --quiet ${CENTOS7_DEPS}; then + yum -y install ${CENTOS7_DEPS} + fi + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + POWERTOOLS=cloudlinux-PowerTools + elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then + POWERTOOLS=PowerTools + elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then + POWERTOOLS=ol8_codeready_builder + elif [ -e /etc/yum.repos.d/redhat.repo ]; then + POWERTOOLS=codeready-builder-for-rhel-8-x86_64-rpms + else + POWERTOOLS=powertools + fi + if [ "${OS_CENTOS_VER}" = "8" ]; then + APPEND_ENABLEREPO="--enablerepo=${POWERTOOLS}" + fi + if ! rpm -q --quiet perl-IO-Tee perl-Mail-IMAPClient perl-Sys-MemInfo perl-Readonly perl-Encode-IMAPUTF7 perl-File-Copy-Recursive perl-Unicode-String perl-Regexp-Common perl-File-Tail perl-IO-Socket-INET6; then + yum -y install perl-IO-Tee perl-Mail-IMAPClient perl-Sys-MemInfo perl-Readonly perl-Encode-IMAPUTF7 perl-File-Copy-Recursive perl-Unicode-String perl-Regexp-Common perl-File-Tail perl-IO-Socket-INET6 --enablerepo=${EPEL_REPO_NAME} ${APPEND_ENABLEREPO} + fi + elif [ "${OS}" != "FreeBSD" ]; then + DEBIAN10_DEAPS="libauthen-ntlm-perl libcgi-pm-perl libcrypt-openssl-rsa-perl libdata-uniqid-perl libencode-imaputf7-perl libfile-copy-recursive-perl libfile-tail-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-tee-perl libhtml-parser-perl libjson-webtoken-perl libmail-imapclient-perl libparse-recdescent-perl libmodule-scandeps-perl libreadonly-perl libregexp-common-perl libsys-meminfo-perl libterm-readkey-perl libtest-mockobject-perl libtest-pod-perl libunicode-string-perl liburi-perl libwww-perl libtest-nowarnings-perl libtest-deep-perl libtest-warn-perl libtest-requires-perl libtest-modern-perl libtest-mock-guard-perl libpar-packer-perl libdist-checkconflicts-perl cpanminus" + if ! dpkg -s ${DEBIAN10_DEAPS} >/dev/null 2>&1; then + apt-get -y install ${DEBIAN10_DEAPS} + fi + fi + quitIfLocked doImapsync + + cd ${CWD} + FILE=${CWD}/imapsync-${IMAPSYNC_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd imapsync-imapsync-${IMAPSYNC_VER} + echo "Configuring imapsync-${IMAPSYNC_VER}..." + + chmod +x imapsync + + echo "Installing imapsync-${IMAPSYNC_VER}..." + cp -p imapsync /usr/local/bin/imapsync + if [ -d /etc/cagefs/conf.d ] && [ ! -s /etc/cagefs/conf.d/wp.cfg ]; then + echo '[imapsync]' > /etc/cagefs/conf.d/imapsync.cfg + echo 'comment=imapsync' >> /etc/cagefs/conf.d/imapsync.cfg + echo 'paths=/usr/local/bin/imapsync' >> /etc/cagefs/conf.d/imapsync.cfg + fi + echo "imapsync ${IMAPSYNC_VER} installed" + writeLog "imapsync ${IMAPSYNC_VER} installed" + + removeLockfile + cd ${CWD} + + /sbin/ldconfig + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doLego() { + cd ${WORKDIR} + if [ "${OS}" = "FreeBSD" ]; then + LEGO_FILENAME=lego_v${LEGO_VER}_freebsd_amd64.tar.gz + getFile lego/${LEGO_FILENAME} lego_freebsd ${LEGO_FILENAME} + elif [ "${OS_CENTOS_VER}" = "6" ] && [ "${B64}" = "0" ]; then + LEGO_FILENAME=lego_v${LEGO_VER}_linux_386.tar.gz + getFile lego/${LEGO_FILENAME} lego_386 ${LEGO_FILENAME} + else + LEGO_FILENAME=lego_v${LEGO_VER}_linux_amd64.tar.gz + getFile lego/${LEGO_FILENAME} lego ${LEGO_FILENAME} + fi + + tar xzf ${LEGO_FILENAME} -C /usr/local/bin/ --no-same-owner 'lego' + + chmod 700 /usr/local/bin/lego + + DNSPROVIDERS_JSON=/usr/local/directadmin/data/admin/dnsproviders.json + DNSPROVIDERS_VER=`getVer dnsproviders` + getFile lego/dnsproviders-${DNSPROVIDERS_VER}.json dnsproviders dnsproviders.json + if [ -d /usr/local/directadmin/data/admin ]; then + mv -f dnsproviders.json ${DNSPROVIDERS_JSON} + chmod 600 ${DNSPROVIDERS_JSON} + chown diradmin:diradmin ${DNSPROVIDERS_JSON} + fi + + echo "Lego ${LEGO_VER} Installed." + writeLog "Lego ${LEGO_VER} installed" +} + +doLibzip() { + getFile libzip-${LIBZIP_VER}.tar.gz libzip + quitIfLocked doLibzip + + if [ -e /etc/debian_version ]; then + CMAKE_NAME="cmake" + elif [ "${OS}" = "FreeBSD" ]; then + CMAKE_NAME="cmake" + elif [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + CMAKE_NAME="cmake3" + else + CMAKE_NAME="cmake" + fi + if [ "${CMAKE_NAME}" = "cmake" ]; then + if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ] && [ ! -e /usr/bin/cmake3 ]; then + echo "Cannot find ${CMAKE_NAME}, installing it..." + if [ -e /etc/debian_version ]; then + echo "apt-get -y install ${CMAKE_NAME}" + elif [ "${OS}" = "FreeBSD" ]; then + echo "${PKG_INSTALL} ${CMAKE_NAME}" + else + yum -y install ${CMAKE_NAME} + fi + fi + elif [ ! -e /usr/bin/cmake3 ]; then + yum -y install ${CMAKE_NAME} --enablerepo=${EPEL_REPO_NAME} + fi + + if [ ! -e /usr/include/uv.h ] && [ ! -e /usr/local/include/uv.h ]; then + if [ -e /etc/debian_version ]; then + apt-get -y install libuv-dev + elif [ "${OS}" = "FreeBSD" ]; then + pkg install -y libuv + else + yum -y install libuv-devel + fi + fi + + if [ -e /usr/bin/cmake3 ] && [ ! -e /usr/bin/cmake ]; then + ln -sf /usr/bin/cmake3 /usr/bin/cmake + fi + cd ${CWD} + FILE=${CWD}/libzip-${LIBZIP_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd libzip-${LIBZIP_VER} + echo "Configuring libzip-${LIBZIP_VER}..." + + mkdir -p build + cd build + ${CMAKE_NAME} -DENABLE_GNUTLS=OFF ../ + + echo "Done. Making libzip-${LIBZIP_VER}..." + while echo "Trying to make libzip..."; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + echo "Installing libzip-${LIBZIP_VER}..." + make install + echo "Done libzip. It is recommended to reinstall libxslt after update of libzip." + writeLog "libzip ${LIBZIP_VER} installed" + + removeLockfile + cd ${CWD} + + /sbin/ldconfig + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doWebalizer() { + quitIfLocked doWebalizer + + if [ "${WEBALIZER_OPT}" != "yes" ]; then + setVal webalizer 0 ${DACONF_TEMPLATE_FILE} + setVal webalizer 0 ${DACONF_FILE} + do_exit 1 "You cannot install webalizer, because you do not have it set in options.conf file." + fi + + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage gd-devel` -ne 0 ]; then + yum -y install gd-devel + ldconfig + fi + fi + fi + + PREFIX=/usr + LIBPATH=/usr/lib + INCPATH=/usr/include + if [ ${OS} = "FreeBSD" ]; then + PREFIX=/usr/local + LIBPATH=/usr/local/lib + INCPATH=/usr/local/include + fi + + if [ -e ${PREFIX}/bin/webalizer ]; then + echo "The webalizer binary exists, aborting. Delete ${PREFIX}/bin/webalizer if you wish to compile." + removeLockfile + return + fi + + cd ${CWD} + getFile ${WEBALIZER_FILE} webalizer + tar xzf ${WEBALIZER_FILE} --no-same-owner + cd ${WEBALIZER} + + export LD_LIBRARY_PATH=${LIBPATH} + ./configure --prefix=${PREFIX} --with-png=${LIBPATH} --with-gdlib=${LIBPATH} --with-gd=${INCPATH} --enable-dns --with-dblib --with-db --with-z-inc --with-zlib + + while echo "Trying to make webalizer..."; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): " + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + removeLockfile + return + fi + else + break + fi + done + + make install + + writeLog "webalizer ${WEBALIZER_VER} installed" + + removeLockfile + + if [ "${AWSTATS_OPT}" = "no" ]; then + setVal awstats 0 ${DACONF_TEMPLATE_FILE} + setVal awstats 0 ${DACONF_FILE} + else + setVal awstats 1 ${DACONF_TEMPLATE_FILE} + setVal awstats 1 ${DACONF_FILE} + fi + + doRestartDA + + if [ -e /etc/webalizer.conf ]; then + mv -f /etc/webalizer.conf /etc/webalizer.conf.moved 2> /dev/null > /dev/null + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doawstats_process() { + if [ "${AWSTATS_OPT}" != "yes" ]; then + do_exit 1 "You cannot update awstats_process.sh, because you do not have awstats=1 set in options.conf file." + fi + + cd ${CWD} + AWSTATS_PROCESS_SH=/usr/local/directadmin/scripts/awstats_process.sh + getFile all/awstats/awstats_process.sh-${AWSTATS_PROCESS_VER} awstats_process awstats_process.sh + if [ -s awstats_process.sh ]; then + mv -f ${CWD}/awstats_process.sh ${AWSTATS_PROCESS_SH} + chmod 700 ${AWSTATS_PROCESS_SH} + + echo "awstats_process.sh ${AWSTATS_PROCESS_VER} has been installed." + + writeLog "awstats_process.sh updated to ${AWSTATS_PROCESS_VER}" + fi +} + +doawstats() { + if [ "${AWSTATS_OPT}" != "yes" ]; then + setVal awstats 0 ${DACONF_TEMPLATE_FILE} + setVal awstats 0 ${DACONF_FILE} + do_exit 1 "You cannot install awstats, because you do not have it set in options.conf file." + fi + + TARGZ=awstats-${AWSTATS_VER}.tar.gz + TARFILE=${WORKDIR}/${TARGZ} + USR=/usr/local + REALPATH=${USR}/awstats-${AWSTATS_VER} + ALIASPATH=${USR}/awstats + + getFile all/awstats/${TARGZ} awstats ${TARGZ} + getFile patches/awstats_url.patch awstats_url_patch + + #Extract the file + tar xzf ${TARFILE} --no-same-owner -C ${USR} + + if [ ! -e ${REALPATH} ]; then + do_exit 1 "Directory ${REALPATH} does not exist" + fi + + #link it from a fake path: + /bin/rm -f ${ALIASPATH} + /bin/ln -sf ${REALPATH} ${ALIASPATH} + cd ${REALPATH} + chown -R root:${ROOT_GRP} ${REALPATH} + chmod -R 755 ${REALPATH} + + if [ "`version_cmp ${AWSTATS_VER} 7.3 'awstats ver check'`" -lt 0 ]; then + #patch the url bug + echo "Patching awstats_buildstaticpages.pl to fix url bug..." + cd ${REALPATH}/tools + cp -f ${WORKDIR}/patches/awstats_url.patch ./awstats_url.patch + if [ ! -s awstats_url.patch ]; then + echo "Error with awstats_url.patch. File is missing or empty" + echo "This will cause url issues in the static awstats output." + else + patch -p0 < awstats_url.patch + fi + fi + + #setup the directadmin.conf + setVal awstats 1 ${DACONF_TEMPLATE_FILE} + setVal awstats 1 ${DACONF_FILE} + if [ "${WEBALIZER_OPT}" = "no" ]; then + setVal webalizer 0 ${DACONF_TEMPLATE_FILE} + setVal webalizer 0 ${DACONF_FILE} + else + setVal webalizer 1 ${DACONF_TEMPLATE_FILE} + setVal webalizer 1 ${DACONF_FILE} + fi + + doRestartDA + cd ${CWD} + echo "AWstats ${AWSTATS_VER} installation is done." + writeLog "Awstats ${AWSTATS_VER} installed" + + doawstats_process +} + +#################################################### +doNginxUnit_module() { + if [ ! -d unit-${UNIT_VER} ]; then + getFile unit/unit-${UNIT_VER}.tar.gz unit unit-${UNIT_VER}.tar.gz + cd ${CWD} + FILE=${CWD}/unit-${UNIT_VER}.tar.gz + + checkFile ${FILE} + + echo "Extracting ${FILE}..." + tar xzf ${FILE} --no-same-owner + fi + + cd unit-${UNIT_VER} + + if [ ! -s Makefile ]; then + #configure + echo "Configuring unit-${UNIT_VER}" + ${CWD}/${UNIT_CONFIGURE} + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure Nginx. Check the ${UNIT_CONFIGURE} file\n" + do_exit 1 + fi + echo "Done Configuration." + fi + + UNIT_COMPONENT="$1" + UNIT_COMPONENT_VER="$2" + UNIT_COMPONENT_ADDITIONAL_FLAGS="" + + if [ "${UNIT_COMPONENT}" = "php" ]; then + UNIT_COMPONENT_VER_SHORT=`echo "${UNIT_COMPONENT_VER}" | tr -d '.'` + UNIT_PHP_CONFIG="/usr/local/php${UNIT_COMPONENT_VER_SHORT}/bin/php-config${UNIT_COMPONENT_VER_SHORT}" + if [ ! -e "${UNIT_PHP_CONFIG}" ]; then + UNIT_PHP_CONFIG="/usr/local/php${UNIT_COMPONENT_VER_SHORT}/bin/php-config" + fi + UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}${UNIT_COMPONENT_VER} --config=${UNIT_PHP_CONFIG} --lib-path=/usr/local/php${UNIT_COMPONENT_VER_SHORT}/lib" + elif [ "${UNIT_COMPONENT}" = "python" ]; then + if [ "${OS}" = "FreeBSD" ]; then + UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=python${UNIT_COMPONENT_VER} --config=/usr/local/bin/python3-config" + else + UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=python${UNIT_COMPONENT_VER} --config=/usr/bin/python3-config" + fi + elif [ "${UNIT_COMPONENT}" = "perl" ]; then + UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}5 --${UNIT_COMPONENT}=${UNIT_COMPONENT}" + elif [ "${UNIT_COMPONENT}" = "ruby" ]; then + UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}${UNIT_COMPONENT_VER} --${UNIT_COMPONENT}=${UNIT_COMPONENT}" + elif [ "${UNIT_COMPONENT}" = "java" ]; then + JAVA_LIB_PATH="${3}/jre/lib" + if [ -d "${JAVA_LIB_PATH}/amd64" ]; then + JAVA_LIB_PATH="${JAVA_LIB_PATH}/amd64" + elif [ ! -d ${JAVA_LIB_PATH} ]; then + JAVA_LIB_PATH="${3}/lib" + fi + UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}${UNIT_COMPONENT_VER} --home="${3}" --lib-path="${JAVA_LIB_PATH}" --jars=/usr/share/unit-jsc-common/" + fi + ./configure ${UNIT_COMPONENT} ${UNIT_COMPONENT_ADDITIONAL_FLAGS} + if [ "${UNIT_COMPONENT}" = "nodejs" ]; then + if [ "${OS_CENTOS_VER}" = "7" ]; then + #C++11 is needed for libmodsecurity + if [ ! -d /opt/rh/devtoolset-9 ]; then + yum -y install centos-release-scl + yum -y install devtoolset-9 + fi + scl enable devtoolset-9 "make node-install" + else + make node-install + fi + elif [ "${UNIT_COMPONENT}" = "java" ]; then + make ${UNIT_COMPONENT}${UNIT_COMPONENT_VER}-install + elif [ "${UNIT_COMPONENT}" = "perl" ]; then + make perl5-install + else + make ${UNIT_COMPONENT}${UNIT_COMPONENT_VER} + if [ -s build/${UNIT_COMPONENT}${UNIT_COMPONENT_VER}.unit.so ]; then + MODULES_DIR=`/usr/sbin/unitd --version 2>&1 | grep -o 'modules=[^ ]*'|cut -d= -f2` + cp -pf build/${UNIT_COMPONENT}${UNIT_COMPONENT_VER}.unit.so ${MODULES_DIR}/${UNIT_COMPONENT}${UNIT_COMPONENT_VER}.unit.so + fi + fi + + cd ${CWD} +} + +doNginxUnit_modules() { + if [ -d /usr/lib/unit/modules ] && [ "${UNIT_OPT}" = "yes" ]; then + #cleanup all the modules + rm -f /usr/lib/unit/modules/* + + #Install Nginx Unit extensions for all releases of PHP + if [ -x /usr/local/php${PHP1_SHORTRELEASE}/bin/php ]; then + if /usr/local/php${PHP1_SHORTRELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then + doNginxUnit_module php ${PHP1_RELEASE_OPT} + fi + fi + if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ -x /usr/local/php${PHP2_SHORTRELEASE}/bin/php ]; then + if /usr/local/php${PHP2_SHORTRELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then + doNginxUnit_module php ${PHP2_RELEASE_OPT} + fi + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ -x /usr/local/php${PHP3_SHORTRELEASE}/bin/php ]; then + if /usr/local/php${PHP3_SHORTRELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then + doNginxUnit_module php ${PHP3_RELEASE_OPT} + fi + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ -x /usr/local/php${PHP4_SHORTRELEASE}/bin/php ]; then + if /usr/local/php${PHP4_SHORTRELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then + doNginxUnit_module php ${PHP4_RELEASE_OPT} + fi + fi + + #Install missing language files, if any + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ "${OS_CENTOS_VER}" = "6" ]; then + APPENDED_PACKAGES=" python3-devel" + fi + MISSING_PACKAGES=" " + for package in mercurial perl-devel perl-libs${APPENDED_PACKAGES}; do { + PACKAGE_TEST=`checkRPMPackage ${package}` + if [ ${PACKAGE_TEST} -ne 0 ]; then + MISSING_PACKAGES="${package} ${MISSING_PACKAGES}" + fi + } + done + if [ "${MISSING_PACKAGES}" != " " ]; then + yum -y install ${MISSING_PACKAGES} + fi + fi + elif [ -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/dpkg-query ]; then + MISSING_PACKAGES=" " + for package in hg-fast-export libperl-dev python3-dev python3-pip; do { + PACKAGE_TEST=`checkDebianPackage ${package}` + if [ ${PACKAGE_TEST} -ne 0 ]; then + MISSING_PACKAGES="${package} ${MISSING_PACKAGES}" + fi + } + done + if [ "${MISSING_PACKAGES}" != " " ]; then + curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - + apt-get update + apt-get -y install ${MISSING_PACKAGES} + fi + fi + fi + + if [ -x /usr/bin/perl ] || [ -x /usr/local/bin/perl ]; then + doNginxUnit_module perl + fi + + if [ "${OS}" != "FreeBSD" ] && [ -x /usr/bin/which ]; then + JAVA_DIRECTORY=$(dirname $(dirname $(readlink -f $(which javac 2>/dev/null) 2>/dev/null) 2>/dev/null) 2>/dev/null) + if [ -z "${JAVA_DIRECTORY}" ]; then + if [ "${OS}" = "FreeBSD" ]; then + pkg install -y openjdk + elif [ -e /etc/debian_version ]; then + if [ "${OS_DEBIAN_VER}" = "8" ]; then + apt-get -y install openjdk-7-jdk + elif [ "${OS_DEBIAN_VER}" = "9" ]; then + apt-get -y install openjdk-8-jdk + else + apt-get -y install openjdk-11-jdk + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ "${OS_CENTOS_VER}" = "6" ]; then + yum -y install java-1.8.0-openjdk-devel + else + yum -y install java-11-openjdk-devel + fi + fi + fi + if [ -e /usr/lib/jvm/java-11-openjdk ]; then + doNginxUnit_module java "11" "/usr/lib/jvm/java-11-openjdk" + elif [ -e /usr/lib/jvm/java-11-openjdk-amd64 ]; then + doNginxUnit_module java "11" "/usr/lib/jvm/java-11-openjdk-amd64" + fi + if [ -e /usr/lib/jvm/java-1.8.0-openjdk ]; then + doNginxUnit_module java "1.8" "/usr/lib/jvm/java-1.8.0-openjdk" + elif [ -e /usr/lib/jvm/java-1.8.0-openjdk-amd64 ]; then + doNginxUnit_module java "1.8" "/usr/lib/jvm/java-1.8.0-openjdk-amd64" + fi + if [ -e /usr/lib/jvm/java-1.7.0-openjdk-amd64 ]; then + doNginxUnit_module java "7" "/usr/lib/jvm/java-1.7.0-openjdk-amd64" + fi + fi + if [ ! -x /usr/bin/python3-config ] && [ ! -x /usr/local/bin/python3-config ]; then + if [ -e /etc/debian_version ]; then + apt-get -y install python3-dev + elif [ "${OS}" != "FreeBSD" ]; then + yum -y install python3-devel + fi + fi + if [ -x /usr/bin/python3-config ]; then + PYTHON_VERSION=`python3 --version | awk '{print $2}' | cut -d. -f1,2` + if [ -z "${PYTHON_VERSION}" ]; then + PYTHON_VERSION=3 + fi + doNginxUnit_module python ${PYTHON_VERSION} + fi + if ! ls -ld /usr/include/ruby*/ 2>/dev/null || [ ! -d /usr/lib64/ruby ]; then + if [ -e /etc/debian_version ]; then + apt-get -y install ruby-dev ruby-rack + elif [ "${OS}" != "FreeBSD" ]; then + yum -y install ruby-devel rubygem-rack + fi + fi + if ls -ld /usr/include/ruby*/ 2>/dev/null || [ -d /usr/lib64/ruby ]; then + RUBY_VERSION=`ruby -v | awk '{print $2}' | cut -d. -f1,2` + if [ -z "${RUBY_VERSION}" ]; then + RUBY_VERSION=2 + fi + doNginxUnit_module ruby ${RUBY_VERSION} + fi + + if [ ! -x /usr/bin/npm ] && [ ! -x /usr/local/bin/npm ]; then + if [ "${OS}" = "FreeBSD" ]; then + pkg install -y node + elif [ -e /etc/debian_version ]; then + curl -sL https://deb.nodesource.com/setup_lts.x | bash - + apt-get install -y nodejs + elif [ "${OS}" != "FreeBSD" ]; then + curl -sL https://rpm.nodesource.com/setup_lts.x | bash - + yum install -y nodejs + fi + fi + #If npm is detected - install unit module + if [ -x /usr/bin/npm ] || [ -x /usr/local/bin/npm ]; then + if [ ! -x /usr/bin/node-gyp ] && [ ! -x /usr/local/bin/node-gyp ]; then + npm install -g node-gyp + fi + doNginxUnit_module nodejs + fi + if [ -d /usr/local/lib/node_modules ] && [ ! -d /usr/lib/node_modules ]; then + ln -s /usr/local/lib/node_modules /usr/lib/node_modules 2>/dev/null + fi + echo "Nginx Unit language modules have been installed." + fi +} + +doNginxUnit() { + if [ "${UNIT_OPT}" != "yes" ]; then + do_exit 1 "You cannot install Nginx Unit, because you do not have it set in options.conf file." + fi + + getFile unit/unit-${UNIT_VER}.tar.gz unit unit-${UNIT_VER}.tar.gz + + getFile unit.boot unit_boot + getFile unit.boot.freebsd unit_boot_freebsd + getFile patches/unit_cgroup.patch unit_cgroup.patch + + #Add nginx_unit user/group if it doesn't exist after installation + addUserGroup nginx_unit nginx_unit + addToAccess nginx_unit + + quitIfLocked doNginxUnit + + cd ${CWD} + FILE=${CWD}/unit-${UNIT_VER}.tar.gz + + checkFile ${FILE} + + echo "Extracting ${FILE}..." + tar xzf ${FILE} --no-same-owner + + cd unit-${UNIT_VER} + + if [ -s src/nxt_process.c ]; then + echo "Patching unit for per-user process grouping" + if [ ! -s ../patches/unit_cgroup.patch ]; then + echo "${boldon}ERROR downloading patches/unit_cgroup.patch${boldoff}" + else + patch -p0 < ../patches/unit_cgroup.patch + fi + fi + + #configure + echo "Configuring unit-${UNIT_VER}" + ${CWD}/${UNIT_CONFIGURE} + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure Nginx. Check the ${UNIT_CONFIGURE} file\n" + do_exit 1 + fi + echo "Done Configuration." + + while echo "Trying to make Nginx Unit..."; do + C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES} + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + + echo "Installing Nginx Unit..." + + make install + make libunit-install + + cd ${CWD} + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/unit ]; then + echo "Removing ${INITDDIR}/unit..." + rm -f ${INITDDIR}/unit + fi + + #fresh install, add to System Backup + if [ ! -s ${SYSTEMDDIR}/unit.service ]; then + add_to_system_backup dirs /var/lib/unit + fi + + echo "Enabling Nginx Unit in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/unit.service ]; then + cp -f ${CB_CUST_SYSTEMD}/unit.service ${SYSTEMDDIR}/unit.service + else + cp -f ${CB_SYSTEMD}/unit.service ${SYSTEMDDIR}/unit.service + fi + chmod 644 ${SYSTEMDDIR}/unit.service + systemctl daemon-reload + systemctl enable unit.service + else + if [ ${OS} = "FreeBSD" ]; then + cp -f ${CWD}/unit.boot.freebsd /usr/local/etc/rc.d/unit + chmod 755 /usr/local/etc/rc.d/unit + #we don't officially support any debian withhout systemd + elif [ ! -e /etc/debian_version ]; then + cp -f ${CWD}/unit.boot /etc/rc.d/init.d/unit + chmod 755 /etc/rc.d/init.d/unit + /sbin/chkconfig unit on + fi + fi + + if [ ! -e /etc/logrotate.d/unit ] && [ ${OS} != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/unit.logrotate -o /etc/logrotate.d/unit + fi + + if [ ! -d /var/log/unit ]; then + mkdir -p /var/log/unit + fi + + chmod 700 /var/log/unit + chown root:${ROOT_GRP} /var/log/unit + + if [ ! -d /usr/lib/unit/modules ]; then + mkdir -p /usr/lib/unit/modules + fi + set_service unit ON + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "Restarting Nginx Unit." + + control_service unit stop >/dev/null 2>&1 + + removeLockfile + + doNginxUnit_modules + control_service unit start + + writeLog "Nginx Unit ${UNIT_VER} installed" +} + +#################################################### + +doUpdateScript() { + cd ${CWD} + cp -f options.conf .. + cd .. + if [ ${OS} = "FreeBSD" ]; then + fetch -o ./${NAME}.tar.gz ${WEBPATH}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz + else + curl ${CURL_CONNECT_OPTIONS} -o ./${NAME}.tar.gz ${WEBPATH}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz + + if [ ! -s ./${NAME}.tar.gz ]; then + echo "${boldon}Fileserver might be down, using the backup file server..${boldoff}" + curl ${CURL_CONNECT_OPTIONS} -o ./${NAME}.tar.gz ${WEBPATH_BACKUP}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz + fi + fi + + if [ -s ${NAME}.tar.gz ]; then + echo "Extracting ${NAME}.tar.gz..." + + tar xzf ${NAME}.tar.gz --no-same-owner + if [ $? -ne 0 ]; then + echo "Unable to extract ${NAME}.tar.gz." + fi + mv -f options.conf ${WORKDIR} + cd ${CWD} + + downloadVersionsTxt + + chmod 700 build + else + echo "Unable to extract ${NAME}.tar.gz." + fi +} + +#################################################### + +doUpdate() { + doUpdateScript + cd ${CWD} + ./build update_data +} + +#################################################### + +doPhpConf() { +# if [ "${WEBSERVER_OPT}" = "litespeed" ]; then +# return +# fi + + if [ "${HAVE_FPM_CGI}" = "yes" ]; then + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + set_service php-fpm${php_shortrelease} OFF + done + else + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + set_service php-fpm${php_shortrelease} delete + done + fi + + fpmChecks + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + doApacheHostConf + + if [ -e ${WORKDIR}/custom/ap2/conf/extra/httpd-php-handlers.conf ]; then + cp -f ${WORKDIR}/custom/ap2/conf/extra/httpd-php-handlers.conf ${PHP_HANDLERS_HTTPD} + else + # Writing data to httpd-php-handlers.conf + echo -n "" > ${PHP_HANDLERS_HTTPD} + + echo '' >> ${PHP_HANDLERS_HTTPD} + + + if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then + echo "AddHandler application/x-httpd-php .inc .php .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${PHP_HANDLERS_HTTPD} + echo "AddHandler application/x-httpd-php-source .phps" >> ${PHP_HANDLERS_HTTPD} + fi + + if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + echo "AddHandler application/x-httpd-lsphp .inc .php .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${PHP_HANDLERS_HTTPD} + fi + + if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + echo "AddHandler application/x-httpd-php-source .phps" >> ${PHP_HANDLERS_HTTPD} + fi + + echo '' >> ${PHP_HANDLERS_HTTPD} + + echo "AddType text/html .php" >> ${PHP_HANDLERS_HTTPD} + fi + fi + + if [ "${HAVE_FCGID}" = "yes" ]; then + if [ "${PHP1_MODE_OPT}" = "fastcgi" ]; then + doSetupFcgidSh ${PHP1_SHORTRELEASE} + fi + if [ "${PHP2_MODE_OPT}" = "fastcgi" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + doSetupFcgidSh ${PHP2_SHORTRELEASE} + fi + if [ "${PHP3_MODE_OPT}" = "fastcgi" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + doSetupFcgidSh ${PHP3_SHORTRELEASE} + fi + if [ "${PHP4_MODE_OPT}" = "fastcgi" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + doSetupFcgidSh ${PHP4_SHORTRELEASE} + fi + + fi + + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + eval `echo "HAVE_FPM${php_shortrelease}=no"` + done + + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + systemctl restart php-fpm${PHP1_SHORTRELEASE}.service + systemctl enable php-fpm${PHP1_SHORTRELEASE}.service + else + ${INITDDIR}/php-fpm${PHP1_SHORTRELEASE} restart + if [ ${OS} = "FreeBSD" ]; then + ${INITDDIR}/php-fpm${PHP1_SHORTRELEASE} restart + elif [ -e /etc/debian_version ]; then + update-rc.d php-fpm${PHP1_SHORTRELEASE} defaults + else + /sbin/chkconfig php-fpm${PHP1_SHORTRELEASE} on + fi + fi + + set_service php-fpm${PHP1_SHORTRELEASE} ON + eval `echo "HAVE_FPM${PHP1_SHORTRELEASE}=yes"` + fi + if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + systemctl restart php-fpm${PHP2_SHORTRELEASE}.service + systemctl enable php-fpm${PHP2_SHORTRELEASE}.service + else + ${INITDDIR}/php-fpm${PHP2_SHORTRELEASE} restart + if [ ${OS} = "FreeBSD" ]; then + ${INITDDIR}/php-fpm${PHP2_SHORTRELEASE} restart + elif [ -e /etc/debian_version ]; then + update-rc.d php-fpm${PHP2_SHORTRELEASE} defaults + else + /sbin/chkconfig php-fpm${PHP2_SHORTRELEASE} on + fi + fi + + set_service php-fpm${PHP2_SHORTRELEASE} ON + eval `echo "HAVE_FPM${PHP2_SHORTRELEASE}=yes"` + fi + if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + systemctl restart php-fpm${PHP3_SHORTRELEASE}.service + systemctl enable php-fpm${PHP3_SHORTRELEASE}.service + else + ${INITDDIR}/php-fpm${PHP3_SHORTRELEASE} restart + if [ ${OS} = "FreeBSD" ]; then + ${INITDDIR}/php-fpm${PHP3_SHORTRELEASE} restart + elif [ -e /etc/debian_version ]; then + update-rc.d php-fpm${PHP3_SHORTRELEASE} defaults + else + /sbin/chkconfig php-fpm${PHP3_SHORTRELEASE} on + fi + fi + + set_service php-fpm${PHP3_SHORTRELEASE} ON + eval `echo "HAVE_FPM${PHP3_SHORTRELEASE}=yes"` + fi + if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + systemctl restart php-fpm${PHP4_SHORTRELEASE}.service + systemctl enable php-fpm${PHP4_SHORTRELEASE}.service + else + ${INITDDIR}/php-fpm${PHP4_SHORTRELEASE} restart + if [ ${OS} = "FreeBSD" ]; then + ${INITDDIR}/php-fpm${PHP4_SHORTRELEASE} restart + elif [ -e /etc/debian_version ]; then + update-rc.d php-fpm${PHP4_SHORTRELEASE} defaults + else + /sbin/chkconfig php-fpm${PHP4_SHORTRELEASE} on + fi + fi + + set_service php-fpm${PHP4_SHORTRELEASE} ON + eval `echo "HAVE_FPM${PHP4_SHORTRELEASE}=yes"` + fi + + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + EVAL_FPM_VAR=HAVE_FPM${php_shortrelease} + HAVE_SHORTRELEASE="$(eval_var ${EVAL_FPM_VAR})" + if [ "${HAVE_SHORTRELEASE}" = "no" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + systemctl stop php-fpm${php_shortrelease}.service 2> /dev/null + systemctl disable php-fpm${php_shortrelease}.service 2> /dev/null + if [ -e ${INITDDIR}/php-fpm${php_shortrelease} ]; then + rm -f ${INITDDIR}/php-fpm${php_shortrelease} + fi + if [ -e ${SYSTEMDDIR}/php-fpm${php_shortrelease}.service ]; then + rm -f ${SYSTEMDDIR}/php-fpm${php_shortrelease}.service + fi + systemctl daemon-reload + set_service php-fpm${php_shortrelease} delete + else + if [ -e ${INITDDIR}/php-fpm${php_shortrelease} ]; then + if [ -e /etc/debian_version ]; then + update-rc.d php-fpm${php_shortrelease} remove + elif [ -e /sbin/chkconfig ]; then + /sbin/chkconfig php-fpm${php_shortrelease} off + fi + ${INITDDIR}/php-fpm${php_shortrelease} stop + fi + set_service php-fpm${php_shortrelease} delete + rm -f ${INITDDIR}/php-fpm${php_shortrelease} + fi + fi + done + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + # Writing data to suphp.conf + echo -n "" > ${SUPHP_CONF_FILE} + echo "[global]" >> ${SUPHP_CONF_FILE} + echo ";Path to logfile" >> ${SUPHP_CONF_FILE} + echo "logfile=/var/log/suphp.log" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";Loglevel" >> ${SUPHP_CONF_FILE} + echo "loglevel=warn" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";User Apache is running as" >> ${SUPHP_CONF_FILE} + echo "webserver_user=apache" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";Path all scripts have to be in" >> ${SUPHP_CONF_FILE} + echo "docroot=/" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo "; Security options" >> ${SUPHP_CONF_FILE} + echo "allow_file_group_writeable=false" >> ${SUPHP_CONF_FILE} + echo "allow_file_others_writeable=false" >> ${SUPHP_CONF_FILE} + echo "allow_directory_group_writeable=false" >> ${SUPHP_CONF_FILE} + echo "allow_directory_others_writeable=false" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";Check wheter script is within DOCUMENT_ROOT" >> ${SUPHP_CONF_FILE} + echo "check_vhost_docroot=false" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";Send minor error messages to browser" >> ${SUPHP_CONF_FILE} + echo "errors_to_browser=true" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";PATH environment variable" >> ${SUPHP_CONF_FILE} + echo "env_path=\"/bin:/usr/bin\"" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";Umask to set, specify in octal notation" >> ${SUPHP_CONF_FILE} + echo "umask=0022" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";Minimum UID" >> ${SUPHP_CONF_FILE} + echo "min_uid=100" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo ";Minimum GID" >> ${SUPHP_CONF_FILE} + echo "min_gid=100" >> ${SUPHP_CONF_FILE} + echo "" >> ${SUPHP_CONF_FILE} + echo "[handlers]" >> ${SUPHP_CONF_FILE} + echo ";Handler for php-scripts" >> ${SUPHP_CONF_FILE} + + if [ "${PHP1_MODE_OPT}" = "suphp" ]; then + echo "x-httpd-php${PHP1_SHORTRELEASE}=\"php:/usr/local/php${PHP1_SHORTRELEASE}/bin/php-cgi${PHP1_SHORTRELEASE}\"" >> ${SUPHP_CONF_FILE} + fi + if [ "${PHP2_MODE_OPT}" = "suphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + echo "x-httpd-php${PHP2_SHORTRELEASE}=\"php:/usr/local/php${PHP2_SHORTRELEASE}/bin/php-cgi${PHP2_SHORTRELEASE}\"" >> ${SUPHP_CONF_FILE} + fi + if [ "${PHP3_MODE_OPT}" = "suphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + echo "x-httpd-php${PHP3_SHORTRELEASE}=\"php:/usr/local/php${PHP3_SHORTRELEASE}/bin/php-cgi${PHP3_SHORTRELEASE}\"" >> ${SUPHP_CONF_FILE} + fi + if [ "${PHP4_MODE_OPT}" = "suphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + echo "x-httpd-php${PHP4_SHORTRELEASE}=\"php:/usr/local/php${PHP4_SHORTRELEASE}/bin/php-cgi${PHP4_SHORTRELEASE}\"" >> ${SUPHP_CONF_FILE} + fi + + echo "" >> ${SUPHP_CONF_FILE} + echo ";Handler for CGI-scripts" >> ${SUPHP_CONF_FILE} + echo "x-suphp-cgi=\"execute:!self\"" >> ${SUPHP_CONF_FILE} + + # Writing data to /etc/httpd/conf/extra/httpd-suphp.conf + echo "Writing data to ${SUPHP_HTTPD}" + echo -n "" > ${SUPHP_HTTPD} + + echo "" >> ${SUPHP_HTTPD} + echo '' >> ${SUPHP_HTTPD} + if [ "${PHP1_MODE_OPT}" = "suphp" ]; then + echo "AddHandler x-httpd-php${PHP1_SHORTRELEASE} .inc .php .php3 .php4 .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${SUPHP_HTTPD} + fi + echo '' >> ${SUPHP_HTTPD} + + echo "" >> ${SUPHP_HTTPD} + echo "suPHP_Engine on" >> ${SUPHP_HTTPD} + + if [ -d /usr/local/php${PHP1_SHORTRELEASE}/lib ] && [ "${PHP1_MODE_OPT}" = "suphp" ]; then + echo "suPHP_ConfigPath /usr/local/php${PHP1_SHORTRELEASE}/lib/" >> ${SUPHP_HTTPD} + elif [ -d /usr/local/php${PHP2_SHORTRELEASE}/lib ] && [ "${PHP2_MODE_OPT}" = "suphp" ]; then + echo "suPHP_ConfigPath /usr/local/php${PHP2_SHORTRELEASE}/lib/" >> ${SUPHP_HTTPD} + elif [ -d /usr/local/php${PHP3_SHORTRELEASE}/lib ] && [ "${PHP3_MODE_OPT}" = "suphp" ]; then + echo "suPHP_ConfigPath /usr/local/php${PHP3_SHORTRELEASE}/lib/" >> ${SUPHP_HTTPD} + elif [ -d /usr/local/php${PHP4_SHORTRELEASE}/lib ] && [ "${PHP4_MODE_OPT}" = "suphp" ]; then + echo "suPHP_ConfigPath /usr/local/php${PHP4_SHORTRELEASE}/lib/" >> ${SUPHP_HTTPD} + fi + + if [ "${PHP1_MODE_OPT}" = "suphp" ]; then + echo "suPHP_AddHandler x-httpd-php${PHP1_SHORTRELEASE}" >> ${SUPHP_HTTPD} + fi + if [ "${PHP2_MODE_OPT}" = "suphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + echo "suPHP_AddHandler x-httpd-php${PHP2_SHORTRELEASE}" >> ${SUPHP_HTTPD} + fi + if [ "${PHP3_MODE_OPT}" = "suphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + echo "suPHP_AddHandler x-httpd-php${PHP3_SHORTRELEASE}" >> ${SUPHP_HTTPD} + fi + if [ "${PHP4_MODE_OPT}" = "suphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + echo "suPHP_AddHandler x-httpd-php${PHP4_SHORTRELEASE}" >> ${SUPHP_HTTPD} + fi + + echo "" >> ${SUPHP_HTTPD} + echo "" >> ${SUPHP_HTTPD} + echo "Done." + elif [ -e ${SUPHP_HTTPD} ]; then + echo -n "" > ${SUPHP_HTTPD} + fi + fi + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + OPENLITESPEED_EXTPROCESSORS=${LSWS_HOME}/conf/httpd-extprocessors.conf + echo -n '' > ${OPENLITESPEED_EXTPROCESSORS} + if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP1_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_WEBAPPS_EXTPROCESSOR_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS} + echo '' >> ${OPENLITESPEED_EXTPROCESSORS} + perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP1_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_EXTPROCESSORS_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS} + echo '' >> ${OPENLITESPEED_EXTPROCESSORS} + #CloudLinux PHP selector support needs /usr/local/bin/lsphp as the path + perl -pi -e "s#/usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp#/usr/local/bin/lsphp#g" ${OPENLITESPEED_EXTPROCESSORS} + fi + if [ "${PHP2_MODE_OPT}" = "lsphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then + perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP2_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_EXTPROCESSORS_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS} + echo '' >> ${OPENLITESPEED_EXTPROCESSORS} + fi + if [ "${PHP3_MODE_OPT}" = "lsphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then + perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP3_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_EXTPROCESSORS_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS} + echo '' >> ${OPENLITESPEED_EXTPROCESSORS} + fi + if [ "${PHP4_MODE_OPT}" = "lsphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then + perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP4_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_EXTPROCESSORS_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS} + echo '' >> ${OPENLITESPEED_EXTPROCESSORS} + fi + + OPENLITESPEED_SCRIPTHANDLER=${LSWS_HOME}/conf/httpd-scripthandler.conf + echo 'scriptHandler{' > ${OPENLITESPEED_SCRIPTHANDLER} + echo "add lsapi:lsphp${PHP1_SHORTRELEASE} php" >> ${OPENLITESPEED_SCRIPTHANDLER} + echo 'add lsapi:lsphpwebapps lsphpwebapps' >> ${OPENLITESPEED_SCRIPTHANDLER} + echo '}' >> ${OPENLITESPEED_SCRIPTHANDLER} + fi + + if [ "${SECURE_PHP_OPT}" = "yes" ]; then + secure_php + fi +} + +#################################################### +add_alias_redirect() { + AF=$1 + A=$2 + P=$3 + + HTTP=http:// + if [ "${REDIRECT_HOST_HTTPS_OPT}" = "yes" ]; then + HTTP=https:// + fi + + HOST_ALIAS=no + if [ "${USE_HOSTNAME_FOR_ALIAS_OPT}" = "yes" ]; then + HOST_ALIAS=yes + fi + + IS_WELL_KNOWN=no + if [ "${P}" = ".well-known/acme-challenge" ]; then + IS_WELL_KNOWN=yes + fi + + if [ "${HOST_ALIAS}" = "yes" ] && [ "${IS_WELL_KNOWN}" = "no" ]; then + echo "RewriteCond %{HTTP_HOST} !^${REDIRECT_HOST_OPT}\$" >> ${AF} + + echo "RewriteCond %{REQUEST_URI} ^/${A}/ [OR]" >> ${AF} + echo "RewriteCond %{REQUEST_URI} ^/${A}\$" >> ${AF} + + echo "RewriteRule ^/${A}(.*) ${HTTP}${REDIRECT_HOST_OPT}/${P}\$1" >> ${AF} + + echo "" >> ${AF} + fi + + #For let's encrypt challenges + if [ "${IS_WELL_KNOWN}" = "yes" ]; then + LETSENCRYPT=`getDA_Opt letsencrypt 1` + if [ "${LETSENCRYPT}" = "1" ]; then + echo "Alias /${A} /var/www/html/${P}" >> ${AF} + fi + return; + fi + + # "! -e /var/www/html/${A}" is used to add Alias'es for the RewriteRules that don't have /var/www/html/ALIAS + if [ "${HOST_ALIAS}" = "no" ] || [ ! -e /var/www/html/${A} ]; then + echo "Alias /${A} /var/www/html/${P}" >> ${AF} + fi +} + +do_rewrite_httpd_alias() { + if [ -e ${WORKDIR}/custom/ap2/conf/extra/httpd-alias.conf ]; then + cp -pf ${WORKDIR}/custom/ap2/conf/extra/httpd-alias.conf /etc/httpd/conf/extra/httpd-alias.conf + else + HA=/etc/httpd/conf/extra/httpd-alias.conf + + echo -n '' > ${HA} + + if [ "${USE_HOSTNAME_FOR_ALIAS_OPT}" = "yes" ]; then + echo "RewriteEngine On" >> ${HA} + fi + + #For let's encrypt challenges + LETSENCRYPT=`getDA_Opt letsencrypt 1` + if [ "${LETSENCRYPT}" = "1" ]; then + add_alias_redirect ${HA} .well-known/acme-challenge .well-known/acme-challenge + fi + add_alias_redirect ${HA} config redirect.php + + if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then + add_alias_redirect ${HA} squirrelmail squirrelmail + fi + + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + add_alias_redirect ${HA} roundcube roundcube + fi + + WEBMAILLINK=`get_webmail_link` + if [ -e /var/www/html/${WEBMAILLINK} ]; then + add_alias_redirect ${HA} webmail ${WEBMAILLINK} + fi + + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + add_alias_redirect ${HA} phpMyAdmin phpMyAdmin + add_alias_redirect ${HA} phpmyadmin phpMyAdmin + add_alias_redirect ${HA} pma phpMyAdmin + fi + + if [ -s "${WEBAPPS_LIST}" ]; then + #https://forum.directadmin.com/showthread.php?t=48203&p=247343#post247343 + echo "Adding custom webapps from ${WEBAPPS_LIST}" + + cat ${WEBAPPS_LIST} | while read l; do + app=`echo "$l" | cut -d= -f1` + app_path=`echo "$l" | cut -d= -f2` + + if [ "${app}" = "" ] || [ "${app_path}" = "" ]; then + echo "${boldon}Check your ${WEBAPPS_LIST}. A name or path is blank.${boldoff}" + echo "name=$app" + echo "path=$app_path" + continue + fi + + if [ ! -e /var/www/html/${app_path} ]; then + echo "${boldon}Cannot find path /var/www/html/${app_path} for alias ${app}${boldoff}" + continue + fi + + add_alias_redirect ${HA} ${app} ${app_path} + echo "Added ${app} pointing to ${app_path}" + done + fi + fi +} + +add_nginx_alias_redirect() { + #A fake P real + F=$1 + A=$2 + P=$3 + + #Locations with regex have higher priority for URL-rewrites/aliases + printf "\tlocation ~ ^/${A} {\n" >> ${F} + printf "\t\trewrite ^/* /${P} last;\n" >> ${F} + printf "\t}\n" >> ${F} +} + +add_nginx_alias() { + F=$1 + A=$2 + + #Locations with regex (~ ^/alias) have higher priority for URL-rewrites/aliases + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + printf "\tlocation ^~ /${A} {\n" >> ${F} + printf "\t\troot /var/www/html/;\n" >> ${F} + printf "\t\tindex index.php index.html index.htm;\n" >> ${F} + printf "\t\tlocation ~ ^/${A}/(.+\.php)\$ {\n" >> ${F} + printf "\t\t\tinclude /etc/nginx/webapps_settings.conf;\n" >> ${F} + printf "\t\t}\n" >> ${F} + #protect RoundCube folders + if [ "${A}" = "roundcube" ]; then + printf "\t\tlocation ~ /${A}/(bin|SQL|config|logs|temp)/ {\n" >> ${F} + printf "\t\t\tdeny all;\n" >> ${F} + printf "\t\t}\n" >> ${F} + elif [ "${A}" = "phpMyAdmin" ]; then + printf "\t\tlocation ~ /${A}/log/ {\n" >> ${F} + printf "\t\t\tdeny all;\n" >> ${F} + printf "\t\t}\n" >> ${F} + fi + printf "\t\tlocation ~* ^/${A}/(.*(\.htaccess|\.htpasswd|\.user\.ini|\.env|\.git))\$ {\n" >> ${F} + printf "\t\t\tdeny all;\n" >> ${F} + printf "\t\t}\n" >> ${F} + printf "\t\tlocation ~* ^/${A}/(.+\\.(jpg|jpeg|gif|css|png|js|ico|html|webp|xml|txt))\$ {\n" >> ${F} + printf "\t\t\troot /var/www/html/;\n" >> ${F} + printf "\t\t}\n" >> ${F} + printf "\t}\n" >> ${F} + elif [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + getWebserverPorts + printf "\tlocation ^~ /${A} {\n" >> ${F} + printf "\t\troot /var/www/html/;\n" >> ${F} + printf "\t\tindex index.php index.html index.htm;\n" >> ${F} + printf "\t\tlocation ~ ^/${A}/ {\n" >> ${F} + printf "\t\t\taccess_log off;\n" >> ${F} + printf "\t\tset \$my_server_addr \$server_addr;\n" >> ${F} + printf "\t\tif (\$server_addr ~ ^[0-9a-fA-F:]+$) { set \$my_server_addr [\$server_addr]; }\n" >> ${F} + printf "\t\t\tproxy_pass http://\$my_server_addr:${PORT_8080};\n" >> ${F} + printf "\t\t\tproxy_set_header X-Client-IP \$remote_addr;\n" >> ${F} + printf "\t\t\tproxy_set_header X-Accel-Internal /$A/nginx_static_files;\n" >> ${F} + printf "\t\t\tproxy_set_header Host\t \$host;\n" >> ${F} + printf "\t\t\tproxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;\n" >> ${F} + printf "\t\t\tproxy_hide_header Upgrade;\n" >> ${F} + printf "\t\t}\n" >> ${F} + printf "\t\tlocation ~ ^/${A}/nginx_static_files/ {\n" >> ${F} + printf "\t\t\taccess_log /var/log/nginx/access_log_proxy;\n" >> ${F} + printf "\t\t\talias /var/www/html/;\n" >> ${F} + printf "\t\t\tinternal;\n" >> ${F} + printf "\t\t}\n" >> ${F} + + printf "\t}\n" >> ${F} + fi +} + +do_rewrite_nginx_webapps() { + if [ -e ${WORKDIR}/custom/nginx/conf/webapps.conf ] && [ "${WEBSERVER_OPT}" = "nginx" ]; then + cp -pf ${WORKDIR}/custom/nginx/conf/webapps.conf /etc/nginx/webapps.conf + elif [ -e ${WORKDIR}/custom/nginx_reverse/conf/webapps.conf ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + cp -pf ${WORKDIR}/custom/nginx_reverse/conf/webapps.conf /etc/nginx/webapps.conf + else + NW=/etc/nginx/webapps.conf + + : > ${NW} + #block .htaccess and .user.ini + printf '\tlocation ~ /(\\.htaccess|\\.htpasswd|\\.user\\.ini|\\.env|\\.git) {\n' >> ${NW} + printf '\t\tdeny all;\n' >> ${NW} + printf '\t}\n' >> ${NW} + + #For let's encrypt challenges + LETSENCRYPT=`getDA_Opt letsencrypt 1` + if [ "${LETSENCRYPT}" = "1" ]; then + add_nginx_alias ${NW} .well-known/acme-challenge + fi + + if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then + add_nginx_alias ${NW} squirrelmail + fi + + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + add_nginx_alias ${NW} roundcube + fi + + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + add_nginx_alias ${NW} phpMyAdmin + add_nginx_alias_redirect ${NW} phpmyadmin phpMyAdmin + add_nginx_alias_redirect ${NW} pma phpMyAdmin + fi + + WEBMAILLINK=`get_webmail_link` + if [ -e /var/www/html/${WEBMAILLINK} ]; then + if [ "${WEBMAILLINK}" = "webmail" ]; then + add_nginx_alias ${NW} webmail + else + add_nginx_alias_redirect ${NW} webmail ${WEBMAILLINK} + fi + fi + + if [ "${HTTP_METHODS_OPT}" != "ALL" ]; then + NGINX_HTTP_METHODS="`echo ${HTTP_METHODS_OPT} | tr ':' '|'`" + printf "\tif (\$request_method !~ ^(${NGINX_HTTP_METHODS})\$ ) {\n" >> ${NW} + printf '\t\treturn 444;\n' >> ${NW} + printf '\t}\n' >> ${NW} + fi + fi + + WAHC=webapps.hostname.conf + if [ -e ${WORKDIR}/custom/nginx/conf/${WAHC} ] && [ "${WEBSERVER_OPT}" = "nginx" ]; then + cp -pf ${WORKDIR}/custom/nginx/conf/${WAHC} /etc/nginx/${WAHC} + elif [ -e ${WORKDIR}/custom/nginx_reverse/conf/${WAHC} ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + cp -pf ${WORKDIR}/custom/nginx_reverse/conf/${WAHC} /etc/nginx/${WAHC} + else + #In nginx-vhosts.conf we don't need to have "real" alias specified, because they already exist when acessing http://IP or http://hostname + NW_HOSTNAME=/etc/nginx/${WAHC} + : > ${NW_HOSTNAME} + + #block .htaccess and .user.ini + printf '\tlocation ~ /(\\.htaccess|\\.htpasswd|\\.user\\.ini|\\.env|\\.git) {\n' >> ${NW_HOSTNAME} + printf '\t\tdeny all;\n' >> ${NW_HOSTNAME} + printf '\t}\n' >> ${NW_HOSTNAME} + + #protect other places + printf '\tlocation ~ /(roundcube|webmail)/(bin|SQL|config|logs|temp)/ {\n' >> ${NW_HOSTNAME} + printf '\t\tdeny all;\n' >> ${NW_HOSTNAME} + printf '\t}\n' >> ${NW_HOSTNAME} + + printf '\tlocation ~ /phpMyAdmin/log/ {\n' >> ${NW_HOSTNAME} + printf '\t\tdeny all;\n' >> ${NW_HOSTNAME} + printf '\t}\n' >> ${NW_HOSTNAME} + + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + add_nginx_alias_redirect ${NW_HOSTNAME} phpmyadmin phpMyAdmin + add_nginx_alias_redirect ${NW_HOSTNAME} pma phpMyAdmin + fi + + WEBMAILLINK=`get_webmail_link` + if [ ! -e /var/www/html/${WEBMAILLINK} ] && [ "${WEBMAILLINK}" != "webmail" ]; then + add_nginx_alias_redirect ${NW_HOSTNAME} webmail ${WEBMAILLINK} + fi + + if [ -s "${WEBAPPS_LIST}" ]; then + #https://forum.directadmin.com/showthread.php?t=48203&p=247343#post247343 + echo "Adding custom webapps from ${WEBAPPS_LIST}" + + cat ${WEBAPPS_LIST} | while read l; do + app=`echo "$l" | cut -d= -f1` + app_path=`echo "$l" | cut -d= -f2` + + if [ "${app}" = "" ] || [ "${app_path}" = "" ]; then + echo "${boldon}Check your ${WEBAPPS_LIST}. A name or path is blank.${boldoff}" + echo "name=$app" + echo "path=$app_path" + continue + fi + + if [ ! -e /var/www/html/${app_path} ]; then + echo "${boldon}Cannot find path /var/www/html/${app_path} for alias ${app}${boldoff}" + continue + fi + + if [ -e /var/www/html/${app} ] && [ "${app}" = "${app_path}" ]; then + add_nginx_alias ${NW} ${app} + else + add_nginx_alias_redirect ${NW} ${app} ${app_path} + fi + echo "Added ${app} pointing to ${app_path}" + done + fi + + if [ "${HTTP_METHODS_OPT}" != "ALL" ]; then + NGINX_HTTP_METHODS="`echo ${HTTP_METHODS_OPT} | tr ':' '|'`" + printf "\tif (\$request_method !~ ^(${NGINX_HTTP_METHODS})\$ ) {\n" >> ${NW_HOSTNAME} + printf '\t\treturn 444;\n' >> ${NW_HOSTNAME} + printf '\t}\n' >> ${NW_HOSTNAME} + fi + fi + + cp -pf /etc/nginx/webapps.conf /etc/nginx/webapps.ssl.conf + getWebserverPorts + perl -pi -e "s|:${PORT_8080}|:${PORT_8081}|" /etc/nginx/webapps.ssl.conf + perl -pi -e 's|http:|https:|' /etc/nginx/webapps.ssl.conf + + if [ "${HAVE_FPM_CGI}" = "yes" ]; then + #update the webapps_settings.conf + #swap "fastcgi_pass unix:/usr/local/php54/sockets/webapps.sock;" if needed + #might be a better way to do this, other checks. Close enough for now. + + PHP_REPLACE_STRING="`grep -m1 '^fastcgi_pass unix:/usr/local/php../sockets/webapps.sock;' /etc/nginx/webapps_settings.conf | cut -d/ -f4`" + if [ "${PHP_REPLACE_STRING}" = "" ]; then + PHP_REPLACE_STRING=php54 + fi + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + perl -pi -e "s#${PHP_REPLACE_STRING}#php${PHP1_SHORTRELEASE}#" /etc/nginx/webapps_settings.conf + fi + fi +} + +#################################################### + +create_httpd_nginx() { + CONF_FILE=${HTTPDCONF}/extra/httpd-nginx.conf + echo -n '' > ${CONF_FILE} + + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ ! -e /usr/lib/apache/mod_aclr2.so ]; then + doModAclr2 + elif [ -s ${STRINGS} ]; then + if ! ${STRINGS} /usr/lib/apache/mod_aclr2.so | grep -q -m1 'memmove'; then + doModAclr2 + fi + fi + echo 'LoadModule aclr_module /usr/lib/apache/mod_aclr2.so' >> ${CONF_FILE} + echo 'AccelRedirectSet On' >> ${CONF_FILE} + echo 'AccelRedirectSize 1k' >> ${CONF_FILE} + echo 'RemoteIPHeader X-Client-IP' >> ${CONF_FILE} + echo 'RemoteIPInternalProxy 127.0.0.1' >> ${CONF_FILE} + if [ "${IPV6}" = "1" ]; then + echo 'RemoteIPInternalProxy ::1' >> ${CONF_FILE} + fi + echo 'RemoteIPInternalProxyList /usr/local/directadmin/data/admin/ip.list' >> ${CONF_FILE} + fi +} + +ensure_dhparam() { + DHF=$1 + MD5="6377960551b81b27240486a0e2680ef8" + if [ -s ${DHF} ]; then + if [ ${OS} = "FreeBSD" ]; then + FMD5=`$MD5SUM -q ${DHF}` + else + FMD5=`$MD5SUM ${DHF} | cut -d\ -f1` + fi + else + FMD5="" + fi + if [ "${MD5}" != "${FMD5}" ]; then + curl ${CURL_CONNECT_OPTIONS} --silent -o ${DHF} ${WEBPATH}/dhe/ffdhe4096.pem + fi + if [ ! -s ${DHF} ]; then + echo "Creating dhparam in ${DHF}" + /usr/bin/openssl dhparam -out ${DHF} 4096 + fi +} + +ensure_ecparam() { + ECF=$1 + if [ ! -s ${ECF} ]; then + echo "Creating ecparam in ${ECF}"; + openssl ecparam -out ${ECF} -name prime256v1 -genkey + fi +} + +check_http2_prefork_message() { + initHTTP2var + if [ "${HTTP2}" = "1" ] && [ "${WEBSERVER_OPT}" = "apache" ]; then + echo "**************************************" + echo "" + echo "${boldon}Apache 2.4.27 and higher will not negotiate http2 with mpm_prefork. Please do not use mod_php${boldoff} or disable http2 in the directadmin.conf"; + echo "https://www.apache.org/dist/httpd/CHANGES_2.4.27" + echo "" + echo "**************************************" + fi +} + +set_apache_mpm() { + if ! grep -m1 -q '/usr/lib/apache/mod_mpm_' ${PHPMODULES}; then + #Use event MPM for php-fpm and prefork for mod_php + if [ "${APACHE_MPM_OPT}" = "auto" ]; then + if [ "${HAVE_CLI}" = "no" ]; then + set_LoadModule mpm_event_module mod_mpm_event.so + else + set_LoadModule mpm_prefork_module mod_mpm_prefork.so + check_http2_prefork_message + fi + elif [ "${APACHE_MPM_OPT}" = "event" ]; then + set_LoadModule mpm_event_module mod_mpm_event.so + elif [ "${APACHE_MPM_OPT}" = "worker" ]; then + set_LoadModule mpm_worker_module mod_mpm_worker.so + else + set_LoadModule mpm_prefork_module mod_mpm_prefork.so + check_http2_prefork_message + fi + else + if [ "${APACHE_MPM_OPT}" = "auto" ]; then + if [ "${HAVE_CLI}" = "no" ]; then + MPM_NAME=event + else + MPM_NAME=prefork + fi + else + MPM_NAME=${APACHE_MPM_OPT} + fi + if ! grep -m1 -q "mpm_${MPM_NAME}_module" ${PHPMODULES}; then + if grep -m1 -q 'LoadModule mpm_[a-z]*_module /usr/lib/apache/mod_mpm_[a-z]*.so' ${PHPMODULES}; then + perl -pi -e "s#LoadModule mpm_[a-z]*_module /usr/lib/apache/mod_mpm_[a-z]*.so#LoadModule mpm_${MPM_NAME}_module /usr/lib/apache/mod_mpm_${MPM_NAME}.so#" ${PHPMODULES} + fi + fi + fi +} + +initHTTP2var() { + DEFAULT_HTTP2=1 + if [ "${OS_CENTOS_VER}" = "6" ]; then + DEFAULT_HTTP2=0 + elif [ "${OS_CENTOS_VER}" = "7" ]; then + #Only CentOS 7.3 started to support ALPN (OpenSSL 1.0.2k) + OPENSSL_H=/usr/include/openssl/ssl.h + if [ -e ${OPENSSL_H} ]; then + if ! grep -m1 -q alpn_client_proto_list_len ${OPENSSL_H}; then + DEFAULT_HTTP2=0 + fi + fi + fi + + HTTP2=`getDA_Opt http2 ${DEFAULT_HTTP2}` +} + +set_http2() { + initHTTP2var + HTTP2_DACONF=1 + if [ -s ${DACONF_FILE} ]; then + if grep -q -m1 'http2=0' ${DACONF_FILE}; then + HTTP2_DACONF=0 + fi + fi + if [ "${OS_CENTOS_VER}" = "6" ]; then + HTTP2_DACONF=0 + fi + + if [ ${HTTP2_DACONF} -ne 0 ] && [ "${DEFAULT_HTTP2}" = "1" ] && [ -s ${DACONF_FILE} ] && [ "${OS_CENTOS_VER}" != "6" ]; then + if ! grep -q -m1 'http2=1' ${DACONF_FILE}; then + echo "Enabling http2 in directadmin.conf." + setVal http2 1 ${DACONF_TEMPLATE_FILE} + setVal http2 1 ${DACONF_FILE} + doRestartDA + HTTP2=1 + fi + elif [ ! -s ${DACONF_FILE} ]; then + if [ "${OS_CENTOS_VER}" = "6" ]; then + HTTP2=0 + else + HTTP2=1 + fi + elif [ "${OS_CENTOS_VER}" = "6" ]; then + HTTP2=0 + else + HTTP2=1 + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${APACHE_VER_OPT}" = "2.4" ] && [ "${HTTP2}" = "1" ] && [ "${APACHE_MPM_OPT}" != "prefork" ] && [ "${PHP1_MODE_OPT}" != "mod_php" ] && [ -d /etc/httpd/conf/extra ]; then + if ! grep -m1 -q 'ProtocolsHonorOrder' ${PHPMODULES}; then + echo 'ProtocolsHonorOrder On' >> ${PHPMODULES} + echo 'Protocols h2 h2c http/1.1' >> ${PHPMODULES} + fi + fi + fi +} + +rewrite_phpmodules() { + echo -n "" > ${PHPMODULES} + + if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + set_LoadModule suphp_module mod_suphp.so + fi + + set_http2 + + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + set_LoadModule ruid2_module mod_ruid2.so + if ! grep -m1 -q '^Mutex ' ${PHPMODULES}; then + echo "Mutex posixsem" >> ${PHPMODULES} + fi + fi + + if [ "${MOD_RUID2_OPT}" = "no" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + if ! grep -m1 -q '^Mutex ' ${PHPMODULES}; then + echo "Mutex posixsem" >> ${PHPMODULES} + fi + fi + + if [ "`version_cmp ${APACHE2_VER} 2.4.43`" -lt 0 ]; then + if [ "${SYSTEMD}" = "yes" ] && [ -e /usr/lib/apache/mod_systemd.so ]; then + set_LoadModule systemd_module mod_systemd.so + fi + elif [ -s ${PHPMODULES} ]; then + if grep -m1 -q mod_systemd ${PHPMODULES}; then + sed -i "/^mod_systemd/d" ${PHPMODULES} + fi + fi + + if [ "${MODSECURITY_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if grep -m1 -q "^LoadModule security2_module" /etc/httpd/conf/httpd.conf; then + perl -pi -e 's|^LoadModule security2_module|#LoadModule security2_module|' /etc/httpd/conf/httpd.conf + fi + echo "Include /etc/httpd/conf/extra/httpd-modsecurity.conf" >> ${PHPMODULES} + cp -pf ${MODSECURITY_APACHE_INCLUDE} /etc/httpd/conf/extra/httpd-modsecurity.conf + if [ -e /usr/lib/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then + perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + elif [ -e /usr/lib64/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then + perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib64/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + elif [ -e /usr/lib/x86_64-linux-gnu/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then + perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/x86_64-linux-gnu/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + perl -pi -e 's|^Load|#Load|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + fi + doModSecurityRules norestart + elif [ -s /etc/httpd/conf/extra/httpd-modsecurity.conf ]; then + if grep -m1 -q '^LoadModule security2_module' /etc/httpd/conf/extra/httpd-modsecurity.conf; then + perl -pi -e 's|^Load|#Load|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + fi + fi + elif [ -s /etc/httpd/conf/extra/httpd-modsecurity.conf ]; then + if grep -m1 -q '^LoadModule security2_module' /etc/httpd/conf/extra/httpd-modsecurity.conf; then + perl -pi -e 's|^Load|#Load|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + fi + fi + + if [ "${HTSCANNER_OPT}" = "yes" ]; then + if [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_FPM_CGI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + set_LoadModule htscanner_module mod_htscanner2.so + fi + fi + + set_apache_mpm + + perl -pi -e 's/^LoadModule php4/\#LoadModule php4/' /etc/httpd/conf/httpd.conf + perl -pi -e 's/^LoadModule php5/\#LoadModule php5/' /etc/httpd/conf/httpd.conf + perl -pi -e 's/^LoadModule php7/\#LoadModule php7/' /etc/httpd/conf/httpd.conf + perl -pi -e 's/^LoadModule php8/\#LoadModule php8/' /etc/httpd/conf/httpd.conf + + # Add correct php module to httpd-phpmodules.conf + if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then + if echo "${PHP1_RELEASE_OPT}" | grep -m1 -q '^5'; then + set_LoadModule php5_module libphp5.so + elif echo "${PHP1_RELEASE_OPT}" | grep -m1 -q '^7'; then + set_LoadModule php7_module libphp7.so + else + set_LoadModule php8_module libphp8.so + fi + fi + + if [ "${HAVE_FCGID}" = "yes" ]; then + if ! grep -m1 -c 'fcgid_module' ${PHPMODULES}; then + set_LoadModule fcgid_module mod_fcgid.so + fi + if ! grep -m1 -c 'httpd-fcgid.conf' ${PHPMODULES}; then + echo "Include /etc/httpd/conf/extra/httpd-fcgid.conf" >> ${PHPMODULES} + fi + fi + + set_http2 +} + +doImportCipherSuites() { + SSL_CONFIGURATION_OPT_UP="`echo ${SSL_CONFIGURATION_OPT} | tr '[a-z]' '[A-Z]'`" + + #older boxes might not support intermediate or modern. Rewriting with either may kill those services. + #must have OpenSSL 1.0.1 or higher for intermedaite+ + if [ "${SSL_CONFIGURATION_OPT_UP}" = "INTERMEDIATE" ] || [ "${SSL_CONFIGURATION_OPT_UP}" = "MODERN" ]; then + OV=`openssl_version` + if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.0.1 'doImportCipherSuites check for openssl 1.0.1 ver check'`" -lt 0 ]; then + echo "${boldon}*** ssl_configuration=${SSL_CONFIGURATION_OPT_UP} will try to use TLSv1.2, which your OpenSSL version ${OV} does not support.${boldoff}" + echo "${boldon}Dropping this write down to ssl_configuration=old. You may want to make this permanent: './build set ssl_configuration old' or update your OS${boldoff}" + SSL_CONFIGURATION_OPT_UP=OLD + fi + fi + + #MODERN is not there, as it's the default (empty) in service configuration + INTERMEDIATE_CIPHERSUITE="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256" + OLD_CIPHERSUITE="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA" +} + +doSslConfigurationWebserver() { + doImportCipherSuites + #Do cleanup of old files in configure/ap2/conf/extra/ direcotry + if [ -e configure/ap2/conf/extra/httpd-ssl-protocol.old.conf ]; then + rm -f configure/ap2/conf/extra/httpd-ssl-protocol.old.conf + fi + if [ -e configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf ]; then + rm -f configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf + fi + if [ -e configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf ]; then + rm -f configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf + fi + + MODERN_APACHE_SSL_PROTOCOLS="SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2" + MODERN_APACHE_SSL_CIPHERSUITE="" + MODERN_NGINX_SSL_PROTOCOLS="ssl_protocols TLSv1.3;" + MODERN_NGINX_SSL_CIPHERSUITE="" + MODERN_OLS_SSL_PROTOCOLS="sslProtocol 16" + MODERN_OLS_SSL_CIPHERSUITE="" + + INTERMEDIATE_APACHE_SSL_PROTOCOLS="SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1" + INTERMEDIATE_APACHE_SSL_CIPHERSUITE="SSLCipherSuite ${INTERMEDIATE_CIPHERSUITE}" + INTERMEDIATE_NGINX_SSL_PROTOCOLS="ssl_protocols TLSv1.2 TLSv1.3;" + INTERMEDIATE_NGINX_SSL_CIPHERSUITE="ssl_ciphers ${INTERMEDIATE_CIPHERSUITE};" + INTERMEDIATE_OLS_SSL_PROTOCOLS="sslProtocol 24" + INTERMEDIATE_OLS_SSL_CIPHERSUITE="ciphers ${INTERMEDIATE_CIPHERSUITE}" + + OLD_APACHE_SSL_PROTOCOLS="SSLProtocol all -SSLv3" + OLD_APACHE_SSL_CIPHERSUITE="SSLCipherSuite ${OLD_CIPHERSUITE}" + OLD_NGINX_SSL_PROTOCOLS="ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;" + OLD_NGINX_SSL_CIPHERSUITE="ssl_ciphers ${OLD_CIPHERSUITE};" + OLD_OLS_SSL_PROTOCOLS="sslProtocol 30" + OLD_OLS_SSL_CIPHERSUITE="ciphers ${OLD_CIPHERSUITE}" + + APACHE_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_APACHE_SSL_PROTOCOLS)" + APACHE_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_APACHE_SSL_CIPHERSUITE)" + NGINX_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_NGINX_SSL_PROTOCOLS)" + NGINX_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_NGINX_SSL_CIPHERSUITE)" + OLS_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_OLS_SSL_PROTOCOLS)" + OLS_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_OLS_SSL_CIPHERSUITE)" + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ ! -e ${WORKDIR}/custom/ap2/conf/extra/httpd-ssl.conf ]; then + perl -pi -e "s|^SSLProtocol.*|${APACHE_SSL_PROTOCOLS}|g" /etc/httpd/conf/extra/httpd-ssl.conf + perl -pi -e "s|^SSLCipherSuite.*|${APACHE_SSL_CIPHERSUITE}|g" /etc/httpd/conf/extra/httpd-ssl.conf + if [ -s /etc/httpd/conf/ssl.crt/server.crt.combined ]; then + perl -pi -e 's|/etc/httpd/conf/ssl\.crt/server\.crt$|/etc/httpd/conf/ssl.crt/server.crt.combined|g' /etc/httpd/conf/extra/httpd-ssl.conf + perl -pi -e 's|^SSLCACertificateFile|#SSLCACertificateFile|g' /etc/httpd/conf/extra/httpd-ssl.conf + perl -pi -e 's|/etc/httpd/conf/ssl\.crt/server\.crt$|/etc/httpd/conf/ssl.crt/server.crt.combined|g' /etc/httpd/conf/extra/httpd-vhosts.conf + perl -pi -e 's| SSLCACertificateFile| #SSLCACertificateFile|g' /etc/httpd/conf/extra/httpd-vhosts.conf + fi + if ! grep -m1 -q 'SSLOpenSSLConfCmd' /etc/httpd/conf/extra/httpd-ssl.conf; then + # Needs OpenSSL 1.0.2 or higher + OV=`openssl_version` + if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.0.2 'apache SSLOpenSSLConfCmd support for openssl 1.0.2 ver check'`" -ge 0 ]; then + echo 'SSLOpenSSLConfCmd DHParameters "/etc/httpd/conf/ssl.crt/dhparams.pem"' >> /etc/httpd/conf/extra/httpd-ssl.conf + fi + fi + fi + if [ "${WEBSERVER_OPT}" = "nginx_apache" ] && [ ! -e ${WORKDIR}/custom/nginx_reverse/conf/nginx-defaults.conf ]; then + perl -pi -e "s|^ssl_protocols.*|${NGINX_SSL_PROTOCOLS}|g" /etc/nginx/nginx-defaults.conf + perl -pi -e "s|^ssl_ciphers.*|${NGINX_SSL_CIPHERSUITE}|g" /etc/nginx/nginx-defaults.conf + fi + fi + + if [ "${WEBSERVER_OPT}" = "nginx" ] && [ ! -e ${WORKDIR}/custom/nginx/conf/nginx-defaults.conf ]; then + perl -pi -e "s|^ssl_protocols.*|${NGINX_SSL_PROTOCOLS}|g" /etc/nginx/nginx-defaults.conf + perl -pi -e "s|^ssl_ciphers.*|${NGINX_SSL_CIPHERSUITE}|g" /etc/nginx/nginx-defaults.conf + fi + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ] && [ ! -e ${WORKDIR}/openlitespeed/conf/httpd-vhosts.conf ]; then + perl -pi -e "s| sslProtocol.*| ${OLS_SSL_PROTOCOLS}|g" /usr/local/lsws/conf/httpd-vhosts.conf + perl -pi -e "s| ciphers.*| ${OLS_SSL_CIPHERSUITE}|g" /usr/local/lsws/conf/httpd-vhosts.conf + fi +} + +doSslConfigurationFtp() { + doImportCipherSuites + MODERN_PROFTPD_SSL_PROTOCOLS="TLSProtocol ALL -TLSv1 -TLSv1.1 -TLSv1.2" + MODERN_PROFTPD_SSL_CIPHERSUITE="" + MODERN_PUREFTPD_SSL_CIPHERSUITE="" + + INTERMEDIATE_PROFTPD_SSL_PROTOCOLS="TLSProtocol ALL -TLSv1 -TLSv1.1" + IMTERMEDIATE_PROFTPD_SSL_CIPHERSUITE="TLSCipherSuite ${INTERMEDIATE_CIPHERSUITE}" + INTERMEDIATE_PUREFTPD_SSL_CIPHERSUITE="TLSCipherSuite HIGH" + + OLD_PROFTPD_SSL_PROTOCOLS="TLSProtocol ALL" + OLD_PROFTPD_SSL_CIPHERSUITE="TLSCipherSuite ${OLD_CIPHERSUITE}" + OLD_PUREFTPD_SSL_CIPHERSUITE="TLSCipherSuite HIGH:MEDIUM:+TLSv1" + + PROFTPD_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_PROFTPD_SSL_PROTOCOLS)" + PROFTPD_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_PROFTPD_SSL_CIPHERSUITE)" + + PUREFTPD_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_PUREFTPD_SSL_CIPHERSUITE)" + + if [ "${FTPD_OPT}" = "proftpd" ] && [ ! -e ${WORKDIR}/custom/proftpd/conf/proftpd.conf ]; then + perl -pi -e "s|TLSCipherSuite .*|${PROFTPD_SSL_CIPHERSUITE}|g" /etc/proftpd.conf + perl -pi -e "s|TLSProtocol .*|${PROFTPD_SSL_PROTOCOLS}|g" /etc/proftpd.conf + if openssl x509 -in /etc/exim.cert -text -noout | grep -i 'Public Key Algorithm' | grep -q 'ecPub'; then + perl -pi -e 's|TLSRSACertificateFile|TLSECCertificateFile|g' /etc/proftpd.conf + perl -pi -e 's|TLSRSACertificateKeyFile|TLSECCertificateKeyFile|g' /etc/proftpd.conf + else + perl -pi -e 's|TLSECCertificateFile|TLSRSACertificateFile|g' /etc/proftpd.conf + perl -pi -e 's|TLSECCertificateKeyFile|TLSRSACertificateKeyFile|g' /etc/proftpd.conf + fi + elif [ "${FTPD_OPT}" = "pureftpd" ] && [ ! -e ${WORKDIR}/custom/pureftpd/pure-ftpd.conf ] && [ -s /etc/pure-ftpd.conf ]; then + perl -pi -e "s|^TLSCipherSuite.*|${PUREFTPD_SSL_CIPHERSUITE}|g" /etc/pure-ftpd.conf + fi +} + +doSslConfigurationEmail() { + doImportCipherSuites + MODERN_DOVECOT_SSL_PROTOCOLS="ssl_min_protocol = TLSv1.3" + MODERN_DOVECOT_SSL_CIPHERSUITE="" + MODERN_EXIM_SSL_PROTOCOLS="openssl_options = +no_sslv2 +no_sslv3 +no_tlsv1 +no_tlsv1_1 +no_tlsv1_2 +cipher_server_preference" + MODERN_EXIM_SSL_CIPHERSUITE="" + + INTERMEDIATE_DOVECOT_SSL_PROTOCOLS="ssl_min_protocol = TLSv1.2" + INTERMEDIATE_DOVECOT_SSL_CIPHERSUITE="ssl_cipher_list = ${INTERMEDIATE_CIPHERSUITE}" + INTERMEDIATE_EXIM_SSL_PROTOCOLS="openssl_options = +no_sslv2 +no_sslv3 +no_tlsv1 +no_tlsv1_1 +cipher_server_preference" + INTERMEDIATE_EXIM_SSL_CIPHERSUITE="tls_require_ciphers = ${INTERMEDIATE_CIPHERSUITE}" + + OLD_DOVECOT_SSL_PROTOCOLS="ssl_min_protocol = TLSv1" + OLD_DOVECOT_SSL_CIPHERSUITE="ssl_cipher_list = ${OLD_CIPHERSUITE}" + OLD_EXIM_SSL_PROTOCOLS="openssl_options = +no_sslv2 +no_sslv3 +cipher_server_preference" + OLD_EXIM_SSL_CIPHERSUITE="tls_require_ciphers = ${OLD_CIPHERSUITE}" + + DOVECOT_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_DOVECOT_SSL_PROTOCOLS)" + DOVECOT_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_DOVECOT_SSL_CIPHERSUITE)" + EXIM_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_EXIM_SSL_PROTOCOLS)" + EXIM_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_EXIM_SSL_CIPHERSUITE)" + + if [ "${DOVECOT_OPT}" = "yes" ] && [ "${DOVECOT_CONF_OPT}" = "yes" ] && [ ! -e ${WORKDIR}/custom/dovecot/conf/ssl.conf ] && [ -s /etc/dovecot/conf/ssl.conf ]; then + perl -pi -e "s|^ssl_min_protocol.*|${DOVECOT_SSL_PROTOCOLS}|g" /etc/dovecot/conf/ssl.conf + perl -pi -e "s|^ssl_cipher_list.*|${DOVECOT_SSL_CIPHERSUITE}|g" /etc/dovecot/conf/ssl.conf + if [ "${SSL_CONFIGURATION_OPT}" = "old" ] && ! grep -m1 -q 'ssl_prefer_server_ciphers' /etc/dovecot/conf/ssl.conf; then + echo 'ssl_prefer_server_ciphers = yes' >> /etc/dovecot/conf/ssl.conf + fi + fi + if [ "${EXIM_OPT}" = "yes" ] && [ "${EXIMCONF_OPT}" = "yes" ] && [ -s /etc/exim.variables.conf.default ]; then + perl -pi -e "s|^openssl_options.*|${EXIM_SSL_PROTOCOLS}|g" /etc/exim.variables.conf.default + perl -pi -e "s|^tls_require_ciphers.*|${EXIM_SSL_CIPHERSUITE}|g" /etc/exim.variables.conf.default + fi +} + +doRewriteCLPhpHandler() { + if [ -d /etc/container ] && [ "${CLOUDLINUX_OPT}" = "yes" ]; then + echo "Configuring /etc/container/php.handler..." + if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then + mkdir -p /opt/alt/php.perdir/php${PHP1_SHORTRELEASE}/bin + ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp /opt/alt/php.perdir/php${PHP1_SHORTRELEASE}/bin/lsphp + if grep -m1 -q "x-httpd-php${PHP1_SHORTRELEASE}" /etc/container/php.handler; then + sed -i "/x-httpd-php${PHP1_SHORTRELEASE}/d" /etc/container/php.handler + fi + echo "application/x-httpd-php${PHP1_SHORTRELEASE} /usr/local/bin/lsphp" >> /etc/container/php.handler + if grep -m1 -q "x-httpd-php " /etc/container/php.handler; then + sed -i "/x-httpd-php /d" /etc/container/php.handler + fi + echo "application/x-httpd-php /usr/local/bin/lsphp" >> /etc/container/php.handler + fi + if [ "${PHP2_MODE_OPT}" = "lsphp" ]; then + mkdir -p /opt/alt/php.perdir/php${PHP2_SHORTRELEASE}/bin + ln -sf /usr/local/php${PHP2_SHORTRELEASE}/bin/lsphp /opt/alt/php.perdir/php${PHP2_SHORTRELEASE}/bin/lsphp + if ! grep -m1 -q "^application/x-httpd-php${PHP2_SHORTRELEASE} " /etc/container/php.handler; then + echo "application/x-httpd-php${PHP2_SHORTRELEASE} /opt/alt/php.perdir/php${PHP2_SHORTRELEASE}/bin/lsphp" >> /etc/container/php.handler + elif grep -m1 -q "^application/x-httpd-php${PHP2_SHORTRELEASE} /usr/local/php${PHP2_SHORTRELEASE}/bin/lsphp" /etc/container/php.handler; then + perl -pi -e "s|^application/x-httpd-php${PHP2_SHORTRELEASE} /usr/local/php${PHP2_SHORTRELEASE}/bin/lsphp|application/x-httpd-php${PHP2_SHORTRELEASE} /usr/local/php${PHP2_SHORTRELEASE}/bin/lsphp|g" /etc/container/php.handler + fi + fi + if [ "${PHP3_MODE_OPT}" = "lsphp" ]; then + mkdir -p /opt/alt/php.perdir/php${PHP3_SHORTRELEASE}/bin + ln -sf /usr/local/php${PHP3_SHORTRELEASE}/bin/lsphp /opt/alt/php.perdir/php${PHP3_SHORTRELEASE}/bin/lsphp + if ! grep -m1 -q "^application/x-httpd-php${PHP3_SHORTRELEASE} " /etc/container/php.handler; then + echo "application/x-httpd-php${PHP3_SHORTRELEASE} /opt/alt/php.perdir/php${PHP3_SHORTRELEASE}/bin/lsphp" >> /etc/container/php.handler + elif grep -m1 -q "^application/x-httpd-php${PHP3_SHORTRELEASE} /usr/local/php${PHP3_SHORTRELEASE}/bin/lsphp" /etc/container/php.handler; then + perl -pi -e "s|^application/x-httpd-php${PHP3_SHORTRELEASE} /usr/local/php${PHP3_SHORTRELEASE}/bin/lsphp|application/x-httpd-php${PHP3_SHORTRELEASE} /usr/local/php${PHP3_SHORTRELEASE}/bin/lsphp|g" /etc/container/php.handler + fi + fi + if [ "${PHP4_MODE_OPT}" = "lsphp" ]; then + mkdir -p /opt/alt/php.perdir/php${PHP4_SHORTRELEASE}/bin + ln -sf /usr/local/php${PHP4_SHORTRELEASE}/bin/lsphp /opt/alt/php.perdir/php${PHP4_SHORTRELEASE}/bin/lsphp + if ! grep -m1 -q "^application/x-httpd-php${PHP4_SHORTRELEASE} " /etc/container/php.handler; then + echo "application/x-httpd-php${PHP4_SHORTRELEASE} /opt/alt/php.perdir/php${PHP4_SHORTRELEASE}/bin/lsphp" >> /etc/container/php.handler + elif grep -m1 -q "^application/x-httpd-php${PHP4_SHORTRELEASE} /usr/local/php${PHP4_SHORTRELEASE}/bin/lsphp" /etc/container/php.handler; then + perl -pi -e "s|^application/x-httpd-php${PHP4_SHORTRELEASE} /usr/local/php${PHP4_SHORTRELEASE}/bin/lsphp|application/x-httpd-php${PHP4_SHORTRELEASE} /usr/local/php${PHP4_SHORTRELEASE}/bin/lsphp|g" /etc/container/php.handler + fi + fi + fi +} + +doRewriteConfs() { + quitIfLocked doRewriteConfs + + cd ${CWD} + if [ "${UNIT_OPT}" = "yes" ] && [ -e /var/run/unit/control.sock ]; then + echo "action=rewrite&value=nginx_unit" >> ${TASK_QUEUE} + fi + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ ! -e httpd-${APACHE2_VER}.tar.gz ]; then + getFile httpd-${APACHE2_VER}.tar.gz + fi + if [ ! -e httpd-${APACHE2_VER}.tar.gz ]; then + echo "File httpd-${APACHE2_VER}.tar.gz does not exist. Cannot rewrite configs" + else + tar xzf httpd-${APACHE2_VER}.tar.gz --no-same-owner + fi + + if [ ! -d httpd-${APACHE2_VER} ]; then + echo "Directory httpd-${APACHE2_VER} does not exist. Cannot rewrite configs" + fi + + #CentOS 5 needs -TLSv1 removed from httpd-ssl.conf. + if [ "${OS_CENTOS_VER}" = "5" ]; then + echo "CentOS 5 needs TLSv1, clearing '-TLSv1' from exlude list." + perl -pi -e 's/SSLProtocol All (.*) -TLSv1/SSLProtocol All $1/' ${APCONFDIR}/extra/httpd-ssl.conf + fi + + #copy the new configs + cp -rf ${APCONFDIR} ${HTTPDDIR} + cp -f ${APCONFDIR}/httpd.conf ${HTTPD_CONF} + cp -f ${APCONFDIR}/extra/httpd-mpm.conf ${HTTPDCONF}/extra/httpd-mpm.conf + + perl -pi -e 's/^DefaultType/#DefaultType/' ${HTTPD_CONF} + + HDC=httpd-directories-old.conf + + ln -sf $HDC ${HTTPDCONF}/extra/httpd-directories.conf + + doApacheHostConf + doPasswdServerStatus + + if [ "${APCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${APCUSTOMCONFDIR} ${HTTPDDIR} + fi + + chmod 710 ${HTTPDDIR}/conf + + if [ "${HTTP_METHODS_OPT}" != "ALL" ]; then + APACHE_HTTP_METHODS="`echo ${HTTP_METHODS_OPT} | tr ':' ' '`" + else + APACHE_HTTP_METHODS="reset" + fi + perl -pi -e "s#\|HTTP_METHODS\|#${APACHE_HTTP_METHODS}#g" ${HTTPDCONF}/extra/httpd-directories-old.conf + perl -pi -e "s#\|HTTP_METHODS\|#${APACHE_HTTP_METHODS}#g" ${HTTPDCONF}/extra/httpd-directories-new.conf + + #swap the |WEBAPPS_PHP_RELEASE| token. + if [ "${PHP1_MODE_OPT}" = "php-fpm" ] || [ "${PHP2_MODE_OPT}" = "php-fpm" ] || [ "${PHP3_MODE_OPT}" = "php-fpm" ] || [ "${PHP4_MODE_OPT}" = "php-fpm" ]; then + PHPV="" + if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then + PHPV=`perl -e "print ${PHP1_RELEASE_OPT} * 10"` + elif [ "${PHP2_RELEASE_OPT}" != "no" ]; then + PHPV=`perl -e "print ${PHP2_RELEASE_OPT} * 10"` + elif [ "${PHP3_RELEASE_OPT}" != "no" ]; then + PHPV=`perl -e "print ${PHP3_RELEASE_OPT} * 10"` + elif [ "${PHP4_RELEASE_OPT}" != "no" ]; then + PHPV=`perl -e "print ${PHP4_RELEASE_OPT} * 10"` + fi + + if [ "${PHPV}" != "" ]; then + perl -pi -e "s/\|WEBAPPS_PHP_RELEASE\|/${PHPV}/" ${HTTPDCONF}/extra/${HDC} + fi + fi + + ensure_server_ca + + doRewriteCLPhpHandler + + #ensure we have the correct apache_ver + setVal apache_ver 2.0 ${DACONF_TEMPLATE_FILE} + setVal apache_ver 2.0 ${DACONF_FILE} + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + + do_rewrite_httpd_alias + + #rewrite ips.conf + echo "action=rewrite&value=ips" >> ${TASK_QUEUE} + + run_dataskq + + #tokenize the IP and ports + tokenize_IP + tokenize_ports + + doVhosts + + if [ "${MODSECURITY_OPT}" = "yes" ]; then + echo -n '' > /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + echo '' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + echo 'modsecurity on' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + echo 'modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + create_global_modsecurity_rules + echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + echo '' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + cp -pf ${MODSECURITY_APACHE_INCLUDE} /etc/httpd/conf/extra/httpd-modsecurity.conf + else + echo -n '' > /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + fi + + if [ ! -d /etc/httpd/conf/ssl.key ] || [ ! -d /etc/httpd/conf/ssl.crt ]; then + cd ${WORKDIR} + mkdir -p /etc/httpd/conf/ssl.key + mkdir -p /etc/httpd/conf/ssl.crt + #install the cert/key + /usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.crt/server.crt -days 9999 -nodes -config ./${APCERTCONF} + + chmod 600 ${HTTPDCONF}/ssl.crt/server.crt + chmod 600 ${HTTPDCONF}/ssl.key/server.key + cd ${CWD} + fi + + doApacheCheck + + rm -rf ${CWD}/httpd-${APACHE2_VER} + + cd ${CWD} + + echo -n "" > ${HTTPDCONF}/extra/httpd-nginx.conf + + rewrite_phpmodules + + if [ "${HAVE_FCGID}" = "yes" ]; then + if [ ! -d /usr/local/safe-bin ]; then + mkdir -p /usr/local/safe-bin + chmod 511 /usr/local/safe-bin + chown apache:apache /usr/local/safe-bin + fi + + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + EVAL_CHECK_VAR=HAVE_FCGID${php_shortrelease} + if [ "$(eval_var ${EVAL_CHECK_VAR})" = "yes" ]; then + doSetupFcgidSh ${php_shortrelease} + fi + done + fi + + if [ "${NEWCONFIGS}" = "1" ]; then + perl -pi -e 's/^LoadModule mod_php/\#LoadModule mod_php/' /etc/httpd/conf/httpd.conf + perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf + perl -pi -e 's/^LoadModule suphp/\#LoadModule suphp/' /etc/httpd/conf/httpd.conf + fi + + WEBMAILLINK=`get_webmail_link` + perl -pi -e "s#Alias /webmail \"/var/www/html/roundcube/\"#Alias /webmail \"/var/www/html/${WEBMAILLINK}/\"#" /etc/httpd/conf/extra/httpd-alias.conf + + doPhpConf + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + doModLsapi 0 + fi + + # Disable UserDir access if userdir_access=no is set in the options.conf file + if [ "${USERDIR_ACCESS_OPT}" = "no" ]; then + perl -pi -e 's#UserDir public_html#UserDir disabled#' /etc/httpd/conf/extra/httpd-vhosts.conf + + #~username is enabled by default for litespeed, so explicitly turn it off. + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + perl -pi -e 's#^\#Include conf/extra/httpd-userdir.conf#Include conf/extra/httpd-userdir.conf#' ${HTTPD_CONF} + fi + else + perl -pi -e 's#UserDir disabled#UserDir public_html#' /etc/httpd/conf/extra/httpd-vhosts.conf + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + perl -pi -e 's#^Include conf/extra/httpd-userdir.conf#\#Include conf/extra/httpd-userdir.conf#' ${HTTPD_CONF} + fi + fi + + create_httpd_nginx + + doModSecurityAdj + doSslConfigurationWebserver + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Restarting apache." + control_service httpd restart + elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then + #Add CloudFlare to allow list + if grep -m1 -q 'ALL' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's|ALL|ALL, 173.245.48.0/20T, 103.21.244.0/22T, 103.22.200.0/22T, 103.31.4.0/22T, 141.101.64.0/18T, 108.162.192.0/18T, 190.93.240.0/20T, 188.114.96.0/20T, 197.234.240.0/22T, 198.41.128.0/17T, 162.158.0.0/15T, 104.16.0.0/13T, 104.24.0.0/14T, 172.64.0.0/13T, 131.0.72.0/22T, 2400:cb00::/32T, 2606:4700::/32T, 2803:f800::/32T, 2405:b500::/32T, 2405:8100::/32T, 2a06:98c0::/29T, 2c0f:f248::/32T|g' /usr/local/lsws/conf/httpd_config.xml + fi + if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's|0|0\n 2|g' /usr/local/lsws/conf/httpd_config.xml + fi + if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's|| 2\n |g' /usr/local/lsws/conf/httpd_config.xml + fi + echo "Restarting litespeed." + control_service litespeed reload + #Reload detached lsphp processes + touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt + fi + fi + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + #copy the new configs + cp -rf ${OPENLITESPEEDCONFDIR}/* ${LSWS_HOME}/conf + + do_rewrite_openlitespeed_webapps + ensure_server_ca + + #rewrite ips.conf + echo "action=rewrite&value=openlitespeed" >> ${TASK_QUEUE} + echo "action=rewrite&value=ips" >> ${TASK_QUEUE} + + run_dataskq + + doVhosts + + if [ ! -e ${LSWS_HOME}/directadmin-ips.conf ]; then + touch ${LSWS_HOME}/directadmin-ips.conf + fi + + if [ ! -e ${LSWS_HOME}/conf/httpd-includes.conf ]; then + touch ${LSWS_HOME}/conf/httpd-includes.conf + fi + + if [ "${MODSECURITY_OPT}" = "yes" ]; then + echo -n '' > ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + echo 'module mod_security {' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + echo 'modsecurity on' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + echo 'modsecurity_rules_file /usr/local/lsws/conf/httpd-modsecurity.conf' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + create_global_modsecurity_rules + echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + echo '}' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + cp -pf ${MODSECURITY_OPENLITESPEED_INCLUDE} ${LSWS_HOME}/conf/httpd-modsecurity.conf + else + echo -n '' > ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + fi + + if [ "${OPENLITESPEEDCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${OPENLITESPEEDCUSTOMCONFDIR}/* ${LSWS_HOME}/conf + fi + + tokenize_IP + tokenize_ports + + doPhpConf + + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${CAGEFS_OPT}" = "yes" ]; then + OLS_ENABLELVE=2 + elif [ "${CLOUDLINUX_OPT}" = "yes" ]; then + OLS_ENABLELVE=1 + else + OLS_ENABLELVE=0 + fi + + if ! grep -m1 -q "^enableLVE.*=${OLS_ENABLELVE}" ${LSWS_HOME}/conf/httpd-defaults.conf; then + perl -pi -e "s|^enableLVE.*|enableLVE ${OLS_ENABLELVE}|g" ${LSWS_HOME}/conf/httpd-defaults.conf + fi + + doModSecurityAdj + doSslConfigurationWebserver + + echo "Restarting openlitespeed." + control_service litespeed stop >/dev/null 2>&1 + control_service litespeed start + #Reload detached lsphp processes + touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt + fi + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + #copy the new configs + cp -rf ${NGINXCONFDIR}/* ${NGINXCONF} + if [ ! -d ${NGINXCONF}/templates ]; then + mkdir -p ${NGINXCONF}/templates + fi + cp -rf ${NGINXTEMPLATESDIR}/* ${NGINXCONF}/templates + + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + perl -pi -e "s|/usr/local/php${php_shortrelease}/sockets/webapps.sock|/usr/local/php${PHP1_SHORTRELEASE}/sockets/webapps.sock|" ${NGINXCONF}/nginx.conf + done + + do_rewrite_nginx_webapps + ensure_server_ca + + if [ "${MODSECURITY_OPT}" = "yes" ]; then + doModSecurityRules norestart + fi + + #rewrite ips.conf + echo "action=rewrite&value=nginx" >> ${TASK_QUEUE} + echo "action=rewrite&value=ips" >> ${TASK_QUEUE} + + run_dataskq + + doVhosts + + if [ ! -e ${NGINXCONF}/directadmin-settings.conf ]; then + touch ${NGINXCONF}/directadmin-settings.conf + fi + + if [ ! -e ${NGINXCONF}/directadmin-ips.conf ]; then + touch ${NGINXCONF}/directadmin-ips.conf + fi + + if [ ! -e ${NGINXCONF}/nginx-includes.conf ]; then + touch ${NGINXCONF}/nginx-includes.conf + fi + + if [ "${MODSECURITY_OPT}" = "yes" ]; then + echo -n '' > /etc/nginx/nginx-modsecurity-enable.conf + echo 'modsecurity on;' >> /etc/nginx/nginx-modsecurity-enable.conf + echo 'modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf;' >> /etc/nginx/nginx-modsecurity-enable.conf + create_global_modsecurity_rules + echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules;' >> /etc/nginx/nginx-modsecurity-enable.conf + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + cp -pf ${MODSECURITY_NGINX_INCLUDE} /etc/nginx/nginx-modsecurity.conf + elif [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + cp -pf ${MODSECURITY_NGINX_REVERSE_INCLUDE} /etc/nginx/nginx-modsecurity.conf + fi + else + echo -n '' > ${NGINXCONF}/nginx-modsecurity-enable.conf + fi + + doSslConfigurationWebserver + if [ "${NGINXCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${NGINXCUSTOMCONFDIR}/* ${NGINXCONF}/ + fi + if [ "${NGINXCUSTOMEMPLATESDIR}" != "0" ]; then + cp -rf ${NGINXCUSTOMEMPLATESDIR}/* ${NGINXCONF}/templates/ + fi + + chmod 710 ${NGINXCONF} + + if [ "${IPV6}" = "0" ]; then + perl -pi -e 's| listen \[::1\]:| #listen \[::1\]:|' ${NGINXCONF}/nginx-vhosts.conf + perl -pi -e 's| listen \[::1\]:| #listen \[::1\]:|' ${NGINXCONF}/nginx.conf + else + perl -pi -e 's| #listen \[::1\]:| listen \[::1\]:|' ${NGINXCONF}/nginx-vhosts.conf + perl -pi -e 's| #listen \[::1\]:| listen \[::1\]:|' ${NGINXCONF}/nginx.conf + fi + + tokenize_IP + tokenize_ports + + # Disable UserDir access if userdir_access=no is set in the options.conf file + if [ "${USERDIR_ACCESS_OPT}" = "no" ]; then + perl -pi -e 's| include /etc/nginx/nginx-userdir.conf;| #include /etc/nginx/nginx-userdir.conf;|' /etc/nginx/nginx-vhosts.conf + else + perl -pi -e 's| #include /etc/nginx/nginx-userdir.conf;| include /etc/nginx/nginx-userdir.conf;|' /etc/nginx/nginx-vhosts.conf + fi + + doPhpConf + + doModSecurityAdj + + echo "Restarting nginx." + control_service nginx stop >/dev/null 2>&1 + control_service nginx start + fi + + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + setVal nginx 0 ${DACONF_TEMPLATE_FILE} + setVal nginx 0 ${DACONF_FILE} + setVal nginx_proxy 1 ${DACONF_TEMPLATE_FILE} + setVal nginx_proxy 1 ${DACONF_FILE} + fi + + ensure_webapps_tmp + + doRestartDA + + removeLockfile +} + +#################################################### + +dospamassassinCron() { + if [ "$OS" = "FreeBSD" ]; then + CRONFILE=$WORKDIR/sa-update + else + CRONFILE=/etc/cron.${SA_UPDATE_OPT}/sa-update + + #remove bits which may exist. + rm -f /etc/cron.daily/sa-update + rm -f /etc/cron.weekly/sa-update + rm -f /etc/cron.monthly/sa-update + fi + + if [ "${SA_UPDATE_OPT}" = "no" ] && [ "$OS" = "FreeBSD" ]; then + if grep -m1 -q $CRONFILE /etc/crontab; then + grep -v $CRONFILE /etc/crontab > /etc/crontab.tmp + if [ ! -s /etc/crontab.tmp ]; then + echo "/etc/crontab.tmp doesn't exist or is size 0. Aborting" + exit 3 + fi + + mv -f /etc/crontab.tmp /etc/crontab + chmod 644 /etc/crontab + fi + fi + + if [ "${SA_UPDATE_OPT}" != "no" ]; then + echo "Installing sa-update cronjob..." + getFile sa-update.sh sa-update-sh + + if [ "$OS" = "FreeBSD" ]; then + if [ ! -e /etc/crontab ]; then + echo "You cannot run cronjob, because you do not have /etc/crontab." + fi + elif [ ! -d /etc/cron.${SA_UPDATE_OPT} ]; then + do_exit 1 "You cannot run cronjob, because you do not have /etc/cron.${SA_UPDATE_OPT} directory." + fi + + mv -f sa-update.sh ${CRONFILE} + chmod 755 ${CRONFILE} + + #for freebsd, we have to add it to /etc/crontab + if [ "$OS" = "FreeBSD" ]; then + if grep -q ${CRONFILE} /etc/crontab; then + cp -f /etc/crontab /etc/crontab.back + STR="perl -pi -e 's#.*${CRONFILE}\n##' /etc/crontab" + eval $STR + fi + if [ "${SA_UPDATE_OPT}" = "daily" ]; then + echo "02 4 * * * root ${CRONFILE}" >> /etc/crontab + elif [ "${SA_UPDATE_OPT}" = "weekly" ]; then + echo "02 4 * * 0 root ${CRONFILE}" >> /etc/crontab + elif [ "${SA_UPDATE_OPT}" = "monthly" ]; then + echo "02 4 1 * * root ${CRONFILE}" >> /etc/crontab + fi + fi + else + echo "${boldon}It's recommended to have sa_update set to daily in the options.conf file to get SpamAssassin rules updated every day.${boldoff}" + fi +} + +#################################################### + +doCron() { + cd ${CWD} + + if [ "$OS" = "FreeBSD" ]; then + CRONFILE=$WORKDIR/cronfile + else + CRONFILE=/etc/cron.${CRON_FREQUENCY_OPT}/custombuild + + #remove bits which may exist. + rm -f /etc/cron.daily/custombuild + rm -f /etc/cron.weekly/custombuild + rm -f /etc/cron.monthly/custombuild + fi + + if [ "${CRON_OPT}" != "yes" ]; then + rm -f ${CRONFILE} + + if [ "$OS" = "FreeBSD" ]; then + if grep -m1 -q $CRONFILE /etc/crontab; then + grep -v $CRONFILE /etc/crontab > /etc/crontab.tmp + if [ ! -s /etc/crontab.tmp ]; then + echo "/etc/crontab.tmp doesn't exist or is size 0. Aborting" + exit 3 + fi + + mv -f /etc/crontab.tmp /etc/crontab + chmod 644 /etc/crontab + fi + fi + do_exit 1 "You cannot run cronjob, because you do not have it set in options.conf file." + fi + + if [ "$OS" = "FreeBSD" ]; then + if [ ! -e /etc/crontab ]; then + echo "You cannot run cronjob, because you do not have /etc/crontab." + fi + elif [ ! -d /etc/cron.${CRON_FREQUENCY_OPT} ]; then + do_exit 1 "You cannot run cronjob, because you do not have /etc/cron.${CRON_FREQUENCY_OPT} directory." + fi + + #ensure mail exists. + if [ "${NOTIFICATIONS_OPT}" = "yes" ]; then + if [ ! -x /bin/mail ] && [ ! -x /usr/bin/mail ] && [ ! -x /usr/local/bin/mail ]; then + echo "Did not find mail command, installing s-nail..." + doSnail + fi + fi + + echo -n '' > ${CRONFILE} + echo '#!/bin/sh' >> ${CRONFILE} + echo 'if [ -d /usr/local/directadmin/custombuild/custom/hooks/cron_execute/pre ]; then' >> ${CRONFILE} + echo " find /usr/local/directadmin/custombuild/custom/hooks/cron_execute/pre -type f -name '*.sh' | while read line; do" >> ${CRONFILE} + echo ' . "$line"' >> ${CRONFILE} + echo ' done' >> ${CRONFILE} + echo ' HOOK_ERROR_CODE=$?' >> ${CRONFILE} + echo ' if [ ${HOOK_ERROR_CODE} -ne 0 ]; then' >> ${CRONFILE} + echo ' echo "Hook exited with error code: ${HOOK_ERROR_CODE}."' >> ${CRONFILE} + echo ' fi' >> ${CRONFILE} + echo 'fi' >> ${CRONFILE} + echo 'cd /usr/local/directadmin/custombuild' >> ${CRONFILE} + echo './build update >/dev/null 2>&1' >> ${CRONFILE} + + if [ "${NOTIFICATIONS_OPT}" = "yes" ] || [ "${UPDATES_OPT}" = "yes" ] || [ "${WEBAPPS_UPDATES_OPT}" = "yes" ] || [ "${DA_AUTOUPDATE_OPT}" = "yes" ]; then + + echo "AVAIL_UPDATES=\"\`./build versions_nobold | grep -c -e 'update is available.'\`\"" >> ${CRONFILE} + + echo 'if [ "${AVAIL_UPDATES}" -gt 0 ]; then' >> ${CRONFILE} + if [ "${NOTIFICATIONS_OPT}" = "yes" ] && [ "${UPDATES_OPT}" = "no" ]; then + echo "./build versions_nobold | grep 'update is available.' | mail -s \"\${AVAIL_UPDATES} updates available for \`hostname\`\" ${EMAIL_OPT}" >> ${CRONFILE} + fi + if [ "${NOTIFICATIONS_OPT}" = "yes" ] && [ "${UPDATES_OPT}" = "yes" ]; then + echo "./build versions_nobold | grep 'update is available.' | mail -s \"\${AVAIL_UPDATES} updates running for \`hostname\`\" ${EMAIL_OPT}" >> ${CRONFILE} + fi + if [ "${UPDATES_OPT}" = "yes" ]; then + echo './build update_versions' >> ${CRONFILE} + fi + if [ "${UPDATES_OPT}" = "no" ] && [ "${DA_AUTOUPDATE_OPT}" = "yes" ]; then + echo "AVAIL_DA_UPDATES=\"\`./build versions_nobold | grep -c -e 'DirectAdmin [0-9]'\`\"" >> ${CRONFILE} + echo 'if [ "${AVAIL_DA_UPDATES}" -gt 0 ]; then' >> ${CRONFILE} + echo './build update_da' >> ${CRONFILE} + echo 'fi' >> ${CRONFILE} + fi + if [ "${UPDATES_OPT}" = "no" ] && [ "${WEBAPPS_UPDATES_OPT}" = "yes" ]; then + echo './build update_webapps' >> ${CRONFILE} + fi + echo 'fi' >> ${CRONFILE} + fi + + echo 'if [ -d /usr/local/directadmin/custombuild/custom/hooks/cron_execute/post ]; then' >> ${CRONFILE} + echo " find /usr/local/directadmin/custombuild/custom/hooks/cron_execute/post -type f -name '*.sh' | while read line; do" >> ${CRONFILE} + echo ' . "$line"' >> ${CRONFILE} + echo ' done' >> ${CRONFILE} + echo ' HOOK_ERROR_CODE=$?' >> ${CRONFILE} + echo ' if [ ${HOOK_ERROR_CODE} -ne 0 ]; then' >> ${CRONFILE} + echo ' echo "Hook exited with error code: ${HOOK_ERROR_CODE}."' >> ${CRONFILE} + echo ' fi' >> ${CRONFILE} + echo 'fi' >> ${CRONFILE} + + echo 'exit 0;' >> ${CRONFILE} + chmod 755 ${CRONFILE} + + #for freebsd, we have to add it to /etc/crontab + if [ "$OS" = "FreeBSD" ]; then + if grep -q $CRONFILE /etc/crontab; then + cp -f /etc/crontab /etc/crontab.back + STR="perl -pi -e 's#.*${CRONFILE}\n##' /etc/crontab" + eval $STR + fi + if [ "${CRON_FREQUENCY_OPT}" = "daily" ]; then + echo "02 4 * * * root $CRONFILE" >> /etc/crontab + elif [ "${CRON_FREQUENCY_OPT}" = "weekly" ]; then + echo "02 4 * * 0 root $CRONFILE" >> /etc/crontab + elif [ "${CRON_FREQUENCY_OPT}" = "monthly" ]; then + echo "02 4 1 * * root $CRONFILE" >> /etc/crontab + fi + fi + + if [ "${NOTIFICATIONS_OPT}" = "yes" ]; then + echo "Cronjob is set for ${EMAIL_OPT}:" + fi + echo "Cronjob frequency: ${CRON_FREQUENCY_OPT}" + echo "Automatic notifications: ${NOTIFICATIONS_OPT}" + echo "Automatic updates: ${UPDATES_OPT}" + if [ "${SPAMD_OPT}" = "spamassassin" ]; then + dospamassassinCron + echo "Automatic SpamAssassin rule updates: ${SA_UPDATE_OPT}" + fi +} + +#################################################### + +updateDovecot() { + cd ${CWD} + if [ "${DOVECOT_VER}" != "0" ]; then + getFile dovecot-${DOVECOT_VER}.tar.gz dovecot + fi + getFile dovecot.boot dovecot_boot + getFile dovecot.boot.freebsd dovecot_boot_freebsd + getFile dovecot.boot.debian dovecot_boot_debian + getFile dovecot.conf dovecot_conf + getFile exim.conf.dovecot.patch eximdovecotpatch +} + +#################################################### + +doUpdateData() { + cd ${CWD} + + getFile servers.txt servers + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + getFileCL cl-apache-patches.tar.gz cl-apache-patches + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + getFileCL mod_hostinglimits-${MOD_HOSTINGLIMITS_VER}.tar.gz mod_hostinglimits + getFileCL mod_proctitle-${MOD_PROCTITLE_VER}.tar.gz mod_proctitle + fi + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + getFileCL mod_lsapi-${MOD_LSAPI_VER}.tar.gz mod_lsapi + fi + fi + + if [ "${NGINX_VER}" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + getFile nginx-${NGINX_VER}.tar.gz nginx + getFile nginx.boot nginx_boot + getFile nginx.boot.freebsd nginx_boot_freebsd + getFile nginx.boot.debian nginx_boot_debian + fi + fi + + if [ "${UNIT_VER}" != "0" ] && [ "${UNIT_OPT}" = "yes" ]; then + getFile unit/unit-${UNIT_VER}.tar.gz unit unit-${UNIT_VER}.tar.gz + fi + if [ "${APACHE2_VER}" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + getFile httpd-${APACHE2_VER}.tar.gz apache${APACHE_VER_OPT} + getFile nghttp2-${NGHTTP2_VER}.tar.gz nghttp2 + getFile httpd_2 httpd_2_boot + getFile httpd_2_freebsd httpd_2_boot_freebsd + getFile httpd_2_debian httpd_2_boot_debian + fi + fi + + getFile apr-${APR_VER}.tar.gz apr + getFile apr-util-${APR_UTIL_VER}.tar.gz apr-util + + if [ "${EXIM_SRS_OPT}" = "yes" ]; then + if [ "${LIBSRS_ALT_VER}" != "0" ]; then + getFile libsrs_alt-${LIBSRS_ALT_VER}.tar.bz2 libsrs_alt + fi + fi + if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then + if [ "${LIBSPF2_VER}" != "0" ]; then + getFile libspf2-${LIBSPF2_VER}.tar.gz libspf2 + fi + fi + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + getFileLSWS ${LITESPEED_NAME}.tar.gz ${LITESPEED_VER_NAME} + fi + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + if [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; then + getFile openlitespeed/openlitespeed-${OPENLITESPEED_VER}.src.tgz openlitespeed_src openlitespeed-${OPENLITESPEED_VER}.src.tgz + else + getFile openlitespeed/openlitespeed-${OPENLITESPEED_VER}.tgz openlitespeed openlitespeed-${OPENLITESPEED_VER}.tgz + fi + fi + + if [ "${HAVE_FCGID}" = "yes" ]; then + if [ "${MOD_FCGID_VER}" != "0" ]; then + getFile mod_fcgid-${MOD_FCGID_VER}.tar.gz mod_fcgid + fi + fi + + if [ "${MODSECURITY_VER}" != "0" ] && [ "${MODSECURITY_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ]; then + getFile ${MODSECURITY_FILENAME}-${MODSECURITY_VER}.tar.gz ${MODSECURITY_FILENAME} + fi + if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + getFileCWAF cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz cwaf_rules_nginx_3 + elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then + getFileCWAF cwaf_rules_ls-${CWAF_RULES_LS_VER}.tgz cwaf_rules_ls + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + getFileCWAF cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz cwaf_rules_nginx_3 + else + getFileCWAF cwaf_rules-${CWAF_RULES_VER}.tgz cwaf_rules + fi + elif [ "${MODSECURITY_RULESET_OPT}" = "owasp" ]; then + getFile owasp-modsecurity-crs-${OWASP_RULES_VER}.tar.gz owasp3_rules + fi + fi + + if [ "${CURL_VER}" != "0" ] && [ "${CURL_OPT}" = "yes" ]; then + getFile curl-${CURL_VER}.tar.gz curl + fi + + if [ "${PCRE_VER}" != "0" ] && [ -e /usr/local/bin/pcre-config ]; then + getFile pcre-${PCRE_VER}.tar.gz pcre_current + fi + + if [ "${PCRE2_VER}" != "0" ] && [ -e /usr/local/bin/pcre2-config ]; then + getFile pcre2-${PCRE2_VER}.tar.gz pcre2 + fi + + if [ "${FREETYPE_VER}" != "0" ] && [ -e /usr/local/bin/freetype-config ]; then + getFile freetype-${FREETYPE_VER}.tar.gz freetype + fi + if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then + if [ "${IGBINARY_VER}" != "0" ]; then + getFile php_extensions/igbinary/igbinary-${IGBINARY_VER}.tar.gz igbinary igbinary-${IGBINARY_VER}.tar.gz + fi + fi + if [ "${IMAGICK_OPT}" = "yes" ]; then + if [ "${IMAGICK_VER}" != "0" ]; then + getFile imagick/imagick-${IMAGICK_VER}.tgz imagick imagick-${IMAGICK_VER}.tar.gz + fi + if [ "${IMAGEMAGICK_VER}" != "0" ]; then + getFile imagick/ImageMagick-${IMAGEMAGICK_VER}.tar.gz imagemagick ImageMagick-${IMAGEMAGICK_VER}.tar.gz + fi + fi + if [ "${PHP_PHALCON_OPT}" = "yes" ]; then + if [ "${PHALCON_VER}" != "0" ]; then + getFile php_extensions/phalcon/phalcon-${PHALCON_VER}.tgz phalcon phalcon-${PHALCON_VER}.tar.gz + fi + if [ "${PSR_VER}" != "0" ]; then + getFile php_extensions/psr/psr-${PSR_VER}.tgz psr psr-${PSR_VER}.tar.gz + fi + fi + if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then + if [ "${SNUFFLEUPAGUS_VER}" != "0" ]; then + getFile php_extensions/snuffleupagus/snuffleupagus-${SNUFFLEUPAGUS_VER}.tar.gz snuffleupagus snuffleupagus-${SNUFFLEUPAGUS_VER}.tar.gz + fi + fi + if [ "${PHP_REDIS_OPT}" = "yes" ]; then + if [ "${PHPREDIS_VER}" != "0" ]; then + getFile php_extensions/redis/redis-${PHPREDIS_VER}.tgz phpredis redis-${PHPREDIS_VER}.tgz + fi + fi + if [ "${PHP_IMAP_OPT}" = "yes" ]; then + if [ "${IMAP_VER}" != "0" ]; then + getFile all/imap/imap-${IMAP_VER}.tar.gz imap imap-${IMAP_VER}.tar.gz + fi + fi + if [ "${LIBSODIUM_VER}" != "0" ]; then + getFile libsodium-${LIBSODIUM_VER}.tar.gz libsodium + fi + if [ "${LIBXML2_VER}" != "0" ] && [ -e /usr/local/include/libxslt/xslt.h ]; then + getFile libxml2-${LIBXML2_VER}.tar.gz libxml2-current + fi + if [ "${LIBZIP_VER}" != "0" ]; then + getFile libzip-${LIBZIP_VER}.tar.gz libzip + fi + if [ "${LIBXSLT_VER}" != "0" ] && [ -e /usr/local/include/libxslt/xslt.h ]; then + getFile libxslt-${LIBXSLT_VER}.tar.gz libxslt + fi + if [ "${ICU_VER}" != "0" ] && [ -d /usr/local/icu ]; then + getFile icu4c-${ICU_VER}-src.tgz icu4c + fi + + if [ "${SPAMD_OPT}" = "spamassassin" ]; then + if [ "${SPAMASSASSIN_VER}" != "0" ]; then + getFile Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz spamassassin + fi + fi + + if [ "${SPAMD_OPT}" = "rspamd" ]; then + if [ "${RSPAMD_VER}" != "0" ]; then + getFile rspamd-${RSPAMD_VER}.tar.gz rspamd + fi + fi + + if [ "${CLAMAV_OPT}" = "yes" ]; then + if [ "${CLAMAV_VER}" != "0" ]; then + getFile clamav-${CLAMAV_VER}.tar.gz clamav + fi + fi + +# Mailman is not yet supported +# if [ "${MAILMAN_OPT}" = "yes" ]; then +# getFile mailman-${MAILMAN_VER}.tgz mailman +# fi + if [ "${WEBALIZER_VER}" != "0" ]; then + getFile ${WEBALIZER_FILE} webalizer + fi + if [ "${FTPD_OPT}" = "proftpd" ]; then + if [ "${PROFTPD_VER}" != "0" ]; then + getFile proftpd-${PROFTPD_VER}.tar.gz proftpd + fi + getFile proftpd proftpd_boot + getFile proftpd_freebsd proftpd_boot_freebsd + getFile proftpd_debian proftpd_boot_debian + fi + if [ "${SPAMD_OPT}" = "rspamd" ]; then + if [ "${RSPAMD_VER}" != "0" ]; then + getFile rspamd-${RSPAMD_VER}.tar.gz rspamd + fi + getFile rspamd spamd_boot + getFile rspamd_freebsd rspamd_boot_freebsd + getFile rspamd_debian rspamd_boot_debian + fi + if [ "${FTPD_OPT}" = "pureftpd" ]; then + if [ "${PUREFTPD_VER}" != "0" ]; then + getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd + fi + getFile pure-ftpd pure-ftpd_boot + getFile pure-ftpd_freebsd pure-ftpd_boot_freebsd + getFile pure-ftpd_debian pure-ftpd_boot_debian + fi + + if [ "${ZEND_OPT}" = "yes" ] && [ "${OS}" != "FreeBSD" ]; then + if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ]; then + getFile ${ZENDFILE_GUARD53} ${ZENDNAME_PHP53_MD5} + fi + if [ "${PHP1_RELEASE_OPT}" = "5.4" ] || [ "${PHP2_RELEASE_OPT}" = "5.4" ] || [ "${PHP3_RELEASE_OPT}" = "5.4" ] || [ "${PHP4_RELEASE_OPT}" = "5.4" ]; then + getFile ${ZENDFILE_GUARD54} ${ZENDNAME_PHP54_MD5} + fi + fi + + if [ "${PHP1_RELEASE_VER}" != "0" ]; then + getFile php-${PHP1_RELEASE_VER}.tar.gz php${PHP1_SHORTRELEASE} + fi + + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + if [ "${PHP2_RELEASE_VER}" != "0" ]; then + getFile php-${PHP2_RELEASE_VER}.tar.gz php${PHP2_SHORTRELEASE} + fi + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + if [ "${PHP3_RELEASE_VER}" != "0" ]; then + getFile php-${PHP3_RELEASE_VER}.tar.gz php${PHP3_SHORTRELEASE} + fi + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + if [ "${PHP4_RELEASE_VER}" != "0" ]; then + getFile php-${PHP4_RELEASE_VER}.tar.gz php${PHP4_SHORTRELEASE} + fi + fi + + if [ "${EXIM_OPT}" = "yes" ]; then + if [ "${EXIM_VER}" != "0" ]; then + getFile exim-${EXIM_VER}.tar.gz exim + fi + getFile exim_boot exim_boot + getFile exim_freebsd exim_boot_freebsd + getFile exim_debian exim_boot_debian + fi + if [ "${DOVECOT_OPT}" = "yes" ]; then + updateDovecot + fi + + if [ "${IONCUBE_OPT}" = "yes" ]; then + getFile ${IONCUBEFILE} ${IONCUBENAME} + fi + + if [ "${SUHOSIN_OPT}" = "yes" ]; then + if [ "${SUHOSIN_VER}" != "0" ]; then + getFile suhosin-${SUHOSIN_VER}.tar.gz suhosin + fi + fi +} + +#################################################### + +doLibsodium() { + quitIfLocked doLibsodium + + cd ${CWD} + + getFile libsodium-${LIBSODIUM_VER}.tar.gz libsodium_current + + tar xzf libsodium-${LIBSODIUM_VER}.tar.gz --no-same-owner + cd libsodium-${LIBSODIUM_VER} + + ./configure --prefix=/usr/local + + while echo "Trying to make libsodium"; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + mkdir -p /usr/local/include/libsodium >/dev/null 2>&1 + + make install + + writeLog "libsodium ${LIBSODIUM_VER} installed" + + removeLockfile + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} +} + +#################################################### + +doLibPng() { + quitIfLocked doLibPng + + cd ${CWD} + + getFile libpng-${PNG_VER}.tar.gz libpng_current + + tar xzf libpng-${PNG_VER}.tar.gz --no-same-owner + cd libpng-${PNG_VER} + + ./configure --prefix=/usr/local + + while echo "Trying to make libpng"; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + mkdir -p /usr/local/include/libpng >/dev/null 2>&1 + + make install + + writeLog "libpng ${PNG_VER} installed" + + removeLockfile + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} +} + +#################################################### + +dogeoipupdateCron() { + CRONFILE=/etc/cron.weekly/libmaxminddb-update + + echo "Installing libmaxminddb-update cronjob..." + + if [ "$OS" = "FreeBSD" ]; then + if [ ! -e /etc/crontab ]; then + echo "You cannot run cronjob, because you do not have /etc/crontab." + fi + elif [ ! -d /etc/cron.weekly ]; then + do_exit 1 "You cannot run cronjob, because you do not have /etc/cron.weekly directory." + fi + + #for freebsd, we have to add it to /etc/crontab + if [ "$OS" = "FreeBSD" ]; then + if ! grep -m1 -q '/usr/local/bin/geoipupdate' /etc/crontab; then + echo '40 7 * * 3 root if [ -x /usr/local/bin/geoipupdate ]; then /usr/local/bin/geoipupdate; fi' >> /etc/crontab + fi + else + echo '#!/bin/bash' > ${CRONFILE} + echo 'if [ -x /usr/local/bin/geoipupdate ]; then' >> ${CRONFILE} + echo ' /usr/local/bin/geoipupdate' >> ${CRONFILE} + echo 'fi' >> ${CRONFILE} + chmod +x ${CRONFILE} + fi +} + +#################################################### + +doGeoipupdate() { + quitIfLocked Geoipupdate + + cd ${CWD} + + getFile geoipupdate-${GEOIPUPDATE_VER}.tar.gz geoipupdate + + tar xzf geoipupdate-${GEOIPUPDATE_VER}.tar.gz --no-same-owner + cd geoipupdate-${GEOIPUPDATE_VER} + + ./configure --prefix=/usr/local + + while echo "Trying to make geoipupdate"; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + make install + + writeLog "geoipupdate ${GEOIPUPDATE_VER} installed" + + dogeoipupdateCron + + writeLog "geoipupdate cronjob setup, to update database every week" + + removeLockfile + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} +} + +#################################################### + +dolibmaxminddb() { + quitIfLocked dolibmaxminddb + + cd ${CWD} + + getFile libmaxminddb-${LIBMAXMINDDB_VER}.tar.gz libmaxminddb + + tar xzf libmaxminddb-${LIBMAXMINDDB_VER}.tar.gz --no-same-owner + cd libmaxminddb-${LIBMAXMINDDB_VER} + + ./configure --prefix=/usr/local + + while echo "Trying to make libmaxminddb"; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + make install + + writeLog "libmaxminddb ${LIBMAXMINDDB_VER} installed" + + removeLockfile + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} +} + +#################################################### + +convert() { + #delete old modules + #backup httpd.conf + #copy httpd.conf ssl.conf + #insert all Include lines + #tokenize the |IP| + + cd ${CWD} + + rm -rf /usr/lib/apache/* + if [ "`grep -m1 -c 'Port 80' /etc/httpd/conf/httpd.conf`" = "1" ]; then + mv -f ${HTTPDCONF} ${HTTPDCONF}.1.3.backup + if [ ! -e ${APCONFDIR}/httpd.conf ]; then + do_exit 1 "cannot find httpd.conf in ${APCONFDIR} directory" + fi + if [ ! -e ${APCONFDIR}/extra/httpd-ssl.conf ]; then + do_exit 1 "cannot find ssl.conf in the ${NAME} directory" + fi + + cp -rf ${APCONFDIR} ${HTTPDDIR} + cp -rf ${HTTPDCONF}.1.3.backup/ssl.key ${HTTPDCONF} + cp -rf ${HTTPDCONF}.1.3.backup/ssl.crt ${HTTPDCONF} + + cp -f ${APCONFDIR}/httpd.conf ${HTTPD_CONF} + cp -f ${APCONFDIR}/extra/httpd-mpm.conf ${HTTPDCONF}/extra/httpd-mpm.conf + + if [ "${APCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${APCUSTOMCONFDIR} ${HTTPDDIR} + fi + + #tokenize the IP and ports + tokenize_IP + tokenize_ports + + #add all the Include lines + doVhosts + + cd ${CWD} + + #check directadmin.conf file + if [ -s ${DACONF_FILE} ] && [ "`grep -m1 -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then + perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_FILE} + doRestartDA + fi + if [ -s ${DACONF_TEMPLATE_FILE} ] && [ "`grep -m1 -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_TEMPLATE_FILE}`" = "1" ]; then + perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_TEMPLATE_FILE} + fi + + if [ "${OS}" = "FreeBSD" ]; then + cp -f httpd_2_freebsd /usr/local/etc/rc.d/httpd + chmod 755 /usr/local/etc/rc.d/httpd + else + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${CB_CUST_SYSTEMD}/httpd.service ]; then + cp -f ${CB_CUST_SYSTEMD}/httpd.service ${SYSTEMDDIR}/httpd.service + else + cp -f ${CB_SYSTEMD}/httpd.service ${SYSTEMDDIR}/httpd.service + fi + chmod 644 ${SYSTEMDDIR}/httpd.service + DISABLE_PRIVATETMP=false + if [ "${CLAMAV_OPT}" = "yes" ]; then + if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] || [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ]; then + DISABLE_PRIVATETMP=true + fi + fi + if [ -e /proc/1/environ ]; then + if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then + DISABLE_PRIVATETMP=true + fi + fi + if ${DISABLE_PRIVATETMP}; then + echo "Upload scan option detected in options.conf. Disabling PrivateTmp feature in httpd.service for ClamAV to be able to scan files in /tmp." + perl -pi -e 's#PrivateTmp\=true#PrivateTmp=false#' ${SYSTEMDDIR}/httpd.service + fi + systemctl daemon-reload + systemctl enable httpd.service + else + if [ -e /etc/debian_version ]; then + cp -f httpd_2_debian /etc/init.d/httpd + else + cp -f httpd_2 /etc/init.d/httpd + fi + + chmod 755 /etc/init.d/httpd + /sbin/chkconfig httpd on + fi + fi + + perl -pi -e 's/`grep -m1 apache_ver= ${DACONF_FILE}`/apache_ver=2.0/' ${DACONF_FILE} + perl -pi -e 's/`grep -m1 apache_ver= ${DACONF_TEMPLATE_FILE}`/apache_ver=2.0/' ${DACONF_TEMPLATE_FILE} + doRestartDA + echo "action=rewrite&value=ips" >> ${TASK_QUEUE} + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + echo "action=directadmin&value=reload" >> ${TASK_QUEUE} + run_dataskq + + writeLog "Converted Apache 1.3 to 2.x" + else + echo "$HTTPD_CONF seems to already be converted" + fi +} + +doNghttp2() { + getFile nghttp2-${NGHTTP2_VER}.tar.gz nghttp2 + + quitIfLocked doNghttp2 + + set64 + + cd ${CWD} + FILE=${CWD}/nghttp2-${NGHTTP2_VER}.tar.gz + + checkFile ${FILE} + + echo "Extracting ${FILE}..." + tar xzf ${FILE} --no-same-owner + + cd nghttp2-${NGHTTP2_VER} + + setFDSETSIZE + + #configure + echo "Configuring nghttp2-${NGHTTP2_VER}" + ./configure --enable-lib-only + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure nghttp2.\n" + do_exit 1 + fi + echo "Done Configuration." + + while echo "Trying to make nghttp2..."; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + + echo "Installing nghttp2..." + + make install + + cd ${CWD} + + writeLog "nghttp2 ${NGHTTP2_VER} installed" + + removeLockfile +} + +doApache2() { + if [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then + do_exit 1 "You cannot install Apache, because you do not have it set in options.conf file." + fi + + addUserGroup apache apache + addToAccess apache + + #die die die!! + if [ -s /usr/sbin/apache2 ]; then + chmod 0 /usr/sbin/apache2 + killall -9 apache2 2> /dev/null + fi + if [ -s /usr/lib/apache2/mpm-prefork/apache2 ]; then + chmod 0 /usr/lib/apache2/mpm-prefork/apache2 + killall -9 apache2 2> /dev/null + fi + + if [ "${SYSTEMD}" = "yes" ]; then + if [ ! -e /usr/include/systemd/sd-daemon.h ]; then + if [ -e ${DEBIAN_VERSION} ]; then + #This one might be needed for the next release of Debian/Ubuntu with systemd support + apt-get -y install libsystemd-dev + else + yum -y install systemd-devel + fi + fi + fi + if [ ! -s /usr/include/expat.h ] && [ ! -s /usr/local/include/expat.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + pkg install -y expat + elif [ -e /etc/debian_version ]; then + apt-get -y install libexpat1-dev + else + yum -y install expat-devel + fi + fi + + getFile httpd-${APACHE2_VER}.tar.gz apache${APACHE_VER_OPT} + set_http2 + if [ "${APACHE_VER_OPT}" = "2.4" ]; then + #shouldn't be needed anymore, as we use --with-devrandom for APR now, thus getrandom() syscall should be used + #if [ -e /proc/user_beancounters ]; then + # echo "/proc/user_beancounters detected, downgrading APR." + # APR_VER=1.6.5 + #elif [ -x /usr/bin/systemd-detect-virt ]; then + # if systemd-detect-virt | grep -m1 -q -E 'lxc|openvz'; then + # echo "LXC/OpenVZ detected, downgrading APR." + # APR_VER=1.6.5 + # fi + #fi + getFile apr-${APR_VER}.tar.gz apr + getFile apr-util-${APR_UTIL_VER}.tar.gz apr-util + getFile patches/mod_suexec_directory.patch mod_suexec_directory.patch + if [ "${AP2_MINOR_VER}" -lt 31 ]; then + perl -pi -e 's|NOT_IN_DIR_CONTEXT|NOT_IN_DIR_LOC_FILE|g' patches/mod_suexec_directory.patch + fi + getFile patches/suexec-safe.patch suexec-safe.patch + getFile patches/sdbm_private.patch sdbm_private.patch + getFile patches/fastcgi_children_cgroup.patch fastcgi_children_cgroup.patch + fi + + getFile httpd_2 httpd_2_boot + getFile httpd_2_freebsd httpd_2_boot_freebsd + getFile httpd_2_debian httpd_2_boot_debian + + initHTTP2var + if [ ! -s /usr/include/nghttp2/nghttp2.h ] && [ ! -s /usr/local/include/nghttp2/nghttp2.h ]; then + echo "Cannot find nghttp2.h. Installing nghttp2."; + if [ ${OS} = "FreeBSD" ]; then + ${PKG_INSTALL} install -y libnghttp2 + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get -y install libnghttp2-dev + elif [ "${OS_CENTOS_VER}" = "7" ]; then + if [ -s /etc/yum.repos.d/epel.repo ]; then + yum -y install libnghttp2-devel --enablerepo=${EPEL_REPO_NAME} + else + yum -y install libnghttp2-devel + fi + else + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + yum -y install libnghttp2-devel --enablerepo=cloudlinux-PowerTools + elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then + yum -y install libnghttp2-devel --enablerepo=PowerTools + elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then + yum -y install libnghttp2-devel --enablerepo=ol8_codeready_builder + elif [ -e /etc/yum.repos.d/redhat.repo ]; then + yum -y install libnghttp2-devel --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms + else + yum -y install libnghttp2-devel --enablerepo=powertools + fi + fi + fi + + quitIfLocked doApache2 + + if [ "${OS}" = "FreeBSD" ] && [ -e /sbin/kldload ]; then + if [ ! -e /boot/loader.conf ]; then + touch /boot/loader.conf + chmod 444 /boot/loader.conf + fi + if ! grep -q -m1 '^accf_http_load="YES"$' /boot/loader.conf; then + /sbin/kldload accf_http + echo 'accf_http_load="YES"' >> /boot/loader.conf + fi + if ! grep -q -m1 '^accf_data_load="YES"$' /boot/loader.conf; then + /sbin/kldload accf_data + echo 'accf_data_load="YES"' >> /boot/loader.conf + fi + fi + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + if [ ! -e /lib/libcap.so ] && [ ! -e /lib64/libcap.so ] && [ ! -e /usr/lib/libcap.so ] && [ ! -e /usr/lib64/libcap.so ] && [ ! -e /lib/x86_64-linux-gnu/libcap.so ] && [ ! -e /lib/i386-linux-gnu/libcap.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libcap.so ]; then + echo "Cannot find libcap.so for apache. Please install libcap" + if [ -e /etc/debian_version ]; then + echo "apt-get install libcap-dev" + else + echo "yum -y install libcap-devel" + fi + removeLockfile + return + fi + fi + + if [ ! -e /usr/bin/bzip2 ] && [ ! -e /bin/bzip2 ]; then + echo "Cannot find bzip2. Please install it." + if [ -e /etc/debian_version ]; then + echo "apt-get install bzip2" + else + echo "yum -y install bzip2" + fi + return + fi + + if [ -e /etc/httpd/conf/httpd.conf ]; then + if [ "`grep -m1 -c 'ServerType standalone' /etc/httpd/conf/httpd.conf`" -ne 0 ]; then + convert + fi + fi + + ADMNHTTP=/usr/local/directadmin/data/users/admin/httpd.conf + if [ ! -e ${ADMNHTTP} ] && [ -d /usr/local/directadmin/data/users/admin ]; then + echo -n "" > ${ADMNHTTP} + chown diradmin:admin ${ADMNHTTP} + chmod 640 ${ADMNHTTP} + fi + + set64 + + if [ ! -e /usr/bin/pcre-config ] && [ ! -e /usr/local/bin/pcre-config ]; then + if [ ! -e /usr/include/pcre.h ] && [ ! -e /usr/local/include/pcre.h ]; then + if [ -e /etc/debian_version ]; then + apt-get -y install libpcre3-dev + elif [ ${OS} != "FreeBSD" ]; then + yum -y install pcre-devel + else + pkg install -y pcre + fi + fi + fi + + if grep -m1 -q '^nginx:' /etc/group; then + usermod -a -G nginx apache 2>/dev/null + fi + if [ ! -d /var/log/httpd/domains ]; then + mkdir -p /var/log/httpd/domains + fi + chmod 710 /var/log/httpd + chmod 710 /var/log/httpd/domains + chown apache:${ROOT_GRP} /var/log/httpd + chown apache:${ROOT_GRP} /var/log/httpd/domains + + + backupHttp + cd ${CWD} + FILE=${CWD}/httpd-${APACHE2_VER}.tar.gz + + checkFile ${FILE} + + echo "Extracting ${FILE}..." + tar xzf ${FILE} --no-same-owner + + if [ "${APACHE_VER_OPT}" = "2.4" ]; then + FILE2=${CWD}/apr-${APR_VER}.tar.gz + checkFile ${FILE2} + echo "Extracting ${FILE2}..." + tar xzf ${FILE2} --no-same-owner -C ${CWD}/httpd-${APACHE2_VER}/srclib + if [ -d ${CWD}/httpd-${APACHE2_VER}/srclib/apr ]; then + rm -rf ${CWD}/httpd-${APACHE2_VER}/srclib/apr + fi + mv -f ${CWD}/httpd-${APACHE2_VER}/srclib/apr-${APR_VER} ${CWD}/httpd-${APACHE2_VER}/srclib/apr + + FILE3=${CWD}/apr-util-${APR_UTIL_VER}.tar.gz + checkFile ${FILE3} + echo "Extracting ${FILE3}..." + tar xzf ${FILE3} --no-same-owner -C ${CWD}/httpd-${APACHE2_VER}/srclib + if [ -d ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util ]; then + rm -rf ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util + fi + mv -f ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util-${APR_UTIL_VER} ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util + fi + + if [ "$HARDEN_SYMLINKS_PATCH_OPT" = "yes" ]; then + if [ "${APACHE_VER_OPT}" = "2.4" ]; then + PATCH_NAME=harden-symlinks-2.4.patch + getFile ${PATCH_NAME} ${PATCH_NAME} + else + PATCH_NAME=harden-symlinks.patch.${APACHE2_VER} + getFile ${PATCH_NAME} harden-symlinks-patch + fi + + if [ -s ${PATCH_NAME} ]; then + echo "Patching apache for hardened symlinks patch..." + if [ "${APACHE_VER_OPT}" = "2.4" ]; then + cd httpd-${APACHE2_VER} + if [ "${AP2_MINOR_VER}" -lt 48 ]; then + perl -pi -e 's|ap_cstr_casecmp|strcasecmp|g' ../${PATCH_NAME} + fi + patch -p0 < ../${PATCH_NAME} + cd .. + else + patch -p0 < ${PATCH_NAME} + fi + else + echo "Cannot find ${PATCH_NAME} to for hardened symlinks patch." + fi + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + getFileCL cl-apache-patches.tar.gz cl-apache-patches + if [ ! -e /usr/include/lve/lve-ctl.h ]; then + yum -y install liblve-devel + fi + fi + + cd httpd-${APACHE2_VER} + + # A fix for apache not showing proxied IP address + perl -pi -e 's#RSRC_CONF | EXEC_ON_READ#RSRC_CONF#g' modules/metadata/mod_remoteip.c + + if [ "${APACHE_VER_OPT}" = "2.4" ] && [ "${SYSTEMD}" = "yes" ]; then + echo "Enabling mod_systemd..." + # Not needed for apache 2.4.43 and higher + if [ "`version_cmp ${APACHE2_VER} 2.4.43`" -lt 0 ]; then + if [ -e ../configure/systemd/dependencies/httpd-2.4.10-systemd.patch ]; then + patch -p1 < ../configure/systemd/dependencies/httpd-2.4.10-systemd.patch + fi + fi + if ! grep -m1 -q "\-\-enable-systemd" ${WORKDIR}/${APACHE2_CONFIGURE}; then + perl -pi -e 's|"\./configure" \\\n|"./configure" \\\n\t"--enable-systemd" \\\n|' ${WORKDIR}/${APACHE2_CONFIGURE} + fi + fi + + if [ "${HTTP2}" = "1" ] && [ "${OS_CENTOS_VER}" != "6" ]; then + echo "Enabling mod_http2..."; + if ! grep -m1 -q "\-\-enable-http2" ${WORKDIR}/${APACHE2_CONFIGURE}; then + perl -pi -e 's|"--enable-rewrite" \\\n|"--enable-http2" \\\n\t"--enable-rewrite" \\\n|' ${WORKDIR}/${APACHE2_CONFIGURE} + fi + fi + + #For ModSecurity + if [ -d srclib/apr-util ]; then + echo "Patching srclib/apr-util/dbm/sdbm/sdbm_private.h..." + cd srclib/apr-util + patch -p0 < ${WORKDIR}/patches/sdbm_private.patch + cd ../../ + fi + + if [ "${CLOUDLINUX_OPT}" = "no" ]; then + echo "Patching apache to suexec safedir path..." + if [ ! -s ../patches/suexec-safe.patch ]; then + echo "Error with patches/suexec-safe.patch. File is missing or empty" + else + patch -p1 < ../patches/suexec-safe.patch + fi + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + patch -p1 < ../apr-2.4-httpd.1.patch + patch -p1 < ../suexec_safe_bin.patch + fi + + if [ -s support/suexec.c ]; then + echo "Patching suexec for per-user process grouping" + if [ ! -s ../patches/fastcgi_children_cgroup.patch ]; then + echo "${boldon}ERROR downloading patches/fastcgi_children_cgroup.patch${boldoff}" + else + patch -p0 < ../patches/fastcgi_children_cgroup.patch + fi + fi + + echo "Patching apache to allow SuexecUserGroup in Directory context..." + if [ ! -s ../patches/mod_suexec_directory.patch ]; then + echo "Error with patches/mod_suexec_directory.patch. File is missing or empty" + else + patch -p1 < ../patches/mod_suexec_directory.patch + fi + + setFDSETSIZE + + if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then + #configure + echo "Configuring httpd-${APACHE2_VER}" + rm -f configure + autoreconf --force + if ! grep -m1 -q 'apr_configure_args="--with-devrandom ' configure; then + perl -pi -e 's|apr_configure_args="|apr_configure_args="--with-devrandom |g' configure + fi + if [ ! -e /usr/local/include/pcre.h ] && grep -m1 -q 'with-pcre=/usr/local' ${CWD}/${APACHE2_CONFIGURE}; then + perl -pi -e 's|with-pcre=/usr/local|with-pcre=/usr|g' ${CWD}/${APACHE2_CONFIGURE} + fi + CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ${CWD}/${APACHE2_CONFIGURE} + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure Apache 2. Check the ${APACHE2_CONFIGURE} file\n" + do_exit 1 + fi + echo "Done Configuration." + fi + fi + + echo "increasing FD_SETSIZE in os/tpf/os.h .." + if [ -e ./os/tpf/os.h ]; then + perl -pi -e 's/\#define FD_SETSIZE.*2048/\#ifdef FD_SETSIZE\n\#undef FD_SETSIZE\n\#endif\n\#define FD_SETSIZE 32768/' ./os/tpf/os.h + fi + + if [ -e ./srclib/apr/include/apr.hnw ]; then + perl -pi -e 's/FD_SETSIZE.*1024/FD_SETSIZE 32768/' ./srclib/apr/include/apr.hnw + fi + + if [ -e ./srclib/apr/poll/unix/select.c ]; then + perl -pi -e 's/FD_SETSIZE.*1024/FD_SETSIZE 32768/' ./srclib/apr/poll/unix/select.c + fi + + if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then + if [ -d httpd-${APACHE2_VER} ]; then + cd httpd-${APACHE2_VER} + fi + while echo "Trying to make Apache 2..."; do + C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 0 + fi + else + break + fi + done + echo "Make complete" + fi + fi + + checkRPMS + + #setup the directadmin.conf + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + setVal cloud_cache 1 ${DACONF_TEMPLATE_FILE} + setVal cloud_cache 1 ${DACONF_FILE} + echo "action=cache&value=showallusers" >> ${TASK_QUEUE} + run_dataskq d + elif [ "${CLOUDLINUX_OPT}" = "no" ]; then + setVal cloud_cache 0 ${DACONF_TEMPLATE_FILE} + setVal cloud_cache 0 ${DACONF_FILE} + fi + + setVal nginx 0 ${DACONF_TEMPLATE_FILE} + setVal nginx 0 ${DACONF_FILE} + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + setVal nginx_proxy 1 ${DACONF_TEMPLATE_FILE} + setVal nginx_proxy 1 ${DACONF_FILE} + setVal litespeed 0 ${DACONF_TEMPLATE_FILE} + setVal litespeed 0 ${DACONF_FILE} + setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE} + setVal openlitespeed 0 ${DACONF_FILE} + set_service litespeed delete + killall litespeed >/dev/null 2>&1 + killall -9 litespeed >/dev/null 2>&1 + doRestartDA + elif [ "${WEBSERVER_OPT}" = "apache" ]; then + setVal nginx_proxy 0 ${DACONF_TEMPLATE_FILE} + setVal nginx_proxy 0 ${DACONF_FILE} + setVal litespeed 0 ${DACONF_TEMPLATE_FILE} + setVal litespeed 0 ${DACONF_FILE} + setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE} + setVal openlitespeed 0 ${DACONF_FILE} + killall nginx >/dev/null 2>&1 + killall litespeed >/dev/null 2>&1 + doRestartDA + set_service nginx delete + set_service litespeed delete + killall -9 nginx >/dev/null 2>&1 + killall -9 litespeed >/dev/null 2>&1 + fi + + if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then + set_service httpd ON + + rm -f /usr/sbin/apxs + + echo "Installing Apache..." + make install + fi + else + set_service httpd delete + set_service nginx delete + fi + + if [ ! -e /etc/mime.types ]; then + cp docs/conf/mime.types /etc/mime.types + fi + + ln -sf /var/www/build /etc/httpd/build + + chown webapps:apache /var/www + chmod 551 /var/www + + removeLockfile + cd ${CWD} + + restoreHttp + + #fix for downgrades to let $1$ passwords version of apr-utils (1.4.1) work, if 1.5.1 was installed previously. + if [ "${APACHE_VER_OPT}" = "2.4" ] && [ "${APR_UTIL_VER}" = "1.4.1" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then + APR_51_LIB=${HTTPDDIR}/lib/libaprutil-1.so.0.5.1 + APR_41_LIB=${HTTPDDIR}/lib/libaprutil-1.so.0.4.1 + APR_LIB_LINK=${HTTPDDIR}/lib/libaprutil-1.so.0 + if [ -e "${APR_51_LIB}" ] && [ -e "${APR_41_LIB}" ]; then + rm -f ${APR_LIB_LINK} + rm -f ${APR_51_LIB} + ln -s libaprutil-1.so.0.4.1 ${APR_LIB_LINK} + fi + fi + fi + + if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then + #ensure /usr/sbin/apxs + if [ ! -s /usr/sbin/apxs ] && [ -s /usr/bin/apxs ]; then + ln -s /usr/bin/apxs /usr/sbin/apxs + fi + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/httpd ]; then + echo "Removing ${INITDDIR}/httpd..." + rm -f ${INITDDIR}/httpd + fi + + #fresh install, add to System Backup + if [ ! -s ${SYSTEMDDIR}/httpd.service ]; then + add_to_system_backup dirs /etc/httpd + fi + + echo "Enabling httpd in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/httpd.service ]; then + cp -f ${CB_CUST_SYSTEMD}/httpd.service ${SYSTEMDDIR}/httpd.service + else + cp -f ${CB_SYSTEMD}/httpd.service ${SYSTEMDDIR}/httpd.service + fi + if [ -s ${PHPMODULES} ]; then + if grep -m1 -q mod_systemd ${PHPMODULES}; then + sed -i "/^mod_systemd/d" ${PHPMODULES} + fi + fi + chmod 644 ${SYSTEMDDIR}/httpd.service + DISABLE_PRIVATETMP=false + if [ "${CLAMAV_OPT}" = "yes" ]; then + if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] || [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ]; then + DISABLE_PRIVATETMP=true + fi + fi + if [ -e /proc/1/environ ]; then + if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then + DISABLE_PRIVATETMP=true + fi + fi + if ${DISABLE_PRIVATETMP}; then + echo "Upload scan option detected in options.conf. Disabling PrivateTmp feature in httpd.service for ClamAV to be able to scan files in /tmp." + perl -pi -e 's#PrivateTmp\=true#PrivateTmp=false#' ${SYSTEMDDIR}/httpd.service + fi + systemctl daemon-reload + systemctl enable httpd.service + else + if [ ${OS} = "FreeBSD" ]; then + cp -f ${CWD}/httpd_2_freebsd /usr/local/etc/rc.d/httpd + chmod 755 /usr/local/etc/rc.d/httpd + elif [ -e /etc/debian_version ]; then + cp -f ${CWD}/httpd_2_debian /etc/init.d/httpd + chmod 755 /etc/init.d/httpd + update-rc.d httpd defaults + else + cp -f ${CWD}/httpd_2 /etc/rc.d/init.d/httpd + chmod 755 /etc/rc.d/init.d/httpd + /sbin/chkconfig httpd on + fi + fi + fi + fi + + #Disable nginx & litespeed when switching to apache + if [ "${WEBSERVER_OPT}" = "apache" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${SYSTEMDDIR}/nginx.service ]; then + systemctl disable nginx.service 2> /dev/null + rm -f ${SYSTEMDDIR}/nginx.service + systemctl daemon-reload + fi + if [ -e ${SYSTEMDDIR}/litespeed.service ]; then + systemctl disable lshttpd.service 2> /dev/null + systemctl disable litespeed.service 2> /dev/null + systemctl disable lsws.service 2> /dev/null + rm -f ${SYSTEMDDIR}/lshttpd.service + rm -f ${SYSTEMDDIR}/lsws.service + rm -f ${SYSTEMDDIR}/litespeed.service + rm -f ${SYSTEMDDIR}/openlitespeed.service + systemctl daemon-reload + fi + else + if [ ${OS} = "FreeBSD" ]; then + if [ -e /usr/local/etc/rc.d/nginx ]; then + rm -f /usr/local/etc/rc.d/nginx + fi + if [ -e /usr/local/etc/rc.d/litespeed ]; then + rm -f /etc/init.d/litespeed + fi + elif [ -e /etc/debian_version ]; then + if [ -e /etc/init.d/nginx ]; then + update-rc.d nginx remove + rm -f /etc/init.d/nginx + fi + if [ -e /etc/init.d/litespeed ]; then + update-rc.d litespeed remove + rm -f /etc/init.d/litespeed + fi + else + if [ -e /etc/rc.d/init.d/nginx ]; then + /sbin/chkconfig nginx off + rm -f /etc/rc.d/init.d/nginx + fi + if [ -e /etc/rc.d/init.d/litespeed ]; then + /sbin/chkconfig litespeed off + rm -f /etc/rc.d/init.d/litespeed + fi + fi + fi + fi + + HAVE_DACONF=0 + if [ -s ${DACONF_FILE} ]; then + HAVE_DACONF=1 + fi + + #check directadmin.conf file + if [ "`grep -m1 -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_TEMPLATE_FILE}`" = "1" ]; then + perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_TEMPLATE_FILE} + fi + + if [ "${HAVE_DACONF}" = "1" ] && [ "`grep -m1 -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then + if [ "`grep -m1 -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then + perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_FILE} + doRestartDA + fi + + mv -f ${HTTPDCONF} ${HTTPDCONF}.${APACHE_VER_OPT}.backup + + cp -rf ${APCONFDIR} ${HTTPDDIR} + + if [ "${APCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${APCUSTOMCONFDIR} ${HTTPDDIR} + fi + cp -rf ${HTTPDCONF}.${APACHE_VER_OPT}.backup/ssl.key ${HTTPDCONF} + cp -rf ${HTTPDCONF}.${APACHE_VER_OPT}.backup/ssl.crt ${HTTPDCONF} + doRestartDA + fi + + #copy the new configs if needed + if [ "`grep -m1 -c 'Include' ${HTTPDCONF}/extra/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${HTTPDCONF}/extra/directadmin-vhosts.conf ]; then + cp -rf ${APCONFDIR} ${HTTPDDIR} + + HDC=httpd-directories-old.conf + + ln -sf $HDC ${HTTPDCONF}/extra/httpd-directories.conf + + doApacheHostConf + fi + + doPasswdServerStatus + + if [ "${APCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${APCUSTOMCONFDIR} ${HTTPDDIR} + fi + + chmod 710 ${HTTPDDIR}/conf + + if [ "${HTTP_METHODS_OPT}" != "ALL" ]; then + APACHE_HTTP_METHODS="`echo ${HTTP_METHODS_OPT} | tr ':' ' '`" + else + APACHE_HTTP_METHODS="reset" + fi + perl -pi -e "s#\|HTTP_METHODS\|#${APACHE_HTTP_METHODS}#g" ${HTTPDCONF}/extra/httpd-directories-old.conf + perl -pi -e "s#\|HTTP_METHODS\|#${APACHE_HTTP_METHODS}#g" ${HTTPDCONF}/extra/httpd-directories-new.conf + + create_httpd_nginx + + doSslConfigurationWebserver + + #hide frontpage from the interface to avoid confusion + hideFrontpage + + #ensure we have the correct apache_ver + if [ "`grep -m1 -c apache_ver=2.0 ${DACONF_TEMPLATE_FILE}`" -eq "0" ]; then + echo "apache_ver=2.0" >> ${DACONF_TEMPLATE_FILE} + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + doRestartDA + elif [ "`grep -m1 -c apache_ver=2.0 ${DACONF_TEMPLATE_FILE}`" -ne "0" ]; then + perl -pi -e 's/`grep -m1 apache_ver= ${DACONF_TEMPLATE_FILE}`/apache_ver=2.0/' ${DACONF_TEMPLATE_FILE} + fi + if [ "${HAVE_DACONF}" = "1" ]; then + if [ "`grep -m1 -c apache_ver=2.0 ${DACONF_FILE}`" -eq "0" ]; then + echo "apache_ver=2.0" >> ${DACONF_FILE} + doRestartDA + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + elif [ "`grep -m1 -c apache_ver=2.0 ${DACONF_FILE}`" -ne "0" ]; then + perl -pi -e 's/`grep -m1 apache_ver= ${DACONF_FILE}`/apache_ver=2.0/' ${DACONF_FILE} + doRestartDA + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + fi + fi + + fpmChecks + dovecotChecks + + if [ "${HAVE_FPM_CGI}" = "yes" ]; then + perl -pi -e 's/nginx/apache/' /usr/local/directadmin/data/templates/php-fpm.conf + fi + + ensure_server_ca + + do_rewrite_httpd_alias + + #rewrite ips.conf if needed + echo "action=rewrite&value=ips" >> ${TASK_QUEUE} + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + + run_dataskq + + #tokenize the IP and ports if needed + tokenize_IP + tokenize_ports + + doVhosts + + if [ ! -s /etc/httpd/conf/ssl.key/server.key ] || [ ! -s /etc/httpd/conf/ssl.crt/server.crt ]; then + cd ${WORKDIR} + mkdir -p /etc/httpd/conf/ssl.key + mkdir -p /etc/httpd/conf/ssl.crt + #install the cert/key + /usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.crt/server.crt -days 9999 -nodes -config ./${APCERTCONF} + + chmod 600 ${HTTPDCONF}/ssl.crt/server.crt + chmod 600 ${HTTPDCONF}/ssl.key/server.key + + cd ${CWD} + fi + + doApacheCheck + + mkdir -p ${WWWDIR} + + if [ ! -e ${WWWDIR}/index.html ]; then + if [ -e ${WWWDIR}/index.html.en ]; then + cp -f ${WWWDIR}/index.html.en ${WWWDIR}/index.html + else + echo "Apache is functioning normally" > ${WWWDIR}/index.html + fi + fi + perl -pi -e 's/[A-Za-z]* is functioning normally/Apache is functioning normally/' ${WWWDIR}/index.html + if [ ! -e /etc/logrotate.d/apache ] && [ ${OS} != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/apache.logrotate -o /etc/logrotate.d/apache + fi + + if [ ! -d /usr/local/safe-bin ]; then + mkdir -p /usr/local/safe-bin + chmod 511 /usr/local/safe-bin + chown apache:apache /usr/local/safe-bin + fi + + # Make sure apr is linked correctly + if [ -e /usr/bin/apr-1-config ]; then + ln -sf /usr/bin/apr-1-config /usr/bin/apr-config + fi + + rewrite_phpmodules + + if [ "${MOD_RUID2_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_ruid2.so ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then + doModRuid2 + fi + + if [ "${MODSECURITY_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_security2.so ] && [ "${WEBSERVER_OPT}" = "apache" ]; then + doModSecurity + fi + + if [ "${HTSCANNER_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_FPM_CGI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + doModHtscanner + fi + fi + fi + + if [ "${HAVE_FCGID}" = "yes" ]; then + if [ ! -s /usr/lib/apache/mod_fcgid.so ]; then + doModFCGID + fi + fi + + # Make sure there is no SSLMutex in /etc/httpd/conf/extra/httpd-ssl.conf + # Make sure there is no LockFile in /etc/httpd/conf/extra/httpd-mpm.conf + if [ "${APACHE_VER_OPT}" = "2.4" ]; then + perl -pi -e 's/^SSLMutex/#SSLMutex/' /etc/httpd/conf/extra/httpd-ssl.conf + perl -pi -e 's/^LockFile/#LockFile/' /etc/httpd/conf/extra/httpd-mpm.conf + fi + + # Disable UserDir access if userdir_access=no is set in the options.conf file + if [ "${USERDIR_ACCESS_OPT}" = "no" ]; then + perl -pi -e 's#UserDir public_html#UserDir disabled#' /etc/httpd/conf/extra/httpd-vhosts.conf + + #~username is enabled by default for litespeed, so explicitly turn it off. + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + perl -pi -e 's#^\#Include conf/extra/httpd-userdir.conf#Include conf/extra/httpd-userdir.conf#' ${HTTPD_CONF} + fi + else + perl -pi -e 's#UserDir disabled#UserDir public_html#' /etc/httpd/conf/extra/httpd-vhosts.conf + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + perl -pi -e 's#^Include conf/extra/httpd-userdir.conf#\#Include conf/extra/httpd-userdir.conf#' ${HTTPD_CONF} + fi + fi + + doModProctitle 0 + doModHostingLimits 0 + doModLsapi 0 + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + ldconfig + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + echo "Restarting apache." + control_service httpd stop + killall -9 httpd >/dev/null 2>&1 + control_service httpd start + elif [ "${WEBSERVER_OPT}" = "litespeed" ] && [ -e ${INITDDIR}/litespeed ]; then + echo "Restarting litespeed." + control_service litespeed reload + fi + + writeLog "Apache ${APACHE2_VER} installed" + + removeLockfile +} + +#################################################### + +doRemoveUnit() { + if [ "${UNIT_OPT}" = "yes" ]; then + do_exit 1 "You cannot remove Nginx Unit, because you have it set in options.conf file." + fi + + if [ ! -e /usr/sbin/unitd ]; then + do_exit 1 "/usr/sbin/unitd does not exist, cannot remove..." + fi + + echo "Disabling unit in services.status..." + set_service unit delete + + control_service unit stop + + if [ -e ${INITDDIR}/httpd ]; then + if [ -e /etc/debian_version ]; then + update-rc.d unit remove + elif [ ${OS} != "FreeBSD" ]; then + /sbin/chkconfig unit off + fi + echo "Removing ${INITDDIR}/unit..." + rm -f ${INITDDIR}/unit + fi + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Disabling unit in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/unit.service ]; then + systemctl disable unit.service + rm -f ${SYSTEMDDIR}/unit.service + systemctl daemon-reload + fi + fi + + if [ -e /etc/logrotate.d/unit ]; then + echo "Removing logrotate: /etc/logrotate.d/unit..." + rm -f /etc/logrotate.d/unit + fi + + if [ -d /var/log/unit ]; then + echo "Removing unit logs: /var/log/unit..." + rm -rf /var/log/unit + fi + + if [ -d /var/lib/unit ]; then + echo "Removing /var/lib/unit..." + rm -rf /var/lib/unit + fi + + if [ -d /usr/lib/unit ]; then + echo "Removing /usr/lib/unit..." + rm -rf /usr/lib/unit + fi + + if [ -e /usr/sbin/unitd ]; then + echo "Removing /usr/sbin/unitd..." + rm -f /usr/sbin/unitd + fi + + if [ -e /usr/share/man/man8/unitd.8 ]; then + echo "Removing /usr/share/man/man8/unitd.8..." + rm -f /usr/share/man/man8/unitd.8 + fi + + ldconfig + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "Unit has been successfully removed" + writeLog "Unit removed" +} + +#################################################### + +doRemoveApache2() { + if [ "${WEBSERVER_OPT}" = "apache" ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + do_exit 1 "You cannot remove Apache, because you have it set in options.conf file." + fi + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + do_exit 1 "You cannot remove Apache, because you have LiteSpeed set in options.conf file, which depends on Apache configuration files." + fi + + if [ ! -e /usr/sbin/httpd ]; then + do_exit 1 "/usr/sbin/httpd does not exist, cannot remove..." + fi + + echo "Disabling httpd in services.status..." + set_service httpd delete + + control_service httpd stop + + if [ -e ${INITDDIR}/httpd ]; then + if [ -e /etc/debian_version ]; then + update-rc.d httpd remove + elif [ ${OS} != "FreeBSD" ]; then + /sbin/chkconfig httpd off + fi + echo "Removing ${INITDDIR}/httpd..." + rm -f ${INITDDIR}/httpd + fi + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Disabling httpd in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/httpd.service ]; then + systemctl disable httpd.service + rm -f ${SYSTEMDDIR}/httpd.service + systemctl daemon-reload + fi + fi + + if [ -e /etc/logrotate.d/apache ]; then + echo "Removing logrotate: /etc/logrotate.d/apache..." + rm -f /etc/logrotate.d/apache + fi + + if [ -d /var/log/httpd ]; then + echo "Removing httpd logs: /var/log/httpd..." + rm -rf /var/log/httpd + fi + + if [ -d /var/www/icons ]; then + echo "Removing /var/www/icons..." + rm -rf /var/www/icons + fi + + if [ -d /var/www/cgi-bin ]; then + echo "Removing /var/www/cgi-bin..." + rm -rf /var/www/cgi-bin + fi + + if [ -d /var/www/error ]; then + echo "Removing /var/www/error..." + rm -rf /var/www/error + fi + + if [ -d /var/www/manual ]; then + echo "Removing /var/www/manual..." + rm -rf /var/www/manual + fi + + if [ -d /usr/lib/apache ]; then + echo "Removing /usr/lib/apache..." + rm -rf /usr/lib/apache + fi + + if [ -d /usr/include/apache ]; then + echo "Removing /usr/include/apache..." + rm -rf /usr/include/apache + fi + + echo "Removing httpd configuration files: /etc/httpd/..." + rm -rf /etc/httpd + + echo "Removing /usr/sbin/apachectl..." + rm -f /usr/sbin/apachectl + echo "Removing /usr/sbin/htcacheclean..." + rm -f /usr/sbin/htcacheclean + echo "Removing /usr/sbin/httpd..." + rm -f /usr/sbin/httpd + echo "Removing /usr/sbin/rotatelogs..." + rm -f /usr/sbin/rotatelogs + echo "Removing /usr/sbin/suexec..." + rm -f /usr/sbin/suexec + echo "Removing /usr/sbin/apxs..." + rm -f /usr/sbin/apxs + echo "Removing /usr/bin/ab..." + rm -f /usr/bin/ab + echo "Removing /usr/bin/htdbm..." + rm -f /usr/bin/htdbm + echo "Removing /usr/bin/htdigest..." + rm -f /usr/bin/htdigest + echo "Removing /usr/bin/htpasswd..." + rm -f /usr/bin/htpasswd + echo "Removing /usr/bin/logresolve..." + rm -f /usr/bin/logresolve + + ldconfig + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "Apache has been successfully removed" + writeLog "Apache removed" +} + +#################################################### +doLiteSpeedLicense() { + if [ "${LITESPEED_SERIALNO_OPT}" = "trial" ]; then + echo "LiteSpeed serial number not found. Using a trial key." + if [ ! -e ${LITESPEED_TRIAL_KEY} ]; then + curl ${CURL_CONNECT_OPTIONS} -o ${LSWS_HOME}/conf/trial.key https://license.litespeedtech.com/da/trial.key + fi + if [ ! -e ${LITESPEED_TRIAL_KEY} ] && [ ! -s ${LSWS_HOME}/conf/trial.key ]; then + do_exit 1 "LiteSpeed trial key ${LITESPEED_TRIAL_KEY} is also not found. Exiting." + else + if [ ! -e ${LSWS_HOME}/conf/trial.key ]; then + cp -f ${LITESPEED_TRIAL_KEY} ${LSWS_HOME}/conf/trial.key + fi + fi + else + echo "Writing LiteSpeed serial number ${LITESPEED_SERIALNO_OPT} to ${LSWS_HOME}/conf/serial.no..." + echo "${LITESPEED_SERIALNO_OPT}" > ${LSWS_HOME}/conf/serial.no + fi + + if [ -e ${LSWS_HOME}/conf/serial.no ]; then + echo "Contacting licensing server ..." + + echo "" + if [ -e ${LSWS_HOME}/conf/license.key ]; then + mv -f ${LSWS_HOME}/conf/license.key ${LSWS_HOME}/conf/license.key.backup + fi + if [ -e ${LSWS_HOME}/conf/trial.key ]; then + rm -f ${LSWS_HOME}/conf/trial.key + fi + ${LSWS_HOME}/bin/lshttpd -r + + if [ $? -eq 0 ]; then + echo "[OK] License key received." + ${LSWS_HOME}/bin/lshttpd -t + if [ $? -eq 0 ]; then + echo "The license key is correct." + else + echo "The license key received does not work." + fi + fi + fi + + if [ "${1}" != "0" ]; then + echo "Restarting litespeed." + control_service litespeed reload + fi +} + +#################################################### + +doLiteSpeed() { + if [ "${WEBSERVER_OPT}" != "litespeed" ]; then + do_exit 1 "You cannot install LiteSpeed, because you do not have it set in options.conf file." + fi + + if [ -e /usr/local/lsws/bin/lshttpd ]; then + EXPIRED=`/usr/local/lsws/bin/lshttpd -V | grep -m1 -c expired` + if [ ${EXPIRED} -gt 0 ]; then + echo "Cannot install LiteSpeed, because the license is expired." + return + fi + fi + + doApache2 + + getFileLSWS ${LITESPEED_NAME}.tar.gz ${LITESPEED_VER_NAME} + + quitIfLocked doLiteSpeed + + if [ ! -d /var/www/html ]; then + mkdir -p /var/www/html + fi + + set64 + + addUserGroup apache apache + addToAccess apache + + chown apache:apache /var/www + chmod 551 /var/www + + cd ${CWD} + FILE=${CWD}/${LITESPEED_NAME}.tar.gz + + checkFile ${FILE} + + echo "Extracting ${FILE}..." + tar xzf ${FILE} --no-same-owner + + cd lsws-${LITESPEED_VER} + + if [ ! -d "${LSWS_HOME}" ]; then + mkdir -p "${LSWS_HOME}" + chown -R apache:apache ${LSWS_HOME} + mkdir -p "${LSWS_HOME}/conf" + chown -R apache:apache ${LSWS_HOME}/conf + elif [ -d /usr/local/lsws/autoupdate ]; then + rm -rf /usr/local/lsws/autoupdate + fi + + #configure + echo "Installing LiteSpeed ${LITESPEED_VER}..." + + rm -rf ./add-ons/cpanel/lsws_whm_plugin + . ./functions.sh + init + export LSWS_HOME=${LSWS_HOME} + export LSINSTALL_DIR=`pwd` + export PHP_SUEXEC=2 + export AP_PORT_OFFSET=0 + export ADMIN_USER=admin + export ADMIN_PASS="`random_pass`" + if [ -e /usr/local/directadmin/data/users/admin/user.conf ]; then + export ADMIN_EMAIL=`grep -m1 '^email=' /usr/local/directadmin/data/users/admin/user.conf | cut -d= -f2` + fi + if [ -e /usr/local/lsws/bin/lshttpd ]; then + export INSTALL_TYPE="upgrade" + else + export INSTALL_TYPE="reinstall" + fi + export PHP_SUFFIX=php + export SETUP_PHP=0 + export ADMIN_PORT=7080 + export DEFAULT_PORT=80 + export HOST_PANEL="directadmin" + export WS_USER=apache + export WS_GROUP=apache + export DIR_OWN="apache:apache" + export CONF_OWN="apache:apache" + + echo "" + echo "Installing LiteSpeed web server, please wait... " + echo "" + + if [ ! -s ${LSWS_HOME}/admin/conf/htpasswd ]; then + ADMIN_PHP=${LSINSTALL_DIR}/admin/fcgi-bin/admin_php5 + if [ ! -e ${ADMIN_PHP} ]; then + ADMIN_PHP=${LSINSTALL_DIR}/admin/fcgi-bin/admin_php + fi + ENCRYPT_PASS=`${ADMIN_PHP} -q ${LSINSTALL_DIR}/admin/misc/htpasswd.php "${ADMIN_PASS}"` + echo "${ADMIN_USER}:${ENCRYPT_PASS}" > "${LSINSTALL_DIR}/admin/conf/htpasswd" + SHOWPASSWORD=1 + else + SHOWPASSWORD=0 + fi + + if [ -e /usr/local/lsws/bin/lshttpd ]; then + readCurrentConfig + fi + + configRuby + buildApConfigFiles + if [ ! -s ${LSWS_HOME}/admin/conf/htpasswd ]; then + admin_login + fi + chmod 711 /var/log/httpd/ + chgrp apache /var/log/httpd/ + chown apache:apache /var/log/httpd/domains + installation + + echo "" + $LSWS_HOME/admin/misc/rc-inst.sh + + removeLockfile + doLiteSpeedLicense 0 + + setVal nginx_proxy 0 ${DACONF_TEMPLATE_FILE} + setVal nginx_proxy 0 ${DACONF_FILE} + setVal nginx 0 ${DACONF_TEMPLATE_FILE} + setVal nginx 0 ${DACONF_FILE} + setVal litespeed 1 ${DACONF_TEMPLATE_FILE} + setVal litespeed 1 ${DACONF_FILE} + setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE} + setVal openlitespeed 0 ${DACONF_FILE} + killall httpd >/dev/null 2>&1 + killall nginx >/dev/null 2>&1 + doRestartDA + set_service httpd delete + set_service nginx delete + killall -9 httpd >/dev/null 2>&1 + killall -9 nginx >/dev/null 2>&1 + + if [ ! -L ${SYSTEMDDIR}/lshttpd.service ] && [ -e ${SYSTEMDDIR}/lshttpd.service ]; then + rm -f ${SYSTEMDDIR}/lshttpd.service + systemctl daemon-reload + fi + + if [ ! -L ${SYSTEMDDIR}/lsws.service ] && [ -e ${SYSTEMDDIR}/lsws.service ]; then + rm -f ${SYSTEMDDIR}/lsws.service + systemctl daemon-reload + fi + + echo "Enabling litespeed in systemd..." + if [ -L ${SYSTEMDDIR}/litespeed.service ]; then + rm -f ${SYSTEMDDIR}/litespeed.service + fi + if [ -e ${CB_CUST_SYSTEMD}/litespeed.service ]; then + cp -f ${CB_CUST_SYSTEMD}/litespeed.service ${SYSTEMDDIR}/litespeed.service + else + cp -f ${CB_SYSTEMD}/litespeed.service ${SYSTEMDDIR}/litespeed.service + fi + if [ -e /etc/systemd/system/multi-user.target.wants/lshttpd.service ]; then + rm -f /etc/systemd/system/multi-user.target.wants/lshttpd.service + fi + if [ -e /etc/systemd/system/multi-user.target.wants/lsws.service ]; then + rm -f /etc/systemd/system/multi-user.target.wants/lsws.service + fi + + if [ "${SYSTEMD}" = "yes" ]; then + chmod 644 ${SYSTEMDDIR}/litespeed.service + systemctl daemon-reload + systemctl enable litespeed.service + fi + + set_service litespeed ON + + PLUGIN_DIR=/usr/local/directadmin/plugins/litespeed_webconsole + + mkdir -p ${PLUGIN_DIR}/hooks + mkdir -p ${PLUGIN_DIR}/admin + mkdir -p ${PLUGIN_DIR}/images + + curl ${CURL_CONNECT_OPTIONS} -o ${PLUGIN_DIR}/images/admin_icon.svg https://www.litespeedtech.com/images/logos/lsws-icon.svg + + echo 'LiteSpeed WebAdmin Console' > ${PLUGIN_DIR}/hooks/admin_img.html + echo 'LiteSpeed WebAdmin Console' > ${PLUGIN_DIR}/hooks/admin_txt.html + + touch ${PLUGIN_DIR}/admin/index.html + + echo 'active=yes' > ${PLUGIN_DIR}/plugin.conf + echo 'author=www.litespeedtech.com, Martynas Bendorius' >> ${PLUGIN_DIR}/plugin.conf + echo 'id=litespeed' >> ${PLUGIN_DIR}/plugin.conf + echo 'installed=yes' >> ${PLUGIN_DIR}/plugin.conf + echo 'name=LiteSpeed WebAdmin Console' >> ${PLUGIN_DIR}/plugin.conf + echo 'update_url=' >> ${PLUGIN_DIR}/plugin.conf + echo 'version=0.1' >> ${PLUGIN_DIR}/plugin.conf + echo 'version_url=' >> ${PLUGIN_DIR}/plugin.conf + + chown -R diradmin:diradmin ${PLUGIN_DIR} + + csf_enable_quic + + #Disable nginx & apache when switching to litespeed + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${SYSTEMDDIR}/nginx.service ]; then + systemctl disable nginx.service 2> /dev/null + rm -f ${SYSTEMDDIR}/nginx.service + systemctl daemon-reload + fi + if [ -e ${SYSTEMDDIR}/httpd.service ]; then + systemctl disable httpd.service 2> /dev/null + rm -f ${SYSTEMDDIR}/httpd.service + systemctl daemon-reload + fi + else + if [ ${OS} = "FreeBSD" ]; then + if [ -e /usr/local/etc/rc.d/nginx ]; then + rm -f /usr/local/etc/rc.d/nginx + fi + if [ -e /usr/local/etc/rc.d/httpd ]; then + rm -f /usr/local/etc/rc.d/httpd + fi + elif [ -e /etc/debian_version ]; then + if [ -e /etc/init.d/nginx ]; then + update-rc.d nginx remove + rm -f /etc/init.d/nginx + fi + if [ -e /etc/init.d/httpd ]; then + update-rc.d httpd remove + rm -f /etc/init.d/httpd + fi + else + if [ -e /etc/rc.d/init.d/nginx ]; then + /sbin/chkconfig nginx off + rm -f /etc/rc.d/init.d/nginx + fi + if [ -e /etc/rc.d/init.d/httpd ]; then + /sbin/chkconfig httpd off + rm -f /etc/rc.d/init.d/httpd + fi + fi + fi + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + if [ "${CAGEFS_OPT}" = "yes" ]; then + /usr/sbin/cagefsctl --configure-litespeed + /usr/sbin/cagefsctl --remount-all + fi + + if [ -d /tmp/lshttpd ]; then + rm -rf /tmp/lshttpd + fi + + if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's|| 2\n |g' /usr/local/lsws/conf/httpd_config.xml + fi + + echo "Restarting litespeed." + control_service litespeed reload + + #Reload detached lsphp processes + touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt + + echo "Installation of LiteSpeed ${LITESPEED_VER} is now complete." + echo "Admin panel address: http://${HOSTNAME}:7080. Please make sure that port 7080 is open in firewall." + if [ "${SHOWPASSWORD}" = "1" ]; then + if [ -e /usr/local/directadmin/scripts/setup.txt ]; then + if ! grep -m1 -q '^litespeedadmin=' /usr/local/directadmin/scripts/setup.txt; then + echo "litespeedadmin=${ADMIN_PASS}" >> /usr/local/directadmin/scripts/setup.txt + fi + fi + echo "Admin password: ${ADMIN_PASS}" + fi + + writeLog "LiteSpeed ${LITESPEED_VER} installed" + + removeLockfile +} + +#################################################### + +doRemoveLiteSpeed() { + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + do_exit 1 "You cannot remove LiteSpeed, because you have it set in options.conf file." + fi + + if [ ! -d /usr/local/lsws ]; then + do_exit 1 "/usr/local/lsws does not exist, cannot remove..." + fi + + echo "Disabling litespeed in services.status..." + set_service litespeed delete + + control_service litespeed stop + + remove_directory /usr/local/directadmin/plugins/litespeed_webconsole + remove_directory /usr/local/lsws + + if [ -e ${INITDDIR}/litespeed ]; then + if [ -e /etc/debian_version ]; then + update-rc.d litespeed remove + elif [ ${OS} != "FreeBSD" ]; then + /sbin/chkconfig litespeed off + fi + echo "Removing ${INITDDIR}/litespeed..." + rm -f ${INITDDIR}/litespeed + fi + + if [ -e ${INITDDIR}/lsws ]; then + if [ -e /etc/debian_version ]; then + update-rc.d lsws remove + elif [ ${OS} != "FreeBSD" ]; then + /sbin/chkconfig lsws off + fi + echo "Removing ${INITDDIR}/lsws..." + rm -f ${INITDDIR}/lsws + fi + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Disabling litespeed in systemd..." + if [ -e ${SYSTEMDDIR}/litespeed.service ]; then + systemctl disable lshttpd.service 2> /dev/null + systemctl disable litespeed.service 2> /dev/null + rm -f ${SYSTEMDDIR}/lshttpd.service + rm -f ${SYSTEMDDIR}/litespeed.service + rm -f ${SYSTEMDDIR}/openlitespeed.service + systemctl daemon-reload + fi + fi + + ldconfig + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "LiteSpeed has been successfully removed" + writeLog "LiteSpeed removed" +} + +#################################################### + +add_openlitespeed_alias_redirect() { + #A fake P real + F=$1 + A=$2 + P=$3 + + printf "\tcontext /${A}/ {\n" >> ${F} + if [ -d /var/www/html/${P} ]; then + printf "\t\tlocation /var/www/html/${P}/\n" >> ${F} + else + printf "\t\tlocation /var/www/html/${P}\n" >> ${F} + fi + printf "\t\tinclude /usr/local/lsws/conf/httpd-webapps-php.conf\n" >> ${F} + printf "\t}\n" >> ${F} +} + +add_openlitespeed_alias() { + F=$1 + A=$2 + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + printf "\tcontext /${A}/ {\n" >> ${F} + if [ -d /var/www/html/${A} ]; then + printf "\t\tlocation /var/www/html/${A}/\n" >> ${F} + else + printf "\t\tlocation /var/www/html/${A}\n" >> ${F} + fi + printf "\t\tinclude /usr/local/lsws/conf/httpd-webapps-php.conf\n" >> ${F} + printf "\t}\n" >> ${F} + fi +} + +do_rewrite_openlitespeed_webapps() { + if [ -e ${WORKDIR}/custom/openlitespeed/conf/httpd-alias.conf ] && [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + cp -pf ${WORKDIR}/custom/openlitespeed/conf/httpd-alias.conf /usr/local/lsws/conf/httpd-alias.conf + else + NW=/usr/local/lsws/conf/httpd-alias.conf + + : > ${NW} + + #For let's encrypt challenges + LETSENCRYPT=`getDA_Opt letsencrypt 1` + if [ "${LETSENCRYPT}" = "1" ]; then + add_openlitespeed_alias ${NW} .well-known/acme-challenge + fi + + if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then + add_openlitespeed_alias ${NW} squirrelmail + fi + + if [ "${ROUNDCUBE_OPT}" = "yes" ]; then + add_openlitespeed_alias ${NW} roundcube + fi + + if [ "${PHPMYADMIN_OPT}" = "yes" ]; then + add_openlitespeed_alias ${NW} phpMyAdmin + add_openlitespeed_alias_redirect ${NW} phpmyadmin phpMyAdmin + add_openlitespeed_alias_redirect ${NW} pma phpMyAdmin + fi + + WEBMAILLINK=`get_webmail_link` + if [ -e /var/www/html/${WEBMAILLINK} ]; then + if [ "${WEBMAILLINK}" = "webmail" ]; then + add_openlitespeed_alias ${NW} webmail + else + add_openlitespeed_alias_redirect ${NW} webmail ${WEBMAILLINK} + fi + fi + + #protect other places + printf '\tcontext /roundcube/bin/ {\n' >> ${NW} + printf '\t\ttype NULL\n' >> ${NW} + printf '\t\tlocation /var/www/html/roundcube/bin\n' >> ${NW} + printf '\t\tallowBrowse 0\n' >> ${NW} + printf '\t\taddDefaultCharset off\n' >> ${NW} + printf '\t}\n' >> ${NW} + + printf '\tcontext /roundcube/SQL/ {\n' >> ${NW} + printf '\t\ttype NULL\n' >> ${NW} + printf '\t\tlocation /var/www/html/roundcube/SQL\n' >> ${NW} + printf '\t\tallowBrowse 0\n' >> ${NW} + printf '\t\taddDefaultCharset off\n' >> ${NW} + printf '\t}\n' >> ${NW} + + printf '\tcontext /roundcube/config/ {\n' >> ${NW} + printf '\t\ttype NULL\n' >> ${NW} + printf '\t\tlocation /var/www/html/roundcube/config\n' >> ${NW} + printf '\t\tallowBrowse 0\n' >> ${NW} + printf '\t\taddDefaultCharset off\n' >> ${NW} + printf '\t}\n' >> ${NW} + + printf '\tcontext /roundcube/logs/ {\n' >> ${NW} + printf '\t\ttype NULL\n' >> ${NW} + printf '\t\tlocation /var/www/html/roundcube/logs\n' >> ${NW} + printf '\t\tallowBrowse 0\n' >> ${NW} + printf '\t\taddDefaultCharset off\n' >> ${NW} + printf '\t}\n' >> ${NW} + + printf '\tcontext /roundcube/temp/ {\n' >> ${NW} + printf '\t\ttype NULL\n' >> ${NW} + printf '\t\tlocation /var/www/html/roundcube/temp\n' >> ${NW} + printf '\t\tallowBrowse 0\n' >> ${NW} + printf '\t\taddDefaultCharset off\n' >> ${NW} + printf '\t}\n' >> ${NW} + + printf '\tcontext /phpMyAdmin/log/ {\n' >> ${NW} + printf '\t\ttype NULL\n' >> ${NW} + printf '\t\tlocation /var/www/html/phpMyAdmin/log\n' >> ${NW} + printf '\t\tallowBrowse 0\n' >> ${NW} + printf '\t\taddDefaultCharset off\n' >> ${NW} + printf '\t}\n' >> ${NW} + fi + + if [ -s "${WEBAPPS_LIST}" ]; then + #https://forum.directadmin.com/showthread.php?t=48203&p=247343#post247343 + echo "Adding custom webapps from ${WEBAPPS_LIST}" + + cat ${WEBAPPS_LIST} | while read l; do + app=`echo "$l" | cut -d= -f1` + app_path=`echo "$l" | cut -d= -f2` + + if [ "${app}" = "" ] || [ "${app_path}" = "" ]; then + echo "${boldon}Check your ${WEBAPPS_LIST}. A name or path is blank.${boldoff}" + echo "name=$app" + echo "path=$app_path" + continue + fi + + if [ ! -e /var/www/html/${app_path} ]; then + echo "${boldon}Cannot find path /var/www/html/${app_path} for alias ${app}${boldoff}" + continue + fi + + if [ -e /var/www/html/${app} ] && [ "${app}" = "${app_path}" ]; then + add_openlitespeed_alias ${NW} ${app} + else + add_openlitespeed_alias_redirect ${NW} ${app} ${app_path} + fi + echo "Added ${app} pointing to ${app_path}" + done + fi +} + +doOpenLiteSpeed() { + if [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then + do_exit 1 "You cannot install OpenLiteSpeed, because you do not have it set in options.conf file." + fi + + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ] && [ "${OS_CENTOS_VER}" = "8" ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage libnsl` -ne 0 ]; then + yum -y install libnsl + fi + fi + fi + + if [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; then + getFile openlitespeed/openlitespeed-${OPENLITESPEED_VER}.src.tgz openlitespeed_src openlitespeed-${OPENLITESPEED_VER}.src.tgz + else + getFile openlitespeed/openlitespeed-${OPENLITESPEED_VER}.tgz openlitespeed openlitespeed-${OPENLITESPEED_VER}.tgz + fi + + quitIfLocked doOpenLiteSpeed + + #die die die!! + if [ -s /usr/sbin/apache2 ]; then + chmod 0 /usr/sbin/apache2 + killall -9 apache2 2> /dev/null + fi + if [ -s /usr/lib/apache2/mpm-prefork/apache2 ]; then + chmod 0 /usr/lib/apache2/mpm-prefork/apache2 + killall -9 apache2 2> /dev/null + fi + + if [ ! -d /var/www/html ]; then + mkdir -p /var/www/html + fi + + set64 + + addUserGroup lsadm lsadm + addUserGroup apache apache + addToAccess apache + + chown apache:apache /var/www + chmod 551 /var/www + + mkdir -p /var/log/httpd/domains + chmod 710 /var/log/httpd/ + chgrp apache /var/log/httpd/ + chown apache:apache /var/log/httpd/domains + + find /var/log/httpd -user root -exec chown apache {} \; + + cd ${CWD} + if [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; then + FILE=${CWD}/openlitespeed-${OPENLITESPEED_VER}.src.tgz + else + FILE=${CWD}/openlitespeed-${OPENLITESPEED_VER}.tgz + fi + + checkFile ${FILE} + + echo "Installing OpenLiteSpeed ${OPENLITESPEED_VER}..." + if [ ! -d "${LSWS_HOME}" ]; then + mkdir -p "${LSWS_HOME}/conf" + elif [ -d /usr/local/lsws/autoupdate ]; then + rm -rf /usr/local/lsws/autoupdate + fi + + if [ -L /usr/local/lsws/admin/html ]; then + rm -f /usr/local/lsws/admin/html + fi + + if [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; then + echo "Extracting ${FILE}..." + tar xzf ${FILE} --no-same-owner + cd openlitespeed-${OPENLITESPEED_VER} + else + tar xzf ${FILE} -C /usr/local/lsws/ --strip-components=1 --no-same-owner + fi + + if [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; then + setFDSETSIZE + + #configure + echo "Configuring openlitespeed-${OPENLITESPEED_VER}" + ${CWD}/${OPENLITESPEED_CONFIGURE} + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure Apache 2. Check the ${APACHE2_CONFIGURE} file\n" + do_exit 1 + fi + echo "Done Configuration." + + while echo "Trying to make OpenLiteSpeed..."; do + if [ "${OS}" = "FreeBSD" ]; then + #gmake could be used in the future, if problems occur + make -j ${CPU_CORES} + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 0 + fi + else + break + fi + done + echo "Make complete" + + checkRPMS + fi + + #setup the directadmin.conf + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + setVal cloud_cache 1 ${DACONF_TEMPLATE_FILE} + setVal cloud_cache 1 ${DACONF_FILE} + echo "action=cache&value=showallusers" >> ${TASK_QUEUE} + run_dataskq + elif [ "${CLOUDLINUX_OPT}" = "no" ]; then + setVal cloud_cache 0 ${DACONF_TEMPLATE_FILE} + setVal cloud_cache 0 ${DACONF_FILE} + fi + + setVal nginx 0 ${DACONF_TEMPLATE_FILE} + setVal nginx 0 ${DACONF_FILE} + setVal nginx_proxy 0 ${DACONF_TEMPLATE_FILE} + setVal nginx_proxy 0 ${DACONF_FILE} + setVal litespeed 0 ${DACONF_TEMPLATE_FILE} + setVal litespeed 0 ${DACONF_FILE} + setVal openlitespeed 1 ${DACONF_TEMPLATE_FILE} + setVal openlitespeed 1 ${DACONF_FILE} + killall nginx >/dev/null 2>&1 + killall litespeed >/dev/null 2>&1 + killall httpd >/dev/null 2>&1 + doRestartDA + set_service nginx delete + set_service httpd delete + killall -9 nginx >/dev/null 2>&1 + killall -9 litespeed >/dev/null 2>&1 + killall -9 httpd >/dev/null 2>&1 + + set_service litespeed ON + + if [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; then + echo "Installing OpenLiteSpeed ${OPENLITESPEED_VER}..." + if [ "${OS}" = "FreeBSD" ]; then + #gmake could be used in the future, if problems occur + make install + else + make install + fi + fi + + # Remove LiteSpeed Enterprise binary if it exists, symlink to OpenLiteSpeed + ln -sf /usr/local/lsws/bin/openlitespeed /usr/local/lsws/bin/litespeed + ln -sf /usr/local/lsws/bin/openlitespeed /usr/local/lsws/bin/lshttpd + rm -f /usr/local/lsws/bin/lscgid + cp -pf /usr/local/lsws/admin/conf/admin_config.conf.in /usr/local/lsws/admin/conf/admin_config.conf + perl -pi -e 's|%ADMIN_PORT%|7080|g' /usr/local/lsws/admin/conf/admin_config.conf + perl -pi -e 's|secure 0|secure 1\n keyFile\t/usr/local/lsws/ssl.key/server.key\n certFile\t/usr/local/lsws/ssl.crt/server.crt.combined \n clientVerify\t0|g' /usr/local/lsws/admin/conf/admin_config.conf + + if [ -s /usr/local/lsws/admin/fcgi-bin/admin_php5 ] && [ ! -L /usr/local/lsws/admin/fcgi-bin/admin_php ]; then + ln -sf /usr/local/lsws/admin/fcgi-bin/admin_php5 /usr/local/lsws/admin/fcgi-bin/admin_php + fi + if [ -d /usr/local/lsws/admin/html.open ] && [ ! -L /usr/local/lsws/admin/html ]; then + ln -sf /usr/local/lsws/admin/html.open /usr/local/lsws/admin/html + fi + if [ ! -d /usr/local/lsws/admin/logs ]; then + mkdir -p /usr/local/lsws/admin/logs + fi + chmod 700 /usr/local/lsws/admin/conf + chown -R lsadm:lsadm /usr/local/lsws/admin/conf + chmod 600 /usr/local/lsws/admin/conf/* + if [ ! -s /usr/local/lsws/admin/conf/htpasswd ]; then + export ADMIN_USER=admin + export ADMIN_PASS="`random_pass`" + ENCRYPT_PASS="`/usr/local/lsws/admin/fcgi-bin/admin_php -q /usr/local/lsws/admin/misc/htpasswd.php \"${ADMIN_PASS}\"`" + echo "admin:${ENCRYPT_PASS}" > "/usr/local/lsws/admin/conf/htpasswd" + SHOWPASSWORD=1 + else + SHOWPASSWORD=0 + fi + + if [ ! -d /usr/local/lsws/admin/tmp ]; then + mkdir -p /usr/local/lsws/admin/tmp + chown lsadm:apache /usr/local/lsws/admin/tmp + chmod 710 /usr/local/lsws/admin/tmp + fi + chown lsadm:apache /usr/local/lsws/admin + chmod 710 /usr/local/lsws/admin + + if [ "${MODSECURITY_OPT}" = "yes" ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Installing ModSecurity module for OpenLiteSpeed ${OPENLITESPEED_VER}..." + cd ./src/modules/modsecurity-ls + gmake -f Makefile.f + cp -fp mod_security.so /usr/local/lsws/modules/mod_security.so + cd ${CWD}/openlitespeed-${OPENLITESPEED_VER} + fi + echo -n '' > ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + echo 'module mod_security {' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + echo 'modsecurity on' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + echo 'modsecurity_rules_file /usr/local/lsws/conf/httpd-modsecurity.conf' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + create_global_modsecurity_rules + echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + echo '}' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + cp -pf ${MODSECURITY_OPENLITESPEED_INCLUDE} ${LSWS_HOME}/conf/httpd-modsecurity.conf + else + echo -n '' > ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf + fi + + removeLockfile + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/litespeed ]; then + echo "Removing ${INITDDIR}/litespeed..." + rm -f ${INITDDIR}/litespeed + fi + + #fresh install, add to System Backup + if [ ! -s ${SYSTEMDDIR}/litespeed.service ]; then + add_to_system_backup dirs /usr/local/lsws + fi + + echo "Enabling litespeed in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/litespeed.service ]; then + cp -f ${CB_CUST_SYSTEMD}/litespeed.service ${SYSTEMDDIR}/litespeed.service + else + cp -f ${CB_SYSTEMD}/litespeed.service ${SYSTEMDDIR}/litespeed.service + fi + if [ ! -L /etc/systemd/system/lshttpd.service ]; then + rm -f /etc/systemd/system/lshttpd.service + fi + if [ -e /etc/systemd/system/multi-user.target.wants/lshttpd.service ]; then + rm -f /etc/systemd/system/multi-user.target.wants/lshttpd.service + fi + + chmod 644 ${SYSTEMDDIR}/litespeed.service + systemctl daemon-reload + systemctl enable litespeed.service + else + if [ ${OS} != "FreeBSD" ]; then + if [ ! -s ${LSWS_HOME}/admin/misc/lsws.rc ] && [ -s /usr/local/lsws/admin/misc/lsws.rc.in ]; then + sed "s:%LSWS_CTRL%:${LSWS_HOME}/bin/lswsctrl:" "/usr/local/lsws/admin/misc/lsws.rc.in" > "${LSWS_HOME}/admin/misc/lsws.rc" + fi + elif [ -e ${CWD}/openlitespeed-${OPENLITESPEED_VER}/dist/admin/misc/lsws.rc.in ]; then + sed "s:%LSWS_CTRL%:${LSWS_HOME}/bin/lswsctrl:" "${CWD}/openlitespeed-${OPENLITESPEED_VER}/dist/admin/misc/lsws.rc.in" > "${LSWS_HOME}/admin/misc/lsws.rc" + fi + /usr/local/lsws/admin/misc/rc-inst.sh + if [ -e /etc/debian_version ]; then + if [ -e /etc/init.d/lsws ]; then + ln -sf /etc/init.d/lsws /etc/init.d/litespeed + fi + update-rc.d litespeed defaults + elif [ ${OS} != "FreeBSD" ]; then + if [ -e /etc/rc.d/init.d/lsws ]; then + ln -sf /etc/rc.d/init.d/lsws /etc/rc.d/init.d/litespeed + fi + /sbin/chkconfig litespeed on + elif [ ${OS} = "FreeBSD" ]; then + if [ -e /usr/local/etc/rc.d/lsws.sh ]; then + ln -sf /usr/local/etc/rc.d/lsws.sh /usr/local/etc/rc.d/litespeed + fi + fi + fi + + #Disable nginx & apache when switching to openlitespeed + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${SYSTEMDDIR}/nginx.service ]; then + systemctl disable nginx.service 2> /dev/null + rm -f ${SYSTEMDDIR}/nginx.service + systemctl daemon-reload + fi + if [ -e ${SYSTEMDDIR}/httpd.service ]; then + systemctl disable httpd.service 2> /dev/null + rm -f ${SYSTEMDDIR}/httpd.service + systemctl daemon-reload + fi + else + if [ ${OS} = "FreeBSD" ]; then + if [ -e /usr/local/etc/rc.d/nginx ]; then + rm -f /usr/local/etc/rc.d/nginx + fi + if [ -e /usr/local/etc/rc.d/httpd ]; then + rm -f /etc/init.d/httpd + fi + elif [ -e /etc/debian_version ]; then + if [ -e /etc/init.d/nginx ]; then + update-rc.d nginx remove + rm -f /etc/init.d/nginx + fi + if [ -e /etc/init.d/httpd ]; then + update-rc.d httpd remove + rm -f /etc/init.d/httpd + fi + else + if [ -e /etc/rc.d/init.d/nginx ]; then + /sbin/chkconfig nginx off + rm -f /etc/rc.d/init.d/nginx + fi + if [ -e /etc/rc.d/init.d/httpd ]; then + /sbin/chkconfig httpd off + rm -f /etc/rc.d/init.d/httpd + fi + fi + fi + fi + + HAVE_DACONF=0 + if [ -s ${DACONF_FILE} ]; then + HAVE_DACONF=1 + fi + + #copy the new configs if needed + if [ "`grep -m1 -c 'include' ${LSWS_HOME}/conf/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${LSWS_HOME}/conf/directadmin-vhosts.conf ]; then + cp -rf ${OPENLITESPEEDCONFDIR} ${LSWS_HOME} + + if [ "${OPENLITESPEEDCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${OPENLITESPEEDCUSTOMCONFDIR} ${LSWS_HOME} + fi + fi + + dovecotChecks + + do_rewrite_openlitespeed_webapps + + ensure_server_ca + + csf_enable_quic + + doModSecurityAdj + doSslConfigurationWebserver + + #rewrite ips.conf if needed + echo "action=rewrite&value=ips" >> ${TASK_QUEUE} + echo "action=rewrite&value=openlitespeed" >> ${TASK_QUEUE} + + run_dataskq + + #tokenize the IP and ports if needed + tokenize_IP + tokenize_ports + + doVhosts + + if [ ! -s ${LSWS_HOME}/ssl.key/server.key ] || [ ! -s ${LSWS_HOME}/ssl.crt/server.crt.combined ]; then + cd ${WORKDIR} + mkdir -p ${LSWS_HOME}/ssl.key + mkdir -p ${LSWS_HOME}/ssl.crt + if [ -e /etc/httpd/conf/ssl.crt/server.crt ] && [ -e /etc/httpd/conf/ssl.key/server.key ]; then + cat /etc/httpd/conf/ssl.key/server.key > ${LSWS_HOME}/ssl.key/server.key + cat /etc/httpd/conf/ssl.crt/server.crt >> ${LSWS_HOME}/ssl.crt/server.crt.combined + if [ -e /etc/httpd/conf/ssl.crt/server.ca ]; then + cat /etc/httpd/conf/ssl.crt/server.ca >> ${LSWS_HOME}/ssl.crt/server.crt.combined + fi + elif [ -e /etc/nginx/ssl.crt/server.crt.combined ] && [ -e /etc/nginx/ssl.key/server.key ]; then + cat /etc/nginx/ssl.key/server.key > ${LSWS_HOME}/ssl.crt/server.crt + cat /etc/nginx/ssl.crt/server.crt.combined >> ${LSWS_HOME}/ssl.crt/server.crt.combined + else + #install the cert/key + /usr/bin/openssl req -x509 -newkey rsa:2048 -keyout ${LSWS_HOME}/ssl.key/server.key -out ${LSWS_HOME}/ssl.crt/server.crt.combined -days 9999 -nodes -config ./${APCERTCONF} + fi + + chmod 600 ${LSWS_HOME}/ssl.crt/server.crt.combined + chmod 600 ${LSWS_HOME}/ssl.key/server.key + + cd ${CWD} + fi + + if [ ! -e ${WWWDIR}/index.html ]; then + if [ -e ${WWWDIR}/index.html.en ]; then + cp -f ${WWWDIR}/index.html.en ${WWWDIR}/index.html + else + echo "OpenLiteSpeed is functioning normally" > ${WWWDIR}/index.html + fi + fi + perl -pi -e 's/[A-Za-z]* is functioning normally/OpenLiteSpeed is functioning normally/' ${WWWDIR}/index.html + if [ ! -e /etc/logrotate.d/apache ] && [ ${OS} != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/apache.logrotate -o /etc/logrotate.d/apache + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + if [ "${CAGEFS_OPT}" = "yes" ]; then + /usr/sbin/cagefsctl --remount-all + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${CAGEFS_OPT}" = "yes" ]; then + OLS_ENABLELVE=2 + elif [ "${CLOUDLINUX_OPT}" = "yes" ]; then + OLS_ENABLELVE=1 + else + OLS_ENABLELVE=0 + fi + + if ! grep -m1 -q "^enableLVE.*=${OLS_ENABLELVE}" ${LSWS_HOME}/conf/httpd-defaults.conf; then + perl -pi -e "s|^enableLVE.*|enableLVE ${OLS_ENABLELVE}|g" ${LSWS_HOME}/conf/httpd-defaults.conf + fi + + ldconfig + + if [ ! -d ${LSWS_HOME}/logs ]; then + mkdir -p ${LSWS_HOME}/logs + fi + # lsadm owner needed for WebAdmin to work (disabled by default) + "make install" to succeed + chown -R lsadm:lsadm /usr/local/lsws/conf + mkdir -p ${LSWS_HOME}/cachedata + chown apache:apache ${LSWS_HOME}/cachedata + # chmod lsws directory 750 + if ! stat ${LSWS_HOME}/conf | grep -m1 Access | grep -m1 -q -o "\---"; then + chmod 750 ${LSWS_HOME}/conf + fi + + if [ -d /tmp/lshttpd ]; then + rm -rf /tmp/lshttpd + fi + + echo "Restarting OpenLiteSpeed." + control_service litespeed reload + + #Reload detached lsphp processes + touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt + + echo "Installation of OpenLiteSpeed ${OPENLITESPEED_VER} is now complete." + echo "Admin panel address: http://${HOSTNAME}:7080. Please make sure that port 7080 is open in firewall. Panel is read-only." + if [ "${SHOWPASSWORD}" = "1" ]; then + if [ -e /usr/local/directadmin/scripts/setup.txt ]; then + if ! grep -m1 -q '^litespeedadmin=' /usr/local/directadmin/scripts/setup.txt; then + echo "litespeedadmin=${ADMIN_PASS}" >> /usr/local/directadmin/scripts/setup.txt + fi + fi + echo "Admin password: ${ADMIN_PASS}" + fi + + writeLog "OpenLiteSpeed ${OPENLITESPEED_VER} installed" + removeLockfile +} + +doModSecurityAdj() { + if [ "${MODSECURITY_OPT}" = "yes" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then + MODSECURITY_CONF_FILE=/etc/httpd/conf/extra/httpd-modsecurity.conf + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if ! grep -m1 -q '0' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's|0|1|g' /usr/local/lsws/conf/httpd_config.xml + fi + if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's||\n /tmp|g' /usr/local/lsws/conf/httpd_config.xml + fi + if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's||\n /var/log/httpd/modsec_audit.log|g' /usr/local/lsws/conf/httpd_config.xml + fi + fi + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + MODSECURITY_CONF_FILE=/usr/local/lsws/conf/httpd-modsecurity.conf + else + MODSECURITY_CONF_FILE=/etc/nginx/nginx-modsecurity.conf + fi + + if [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ] && [ "${CLAMAV_OPT}" = "yes" ]; then + if [ ! -e /usr/local/bin/clamdscan ]; then + removeLockfile + doclamav + fi + if [ ! -e /usr/local/bin/clamdscan ]; then + do_exit 1 "Cannot enable upload scan in ProFTPd because there is no ClamAV (/usr/local/bin/clamdscan) on the system." + fi + cp -pf ${RUNAV_PL} /usr/local/bin/runav.pl + chmod 755 /usr/local/bin/runav.pl + cp -pf ${RUNAV_CONF} /etc/modsecurity.d/runav.conf + else + rm -f /usr/local/bin/runav.pl + rm -f /etc/modsecurity.d/runav.conf + fi + + if [ -d ${MODSECURITY_CUSTOM_RULES} ]; then + echo "Copying custom ModSecurity rules to /etc/modsecurity.d/..." + cp -Rpf ${MODSECURITY_CUSTOM_RULES}/* /etc/modsecurity.d/ + fi + + if [ -s /etc/modsecurity.d/000_i360_0.conf ]; then + echo "Defaulting to Imunify 360 SecDefaultAction..." + perl -pi -e 's|^SecDefaultAction|#SecDefaultAction|g' ${MODSECURITY_CONF_FILE} + fi + if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + echo "Defaulting to Comodo WAF SecDefaultAction..." + perl -pi -e 's|^SecDefaultAction|#SecDefaultAction|g' ${MODSECURITY_CONF_FILE} + fi + else + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if ! grep -m1 -q '1' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's|1|0|g' /usr/local/lsws/conf/httpd_config.xml + fi + fi + fi +} + +#################################################### + +doModSecurityRules() { + cd ${CWD} + + if [ ! -d /etc/modsecurity.d ]; then + mkdir -p /etc/modsecurity.d + fi + + rm -f /etc/modsecurity.d/* + + if [ "${MODSECURITY_RULESET_OPT}" = "" ]; then + echo ""; + echo ""; + echo ""; + echo "**********************"; + echo ""; + echo "The setting modsecurity_ruleset is blank. This will cause rewrite issues."; + echo "Please set it to something, eg:"; + echo " ./build set modsecurity_ruleset ${MODSECURITY_RULESET_DEF}"; + echo ""; + echo "**********************"; + echo ""; + echo ""; + echo ""; + sleep 5; + fi + + if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + echo "Installing Comodo Rule Set for ModSecurity..." + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + # Generate empty files, so that nginx would still be able to start + if [ ! -e /etc/modsecurity.d/comodo_rules.conf.main ]; then + touch /etc/modsecurity.d/comodo_rules.conf.main + fi + + if [ ! -e /etc/modsecurity.d/comodo_rules.conf ]; then + touch /etc/modsecurity.d/comodo_rules.conf + fi + getFileCWAF cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz + CWAF_PLATFORM=Nginx + elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then + getFileCWAF cwaf_rules_ls-${CWAF_RULES_LS_VER}.tgz cwaf_rules_ls + CWAF_PLATFORM=LiteSpeed + else + getFileCWAF cwaf_rules-${CWAF_RULES_VER}.tgz cwaf_rules + CWAF_PLATFORM=Apache + fi + if [ ! -e /usr/local/cwaf/scripts/updater.pl ]; then + curl ${CURL_CONNECT_OPTIONS} -o cwaf_client_install.sh ${WEBPATH_CWAF}/cpanel/cwaf_client_install.sh + chmod 700 cwaf_client_install.sh + HOME=/root TERM=xterm ./cwaf_client_install.sh -- --batch --login=nologin --password=nopassword --platform=${CWAF_PLATFORM} + + #### plugin was not installed exit ### + if [ $? -ne 0 ]; then + rm -f cwaf_client_install.sh + do_exit 1 "Installation of Comodo WAF plugin failed" + fi + + cd ${WORKDIR} + rm -f cwaf_client_install.sh + else + echo 'Updating to latest CWAF client version' + /usr/local/cwaf/scripts/update-client.pl + fi + echo "Include /etc/cwaf/cwaf.conf" > /etc/modsecurity.d/comodo_rules.conf.main + + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + perl -pi -e 's/cwaf_platform="Apache"/cwaf_platform="Nginx"/' /etc/cwaf/main.conf + perl -pi -e 's/cwaf_platform="LiteSpeed"/cwaf_platform="Nginx"/' /etc/cwaf/main.conf + /usr/local/cwaf/scripts/updater.pl -p /usr/local/directadmin/custombuild/cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz + cd ${WORKDIR} + rm -f cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz cwaf_rules_nginx_3 + if [ -s /etc/cwaf/cwaf.conf ]; then + if grep -m1 -q '^IncludeOptional' /etc/cwaf/cwaf.conf; then + perl -pi -e 's|IncludeOptional|Include|g' /etc/cwaf/cwaf.conf + fi + fi + elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then + perl -pi -e 's/cwaf_platform="Nginx"/cwaf_platform="LiteSpeed"/' /etc/cwaf/main.conf + perl -pi -e 's/cwaf_platform="Apache"/cwaf_platform="LiteSpeed"/' /etc/cwaf/main.conf + /usr/local/cwaf/scripts/updater.pl -p /usr/local/directadmin/custombuild/cwaf_rules_ls-${CWAF_RULES_LS_VER}.tgz + cd ${WORKDIR} + rm -f cwaf_rules_ls-${CWAF_RULES_LS_VER}.tgz + else + perl -pi -e 's/cwaf_platform="Nginx"/cwaf_platform="Apache"/' /etc/cwaf/main.conf + perl -pi -e 's/cwaf_platform="LiteSpeed"/cwaf_platform="Apache"/' /etc/cwaf/main.conf + /usr/local/cwaf/scripts/updater.pl -p /usr/local/directadmin/custombuild/cwaf_rules-${CWAF_RULES_VER}.tgz + cd ${WORKDIR} + rm -f cwaf_rules-${CWAF_RULES_VER}.tgz + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if grep -m1 -q 'Include [0-9].' /etc/modsecurity.d/comodo_rules.conf.main; then + sed -i '/Include \//! s/Include /Include \/usr\/local\/cwaf\/rules\//g' /etc/modsecurity.d/comodo_rules.conf.main + fi + fi + fi + + if [ "${MODSECURITY_RULESET_OPT}" = "owasp" ]; then + echo "Installing OWASP Core Rule Set for ModSecurity..." + getFile owasp-modsecurity-crs-${OWASP_RULES_VER}.tar.gz owasp3_rules + tar xzf owasp-modsecurity-crs-${OWASP_RULES_VER}.tar.gz -C /etc/modsecurity.d/ owasp-modsecurity-crs-${OWASP_RULES_VER}/crs-setup.conf.example --strip-components=1 --no-same-owner + tar xzf owasp-modsecurity-crs-${OWASP_RULES_VER}.tar.gz -C /etc/modsecurity.d/ owasp-modsecurity-crs-${OWASP_RULES_VER}/rules --strip-components=2 --no-same-owner + echo ${OWASP_RULES_VER} > /etc/modsecurity.d/owasp_rules_version + if [ -e /etc/modsecurity.d/crs-setup.conf.example ]; then + mv -f /etc/modsecurity.d/crs-setup.conf.example /etc/modsecurity.d/crs-setup.conf.main + fi + perl -pi -e 's|^SecDefaultAction|#SecDefaultAction|' /etc/modsecurity.d/crs-setup.conf.main + fi + + doModSecurityAdj + echo "Installation of ModSecurity Rule Set has been finished." + + if [ ! -e /etc/modsecurity.d/comodo_rules.conf.main ]; then + touch /etc/modsecurity.d/comodo_rules.conf.main + fi + + if [ ! -e /etc/modsecurity.d/comodo_rules.conf ]; then + touch /etc/modsecurity.d/comodo_rules.conf + fi + + if [ "$1" != "norestart" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service httpd restart + fi + if [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "nginx" ]; then + control_service nginx restart + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + control_service litespeed reload + fi + fi + + cd ${CWD} +} + +#################################################### + +doModSecsdbmutil() { + cd ${CWD} + + if [ "${MODSECURITY_OPT}" = "no" ]; then + do_exit 1 "Cannot build ModSecurity, because you do not have it set in options.conf file." + fi + + #We don't expect version to change, so, hardcoding it here + MODSECSDBMUTIL_VER=1.0 + MODSECSDBMUTIL_FILENAME=modsec-sdbm-util + + getFile ${MODSECSDBMUTIL_FILENAME}-${MODSECSDBMUTIL_VER}.tar.gz ${MODSECSDBMUTIL_FILENAME} + quitIfLocked doModSecsdbmutil + + FILE=${CWD}/${MODSECSDBMUTIL_FILENAME}-${MODSECSDBMUTIL_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + cd ${MODSECSDBMUTIL_FILENAME}-${MODSECSDBMUTIL_VER} + ./autogen.sh + echo "Configuring ${MODSECSDBMUTIL_FILENAME}-${MODSECSDBMUTIL_VER}..." + ./configure + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure ModSecurity\n" + do_exit 1 + fi + + echo "Done Configuration." + + while echo "Trying to make ModSec-sdbm-util..."; do + make + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): " + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make Complete" + + while echo "Installing ModSec-sdbm-util..."; do + make install + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + echo "ModSec-sdbm-util has been installed successfully." + writeLog "ModSec-sdbm-util ${MODSECSDBMUTIL_VER} installed" + + removeLockfile + cd ${CWD} +} + +doModSecurity() { + cd ${CWD} + + if [ "${MODSECURITY_OPT}" = "no" ]; then + do_exit 1 "Cannot build ModSecurity, because you do not have it set in options.conf file." + fi + + if [ ! -e /usr/include/libxslt/xslt.h ] && [ ! -e /usr/local/include/libxslt/xslt.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libxslt, installing using pkg..." + pkg install -y libxslt + elif [ -e /etc/debian_version ]; then + echo "Cannot find libxslt, installing using apt-get..." + apt-get -y install libxslt-dev + else + echo "Cannot find libxslt, installing using yum..." + yum -y install libxslt-devel + fi + fi + + if [ ! -e /usr/include/lua.h ] && [ ! -e /usr/local/include/lua.h ]; then + if [ "${OS}" != "FreeBSD" ] && [ ! -e /etc/debian_version ]; then + if [ "${OS_CENTOS_VER}" = "8" ]; then + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + yum -y install lua-devel --enablerepo=cloudlinux-PowerTools + elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then + yum -y install lua-devel --enablerepo=PowerTools + elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then + yum -y install lua-devel --enablerepo=ol8_codeready_builder + elif [ -e /etc/yum.repos.d/redhat.repo ]; then + yum -y install lua-devel --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms + else + yum -y install lua-devel --enablerepo=powertools + fi + else + yum -y install lua-devel + fi + fi + fi + + if [ ! -e /usr/lib64/libyajl.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libyajl.so ] && [ ! -e /usr/local/lib/libyajl.so ]; then + if [ ${OS} = "FreeBSD" ]; then + ${PKG_INSTALL} install -y autoconf213 + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get -y install libyajl-dev + else + if [ "${OS_CENTOS_VER}" = "6" ] && [ "${B64}" = "1" ]; then + yum -y install ${WEBPATH}/yajl/yajl-2.1.0-4.el6.x86_64.rpm ${WEBPATH}/yajl/yajl-devel-2.1.0-4.el6.x86_64.rpm + elif [ "${OS_CENTOS_VER}" = "8" ]; then + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + yum -y install yajl-devel --enablerepo=cloudlinux-PowerTools + elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then + yum -y install yajl-devel --enablerepo=PowerTools + elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then + yum -y install yajl-devel --enablerepo=ol8_codeready_builder + elif [ -e /etc/yum.repos.d/redhat.repo ]; then + yum -y install yajl-devel --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms + else + yum -y install yajl-devel --enablerepo=powertools + fi + else + yum -y install yajl-devel + fi + fi + fi + + ldconfig + + if [ "${WEBSERVER_OPT}" = "apache" ]; then + if [ ! -e /usr/sbin/apxs ]; then + echo "/usr/sbin/apxs is not found, skipping ModSecurity for now." + return + fi + if [ ! -e /usr/lib/apache/libaprutil-1.so ]; then + echo "/usr/lib/apache/libaprutil-1.so is not found, skipping ModSecurity for now. Please run './build apache' to get the libraries in place." + return + fi + elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then + echo "ModSecurity is built-in with LiteSpeed, there is no need to install it." + elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + removeLockfile + ./build openlitespeed + else + echo "ModSecurity is not needed for Nginx, please check LibModSecurity (ModSecurity 3.0)." + return + fi + + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + mkdir -p /var/log/modsec_audit + chmod 1733 /var/log/modsec_audit + fi + + if [ "${WEBSERVER_OPT}" = "apache" ]; then + getFile ${MODSECURITY_FILENAME}-${MODSECURITY_VER}.tar.gz ${MODSECURITY_FILENAME} + quitIfLocked doModSecurity + + FILE=${CWD}/${MODSECURITY_FILENAME}-${MODSECURITY_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + cd ${MODSECURITY_FILENAME}-${MODSECURITY_VER} + + echo "Installing ${MODSECURITY_FILENAME}-${MODSECURITY_VER}..." + + if [ ! -e ./configure ]; then + echo "calling aclocal:" + aclocal + + echo "calling libtoolize:" + libtoolize --force + + echo "calling automake:" + automake --add-missing + + echo "calling autoreconf:" + autoreconf + fi + + echo "Configuring ${MODSECURITY_FILENAME}-${MODSECURITY_VER}..." + ${CWD}/${MODSECURITY_CONFIGURE} + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure ModSecurity\n" + do_exit 1 + fi + + echo "Done Configuration." + + while echo "Trying to make ModSecurity..."; do + make CPPFLAGS="-I/usr/include/apache -L/usr/lib/apache -DDEFAULT_USER='\"nginx\"' -DDEFAULT_GROUP='\"nginx\"'" CFLAGS="-I/usr/include/apache -L/usr/lib/apache -DDEFAULT_USER='\"nginx\"' -DDEFAULT_GROUP='\"nginx\"'" -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): " + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 0 + fi + else + break + fi + done + echo "Make Complete" + fi + + mkdir -p /etc/modsecurity.d + chmod 700 /etc/modsecurity.d + + if [ "${WEBSERVER_OPT}" = "apache" ]; then + if [ -e /usr/lib/apache/mod_security2.so ]; then + rm -f /usr/lib/apache/mod_security2.so + fi + + while echo "Installing ModSecurity..."; do + make install + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 0 + fi + else + break + fi + done + fi + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then + #Add mod_security include in apache + if [ -e ${PHPMODULES} ]; then + perl -pi -e 's|^LoadModule security2_module|#LoadModule security2_module|' /etc/httpd/conf/httpd.conf + if ! grep -m1 -q 'httpd-modsecurity' ${PHPMODULES}; then + echo "Include /etc/httpd/conf/extra/httpd-modsecurity.conf" >> ${PHPMODULES} + fi + cp -pf ${MODSECURITY_APACHE_INCLUDE} /etc/httpd/conf/extra/httpd-modsecurity.conf + if [ -e /usr/lib/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then + perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + elif [ -e /usr/lib64/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then + perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib64/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + elif [ -e /usr/lib/x86_64-linux-gnu/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then + perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/x86_64-linux-gnu/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + perl -pi -e 's|^Load|#Load|g' /etc/httpd/conf/extra/httpd-modsecurity.conf + fi + fi + fi + + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + if ! grep -m1 -q '0' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's|0|1|g' /usr/local/lsws/conf/httpd_config.xml + fi + if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's||\n /tmp|g' /usr/local/lsws/conf/httpd_config.xml + fi + if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then + perl -pi -e 's||\n /var/log/httpd/modsec_audit.log|g' /usr/local/lsws/conf/httpd_config.xml + fi + fi + + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + run_dataskq + + if [ -s /usr/local/modsecurity/lib/mod_security2.so ]; then + cp -pf /usr/local/modsecurity/lib/mod_security2.so /usr/lib/apache/mod_security2.so + fi + echo "ModSecurity has been installed successfully." + writeLog "ModSecurity ${MODSECURITY_VER} installed" + + removeLockfile + + #For initial comodo ruleset installation we need to restart webserver + #So that it detects installation of modsecurity + if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ]; then + control_service httpd restart + elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + control_service litespeed reload + fi + fi + + doModSecurityRules norestart + + if [ "${WEBSERVER_OPT}" = "apache" ]; then + control_service httpd restart + elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + control_service litespeed reload + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} +} + +#################################################### + +doModSecurityConnector() { + cd ${CWD} + + #For nginx we need to rebuild it, because ModSecurity is added as a static module + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + getFile ${MODSECURITY_NGINX_CONNECTOR_FILENAME}-${MODSECURITY_NGINX_CONNECTOR_VER}.tar.gz modsecurity3_nginx + tar xzf ${MODSECURITY_NGINX_CONNECTOR_FILENAME}-${MODSECURITY_NGINX_CONNECTOR_VER}.tar.gz + echo -n '' > /etc/nginx/nginx-modsecurity-enable.conf + echo 'modsecurity on;' >> /etc/nginx/nginx-modsecurity-enable.conf + echo 'modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf;' >> /etc/nginx/nginx-modsecurity-enable.conf + create_global_modsecurity_rules + echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules;' >> /etc/nginx/nginx-modsecurity-enable.conf + if [ -s /etc/httpd/conf/extra/nginx-modsecurity-enable.conf ]; then + echo -n '' > /etc/httpd/conf/extra/nginx-modsecurity-enable.conf + fi + if nginx -V 2>&1 | grep -q -o -m1 'modsecurity-nginx-v[^ ]*'; then + MODSECURITY_NGINX_CONNECTORV=`nginx -V 2>&1 | grep -o -m1 'modsecurity-nginx-v[^ ]*' | cut -d- -f3` + else + MODSECURITY_NGINX_CONNECTORV=0 + fi + #Recompile nginx only if connector's version is different + if [ "${MODSECURITY_NGINX_CONNECTORV}" != "${MODSECURITY_NGINX_CONNECTOR_VER}" ]; then + if [ "$1" = "1" ]; then + cd ${CWD} + # Build nginx to enable the module statically (./configure --add-module=../mod_security/nginx/modsecurity) + echo "Building Nginx to enable ModSecurity module statically." + removeLockfile + ./build nginx + fi + fi + elif [ "${WEBSERVER_OPT}" = "apache" ]; then + getFile ${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}.tar.gz modsecurity3_nginx + tar xzf ${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}.tar.gz + if [ -d "${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}" ]; then + rm -rf "${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}" + fi + cd ${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER} + ./autogen.sh + ./configure + make -j ${CPU_CORES} + make install + if [ -s ./src/.libs/mod_security3.so ]; then + cp -pf ./src/.libs/mod_security3.so /usr/lib/apache/mod_security3.so + fi + echo -n '' > /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + echo '' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + echo 'modsecurity on' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + echo 'modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + create_global_modsecurity_rules + echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + echo '' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf + cp -pf ${MODSECURITY_APACHE_INCLUDE} /etc/httpd/conf/extra/httpd-modsecurity.conf + else + if [ -d /etc/nginx ]; then + echo -n '' > /etc/nginx/nginx-modsecurity-enable.conf + fi + fi + if [ ! -d /etc/nginx ]; then + mkdir -p /etc/nginx + fi + + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + cp -pf ${MODSECURITY_NGINX_INCLUDE} /etc/nginx/nginx-modsecurity.conf + elif [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + cp -pf ${MODSECURITY_NGINX_REVERSE_INCLUDE} /etc/nginx/nginx-modsecurity.conf + fi + echo "ModSecurity Connector ${MODSECURITY_NGINX_CONNECTOR_VER} is now enabled in Nginx" +} + +doLibModSecurity() { + cd ${CWD} + + if [ "${MODSECURITY_OPT}" = "no" ]; then + do_exit 1 "Cannot build ModSecurity, because you do not have it set in options.conf file." + fi + + if [ ! -e /usr/include/libxslt/xslt.h ] && [ ! -e /usr/local/include/libxslt/xslt.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find libxslt, installing using pkg..." + pkg install -y libxslt + elif [ -e /etc/debian_version ]; then + echo "Cannot find libxslt, installing using apt-get..." + apt-get -y install libxslt-dev + else + echo "Cannot find libxslt, installing using yum..." + yum -y install libxslt-devel + fi + fi + + if [ ! -e /usr/lib64/libyajl.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libyajl.so ] && [ ! -e /usr/local/lib/libyajl.so ]; then + if [ ${OS} = "FreeBSD" ]; then + ${PKG_INSTALL} install -y autoconf213 + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get -y install libyajl-dev + else + if [ "${OS_CENTOS_VER}" = "6" ] && [ "${B64}" = "1" ]; then + yum -y install ${WEBPATH}/yajl/yajl-2.1.0-4.el6.x86_64.rpm ${WEBPATH}/yajl/yajl-devel-2.1.0-4.el6.x86_64.rpm + else + yum -y install yajl-devel + fi + fi + fi + + if [ ! -s /usr/local/include/maxminddb.h ] && [ "${LIBMAXMINDDB_VER}" != "0" ]; then + echo "Installing latest version of libmaxminddb to provide /usr/local/lib/libmaxminddb.so for LibModSecurity." + dolibmaxminddb + fi + +# if [ ! -e /usr/local/bin/geoipupdate ] && [ "${GEOIPUPDATE_VER}" != "0" ]; then +# echo "Installing latest version of geoipupdate to provide /usr/local/bin/geoipupdate for LibModSecurity." +# doGeoipupdate +# fi + + if [ ! -e /usr/local/lib/liblua.so ] && [ "${LUA_VER}" != "0" ]; then + echo "Installing latest version of lua to provide /usr/local/bin/geoipupdate for LibModSecurity." + doLua + fi + + if [ "${WEBSERVER_OPT}" != "nginx" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${WEBSERVER_OPT}" != "apache" ]; then + do_exit 1 "LibModSecurity connector is only available for nginx and apache right now." + fi + + if [ "${OS_CENTOS_VER}" = "6" ]; then + installDevtoolset + fi + + ldconfig + + getFile ${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER}.tar.gz modsecurity3 + quitIfLocked doModSecurity + + FILE=${CWD}/${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + cd ${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER} + + echo "Configuring ${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER}..." + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "${CWD}/${MODSECURITY_CONFIGURE}" + else + ${CWD}/${MODSECURITY_CONFIGURE} + fi + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure LibModSecurity\n" + do_exit 1 + fi + + echo "Done Configuration." + + while echo "Trying to make LibModSecurity..."; do + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "make -j ${CPU_CORES}" + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): " + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make Complete" + + mkdir -p /etc/modsecurity.d + chmod 700 /etc/modsecurity.d + + while echo "Installing LibModSecurity..."; do + make install + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + removeLockfile + + #For nginx we need to rebuild it, because ModSecurity is added as a static module + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "apache" ] ; then + if [ "$1" = "0" ]; then + doModSecurityConnector 0 + else + doModSecurityConnector 1 + fi + fi + + echo "action=rewrite&value=httpd" >> ${TASK_QUEUE} + run_dataskq + + echo "LibModSecurity has been installed successfully." + writeLog "LibModSecurity ${LIBMODSECURITY_VER} installed" + + #For initial comodo ruleset installation we need to restart webserver + #So that it detects installation of modsecurity + if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ]; then + control_service httpd restart + elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + control_service litespeed reload + elif [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service nginx restart + fi + fi + + doModSecurityRules norestart + + if [ "${WEBSERVER_OPT}" = "apache" ]; then + control_service httpd restart + elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + control_service litespeed reload + elif [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + control_service nginx restart + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} +} + +#################################################### + +doNginx() { + if [ "${WEBSERVER_OPT}" != "nginx" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then + do_exit 1 "You cannot install Nginx, because you do not have it set in options.conf file." + fi + + getFile nginx-${NGINX_VER}.tar.gz nginx + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + NGX_CACHE_PURGE_VER=`getVer ngx_cache_purge` + getFile ngx_cache_purge-${NGX_CACHE_PURGE_VER}.tar.gz ngx_cache_purge + mkdir -p ngx_cache_purge/ + tar xzf ngx_cache_purge-${NGX_CACHE_PURGE_VER}.tar.gz -C ngx_cache_purge/ --strip-components=1 --no-same-owner + fi + + getFile nginx.boot nginx_boot + getFile nginx.boot.freebsd nginx_boot_freebsd + getFile nginx.boot.debian nginx_boot_debian + quitIfLocked doNginx + + ADMNNGINX=/usr/local/directadmin/data/users/admin/nginx.conf + if [ ! -e ${ADMNNGINX} ] && [ -d /usr/local/directadmin/data/users/admin ]; then + echo -n "" > ${ADMNNGINX} + chown diradmin:admin ${ADMNNGINX} + chmod 640 ${ADMNNGINX} + fi + + if [ ! -d /var/www/html ]; then + mkdir -p /var/www/html + fi + + set64 + set_http2 + + addUserGroup nginx nginx + addToAccess nginx + + if grep -m1 -q '^apache:' /etc/group; then + usermod -a -G apache nginx 2>/dev/null + fi + + chown webapps:nginx /var/www + chmod 551 /var/www + + cd ${CWD} + FILE=${CWD}/nginx-${NGINX_VER}.tar.gz + + checkFile ${FILE} + + echo "Extracting ${FILE}..." + tar xzf ${FILE} --no-same-owner + + cd nginx-${NGINX_VER} + + setFDSETSIZE + + #copy the new configs + if [ ! -d ${NGINXCONF} ]; then + mkdir -p ${NGINXCONF} + fi + cp -rf ${NGINXCONFDIR}/* ${NGINXCONF} + if [ ! -d ${NGINXCONF}/templates ]; then + mkdir -p ${NGINXCONF}/templates + fi + cp -rf ${NGINXTEMPLATESDIR}/* ${NGINXCONF}/templates + + if [ ! -e ${NGINXCONF}/directadmin-settings.conf ]; then + touch ${NGINXCONF}/directadmin-settings.conf + fi + + if [ ! -e ${NGINXCONF}/directadmin-ips.conf ]; then + touch ${NGINXCONF}/directadmin-ips.conf + fi + + if [ ! -e ${NGINXCONF}/nginx-includes.conf ]; then + touch ${NGINXCONF}/nginx-includes.conf + fi + + if [ ! -e ${NGINXCONF}/nginx-modsecurity-enable.conf ]; then + touch ${NGINXCONF}/nginx-modsecurity-enable.conf + elif [ "${MODSECURITY_OPT}" = "no" ]; then + echo -n '' > ${NGINXCONF}/nginx-modsecurity-enable.conf + fi + + MODSEC_APPENDED=0 + if [ "${MODSECURITY_OPT}" = "yes" ]; then + removeLockfile + if [ ! -s /usr/local/modsecurity/lib/pkgconfig/modsecurity.pc ]; then + echo "LibModSecurity has not been installed, installing..." + doLibModSecurity 0 + fi + cd ${CWD}/nginx-${NGINX_VER} + MODSEC_DIR=../${MODSECURITY_NGINX_CONNECTOR_FILENAME}-${MODSECURITY_NGINX_CONNECTOR_VER} + if [ ! -d ${MODSEC_DIR} ]; then + removeLockfile + cd ${CWD} + doModSecurityConnector 0 + cd nginx-${NGINX_VER} + fi + if ! grep -q \"\-\-add-module=${MODSEC_DIR}\" ${CWD}/${NGINX_CONFIGURE}; then + MODSEC_APPENDED=1 + perl -pi -e "s#./configure \\\#./configure --add-module=${MODSEC_DIR} \\\#" ${CWD}/${NGINX_CONFIGURE} + fi + fi + + #configure + echo "Configuring nginx-${NGINX_VER}" + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "${CWD}/${NGINX_CONFIGURE}" + else + ${CWD}/${NGINX_CONFIGURE} + fi + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure Nginx. Check the ${NGINX_CONFIGURE} file\n" + do_exit 1 + fi + echo "Done Configuration." + + if [ "${MODSEC_APPENDED}" = "1" ]; then + perl -pi -e "s#./configure --add-module=${MODSEC_DIR} \\\#./configure \\\#" ${CWD}/${NGINX_CONFIGURE} + fi + + echo "increasing FD_SETSIZE in os/tpf/os.h .." + if [ -e ./os/tpf/os.h ]; then + perl -pi -e 's/\#define FD_SETSIZE.*2048/\#ifdef FD_SETSIZE\n\#undef FD_SETSIZE\n\#endif\n\#define FD_SETSIZE 32768/' ./os/tpf/os.h + fi + + while echo "Trying to make Nginx..."; do + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}" + else + C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES} + fi + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + + checkRPMS + + echo "Installing Nginx..." + control_service nginx stop >/dev/null 2>&1 + # A fix for "cp: cannot create regular file `/usr/sbin/nginx': Text file busy" + killall nginx + sleep 2 + killall -9 nginx >/dev/null 2>&1 + sleep 1 + + make install + + cd ${CWD} + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/nginx ]; then + echo "Removing ${INITDDIR}/nginx..." + rm -f ${INITDDIR}/nginx + fi + + #fresh install, add to System Backup + if [ ! -s ${SYSTEMDDIR}/nginx.service ]; then + add_to_system_backup dirs /etc/nginx + fi + + echo "Enabling nginx in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/nginx.service ]; then + cp -f ${CB_CUST_SYSTEMD}/nginx.service ${SYSTEMDDIR}/nginx.service + else + cp -f ${CB_SYSTEMD}/nginx.service ${SYSTEMDDIR}/nginx.service + fi + chmod 644 ${SYSTEMDDIR}/nginx.service + systemctl daemon-reload + systemctl enable nginx.service + else + if [ ${OS} = "FreeBSD" ]; then + cp -f ${CWD}/nginx.boot.freebsd /usr/local/etc/rc.d/nginx + chmod 755 /usr/local/etc/rc.d/nginx + elif [ -e /etc/debian_version ]; then + cp -f ${CWD}/nginx.boot.debian /etc/init.d/nginx + chmod 755 /etc/init.d/nginx + update-rc.d nginx defaults + else + cp -f ${CWD}/nginx.boot /etc/rc.d/init.d/nginx + chmod 755 /etc/rc.d/init.d/nginx + /sbin/chkconfig nginx on + fi + fi + + #Disable httpd & litespeed, when switching to nginx + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${SYSTEMDDIR}/httpd.service ]; then + systemctl disable httpd.service 2> /dev/null + rm -f ${SYSTEMDDIR}/httpd.service + systemctl daemon-reload + fi + if [ -e ${SYSTEMDDIR}/litespeed.service ]; then + systemctl disable lshttpd.service 2> /dev/null + systemctl disable litespeed.service 2> /dev/null + rm -f ${SYSTEMDDIR}/lshttpd.service + rm -f ${SYSTEMDDIR}/litespeed.service + systemctl daemon-reload + fi + else + if [ ${OS} = "FreeBSD" ]; then + if [ -e /usr/local/etc/rc.d/httpd ]; then + rm -f /usr/local/etc/rc.d/httpd + fi + if [ -e /usr/local/etc/rc.d/litespeed ]; then + rm -f /etc/init.d/litespeed + fi + if [ -e /usr/local/etc/rc.d/lsws ]; then + rm -f /etc/init.d/lsws + fi + elif [ -e /etc/debian_version ]; then + if [ -e /etc/init.d/httpd ]; then + update-rc.d httpd remove + rm -f /etc/init.d/httpd + fi + if [ -e /etc/init.d/litespeed ]; then + update-rc.d litespeed remove + rm -f /etc/init.d/litespeed + fi + if [ -e /etc/init.d/lsws ]; then + update-rc.d lsws remove + rm -f /etc/init.d/lsws + fi + else + if [ -e /etc/rc.d/init.d/httpd ]; then + /sbin/chkconfig httpd off + rm -f /etc/rc.d/init.d/httpd + fi + if [ -e /etc/rc.d/init.d/litespeed ]; then + /sbin/chkconfig litespeed off + rm -f /etc/rc.d/init.d/litespeed + fi + if [ -e /etc/rc.d/init.d/lsws ]; then + /sbin/chkconfig lsws off + rm -f /etc/rc.d/init.d/lsws + fi + fi + fi + fi + + #Disable litespeed, when switching to nginx_apache + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${SYSTEMDDIR}/litespeed.service ]; then + systemctl disable lshttpd.service 2> /dev/null + systemctl disable litespeed.service 2> /dev/null + rm -f ${SYSTEMDDIR}/lshttpd.service + rm -f ${SYSTEMDDIR}/litespeed.service + systemctl daemon-reload + fi + else + if [ ${OS} = "FreeBSD" ]; then + if [ -e /usr/local/etc/rc.d/litespeed ]; then + rm -f /etc/init.d/litespeed + fi + if [ -e /usr/local/etc/rc.d/lsws ]; then + rm -f /etc/init.d/lsws + fi + elif [ -e /etc/debian_version ]; then + if [ -e /etc/init.d/litespeed ]; then + update-rc.d litespeed remove + rm -f /etc/init.d/litespeed + fi + if [ -e /etc/init.d/lsws ]; then + update-rc.d lsws remove + rm -f /etc/init.d/lsws + fi + else + if [ -e /etc/rc.d/init.d/litespeed ]; then + /sbin/chkconfig litespeed off + rm -f /etc/rc.d/init.d/litespeed + fi + if [ -e /etc/rc.d/init.d/lsws ]; then + /sbin/chkconfig lsws off + rm -f /etc/rc.d/init.d/lsws + fi + fi + fi + fi + + for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do + perl -pi -e "s|/usr/local/php${php_shortrelease}/sockets/webapps.sock|/usr/local/php${PHP1_SHORTRELEASE}/sockets/webapps.sock|" ${NGINXCONF}/nginx.conf + done + + tokenize_IP + tokenize_ports + + if [ "${IPV6}" = "0" ]; then + perl -pi -e 's| listen \[::1\]:| #listen \[::1\]:|' ${NGINXCONF}/nginx-vhosts.conf + perl -pi -e 's| listen \[::1\]:| #listen \[::1\]:|' ${NGINXCONF}/nginx.conf + else + perl -pi -e 's| #listen \[::1\]:| listen \[::1\]:|' ${NGINXCONF}/nginx-vhosts.conf + perl -pi -e 's| #listen \[::1\]:| listen \[::1\]:|' ${NGINXCONF}/nginx.conf + fi + + # Disable UserDir access if userdir_access=no is set in the options.conf file + if [ "${USERDIR_ACCESS_OPT}" = "no" ]; then + perl -pi -e 's| include /etc/nginx/nginx-userdir.conf;| #include /etc/nginx/nginx-userdir.conf;|' /etc/nginx/nginx-vhosts.conf + else + perl -pi -e 's| #include /etc/nginx/nginx-userdir.conf;| include /etc/nginx/nginx-userdir.conf;|' /etc/nginx/nginx-vhosts.conf + fi + + fpmChecks + dovecotChecks + do_rewrite_nginx_webapps + + #rewrite ips.conf if needed + echo "action=rewrite&value=ips" >> ${TASK_QUEUE} + + echo "action=rewrite&value=nginx" >> ${TASK_QUEUE} + run_dataskq + + doVhosts + + doSslConfigurationWebserver + + if [ ! -s ${NGINXCONF}/ssl.key/server.key ] || [ ! -s ${NGINXCONF}/ssl.crt/server.crt ]; then + cd ${WORKDIR} + mkdir -p ${NGINXCONF}/ssl.key + mkdir -p ${NGINXCONF}/ssl.crt + + if [ -s ${HTTPDCONF}/ssl.key/server.key ] && [ -s ${HTTPDCONF}/ssl.crt/server.crt ]; then + cp -pf ${HTTPDCONF}/ssl.key/server.key ${NGINXCONF}/ssl.key + cp -pf ${HTTPDCONF}/ssl.crt/server.crt ${NGINXCONF}/ssl.crt/server.crt + else + #install the cert/key + /usr/bin/openssl req -x509 -newkey rsa:2048 -keyout ${NGINXCONF}/ssl.key/server.key -out ${NGINXCONF}/ssl.crt/server.crt -days 9999 -nodes -config ./${APCERTCONF} + fi + + chmod 600 ${NGINXCONF}/ssl.crt/server.crt + chmod 600 ${NGINXCONF}/ssl.key/server.key + + cd ${CWD} + fi + + ensure_server_ca + + if [ "${NGINXCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${NGINXCUSTOMCONFDIR}/* ${NGINXCONF}/ + fi + if [ "${NGINXCUSTOMEMPLATESDIR}" != "0" ]; then + cp -rf ${NGINXCUSTOMEMPLATESDIR}/* ${NGINXCONF}/templates/ + fi + + tokenize_IP + tokenize_ports + + if [ "${MODSECURITY_OPT}" = "yes" ]; then + doModSecurityRules norestart + fi + + mkdir -p ${WWWDIR} + + if [ ! -e ${WWWDIR}/index.html ]; then + echo "Nginx is functioning normally" > ${WWWDIR}/index.html + fi + perl -pi -e 's/[A-Za-z]* is functioning normally/Nginx is functioning normally/' ${WWWDIR}/index.html + if [ ! -e /etc/logrotate.d/nginx ] && [ ${OS} != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/nginx.logrotate -o /etc/logrotate.d/nginx + fi + + if [ ! -d /var/log/nginx/domains ]; then + mkdir -p /var/log/nginx/domains + fi + + chmod 710 /var/log/nginx + chown nginx:${ROOT_GRP} /var/log/nginx + + #setup the directadmin.conf + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + setVal cloud_cache 1 ${DACONF_TEMPLATE_FILE} + setVal cloud_cache 1 ${DACONF_FILE} + echo "action=cache&value=showallusers" >> ${TASK_QUEUE} + run_dataskq d + elif [ "${CLOUDLINUX_OPT}" = "no" ]; then + setVal cloud_cache 0 ${DACONF_TEMPLATE_FILE} + setVal cloud_cache 0 ${DACONF_FILE} + fi + + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + setVal nginx_proxy 1 ${DACONF_TEMPLATE_FILE} + setVal nginx_proxy 1 ${DACONF_FILE} + setVal nginx 0 ${DACONF_TEMPLATE_FILE} + setVal nginx 0 ${DACONF_FILE} + setVal litespeed 0 ${DACONF_TEMPLATE_FILE} + setVal litespeed 0 ${DACONF_FILE} + killall litespeed >/dev/null 2>&1 + setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE} + setVal openlitespeed 0 ${DACONF_FILE} + doRestartDA + set_service litespeed delete + killall -9 litespeed >/dev/null 2>&1 + else + setVal nginx_proxy 0 ${DACONF_TEMPLATE_FILE} + setVal nginx_proxy 0 ${DACONF_FILE} + setVal nginx 1 ${DACONF_TEMPLATE_FILE} + setVal nginx 1 ${DACONF_FILE} + setVal litespeed 0 ${DACONF_TEMPLATE_FILE} + setVal litespeed 0 ${DACONF_FILE} + setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE} + setVal openlitespeed 0 ${DACONF_FILE} + + killall httpd >/dev/null 2>&1 + killall litespeed >/dev/null 2>&1 + doRestartDA + set_service httpd delete + set_service litespeed delete + killall -9 httpd >/dev/null 2>&1 + killall -9 litespeed >/dev/null 2>&1 + fi + + set_service nginx ON + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "Restarting nginx." + + control_service nginx stop >/dev/null 2>&1 + control_service nginx start + + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + rm -rf ${CWD}/ngx_cache_purge + fi + writeLog "Nginx ${NGINX_VER} installed" + + removeLockfile +} + +doRemoveNginx() { + if [ "${WEBSERVER_OPT}" = "nginx" ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + do_exit 1 "You cannot remove Nginx, because you have it set in options.conf file." + fi + + if [ ! -e /usr/sbin/nginx ]; then + do_exit 1 "/usr/sbin/nginx does not exist, cannot remove..." + fi + + echo "Disabling nginx in services.status..." + set_service nginx delete + + control_service nginx stop >/dev/null 2>&1 + # A fix for "cp: cannot create regular file `/usr/sbin/nginx': Text file busy" + sleep 2 + killall -9 nginx >/dev/null 2>&1 + + if [ -e ${INITDDIR}/nginx ]; then + if [ -e /etc/debian_version ]; then + update-rc.d nginx remove + elif [ ${OS} != "FreeBSD" ]; then + /sbin/chkconfig nginx off + fi + echo "Removing ${INITDDIR}/nginx..." + rm -f ${INITDDIR}/nginx + fi + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Disabling nginx in systemd..." + if [ -e ${SYSTEMDDIR}/nginx.service ]; then + systemctl disable nginx.service + rm -f ${SYSTEMDDIR}/nginx.service + systemctl daemon-reload + fi + fi + + remove_file /etc/logrotate.d/nginx + remove_file /usr/sbin/nginx + remove_directory /var/log/nginx + remove_directory /etc/nginx + + ldconfig + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "Nginx has been successfully removed" + writeLog "Nginx removed" +} + +#################################################### +doJailshell() { + if [ ! -x /usr/bin/bwrap ]; then + echo "Bubblewrap is needed for Jail Shell, it's not installed. Please run: ./build bubblewrap." + fi + + if [ ! -x /usr/local/bin/msmtp ]; then + doMsmtp + fi + + if [ ! -d /etc/exim.jail ]; then + echo "action=rewrite&value=jail" >> ${TASK_QUEUE} + echo "Executing the task.queue cotents now, please be patient ..." + run_dataskq d + fi + + echo "Downloading jailshell to /usr/bin/jailshell..." + getFile bubblewrap/jailshell-${JAILSHELL_SH_VER}.sh jailshell_sh jailshell-${JAILSHELL_SH_VER} + if grep -m1 -q 'bwrap' jailshell-${JAILSHELL_SH_VER}; then + mv -f jailshell-${JAILSHELL_SH_VER} /usr/bin/jailshell + chmod 755 /usr/bin/jailshell + fi + if [ ! -d /usr/lib/modules ]; then + mkdir -p /usr/lib/modules + fi + echo "/usr/bin/jailshell has been installed." +} + +doBubblewrap() { + quitIfLocked doBubblewrap + + LXC_SKIP_BWRAP=true + if [ -e /dev/.lxc/proc/self/uid_map ]; then + if ! cat /dev/.lxc/proc/self/uid_map >/dev/null 2>&1; then + LXC_SKIP_BWRAP=false + fi + fi + if [ "${SYSTEMD}" != "yes" ]; then + echo "Your OS does not support Linux namespaces for user isolation." + return + elif [ "${CLOUDLINUX_OPT}" = "yes" ]; then + echo "Please rely on CloudLinux CageFS for isolation of the users (cloudlinux=yes detected in the settings)." + return + elif systemd-detect-virt | grep -m1 -q -E 'lxc|openvz'; then + if ${LXC_SKIP_BWRAP}; then + echo "Your container virtualization does not support Linux namespaces for user isolation, please switch to XEN/KVM/VMware or other non-container virtualization.." + return + fi + fi + + cd ${CWD} + + getFile bubblewrap/bubblewrap-${BUBBLEWRAP_VER}.tar.xz bubblewrap bubblewrap-${BUBBLEWRAP_VER}.tar.xz + + tar xJf bubblewrap-${BUBBLEWRAP_VER}.tar.xz --no-same-owner + cd bubblewrap-${BUBBLEWRAP_VER} + + if [ "${OS_CENTOS_VER}" = "7" ] || [ -s /etc/debian_version ]; then + ./configure --prefix=/usr --sysconfdir=/etc --disable-man --with-priv-mode=setuid + else + ./configure --prefix=/usr --sysconfdir=/etc --disable-man + fi + + while echo "Trying to make bubblewrap"; do + make -j ${CPU_CORES} + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + make install + + #enable jail=1 + if [ -s ${DACONF_FILE} ]; then + if ! grep -q -m1 'jail=0' ${DACONF_FILE}; then + setVal jail 1 ${DACONF_TEMPLATE_FILE} + setVal jail 1 ${DACONF_FILE} + doRestartDA + fi + fi + + writeLog "bubblewrap ${BUBBLEWRAP_VER} installed" + + removeLockfile + + cd ${CWD} + + doJailshell +} + +#################################################### + +convertToDovecot() { + updateDovecot + + if [ "${DOVECOT_OPT}" != "yes" ]; then + do_exit 1 "You cannot convert to Dovecot, because you do not have it set in options.conf file." + fi + + #patch exim.conf + if [ -e /etc/exim.conf ] && [ "`grep -m1 -c maildir_format /etc/exim.conf`" -eq 0 ]; then + echo "To Dovecot: Patching /etc/exim.conf to maildir" + patch -d/ -p0 < ${CWD}/exim.conf.dovecot.patch + fi + + #uninstall old services and restart exim + if [ "${OS}" = "FreeBSD" ]; then + /usr/local/etc/rc.d/directadmin restart + /usr/local/etc/rc.d/exim restart + perl -pi -e 's/^imap/#imap/' /etc/inetd.conf + killall -HUP inetd + /usr/local/etc/rc.d/vm-pop3d stop + cat /usr/local/etc/rc.d/boot.sh | grep -v vm-pop3d > /usr/local/etc/rc.d/boot.sh.new + mv -f /usr/local/etc/rc.d/boot.sh /usr/local/etc/rc.d/boot.sh.old + mv -f /usr/local/etc/rc.d/boot.sh.new /usr/local/etc/rc.d/boot.sh + chmod 755 /usr/local/etc/rc.d/boot.sh + elif [ -e /etc/debian_version ]; then + control_service exim restart + control_service directadmin restart + perl -pi -e 's/^imap/#imap/' /etc/inetd.conf + killall -HUP inetd + control_service vm-pop3d stop 2> /dev/null + chmod 0 /etc/init.d/vm-pop3d 2> /dev/null + else + control_service exim restart + control_service directadmin restart + rm -f /etc/xinetd.d/imap + killall -HUP xinetd + control_service vm-pop3d stop 2> /dev/null + /sbin/chkconfig vm-pop3d off 2> /dev/null + fi + + killall -9 vm-pop3d 2> /dev/null + + set_service vm-pop3d delete + + echo "Adding conversion command to the task.queue ..." + echo "action=convert&value=todovecot" >> ${TASK_QUEUE} + echo "Executing the task.queue cotents now, please be patient ..." + run_dataskq d + + echo "Restarting dovecot." + control_service dovecot restart + + echo "Restarting exim." + control_service exim restart + + echo "Done." + writeLog "Converted to dovecot" +} + +#################################################### + +doXapian() { + if [ "${OS_CENTOS_VER}" = "6" ]; then + installDevtoolset + fi + quitIfLocked doXapian + + cd ${CWD} + + getFile xapian/xapian-core-${XAPIAN_CORE_VER}.tar.xz xapian-core xapian-core-${XAPIAN_CORE_VER}.tar.xz + + tar xJf xapian-core-${XAPIAN_CORE_VER}.tar.xz --no-same-owner + cd xapian-core-${XAPIAN_CORE_VER} + + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "./configure" + else + ./configure + fi + + while echo "Trying to make xapian-core"; do + if [ "${OS}" = "FreeBSD" ]; then + gmake -j ${CPU_CORES} + elif [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "make -j ${CPU_CORES}" + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + if [ "${OS}" = "FreeBSD" ]; then + gmake install + elif [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "make install" + else + make install + fi + + writeLog "xapian-core ${XAPIAN_CORE_VER} installed" + + removeLockfile + + cd ${CWD} +} + +#################################################### + +doFTSXapian() { + if [ ! -x /usr/local/bin/xapian-config ]; then + doXapian + fi + + if [ ! -e /usr/include/sqlite3.h ] && [ ! -e /usr/local/include/sqlite3.h ]; then + if [ "${OS}" = "FreeBSD" ]; then + echo "Cannot find /usr/local/include/sqlite3.h, installing using apt-get..." + pkg install -y sqlite3 + elif [ -e /etc/debian_version ]; then + echo "Cannot find /usr/include/sqlite3.h, installing using apt-get..." + apt-get -y install libsqlite3-dev + else + echo "Cannot find /usr/include/sqlite3.h, installing using yum..." + yum -y install sqlite-devel + fi + fi + + quitIfLocked doFTSXapian + + cd ${CWD} + + getFile xapian/fts-xapian-${FTS_XAPIAN_VER}.tar.gz fts-xapian fts-xapian-${FTS_XAPIAN_VER}.tar.gz + + tar xzf fts-xapian-${FTS_XAPIAN_VER}.tar.gz --no-same-owner + cd fts-xapian-${FTS_XAPIAN_VER} + + if [ -d /usr/lib64/dovecot ]; then + DOVECOT_FLAG="--with-dovecot=/usr/lib64/dovecot" + elif [ -d /usr/lib/dovecot ]; then + DOVECOT_FLAG="--with-dovecot=/usr/lib/dovecot" + else + DOVECOT_FLAG="" + fi + + autoreconf -i + ./configure --prefix=/usr ${DOVECOT_FLAG} + + while echo "Trying to make fts-xapian ${FTS_XAPIAN_VER}"; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + make install + + if [ "${DOVECOT_CONF_OPT}" = "yes" ]; then + cp -f ${DOVECTCONFFTS} /etc/dovecot/conf.d/90-fts-xapian.conf + echo 'mail_plugins = $mail_plugins fts fts_xapian quota zlib' > /etc/dovecot/conf/mail_plugins.conf + fi + + ldconfig + + cd ${WORKDIR} + + removeLockfile + + echo "Restarting dovecot." + control_service dovecot restart +} + +#################################################### + +doPigeonhole() { + if [ "${PIGEONHOLE_OPT}" = "no" ]; then + do_exit 1 "Cannot install pigeonhole, because there is no version available for Dovecot ${DOVECOT_VER}." + fi + + quitIfLocked doPigeonhole + + cd ${CWD} + + getFile dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER}.tar.gz pigeonhole${DOVECOT_SHORTREL} + + tar xzf dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER}.tar.gz --no-same-owner + cd dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER} + + if [ -d /usr/lib64/dovecot ]; then + DOVECOT_FLAG="--with-dovecot=/usr/lib64/dovecot" + elif [ -d /usr/lib/dovecot ]; then + DOVECOT_FLAG="--with-dovecot=/usr/lib/dovecot" + else + DOVECOT_FLAG="" + fi + ./configure --prefix=/usr ${DOVECOT_FLAG} + + while echo "Trying to make pigeonhole ${PIGEONHOLE_VER}"; do + make + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + + make install + + mkdir -p /var/lib/dovecot/sieve >/dev/null 2>&1 + touch /var/lib/dovecot/sieve/default.sieve + sievec /var/lib/dovecot/sieve/default.sieve + chown root:${ROOT_GRP} /var/lib/dovecot/sieve/default.sieve + + getFile patches/dovecot.conf.pigeonhole.patch dovecot.conf.pigeonhole.patch + + if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ]; then + COUNT="`grep -m1 -c dovecot_lmtp_udp /etc/exim.conf`" + getFile patches/exim.conf.pigeonhole.patch exim.conf.pigeonhole.patch + if [ "${COUNT}" -eq 0 ] && [ -e ${WORKDIR}/patches/exim.conf.pigeonhole.patch ]; then + cd /etc + patch -p0 < ${WORKDIR}/patches/exim.conf.pigeonhole.patch + fi + fi + + perl -pi -e 's#transport = virtual_localdelivery#transport = dovecot_lmtp_udp#' /etc/exim.conf + + if [ "${DOVECOT_CONF_OPT}" = "no" ]; then + COUNT="`grep -m1 -c managesieve /etc/dovecot/dovecot.conf`" + if [ "${COUNT}" -eq 0 ] && [ -e ${WORKDIR}/patches/dovecot.conf.pigeonhole.patch ]; then + cd /etc/dovecot + patch -p0 < ${WORKDIR}/patches/dovecot.conf.pigeonhole.patch + fi + + perl -pi -e "s|hostname #req|${HOSTNAME} #req|" /etc/dovecot/dovecot.conf + else + cp -f ${DOVECTCONFSIEVE} /etc/dovecot/conf.d/90-sieve.conf + echo 'protocols = imap pop3 lmtp sieve' > /etc/dovecot/conf/protocols.conf + echo 'mail_plugins = $mail_plugins quota sieve zlib' > /etc/dovecot/conf/lmtp_mail_plugins.conf + fi + + cd ${WORKDIR} + + removeLockfile + + echo "Restarting dovecot." + control_service dovecot restart + + echo "Restarting exim." + control_service exim restart +} + +ensure_dovecot_dh() { + D_SSL=/etc/dovecot/conf/ssl.conf + if [ "`version_cmp ${DOVECOT_VER} 2.3.0 'dovecot-ce check'`" -ge 0 ]; then + SSL_DH=/etc/dovecot/dh.pem + echo "ensuring ssl_dh for dovecot: ${SSL_DH}"; + + NEED_SSL_DH=false + if [ ! -s ${SSL_DH} ]; then + NEED_SSL_DH=true + fi + + if [ -s ${SSL_DH} ]; then + if [ ${OS} = "FreeBSD" ]; then + DH_FILE_SIZE=`stat -f %z ${SSL_DH}` + else + DH_FILE_SIZE=`stat -c %s ${SSL_DH}` + fi + + if [ "${DH_FILE_SIZE}" = "245" ]; then + echo "${SSL_DH} is only 1024 bits. Upgrading to 2048 bits." + NEED_SSL_DH=true + fi + fi + + if ${NEED_SSL_DH}; then + ensure_dhparam ${SSL_DH} + + if [ ! -s ${SSL_DH} ] && [ -s /var/lib/dovecot/ssl-parameters.dat ]; then + #this is only 1024 bits, backup if above fails. + dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dh -inform der > ${SSL_DH} + fi + + chmod 600 ${SSL_DH} + fi + + if [ -e $D_SSL ]; then + C=`grep -c ssl_dh ${D_SSL}` + if [ -s ${SSL_DH} ] && [ "$C" -eq 0 ]; then + echo "adding ssl_dh to ${D_SSL}"; + echo "ssl_dh=<${SSL_DH}" >> ${D_SSL} + fi + + C=`grep -c ssl_protocols ${D_SSL}` + if [ "${C}" -gt 0 ]; then + echo "swapping ssl_protocols to be ssl_min_protocols in ${D_SSL}" + perl -pi -e 's/^ssl_protocols = .*/ssl_min_protocol = TLSv1.1/' ${D_SSL} + fi + fi + else + #dovecot version older than 2.3.0? + if [ "`version_cmp ${DOVECOT_VER} 2.3.0 'dovecot-ce check'`" -lt 0 ]; then + echo "Old version of dovecot: ${DOVECOT_VER}, removing ssl_dh from ${D_SSL}" + if [ -s ${D_SSL} ]; then + perl -pi -e 's/ssl_dh =.*\n//' ${D_SSL} + perl -pi -e 's/ssl_min_protocol =.*\n//' ${D_SSL} + fi + fi + fi +} + +doDovecotConf() { + if [ "${DOVECOT_CONF_OPT}" != "yes" ]; then + do_exit 1 "You cannot update Dovecot configuration files, because you do not have it set in options.conf file." + fi + + echo "Updating dovecot configuration files..." + #Enable dovecot quota by default + COUNT=0 + if [ -e ${DACONF_FILE} ]; then + COUNT="`grep -m1 -c -e '^add_userdb_quota=1' ${DACONF_FILE}`" + fi + if [ "${COUNT}" = "0" ] && [ -e ${DACONF_FILE} ]; then + echo "Adding add_userdb_quota=1 to the ${DACONF_FILE} file to enable dovecot quota..." + echo "add_userdb_quota=1" >> ${DACONF_FILE} + doRestartDA + echo "action=rewrite&value=email_passwd" >> ${TASK_QUEUE} + run_dataskq d + fi + + COUNT_TEMPLATE="`grep -m1 -c -e '^add_userdb_quota=1' ${DACONF_TEMPLATE_FILE}`" + if [ "${COUNT_TEMPLATE}" = "0" ] && [ -e ${DACONF_TEMPLATE_FILE} ]; then + echo "Adding add_userdb_quota=1 to the ${DACONF_TEMPLATE_FILE} (template) file ..." + echo "add_userdb_quota=1" >> ${DACONF_TEMPLATE_FILE} + fi + + if [ ! -d /etc/dovecot/conf ]; then + mkdir -p /etc/dovecot/conf + fi + if [ ! -d /etc/dovecot/conf.d ]; then + mkdir -p /etc/dovecot/conf.d + fi + + cp -rf ${DOVECOTCONFDIR} /etc/dovecot/ + + doSslConfigurationEmail + + #remove SSLv2 from dovecot config for openssl 1.1+ + OV=`openssl_version | cut -d. -f1,2` + OPENSSL_11_OR_HIGHER=false + if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.1 'dovecot SSLv2 support for openssl 1.1.0 ver check'`" -ge 0 ]; then + OPENSSL_11_OR_HIGHER=true + fi + if ${OPENSSL_11_OR_HIGHER}; then + perl -pi -e 's|ssl_protocols \= !SSLv2 !SSLv3|ssl_protocols = !SSLv3|g' /etc/dovecot/conf/ssl.conf + fi + + ensure_dovecot_dh + + if [ "${IPV6}" = "1" ]; then + echo "listen = *, ::" > /etc/dovecot/conf/ip.conf + fi + + if [ "${DOVECOTCUSTOMCONFDIR}" != "0" ]; then + cp -rf ${DOVECOTCUSTOMCONFDIR} /etc/dovecot/ + fi + + cp -f ${DOVECTCONFFILE} /etc/dovecot/dovecot.conf + cp -f ${DOVECTCONFQUOTA} /etc/dovecot/conf.d/90-quota.conf + if [ "${PIGEONHOLE_OPT}" = "yes" ]; then + cp -f ${DOVECTCONFSIEVE} /etc/dovecot/conf.d/90-sieve.conf + echo 'protocols = imap pop3 lmtp sieve' > /etc/dovecot/conf/protocols.conf + echo 'mail_plugins = $mail_plugins quota sieve zlib' > /etc/dovecot/conf/lmtp_mail_plugins.conf + else + rm -f /etc/dovecot/conf.d/90-sieve.conf + echo 'mail_plugins = $mail_plugins quota zlib' > /etc/dovecot/conf/lmtp_mail_plugins.conf + fi + if [ "${MAIL_COMPRESS_OPT}" = "yes" ]; then + cp -f ${DOVECOTCONFZLIB} /etc/dovecot/conf.d/90-zlib.conf + #dovecot version older than 2.3.11? + if [ "`version_cmp ${DOVECOT_VER} 2.3.11 'dovecot zstd support check'`" -lt 0 ]; then + if grep -m1 -q 'zlib_save = zstd' /etc/dovecot/conf.d/90-zlib.conf; then + perl -pi -e 's/zlib_save = zstd/zlib_save = gz/' /etc/dovecot/conf.d/90-zlib.conf + fi + fi + else + rm -f /etc/dovecot/conf.d/90-zlib.conf + fi + if [ -e /etc/dovecot/conf/lmtp.conf ]; then + perl -pi -e "s|HOSTNAME|${HOSTNAME}|" /etc/dovecot/conf/lmtp.conf + fi + + if [ ! -L /etc/dovecot.conf ]; then + mv -f /etc/dovecot.conf /etc/dovecot.conf.old + ln -s ${DOVECOT_CONFIG} /etc/dovecot.conf + fi + + if [ "${OS}" = "FreeBSD" ]; then + DC=/etc/dovecot.conf + if [ -L /etc/dovecot.conf ]; then + DC=${DOVECOT_CONFIG} + fi + + perl -pi -e 's/driver = shadow/driver = passwd/' ${DC} + perl -pi -e 's/passdb shadow/passdb passwd/' ${DC} + fi + + if [ ! -e /usr/lib/dovecot/lib21_fts_xapian_plugin.a ] && [ ! -e /usr/lib64/dovecot/lib21_fts_xapian_plugin.a ]; then + echo 'mail_plugins = $mail_plugins quota zlib' > /etc/dovecot/conf/mail_plugins.conf + else + cp -f ${DOVECTCONFFTS} /etc/dovecot/conf.d/90-fts-xapian.conf + echo 'mail_plugins = $mail_plugins fts fts_xapian quota zlib' > /etc/dovecot/conf/mail_plugins.conf + fi + echo 'mail_plugins = $mail_plugins quota imap_quota zlib' > /etc/dovecot/conf/imap_mail_plugins.conf + + #SSO alternate passwd file + if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then + if ${DA_BIN} c | grep -m1 -q '^one_click_webmail_login=1$'; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/dovecot/conf/alternate_passwd.conf ${WEBPATH_SERVICES}/all/auto_login/dovecot/alternate_passwd.conf + elif [ -s /etc/dovecot/conf/alternate_passwd.conf ]; then + rm -f /etc/dovecot/conf/alternate_passwd.conf + fi + fi + + MAIL_SNI_OPT=`getDA_Opt mail_sni 1` + if [ "${MAIL_SNI_OPT}" -eq 0 ]; then + rm -f /etc/dovecot/conf.d/95-sni.conf + else + if [ ! -d /etc/dovecot/conf/sni ]; then + mkdir /etc/dovecot/conf/sni + chmod 755 /etc/dovecot/conf/sni + chown mail:mail /etc/dovecot/conf/sni + fi + + rm -f /etc/dovecot/conf/sni/*.conf + echo "action=rewrite&value=mail_sni" >> ${TASK_QUEUE} + if [ -x /usr/local/directadmin/dataskq ]; then + run_dataskq + fi + + echo '!include_try /etc/dovecot/conf/sni/*.conf' > /etc/dovecot/conf.d/95-sni.conf + fi + + #If customized configs - overwrite existing ones, which we modified above + if [ "${DOVECOTCUSTOMCONFDIR}" != "0" ]; then + if [ -e ${DOVECOTCUSTOMCONFDIR}/protocols.conf ]; then + cp -f ${DOVECOTCUSTOMCONFDIR}/protocols.conf /etc/dovecot/conf/protocols.conf + fi + if [ -e ${DOVECOTCUSTOMCONFDIR}/lmtp_mail_plugins.conf ]; then + cp -f ${DOVECOTCUSTOMCONFDIR}/lmtp_mail_plugins.conf /etc/dovecot/conf/lmtp_mail_plugins.conf + fi + if [ -e ${DOVECOTCUSTOMCONFDIR}/mail_plugins.conf ]; then + cp -f ${DOVECOTCUSTOMCONFDIR}/mail_plugins.conf /etc/dovecot/conf/mail_plugins.conf + fi + if [ -e ${DOVECOTCUSTOMCONFDIR}/imap_mail_plugins.conf ]; then + cp -f ${DOVECOTCUSTOMCONFDIR}/imap_mail_plugins.conf /etc/dovecot/conf/imap_mail_plugins.conf + fi + if [ -e ${DOVECOTCUSTOMCONFDIR}/lmtp.conf ]; then + cp -f ${DOVECOTCUSTOMCONFDIR}/lmtp.conf /etc/dovecot/conf/lmtp.conf + fi + fi + + if [ "$1" != "norestart" ]; then + echo "Restarting dovecot." + control_service dovecot restart + fi + + echo "Dovecot configuration files have been updated successfully." + writeLog "dovecot.conf installed" +} + +ensure_dovecot_logrotate() { + if [ ${OS} = "FreeBSD" ]; then + #by default it sets each log to webapps:webapps. + #swap it to apache:apache if needed + #else swap it to webapps:webapps from apache:apache.. or nothing + + NSL_VALUE=root:${ROOT_GRP} + + freebsd_set_newsyslog /var/log/dovecot-lmtp-errors.log ${NSL_VALUE} + freebsd_set_newsyslog /var/log/dovecot-lmtp.log ${NSL_VALUE} + + return + fi + + cd ${CWD} + + WL=/etc/logrotate.d/dovecot + + if [ ! -s ${WL} ]; then + getFile dovecot.logrotate dovecot_logrotate + + CWL=${CWD}/dovecot.logrotate + if [ ! -s ${CWL} ]; then + echo "Download of $CWL failed" + return + fi + + cp -f ${CWL} ${WL} + chmod 644 ${WL} + fi +} + +doDovecot() { + updateDovecot + if [ "${DOVECOT_OPT}" != "yes" ]; then + do_exit 1 "You cannot install Dovecot, because you do not have it set in options.conf file." + fi + if [ "${OS_CENTOS_VER}" = "6" ]; then + installDevtoolset + fi + if [ ! -e /usr/include/zstd.h ] && [ ! -e /usr/local/include/zstd.h ]; then + if [ ${OS} = "FreeBSD" ]; then + ${PKG_INSTALL} install -y zstd + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get -y install zstd libzstd-dev + else + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ] ; then + yum -y install zstd libzstd-devel --enablerepo=${EPEL_REPO_NAME} + else + yum -y install zstd libzstd-devel + fi + fi + fi + + quitIfLocked doDovecot + + if [ "${DOVECOT_OPT}" = "no" ]; then + do_exit 1 "Dovecot is not set in options.conf." + fi + + if [ ! -e ${WORKDIR}/dovecot-${DOVECOT_VER}.tar.gz ]; then + do_exit 1 "File dovecot-${DOVECOT_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}" + fi + + if [ -e ${DACONF_FILE} ]; then + if ! grep -m1 -q -e '^dovecot=1' ${DACONF_FILE}; then + echo "Adding dovecot=1 to the ${DACONF_FILE} file..." + echo "dovecot=1" >> ${DACONF_FILE} + set_service dovecot ON + set_service vm-pop3d delete + doRestartDA + fi + fi + + if [ -e ${DACONF_TEMPLATE_FILE} ]; then + if ! grep -m1 -q -e '^dovecot=1' ${DACONF_TEMPLATE_FILE}; then + echo "Adding dovecot=1 to the ${DACONF_TEMPLATE_FILE} (template) file ..." + echo "dovecot=1" >> ${DACONF_TEMPLATE_FILE} + set_service dovecot ON + fi + fi + + echo "Installing dovecot ${DOVECOT_VER} ..." + + addUserGroup dovecot dovecot + + cd ${CWD} + FILE=${CWD}/dovecot-${DOVECOT_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + +# if [ "${DOVECOT_VER}" = "2.3.6" ]; then + getFile patches/maildirlock-crash.patch maildirlock-crash.patch +# fi + + if [ "`version_cmp ${DOVECOT_VER} 2.3.0 'dovecot-ce check'`" -eq 0 ] && [ -d dovecot-ce-${DOVECOT_VER} ]; then + cd dovecot-ce-${DOVECOT_VER} + else + cd dovecot-${DOVECOT_VER} + fi + + echo "Patching syslog with LOG_PID ..." + + perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/auth/main.c + perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/imap/main.c + perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/master/main.c + perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/pop3/main.c + + perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/lib-master/master-service.c + + if ! grep -m1 -q 'this should never be reached anyways' src/util/maildirlock.c; then + if [ -s ${WORKDIR}/patches/maildirlock-crash.patch ]; then + echo "Patching maildirlock utility..." + patch -p1 < ${WORKDIR}/patches/maildirlock-crash.patch + fi + fi + + echo "Configuring dovecot ${DOVECOT_VER} ..." + + CONF_FILE=${CWD}/${DOVECOT_CONFIGURE} + + if [ "${SYSTEMD}" = "no" ]; then + perl -pi -e 's#--with-systemdsystemunitdir=/etc/systemd/system##' ${CONF_FILE} + fi + + #CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib added because at least on freebsd it was unable to find sodium.h on make time + if [ "${OS_CENTOS_VER}" = "6" ]; then + CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib scl enable devtoolset-7 "${CONF_FILE}" + else + CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ${CONF_FILE} + fi + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure dovecot. Please check ${DOVECOT_CONFIGURE} file.\n" + do_exit 1 + fi + echo "Done Configuration." + + while echo "Trying to make dovecot..."; do + if [ "${OS}" = "FreeBSD" ]; then + gmake -j ${CPU_CORES} + elif [ "${OS_CENTOS_VER}" = "6" ]; then + scl enable devtoolset-7 "make -j ${CPU_CORES}" + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + + echo "Installing ..." + + if [ "${OS_CENTOS_VER}" = "6" ]; then + scl enable devtoolset-7 "make install" + else + make install + fi + + removeLockfile + + touch /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log + chown root:${ROOT_GRP} /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log + chmod 600 /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log + + cd ${CWD} + + if [ ! -d /etc/dovecot ]; then + mkdir -p /etc/dovecot + fi + +# downgradeICUver +# if [ ${ICU_DOWNGRADED} -eq 0 ] && [ ! -e /usr/lib/dovecot/lib21_fts_xapian_plugin.a ] && [ ! -e /usr/lib64/dovecot/lib21_fts_xapian_plugin.a ]; then +# echo "Installing xapian and fts-xapian for FTS in dovecot..." +# doFTSXapian +# fi + + if [ "${DOVECOT_CONF_OPT}" = "no" ]; then + CONF_VER=0 + INST_CONF=0 + if [ -e /etc/dovecot.conf ]; then + CONF_VER=`grep -m1 '## Dovecot' /etc/dovecot.conf | awk '{print $3}'` + else + INST_CONF=1 + fi + + INST_VER=`echo "$DOVECOT_VER" | cut -d. -f1` + + if [ "$INST_VER" = "2" ] && [ ! -e ${DOVECOT_CONFIG} ]; then + INST_CONF=1 + fi + + if [ "$INST_VER" = "2" ] && [ "$CONF_VER" != "2.0" ]; then + INST_CONF=1 + fi + + if [ "$INST_VER" = "1" ] && [ "$CONF_VER" = "2.0" ]; then + INST_CONF=1 + fi + + if [ ! -L /etc/dovecot.conf ]; then + mv -f /etc/dovecot.conf /etc/dovecot.conf.old + ln -s ${DOVECOT_CONFIG} /etc/dovecot.conf + fi + + #install the dovecot.conf + if [ "$INST_CONF" -eq 1 ]; then + if [ "$INST_VER" = "2" ]; then + getFile dovecot.conf.2.0 + mv -f ${CWD}/dovecot.conf.2.0 ${DOVECOT_CONFIG} + if [ ! -L /etc/dovecot.conf ]; then + mv -f /etc/dovecot.conf /etc/dovecot.conf.1.2 + ln -s ${DOVECOT_CONFIG} /etc/dovecot.conf + fi + else + getFile dovecot.conf + mv -f ${CWD}/dovecot.conf /etc/dovecot.conf + fi + fi + + if [ "${OS}" = "FreeBSD" ]; then + DC=/etc/dovecot.conf + if [ -L /etc/dovecot.conf ]; then + DC=${DOVECOT_CONFIG} + fi + + perl -pi -e 's/driver = shadow/driver = passwd/' ${DC} + perl -pi -e 's/passdb shadow/passdb passwd/' ${DC} + fi + else + doDovecotConf norestart + fi + + if [ ! -L /etc/dovecot.conf ]; then + mv -f /etc/dovecot.conf /etc/dovecot.conf.old + ln -s ${DOVECOT_CONFIG} /etc/dovecot.conf + fi + + if [ "${PIGEONHOLE_OPT}" = "yes" ]; then + doPigeonhole + perl -pi -e 's#transport = virtual_localdelivery#transport = dovecot_lmtp_udp#' /etc/exim.conf + else + if grep -q dovecot_lmtp_udp /etc/exim.conf; then + #we have LMTP enabled by default for 4.3+ + if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ] || [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then + perl -pi -e 's#transport = dovecot_lmtp_udp#transport = virtual_localdelivery#' /etc/exim.conf + echo "Restarting exim" + control_service exim restart + fi + fi + + if [ -d /var/lib/dovecot/sieve ]; then + echo "Dovecot's Sieve/Pigeonhole is not enabled, but the directroy /var/lib/dovecot/sieve exists. Removing it." + rm -rf /var/lib/dovecot/sieve + fi + fi + + if [ -s /usr/lib/dovecot/lib21_fts_xapian_plugin.so ] || [ -s /usr/lib64/dovecot/lib21_fts_xapian_plugin.so ]; then + doFTSXapian + fi + + if [ "${IPV6}" = "1" ]; then + perl -pi -e 's|^listen = \*$|#listen = \*|' ${DOVECOT_CONFIG} + perl -pi -e 's|^#listen = \*, ::$|listen = \*, ::|' ${DOVECOT_CONFIG} + else + perl -pi -e 's|^#listen = \*$|listen = \*|' ${DOVECOT_CONFIG} + perl -pi -e 's|^listen = \*, ::$|#listen = \*, ::|' ${DOVECOT_CONFIG} + fi + + #remove SSLv2 from dovecot config for openssl 1.1+ + OV=`openssl_version | cut -d. -f1,2` + OPENSSL_11_OR_HIGHER=false + if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.1 'dovecot SSLv2 support for openssl 1.1.0 ver check'`" -ge 0 ]; then + OPENSSL_11_OR_HIGHER=true + fi + if ${OPENSSL_11_OR_HIGHER}; then + perl -pi -e 's|ssl_protocols \= !SSLv2 !SSLv3|ssl_protocols = !SSLv3|g' ${DOVECOT_CONFIG} + fi + + ensure_dovecot_dh + + #install the boot scripts. + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/dovecot ]; then + echo "Removing ${INITDDIR}/dovecot..." + rm -f ${INITDDIR}/dovecot + fi + + # Dovecot's "make install" overwrites these scripts, so we need to re-enable them everytime + #echo "Enabling dovecot.socket in systemd..." + if [ -e ${SYSTEMDDIR}/dovecot.socket ]; then + echo "Disabling dovecot.socket in systemd..." + systemctl disable dovecot.socket 2> /dev/null + rm -f ${SYSTEMDDIR}/dovecot.socket + systemctl daemon-reload + fi + + # Dovecot's "make install" overwrites these scripts, so we need to re-enable them everytime + echo "Enabling dovecot in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/dovecot.service ]; then + cp -f ${CB_CUST_SYSTEMD}/dovecot.service ${SYSTEMDDIR}/dovecot.service + else + cp -f ${CB_SYSTEMD}/dovecot.service ${SYSTEMDDIR}/dovecot.service + fi + chmod 644 ${SYSTEMDDIR}/dovecot.service + systemctl daemon-reload + systemctl enable dovecot.service + if [ ! -e /etc/exim.cert ] && [ ! -e /etc/exim.key ]; then + getFile da_exim-cert-config + /usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/exim.key -out /etc/exim.cert -days 9999 -nodes -config ${WORKDIR}/da_exim-cert-config + fi + chmod 600 /etc/exim.cert /etc/exim.key + chown mail:mail /etc/exim.cert /etc/exim.key + if [ ! -d ${SYSTEMD_SCRIPTS}/dovecot ]; then + mkdir -p ${SYSTEMD_SCRIPTS}/dovecot + fi + if [ ! -e ${SYSTEMD_SCRIPTS}/dovecot/dovecot_prestartscript ]; then + if [ -e ${CB_CUST_SYSTEMD}/scripts/dovecot_prestartscript ]; then + cp -f ${CB_CUST_SYSTEMD}/scripts/dovecot_prestartscript ${SYSTEMD_SCRIPTS}/dovecot/prestartscript + else + cp -f ${CB_SYSTEMD}/scripts/dovecot_prestartscript ${SYSTEMD_SCRIPTS}/dovecot/prestartscript + fi + chmod 755 ${SYSTEMD_SCRIPTS}/dovecot/prestartscript + fi + else + if [ "${OS}" = "FreeBSD" ]; then + if [ ! -e /usr/local/etc/rc.d/dovecot ]; then + cp ${CWD}/dovecot.boot.freebsd /usr/local/etc/rc.d/dovecot + chmod 755 /usr/local/etc/rc.d/dovecot + echo "./dovecot \$1" >> /usr/local/etc/rc.d/boot.sh + fi + elif [ -e /etc/debian_version ]; then + if [ ! -e /etc/init.d/dovecot ]; then + cp ${CWD}/dovecot.boot.debian /etc/init.d/dovecot + chmod 755 /etc/init.d/dovecot + update-rc.d dovecot defaults + fi + if [ ! -e /etc/exim.cert ] && [ ! -e /etc/exim.key ]; then + getFile da_exim-cert-config + /usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/exim.key -out /etc/exim.cert -days 9999 -nodes -config ${WORKDIR}/da_exim-cert-config + fi + chmod 600 /etc/exim.cert /etc/exim.key + chown mail:mail /etc/exim.cert /etc/exim.key + else + if [ ! -e /etc/init.d/dovecot ]; then + cp ${CWD}/dovecot.boot /etc/init.d/dovecot + chmod 755 /etc/init.d/dovecot + /sbin/chkconfig dovecot on + fi + fi + fi + + ensure_dovecot_logrotate + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + /sbin/ldconfig + + echo "Restarting dovecot." + if [ "${SYSTEMD}" = "yes" ]; then + systemctl daemon-reload + fi + + control_service dovecot restart + set_service dovecot ON + set_service vm-pop3d delete + + writeLog "Dovecot ${DOVECOT_VER} installed" +} + +#################################################### + +doRemoveDovecot() { + if [ "${DOVECOT_OPT}" != "no" ]; then + do_exit 1 "Cannot remove Dovecot, because it is enabled in options.conf file." + fi + + echo "Disabling dovecot in services.status" + set_service dovecot delete + + control_service dovecot stop + + if [ -e ${INITDDIR}/dovecot ]; then + if [ -e /etc/debian_version ]; then + update-rc.d dovecot remove + elif [ "${OS}" != "FreeBSD" ]; then + /sbin/chkconfig dovecot off + fi + echo "Removing ${INITDDIR}/dovecot..." + rm -f ${INITDDIR}/dovecot + fi + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Disabling dovecot in systemd..." + + systemctl disable dovecot.service + rm -f ${SYSTEMDDIR}/dovecot.service + systemctl daemon-reload + fi + + remove_directory /usr/share/doc/dovecot + remove_directory /etc/dovecot + remove_directory /usr/lib/dovecot + remove_directory /usr/lib64/dovecot + remove_directory /usr/libexec/dovecot + remove_directory /usr/include/dovecot + remove_file /usr/sbin/dovecot + remove_file /etc/dovecot.conf + remove_file ${DOVECOT_CONFIG} + + ldconfig + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + writeLog "Dovecot removed" +} + +#################################################### + +doLibs() { + downloadMake Digest + downloadMake Digest-SHA1 + downloadMake HTML-Parser + downloadMake Storable + downloadMake Net-DNS + downloadMake Net-IP + downloadMake Net-CIDR + downloadMake DB_File + downloadMake Mail-SPF + downloadMake Sys-Hostname-Long + downloadMake Net-SSLeay + downloadMake IO-Socket-SSL + downloadMake URI +} + +dospamassassin() { + if [ "${SPAMD_OPT}" != "spamassassin" ]; then + do_exit 1 "SpamAssassin is not set in options.conf." + fi + + #Install dependencies + if [ ! -x /usr/bin/spamd ]; then + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ "${OS_CENTOS_VER}" = "6" ]; then + PACKAGES="perl-Archive-Tar perl-Digest-SHA perl-Encode-Detect perl-HTML-Parser perl-IO-Socket-SSL perl-IO-Zlib perl-Mail-DKIM perl-Mail-SPF perl-Net-DNS perl-NetAddr-IP perl-Time-HiRes perl-interpreter perl-libs perl-libwww-perl perl-version perl-DBI perl-Digest-SHA perl-ExtUtils-MakeMaker perl-IO-Socket-INET6 pyzor" + elif [ "${OS_CENTOS_VER}" = "7" ]; then + PACKAGES="perl-Archive-Tar perl-Carp perl-DB_File perl-Data-Dumper perl-Digest-SHA perl-Encode-Detect perl-Exporter perl-File-Path perl-Getopt-Long perl-HTML-Parser perl-HTTP-Date perl-IO-Socket-SSL perl-IO-Zlib perl-Mail-DKIM perl-Mail-SPF perl-Net-DNS perl-NetAddr-IP perl-PathTools perl-Pod-Usage perl-Scalar-List-Utils perl-Socket perl-Sys-Syslog perl-Time-HiRes perl-Time-Local perl-constant perl-interpreter perl-libs perl-libwww-perl perl-version perl-DBI perl-Digest-SHA perl-ExtUtils-MakeMaker perl-IO-Socket-INET6 pyzor" + else + PACKAGES="perl-Archive-Tar perl-Carp perl-DB_File perl-Data-Dumper perl-Digest-SHA perl-Encode-Detect perl-Errno perl-Exporter perl-File-Path perl-Getopt-Long perl-HTML-Parser perl-HTTP-Date perl-IO perl-IO-Socket-SSL perl-IO-Zlib perl-Net-DNS perl-NetAddr-IP perl-PathTools perl-Pod-Usage perl-Scalar-List-Utils perl-Socket perl-Sys-Syslog perl-Time-HiRes perl-Time-Local perl-constant perl-interpreter perl-libs perl-libwww-perl perl-version perl-DBI perl-Digest-SHA perl-ExtUtils-MakeMaker perl-IO-Socket-INET6 pyzor" + fi + MISSING_PACKAGES=" " + for package in ${PACKAGES}; do { + PACKAGE_TEST=`checkRPMPackage ${package}` + if [ ${PACKAGE_TEST} -ne 0 ]; then + MISSING_PACKAGES="${package} ${MISSING_PACKAGES}" + fi + } + done + if [ ! -z "${MISSING_PACKAGES}" ]; then + yum -y install ${MISSING_PACKAGES} + fi + fi + elif [ -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/dpkg-query ]; then + MISSING_PACKAGES=" " + for package in libhtml-parser-perl libsocket6-perl libsys-hostname-long-perl libnet-dns-perl libnetaddr-ip-perl libhttp-date-perl libmail-dkim-perl libwww-perl; do { + PACKAGE_TEST=`checkDebianPackage ${package}` + if [ ${PACKAGE_TEST} -ne 0 ]; then + MISSING_PACKAGES="${package} ${MISSING_PACKAGES}" + fi + } + done + if [ ! -z "${MISSING_PACKAGES}" ]; then + apt-get update + apt-get -y install ${MISSING_PACKAGES} + fi + fi + fi + fi + + getFile Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz spamassassin + getFile patches/spamc-configure-version-h.patch spamc-configure-version-h.patch + if [ "${OS}" = "FreeBSD" ]; then + #https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=220474 + #T11874 + getFile patches/spamd-unescaped-left-brace-in-regex.patch spamd-unescaped-left-brace-in-regex.patch + fi + + + rm -f /etc/exim.spamassassin.conf + quitIfLocked dospamassassin + + if [ ! -e ${WORKDIR}/Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz ]; then + do_exit 1 "File Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}" + fi + + echo "Installing spamassassin ${SPAMASSASSIN_VER}..." + + cd ${CWD} + + #doLibs + + FILE=${CWD}/Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd Mail-SpamAssassin-${SPAMASSASSIN_VER} + + if [ "`version_cmp ${SPAMASSASSIN_VER} 3.4.1 'spamc patch'`" -le 0 ]; then + echo "patching spamc/configure.pl for revision=1782717... version.h.pl" + patch -p0 < ../patches/spamc-configure-version-h.patch + fi + + if [ "${OS}" = "FreeBSD" ]; then + echo "patching spamd for https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=220474" + patch -p1 < ../patches/spamd-unescaped-left-brace-in-regex.patch + fi + + echo "Configuring SpamAssassin ${SPAMASSASSIN_VER}..." + + export LANG=C + perl Makefile.PL PREFIX=/usr CONTACT_ADDRESS="the administrator of that system" RUN_NET_TESTS="no" INSTALL_BASE="" + + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure SpamAssassin.\n" + do_exit 1 + fi + + echo "Done Configuration." + + while echo "Trying to make SpamAssassin..."; do + make + + if [ $? -ne 0 ]; then + echo "" + echo "If needed, use cpan to install the missing modules, eg:" + echo " cpan -i Archive::Tar Digest::SHA Mail::SPF IP::Country Net::Ident IO::Socket::INET6 Compress::Zlib Mail::DKIM LWP::UserAgent HTTP::Date Encode::Detect ExtUtils::MakeMaker" + echo "" + echo "Press enter to answer [yes] if it asks you to install dependencies (it will prepend them to the queue)" + echo "Answer no if it asks: Are you ready for manual configuration? [yes] no" + echo "" + + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + + echo "Installing ..." + + #It's not able to overwrite spamd binary sometimes, if process is still running + killall spamd >/dev/null 2>&1 + killall -9 spamd >/dev/null 2>&1 + + make install + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/spamassassin ]; then + echo "Removing ${INITDDIR}/spamassassin..." + rm -f ${INITDDIR}/spamassassin + fi + echo "Enabling spamassassin in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/spamassassin.service ]; then + cp -f ${CB_CUST_SYSTEMD}/spamassassin.service ${SYSTEMDDIR}/spamassassin.service + else + cp -f ${CB_SYSTEMD}/spamassassin.service ${SYSTEMDDIR}/spamassassin.service + fi + chmod 644 ${SYSTEMDDIR}/spamassassin.service + systemctl daemon-reload + systemctl enable spamassassin.service + fi + + removeLockfile + cd ${CWD} + + dospamassassinCron + + ## we need to change how it's started. + if [ -e ${INITDDIR}/exim ]; then + perl -pi -e 's#/usr/bin/spamd -d -a -c -m 5#/usr/bin/spamd -d -c -m 15#' ${INITDDIR}/exim + fi + + perl -pi -e 's|#.include_if_exists /etc/exim.spamassassin.conf|.include_if_exists /etc/exim.spamassassin.conf|' /etc/exim.conf + + V342PRE=/etc/mail/spamassassin/v342.pre + if [ -s ${V342PRE} ]; then + echo "Enabling new SA plugins" + # loadplugin Mail::SpamAssassin::Plugin::HashBL + perl -pi -e 's/^# loadplugin Mail::SpamAssassin::Plugin::HashBL$/loadplugin Mail::SpamAssassin::Plugin::HashBL/' ${V342PRE} + + # loadplugin Mail::SpamAssassin::Plugin::ResourceLimits + # perl -pi -e 's/^# loadplugin Mail::SpamAssassin::Plugin::ResourceLimits$/loadplugin Mail::SpamAssassin::Plugin::ResourceLimits/' ${V342PRE} + # Can't locate BSD/Resource.pm in @INC + + # loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof + perl -pi -e 's/^# loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof$/loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof/' ${V342PRE} + + # loadplugin Mail::SpamAssassin::Plugin::Phishing + perl -pi -e 's/^# loadplugin Mail::SpamAssassin::Plugin::Phishing$/loadplugin Mail::SpamAssassin::Plugin::Phishing/' ${V342PRE} + fi + + echo "Running sa-update." + if [ -e /usr/bin/sa-update ]; then + #/usr/bin/sa-update --nogpg --channel sought.rules.yerp.org --channel updates.spamassassin.org + /usr/bin/sa-update --nogpg --channel updates.spamassassin.org + else + echo "Cannot find /usr/bin/sa-update after install. Check for errors above." + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + set_service rspamd delete + if [ -d /etc/exim/rspamd ]; then + if [ ! -d /etc/exim/rspamd_disabled ]; then + echo "Renaming /etc/exim/rspamd to /etc/exim/rspamd_disabled..." + mv /etc/exim/rspamd /etc/exim/rspamd_disabled + else + echo "Removing old /etc/exim/rspamd directory..." + rm -rf /etc/exim/rspamd + fi + fi + echo "Starting SpamAssassin." + if [ "${SYSTEMD}" = "yes" ]; then + systemctl restart spamassassin.service + set_service spamd ON + else + /usr/bin/spamd --pidfile /var/run/spamd.pid -d -c -m 15 --ipv4 + fi + + if ! grep -m1 -q '/etc/exim.spamd.conf' /etc/exim.conf; then + perl -pi -e 's|\.include_if_exists /etc/exim\.clamav\.conf|.include_if_exists /etc/exim.spamd.conf\n .include_if_exists /etc/exim.clamav.conf|g' /etc/exim.conf + fi + + if ! grep -m1 -q '/etc/exim.spamd.load.conf' /etc/exim.conf; then + perl -pi -e 's|\.include_if_exists /etc/exim\.clamav\.load\.conf|.include_if_exists /etc/exim.spamd.load.conf\n .include_if_exists /etc/exim.clamav.load.conf|g' /etc/exim.conf + fi + + if [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.6 'exim.conf ver check for ACL spam check'`" -lt 0 ]; then + perl -pi -e 's|#.include_if_exists /etc/exim.spamassassin.conf|.include_if_exists /etc/exim.spamassassin.conf|' /etc/exim.conf + if [ ! -s /etc/exim.spamassassin.conf ]; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.spamassassin.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.spamassassin.conf + chmod 644 /etc/exim.spamassassin.conf + fi + rm -f /etc/exim.spamd.conf + #disabling rspamd + echo -n '' > /etc/exim.spamd.load.conf + echo -n '' > /etc/exim.spamd.conf + else + echo "Enabling SpamAssassin in /etc/exim.spamd.load.conf..." + echo 'spamd_address = 127.0.0.1 783 retry=20s' > /etc/exim.spamd.load.conf + cp -fv ${SPAMD_CONF} /etc/exim.spamd.conf + fi + + echo "Restarting exim." + control_service exim restart + + ldconfig + + writeLog "SpamAssassin ${SPAMASSASSIN_VER} installed" +} + +doRemoveSpamassassin() { + if [ "${SPAMD_OPT}" = "spamassassin" ]; then + do_exit 1 "Cannot remove SpamAssassin because it is enabled in options.conf." + fi + + RESTART_EXIM=0 + if [ -e /etc/exim.spamassassin.conf ]; then + RESTART_EXIM=1 + fi + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/spamassassin ]; then + echo "Removing ${INITDDIR}/spamassassin..." + rm -f ${INITDDIR}/spamassassin + fi + if [ -e ${SYSTEMDDIR}/spamassassin.service ]; then + echo "Disabling spamassassin in systemd..." + systemctl disable spamassassin.service + rm -f ${SYSTEMDDIR}/spamassassin.service + systemctl daemon-reload + fi + + set_service spamd delete + fi + + remove_directory /var/lib/spamassassin + remove_directory /usr/share/perl5/Mail/SpamAssassin + remove_directory /usr/lib64/perl5/auto/Mail/SpamAssassin + remove_directory /usr/share/spamassassin + remove_directory /etc/mail/spamassassin + remove_directory /root/.spamassassin + + remove_file /usr/bin/spamassassin + remove_file /usr/bin/sa-check_spamd + remove_file /usr/bin/spamc + remove_file /usr/bin/sa-learn + remove_file /usr/bin/spamd + remove_file /usr/bin/sa-awl + remove_file /usr/bin/sa-update + remove_file /usr/bin/sa-compile + remove_file /etc/exim.spamassassin.conf + + if [ "$OS" = "FreeBSD" ]; then + CRONFILE=$WORKDIR/sa-update + if grep -m1 -q $CRONFILE /etc/crontab; then + grep -v $CRONFILE /etc/crontab > /etc/crontab.tmp + if [ ! -s /etc/crontab.tmp ]; then + echo "/etc/crontab.tmp doesn't exist or is size 0. Aborting" + exit 3 + fi + + mv -f /etc/crontab.tmp /etc/crontab + chmod 644 /etc/crontab + fi + else + #remove bits which may exist. + remove_file /etc/cron.daily/sa-update + remove_file /etc/cron.weekly/sa-update + remove_file /etc/cron.monthly/sa-update + fi + + ldconfig + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + if [ "${RESTART_EXIM}" = "1" ]; then + control_service exim restart + fi + + echo "SpamAssassin has been successfully removed" + writeLog "SpamAssassin removed" +} + +doRspamd() { + if [ "${SPAMD_OPT}" != "rspamd" ]; then + do_exit 1 "Rspamd is not set in options.conf." + fi + + if [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.5 'exim.conf ver check for ACL spam check'`" -lt 0 ]; then + do_exit 1 "Rspamd needs exim.conf release 4.5 or higher." + fi + + if [ "${B64}" != "1" ]; then + do_exit 1 "Rspamd only supports 64-bit systems." + fi + + if [ ! -x /usr/bin/redis-server ] && [ ! -x /usr/local/bin/redis-server ] && [ "${OS_CENTOS_VER}" != "6" ]; then + if [ "${REDIS_OPT}" = "no" ]; then + setOpt redis yes + REDIS_OPT="yes" + fi + doRedis + else + echo "Enabling redis-rspamd in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/redis-rspamd.service ]; then + cp -f ${CB_CUST_SYSTEMD}/redis-rspamd.service ${SYSTEMDDIR}/redis-rspamd.service + else + cp -f ${CB_SYSTEMD}/redis-rspamd.service ${SYSTEMDDIR}/redis-rspamd.service + fi + chmod 644 ${SYSTEMDDIR}/redis-rspamd.service + systemctl daemon-reload + systemctl enable --now redis-rspamd + fi + + if [ -e /etc/debian_version ]; then + if [ ! -x /usr/bin/lsb_release ]; then + apt-get -y install lsb-release + fi + CODENAME=`lsb_release -c -s` + if [ ! -s /etc/apt/sources.list.d/rspamd.list ]; then + curl ${CURL_CONNECT_OPTIONS} -o - https://rspamd.com/apt-stable/gpg.key | apt-key add - + echo "deb [arch=amd64] https://rspamd.com/apt-stable/ $CODENAME main" > /etc/apt/sources.list.d/rspamd.list + echo "deb-src [arch=amd64] https://rspamd.com/apt-stable/ $CODENAME main" >> /etc/apt/sources.list.d/rspamd.list + fi + apt-get -y update + apt-get -y --no-install-recommends install rspamd + if [ $? -ne 0 ]; then + do_exit 1 "Apt-get failed to install rspamd." + fi + elif [ "${OS}" = "FreeBSD" ]; then + pkg install -y rspamd + if [ $? -ne 0 ]; then + do_exit 1 "Pkg failed to install rspamd." + fi + else + if [ ! -s /etc/yum.repos.d/rspamd.repo ]; then + RSPAMD_REPO_URL=https://rspamd.com/rpm-stable/centos-${OS_CENTOS_VER}/rspamd.repo + if ! curl --silent --fail ${RSPAMD_REPO_URL}; then + do_exit 1 "Cannot download rspamd repo file ${RSPAMD_REPO_URL}." + fi + curl --fail ${RSPAMD_REPO_URL} > /etc/yum.repos.d/rspamd.repo + rpm --import https://rspamd.com/rpm-stable/gpg.key + fi + yum -y install rspamd + if [ $? -ne 0 ]; then + do_exit 1 "Yum failed to install rspamd." + fi + fi + + #Add _rspamd user/group if it doesn't exist after installation + addUserGroup _rspamd _rspamd + + #disable greylisting by default, as no redis server back-end (yet?). + if [ ! -e /etc/rspamd/local.d/greylist.conf ]; then + if [ ! -d /etc/rspamd/local.d ]; then + mkdir /etc/rspamd/local.d + chmod 755 /etc/rspamd/local.d + fi + + echo "enabled = false;" > /etc/rspamd/local.d/greylist.conf + fi + + #copy custom configs here? TODO + + #end custom configs + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Enabling rspamd in systemd..." + + if [ -e ${SYSTEMDDIR}/rspamd.service ]; then + systemctl enable rspamd.service + if [ -e ${SYSTEMDDIR}/spamassassin.service ]; then + systemctl stop spamassassin.service + systemctl disable spamassassin.service + rm -f ${SYSTEMDDIR}/spamassassin.service + systemctl daemon-reload + fi + fi + else + if [ -e ${INITDDIR}/rspamd ]; then + if [ "${OS}" = "FreeBSD" ]; then + chmod 755 ${INITDDIR}/rspamd + elif [ -e /etc/debian_version ]; then + chmod 755 ${INITDDIR}/rspamd + update-rc.d rspamd defaults + else + chmod 755 ${INITDDIR}/rspamd + /sbin/chkconfig rspamd on + fi + fi + fi + + set_service spamd delete + + if [ -e /usr/bin/spamd ]; then + doRemoveSpamassassin + fi + + killall -9 spamd >/dev/null 2>&1 + + removeLockfile + cd ${CWD} + + mkdir -p /var/log/rspamd + + echo 'servers = "/var/lib/rspamd/.redis/redis.sock";' > /etc/rspamd/local.d/redis.conf + + #set permissions + if [ -e /etc/rspamd/local.d/settings.conf ]; then + if ! grep -m1 -q ".include \"\$CONFDIR/directadmin-users.conf\"" /etc/rspamd/local.d/settings.conf; then + echo ".include \"\$CONFDIR/directadmin-users.conf\"" >> /etc/rspamd/local.d/settings.conf + fi + else + echo ".include \"\$CONFDIR/directadmin-users.conf\"" > /etc/rspamd/local.d/settings.conf + fi + + #listen on UDS instead of localhost TCP/IP + if [ -e /etc/rspamd/local.d/worker-normal.inc ]; then + sed -i '/bind_socket =/d' /etc/rspamd/local.d/worker-normal.inc + echo 'bind_socket = "localhost:11333";' >> /etc/rspamd/local.d/worker-normal.inc + else + echo 'bind_socket = "localhost:11333";' > /etc/rspamd/local.d/worker-normal.inc + fi + + #listen on UDS instead of localhost TCP/IP + if [ -e /etc/rspamd/local.d/worker-controller.inc ]; then + sed -i '/bind_socket =/d' /etc/rspamd/local.d/worker-controller.inc + echo 'bind_socket = "/var/run/rspamd/rspamd_controller.sock mode=0600 owner=_rspamd";' >> /etc/rspamd/local.d/worker-controller.inc + else + echo 'bind_socket = "/var/run/rspamd/rspamd_controller.sock mode=0600 owner=_rspamd";' > /etc/rspamd/local.d/worker-controller.inc + fi + + #listen on UDS instead of localhost TCP/IP + if [ -e /etc/rspamd/local.d/worker-proxy.inc ]; then + sed -i '/bind_socket =/d' /etc/rspamd/local.d/worker-proxy.inc + echo 'bind_socket = "/var/run/rspamd/rspamd_proxy.sock mode=0600 owner=_rspamd";' >> /etc/rspamd/local.d/worker-proxy.inc + else + echo 'bind_socket = "/var/run/rspamd/rspamd_proxy.sock mode=0600 owner=_rspamd";' > /etc/rspamd/local.d/worker-proxy.inc + fi + + #prevent: cfg; rspamd_config_read: failed to load config: ucl parser error: cannot open file /etc/rspamd/directadmin-users.conf: No such file or directory + if [ ! -e /etc/rspamd/directadmin-users.conf ]; then + touch /etc/rspamd/directadmin-users.conf + fi + mkdir -p /etc/rspamd/users.d + chown _rspamd:_rspamd /etc/rspamd/local.d/settings.conf /etc/rspamd/users.d /etc/rspamd/directadmin-users.conf /etc/rspamd + + # generate user prefs + echo "action=rewrite&value=rspamd" >> ${TASK_QUEUE} + run_dataskq d + + if [ "${OS}" = "FreeBSD" ]; then + #ensure it's in the /etc/rc.conf + if ! grep -m1 -q '^rspamd_enable=' /etc/rc.conf; then + echo 'rspamd_enable="YES"' >> /etc/rc.conf + else + /usr/bin/perl -pi -e 's/^rspamd_enable=.*/rspamd_enable="YES"/' /etc/rc.conf + fi + fi + + csf_enable_rspamd + + echo "Restarting rspamd." + control_service rspamd restart + + set_service rspamd ON + + +# Not needed, as we load it elsewhere +# if ! grep -m1 -q '^\.include_if_exists /etc/exim.spamd.conf' /etc/exim.conf; then +# if grep -m1 -q '^#\.include_if_exists /etc/exim.spamd.conf' /etc/exim.conf; then +# perl -pi -e 's|#\.include_if_exists /etc/exim\.spamd\.conf|.include_if_exists /etc/exim.clamav.conf|g' /etc/exim.conf +# else +# perl -pi -e 's|\.include_if_exists /etc/exim\.clamav\.conf|.include_if_exists /etc/exim.spamd.conf\n .include_if_exists /etc/exim.clamav.conf|g' /etc/exim.conf +# fi +# fi +# +# if ! grep -m1 -q '^\.include_if_exists /etc/exim.spamd.load.conf' /etc/exim.conf; then +# if grep -m1 -q '^#\.include_if_exists /etc/exim.spamd.load.conf' /etc/exim.conf; then +# perl -pi -e 's|#\.include_if_exists /etc/exim\.spamd\.load\.conf|.include_if_exists /etc/exim.spamd.load.conf|g' /etc/exim.conf +# else +# perl -pi -e 's|\.include_if_exists /etc/exim\.clamav\.conf|.include_if_exists /etc/exim.spamd.conf\n .include_if_exists /etc/exim.spamd.load.conf|g' /etc/exim.conf +# fi +# fi +# +# echo "Enabling rspamd in /etc/exim.spamd.load.conf..." +# echo 'spamd_address = 127.0.0.1 11333 retry=20s variant=rspamd' > /etc/exim.spamd.load.conf +# +# cp -fv ${SPAMD_CONF} /etc/exim.spamd.conf + + echo "Restarting exim." + control_service exim restart + + ldconfig + + if [ ! -s /etc/logrotate.d/rspamd ] && [ ${OS} != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/rspamd.logrotate -o /etc/logrotate.d/rspamd + fi + + writeLog "Rspamd has been installed successfully." +} + +doNetdata() { + if [ "${OS}" = "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} -o netdata.sh https://my-netdata.io/kickstart.sh && bash ./netdata.sh --dont-wait --disable-telemetry && rm -f netdata.sh + else + curl ${CURL_CONNECT_OPTIONS} -o netdata.sh https://my-netdata.io/kickstart-static64.sh && bash ./netdata.sh --dont-wait --disable-telemetry && rm -f netdata.sh + fi + + if [ -s ${WORKDIR}/custom/netdata/netdata.conf ]; then + cp -pf ${WORKDIR}/custom/netdata/netdata.conf /opt/netdata/etc/netdata/netdata.conf + else + printf "[web]\nbind to = unix:/var/run/netdata/netdata.sock\n[global]\nprocess scheduling policy = keep\nOOM score = keep\n" > /opt/netdata/etc/netdata/netdata.conf + fi + + if [ -s /usr/lib/systemd/system/netdata.service ]; then + if grep -m1 -q '^RuntimeDirectoryMode=0775$' /usr/lib/systemd/system/netdata.service; then + perl -pi -e 's|^RuntimeDirectoryMode=0775$|RuntimeDirectoryMode=0700|g' /usr/lib/systemd/system/netdata.service + systemctl daemon-reload + fi + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ]; then + usermod -a -G clsupergid netdata + fi + killall netdata + sleep 10 + control_service netdata start +} + +dozstd() { + if [ "${OS_CENTOS_VER}" = "6" ]; then + installDevtoolset + fi + + quitIfLocked dozstd + + if [ -d /etc/cagefs/conf.d ]; then + echo '[zstd]' > /etc/cagefs/conf.d/zstd.cfg + echo 'comment=zstd' >> /etc/cagefs/conf.d/zstd.cfg + echo 'paths=/usr/local/bin/zstd, /usr/local/bin/zstdmt, /usr/local/bin/unzstd, /usr/local/bin/zstdcat' >> /etc/cagefs/conf.d/zstd.cfg + fi + + cd ${CWD} + + getFile zstd/zstd-${ZSTD_VER}.tar.gz zstd zstd-${ZSTD_VER}.tar.gz + + tar xzf zstd-${ZSTD_VER}.tar.gz --no-same-owner + cd zstd-${ZSTD_VER} + + if [ "${OS}" = "FreeBSD" ]; then + gmake -j${CPU_CORES} install + else + if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then + scl enable devtoolset-7 "make -j${CPU_CORES} install" + else + make -j${CPU_CORES} install + fi + fi + if [ $? -ne 0 ]; then + do_exit 1 + fi + + ldconfig + + cd ${WORKDIR} + + removeLockfile + + echo "zstd ${ZSTD_VER} installed" + writeLog "zstd ${ZSTD_VER} installed" +} + +do_remove_rspamd() { + if [ "${SPAMD_OPT}" = "rspamd" ]; then + do_exit 1 "Cannot remove Rspamd because it is enabled in options.conf." + fi + +#Using package manager +# for f in `echo 'rspamd rspamd-${RSPAMD_VER} rspamc rspamc-${RSPAMD_VER} rspamadm rspamadm-${RSPAMD_VER} rspamd_stats'`; do +# remove_file /usr/local/bin/$f +# done + + if [ -e /etc/debian_version ]; then + apt-get -y purge rspamd + elif [ "${OS}" = "FreeBSD" ]; then + pkg delete rspamd + else + yum -y remove rspamd + fi + + if [ -e ${INITDDIR}/rspamd ]; then + remove_file ${INITDDIR}/rspamd + fi + + if [ -e ${SYSTEMDDIR}/rspamd.service ]; then + echo "Disabling rspamd in systemd..." + systemctl disable rspamd.service + remove_file ${SYSTEMDDIR}/rspamd.service + systemctl daemon-reload + fi + + if [ -d /etc/rspamd ]; then + remove_directory /etc/rspamd + fi + + echo "Rspamd has been successfully removed" + writeLog "Rspamd removed" +} + +#################################################### + +create_symlinks_for_binaries() { + if [ -e $1 ] && [ -e $2 ] && [ ! -h $2 ]; then + echo "Symlinking $1 to $2..." + mv -f $2 $2_backup + ln -sf $1 $2 + fi +} + +doclamav() { + if [ "${CLAMAV_OPT}" = "no" ]; then + do_exit 1 "ClamAV is not set in options.conf." + fi + + getFile clamav-${CLAMAV_VER}.tar.gz clamav + getFile clamd + getFile clamd_freebsd + getFile clamd_debian + getFile freshclam + getFile freshclam_freebsd + getFile freshclam_debian + + if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.clamav.load.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.load.conf + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.clamav.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.conf + fi + + quitIfLocked doclamav + + if [ ! -e ${WORKDIR}/clamav-${CLAMAV_VER}.tar.gz ]; then + do_exit 1 "File clamav-${CLAMAV_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}" + fi + + echo "Installing clamav ${CLAMAV_VER} ..." + + CLAMD_CONF=1 + if [ ! -e /etc/clamd.conf ]; then + CLAMD_CONF=0 + fi + + FRESHCLAM_CONF=1 + if [ ! -e /etc/freshclam.conf ]; then + FRESHCLAM_CONF=0 + fi + + addUserGroup clamav clamav + mkdir -p /var/run/clamd + chown -R clamav.clamav /var/run/clamd + chmod 700 /var/run/clamd + + cd ${CWD} + FILE=${CWD}/clamav-${CLAMAV_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd clamav-${CLAMAV_VER} + + echo "Configuring clamav ${CLAMAV_VER} ..." + mkdir -p build + cd build + + if [ ! -d /usr/local/include/curl ] && grep -m1 -q 'with-libcurl=/usr/local' ${CWD}/${CLAMAV_CONFIGURE}; then + perl -pi -e 's|with-libcurl=/usr/local|with-libcurl=/usr|g' ${CWD}/${CLAMAV_CONFIGURE} + fi + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + CMAKE_NAME="cmake3" + if grep -m1 -q "^cmake " ${CWD}/${CLAMAV_CONFIGURE}; then + perl -pi -e 's|^cmake |cmake3 |g' ${CWD}/${CLAMAV_CONFIGURE} + fi + else + CMAKE_NAME="cmake" + fi + + if [ "${CMAKE_NAME}" = "cmake" ]; then + if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ] && [ ! -e /usr/bin/cmake3 ]; then + echo "Cannot find ${CMAKE_NAME}, installing it..." + if [ -e /etc/debian_version ]; then + apt-get -y install ${CMAKE_NAME} + elif [ "${OS}" = "FreeBSD" ]; then + ${PKG_INSTALL} ${CMAKE_NAME} + else + yum -y install ${CMAKE_NAME} + fi + fi + elif [ ! -e /usr/bin/cmake3 ]; then + yum -y install ${CMAKE_NAME} --enablerepo=${EPEL_REPO_NAME} + fi + + if [ "${OS_DEBIAN_VER}" = "9" ]; then + CMAKE_MINOR_VER=`cmake --version | head -n1 | grep -o '[0-9]\.[^ ]*' | cut -d. -f2` + if [ ${CMAKE_MINOR_VER} -lt 14 ]; then + if ! grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d | grep -m1 -q 'stretch-backports'; then + echo 'deb http://deb.debian.org/debian stretch-backports main' >> /etc/apt/sources.list.d/stretch-backports.list + apt-get update + fi + apt-get -y install -t stretch-backports ${CMAKE_NAME} + fi + fi + + if [ "${OS_DEBIAN_VER}" = "10" ]; then + CMAKE_MINOR_VER=`cmake --version | head -n1 | grep -o '[0-9]\.[^ ]*' | cut -d. -f2` + if [ ${CMAKE_MINOR_VER} -lt 14 ]; then + if ! grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d | grep -m1 -q 'buster-backports'; then + echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list.d/buster-backports.list + apt-get update + fi + apt-get -y install -t buster-backports ${CMAKE_NAME} + fi + fi + + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage libxml2-devel` -ne 0 ]; then + yum -y install libxml2-devel + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libxml2-dev` -ne 0 ]; then + apt-get -y install libxml2-dev + ldconfig + fi + fi + fi + + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage bzip2-devel` -ne 0 ]; then + yum -y install bzip2-devel + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libbz2-dev` -ne 0 ]; then + apt-get -y install libbz2-dev + ldconfig + fi + fi + fi + + if [ ! -e /usr/include/pcre2.h ] && [ ! -e /usr/local/include/pcre2.h ]; then + echo "Cannot find pcre2, installing it..." + if [ -e /etc/debian_version ]; then + apt-get -y install libpcre2-dev + elif [ "${OS}" = "FreeBSD" ]; then + ${PKG_INSTALL} pcre2 + else + yum -y install pcre2-devel + fi + fi + + if [ ! -e /usr/include/json/json.h ] && [ ! -e /usr/local/include/json/json.h ] && [ ! -e /usr/include/json-c/json.h ] && [ ! -e /usr/local/include/json-c/json.h ]; then + echo "Cannot find json-c, installing it..." + if [ -e /etc/debian_version ]; then + apt-get -y install libjson-c-dev + elif [ "${OS}" = "FreeBSD" ]; then + ${PKG_INSTALL} json-c + else + yum -y install json-c-devel + fi + fi + + if [ ! -e /usr/include/curses.h ] && [ ! -e /usr/local/include/curses.h ]; then + echo "Cannot find ncurses, installing it..." + if [ -e /etc/debian_version ]; then + apt-get -y install libncurses-dev + elif [ "${OS}" = "FreeBSD" ]; then + ${PKG_INSTALL} ncurses + else + yum -y install ncurses-devel + fi + fi + + ${CWD}/${CLAMAV_CONFIGURE} + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure clamav.\n" + do_exit 1 + fi + echo "Done Configuration." + + while echo "Trying to make clamav..."; do + if [ "${OS}" = "FreeBSD" ]; then + make CPPFLAGS=-I/usr/kerberos/include LDFLAGS=-liconv -j ${CPU_CORES} + else + make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, do you want to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + + echo "Cleaning old libraries up..." + if [ "${B64}" = "1" ]; then + rm -f /usr/local/lib64/libclam* + fi + rm -f /usr/local/lib/libclam* + + echo "Installing ..." + make install + removeLockfile + ldconfig + cd ${CWD} + if [ ${CLAMD_CONF} -eq 0 ]; then + if [ ! -s /etc/clamd.conf ] && [ -s /etc/clamd.conf.sample ]; then + cp -f /etc/clamd.conf.sample /etc/clamd.conf + fi + + perl -pi -e 's|Example|#Example|' /etc/clamd.conf + perl -pi -e 's|#PidFile /var/run/clamd.pid|PidFile /var/run/clamd/clamd.pid|' /etc/clamd.conf + perl -pi -e 's|#TCPSocket 3310|TCPSocket 3310|' /etc/clamd.conf + perl -pi -e 's|#TCPAddr 127.0.0.1|TCPAddr 127.0.0.1|' /etc/clamd.conf + perl -pi -e 's|^LocalSocket|#LocalSocket|' /etc/clamd.conf + fi + if [ ${FRESHCLAM_CONF} -eq 0 ]; then + if [ ! -s /etc/freshclam.conf ] && [ -s /etc/freshclam.conf.sample ]; then + cp -f /etc/freshclam.conf.sample /etc/freshclam.conf + fi + + perl -pi -e 's|Example|#Example|' /etc/freshclam.conf + perl -pi -e 's|#LogSyslog yes|LogSyslog yes|' /etc/freshclam.conf + perl -pi -e 's|#PidFile /var/run/freshclam.pid|PidFile /var/run/clamd/freshclam.pid|' /etc/freshclam.conf + perl -pi -e 's|#Checks 24|#Checks 24|' /etc/freshclam.conf + perl -pi -e 's|#NotifyClamd /path/to/clamd.conf|#NotifyClamd /etc/clamd.conf|' /etc/freshclam.conf + fi + + #Deprecated in 0.100 + perl -pi -e 's|^AllowSupplementaryGroups|#AllowSupplementaryGroups|' /etc/clamd.conf + if [ -e ${WORKDIR}/custom/clamav/clamd.conf ]; then + cp -f ${WORKDIR}/custom/clamav/clamd.conf /etc/clamd.conf + fi + + if [ -e ${WORKDIR}/custom/clamav/freshclam.conf ]; then + cp -f ${WORKDIR}/custom/clamav/freshclam.conf /etc/freshclam.conf + fi + + if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then + perl -pi -e 's|#.include_if_exists /etc/exim.clamav.load.conf|.include_if_exists /etc/exim.clamav.load.conf|' /etc/exim.conf + perl -pi -e 's|#.include_if_exists /etc/exim.clamav.conf|.include_if_exists /etc/exim.clamav.conf|' /etc/exim.conf + fi + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/clamd ]; then + echo "Removing ${INITDDIR}/clamd..." + rm -f ${INITDDIR}/clamd + fi + if [ -e ${INITDDIR}/freshclam ]; then + echo "Removing ${INITDDIR}/freshclam..." + rm -f ${INITDDIR}/freshclam + fi + echo "Enabling clamd in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/clamd.service ]; then + cp -f ${CB_CUST_SYSTEMD}/clamd.service ${SYSTEMDDIR}/clamd.service + else + if [ -e /etc/debian_version ]; then + cp -f ${CB_SYSTEMD}/clamd.service.debian ${SYSTEMDDIR}/clamd.service + else + cp -f ${CB_SYSTEMD}/clamd.service ${SYSTEMDDIR}/clamd.service + fi + fi + chmod 644 ${SYSTEMDDIR}/clamd.service + DISABLE_PRIVATETMP=false + if [ "${CLAMAV_OPT}" = "yes" ]; then + if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] || [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ]; then + DISABLE_PRIVATETMP=true + fi + fi + if [ -e /proc/1/environ ]; then + if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then + DISABLE_PRIVATETMP=true + fi + fi + if ${DISABLE_PRIVATETMP}; then + echo "Upload scan option detected in options.conf. Disabling PrivateTmp feature in clamd.service for ClamAV to be able to scan files in /tmp." + perl -pi -e 's#PrivateTmp \= true#PrivateTmp = false#' ${SYSTEMDDIR}/clamd.service + fi + systemctl daemon-reload + systemctl enable clamd.service + + echo "Enabling freshclam in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/freshclam.service ]; then + cp -f ${CB_CUST_SYSTEMD}/freshclam.service ${SYSTEMDDIR}/freshclam.service + else + cp -f ${CB_SYSTEMD}/freshclam.service ${SYSTEMDDIR}/freshclam.service + fi + chmod 644 ${SYSTEMDDIR}/freshclam.service + systemctl daemon-reload + systemctl enable freshclam.service + else + #install the boot scripts. + if [ ! -e ${INITDDIR}/clamd ]; then + if [ "${OS}" = "FreeBSD" ]; then + cp ${CWD}/clamd_freebsd ${INITDDIR}/clamd + chmod 755 ${INITDDIR}/clamd + elif [ -e /etc/debian_version ]; then + cp ${CWD}/clamd_debian ${INITDDIR}/clamd + chmod 755 ${INITDDIR}/clamd + update-rc.d clamd defaults + else + cp ${CWD}/clamd ${INITDDIR}/clamd + chmod 755 ${INITDDIR}/clamd + /sbin/chkconfig clamd on + fi + fi + + if [ ! -e ${INITDDIR}/freshclam ]; then + if [ "${OS}" = "FreeBSD" ]; then + cp ${CWD}/freshclam_freebsd ${INITDDIR}/freshclam + chmod 755 ${INITDDIR}/freshclam + elif [ -e /etc/debian_version ]; then + cp ${CWD}/freshclam_debian ${INITDDIR}/freshclam + chmod 755 ${INITDDIR}/freshclam + update-rc.d freshclam defaults + else + cp ${CWD}/freshclam ${INITDDIR}/freshclam + chmod 755 ${INITDDIR}/freshclam + /sbin/chkconfig freshclam on + fi + fi + + perl -pi -e 's#/usr/sbin/clamd#/usr/local/sbin/clamd#' ${INITDDIR}/clamd + perl -pi -e 's#/usr/bin/freshclam#/usr/local/bin/freshclam#' ${INITDDIR}/freshclam + fi + + if [ "${OS}" != "FreeBSD" ]; then + if [ ! -d /var/run/clamd ]; then + mkdir /var/run/clamd + fi + fi + + #Ensure ClamAV Database + USC=/usr/local/share/clamav + if [ -s /etc/freshclam.conf ]; then + if grep -m1 -q ^DatabaseDirectory /etc/freshclam.conf; then + USC=`grep -m1 ^DatabaseDirectory /etc/freshclam.conf | awk '{print $2}'` + fi + fi + + if [ ! -d $USC ]; then + echo "Creating DatabaseDirectory $USC ..." + mkdir -p $USC + chown clamav:clamav $USC + fi + + if [ ! -s $USC/daily.cld ]; then + /usr/local/bin/freshclam -v + fi + + #Symlink /usr/bin binaries to /usr/local/bin + create_symlinks_for_binaries /usr/local/bin/clamav-config /usr/bin/clamav-config + create_symlinks_for_binaries /usr/local/bin/clambc /usr/bin/clambc + create_symlinks_for_binaries /usr/local/bin/clamconf /usr/bin/clamconf + create_symlinks_for_binaries /usr/local/bin/clamdscan /usr/bin/clamdscan + create_symlinks_for_binaries /usr/local/bin/clamscan /usr/bin/clamscan + create_symlinks_for_binaries /usr/local/bin/freshclam /usr/bin/freshclam + create_symlinks_for_binaries /usr/local/sbin/clamd /usr/sbin/clamd + + set_service clamd ON + set_service freshclam ON + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "Restarting freshclam." + control_service freshclam restart + + echo "Restarting clamd." + control_service clamd restart + + if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then + echo "Restarting exim." + control_service exim restart + fi + + echo "Done ClamAV." + writeLog "ClamAV ${CLAMAV_VER} installed" +} + +doRemoveClamav() { + if [ ! -e /usr/local/sbin/clamd ]; then + do_exit 1 "/usr/local/sbin/clamd wasn't found on the system, exiting..." + fi + + if [ "${CLAMAV_OPT}" = "yes" ]; then + do_exit 1 "ClamAV is still set in options.conf, cannot remove." + fi + + getFile clamav-${CLAMAV_VER}.tar.gz clamav + + quitIfLocked doRemoveClamav + + if [ ! -e ${WORKDIR}/clamav-${CLAMAV_VER}.tar.gz ]; then + do_exit 1 "File clamav-${CLAMAV_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}" + fi + + echo "Removing clamav ${CLAMAV_VER}..." + cd ${CWD} + FILE=${CWD}/clamav-${CLAMAV_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ..." + tar xzf ${FILE} --no-same-owner + echo "Done." + cd clamav-${CLAMAV_VER} + + mkdir -p build + cd build + + if [ ! -d /usr/local/include/curl ] && grep -m1 -q 'with-libcurl=/usr/local' ${CWD}/${CLAMAV_CONFIGURE}; then + perl -pi -e 's|with-libcurl=/usr/local|with-libcurl=/usr|g' ${CWD}/${CLAMAV_CONFIGURE} + fi + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then + CMAKE_NAME="cmake3" + if grep -m1 -q "^cmake " ${CWD}/${CLAMAV_CONFIGURE}; then + perl -pi -e 's|^cmake |cmake3 |g' ${CWD}/${CLAMAV_CONFIGURE} + fi + else + CMAKE_NAME="cmake" + fi + + if [ "${CMAKE_NAME}" = "cmake" ]; then + if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ] && [ ! -e /usr/bin/cmake3 ]; then + echo "Cannot find ${CMAKE_NAME}, installing it..." + if [ -e /etc/debian_version ]; then + apt-get -y install ${CMAKE_NAME} + elif [ "${OS}" = "FreeBSD" ]; then + ${PKG_INSTALL} ${CMAKE_NAME} + else + yum -y install ${CMAKE_NAME} + fi + fi + elif [ ! -e /usr/bin/cmake3 ]; then + yum -y install ${CMAKE_NAME} --enablerepo=${EPEL_REPO_NAME} + fi + + if [ "${OS_DEBIAN_VER}" = "9" ]; then + CMAKE_MINOR_VER=`cmake --version | head -n1 | grep -o '[0-9]\.[^ ]*' | cut -d. -f2` + if [ ${CMAKE_MINOR_VER} -lt 14 ]; then + if ! grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d | grep -m1 -q 'stretch-backports'; then + echo 'deb http://deb.debian.org/debian stretch-backports main' >> /etc/apt/sources.list.d/stretch-backports.list + apt-get update + fi + apt-get -y install -t stretch-backports ${CMAKE_NAME} + fi + fi + + if [ "${OS_DEBIAN_VER}" = "10" ]; then + CMAKE_MINOR_VER=`cmake --version | head -n1 | grep -o '[0-9]\.[^ ]*' | cut -d. -f2` + if [ ${CMAKE_MINOR_VER} -lt 14 ]; then + if ! grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d | grep -m1 -q 'buster-backports'; then + echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list.d/buster-backports.list + apt-get update + fi + apt-get -y install -t buster-backports ${CMAKE_NAME} + fi + fi + + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage libxml2-devel` -ne 0 ]; then + yum -y install libxml2-devel + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libxml2-dev` -ne 0 ]; then + apt-get -y install libxml2-dev + ldconfig + fi + fi + fi + + if [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then + if [ -x /usr/bin/rpm ]; then + if [ `checkRPMPackage bzip2-devel` -ne 0 ]; then + yum -y install bzip2-devel + ldconfig + fi + fi + elif [ "${OS}" != "FreeBSD" ]; then + if [ -x /usr/bin/dpkg-query ]; then + if [ `checkDebianPackage libbz2-dev` -ne 0 ]; then + apt-get -y install libbz2-dev + ldconfig + fi + fi + fi + + if [ ! -e /usr/include/pcre2.h ] && [ ! -e /usr/local/include/pcre2.h ]; then + echo "Cannot find pcre2, installing it..." + if [ -e /etc/debian_version ]; then + apt-get -y install libpcre2-dev + elif [ "${OS}" = "FreeBSD" ]; then + ${PKG_INSTALL} pcre2 + else + yum -y install pcre2-devel + fi + fi + + if [ ! -e /usr/include/json/json.h ] && [ ! -e /usr/local/include/json/json.h ] && [ ! -e /usr/include/json-c/json.h ] && [ ! -e /usr/local/include/json-c/json.h ]; then + echo "Cannot find json-c, installing it..." + if [ -e /etc/debian_version ]; then + apt-get -y install libjson-c-dev + elif [ "${OS}" = "FreeBSD" ]; then + ${PKG_INSTALL} json-c + else + yum -y install json-c-devel + fi + fi + + if [ ! -e /usr/include/curses.h ] && [ ! -e /usr/local/include/curses.h ]; then + echo "Cannot find ncurses, installing it..." + if [ -e /etc/debian_version ]; then + apt-get -y install libncurses-dev + elif [ "${OS}" = "FreeBSD" ]; then + ${PKG_INSTALL} ncurses + else + yum -y install ncurses-devel + fi + fi + + echo "Configuring clamav ${CLAMAV_VER} for removal..." + + ${CWD}/${CLAMAV_CONFIGURE} + if [ $? -ne 0 ]; then + printf "\n*** There was an error while trying to configure clamav.\n" + do_exit 1 + fi + echo "Done Configuration." + + echo "Uninstalling ..." + while echo "Trying to make clamav..."; do + if [ "${OS}" = "FreeBSD" ]; then + make CPPFLAGS=-I/usr/kerberos/include LDFLAGS=-liconv -j ${CPU_CORES} + else + make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, do you want to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + make install + xargs rm -f < install_manifest.txt + removeLockfile + ldconfig + cd ${CWD} + + echo "Removing clamav/freshclam from services.status..." + set_service clamd delete + set_service freshclam delete + + if [ -e ${INITDDIR}/clamd ]; then + control_service clamd stop + if [ -e /etc/debian_version ]; then + update-rc.d clamd remove + elif [ "${OS}" != "FreeBSD" ]; then + /sbin/chkconfig clamd off + fi + echo "Removing ${INITDDIR}/clamd..." + rm -f ${INITDDIR}/clamd + fi + if [ -e ${INITDDIR}/freshclam ]; then + control_service freshclam stop + if [ -e /etc/debian_version ]; then + update-rc.d freshclam remove + elif [ "${OS}" != "FreeBSD" ]; then + /sbin/chkconfig freshclam off + fi + echo "Removing ${INITDDIR}/freshclam..." + rm -f ${INITDDIR}/freshclam + fi + + if [ -e ${SYSTEMDDIR}/clamd.service ] && [ "${SYSTEMD}" = "yes" ]; then + echo "Removing clamd systemd script..." + systemctl stop clamd.service + systemctl disable clamd.service + rm -f ${SYSTEMDDIR}/clamd.service + systemctl daemon-reload + fi + + if [ -e ${SYSTEMDDIR}/freshclam.service ] && [ "${SYSTEMD}" = "yes" ]; then + echo "Removing freshclam systemd script..." + systemctl stop freshclam.service + systemctl disable freshclam.service + rm -f ${SYSTEMDDIR}/freshclam.service + systemctl daemon-reload + fi + + echo "Removing ClamAV configuration files: /etc/clamd.conf.sample and /etc/clamd.conf..." + rm -f /etc/clamd.conf.sample + rm -f /etc/clamd.conf + + echo "Removing Freshclam configuration files: /etc/freshclam.conf.sample and /etc/freshclam.conf..." + rm -f /etc/freshclam.conf.sample + rm -f /etc/freshclam.conf + + EXIMRESTART=0 + if [ -e /etc/exim.clamav.load.conf ] || [ -e /etc/exim.clamav.conf ]; then + EXIMRESTART=1 + echo "Disabling ClamAV in exim.conf..." + rm -f /etc/exim.clamav.load.conf + rm -f /etc/exim.clamav.conf + fi + + #Remove ClamAV Database + echo "Removing ClamAV Database: /usr/local/share/clamav..." + rm -rf /usr/local/share/clamav + + #Rempove symlinks of /usr/bin binaries to /usr/local/bin + echo "Removing ClamAV symlins from /usr/bin..." + rm -f /usr/bin/clamav-config + rm -f /usr/bin/clambc + rm -f /usr/bin/clamconf + rm -f /usr/bin/clamdscan + rm -f /usr/bin/clamscan + rm -f /usr/bin/freshclam + rm -f /usr/sbin/clamd + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + if [ "${EXIMRESTART}" = "1" ]; then + echo "Restarting exim..." + control_service exim restart + fi + + echo "ClamAV has been successfully removed." + writeLog "ClamAV removed" +} + +#################################################### +# Mailman is not yet supported +#domailman() { +# if [ "${MAILMAN_OPT}" = "no" ]; then +# do_exit 1 "Mailman is not set in options.conf." +# fi +# +# getFile mailman-${MAILMAN_VER}.tgz mailman +# getFile mailman +# getFile mailman_freebsd +# getFile mailman_debian +# +# quitIfLocked mailman +# touch ${WORKDIR}/.custombuild +# +# if [ ! -s ${WORKDIR}/mailman-${MAILMAN_VER}.tgz ]; then +# do_exit 1 "File mailman-${MAILMAN_VER}.tgz does not exist. Try running ${boldon}./build update.${boldoff}" +# fi +# +# echo "Installing mailman ${MAILMAN_VER} ..." +# +# MM_CFG=1 +# if [ ! -e /usr/local/mailman/Mailman/mm_cfg.py ]; then +# MM_CFG=0 +# fi +# +# #Mailman requirements +# addUserGroup mailman mailman +# mkdir -p /usr/local/mailman +# chown mailman:mailman /usr/local/mailman +# chmod 02775 /usr/local/mailman +# +# cd ${CWD} +# FILE=${CWD}/mailman-${MAILMAN_VER}.tgz +# checkFile ${FILE} +# echo "Extracting ..." +# tar xzf ${FILE} --no-same-owner +# echo "Done." +# cd mailman-${MAILMAN_VER} +# +# echo "Configuring Mailman ${MAILMAN_VER} ..." +# +# ./configure --with-cgi-gid=apache +# if [ $? -ne 0 ]; then +# echo -e "\n*** There was an error while trying to configure mailman.\n" +# do_exit 1 +# fi +# echo "Done Configuration." +# +# while echo "Trying to make mailman..."; do +# make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES} +# +# if [ $? -ne 0 ]; then +# if [ ${USER_INPUT} -eq 1 ]; then +# echo -e "\n*** The make has failed, do you want to try to make again? (y,n): " +# read yesno +# echo "" +# else +# if [ "${INPUT_VALUE}" != "y" ]; then +# yesno=n +# else +# yesno=${INPUT_VALUE} +# fi +# fi +# +# if [ "${yesno}" = "n" ]; then +# do_exit 0 +# fi +# else +# break +# fi +# done +# echo "Make complete" +# +# echo "Installing ..." +# +# make install +# removeLockfile +# ldconfig +# cd ${CWD} +# +# #install the boot scripts. +# if [ ! -e ${INITDDIR}/mailmanctl ]; then +# if [ "${OS}" = "FreeBSD" ]; then +# cp ${CWD}/mailmanctl_freebsd ${INITDDIR}/mailmanctl +# chmod 755 ${INITDDIR}/mailmanctl +# elif [ -e /etc/debian_version ]; then +# cp ${CWD}/mailmanctl_debian ${INITDDIR}/mailmanctl +# chmod 755 ${INITDDIR}/mailmanctl +# update-rc.d mailmanctl defaults +# else +# cp ${CWD}/mailmanctl ${INITDDIR}/mailmanctl +# chmod 755 ${INITDDIR}/mailmanctl +# /sbin/chkconfig mailmanctl on +# fi +# fi +# +# # It's up to you how to use the file (DA should manage it) +# # if [ ${MM_CFG} -eq 0 ]; then +# # echo 'DEFAULT_EMAIL_HOST = \'mail.domain.com\'' >> ${MM_CFG} +# # echo 'DEFAULT_URL_HOST = \'www.domain.com\'' >> ${MM_CFG} +# # echo 'IMAGE_LOGOS = \'/mailman_images/\'' >> ${MM_CFG} +# # echo 'add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)' >> ${MM_CFG} +# # echo 'VIRTUAL_HOSTS = {\'www.example.com\': \'example.com\',' >> ${MM_CFG} +# # echo ' \'www.example2.com\': \'example2.com\'}' >> ${MM_CFG} +# # echo '#Syntax is {virt ":" real "," virt ":" real}' >> ${MM_CFG} +# # fi +# +# #Changes for suexec (fixing "error: directory is writable by others") +# chmod 755 /usr/local/mailman/cgi-bin +# chmod u-s,g-s /usr/local/mailman/cgi-bin/* +# chmod 777 /usr/local/mailman/logs +# chown -R mailman:mailman /usr/local/mailman +# +# RANDOM_PASS="`perl -le'print map+(A..Z,a..z,0..9)[rand 62],0..7'`" +# DA_HOSTNAME=${HOSTNAME} +# +# #Create a mailman list +# /usr/local/mailman/bin/newlist -q -e ${DA_HOSTNAME} mailman mailman@${DA_HOSTNAME} ${RANDOM_PASS} +# echo "Password of the mailman mailing list: ${RANDOM_PASS}" +# #Apply template to the sitelist +# /usr/local/mailman/bin/config_list -i /usr/local/mailman/data/sitelist.cfg mailman +# +# #Add mailman mailing list to /etc/aliases (required by mailman) +# COUNT_MAILMAN=`grep -c mailman /etc/aliases` +# if [ ${COUNT_MAILMAN} -eq 0 ]; then +# echo '## mailman mailing list' >> /etc/aliases +# echo 'mailman: "|/usr/local/mailman/mail/mailman post mailman"' >> /etc/aliases +# echo 'mailman-admin: "|/usr/local/mailman/mail/mailman admin mailman"' >> /etc/aliases +# echo 'mailman-bounces: "|/usr/local/mailman/mail/mailman bounces mailman"' >> /etc/aliases +# echo 'mailman-confirm: "|/usr/local/mailman/mail/mailman confirm mailman"' >> /etc/aliases +# echo 'mailman-join: "|/usr/local/mailman/mail/mailman join mailman"' >> /etc/aliases +# echo 'mailman-leave: "|/usr/local/mailman/mail/mailman leave mailman"' >> /etc/aliases +# echo 'mailman-owner: "|/usr/local/mailman/mail/mailman owner mailman"' >> /etc/aliases +# echo 'mailman-request: "|/usr/local/mailman/mail/mailman request mailman"' >> /etc/aliases +# echo 'mailman-subscribe: "|/usr/local/mailman/mail/mailman subscribe mailman"' >> /etc/aliases +# echo 'mailman-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe mailman"' >> /etc/aliases +# fi +# +## Needs an exception in DA binary to function, because the process is python, which is calling mailmanctl +## set_service mailmanctl ON +# +# echo "Restarting Exim." +# ${INITDDIR}/exim restart +# +# echo "Restarting Mailman." +# ${INITDDIR}/mailman restart +# +# echo "Done Mailman." +# +#} + +#################################################### + +doPhp() { + doPhp_build ${PHP1_RELEASE_OPT} ${PHP1_MODE_OPT} + if [ "${PHP2_RELEASE_OPT}" != "no" ]; then + doPhp_build ${PHP2_RELEASE_OPT} ${PHP2_MODE_OPT} + fi + if [ "${PHP3_RELEASE_OPT}" != "no" ]; then + doPhp_build ${PHP3_RELEASE_OPT} ${PHP3_MODE_OPT} + fi + if [ "${PHP4_RELEASE_OPT}" != "no" ]; then + doPhp_build ${PHP4_RELEASE_OPT} ${PHP4_MODE_OPT} + fi + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then + #Reload detached lsphp processes + touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt + fi + writeLog "PHP built" +} + +#################################################### + +doRemovePhp() { + if [ "$1" = "" ]; then + do_exit 1 "No arguments given (PHP release), exiting..." + fi + REMOVE_SHORTRELEASE=`echo $1 | tr -d '.'` + + if [ "${PHP1_RELEASE_OPT}" = "$1" ] || [ "${PHP2_RELEASE_OPT}" = "$1" ] || [ "${PHP3_RELEASE_OPT}" = "$1" ] || [ "${PHP4_RELEASE_OPT}" = "$1" ]; then + do_exit 1 "Cannot remove PHP $1, because you have it set in options.conf file." + fi + + if [ ! -d /usr/local/php${REMOVE_SHORTRELEASE} ]; then + do_exit 1 "/usr/local/php${REMOVE_SHORTRELEASE} does not exist, cannot remove..." + fi + + echo "Removing /usr/local/php${REMOVE_SHORTRELEASE}" + rm -rf /usr/local/php${REMOVE_SHORTRELEASE} + + remove_file /var/log/php-fpm${REMOVE_SHORTRELEASE}.log + + ldconfig + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + echo "PHP $1 has been successfully removed" + writeLog "PHP $1 removed" +} + +#################################################### +doFtpCleanup() { + if grep -q "^pure-ftpd" ${SERVICES} 2>/dev/null || grep -q "^proftpd" ${SERVICES} 2>/dev/null; then + return + fi + #Clean up FTP env + #Get out of here! We don't want any of this (wu-ftpd)! + if [ "${OS}" = "FreeBSD" ]; then + perl -pi -e 's/^ftp/#ftp/' /etc/inetd.conf + killall -HUP inetd + elif [ -s /etc/debian_version ]; then + dpkg -r --force-all gadmin-proftpd gforge-ftp-proftpd gproftpd proftpd-basic proftpd-doc proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-pgsql pure-ftpd pure-ftpd-common 2> /dev/null + dpkg -P gadmin-proftpd gforge-ftp-proftpd gproftpd proftpd-basic proftpd-doc proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-pgsql pure-ftpd pure-ftpd-common 2> /dev/null + else + rpm -e --nodeps wu-ftp 2> /dev/null + rpm -e --nodeps wu-ftpd 2> /dev/null + rpm -e --nodeps anonftp 2> /dev/null + rpm -e --nodeps pure-ftpd 2> /dev/null + rpm -e --nodeps vsftpd 2> /dev/null + rpm -e --nodeps psa-proftpd 2> /dev/null + rpm -e --nodeps psa-proftpd-xinetd 2> /dev/null + rpm -e --nodeps psa-proftpd-start 2> /dev/null + rm -f /etc/xinetd.d/proftpd + rm -f /etc/xinetd.d/wu-ftpd.rpmsave + rm -f /etc/xinetd.d/wu-ftpd + rm -f /etc/xinetd.d/ftp_psa + rm -f /etc/xinetd.d/gssftp + rm -f /etc/xinetd.d/xproftpd + fi + if [ -x /usr/local/sbin/pure-ftpd ]; then + if ! grep -q "^pure-ftpd" ${SERVICES} 2>/dev/null; then + killall -9 pure-ftpd 2> /dev/null > /dev/null + rm -f /usr/local/sbin/pure-ftpd 2> /dev/null > /dev/null + fi + fi + #while we're doing it, lets get rid of pop stuff too + rm -f /etc/xinetd.d/pop* + + #in case they it still holds port 21 + if [ -s /etc/init.d/xinetd ] && [ "${SYSTEMD}" = "no" ]; then + /sbin/service xinetd restart + fi + if [ -s /usr/lib/systemd/system/xinetd.service ] && [ "${SYSTEMD}" = "yes" ]; then + systemctl restart xinetd.service + fi +} +#################################################### + +doProftpd() { + if [ "${FTPD_OPT}" != "proftpd" ]; then + do_exit 1 "You cannot install ProFTPD, because you do not have it set in options.conf file." + fi + + doFtpCleanup + addUserGroup ftp ftp + addToAccess ftp + + getFile proftpd-${PROFTPD_VER}.tar.gz proftpd + getFile proftpd proftpd_boot + getFile proftpd_freebsd proftpd_boot_freebsd + getFile proftpd_debian proftpd_boot_debian + + quitIfLocked doProftpd + + # Setting a new temp dir (in case /tmp is noexec,nosuid) + if [ "${OS}" = "FreeBSD" ]; then + TDIR=/root/.pkg.tmp + mkdir -p $TDIR + setenv PKG_TMPDIR $TDIR + fi + cd ${CWD} + FILE=${CWD}/proftpd-${PROFTPD_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + chown -R root:${ROOT_GRP} proftpd-${PROFTPD_VER} + cd proftpd-${PROFTPD_VER} + + # Backup ProFTPD config + if [ -e /etc/proftpd.conf ]; then + cp -pf /etc/proftpd.conf /etc/proftpd.conf.old + fi + + cp -pf ${CWD}/${PROFTPD_CONF} /etc/proftpd.conf + + if [ -s /etc/proftpd.sftp.conf ] && ! grep -m1 -q '^Include /etc/proftpd.sftp.conf' /etc/proftpd.conf; then + echo 'Include /etc/proftpd.sftp.conf' >> /etc/proftpd.conf + elif [ ! -s /etc/proftpd.sftp.conf ] && grep -m1 -q '^Include /etc/proftpd.sftp.conf' /etc/proftpd.conf; then + sed -i '/^Include /etc/proftpd.sftp.conf/d' /etc/proftpd.conf + fi + + if [ -d /usr/local/directadmin/data/admin/ips ]; then + IP="`grep -r -l -m1 '^status=server$' /usr/local/directadmin/data/admin/ips | cut -d/ -f8`" + fi + if [ "${IP}" = "" ]; then + IP="`grep -im1 ${HOSTNAME} /etc/hosts | awk '{print $1}'`" + if [ "${IP}" = "" ]; then + echo "Unable to detect your server IP in /etc/hosts. Please enter it: " + read IP + fi + fi + if [ "${IP}" = "" ]; then + echo "Unable to detect your server IP. Exiting..." + do_exit 0 + fi + + if [ "`echo ${IP} | grep -m1 -c ':'`" -gt 0 ]; then + IP="[${IP}]" + fi + + echo "Using $IP for your server IP" + + if [ -e /etc/proftpd.conf ]; then + if [ "`grep -m1 -c '|IP|' /etc/proftpd.conf`" -gt "0" ]; then + STR="perl -pi -e 's/\|IP\|/$IP/' /etc/proftpd.conf" + eval ${STR} + fi + fi + + if [ -e /etc/proftpd.sftp.conf ]; then + if [ "`grep -m1 -c '|IP|' /etc/proftpd.sftp.conf`" -gt "0" ]; then + STR="perl -pi -e 's/\|IP\|/$IP/' /etc/proftpd.sftp.conf" + eval ${STR} + fi + fi + + #swap prefix for freebsd + if [ "$OS" = "FreeBSD" ]; then + perl -pi -e "s#prefix=/usr #prefix=$PROFTPD_PREFIX #" ${CWD}/${PROFTPD_CONFIGURE} + if grep -m1 -q 'enable-nls' ${CWD}/${PROFTPD_CONFIGURE}; then + perl -pi -e 's/enable-nls/disable-nls/' ${CWD}/${PROFTPD_CONFIGURE} + fi + fi + + echo "Configuring proftpd-${PROFTPD_VER}..." + ${CWD}/${PROFTPD_CONFIGURE} + + echo "Done. Making proftpd-${PROFTPD_VER}..." + while echo "Trying to make ProFTPD..."; do + if [ "${OS}" = "FreeBSD" ]; then + /usr/local/bin/gmake -j ${CPU_CORES} + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + + echo "Installing proftpd-${PROFTPD_VER}..." + if [ "${OS}" = "FreeBSD" ]; then + /usr/local/bin/gmake install + else + make install + fi + + if [ ! -e /etc/proftpd.passwd ]; then + touch /etc/proftpd.passwd + chmod 640 /etc/proftpd.passwd + fi + if [ ! -d /var/log/proftpd ]; then + mkdir -p /var/log/proftpd + fi + if [ ! -e /etc/proftpd.vhosts.conf ]; then + touch /etc/proftpd.vhosts.conf + fi + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/proftpd ]; then + echo "Removing ${INITDDIR}/proftpd..." + rm -f ${INITDDIR}/proftpd + fi + echo "Enabling proftpd in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/proftpd.service ]; then + cp -f ${CB_CUST_SYSTEMD}/proftpd.service ${SYSTEMDDIR}/proftpd.service + else + cp -f ${CB_SYSTEMD}/proftpd.service ${SYSTEMDDIR}/proftpd.service + fi + chmod 644 ${SYSTEMDDIR}/proftpd.service + if [ -e /etc/debian_version ]; then + perl -pi -e 's#/usr/bin/mkdir#/bin/mkdir#' ${SYSTEMDDIR}/proftpd.service + fi + systemctl daemon-reload + + if [ -e ${SYSTEMDDIR}/proftpd.service ]; then + systemctl enable proftpd.service + if [ -e ${SYSTEMDDIR}/pure-ftpd.service ]; then + systemctl stop pure-ftpd.service + systemctl disable pure-ftpd.service + rm -f ${SYSTEMDDIR}/pure-ftpd.service + if [ -e ${SYSTEMDDIR}/pure-certd.service ]; then + systemctl stop pure-certd.service + systemctl disable pure-certd.service + rm -f ${SYSTEMDDIR}/pure-certd.service + fi + if [ -e ${SYSTEMDDIR}/pure-uploadscript.service ]; then + systemctl stop pure-uploadscript.service + systemctl disable pure-uploadscript.service + rm -f ${SYSTEMDDIR}/pure-uploadscript.service + fi + systemctl daemon-reload + fi + fi + mkdir -p /run/proftpd + else + if [ ! -e ${INITDDIR}/proftpd ]; then + if [ "${OS}" = "FreeBSD" ]; then + cp ${CWD}/proftpd_freebsd ${INITDDIR}/proftpd + chmod 755 ${INITDDIR}/proftpd + elif [ -e /etc/debian_version ]; then + mkdir -p /var/run/proftpd + mkdir -p /var/lock/subsys + cp ${CWD}/proftpd_debian ${INITDDIR}/proftpd + chmod 755 ${INITDDIR}/proftpd + else + mkdir -p /var/run/proftpd + cp ${CWD}/proftpd ${INITDDIR}/proftpd + chmod 755 ${INITDDIR}/proftpd + fi + fi + + if [ -e ${INITDDIR}/proftpd ]; then + if [ "${OS}" = "FreeBSD" ]; then + if [ -e ${INITDDIR}/pure-ftpd ]; then + rm -f ${INITDDIR}/pure-ftpd + fi + elif [ -e /etc/debian_version ]; then + update-rc.d proftpd defaults + if [ -e ${INITDDIR}/pure-ftpd ]; then + update-rc.d -f pure-ftpd remove + fi + else + /sbin/chkconfig proftpd on + if [ -e ${INITDDIR}/pure-ftpd ]; then + /sbin/chkconfig pure-ftpd off + fi + fi + fi + fi + + killall -9 pure-ftpd >/dev/null 2>&1 + + echo "Done proftpd." + writeLog "Proftpd ${PROFTPD_VER} installed" + removeLockfile + + # Removing the temp dir + if [ "${OS}" = "FreeBSD" ]; then + rm -rf $TDIR + unsetenv PKG_TMPDIR + fi + + # Linking configs + rm -f /usr/local/etc/proftpd.conf + ln -sf /etc/proftpd.conf /usr/local/etc/proftpd.conf + + perl -pi -e 's/DisplayFirstChdir/DisplayChdir/' /etc/proftpd.conf + + #setup the directadmin.conf + setVal pureftp 0 ${DACONF_TEMPLATE_FILE} + setVal pureftp 0 ${DACONF_FILE} + + set_service pure-ftpd delete + set_service proftpd ON + + killall pure-ftpd >/dev/null 2>&1 + + if [ "${PROFTPD_UPLOADSCAN_OPT}" = "yes" ] && [ "${CLAMAV_OPT}" = "yes" ]; then + if [ ! -e /usr/local/bin/clamdscan ]; then + removeLockfile + doclamav + fi + if [ ! -e /usr/local/bin/clamdscan ]; then + do_exit 1 "Cannot enable upload scan in ProFTPd because there is no ClamAV (/usr/local/bin/clamdscan) on the system." + fi + echo "Enabling ProFTPd ClamAV module for upload scanning" + getFile mod_clamav.c mod_clamav_c + getFile mod_clamav.h mod_clamav_h + if ! grep -m1 -q '^Include /etc/proftpd.clamav.conf' /etc/proftpd.conf; then + perl -pi -e 's##\n\nInclude /etc/proftpd.clamav.conf#' /etc/proftpd.conf + fi + /usr/bin/prxs -c -i -d mod_clamav.c + echo -n '' > /etc/proftpd.clamav.conf + echo '' >> /etc/proftpd.clamav.conf + echo 'LoadModule mod_clamav.c' >> /etc/proftpd.clamav.conf + echo '' >> /etc/proftpd.clamav.conf + echo '' >> /etc/proftpd.clamav.conf + echo 'ClamAV on' >> /etc/proftpd.clamav.conf + echo 'ClamServer 127.0.0.1' >> /etc/proftpd.clamav.conf + echo 'ClamPort 3310' >> /etc/proftpd.clamav.conf + echo 'ClamMaxSize 5 Mb' >> /etc/proftpd.clamav.conf + echo '' >> /etc/proftpd.clamav.conf + else + echo '' > /etc/proftpd.clamav.conf + fi + + doSslConfigurationFtp + + if [ ! -e /etc/logrotate.d/proftpd ] && [ ${OS} != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/proftpd.logrotate -o /etc/logrotate.d/proftpd + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} + echo "Restarting ProFTPd." + control_service proftpd restart +} + +#################################################### + +doRemoveProftpd() { + if [ "${FTPD_OPT}" = "proftpd" ]; then + do_exit 1 "Cannot remove Pure-FTPd, because it is enabled in options.conf file." + fi + + echo "Disabling proftpd in services.status" + set_service proftpd delete + + control_service proftpd stop + + if [ -e ${INITDDIR}/proftpd ]; then + if [ -e /etc/debian_version ]; then + update-rc.d proftpd remove + elif [ "${OS}" != "FreeBSD" ]; then + /sbin/chkconfig proftpd off + fi + echo "Removing ${INITDDIR}/proftpd..." + rm -f ${INITDDIR}/proftpd + fi + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Disabling proftpd in systemd..." + + systemctl disable proftpd.service + rm -f ${SYSTEMDDIR}/proftpd.service + systemctl daemon-reload + fi + + remove_directory /etc/logrotate.d/proftpd + remove_directory /usr/include/proftpd + remove_directory /usr/log/proftpd + + + remove_file /usr/lib/pkgconfig/proftpd.pc + remove_file /usr/lib64/pkgconfig/proftpd.pc + + remove_file /etc/ftpusers + remove_file /etc/pam.d/proftpd + remove_file /etc/proftpd.conf + remove_file /usr/bin/ftpasswd + remove_file /usr/bin/ftpcount + remove_file /usr/bin/ftpdctl + remove_file /usr/bin/ftpmail + remove_file /usr/bin/ftpquota + remove_file /usr/bin/ftptop + remove_file /usr/bin/ftpwho + remove_file /usr/bin/prxs + remove_file /usr/share/man/man5/proftpd.conf.5 + remove_file /usr/share/man/man8/proftpd.8 + remove_file /usr/share/man/man8/proftpd.8.gz + remove_file /usr/share/locale/bg_BG/LC_MESSAGES/proftpd.mo + remove_file /usr/share/locale/en_US/LC_MESSAGES/proftpd.mo + remove_file /usr/share/locale/fr_FR/LC_MESSAGES/proftpd.mo + remove_file /usr/share/locale/it_IT/LC_MESSAGES/proftpd.mo + remove_file /usr/share/locale/ja_JP/LC_MESSAGES/proftpd.mo + remove_file /usr/share/locale/ko_KR/LC_MESSAGES/proftpd.mo + remove_file /usr/share/locale/ru_RU/LC_MESSAGES/proftpd.mo + remove_file /usr/share/locale/zh_CN/LC_MESSAGES/proftpd.mo + remove_file /usr/share/locale/zh_TW/LC_MESSAGES/proftpd.mo + remove_file /usr/local/etc/proftpd.conf + remove_file /usr/sbin/in.proftpd + remove_file /usr/sbin/proftpd + remove_file /usr/sbin/ftpscrub + remove_file /usr/sbin/ftpshut + remove_file /etc/proftpd.clamav.conf + remove_file /etc/proftpd.vhosts.conf + + ldconfig + + echo "ProFTPd has been successfully removed" + writeLog "Proftpd removed" + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi +} + +#################################################### + +doPureftpd() { + if [ "${FTPD_OPT}" != "pureftpd" ]; then + do_exit 1 "You cannot install Pure-FTPd, because you do not have it set in options.conf file." + fi + + doFtpCleanup + + addUserGroup ftp ftp + addToAccess ftp + + getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd + getFile pure-ftpd pure-ftpd_boot + getFile pure-ftpd_freebsd pure-ftpd_boot_freebsd + getFile pure-ftpd_debian pure-ftpd_boot_debian + getFile patches/pure-ftpd-logjam.patch pure-ftpd-logjam.patch + + quitIfLocked doPureftpd + + cd ${CWD} + FILE=${CWD}/pure-ftpd-${PUREFTPD_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + chown -R root:${ROOT_GRP} pure-ftpd-${PUREFTPD_VER} + cd pure-ftpd-${PUREFTPD_VER} + + patch -p0 < ../patches/pure-ftpd-logjam.patch + + perl -pi -e 's|/etc/ssl/private|/etc|g' ./src/ftpd.h + + # add --without-capabilities on LXC containers to fix "Unable to switch capabilities" + DISABLE_CAPABILITIES=false + if [ -e /proc/1/environ ]; then + if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then + DISABLE_CAPABILITIES=true + fi + fi + + if ${DISABLE_CAPABILITIES}; then + echo "Adding --without-capabilities, to solve \"Unable to switch capabilities\" on LXC containers..." + perl -pi -e 's|\./configure \\|./configure --without-capabilities \|g' ${CWD}/${PUREFTPD_CONFIGURE} + fi + echo "Configuring pure-ftpd-${PUREFTPD_VER}..." + ${CWD}/${PUREFTPD_CONFIGURE} + + echo "Done. Making pure-ftpd-${PUREFTPD_VER}..." + while echo "Trying to make Pure-FTPd..."; do + if [ "${OS}" = "FreeBSD" ]; then + /usr/local/bin/gmake -j ${CPU_CORES} + else + make -j ${CPU_CORES} + fi + + if [ $? -ne 0 ]; then + if [ ${USER_INPUT} -eq 1 ]; then + printf "\n*** The make has failed, would you like to try to make again? (y,n): \n" + read yesno + echo "" + else + if [ "${INPUT_VALUE}" != "y" ]; then + yesno=n + else + yesno=${INPUT_VALUE} + fi + fi + + if [ "${yesno}" = "n" ]; then + do_exit 1 + fi + else + break + fi + done + echo "Make complete" + + echo "Installing pure-ftpd-${PUREFTPD_VER}..." + make install + + if [ ! -e /etc/proftpd.passwd ]; then + touch /etc/proftpd.passwd + chmod 640 /etc/proftpd.passwd + fi + + if [ ! -e /etc/pure-ftpd.pem ] && [ "${WEBSERVER_OPT}" = "nginx" ]; then + if [ -e /etc/nginx/ssl.crt/server.crt.combined ] && [ -e /etc/nginx/ssl.key/server.key ]; then + cat /etc/nginx/ssl.key/server.key > /etc/pure-ftpd.pem + cat /etc/nginx/ssl.crt/server.crt.combined >> /etc/pure-ftpd.pem + fi + fi + + if [ ! -e /etc/pure-ftpd.pem ]; then + if [ -e /etc/httpd/conf/ssl.crt/server.crt ] && [ -e /etc/httpd/conf/ssl.key/server.key ]; then + cat /etc/httpd/conf/ssl.key/server.key > /etc/pure-ftpd.pem + cat /etc/httpd/conf/ssl.crt/server.crt >> /etc/pure-ftpd.pem + if [ -e /etc/httpd/conf/ssl.crt/server.ca ]; then + cat /etc/httpd/conf/ssl.crt/server.ca >> /etc/pure-ftpd.pem + fi + fi + fi + + if [ ! -e /etc/pure-ftpd.pem ]; then + if [ -e /etc/exim.cert ] && [ -e /etc/exim.key ]; then + cat /etc/exim.key > /etc/pure-ftpd.pem + cat /etc/exim.cert >> /etc/pure-ftpd.pem + fi + fi + + if grep -m1 -q -- "----------" /etc/pure-ftpd.pem; then + perl -pi -e 's|----------|-----\n-----|g' /etc/pure-ftpd.pem + fi + + if [ ! -s /etc/pure-ftpd-dhparams.pem ]; then + ensure_dhparam /etc/pure-ftpd-dhparams.pem + fi + + chmod 600 /etc/pure-ftpd-dhparams.pem + chmod 600 /etc/pure-ftpd.pem + + echo "Copying ${PUREFTPD_CONF} to /etc/pure-ftpd.conf..." + cp -f ${CWD}/${PUREFTPD_CONF} /etc/pure-ftpd.conf + + START_SCRIPT_UPLOADSCAN=1 + PATH_TO_UPLOADSCAN=/usr/local/bin/pureftpd_uploadscan.sh + + if [ "${PUREFTPD_UPLOADSCAN_OPT}" = "yes" ]; then + if [ ! -e /usr/local/bin/clamdscan ] && [ "${CLAMAV_OPT}" = "yes" ]; then + removeLockfile + doclamav + fi + if [ ! -e /usr/local/bin/clamdscan ] && [ "${CLAMAV_OPT}" = "yes" ]; then + do_exit 1 "Cannot enable upload scan in Pure-FTPd because there is no ClamAV (/usr/local/bin/clamdscan) on the system." + fi + echo "Enabling PureFTPd upload scanning script..." + cp -f ${PUREFTPD_UPLOADSCAN_SCRIPT} ${PATH_TO_UPLOADSCAN} + chmod 711 ${PATH_TO_UPLOADSCAN} + if [ "${SYSTEMD}" = "yes" ]; then + START_SCRIPT_UPLOADSCAN=1 + else + START_SCRIPT_UPLOADSCAN=`grep -m1 -c "${PATH_TO_UPLOADSCAN}" ${INITDDIR}/pure-ftpd` + fi + perl -pi -e 's|^CallUploadScript no|CallUploadScript yes|' /etc/pure-ftpd.conf + if [ "${SYSTEMD}" = "yes" ]; then + echo "Enabling pure-uploadscript in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/pure-uploadscript.service ]; then + cp -f ${CB_CUST_SYSTEMD}/pure-uploadscript.service ${SYSTEMDDIR}/pure-uploadscript.service + else + cp -f ${CB_SYSTEMD}/pure-uploadscript.service ${SYSTEMDDIR}/pure-uploadscript.service + fi + chmod 644 ${SYSTEMDDIR}/pure-uploadscript.service + systemctl daemon-reload + if [ -e ${SYSTEMDDIR}/pure-uploadscript.service ]; then + systemctl start pure-uploadscript.service + fi + fi + else + rm -f ${PATH_TO_UPLOADSCAN} + perl -pi -e 's|^CallUploadScript yes|CallUploadScript no|' /etc/pure-ftpd.conf + if [ "${SYSTEMD}" = "yes" ] && [ -e ${SYSTEMDDIR}/pure-uploadscript.service ]; then + echo "Disabling pure-uploadscript in systemd..." + systemctl stop pure-uploadscript.service + rm -f ${SYSTEMDDIR}/pure-uploadscript.service + systemctl daemon-reload + fi + fi + + START_SCRIPT_PURE_CERTD=1 + PATH_TO_PURE_CERTD=/usr/local/bin/pureftpd_sni.sh + + echo "Enabling pure-certd script for SNI certificates..." + if ! grep -m1 -q 'ExtCert /var/run/pure-certd.sock' /etc/pure-ftpd.conf; then + echo 'ExtCert /var/run/pure-certd.sock' >> /etc/pure-ftpd.conf + fi + cp -f ${PUREFTPD_PURE_CERTD_SCRIPT} ${PATH_TO_PURE_CERTD} + chmod 711 ${PATH_TO_PURE_CERTD} + if [ "${SYSTEMD}" = "yes" ]; then + START_SCRIPT_PURE_CERTD=1 + else + START_SCRIPT_PURE_CERTD=`grep -m1 -c "CERTD_SOCK" ${INITDDIR}/pure-ftpd` + fi + if [ "${SYSTEMD}" = "yes" ]; then + echo "Enabling pure-certd in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/pure-certd.service ]; then + cp -f ${CB_CUST_SYSTEMD}/pure-certd.service ${SYSTEMDDIR}/pure-certd.service + else + cp -f ${CB_SYSTEMD}/pure-certd.service ${SYSTEMDDIR}/pure-certd.service + fi + chmod 644 ${SYSTEMDDIR}/pure-certd.service + systemctl daemon-reload + if [ -e ${SYSTEMDDIR}/pure-certd.service ]; then + systemctl start pure-certd.service + fi + fi + + if [ "${SYSTEMD}" = "yes" ]; then + if [ -e ${INITDDIR}/pure-ftpd ]; then + echo "Removing ${INITDDIR}/pure-ftpd..." + rm -f ${INITDDIR}/pure-ftpd + fi + echo "Enabling pure-ftpd in systemd..." + if [ -e ${CB_CUST_SYSTEMD}/pure-ftpd.service ]; then + cp -f ${CB_CUST_SYSTEMD}/pure-ftpd.service ${SYSTEMDDIR}/pure-ftpd.service + else + cp -f ${CB_SYSTEMD}/pure-ftpd.service ${SYSTEMDDIR}/pure-ftpd.service + fi + chmod 644 ${SYSTEMDDIR}/pure-ftpd.service + + if [ "${PUREFTPD_UPLOADSCAN_OPT}" = "yes" ] && [ "${CLAMAV_OPT}" = "yes" ]; then + if ! grep -m1 -q '^After=pure-uploadscript.service' ${SYSTEMDDIR}/pure-ftpd.service; then + perl -pi -e 's|^After\=syslog.target|Requires=pure-uploadscript.service\nAfter=pure-uploadscript.service syslog.target|g' ${SYSTEMDDIR}/pure-ftpd.service + fi + else + perl -pi -e 's|^Requires\=pure-uploadscript.service\nAfter\=pure-uploadscript.service |After=|g' ${SYSTEMDDIR}/pure-ftpd.service + fi + + systemctl daemon-reload + + if [ -e ${SYSTEMDDIR}/pure-ftpd.service ]; then + systemctl enable pure-ftpd.service + if [ -e ${SYSTEMDDIR}/proftpd.service ]; then + systemctl stop proftpd.service + systemctl disable proftpd.service + rm -f ${SYSTEMDDIR}/proftpd.service + systemctl daemon-reload + fi + fi + else + if [ ! -e ${INITDDIR}/pure-ftpd ] || [ ${START_SCRIPT_UPLOADSCAN} -eq 0 ] || [ ${START_SCRIPT_PURE_CERTD} -eq 0 ]; then + if [ "${OS}" = "FreeBSD" ]; then + cp ${CWD}/pure-ftpd_freebsd ${INITDDIR}/pure-ftpd + chmod 755 ${INITDDIR}/pure-ftpd + elif [ -e /etc/debian_version ]; then + cp ${CWD}/pure-ftpd_debian ${INITDDIR}/pure-ftpd + chmod 755 ${INITDDIR}/pure-ftpd + else + cp ${CWD}/pure-ftpd ${INITDDIR}/pure-ftpd + chmod 755 ${INITDDIR}/pure-ftpd + fi + fi + + if [ -e ${INITDDIR}/pure-ftpd ]; then + if [ "${OS}" = "FreeBSD" ]; then + if [ -e ${INITDDIR}/proftpd ]; then + rm -f ${INITDDIR}/proftpd + fi + elif [ -e /etc/debian_version ]; then + update-rc.d pure-ftpd defaults + if [ -e ${INITDDIR}/proftpd ]; then + update-rc.d -f proftpd remove + fi + else + /sbin/chkconfig pure-ftpd on + if [ -e ${INITDDIR}/proftpd ]; then + /sbin/chkconfig proftpd off + fi + fi + fi + fi + + doSslConfigurationFtp + + killall -9 proftpd >/dev/null 2>&1 + + echo "Done pure-ftpd." + writeLog "Pure-ftpd ${PUREFTPD_VER} installed" + removeLockfile + + #setup the directadmin.conf + setVal pureftp 1 ${DACONF_TEMPLATE_FILE} + setVal pureftp 1 ${DACONF_FILE} + + killall proftpd >/dev/null 2>&1 + + doRestartDA + + set_service proftpd delete + set_service pure-ftpd ON + + killall proftpd >/dev/null 2>&1 + + pure-pw mkdb /etc/pureftpd.pdb -f /etc/proftpd.passwd + + if [ ! -e /etc/logrotate.d/pure-ftpd ] && [ ${OS} != "FreeBSD" ]; then + curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/pure-ftpd.logrotate -o /etc/logrotate.d/pure-ftpd + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} + echo "Restarting Pure-FTPd." + control_service pure-ftpd restart +} + +#################################################### + +doRemovePureftpd() { + if [ "${FTPD_OPT}" = "pureftpd" ]; then + do_exit 1 "Cannot remove Pure-FTPd, because it is enabled in options.conf file." + fi + + getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd + + quitIfLocked doRemovePureftpd + + echo "Disabling pure-ftpd in services.status" + set_service pure-ftpd delete + + cd ${CWD} + FILE=${CWD}/pure-ftpd-${PUREFTPD_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + chown -R root:${ROOT_GRP} pure-ftpd-${PUREFTPD_VER} + cd pure-ftpd-${PUREFTPD_VER} + + echo "Configuring pure-ftpd-${PUREFTPD_VER} for removal..." + ${CWD}/${PUREFTPD_CONFIGURE} + + echo "Done. Removing pure-ftpd-${PUREFTPD_VER}..." + make uninstall + + if [ -e /etc/pure-ftpd.pem ]; then + echo "Removing /etc/pure-ftpd.pem..." + rm -f /etc/pure-ftpd.pem + fi + + if [ -e /usr/local/bin/pureftpd_uploadscan.sh ]; then + echo "Removing /usr/local/bin/pureftpd_uploadscan.sh..." + rm -f /usr/local/bin/pureftpd_uploadscan.sh + fi + + control_service pure-ftpd stop + + if [ -e ${INITDDIR}/pure-ftpd ]; then + if [ -e /etc/debian_version ]; then + update-rc.d pure-ftpd remove + elif [ "${OS}" != "FreeBSD" ]; then + /sbin/chkconfig pure-ftpd off + fi + echo "Removing ${INITDDIR}/pure-ftpd..." + rm -f ${INITDDIR}/pure-ftpd + fi + + if [ "${SYSTEMD}" = "yes" ]; then + echo "Disabling pure-ftpd in systemd..." + + systemctl disable pure-ftpd.service + rm -f ${SYSTEMDDIR}/pure-ftpd.service + if [ -e ${SYSTEMDDIR}/pure-certd.service ]; then + systemctl stop pure-certd.service + systemctl disable pure-certd.service + rm -f ${SYSTEMDDIR}/pure-certd.service + fi + if [ -e ${SYSTEMDDIR}/pure-uploadscript.service ]; then + systemctl stop pure-uploadscript.service + systemctl disable pure-uploadscript.service + rm -f ${SYSTEMDDIR}/pure-uploadscript.service + fi + systemctl daemon-reload + + rm -f /usr/libexec/pureftpd_startscript + fi + + if [ -e /etc/pureftpd.pdb ]; then + echo "Removing pure-ftpd password database: /etc/pureftpd.pdb..." + rm -f /etc/pureftpd.pdb + fi + + if [ -e /etc/logrotate.d/pure-ftpd ]; then + echo "Removing /etc/logrotate.d/pure-ftpd..." + rm -f /etc/logrotate.d/pure-ftpd + fi + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} + + writeLog "Pure-ftpd removed" +} + +#################################################### + +doNoFtpd() { + echo "No ftpd server set. Adding basic ftp:ftp account setup." + addUserGroup ftp ftp + addToAccess ftp +} + +#################################################### + +doRemoveNghttp2() { + initHTTP2var + + if [ "${WEBSERVER_OPT}" = "apache" ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ] && [ "${HTTP2}" = "1" ]; then + do_exit 1 "Cannot remove Nghttp2, because it is enabled in options.conf file (Apache or Nginx_Apache is selected as a webserver)." + fi + + if [ "${CURL_OPT}" = "yes" ] && [ "${HTTP2}" = "1" ]; then + do_exit 1 "Cannot remove Nghttp2, because it is enabled in options.conf file (cURL is enabled)." + fi + + getFile nghttp2-${NGHTTP2_VER}.tar.gz nghttp2 + + quitIfLocked doRemoveNghttp2 + + cd ${CWD} + FILE=${CWD}/nghttp2-${NGHTTP2_VER}.tar.gz + checkFile ${FILE} + echo "Extracting ${FILE}..." + + tar xzf ${FILE} --no-same-owner + cd nghttp2-${NGHTTP2_VER} + + echo "Configuring nghttp2-${NGHTTP2_VER} for removal..." + ./configure + + echo "Done. Removing nghttp2-${NGHTTP2_VER}..." + make uninstall + + if ! ${EXEC_CL_COMMANDS_ONCE}; then + cagefsctl_update + else + CL_COMPONENT_UPDATE=true + fi + + cd ${CWD} + + writeLog "nghttp2 removed" +} + +#################################################### + +doUpdateDA() { + echo "${boldon}Updating DirectAdmin${boldoff}" + echo "action=update&value=program" >> ${TASK_QUEUE} + run_dataskq + + writeLog "DirectAdmin update requested" +} + +#################################################### + +doLetsEncrypt() { + if [ ! -x /usr/local/bin/lego ]; then + doLego + fi + cd ${CWD} + LETSENCRYPT_SH=/usr/local/directadmin/scripts/letsencrypt.sh + getFile all/letsencrypt/letsencrypt.sh.${LETSENCRYPT_VER} letsencrypt_sh letsencrypt.sh + mv -f ${CWD}/letsencrypt.sh ${LETSENCRYPT_SH} + chown diradmin:diradmin ${LETSENCRYPT_SH} + chmod 700 ${LETSENCRYPT_SH} + + echo "Let's encrypt client ${LETSENCRYPT_VER} has been installed." + + writeLog "Let's Encrypt client update requested" +} + +#################################################### + +doCPanelToDA() { + cd ${CWD} + CPANEL_TO_DA_DIR=/usr/local/directadmin/scripts/cpanel_to_da + CPANEL_TO_DA_SH=${CPANEL_TO_DA_DIR}/cpanel_to_da.sh + CPANEL_TO_DA_ROUNDCUBE=${CPANEL_TO_DA_DIR}/cpanel_da_roundcube.php + CPANEL_TO_DA_SQL_PARSER=${CPANEL_TO_DA_DIR}/php_sql_parser.tar.gz + CPANEL_SQLITE_TO_DA_ROUNDCUBE=${CPANEL_TO_DA_DIR}/cpanel_sqlite_da_roundcube.php + + if [ ! -d "${CPANEL_TO_DA_DIR}" ]; then + mkdir -p "${CPANEL_TO_DA_DIR}" + chmod 700 "${CPANEL_TO_DA_DIR}" + fi + + PHP_SQL_PARSER_VER=`getVer cpanel_php_sql_parser` + CPANEL_TO_DA_ROUNDCUBE_VER=`getVer cpanel_da_roundcube` + CPANEL_SQLITE_TO_DA_ROUNDCUBE_VER=`getVer cpanel_sqlite_da_roundcube` + + getFile all/cpanel-conversion/cpanel_to_da-${CPANEL_TO_DA_VER}.sh cpanel_to_da cpanel_to_da.sh + getFile all/cpanel-conversion/cpanel_da_roundcube-${CPANEL_TO_DA_ROUNDCUBE_VER}.php cpanel_da_roundcube cpanel_da_roundcube.php + getFile all/cpanel-conversion/cpanel_sqlite_da_roundcube-${CPANEL_SQLITE_TO_DA_ROUNDCUBE_VER}.php cpanel_sqlite_da_roundcube cpanel_sqlite_da_roundcube.php + getFile all/cpanel-conversion/php_sql_parser-${PHP_SQL_PARSER_VER}.tar.gz cpanel_php_sql_parser php_sql_parser.tar.gz + mv -f ${CWD}/cpanel_to_da.sh ${CPANEL_TO_DA_SH} + mv -f ${CWD}/cpanel_da_roundcube.php ${CPANEL_TO_DA_ROUNDCUBE} + mv -f ${CWD}/cpanel_sqlite_da_roundcube.php ${CPANEL_SQLITE_TO_DA_ROUNDCUBE} + mv -f ${CWD}/php_sql_parser.tar.gz ${CPANEL_TO_DA_SQL_PARSER} + chown diradmin:diradmin ${CPANEL_TO_DA_SH} ${CPANEL_TO_DA_ROUNDCUBE} + chmod 700 ${CPANEL_TO_DA_SH} ${CPANEL_TO_DA_ROUNDCUBE} + tar xzf ${CPANEL_TO_DA_SQL_PARSER} --no-same-owner -C ${CPANEL_TO_DA_DIR} + + echo "cPanel to DirectAdmin conversion script version ${CPANEL_TO_DA_VER} has been installed." + + writeLog "cPanel to DirectAdmin conversion script update requested" +} + +#################################################### + +exim_chunking_advertise_hosts_insecure() { + if [ ! -s /usr/sbin/exim ] || [ ! -s /etc/exim.conf ]; then + echo 0; + return; + fi + + EXIMV="`exim_version`" + if [ "`version_cmp ${EXIMV} 4.90 'exim_chunking_advertise_hosts_insecure'`" -ge 0 ]; then + echo 0; + return; + fi + + F= + if [ -s /etc/exim.conf ]; then + C=`grep -c chunking_advertise_hosts /etc/exim.conf` + if [ "$C" -gt 0 ]; then + F=/etc/exim.conf + fi + fi + if [ "${HAVE_CHUNKING_A_H}" = "0" ] && [ -s /etc/exim.variables.conf ]; then + C=`grep -c chunking_advertise_hosts /etc/exim.variables.conf` + if [ "$C" -gt 0 ]; then + F=/etc/exim.variables.conf + fi + fi + + if [ "${F}" = "" ]; then + echo "Cannot find 'chunking_advertise_hosts=' in your /etc/exim.conf nor your /etc/exim.variables.conf. Either update to exim 4.90, update the exim.conf, or add 'chunking_advertise_hosts=' to your exim.conf" + return; + fi + + #we have chunking_advertise_hosts. See if it's set correctly. + C=`grep chunking_advertise_hosts $F | grep -c '*'` + if [ "${C}" -eq 0 ]; then + echo 0 + return; + fi + + echo "chunking_advertise_hosts should be an empty value in $F, but is currently set to chunking_advertise_hosts=*" + return; +} + +#################################################### + +checkSecurity() { + + EMAIL_FTP_PASSWORD_CHANGE=`getDA_Opt email_ftp_password_change 1` + if [ "$EMAIL_FTP_PASSWORD_CHANGE" -gt 0 ] && [ $(is_os_eol) -eq 1 ]; then + DA_VERSION_IS_INSECURE=true + else + DA_VERSION_IS_INSECURE=false + fi + + EXIM_PL_IS_INSECURE=false + if [ -s /etc/exim.pl ]; then + C=`grep -c safe_name /etc/exim.pl` + if [ "$C" = "0" ]; then + EXIM_PL_IS_INSECURE=true + fi + fi + + EXIM_CHUNKING_IS_INSECURE=false + EXIM_CHUNKING_CHECK=`exim_chunking_advertise_hosts_insecure` + if [ "${EXIM_CHUNKING_CHECK}" != "0" ]; then + EXIM_CHUNKING_IS_INSECURE=true + fi + + MYSQL_IS_EOL=false + if [ -e /usr/bin/mysql ]; then + MYSQLV=`mysql_main` + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + MYSQL_NAME="MySQL" + else + MYSQL_NAME="MariaDB" + fi + if [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "10.0" ] || [ "${MYSQLV}" = "10.1" ]; then + MYSQL_IS_EOL=true + fi + fi + LIST_JSON_SECURITY=false + + if ${EXIM_PL_IS_INSECURE} || ${MYSQL_IS_EOL} || ${DA_VERSION_IS_INSECURE} || ${EXIM_CHUNKING_IS_INSECURE}; then + LIST_JSON_SECURITY=true + fi + + #0 update items + #1 show available updates + #2 just webapps N/A here. + #json similar to #1, but in json format. + VERSIONS=$1 + + if [ "${VERSIONS}" = "2" ]; then + return; + fi + + if [ "${VERSIONS}" = "0" ]; then + #found cases where bind9.service boot of named, and named.serivce both running, + #so bind9 instance never gets reloaded, so randomly serves stale data. + ensure_not_debian_bind9_boot; + fi + + if [ "${VERSIONS}" = "json" ] && ${LIST_JSON_SECURITY}; then + printf "\t\"security\": {\n" + fi + + SECURITY_ITEM_ADDED=0 + + #DA 1.52.0 - https://www.directadmin.com/features.php?id=2036 + if [ -x ${DA_BIN} ] && ${DA_VERSION_IS_INSECURE}; then + if [ "$EMAIL_FTP_PASSWORD_CHANGE" -gt 0 ] && [ $(is_os_eol) -eq 1 ]; then + if [ "${VERSIONS}" = "json" ]; then + if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then + echo "," + fi + SECURITY_ITEM_ADDED=1 + printf "\t\t\"DirectAdmin 2036\": {\n" + printf "\t\t\t\"name\": \"Security fix for E-Mail Password change\",\n" + printf "\t\t\t\"description\": \"Your version of DirectAdmin cannot be updated. Set email_ftp_password_change=0\",\n" + printf "\t\t\t\"url\": \"https://www.directadmin.com/features.php?id=2036\"\n" + printf "\t\t}" + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Security update is available.${boldoff}: Your version of DirectAdmin cannot be updated. Set email_ftp_password_change=0 in your directadmin.conf: https://www.directadmin.com/features.php?id=2036" + echo "" + elif [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Setting email_ftp_password_change=0 in the directadmin.conf.${boldoff}" + echo "" + setVal email_ftp_password_change 0 ${DACONF_TEMPLATE_FILE} + setVal email_ftp_password_change 0 ${DACONF_FILE} + if [ -s ${DACONF_FILE} ]; then + control_service directadmin restart + fi + fi + else + if [ "${VERSIONS}" = "json" ]; then + if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then + echo "," + fi + SECURITY_ITEM_ADDED=1 + printf "\t\t\"DirectAdmin 2036\": {\n" + printf "\t\t\t\"name\": \"Security fix for E-Mail Password change\",\n" + printf "\t\t\t\"description\": \"Update your DirectAdmin version to 1.52.0 or higher.\",\n" + printf "\t\t\t\"url\": \"https://www.directadmin.com/features.php?id=2036\"\n" + printf "\t\t}" + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Security update is available.${boldoff}: Update DirectAdmin to 1.52.0 or higher: https://www.directadmin.com/features.php?id=2036" + echo "" + elif [ "${VERSIONS}" = "0" ]; then + AUTO_UPDATE=1; + if [ -s /usr/local/directadmin/data/admin/admin.conf ]; then + C=`grep -c auto_update=no /usr/local/directadmin/data/admin/admin.conf` + if [ "${C}" -gt 0 ]; then + AUTO_UPDATE=0 + fi + fi + + DA_1520_UPDATE_CHECK=/root/.update_da_1520 + if [ -s ${DA_1520_UPDATE_CHECK} ] || [ "${AUTO_UPDATE}" = "0" ]; then + echo "${boldon}Security Issue${boldoff}: Update DirectAdmin to 1.52.0 was already attempted, but failed. Disabling email_ftp_password_change.${boldoff}" + echo "" + setVal email_ftp_password_change 0 ${DACONF_TEMPLATE_FILE} + setVal email_ftp_password_change 0 ${DACONF_FILE} + if [ -s ${DACONF_FILE} ]; then + control_service directadmin restart + fi + else + echo 1 > ${DA_1520_UPDATE_CHECK} + if [ -s ${DACONF_FILE} ]; then + doUpdateDA + else + #save it for later: + echo "${boldon}Updating DirectAdmin once install is complete.${boldoff}" + echo "action=update&value=program" >> ${TASK_QUEUE} + fi + fi + fi + fi + fi + + #exim.pl - https://forum.directadmin.com/showthread.php?t=55502 + if [ -s /etc/exim.pl ]; then + if ${EXIM_PL_IS_INSECURE}; then + if [ "${VERSIONS}" = "json" ]; then + if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then + echo "," + fi + SECURITY_ITEM_ADDED=1 + printf "\t\t\"DirectAdmin 55502\": {\n" + printf "\t\t\t\"name\": \"Security fix for exim.pl\",\n" + printf "\t\t\t\"description\": \"Update your exim.pl version for better filtering.\",\n" + printf "\t\t\t\"url\": \"https://forum.directadmin.com/showthread.php?t=55502\"\n" + printf "\t\t}" + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Security update is available.${boldoff}: Update your exim.pl version for better filtering: https://forum.directadmin.com/showthread.php?t=55502" + echo "" + elif [ "${VERSIONS}" = "0" ]; then + EPL_VER=`exim_pl_version` + if [ "${EPL_VER}" = "0" ] || [ "${EPL_VER}" = "" ]; then + echo "" + echo "${boldon}*** Unable to determine the ${EPL} version. Manual update required. ***${boldoff}" + echo "https://forum.directadmin.com/showthread.php?t=55502" + echo "" + elif [ "${EXIMCONF_OPT}" != "yes" ]; then + echo "" + echo "${boldon}*** Unable to update the exim.pl because of option eximconf=no. Manual update required. ***${boldoff}" + echo "https://forum.directadmin.com/showthread.php?t=55502" + echo "" + else + curl ${CURL_CONNECT_OPTIONS} -o /etc/exim.pl.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.pl.${EXIM_PL_VER} + if [ -s /etc/exim.pl.cb20 ]; then + EPL_BACK=/etc/exim.pl.${EPL_VER}.55502.backup + if [ ! -s ${EPL_BACK} ]; then + cp -f /etc/exim.pl ${EPL_BACK} + fi + mv -f /etc/exim.pl.cb20 /etc/exim.pl + chmod 755 /etc/exim.pl + control_service exim restart + else + rm -f /etc/exim.pl.cb20 + echo "${boldon}*** Download of /etc/exim.pl failed ***${boldoff}" + fi + fi + fi + + fi + fi + + #chunking_advertise_hosts exim < 4.90 + #https://lists.gt.net/exim/announce/108962 + #https://forum.directadmin.com/showthread.php?t=55603 + if ${EXIM_CHUNKING_IS_INSECURE}; then + #we eigher have /etc/exim.variables.conf, or we don't. + HAVE_CHUNKING_A_H=0 + F= + if [ -s /etc/exim.conf ]; then + C=`grep -c chunking_advertise_hosts /etc/exim.conf` + if [ "$C" -gt 0 ]; then + F=/etc/exim.conf + HAVE_CHUNKING_A_H=1 + fi + fi + if [ "${HAVE_CHUNKING_A_H}" = "0" ] && [ -s /etc/exim.variables.conf ]; then + C=`grep -c chunking_advertise_hosts /etc/exim.variables.conf` + if [ "$C" -gt 0 ]; then + F=/etc/exim.variables.conf + HAVE_CHUNKING_A_H=1 + fi + fi + + S= + if [ "${HAVE_CHUNKING_A_H}" = "0" ]; then + S="Cannot find 'chunking_advertise_hosts=' in your /etc/exim.conf nor your /etc/exim.variables.conf. Either update to exim 4.89.1, update the exim.conf, or add 'chunking_advertise_hosts=' to your exim.conf" + else + #we have it, but need to make sure it's correct. + C=`grep chunking_advertise_hosts $F | grep -c '*'` + if [ "${C}" -gt 0 ]; then + S="chunking_advertise_hosts should be an empty value in $F, but is currently set to chunking_advertise_hosts=*" + fi + fi + + EXIMV="`exim_version`" + if [ "`version_cmp ${EXIMV} 4.88 'exim 4.88 ver srs check to set chunking_advertise_hosts='`" -ge 0 ]; then + EXIM_SUPPORT_CHUNKING=1 + else + EXIM_SUPPORT_CHUNKING=0 + S="${S}. NOTE Only exim 4.88 and higher supports chunking_advertise_hosts. You have ${EXIMV}" + fi + + if [ "${S}" != "" ]; then + if [ "${VERSIONS}" = "json" ]; then + if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then + echo "," + fi + SECURITY_ITEM_ADDED=1 + printf "\t\t\"Exim 55603\": {\n" + printf "\t\t\t\"name\": \"Disable Chunking Security Vulnerability\",\n" + printf "\t\t\t\"description\": \"${S}\",\n" + printf "\t\t\t\"url\": \"https://forum.directadmin.com/showthread.php?t=55603\"\n" + printf "\t\t}" + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Security update is available.${boldoff}: ${S}: https://forum.directadmin.com/showthread.php?t=55603" + echo "" + elif [ "${VERSIONS}" = "0" ]; then + if [ "${EXIMCONF_OPT}" != "yes" ]; then + echo "" + echo "${boldon}*** Unable to set 'chunking_advertise_hosts=' to set because of option eximconf=no. Manual fix required. ***${boldoff}" + echo "https://forum.directadmin.com/showthread.php?t=55603" + echo "" + else + if [ "${HAVE_CHUNKING_A_H}" = "0" ]; then + if [ "${EXIM_SUPPORT_CHUNKING}" = "0" ]; then + echo "Exim version ${EXIMV} does not support chunking_advertise_hosts= so you must update the exim version."; + elif [ -s /etc/exim.variables.conf ]; then + echo "chunking_advertise_hosts=" >> /etc/exim.variables.conf + else + perl -pi -e 's/^message_body_visible/chunking_advertise_hosts=\nmessage_body_visible/' /etc/exim.conf + fi + else + #we have it, but it's wrong. Swap * with blank value in $F. + B=$F.pre_55603_chunking_advertise_hosts_fix + if [ ! -e $B ]; then + /bin/cp -f $F $B + fi + + perl -pi -e 's/chunking_advertise_hosts[ \t]*=[ \t]*\*/chunking_advertise_hosts=/' ${F} + fi + fi + fi + fi + fi + + if ${MYSQL_IS_EOL}; then + if [ "${VERSIONS}" = "json" ]; then + if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then + echo "," + fi + SECURITY_ITEM_ADDED=1 + printf "\t\t\"${MYSQL_NAME} EOL\": {\n" + printf "\t\t\t\"name\": \"${MYSQL_NAME} is EOL\",\n" + printf "\t\t\t\"description\": \"${MYSQL_NAME} version on the system is end of life, please upgrade\",\n" + printf "\t\t\t\"url\": \"https://endoflife.software/applications/databases\"\n" + printf "\t\t}" + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Security update is available.${boldoff}: ${MYSQL_NAME}: https://endoflife.software/applications/databases" + echo "" + fi + fi + + if [ "${VERSIONS}" = "json" ] && ${LIST_JSON_SECURITY}; then + printf "\n\t},\n" + fi + +} + +#################################################### + +ensure_not_debian_bind9_boot() { + if [ "${SYSTEMD}" != "yes" ]; then + return; + fi + + if [ ! -e /etc/debian_version ]; then + return; + fi + + if [ ! -e /lib/systemd/system/bind9.service ] || [ ! -e /etc/systemd/system/named.service ]; then + return; + fi + + if [ -h /lib/systemd/system/bind9.service ]; then + return; + fi + + if [ ! -s ${SERVICES} ]; then + return; + fi + + NAMED_ON=`grep -c 'named=ON' ${SERVICES}` + if [ "${NAMED_ON}" != "1" ]; then + return + fi + + B9ON=`systemctl is-enabled bind9.service` + if [ "${B9ON}" != "enabled" ]; then + return; + fi + + NAMEDON=`systemctl is-enabled named.service` + if [ "${NAMEDON}" != "enabled" ]; then + return; + fi + + #only applies if named was already running as we don't want to start it up later, if it was never supposed to be running. + NAMED_COUNT=`ps ax | grep -v grep | grep -c named` + if [ "${NAMED_COUNT}" = "0" ]; then + return; + fi + + echo "${boldon}Both bind9.service and named.service are enabled. This could lead to random stale dns data being serviced. Disabling bind9.service${boldoff}" + writeLog "disabling bind9 as both it and named were enabled." + + control_service bind9 stop + control_service named stop + killall -9 named + sleep 1 + systemctl disable bind9.service + control_service named start + sleep 1 + NAMED_COUNT=`ps ax | grep -v grep | grep -c named` + + SUBJECT="bind9.service disabled, named.service still enabled" + MESSAGE="CustomBuild has noticed both bind9.service and named.service were enabled.%0AThis could lead to bind9 serving stale data as it is never reloaded.%0AThe bind9.service boot script has been disabled, and named.service has been left as it was.%0ACustomBuild does see a new named process, you can likely disregard this message." + + if [ "${NAMED_COUNT}" = "0" ]; then + #double check that. + sleep 5; + NAMED_COUNT=`ps ax | grep -v grep | grep -c named` + if [ "${NAMED_COUNT}" = "0" ]; then + #yikes, its broken. + SUBJECT="bind9.service has been disabled but there is an issue with named starting up." + MESSAGE="CustomBuild has noticed both bind9.service and named.service were enabled.%0AThis could lead to bind9 serving stale data as it is never reloaded.%0AThe bind9.service boot script has been disabled, and named.service has been left as it was.%0AHowever CustomBuild does not see a new named process, so investigation of /var/log/messages might be need if it's not running." + fi + fi + + echo "action=notify&value=admin&subject=${SUBJECT}&message=${MESSAGE}" >> /usr/local/directadmin/data/task.queue +} + +#################################################### + +doVersions() { + cd ${CWD} + + if [ "$2" = "full" ]; then + if [ ${OS} = "FreeBSD" ]; then + pkg upgrade -y + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get update + apt-get -y upgrade + else + yum -y update + fi + doUpdate + fi + + VERSIONS=$1 + + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${VERSIONS}" = "2" ]; then + #Skip executing CL commands like "cagefsctl --force update" on every component update + EXEC_CL_COMMANDS_ONCE=true + fi + + WEBAPPS_UPDATED=false + + if [ "${VERSIONS}" = "1" ]; then + if [ -s ${VERSIONS_FILE_CUSTOM} ]; then + echo -n "${boldon}NOTE${boldoff}: Some custom versions are set in ${VERSIONS_FILE_CUSTOM}, this may prevent showing the actual latest version of the software: " + cat ${VERSIONS_FILE_CUSTOM} | cut -d: -f1,2 | perl -p0 -e 's|:| (|g' | perl -p0 -e 's|\n|), |g' | perl -p0 -e 's|, $||g' + echo "" + echo "" + fi + fi + + if [ "${VERSIONS}" = "json" ]; then + echo "{" + fi + + if [ $(is_os_eol) -eq 0 ] && [ -e ${DA_BIN} ] && [ "${DIRECTADMIN_VER}" != "0" ]; then + DOWNGRADE_CASE=false + UPDATE_DATA=`curl -s -k -L $(/usr/local/directadmin/directadmin --root-auth-url)/CMD_LICENSE?json=yes 2>/dev/null | perl -ne 'print if /"(update_available|latest_commit_sha|commit_sha|version|current_version)":[^,]*/'` + + if [ ! -z "${UPDATE_DATA}" ]; then + DIRECTADMIN_UPDATE_AVAIL="`echo "${UPDATE_DATA}" | grep '"update_available"' | cut -d'"' -f4`" + DIRECTADMIN_UPDATE_LATEST_SHA="`echo "${UPDATE_DATA}" | grep '"latest_commit_sha"' | cut -d'"' -f4`" + DIRECTADMIN_UPDATE_SHA="`echo "${UPDATE_DATA}" | grep '"commit_sha"' | cut -d'"' -f4`" + DIRECTADMIN_UPDATE_VER="`echo "${UPDATE_DATA}" | grep '"version"' | cut -d'"' -f4`" + DIRECTADMIN_UPDATE_CURRENT_VER="`echo "${UPDATE_DATA}" | grep '"current_version"' | cut -d'"' -f4`" + else + DIRECTADMIN_UPDATE_AVAIL="0" + DIRECTADMIN_UPDATE_LATEST_SHA="0" + DIRECTADMIN_UPDATE_SHA="0" + DIRECTADMIN_UPDATE_VER="0" + DIRECTADMIN_UPDATE_CURRENT_VER="0" + fi + + if [ -z "${DIRECTADMIN_UPDATE_LATEST_SHA}" ]; then + DIRECTADMIN_UPDATE_LATEST_SHA="0" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of DirectAdmin: ${DIRECTADMIN_UPDATE_VER} build ${DIRECTADMIN_UPDATE_LATEST_SHA}" + echo "Installed version of DirectAdmin: ${DIRECTADMIN_UPDATE_CURRENT_VER} build ${DIRECTADMIN_UPDATE_SHA}" + echo "" + fi + if [ "${DIRECTADMIN_UPDATE_AVAIL}" = "1" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "3" ]; then + doUpdateDA + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}DirectAdmin ${DIRECTADMIN_UPDATE_VER} build ${DIRECTADMIN_UPDATE_SHA} to ${DIRECTADMIN_UPDATE_CURRENT_VER} build ${DIRECTADMIN_UPDATE_LATEST_SHA} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"update_da\": {\n" + printf "\t\t\"name\": \"DirectAdmin\",\n" + printf "\t\t\"current\": \"${DIRECTADMIN_UPDATE_VER} build ${DIRECTADMIN_UPDATE_SHA}\",\n" + printf "\t\t\"offered\": \"${DIRECTADMIN_UPDATE_CURRENT_VER} build ${DIRECTADMIN_UPDATE_LATEST_SHA}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + LETSENCRYPT=`getDA_Opt letsencrypt 1` + if [ "${LETSENCRYPT}" -ge 1 ] && [ -e /usr/local/directadmin/scripts/letsencrypt.sh ]; then + if grep -q -m1 'VERSION=' /usr/local/directadmin/scripts/letsencrypt.sh; then + LETSENCRYPTV="`grep -m1 'VERSION=' /usr/local/directadmin/scripts/letsencrypt.sh | cut -d'=' -f2`" + else + LETSENCRYPTV="0" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of LetsEncrypt: ${LETSENCRYPT_VER}" + echo "Installed version of LetsEncrypt: ${LETSENCRYPTV}" + echo "" + fi + if [ "${LETSENCRYPT_VER}" != "${LETSENCRYPTV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating LetsEncrypt${boldoff}" + doLetsEncrypt + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}LetsEncrypt ${LETSENCRYPTV} to ${LETSENCRYPT_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"letsencrypt\": {\n" + printf "\t\t\"name\": \"LetsEncrypt\",\n" + printf "\t\t\"current\": \"${LETSENCRYPTV}\",\n" + printf "\t\t\"offered\": \"${LETSENCRYPT_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -e /usr/local/directadmin/scripts/cpanel_to_da/cpanel_to_da.sh ]; then + if grep -q -m1 'VERSION=' /usr/local/directadmin/scripts/cpanel_to_da/cpanel_to_da.sh; then + CPANEL_TO_DAV="`grep -m1 'VERSION=' /usr/local/directadmin/scripts/cpanel_to_da/cpanel_to_da.sh | cut -d'=' -f2`" + else + CPANEL_TO_DAV="0" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of cPanel to DirectAdmin conversion script: ${CPANEL_TO_DA_VER}" + echo "Installed version of cPanel to DirectAdmin conversion script: ${CPANEL_TO_DAV}" + echo "" + fi + if [ "${CPANEL_TO_DA_VER}" != "${CPANEL_TO_DAV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating cPanel to DirectAdmin conversion script${boldoff}" + doCPanelToDA + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}cPanel to DirectAdmin conversion script ${CPANEL_TO_DAV} to ${CPANEL_TO_DA_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"cpanel_to_da\": {\n" + printf "\t\t\"name\": \"cPanel to DirectAdmin conversion script\",\n" + printf "\t\t\"current\": \"${CPANEL_TO_DAV}\",\n" + printf "\t\t\"offered\": \"${CPANEL_TO_DA_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -x /usr/bin/bwrap ] && [ "${CLOUDLINUX_OPT}" != "yes" ]; then + BUBBLEWRAPV="`/usr/bin/bwrap --version | awk '{print $2}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Bubblewrap: ${BUBBLEWRAP_VER}" + echo "Installed version of Bubblewrap: ${BUBBLEWRAPV}" + echo "" + fi + if [ "${BUBBLEWRAP_VER}" != "${BUBBLEWRAPV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Bubblewrap${boldoff}" + doBubblewrap + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Bubblewrap ${BUBBLEWRAPV} to ${BUBBLEWRAP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"bubblewrap\": {\n" + printf "\t\t\"name\": \"Bubblewrap\",\n" + printf "\t\t\"current\": \"${BUBBLEWRAPV}\",\n" + printf "\t\t\"offered\": \"${BUBBLEWRAP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + + if [ -s /usr/bin/jailshell ]; then + if grep -q -m1 'VERSION=' /usr/bin/jailshell; then + JAILSHELL_SHV="`grep -m1 'VERSION=' /usr/bin/jailshell | cut -d'=' -f2`" + else + JAILSHELL_SHV="0" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Jailshell: ${JAILSHELL_SH_VER}" + echo "Installed version of Jailshell: ${JAILSHELL_SHV}" + echo "" + fi + if [ "${JAILSHELL_SH_VER}" != "${JAILSHELL_SHV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating Jailshell${boldoff}" + doJailshell + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Jailshell ${JAILSHELL_SHV} to ${JAILSHELL_SH_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"jailshell\": {\n" + printf "\t\t\"name\": \"Jailshell\",\n" + printf "\t\t\"current\": \"${JAILSHELL_SHV}\",\n" + printf "\t\t\"offered\": \"${JAILSHELL_SH_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${CUSTOMBUILD_PLUGIN_OPT}" = "yes" ]; then + if [ -s /usr/local/directadmin/plugins/custombuild/plugin.conf ]; then + CB_PLUGINV="`grep '^version=' /usr/local/directadmin/plugins/custombuild/plugin.conf | cut -d= -f2`" + else + CB_PLUGINV=0 + fi + if [ -s /usr/local/directadmin/plugins/custombuild/available_version.txt ]; then + CB_PLUGIN_VER="`cat /usr/local/directadmin/plugins/custombuild/available_version.txt`" + else + CB_PLUGIN_VER=`curl -s ${WEBPATH}/plugin/version.html | head -n1` + if ! echo "${CB_PLUGIN_VER}" | grep -m1 -q '^[0-9]\.'; then + CB_PLUGIN_VER=0 + fi + fi + DOWNGRADE_CASE=false + if [ "`version_cmp ${CB_PLUGIN_VER} $CB_PLUGINV`" -lt 0 ]; then + DOWNGRADE_CASE=true + fi + if ! ${DOWNGRADE_CASE}; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of CustomBuild plugin: ${CB_PLUGIN_VER}" + echo "Installed version of CustomBuild plugin: ${CB_PLUGINV}" + echo "" + fi + if [ "${CB_PLUGIN_VER}" != "${CB_PLUGINV}" ] && [ "${CB_PLUGINV}" != "0" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating CustomBuild plugin${boldoff}" + doCustombuildPlugin + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}CustomBuild plugin ${CB_PLUGINV} to ${CB_PLUGIN_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"custombuild_plugin\": {\n" + printf "\t\t\"name\": \"CustomBuild plugin\",\n" + printf "\t\t\"current\": \"${CB_PLUGINV}\",\n" + printf "\t\t\"offered\": \"${CB_PLUGIN_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${WEBSERVER_OPT}" = "litespeed" ] && [ "${LITESPEED_VER}" != "0" ]; then + if [ -e /usr/local/lsws/bin/lshttpd ]; then + LITESPEEDV="`/usr/local/lsws/bin/lshttpd -v | cut -d/ -f2 | awk '{print $1}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of LiteSpeed: ${LITESPEED_VER}" + echo "Installed version of LiteSpeed: ${LITESPEEDV}" + echo "" + fi + if [ "${LITESPEED_VER}" != "${LITESPEEDV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating LiteSpeed${boldoff}" + doLiteSpeed + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}LiteSpeed ${LITESPEEDV} to ${LITESPEED_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"litespeed\": {\n" + printf "\t\t\"name\": \"LiteSpeed\",\n" + printf "\t\t\"current\": \"${LITESPEEDV}\",\n" + printf "\t\t\"offered\": \"${LITESPEED_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${WEBSERVER_OPT}" = "openlitespeed" ] && [ "${OPENLITESPEED_VER}" != "0" ]; then + if [ -e /usr/local/lsws/bin/lshttpd ]; then + OPENLITESPEEDV="`/usr/local/lsws/bin/lshttpd -v | head -n1 | cut -d/ -f2 | awk '{print $1}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of OpenLiteSpeed: ${OPENLITESPEED_VER}" + echo "Installed version of OpenLiteSpeed: ${OPENLITESPEEDV}" + echo "" + fi + if [ "${OPENLITESPEED_VER}" != "${OPENLITESPEEDV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating OpenLiteSpeed${boldoff}" + doOpenLiteSpeed + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}OpenLiteSpeed ${OPENLITESPEEDV} to ${OPENLITESPEED_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"openlitespeed\": {\n" + printf "\t\t\"name\": \"OpenLiteSpeed\",\n" + printf "\t\t\"current\": \"${OPENLITESPEEDV}\",\n" + printf "\t\t\"offered\": \"${OPENLITESPEED_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + + if [ "${APACHE2_VER}" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -e /usr/sbin/httpd ]; then + APACHEV="`/usr/sbin/httpd -v | grep -m1 'Server version:' | awk '{ print $3 }' | cut -d/ -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Apache: ${APACHE2_VER}" + echo "Installed version of Apache: ${APACHEV}" + echo "" + fi + if [ "${APACHE2_VER}" != "${APACHEV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Apache${boldoff}" + doApache2 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Apache ${APACHEV} to ${APACHE2_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"apache\": {\n" + printf "\t\t\"name\": \"Apache\",\n" + printf "\t\t\"current\": \"${APACHEV}\",\n" + printf "\t\t\"offered\": \"${APACHE2_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + fi + + NGINX_UPDATE_AVAILABLE=0 + if [ "${NGINX_VER}" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -e /usr/sbin/nginx ]; then + NGINXV="`/usr/sbin/nginx -v 2>&1 | grep -m1 'nginx version:' | cut -d'/' -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Nginx: ${NGINX_VER}" + echo "Installed version of Nginx: ${NGINXV}" + echo "" + fi + if [ "${NGINX_VER}" != "${NGINXV}" ]; then + NGINX_UPDATE_AVAILABLE=1 + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Nginx${boldoff}" + doNginx + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Nginx ${NGINXV} to ${NGINX_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"nginx\": {\n" + printf "\t\t\"name\": \"Nginx\",\n" + printf "\t\t\"current\": \"${NGINXV}\",\n" + printf "\t\t\"offered\": \"${NGINX_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + fi + + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "owasp" ] && [ "${OWASP_RULES_VER}" != "0" ]; then + OWASP_RULESV=0 + if [ -e /etc/modsecurity.d/owasp_rules_version ]; then + OWASP_RULESV=`cat /etc/modsecurity.d/owasp_rules_version` + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of OWASP ModSecurity Rule Set: ${OWASP_RULES_VER}" + echo "Installed version of OWASP ModSecurity Rule Set: ${OWASP_RULESV}" + echo "" + fi + if [ "${OWASP_RULES_VER}" != "${OWASP_RULESV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating OWASP ModSecurity Rule Set${boldoff}" + doModSecurityRules + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}OWASP ModSecurity Rule Set ${OWASP_RULESV} to ${OWASP_RULES_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"modsecurity_rules\": {\n" + printf "\t\t\"name\": \"OWASP ModSecurity Rule Set\",\n" + printf "\t\t\"current\": \"${OWASP_RULESV}\",\n" + printf "\t\t\"offered\": \"${OWASP_RULES_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -s /usr/local/include/maxminddb.h ]; then + LIBMAXMINDDBV="`grep -m1 'PACKAGE_VERSION' /usr/local/include/maxminddb.h | cut -d\\\" -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of libmaxminddb: ${LIBMAXMINDDB_VER}" + echo "Installed version of libmaxminddb: ${LIBMAXMINDDBV}" + echo "" + fi + if [ "${LIBMAXMINDDB_VER}" != "${LIBMAXMINDDBV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating libmaxminddb${boldoff}" + dolibmaxminddb + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}libmaxminddb ${LIBMAXMINDDBV} to ${LIBMAXMINDDB_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"libmaxminddb\": {\n" + printf "\t\t\"name\": \"libmaxminddb\",\n" + printf "\t\t\"current\": \"${LIBMAXMINDDBV}\",\n" + printf "\t\t\"offered\": \"${LIBMAXMINDDB_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -x /usr/local/bin/geoipupdate ]; then + GEOIPUPDATEV="`/usr/local/bin/geoipupdate -V | awk '{print $2}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of geoipupdate: ${GEOIPUPDATE_VER}" + echo "Installed version of geoipupdate: ${GEOIPUPDATEV}" + echo "" + fi + if [ "${GEOIPUPDATE_VER}" != "${GEOIPUPDATEV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating geoipupdate${boldoff}" + doGeoipupdate + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}geoipupdate ${GEOIPUPDATEV} to ${GEOIPUPDATE_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"geoipupdate\": {\n" + printf "\t\t\"name\": \"geoipupdate\",\n" + printf "\t\t\"current\": \"${GEOIPUPDATEV}\",\n" + printf "\t\t\"offered\": \"${GEOIPUPDATE_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + CURRENT_CWAF_RULES_VER=${CWAF_RULES_LS_VER} + elif [ "${WEBSERVER_OPT}" = "apache" ]; then + CURRENT_CWAF_RULES_VER=${CWAF_RULES_VER} + else + CURRENT_CWAF_RULES_VER=${CWAF_RULES_NGINX_VER} + fi + if [ "${CURRENT_CWAF_RULES_VER}" != "0" ]; then + CWAF_RULESV=0 + if [ -e /usr/local/cwaf/rules/rules.dat ]; then + CWAF_RULESV=`cat /usr/local/cwaf/rules/rules.dat` + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Comodo ModSecurity Rule Set: ${CURRENT_CWAF_RULES_VER}" + echo "Installed version of Comodo ModSecurity Rule Set: ${CWAF_RULESV}" + echo "" + fi + if [ "${CURRENT_CWAF_RULES_VER}" != "${CWAF_RULESV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Comodo ModSecurity Rule Set${boldoff}" + doModSecurityRules + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Comodo ModSecurity Rule Set ${CWAF_RULESV} to ${CURRENT_CWAF_RULES_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"modsecurity_rules\": {\n" + printf "\t\t\"name\": \"Comodo ModSecurity Rule Set\",\n" + printf "\t\t\"current\": \"${CWAF_RULESV}\",\n" + printf "\t\t\"offered\": \"${CURRENT_CWAF_RULES_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${FTPD_OPT}" = "proftpd" ] && [ "${PROFTPD_VER}" != "0" ]; then + if [ -e $PROFTPD_PREFIX/sbin/proftpd ]; then + PROFTPDV="`$PROFTPD_PREFIX/sbin/proftpd -v 2>&1 | awk '{ print $3 }'`" + if [ "$PROFTPDV" = "Version" ]; then + PROFTPDV="`$PROFTPD_PREFIX/sbin/proftpd -v 2>&1 | awk '{ print $4 }'`" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ProFTPD: ${PROFTPD_VER}" + echo "Installed version of ProFTPD: ${PROFTPDV}" + echo "" + fi + if [ "${PROFTPD_VER}" != "${PROFTPDV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating ProFTPD${boldoff}" + doProftpd + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}ProFTPD ${PROFTPDV} to ${PROFTPD_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"proftpd\": {\n" + printf "\t\t\"name\": \"ProFTPd\",\n" + printf "\t\t\"current\": \"${PROFTPDV}\",\n" + printf "\t\t\"offered\": \"${PROFTPD_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${FTPD_OPT}" = "pureftpd" ] && [ "${PUREFTPD_VER}" != "0" ]; then + if [ -e /usr/sbin/pure-ftpd ]; then + PUREFTPDV="`/usr/sbin/pure-ftpd -h | grep -m1 pure-ftpd | awk '{print $2}' | cut -dv -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Pure-FTPD: ${PUREFTPD_VER}" + echo "Installed version of Pure-FTPd: ${PUREFTPDV}" + echo "" + fi + if [ "${PUREFTPD_VER}" != "${PUREFTPDV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Pure-FTPd${boldoff}" + doPureftpd + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Pure-FTPD ${PUREFTPDV} to ${PUREFTPD_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"pureftpd\": {\n" + printf "\t\t\"name\": \"Pure-FTPd\",\n" + printf "\t\t\"current\": \"${PUREFTPDV}\",\n" + printf "\t\t\"offered\": \"${PUREFTPD_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${REDIS_OPT}" = "yes" ]; then + REDISV=0 + if [ -x /usr/local/bin/redis-server ]; then + REDISV="`/usr/local/bin/redis-server -v | grep -o -m1 'v=[^ ]*' | cut -d= -f2`" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Redis: ${REDIS_VER}" + echo "Installed version of Redis: ${REDISV}" + echo "" + fi + if [ "${REDIS_VER}" != "${REDISV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Redis${boldoff}" + doRedis + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Redis ${REDISV} to ${REDIS_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"redis\": {\n" + printf "\t\t\"name\": \"Redis\",\n" + printf "\t\t\"current\": \"${REDISV}\",\n" + printf "\t\t\"offered\": \"${REDIS_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${IMAGICK_OPT}" = "yes" ] && [ "${IMAGEMAGICK_VER}" != "0" ]; then + IMAGEMAGICKV=0 + if [ -x /usr/local/bin/magick ]; then + IMAGEMAGICKV="`/usr/local/bin/magick -version | head -n1 | awk '{print $3}'`" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ImageMagick: ${IMAGEMAGICK_VER}" + echo "Installed version of ImageMagick: ${IMAGEMAGICKV}" + echo "" + fi + if [ "${IMAGEMAGICK_VER}" != "${IMAGEMAGICKV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating ImageMagick${boldoff}" + doImageMagick + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}ImageMagick ${IMAGEMAGICKV} to ${IMAGEMAGICK_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"imagemagick\": {\n" + printf "\t\t\"name\": \"ImageMagick\",\n" + printf "\t\t\"current\": \"${IMAGEMAGICKV}\",\n" + printf "\t\t\"offered\": \"${IMAGEMAGICK_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${IMAGICK_OPT}" = "yes" ] && [ "${IMAGICK_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then + IMAGICKV=0 + if /usr/local/bin/php -i | grep -m1 -q 'imagick module version'; then + IMAGICKV="`/usr/local/bin/php -i | grep -m1 'imagick module version' | awk '{print $5}'`" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of imagick: ${IMAGICK_VER}" + echo "Installed version of imagick: ${IMAGICKV}" + echo "" + fi + if [ "${IMAGICK_VER}" != "${IMAGICKV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating imagick${boldoff}" + doIMagick + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Imagick ${IMAGICKV} to ${IMAGICK_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"imagick\": {\n" + printf "\t\t\"name\": \"imagick\",\n" + printf "\t\t\"current\": \"${IMAGICKV}\",\n" + printf "\t\t\"offered\": \"${IMAGICK_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -s /usr/local/include/libpng16/png.h ] && [ "${PNG_VER}" != "0" ]; then + LIBPNGV="`grep -m1 'define PNG_LIBPNG_VER_STRING' /usr/local/include/libpng16/png.h | cut -d'\"' -f2 | cut -d'+' -f1`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of libpng: ${PNG_VER}" + echo "Installed version of libpng: ${LIBPNGV}" + echo "" + fi + if [ "${LIBPNGV}" != "${PNG_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating libpng${boldoff}" + doLibPng + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Libpng ${LIBPNGV} to ${PNG_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"libpng\": {\n" + printf "\t\t\"name\": \"Libpng\",\n" + printf "\t\t\"current\": \"${LIBPNGV}\",\n" + printf "\t\t\"offered\": \"${PNG_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -s /usr/local/include/nghttp2/nghttp2ver.h ] && [ "${NGHTTP2_VER}" != "0" ]; then + NGHTTP2V="`grep -m1 'define NGHTTP2_VERSION' /usr/local/include/nghttp2/nghttp2ver.h | cut -d'\"' -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of nghttp2: ${NGHTTP2_VER}" + echo "Installed version of nghttp2: ${NGHTTP2V}" + echo "" + fi + if [ "${NGHTTP2V}" != "${NGHTTP2_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating nghttp2${boldoff}" + doNghttp2 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Nghttp2 ${NGHTTP2V} to ${NGHTTP2_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"nghttp2\": {\n" + printf "\t\t\"name\": \"Nghttp2\",\n" + printf "\t\t\"current\": \"${NGHTTP2V}\",\n" + printf "\t\t\"offered\": \"${NGHTTP2_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then + if [ -s /usr/local/include/spf2/spf_lib_version.h ] && [ "${LIBSPF2_VER}" != "0" ]; then + SPF_LIB_VERSION_MAJOR="`grep -m1 'SPF_LIB_VERSION_MAJOR' /usr/local/include/spf2/spf_lib_version.h | awk '{print $3}'`" + SPF_LIB_VERSION_MINOR="`grep -m1 'SPF_LIB_VERSION_MINOR' /usr/local/include/spf2/spf_lib_version.h | awk '{print $3}'`" + SPF_LIB_VERSION_PATCH="`grep -m1 'SPF_LIB_VERSION_PATCH' /usr/local/include/spf2/spf_lib_version.h | awk '{print $3}'`" + LIBSPF2V="${SPF_LIB_VERSION_MAJOR}.${SPF_LIB_VERSION_MINOR}.${SPF_LIB_VERSION_PATCH}" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of libspf2: ${LIBSPF2_VER}" + echo "Installed version of libspf2: ${LIBSPF2V}" + echo "" + fi + if [ "${LIBSPF2V}" != "${LIBSPF2_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating libspf2${boldoff}" + doLibspf2 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Libspf2 ${LIBSPF2V} to ${LIBSPF2_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"libspf2\": {\n" + printf "\t\t\"name\": \"Libspf2\",\n" + printf "\t\t\"current\": \"${LIBSPF2V}\",\n" + printf "\t\t\"offered\": \"${LIBSPF2_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi +#When libsrs2 becomes supported in Exim, we could have it versioned +# if [ -s /usr/local/include/srs2.h ] && [ "${LIBSRS2_VER}" != "0" ]; then +# SRS_VERSION_MAJOR="`grep -m1 'SRS_VERSION_MAJOR' /usr/local/include/srs2.h | awk '{print $3}'`" +# SRS_VERSION_MINOR="`grep -m1 'SRS_VERSION_MINOR' /usr/local/include/srs2.h | awk '{print $3}'`" +# SRS_VERSION_PATCHLEVEL="`grep -m1 'SRS_VERSION_PATCHLEVEL' /usr/local/include/srs2.h | awk '{print $3}'`" +# LIBSRS2V="${SRS_VERSION_MAJOR}.${SRS_VERSION_MINOR}.${SRS_VERSION_PATCHLEVEL}" +# if [ "${VERSIONS}" = "1" ]; then +# echo "Latest version of libsrs2: ${LIBSRS2_VER}" +# echo "Installed version of libsrs2: ${LIBSRS2V}" +# echo "" +# fi +# if [ "${LIBSRS2V}" != "${LIBSRS2_VER}" ]; then +# if [ "${VERSIONS}" = "0" ]; then +# echo "${boldon}Updating libsrs2${boldoff}" +# doLibsrs2 +# elif [ "${VERSIONS}" = "1" ]; then +# echo "${boldon}Libsrs2 ${LIBSRS2V} to ${LIBSRS2_VER} update is available.${boldoff}" +# echo "" +# elif [ "${VERSIONS}" = "json" ]; then +# printf "\t\"libsrs2\": {\n" +# printf "\t\t\"name\": \"Libsrs2\",\n" +# printf "\t\t\"current\": \"${LIBSRS2V}\",\n" +# printf "\t\t\"offered\": \"${LIBSRS2_VER}\"\n" +# printf "\t},\n" +# fi +# fi +# fi + fi + + if [ "${WEBSERVER}" = "nginx" ] || [ "${WEBSERVER}" = "nginx_apache" ]; then + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${LIBMODSECURITY_VER}" != "0" ]; then + if [ -s /usr/local/modsecurity/lib/pkgconfig/modsecurity.pc ]; then + LIBMODSECURITYV=`grep 'Version: ' /usr/local/modsecurity/lib/pkgconfig/modsecurity.pc | awk '{print $2}'` + else + LIBMODSECURITYV=0 + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of LibModSecurity: ${LIBMODSECURITYV}" + echo "Installed version of LibModSecurity: ${LIBMODSECURITY_VER}" + echo "" + fi + if [ "${LIBMODSECURITYV}" != "${LIBMODSECURITY_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating LibModSecurity${boldoff}" + doLibModSecurity + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}LibModSecurity ${LIBMODSECURITYV} to ${LIBMODSECURITY_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"libmodsecurity\": {\n" + printf "\t\t\"name\": \"LibModSecurity\",\n" + printf "\t\t\"current\": \"${LIBMODSECURITYV}\",\n" + printf "\t\t\"offered\": \"${LIBMODSECURITY_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + + # Check ModSecurity connector version + if nginx -V 2>&1 | grep -q -o -m1 'modsecurity-nginx-v[^ ]*'; then + MODSECURITY_NGINX_CONNECTORV=`nginx -V 2>&1 | grep -o -m1 'modsecurity-nginx-v[^ ]*' | cut -d- -f3` + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ModSecurity Nginx Connector: ${MODSECURITY_NGINX_CONNECTORV}" + echo "Installed version of ModSecurity Nginx Connector: ${MODSECURITY_NGINX_CONNECTOR_VER}" + echo "" + fi + if [ "${MODSECURITY_NGINX_CONNECTORV}" != "${MODSECURITY_NGINX_CONNECTOR_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating ModSecurity Nginx Connector${boldoff}" + doModSecurityConnector 1 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}ModSecurity Nginx Connector ${MODSECURITY_NGINX_CONNECTORV} to ${MODSECURITY_NGINX_CONNECTOR_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"modsecurity_connector\": {\n" + printf "\t\t\"name\": \"ModSecurity Nginx Connector\",\n" + printf "\t\t\"current\": \"${MODSECURITY_NGINX_CONNECTORV}\",\n" + printf "\t\t\"offered\": \"${MODSECURITY_NGINX_CONNECTOR_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + fi + + if [ -x /usr/local/bin/wp ]; then + WPV="`/usr/local/bin/wp --version --allow-root | cut -d" " -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of WP-CLI: ${WP_VER}" + echo "Installed version of WP-CLI: ${WPV}" + echo "" + fi + if [ "${WP_VER}" != "${WPV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating WP-CLI${boldoff}" + doWP + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}WP-CLI ${WPV} to ${WP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"wp\": {\n" + printf "\t\t\"name\": \"wp-cli\",\n" + printf "\t\t\"current\": \"${WPV}\",\n" + printf "\t\t\"offered\": \"${WP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -x /usr/local/bin/imapsync ]; then + IMAPSYNCV="`/usr/local/bin/imapsync --version`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Imapsync: ${IMAPSYNC_VER}" + echo "Installed version of Imapsync: ${IMAPSYNCV}" + echo "" + fi + if [ "${IMAPSYNC_VER}" != "${IMAPSYNCV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Imapsync${boldoff}" + doImapsync + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Imapsync ${IMAPSYNCV} to ${IMAPSYNC_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"imapsync\": {\n" + printf "\t\t\"name\": \"Imapsync\",\n" + printf "\t\t\"current\": \"${IMAPSYNCV}\",\n" + printf "\t\t\"offered\": \"${IMAPSYNC_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -s ${STRINGS} ]; then + if [ -x /usr/local/bin/composer ]; then + COMPOSERV="`strings /usr/local/bin/composer | grep -m1 'const VERSION = ' | cut -d"'" -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of composer: ${COMPOSER_VER}" + echo "Installed version of composer: ${COMPOSERV}" + echo "" + fi + if [ "${COMPOSER_VER}" != "${COMPOSERV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating composer${boldoff}" + doComposer + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Composer ${COMPOSERV} to ${COMPOSER_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"composer\": {\n" + printf "\t\t\"name\": \"composer\",\n" + printf "\t\t\"current\": \"${COMPOSERV}\",\n" + printf "\t\t\"offered\": \"${COMPOSER_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ] && [ "${MOD_LSAPI_VER}" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -s /usr/lib/apache/mod_lsapi.so ]; then + MODLSAPIV="`${STRINGS} /usr/lib/apache/mod_lsapi.so | grep -m1 'version' | awk '{print $3}' | cut -d: -f1 | grep -o '.*[0-9][^a-z]'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of mod_lsapi: ${MOD_LSAPI_VER}" + echo "Installed version of mod_lsapi: ${MODLSAPIV}" + echo "" + fi + if [ "${MODLSAPIV}" != "${MOD_LSAPI_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating mod_lsapi${boldoff}" + doModLsapi 1 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}mod_lsapi ${MODLSAPIV} to ${MOD_LSAPI_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"mod_lsapi\": {\n" + printf "\t\t\"name\": \"mod_lsapi\",\n" + printf "\t\t\"current\": \"${MODLSAPIV}\",\n" + printf "\t\t\"offered\": \"${MOD_LSAPI_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${MOD_PROCTITLE_VER}" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -s /usr/lib/apache/mod_proctitle.so ]; then + MODPROCTITLEV="`${STRINGS} /usr/lib/apache/mod_proctitle.so | grep -m1 'version' | awk '{print $3}' | cut -d. -f1,2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of mod_proctitle: ${MODPROCTITLEV}" + echo "Installed version of mod_proctitle: ${MOD_PROCTITLE_VER}" + echo "" + fi + if [ "${MODPROCTITLEV}" != "${MOD_PROCTITLE_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating mod_proctitle${boldoff}" + doModProctitle 1 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}mod_proctitle ${MODPROCTITLEV} to ${MOD_PROCTITLE_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"mod_proctitle\": {\n" + printf "\t\t\"name\": \"mod_proctitle\",\n" + printf "\t\t\"current\": \"${MODPROCTITLEV}\",\n" + printf "\t\t\"offered\": \"${MOD_PROCTITLE_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + fi + + if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${MOD_HOSTINGLIMITS_VER}" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + if [ -s /usr/lib/apache/mod_hostinglimits.so ]; then + MODHOSTINGLIMITSV="`${STRINGS} /usr/lib/apache/mod_hostinglimits.so | grep -m1 'version' | awk '{print $3}' | cut -d. -f1,2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of mod_hostinglimits: ${MODHOSTINGLIMITSV}" + echo "Installed version of mod_hostinglimits: ${MOD_HOSTINGLIMITS_VER}" + echo "" + fi + if [ "${MODHOSTINGLIMITSV}" != "${MOD_HOSTINGLIMITS_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating mod_hostinglimits${boldoff}" + doModHostingLimits 1 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}mod_hostinglimits ${MODHOSTINGLIMITSV} to ${MOD_HOSTINGLIMITS_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"mod_hostinglimits\": {\n" + printf "\t\t\"name\": \"mod_hostinglimits\",\n" + printf "\t\t\"current\": \"${MODHOSTINGLIMITSV}\",\n" + printf "\t\t\"offered\": \"${MOD_HOSTINGLIMITS_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + fi + + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${WEBSERVER_OPT}" = "apache" ] && [ "${MODSECURITY_VER}" != "0" ]; then + if [ -s /usr/lib/apache/mod_security2.so ]; then + MODSECURITYV="`${STRINGS} /usr/lib/apache/mod_security2.so | grep -m1 'ModSecurity for Apache/' | cut -d/ -f2 | awk '{print $1}'`" + if ! ${STRINGS} /usr/lib/apache/mod_security2.so | grep -m1 -q 'libyajl'; then + MODSECURITYV="0" + fi + else + MODSECURITYV="0" + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ModSecurity: ${MODSECURITYV}" + echo "Installed version of ModSecurity: ${MODSECURITY_VER}" + echo "" + fi + if [ "${MODSECURITYV}" != "${MODSECURITY_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating ModSecurity${boldoff}" + doModSecurity + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}ModSecurity ${MODSECURITYV} to ${MODSECURITY_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"modsecurity\": {\n" + printf "\t\t\"name\": \"ModSecurity\",\n" + printf "\t\t\"current\": \"${MODSECURITYV}\",\n" + printf "\t\t\"offered\": \"${MODSECURITY_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${MOD_RUID2_OPT}" = "yes" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${MOD_RUID2_VER}" != "0" ]; then + if [ -s /usr/lib/apache/mod_ruid2.so ]; then + MODRUID2V="`${STRINGS} /usr/lib/apache/mod_ruid2.so | grep -m1 'mod_ruid2/' | awk '{print $1}' | cut -d/ -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of mod_ruid2: ${MOD_RUID2_VER}" + echo "Installed version of mod_ruid2: ${MODRUID2V}" + echo "" + fi + if [ "${MODRUID2V}" != "${MOD_RUID2_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating mod_ruid2${boldoff}" + doModRuid2 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}mod_ruid2 ${MODRUID2V} to ${MOD_RUID2_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"mod_ruid2\": {\n" + printf "\t\t\"name\": \"mod_ruid2\",\n" + printf "\t\t\"current\": \"${MODRUID2V}\",\n" + printf "\t\t\"offered\": \"${MOD_RUID2_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + fi + + if [ -e /usr/local/icu/include/unicode/uvernum.h ]; then + # Downgrade ICU to 58_2 on OS not supporting C++11 std + downgradeICUver + + ICU4CV="`echo ${ICU_VER} | tr '_' '.'`" + if [ "${ICU4CV}" != "0" ]; then + CURRENT_ICU4C="`grep -m1 'define U_ICU_VERSION ' /usr/local/icu/include/unicode/uvernum.h | cut -d'\"' -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ICU4C: ${ICU4CV}" + echo "Installed version of ICU4C: ${CURRENT_ICU4C}" + echo "" + fi + if [ "${ICU4CV}" != "${CURRENT_ICU4C}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating ICU4C${boldoff}" + doICU + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}ICU4C ${CURRENT_ICU4C} to ${ICU4CV} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"icu\": {\n" + printf "\t\t\"name\": \"icu4c\",\n" + printf "\t\t\"current\": \"${CURRENT_ICU4C}\",\n" + printf "\t\t\"offered\": \"${ICU4CV}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ -e /usr/local/include/sodium/version.h ] && [ "${LIBSODIUM_VER}" != "0" ]; then + LIBSODIUMV="`grep -m1 SODIUM_VERSION_STRING /usr/local/include/sodium/version.h | cut -d'\"' -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of libsodium: ${LIBSODIUM_VER}" + echo "Installed version of libsodium: ${LIBSODIUMV}" + echo "" + fi + if [ "${LIBSODIUM_VER}" != "${LIBSODIUMV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating libsodium${boldoff}" + doLibsodium + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}libsodium ${LIBSODIUMV} to ${LIBSODIUM_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"libsodium\": {\n" + printf "\t\t\"name\": \"libsodium\",\n" + printf "\t\t\"current\": \"${LIBSODIUMV}\",\n" + printf "\t\t\"offered\": \"${LIBSODIUM_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -e /usr/local/include/libxml2/libxml/xmlversion.h ] && [ "${LIBXML2_VER}" != "0" ]; then + LIBXML2V="`grep -m1 'define LIBXML_DOTTED_VERSION' /usr/local/include/libxml2/libxml/xmlversion.h | cut -d'\"' -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of libxml2: ${LIBXML2_VER}" + echo "Installed version of libxml2: ${LIBXML2V}" + echo "" + fi + if [ "${LIBXML2_VER}" != "${LIBXML2V}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating libxml2${boldoff}" + doLibxml2 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}libxml2 ${LIBXML2V} to ${LIBXML2_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"libxml2\": {\n" + printf "\t\t\"name\": \"libXML2\",\n" + printf "\t\t\"current\": \"${LIBXML2V}\",\n" + printf "\t\t\"offered\": \"${LIBXML2_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -e /usr/local/include/libxslt/xsltconfig.h ] && [ "${LIBXSLT_VER}" != "0" ]; then + LIBXSLTV="`grep -m1 'define LIBXSLT_DOTTED_VERSION' /usr/local/include/libxslt/xsltconfig.h | cut -d'\"' -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of libxslt: ${LIBXSLT_VER}" + echo "Installed version of libxslt: ${LIBXSLTV}" + echo "" + fi + if [ "${LIBXSLT_VER}" != "${LIBXSLTV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating libxslt${boldoff}" + doLibxslt + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}libxslt ${LIBXSLTV} to ${LIBXSLT_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"libxslt\": {\n" + printf "\t\t\"name\": \"libXSLT\",\n" + printf "\t\t\"current\": \"${LIBXSLTV}\",\n" + printf "\t\t\"offered\": \"${LIBXSLT_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -e /usr/local/bin/pigz ] && [ "${PIGZ_VER}" != "0" ]; then + #Zlib which is used for pigz only + if [ -e /usr/local/lib_da/include/zlib.h ] && [ "${ZLIB_VER}" != "0" ]; then + ZLIBV="`grep 'define ZLIB_VERSION' /usr/local/lib_da/include/zlib.h | cut -d'"' -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of zlib: ${ZLIB_VER}" + echo "Installed version of zlib: ${ZLIBV}" + echo "" + fi + if [ "${ZLIB_VER}" != "${ZLIBV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Zlib${boldoff}" + doZlib + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Zlib ${ZLIBV} to ${ZLIB_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"zlib\": {\n" + printf "\t\t\"name\": \"Zlib\",\n" + printf "\t\t\"current\": \"${ZLIBV}\",\n" + printf "\t\t\"offered\": \"${ZLIB_VER}\"\n" + printf "\t},\n" + fi + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + + #Pigz + PIGZV="`/usr/local/bin/pigz --version 2>&1 | awk '{print $2}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of pigz: ${PIGZ_VER}" + echo "Installed version of pigz: ${PIGZV}" + echo "" + fi + if [ "${PIGZ_VER}" != "${PIGZV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating pigz${boldoff}" + doPigz + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}pigz ${PIGZV} to ${PIGZ_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"pigz\": {\n" + printf "\t\t\"name\": \"pigz\",\n" + printf "\t\t\"current\": \"${PIGZV}\",\n" + printf "\t\t\"offered\": \"${PIGZ_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -e /usr/local/bin/pcre-config ] && [ "${PCRE_VER}" != "0" ]; then + PCREV="`/usr/local/bin/pcre-config --version`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PCRE: ${PCRE_VER}" + echo "Installed version of PCRE: ${PCREV}" + echo "" + fi + if [ "${PCRE_VER}" != "${PCREV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PCRE${boldoff}" + doPCRE + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PCRE ${PCREV} to ${PCRE_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"pcre\": {\n" + printf "\t\t\"name\": \"PCRE\",\n" + printf "\t\t\"current\": \"${PCREV}\",\n" + printf "\t\t\"offered\": \"${PCRE_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -e /usr/local/bin/pcre2-config ] && [ "${PCRE2_VER}" != "0" ]; then + PCRE2V="`/usr/local/bin/pcre2-config --version`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PCRE2: ${PCRE2_VER}" + echo "Installed version of PCRE2: ${PCRE2V}" + echo "" + fi + if [ "${PCRE2_VER}" != "${PCRE2V}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PCRE2${boldoff}" + doPCRE2 + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PCRE2 ${PCRE2V} to ${PCRE2_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"pcre2\": {\n" + printf "\t\t\"name\": \"PCRE2\",\n" + printf "\t\t\"current\": \"${PCRE2V}\",\n" + printf "\t\t\"offered\": \"${PCRE2_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${CURL_OPT}" = "yes" ] && [ -e /usr/local/bin/curl ]; then + if [ -e /usr/local/bin/curl ] && [ "${CURL_VER}" != "0" ]; then + CURLV="`/usr/local/bin/curl --version | grep -m1 'libcurl' | awk '{ print $2}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of curl: ${CURL_VER}" + echo "Installed version of curl: ${CURLV}" + echo "" + fi + if [ "${CURL_VER}" != "${CURLV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating cURL${boldoff}" + doCURL + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}cURL ${CURLV} to ${CURL_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"curl\": {\n" + printf "\t\t\"name\": \"cURL\",\n" + printf "\t\t\"current\": \"${CURLV}\",\n" + printf "\t\t\"offered\": \"${CURL_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ -e /usr/local/bin/freetype-config ] && [ "${FREETYPE_VER}" != "0" ]; then + FREETYPEV="`/usr/local/bin/freetype-config --ftversion`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of FreeType: ${FREETYPE_VER}" + echo "Installed version of FreeType: ${FREETYPEV}" + echo "" + fi + #if [ "${FREETYPE_VER}" != "${FREETYPEV}" ]; then + if [ "`version_cmp ${FREETYPE_VER} ${FREETYPEV} 'doVersions::freetype'`" != "0" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating FreeType${boldoff}" + doFreeType + echo "It is recommended to run \"$0 php n\" after FreeType update." + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}FreeType ${FREETYPEV} to ${FREETYPE_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"freetype\": {\n" + printf "\t\t\"name\": \"FreeType\",\n" + printf "\t\t\"current\": \"${FREETYPEV}\",\n" + printf "\t\t\"offered\": \"${FREETYPE_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${AWSTATS_OPT}" = "yes" ] && [ "${AWSTATS_VER}" != "0" ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of AWstats: ${AWSTATS_VER}" + fi + AWSTATSV=0 + if [ -e /usr/local/awstats ]; then + AWSTATSV="`ls -ld /usr/local/awstats | cut -d\> -f2 | cut -d- -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of AWstats: ${AWSTATSV}" + echo "" + fi + fi + + if [ "${AWSTATS_VER}" != "${AWSTATSV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating AWstats.${boldoff}" + doawstats + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}AWstats ${AWSTATSV} to ${AWSTATS_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"awstats\": {\n" + printf "\t\t\"name\": \"AWstats\",\n" + printf "\t\t\"current\": \"${AWSTATSV}\",\n" + printf "\t\t\"offered\": \"${AWSTATS_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + + if [ "${AWSTATS_PROCESS_VER}" != "0" ]; then + AWS_PROCESS_V=0 + AWS_PROCESS_SH=/usr/local/directadmin/scripts/awstats_process.sh + + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of awstats_process.sh: ${AWSTATS_PROCESS_VER}" + fi + + if [ -s "${AWS_PROCESS_SH}" ]; then + AWS_PROCESS_V=`grep ^VERSION= ${AWS_PROCESS_SH} | cut -d= -f2` + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of awstats_process.sh: ${AWS_PROCESS_V}" + echo "" + fi + fi + if [ "${AWSTATS_PROCESS_VER}" != "${AWS_PROCESS_V}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating awstats_process.sh.${boldoff}" + doawstats_process + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}awstats_process.sh ${AWS_PROCESS_V} to ${AWSTATS_PROCESS_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"awstats_process\": {\n" + printf "\t\t\"name\": \"awstats_process.sh\",\n" + printf "\t\t\"current\": \"${AWS_PROCESS_V}\",\n" + printf "\t\t\"offered\": \"${AWSTATS_PROCESS_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${DOVECOT_OPT}" = "yes" ] && [ "${DOVECOT_VER}" != "0" ]; then + if [ -e /usr/sbin/dovecot ]; then + DOVECOTV="`/usr/sbin/dovecot --version | cut -d\ -f1`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of dovecot: ${DOVECOT_VER}" + echo "Installed version of dovecot: ${DOVECOTV}" + echo "" + fi + if [ "${DOVECOT_VER}" != "${DOVECOTV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Dovecot${boldoff}" + doDovecot + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Dovecot ${DOVECOTV} to ${DOVECOT_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"dovecot\": {\n" + printf "\t\t\"name\": \"Dovecot\",\n" + printf "\t\t\"current\": \"${DOVECOTV}\",\n" + printf "\t\t\"offered\": \"${DOVECOT_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${DOVECOT_CONF_OPT}" = "yes" ]; then + COUNT=0 + if [ -e /etc/dovecot/dovecot.conf ]; then + COUNT=`head -n1 /etc/dovecot/dovecot.conf | grep -c '^#'` + fi + if [ "${COUNT}" -gt 0 ]; then + DOVECOT_CONFV="`head -n1 /etc/dovecot/dovecot.conf | cut -d'#' -f2`" + else + DOVECOT_CONFV=0 + fi + + if [ "${DOVECOT_CONFV}" = "" ]; then + DOVECOT_CONFV=0 + fi + + COUNT=0 + if [ -e ${DOVECTCONFFILE} ]; then + COUNT=`head -n1 ${DOVECTCONFFILE} | grep -c '^#'` + fi + if [ "${COUNT}" -gt 0 ]; then + DOVECOT_CONF_VER="`head -n1 ${DOVECTCONFFILE} | cut -d'#' -f2`" + else + DOVECOT_CONF_VER=0 + fi + + if [ "${DOVECOT_CONF_VER}" != "0" ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of dovecot.conf: ${DOVECOT_CONF_VER}" + echo "Installed version of dovecot.conf: ${DOVECOT_CONFV}" + echo "" + fi + if [ "${DOVECOT_CONF_VER}" != "${DOVECOT_CONFV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating dovecot.conf${boldoff}" + doDovecotConf + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}dovecot.conf ${DOVECOT_CONFV} to ${DOVECOT_CONF_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"dovecot_conf\": {\n" + printf "\t\t\"name\": \"dovecot.conf\",\n" + printf "\t\t\"current\": \"${DOVECOT_CONFV}\",\n" + printf "\t\t\"offered\": \"${DOVECOT_CONF_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${EXIM_OPT}" = "yes" ] && [ "${EXIM_VER}" != "0" ]; then + if [ -e /usr/sbin/exim ]; then + EXIMV="`exim_version`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Exim: ${EXIM_VER}" + echo "Installed version of Exim: ${EXIMV}" + echo "" + fi + if [ "${EXIM_VER}" != "${EXIMV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Exim${boldoff}" + doExim + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Exim ${EXIMV} to ${EXIM_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"exim\": {\n" + printf "\t\t\"name\": \"Exim\",\n" + printf "\t\t\"current\": \"${EXIMV}\",\n" + printf "\t\t\"offered\": \"${EXIM_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ -x /usr/local/bin/lego ]; then + LEGOV="`/usr/local/bin/lego -v 2>/dev/null | awk '{print $3}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of lego: ${LEGO_VER}" + echo "Installed version of lego: ${LEGOV}" + echo "" + fi + if [ "${LEGO_VER}" != "${LEGOV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating lego${boldoff}" + doLego + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Lego ${LEGOV} to ${LEGO_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"lego\": {\n" + printf "\t\t\"name\": \"lego\",\n" + printf "\t\t\"current\": \"${LEGOV}\",\n" + printf "\t\t\"offered\": \"${LEGO_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -x /usr/local/bin/lua ]; then + LUAV="`/usr/local/bin/lua -v 2>/dev/null | awk '{print $2}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of lua: ${LUA_VER}" + echo "Installed version of lua: ${LUAV}" + echo "" + fi + if [ "${LUA_VER}" != "${LUAV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating lue${boldoff}" + doLua + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}lua ${LUAV} to ${LUA_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"lua\": {\n" + printf "\t\t\"name\": \"lua\",\n" + printf "\t\t\"current\": \"${LUAV}\",\n" + printf "\t\t\"offered\": \"${LUA_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -x /usr/local/bin/s-nail ]; then + SNAILV="`/usr/local/bin/s-nail -V 2>/dev/null | awk '{print $2}' | grep -m1 -o '[0-9][^,]*'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of s-nail: ${S_NAIL_VER}" + echo "Installed version of s-nail: ${SNAILV}" + echo "" + fi + if [ "${S_NAIL_VER}" != "${SNAILV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating s-nail${boldoff}" + doSnail + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}s-nail ${SNAILV} to ${S_NAIL_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"s-nail\": {\n" + printf "\t\t\"name\": \"s-nail\",\n" + printf "\t\t\"current\": \"${SNAILV}\",\n" + printf "\t\t\"offered\": \"${S_NAIL_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ -x /usr/local/bin/msmtp ]; then + MSMTPV="`/usr/local/bin/msmtp --version 2>/dev/null | head -n1 | grep -m1 -o '[0-9][^,]*'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of msmtp: ${MSMTP_VER}" + echo "Installed version of msmtp: ${MSMTPV}" + echo "" + fi + if [ "${MSMTP_VER}" != "${MSMTPV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating msmtp${boldoff}" + doMsmtp + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}msmtp ${MSMTPV} to ${MSMTP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"msmtp\": {\n" + printf "\t\t\"name\": \"msmtp\",\n" + printf "\t\t\"current\": \"${MSMTPV}\",\n" + printf "\t\t\"offered\": \"${MSMTP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${EXIMCONF_OPT}" = "yes" ] && [ "${EXIM_CONF_VER}" != "0" ]; then + EXIMCONFV=`exim_conf_version` + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of exim.conf: ${EXIM_CONF_VER}" + echo "Installed version of exim.conf: ${EXIMCONFV}" + echo "" + fi + if [ "${EXIM_CONF_VER}" != "${EXIMCONFV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating exim.conf${boldoff}" + doEximConf + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}exim.conf ${EXIMCONFV} to ${EXIM_CONF_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"exim_conf\": {\n" + printf "\t\t\"name\": \"exim.conf\",\n" + printf "\t\t\"current\": \"${EXIMCONFV}\",\n" + printf "\t\t\"offered\": \"${EXIM_CONF_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${EXIMCONF_OPT}" = "yes" ] && [ "${BLOCKCRACKING_OPT}" = "yes" ] && [ "${BLOCKCRACKING_VER}" != "0" ]; then + COUNT=0 + if [ -e /etc/exim.blockcracking/README.txt ]; then + COUNT=`head -n1 /etc/exim.blockcracking/README.txt | grep -c '^#'` + fi + if [ "${COUNT}" -gt 0 ]; then + BLOCKCRACKINGV="`head -n1 /etc/exim.blockcracking/README.txt | cut -d'#' -f2`" + else + BLOCKCRACKINGV=0 + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of BlockCracking: ${BLOCKCRACKING_VER}" + echo "Installed version of BlockCracking: ${BLOCKCRACKINGV}" + echo "" + fi + if [ "${BLOCKCRACKING_VER}" != "${BLOCKCRACKINGV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating BlockCracking${boldoff}" + doBlockCracking + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}BlockCracking ${BLOCKCRACKINGV} to ${BLOCKCRACKING_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"blockcracking\": {\n" + printf "\t\t\"name\": \"BlockCracking\",\n" + printf "\t\t\"current\": \"${BLOCKCRACKINGV}\",\n" + printf "\t\t\"offered\": \"${BLOCKCRACKING_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${EXIMCONF_OPT}" = "yes" ] && [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ] && [ "${EASY_SPAM_FIGHTER_VER}" != "0" ]; then + COUNT=0 + if [ -e /etc/exim.easy_spam_fighter/README.txt ]; then + COUNT=`head -n1 /etc/exim.easy_spam_fighter/README.txt | grep -c '^#'` + fi + if [ "${COUNT}" -gt 0 ]; then + EASY_SPAM_FIGHTERV="`head -n1 /etc/exim.easy_spam_fighter/README.txt | cut -d'#' -f2`" + else + EASY_SPAM_FIGHTERV=0 + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Easy Spam Fighter: ${EASY_SPAM_FIGHTER_VER}" + echo "Installed version of Easy Spam Fighter: ${EASY_SPAM_FIGHTERV}" + echo "" + fi + if [ "${EASY_SPAM_FIGHTER_VER}" != "${EASY_SPAM_FIGHTERV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Easy Spam Fighter${boldoff}" + doEasySpamFighter + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Easy Spam Fighter ${EASY_SPAM_FIGHTERV} to ${EASY_SPAM_FIGHTER_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"easy_spam_fighter\": {\n" + printf "\t\t\"name\": \"Easy Spam Fighter\",\n" + printf "\t\t\"current\": \"${EASY_SPAM_FIGHTERV}\",\n" + printf "\t\t\"offered\": \"${EASY_SPAM_FIGHTER_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${SPAMD_OPT}" = "spamassassin" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then + if [ -e /usr/bin/spamd ]; then + SPAMASSASSINV=`/usr/bin/spamd --version | grep -m1 'version' | awk '{print $4}'` + else + SPAMASSASSINV=0 + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of SpamAssassin: ${SPAMASSASSIN_VER}" + echo "Installed version of SpamAssassin: ${SPAMASSASSINV}" + echo "" + fi + if [ "${SPAMASSASSIN_VER}" != "${SPAMASSASSINV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating SpamAssassin.${boldoff}" + dospamassassin + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}SpamAssassin ${SPAMASSASSINV} to ${SPAMASSASSIN_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"spamassassin\": {\n" + printf "\t\t\"name\": \"SpamAssassin\",\n" + printf "\t\t\"current\": \"${SPAMASSASSINV}\",\n" + printf "\t\t\"offered\": \"${SPAMASSASSIN_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + if [ "${SPAMD_OPT}" = "rspamd" ]; then + if [ "${RSPAMD_VER}" != "0" ]; then + #rspamd_config + if [ "${RSPAMD_CONF_VER}" != "0" ]; then + RSD_CONF_V=`rspamd_conf_version` + + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Rspamd Config: ${RSPAMD_CONF_VER}" + echo "Installed version of Rspamd Config: ${RSD_CONF_V}" + echo "" + fi + if [ "${RSPAMD_CONF_VER}" != "${RSD_CONF_V}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Rspamd Config${boldoff}" + do_rspamd_conf + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Rspamd Config ${RSD_CONF_V} to ${RSPAMD_CONF_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"rspamd_conf\": {\n" + printf "\t\t\"name\": \"Rspamd Config\",\n" + printf "\t\t\"current\": \"${RSD_CONF_V}\",\n" + printf "\t\t\"offered\": \"${RSPAMD_CONF_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + fi + + if [ "${ZSTD_VER}" != "0" ] && [ -x /usr/local/bin/zstd ]; then + ZSTDV=`/usr/local/bin/zstd --version | grep -o 'v[0-9]*\.[0-9][^ ,]*' | cut -dv -f2` + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of zstd: ${ZSTD_VER}" + echo "Installed version of zstd: ${ZSTDV}" + echo "" + fi + if [ "${ZSTDV}" != "${ZSTD_VER}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating zstd.${boldoff}" + dozstd + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}zstd ${ZSTDV} to ${ZSTD_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"zstd\": {\n" + printf "\t\t\"name\": \"zstd\",\n" + printf "\t\t\"current\": \"${ZSTDV}\",\n" + printf "\t\t\"offered\": \"${ZSTD_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${CLAMAV_OPT}" = "yes" ] && [ "${CLAMAV_VER}" != "0" ]; then + CLAMAVV=0 + if [ -e /usr/local/sbin/clamd ]; then + CLAMAVV=`/usr/local/sbin/clamd --version | cut -d/ -f1 | awk '{print $2}'` + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ClamAV: ${CLAMAV_VER}" + echo "Installed version of ClamAV: ${CLAMAVV}" + echo "" + fi + if [ "${CLAMAV_VER}" != "${CLAMAVV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating ClamAV.${boldoff}" + doclamav + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}ClamAV ${CLAMAVV} to ${CLAMAV_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"clamav\": {\n" + printf "\t\t\"name\": \"ClamAV\",\n" + printf "\t\t\"current\": \"${CLAMAVV}\",\n" + printf "\t\t\"offered\": \"${CLAMAV_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + +# Mailman is not yet supported +# if [ "${MAILMAN_OPT}" = "yes" ]; then +# MAILMANV=0 +# if [ -e /usr/local/mailman/bin/version ]; then +# MAILMANV=`/usr/local/mailman/bin/version | awk '{print $4}'` +# fi +# if [ "${VERSIONS}" = "1" ]; then +# echo "Latest version of Mailman: ${MAILMAN_VER}" +# echo "Installed version of Mailman: ${MAILMANV}" +# echo "" +# fi +# if [ "${MAILMAN_VER}" != "${MAILMANV}" ]; then +# if [ "${VERSIONS}" = "0" ]; then +# echo "${boldon}Updating Mailman.${boldoff}" +# domailman +# elif [ "${VERSIONS}" = "1" ]; then +# echo "${boldon}Mailman ${MAILMANV} to ${MAILMAN_VER} update is available.${boldoff}" +# echo "" +# fi +# fi +# fi + + if [ "${MYSQL_INST_OPT}" != "no" ] && [ -e $MYSQL_BIN ] && [ "${MYSQL_VER}" != "0" ] && [ "${MARIADB_VER}" != "0" ]; then + if [ "${MYSQL_INST_OPT}" = "mysql" ]; then + MYSQLV="`mysql_version`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ${MYSQLNAME}: ${MYSQL_VER}" + echo "Installed version of ${MYSQLNAME}: ${MYSQLV}" + echo "" + fi + if [ "${MYSQL_VER}" != "${MYSQLV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating ${MYSQLNAME}.${boldoff}" + doMySQL + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}${MYSQLNAME} ${MYSQLV} to ${MYSQL_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"mysql\": {\n" + printf "\t\t\"name\": \"${MYSQLNAME}\",\n" + printf "\t\t\"current\": \"${MYSQLV}\",\n" + printf "\t\t\"offered\": \"${MYSQL_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + else + MYSQLV="`$MYSQL_BIN --version | awk '{ print $5 }' | cut -d , -f1 | cut -d- -f1`" + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ${MYSQLNAME}: ${MARIADB_VER}" + echo "Installed version of ${MYSQLNAME}: ${MYSQLV}" + echo "" + fi + if [ "${MARIADB_VER}" != "${MYSQLV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating ${MYSQLNAME}.${boldoff}" + doMySQL + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}${MYSQLNAME} ${MYSQLV} to ${MARIADB_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"mysql\": {\n" + printf "\t\t\"name\": \"${MYSQLNAME}\",\n" + printf "\t\t\"current\": \"${MYSQLV}\",\n" + printf "\t\t\"offered\": \"${MARIADB_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + for php_release in `echo ${PHP1_RELEASE_SET}`; do + php_shortrelease="`echo ${php_release} | tr -d '.'`" + PHP_VER_VAR=PHP${php_shortrelease}_VER + PHP_VER=$(eval_var ${PHP_VER_VAR}) + HAVE_FPM_CGI_VAR=HAVE_FPM${php_shortrelease}_CGI + HAVE_SUPHP_CGI_VAR=HAVE_SUPHP${php_shortrelease}_CGI + HAVE_FCGID_VAR=HAVE_FCGID${php_shortrelease} + HAVE_LSPHP_VAR=HAVE_LSPHP${php_shortrelease} + HAVE_CLI_VAR=HAVE_CLI${php_shortrelease} + HAVE_FPM_CGI=$(eval_var ${HAVE_FPM_CGI_VAR}) + HAVE_SUPHP_CGI=$(eval_var ${HAVE_SUPHP_CGI_VAR}) + HAVE_FCGID=$(eval_var ${HAVE_FCGID_VAR}) + HAVE_LSPHP=$(eval_var ${HAVE_LSPHP_VAR}) + HAVE_CLI=$(eval_var ${HAVE_CLI_VAR}) + + if [ "${PHP_VER}" != "0" ]; then + if [ "${HAVE_FPM_CGI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ] || [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_LSPHP}" = "yes" ] || [ "${HAVE_CLI}" = "yes" ]; then + if [ -e /usr/local/php${php_shortrelease}/bin/php${php_shortrelease} ]; then + PHPV="`/usr/local/php${php_shortrelease}/bin/php${php_shortrelease} -v 2>&1 | grep -m1 'built' | awk '{ print $2 }'`" + elif [ -e /usr/local/bin/php ] && [ ! -L /usr/local/bin/php ]; then + PHPV="`/usr/local/bin/php -v 2>&1 | grep -m1 'built' | awk '{ print $2 }'`" + else + PHPV=0 + fi + if [ -z "${PHPV}" ]; then + PHPV=0 + fi + #Checks for general build-in PHP extensions, they have no updates, so, just let them appear after showing up + if [ -x /usr/local/php${php_shortrelease}/bin/php-config ]; then + EXTENSION_INT_EXT_DIR=`/usr/local/php${php_shortrelease}/bin/php-config --extension-dir` + #check php-imap + if [ "${PHP_IMAP_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/imap.so ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PHP-IMAP ${php_release}: ${PHP_VER}" + echo "Installed version of PHP-IMAP ${php_release}: 0" + echo "" + fi + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PHP-IMAP ${php_release}${boldoff}" + doPHPImap ${php_release} + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PHP-IMAP ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_imap ${php_release}\": {\n" + printf "\t\t\"name\": \"PHP-IMAP ${php_release}\",\n" + printf "\t\t\"current\": \"0\",\n" + printf "\t\t\"offered\": \"${PHP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + #check php-bz2 + if [ "${PHP_BZ2_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/bz2.so ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PHP-Bz2 ${php_release}: ${PHP_VER}" + echo "Installed version of PHP-Bz2 ${php_release}: 0" + echo "" + fi + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PHP-Bz2 ${php_release}${boldoff}" + doPHPBz2 ${php_release} + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PHP-Bz2 ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_bz2 ${php_release}\": {\n" + printf "\t\t\"name\": \"PHP-Bz2 ${php_release}\",\n" + printf "\t\t\"current\": \"0\",\n" + printf "\t\t\"offered\": \"${PHP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + #check php-xmlrpc + if [ "${PHP_XMLRPC_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/xmlrpc.so ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PHP-XMLRPC ${php_release}: ${PHP_VER}" + echo "Installed version of PHP-XMLRPC ${php_release}: 0" + echo "" + fi + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PHP-XMLRPC ${php_release}${boldoff}" + doPHPXmlrpc ${php_release} + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PHP-XMLRPC ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_xmlrpc ${php_release}\": {\n" + printf "\t\t\"name\": \"PHP-XMLRPC ${php_release}\",\n" + printf "\t\t\"current\": \"0\",\n" + printf "\t\t\"offered\": \"${PHP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + #check php-gmp + if [ "${PHP_GMP_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/gmp.so ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PHP-GMP ${php_release}: ${PHP_VER}" + echo "Installed version of PHP-GMP ${php_release}: 0" + echo "" + fi + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PHP-GMP ${php_release}${boldoff}" + doPHPGmp ${php_release} + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PHP-GMP ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_gmp ${php_release}\": {\n" + printf "\t\t\"name\": \"PHP-GMP ${php_release}\",\n" + printf "\t\t\"current\": \"0\",\n" + printf "\t\t\"offered\": \"${PHP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + #check php-readline + if [ "${PHP_READLINE_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/readline.so ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PHP-readline ${php_release}: ${PHP_VER}" + echo "Installed version of PHP-readline ${php_release}: 0" + echo "" + fi + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PHP-readline ${php_release}${boldoff}" + doPHPReadline ${php_release} + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PHP-readline ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_readline ${php_release}\": {\n" + printf "\t\t\"name\": \"PHP-readline ${php_release}\",\n" + printf "\t\t\"current\": \"0\",\n" + printf "\t\t\"offered\": \"${PHP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + #check php-ldap + if [ "${PHP_LDAP_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/ldap.so ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PHP-LDAP ${php_release}: ${PHP_VER}" + echo "Installed version of PHP-LDAP ${php_release}: 0" + echo "" + fi + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PHP-LDAP ${php_release}${boldoff}" + doPHPLDAP ${php_release} + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PHP-LDAP ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_ldap ${php_release}\": {\n" + printf "\t\t\"name\": \"PHP-LDAP ${php_release}\",\n" + printf "\t\t\"current\": \"0\",\n" + printf "\t\t\"offered\": \"${PHP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PHP ${php_release}: ${PHP_VER}" + echo "Installed version of PHP ${php_release}: ${PHPV}" + echo "" + fi + FPM_SECURITY_PATCH=false + if [ "${HAVE_FPM_CGI}" = "yes" ]; then + if [ "${php_release}" = "5.6" ] || [ "${php_release}" = "7.0" ] || [ "${php_release}" = "7.1" ] || [ "${php_release}" = "7.2" ]; then + if ! /usr/local/php${php_shortrelease}/bin/php${php_shortrelease} -i 2>&1 | grep -m1 -q 'PHP-FPM security patch'; then + FPM_SECURITY_PATCH=true + fi + fi + fi + if [ "${PHP_VER}" != "${PHPV}" ] || ${FPM_SECURITY_PATCH}; then + if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + BUILD_PHP_COMMAND="php_expert ${php_release} suphp" + elif [ "${HAVE_FPM_CGI}" = "yes" ]; then + BUILD_PHP_COMMAND="php_expert ${php_release} php-fpm" + elif [ "${HAVE_FCGID}" = "yes" ]; then + BUILD_PHP_COMMAND="php_expert ${php_release} fastcgi" + elif [ "${HAVE_LSPHP}" = "yes" ]; then + BUILD_PHP_COMMAND="php_expert ${php_release} lsphp" + elif [ "${HAVE_CLI}" = "yes" ]; then + BUILD_PHP_COMMAND="php_expert ${php_release} mod_php" + fi + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating PHP ${php_release}${boldoff}" + ./build ${BUILD_PHP_COMMAND} + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PHP ${php_release}: ${PHPV} to ${PHP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"${BUILD_PHP_COMMAND}\": {\n" + printf "\t\t\"name\": \"PHP ${php_release}\",\n" + printf "\t\t\"current\": \"${PHPV}\",\n" + printf "\t\t\"offered\": \"${PHP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + done + + if [ "${HAVE_SUPHP_CGI}" = "yes" ] && [ "${SUPHP_VER}" != "0" ]; then + if [ -e /usr/local/suphp/sbin/suphp ]; then + SUPHPV="`/usr/local/suphp/sbin/suphp 2>&1 | grep -m1 'suPHP version' | awk '{print $3}'`" + else + SUPHPV=0 + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of suPHP: ${SUPHP_VER}" + echo "Installed version of suPHP: ${SUPHPV}" + echo "" + fi + if [ "${SUPHP_VER}" != "${SUPHPV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating suPHP.${boldoff}" + doSuPhp + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}suPHP ${SUPHPV} to ${SUPHP_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"suphp\": {\n" + printf "\t\t\"name\": \"suPHP\",\n" + printf "\t\t\"current\": \"${SUPHPV}\",\n" + printf "\t\t\"offered\": \"${SUPHP_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${ROUNDCUBE_OPT}" = "yes" ] && [ "${ROUNDCUBE_VER}" != "0" ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of RoundCube: ${ROUNDCUBE_VER}" + fi + ROUNDCUBEV=0 + if [ -e ${WWWDIR}/roundcube ]; then + ROUNDCUBEV="`roundcube_version`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of RoundCube: ${ROUNDCUBEV}" + echo "" + fi + fi + if [ "${ROUNDCUBE_VER}" != "${ROUNDCUBEV}" ] && [ "${PHP1_RELEASE_OPT}" != "5.3" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating RoundCube.${boldoff}" + doroundcube + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}RoundCube ${ROUNDCUBEV} to ${ROUNDCUBE_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"roundcube\": {\n" + printf "\t\t\"name\": \"RoundCube\",\n" + printf "\t\t\"current\": \"${ROUNDCUBEV}\",\n" + printf "\t\t\"offered\": \"${ROUNDCUBE_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${UNIT_OPT}" = "yes" ] && [ "${UNIT_VER}" != "0" ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of Nginx Unit: ${UNIT_VER}" + fi + UNITV=0 + if [ -x /usr/sbin/unitd ]; then + UNITV="`/usr/sbin/unitd --version 2>&1 | grep '^unit version:' | awk '{print $3}'`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of Nginx Unit: ${UNITV}" + echo "" + fi + fi + + if [ "${UNIT_VER}" != "${UNITV}" ]; then + if [ "${VERSIONS}" = "0" ]; then + echo "${boldon}Updating Nginx Unit.${boldoff}" + doNginxUnit + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}AWstats ${UNITV} to ${UNIT_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"unit\": {\n" + printf "\t\t\"name\": \"Nginx Unit\",\n" + printf "\t\t\"current\": \"${UNITV}\",\n" + printf "\t\t\"offered\": \"${UNIT_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${PHPMYADMIN_OPT}" = "yes" ] && [ "${PHPMYADMIN_VER}" != "0" ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of phpMyAdmin: ${PHPMYADMIN_VER}" + fi + PHPMYADMINV=0 + if [ -e ${WWWDIR}/phpMyAdmin ]; then + PHPMYADMINV="`ls -ld ${WWWDIR}/phpMyAdmin | cut -d\> -f2 | cut -d- -f2,3,4`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of phpMyAdmin: ${PHPMYADMINV}" + echo "" + fi + fi + # phpMyAdmin does not support PHP 5.3 & PHP 5.4 anymore so there will be no updates available for them + if [ "${PHP1_RELEASE_OPT}" != "5.3" ] && [ "${PHP1_RELEASE_OPT}" != "5.4" ]; then + if [ "${PHPMYADMIN_VER}" != "${PHPMYADMINV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating phpMyAdmin.${boldoff}" + dophpMyAdmin + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}phpMyAdmin ${PHPMYADMINV} to ${PHPMYADMIN_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"phpmyadmin\": {\n" + printf "\t\t\"name\": \"phpMyAdmin\",\n" + printf "\t\t\"current\": \"${PHPMYADMINV}\",\n" + printf "\t\t\"offered\": \"${PHPMYADMIN_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + fi + + if [ "${PHP_IGBINARY_OPT}" = "yes" ] && [ "${IGBINARY_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of igbinary: ${IGBINARY_VER}" + fi + IGBIANRYV=0 + if /usr/local/bin/php -i | grep -m1 'igbinary version' | tail -n1 | grep -m1 -q -o '[0-9.]*' 2>/dev/null; then + IGBINARYV="`/usr/local/bin/php -i | grep -m1 'igbinary version' | tail -n1 | grep -m1 -o '[0-9.]*' 2>/dev/null`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of igbinary: ${IGBINARYV}" + echo "" + fi + fi + if [ "${IGBINARY_VER}" != "${IGBINARYV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating igbinary.${boldoff}" + doIgbinary + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Igbinary ${IGBINARYV} to ${IGBINARY_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_igbinary\": {\n" + printf "\t\t\"name\": \"Igbinary\",\n" + printf "\t\t\"current\": \"${IGBINARYV}\",\n" + printf "\t\t\"offered\": \"${IGBINARY_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${IONCUBE_OPT}" = "yes" ] && [ "${IONCUBE_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of ionCube: ${IONCUBE_VER}" + fi + IONCUBEV=0 + if /usr/local/bin/php -v | grep ionCube | grep -m1 -q -o ' v[^,]*'; then + IONCUBEV="`/usr/local/bin/php -v | grep ionCube | grep -m1 -o ' v[^,]*' | cut -dv -f2`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of ionCube: ${IONCUBEV}" + echo "" + fi + fi + if [ "${IONCUBE_VER}" != "${IONCUBEV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating ionCube loader.${boldoff}" + doIoncube + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}ionCube loader ${IONCUBEV} to ${IONCUBE_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"ioncube\": {\n" + printf "\t\t\"name\": \"ionCube\",\n" + printf "\t\t\"current\": \"${IONCUBEV}\",\n" + printf "\t\t\"offered\": \"${IONCUBE_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ] && [ "${SNUFFLEUPAGUS_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of snuffleupagus: ${SNUFFLEUPAGUS_VER}" + fi + SNUFFLEUPAGUSV=0 + if /usr/local/bin/php -i | grep -m1 'snuffleupagus support' -A1 | tail -n1 | grep -m1 -q -o '[0-9.]*' 2>/dev/null; then + SNUFFLEUPAGUSV="`/usr/local/bin/php -i | grep -m1 'snuffleupagus support' -A1 | tail -n1 | grep -m1 -o '[0-9.]*' 2>/dev/null`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of snuffleupagus: ${SNUFFLEUPAGUSV}" + echo "" + fi + fi + if [ "${SNUFFLEUPAGUS_VER}" != "${SNUFFLEUPAGUSV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating snuffleupagus.${boldoff}" + doSnuffleupagus + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}Snuffleupagus ${SNUFFLEUPAGUSV} to ${SNUFFLEUPAGUS_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_snuffleupagus\": {\n" + printf "\t\t\"name\": \"Snuffleupagus\",\n" + printf "\t\t\"current\": \"${SNUFFLEUPAGUSV}\",\n" + printf "\t\t\"offered\": \"${SNUFFLEUPAGUS_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${PHP_REDIS_OPT}" = "yes" ] && [ "${PHPREDIS_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of PHP-Redis: ${PHPREDIS_VER}" + fi + PHPREDISV=0 + if /usr/local/bin/php -i | grep -m1 -q 'Redis Version' 2>/dev/null; then + PHPREDISV="`/usr/local/bin/php -i | grep -m1 'Redis Version' | awk '{print $4}' 2>/dev/null`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of PHP-Redis: ${PHPREDISV}" + echo "" + fi + fi + if [ "${PHPREDIS_VER}" != "${PHPREDISV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating PHP-Redis.${boldoff}" + doPHPRedis + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}PHP-Redis ${PHPREDISV} to ${PHPREDIS_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_redis\": {\n" + printf "\t\t\"name\": \"PHP-Redis\",\n" + printf "\t\t\"current\": \"${PHPREDISV}\",\n" + printf "\t\t\"offered\": \"${PHPREDIS_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${PHP_PHALCON_OPT}" = "yes" ] && [ "${PHALCON_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of phalcon: ${PHALCON_VER}" + fi + PHALCONV="`/usr/local/bin/php -r "echo Phalcon\Version::get();" 2>/dev/null | grep -v 'error'`" + if [ -z "${PHALCONV}" ]; then + PHALCONV=0 + fi + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of phalcon: ${PHALCONV}" + echo "" + fi + if [ "${PHALCON_VER}" != "${PHALCONV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating phalcon.${boldoff}" + doPhalcon + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}phalcon ${PHALCONV} to ${PHALCON_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"php_phalcon\": {\n" + printf "\t\t\"name\": \"phalcon\",\n" + printf "\t\t\"current\": \"${PHALCONV}\",\n" + printf "\t\t\"offered\": \"${PHALCON_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + if [ "${SQUIRRELMAIL_OPT}" = "yes" ] && [ "${SQUIRRELMAIL_VER}" != "0" ]; then + if [ "${VERSIONS}" = "1" ]; then + echo "Latest version of SquirrelMail: ${SQUIRRELMAIL_VER}" + fi + SQUIRRELMAILV=0 + if [ -e ${WWWDIR}/squirrelmail ]; then + SQUIRRELMAILV="`ls -ld ${WWWDIR}/squirrelmail | cut -d\> -f2 | cut -d- -f2,3`" + if [ "${VERSIONS}" = "1" ]; then + echo "Installed version of SquirrelMail: ${SQUIRRELMAILV}" + echo "" + fi + fi + if [ "${SQUIRRELMAIL_VER}" != "${SQUIRRELMAILV}" ]; then + if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then + echo "${boldon}Updating SquirrelMail.${boldoff}" + doSquirrelmail + WEBAPPS_UPDATED=true + elif [ "${VERSIONS}" = "1" ]; then + echo "${boldon}SquirrelMail ${SQUIRRELMAILV} to ${SQUIRRELMAIL_VER} update is available.${boldoff}" + echo "" + elif [ "${VERSIONS}" = "json" ]; then + printf "\t\"squirrelmail\": {\n" + printf "\t\t\"name\": \"SquirrelMail\",\n" + printf "\t\t\"current\": \"${SQUIRRELMAILV}\",\n" + printf "\t\t\"offered\": \"${SQUIRRELMAIL_VER}\"\n" + printf "\t},\n" + fi + EXIT_CODE=$((EXIT_CODE+1)) + fi + fi + + checkSecurity ${VERSIONS} + + if [ "${VERSIONS}" = "1" ]; then + echo "If you want to update all the available versions run: ${boldon}$0 update_versions${boldoff}" + elif [ "${VERSIONS}" = "0" ]; then + #update_versions 0 for success, reset to 0 from count. Compile failures would have already exited. + EXIT_CODE=0 + elif [ "${VERSIONS}" = "json" ]; then + echo "}" + fi + + if ${EXEC_CL_COMMANDS_ONCE} && [ "${VERSIONS}" != "2" ]; then + cagefsctl_update + elif ${WEBAPPS_UPDATED} && [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${VERSIONS}" = "2" ]; then + cagefsctl_update + fi +} + +doVersions_ajax() { + echo "HTTP/1.1 200 OK" + echo "Content-Type: text/plain" + echo "" + + COUNT=`doVersions 1 | grep -c 'is available'` + if [ "${COUNT}" -gt 0 ]; then + echo "document.getElementById(\"cb_updates\").innerHTML=\"${COUNT}\";" + echo "document.getElementById(\"cb_updates\").style.visibility=\"visible\";" + fi +} + +#################################################### + +SPEED_FILE_SMALL=10.kb +SPEED_FILE_LARGE=100.kb +#max time for small file test allowed to proceed with large file test. +LARGE_TEST_MAX=35 +SPEED_VERBOSE=1 +BEST=0 +BEST_SEVER="" + +test_server() { + i=$1 + VALUE=`curl -o /dev/null -w "%{speed_download}" --silent --connect-timeout 2 http://${1}/services/${2} 2>&1` + + #can be MB/s or KB/s or B/s + if [ "${VALUE}" = "" ]; then + echo "$i is too slow, skipping." + continue + fi + + #chop off any decimal bytes.. we dont care about 0.5 byte/second + VALUE=`echo $VALUE | cut -d. -f1` + + if [ ${SPEED_VERBOSE} -eq 1 ]; then + printf "$VALUE B/s \t- $i\n" + fi + + if [ "${VALUE}" -gt "${BEST}" ]; then + BEST=$VALUE + BEST_SERVER=$i + fi +} + + +speed_test() { + if [ ${SPEED_VERBOSE} -eq 1 ]; then + echo "Testing with file $1:" + fi + BEST=0 + BEST_SERVER="" + SPEED_START=`date +%s` + for s in ${DOWNLOADSERVER_SET}; do + test_server $s $1 + done + SPEED_END=`date +%s` + DURATION=`expr $SPEED_END - $SPEED_START` + + if [ ${SPEED_VERBOSE} -eq 1 ]; then + echo "Total test duration: $DURATION seconds" + echo "" + fi +} + +set_fastest() { + #quiet mode. Will only output the quickest server. + if [ "$1" -eq 1 ]; then + SPEED_VERBOSE=0 + fi + + getFile servers.txt servers + if [ "${UNOFFICIAL_MIRRORS_OPT}" = "yes" ]; then + DOWNLOADSERVER_SET="da-mirror.wpcloud.vn `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`" + else + DOWNLOADSERVER_SET="${DOWNLOADSERVERS_OFFICIAL_LIST}" + fi + + speed_test ${SPEED_FILE_SMALL} + + #try and get a more accurate reading with larger file. + if [ "${DURATION}" -lt ${LARGE_TEST_MAX} ]; then + speed_test ${SPEED_FILE_LARGE} + else + if [ ${SPEED_VERBOSE} -eq 1 ]; then + echo "Small file test took longer than ${LARGE_TEST_MAX} seconds. Not proceeding with large file test." + fi + fi + + if [ ${SPEED_VERBOSE} -eq 1 ]; then + echo "Fastest server is $BEST_SERVER at $BEST B/s" + else + echo "${BEST_SERVER}" + fi + + if [ "${BEST_SERVER}" != "" ]; then + setOpt downloadserver ${BEST_SERVER} + writeLog "set_fastest set downloadserver to ${BEST_SERVER}" + else + echo "Unable to determine fastest server" + fi +} + +fix_curl_link_for_yum() { + #check for broken yums on CentOS 6. + if [ -e /usr/bin/yum ]; then + BROKEN=`yum --version 2>&1 | head -n 2 | grep -m1 -c CRITICAL` + if [ "$BROKEN" -eq 1 ]; then + CURLLIB=/usr/local/lib/libcurl.so.4.2.0 + if [ -e $CURLLIB ]; then + echo "*** Re-linking curl to fix the yum issue: https://help.directadmin.com/item.php?id=385 ***" + mv $CURLLIB /root/libcurl.so.4.2.0.moved + ln -s /usr/lib/libcurl.so $CURLLIB + echo "*** done curl re-link ***" + else + echo "*** yum is broken, but cannot find $CURLLIB. See https://help.directadmin.com/item.php?id=385 ***" + fi + fi + fi +} + +#################################################### + +doRemoveSuggest() { + REMOVAL_MODE=$1 + + if [ "${REMOVAL_MODE}" = "json" ]; then + echo "{" + fi + + if [ -e /usr/sbin/httpd ]; then + if [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${APACHE2_VER}" != "0" ]; then + if [ "${WEBSERVER_OPT}" = "nginx" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Apache installed, but not enabled in options.conf: './build remove_apache'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveApache2 + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_apache\": {\n" + printf "\t\t\"name\": \"Apache\"\n" + printf "\t},\n" + fi + fi + fi + fi + + if [ -e /usr/sbin/unitd ] && [ "${UNIT_OPT}" != "yes" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Nginx Unit installed, but not enabled in options.conf: './build remove_unit'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveUnit + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_unit\": {\n" + printf "\t\t\"name\": \"Nginx Unit\"\n" + printf "\t},\n" + fi + fi + + if [ -e /usr/sbin/nginx ]; then + if [ "${WEBSERVER_OPT}" != "nginx" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${NGINX_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Nginx installed, but not enabled in options.conf: './build remove_nginx'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveNginx + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_nginx\": {\n" + printf "\t\t\"name\": \"Nginx\"\n" + printf "\t},\n" + fi + fi + fi + + initHTTP2var + if [ -e /usr/local/lib/libnghttp2.a ]; then + if [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${CURL_OPT}" != "yes" ] && [ "${APACHE2_VER}" != "0" ] && [ "${HTTP2}" != "1" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Nghttp2 installed, but Apache/cURL are not enabled in options.conf: './build remove_nghttp2'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveNghttp2 + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_nghttp2\": {\n" + printf "\t\t\"name\": \"Nghttp2\"\n" + printf "\t},\n" + fi + fi + fi + + if [ -d /usr/local/lsws ]; then + if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${LITESPEED_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "LiteSpeed installed, but not enabled in options.conf: './build remove_litespeed'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveLiteSpeed + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_litespeed\": {\n" + printf "\t\t\"name\": \"LiteSpeed\"\n" + printf "\t},\n" + fi + fi + fi + + for php_release in `echo ${PHP1_RELEASE_SET}`; do + php_shortrelease="`echo ${php_release} | tr -d '.'`" + if [ -d /usr/local/php${php_shortrelease} ] && [ "${PHP1_RELEASE_OPT}" != "${php_release}" ] && [ "${PHP2_RELEASE_OPT}" != "${php_release}" ] && [ "${PHP3_RELEASE_OPT}" != "${php_release}" ] && [ "${PHP4_RELEASE_OPT}" != "${php_release}" ]; then + PHP_REMOVAL_VERSION_NUMBER=`getVer php${php_shortrelease}` + if [ "${PHP_REMOVAL_VERSION_NUMBER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "PHP ${php_release} installed, but not enabled in options.conf: './build remove_php ${php_release}'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemovePhp ${php_release} + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_php ${php_release}\": {\n" + printf "\t\t\"name\": \"PHP ${php_release}\"\n" + printf "\t},\n" + fi + fi + fi + done + + if [ -e /usr/local/suphp/sbin ] && [ "${PHP1_MODE_OPT}" != "suphp" ] && [ "${SUPHP_VER}" != "0" ]; then + if [ "${PHP2_MODE_OPT}" != "suphp" ] && [ "${PHP3_MODE_OPT}" != "suphp" ] && [ "${PHP4_MODE_OPT}" != "suphp" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "suPHP installed, but not enabled in options.conf: './build remove_suphp'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveSuPhp + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_suphp\": {\n" + printf "\t\t\"name\": \"suPHP\"\n" + printf "\t},\n" + fi + fi + fi + + if [ -e /usr/local/bin/curl ] && [ "${CURL_OPT}" = "no" ] && [ "${CURL_VER}" != "0" ] && [ "${OS}" != "FreeBSD" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "cURL installed, but not enabled in options.conf: './build remove_curl'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveCURL + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_curl\": {\n" + printf "\t\t\"name\": \"cURL\"\n" + printf "\t},\n" + fi + fi + + if [ -e /usr/sbin/dovecot ] && [ "${DOVECOT_OPT}" != "yes" ] && [ "${DOVECOT_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Dovecot installed, but not enabled in options.conf: './build remove_dovecot'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveDovecot + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_dovecot\": {\n" + printf "\t\t\"name\": \"Dovecot\"\n" + printf "\t},\n" + fi + fi + + if [ -e /usr/sbin/proftpd ] && [ "${FTPD_OPT}" != "proftpd" ] && [ "${PROFTPD_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "ProFTPd installed, but not enabled in options.conf: './build remove_proftpd'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveProftpd + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_proftpd\": {\n" + printf "\t\t\"name\": \"ProFTPd\"\n" + printf "\t},\n" + fi + fi + + if [ -e /usr/sbin/pure-ftpd ] && [ "${FTPD_OPT}" != "pureftpd" ] && [ "${PUREFTPD_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Pure-FTPd installed, but not enabled in options.conf: './build remove_pureftpd'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemovePureftpd + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_pureftpd\": {\n" + printf "\t\t\"name\": \"Pure-FTPd\"\n" + printf "\t},\n" + fi + fi + + if [ -d /etc/exim.easy_spam_fighter ] && [ "${EASY_SPAM_FIGHTER_OPT}" != "yes" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Easy Spam Fighter installed, but not enabled in options.conf: './build remove_easy_spam_fighter'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveEasySpamFighter + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_easy_spam_fighter\": {\n" + printf "\t\t\"name\": \"Easy Spam Fighter\"\n" + printf "\t},\n" + fi + fi + + if [ -d /etc/exim.blockcracking ] && [ "${BLOCKCRACKING_OPT}" != "yes" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "BlockCracking installed, but not enabled in options.conf: './build remove_blockcracking'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveBlockCracking + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_blockcracking\": {\n" + printf "\t\t\"name\": \"BlockCracking\"\n" + printf "\t},\n" + fi + fi + + if [ -e /usr/local/bin/rspamd ] && [ "${SPAMD_OPT}" != "rspamd" ] && [ "${RSPAMD_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Rspamd installed, but not enabled in options.conf: './build remove_rspamd'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + do_remove_rspamd + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_rspamd\": {\n" + printf "\t\t\"name\": \"Rspamd\"\n" + printf "\t},\n" + fi + fi + + if [ -d /etc/exim/rspamd ] && [ "${SPAMD_OPT}" != "rspamd" ] && [ "${RSPAMD_CONF_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "Rspamd_conf installed, but not enabled in options.conf: './build remove_rspamd_conf'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + do_remove_rspamd_conf + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_rspamd_conf\": {\n" + printf "\t\t\"name\": \"Rspamd Conf\"\n" + printf "\t},\n" + fi + fi + + if [ -e /usr/bin/spamd ] && [ "${SPAMD_OPT}" != "spamassassin" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "SpamAssassin installed, but not enabled in options.conf: './build remove_spamassassin'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveSpamassassin + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_spamassassin\": {\n" + printf "\t\t\"name\": \"SpamAssassin\"\n" + printf "\t},\n" + fi + fi + + if [ -e /usr/local/sbin/clamd ] && [ "${CLAMAV_OPT}" != "yes" ] && [ "${CLAMAV_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "ClamAV installed, but not enabled in options.conf: './build remove_clamav'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveClamav + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_clamav\": {\n" + printf "\t\t\"name\": \"ClamAV\"\n" + printf "\t},\n" + fi + fi + + if [ -e /var/www/html/roundcube ] && [ "${ROUNDCUBE_OPT}" != "yes" ] && [ "${ROUNDCUBE_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "RoundCube webmail installed, but not enabled in options.conf: './build remove_roundcube'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveRoundcube + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_roundcube\": {\n" + printf "\t\t\"name\": \"RoundCube\"\n" + printf "\t},\n" + fi + fi + + if [ -e /var/www/html/squirrelmail ] && [ "${SQUIRRELMAIL_OPT}" != "yes" ] && [ "${SQUIRRELMAIL_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "SquirrelMail webmail installed, but not enabled in options.conf: './build remove_squirrelmail'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemoveSquirrelmail + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_squirrelmail\": {\n" + printf "\t\t\"name\": \"SquirrelMail\"\n" + printf "\t},\n" + fi + fi + + if [ -e /var/www/html/phpMyAdmin ] && [ "${PHPMYADMIN_OPT}" != "yes" ] && [ "${PHPMYADMIN_VER}" != "0" ]; then + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "phpMyAdmin installed, but not enabled in options.conf: './build remove_phpmyadmin'" + elif [ "${REMOVAL_MODE}" = "0" ]; then + doRemovephpMyAdmin + elif [ "${REMOVAL_MODE}" = "json" ]; then + printf "\t\"remove_phpmyadmin\": {\n" + printf "\t\t\"name\": \"phpMyAdmin\"\n" + printf "\t},\n" + fi + fi + + if [ "${REMOVAL_MODE}" = "1" ]; then + echo "" + echo "If you want to remove all the suggested programs above, run: ${boldon}$0 remove_items${boldoff}" + elif [ "${REMOVAL_MODE}" = "json" ]; then + echo "}" + fi +} + +#################################################### + +doAll() { + FORCE=1 + + if [ "${OS}" = "FreeBSD" ]; then + if [ ! -x /usr/local/bin/autoconf ]; then + pkg install -y autoconf + fi + if [ ! -x /usr/local/bin/automake ]; then + pkg install -y automake + fi + if [ ! -x /usr/local/bin/libtool ]; then + pkg install -y libtool + fi + fi + + if ${NEW_INSTALL}; then + #We need to have /etc/virtual ready for new installs of DA + createEtcVirtual + + doSysbk + + doBind + + if [ "${OS}" != "FreeBSD" ] && [ "${CSF_OPT}" = "yes" ]; then + doCSF + fi + fi + + doMajordomo + + if [ ! -e /usr/include/pcre.h ] && [ ! -e /usr/local/include/pcre.h ]; then + if [ -e /etc/debian_version ]; then + apt-get -y install libpcre3-dev + elif [ ${OS} != "FreeBSD" ]; then + if [ "${OS_CENTOS_VER}" = "6" ]; then + doPCRE + else + yum -y install pcre-devel + fi + else + pkg install -y pcre + fi + fi + + checkLibz + + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + doApache2 + if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then + doSuPhp + fi + if [ "${HAVE_FCGID}" = "yes" ]; then + doModFCGID + fi + if [ "${MOD_RUID2_OPT}" = "yes" ]; then + doModRuid2 + fi + fi + if [ "${WEBSERVER_OPT}" = "litespeed" ]; then + doLiteSpeed + fi + if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + doOpenLiteSpeed + fi + if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + doNginx + fi + + if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then + doModAclr2 + fi + + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${WEBSERVER_OPT}" != "nginx" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${MODSECURITY_VER}" != "0" ]; then + doModSecurity + fi + + if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${MODSECURITY_VER}" != "0" ]; then + doLibModSecurity + fi + +# if [ "${PNG_VER}" != "0" ]; then +# doLibPng +# fi + + if [ "${CURL_OPT}" = "yes" ] && [ "${CURL_VER}" != "0" ]; then + doCURL + elif [ ! -e /usr/include/curl/curl.h ] && [ ! -e /usr/local/include/curl/curl.h ] && [ ! -e /usr/include/x86_64-linux-gnu/curl/curl.h ]; then + if [ -e /etc/debian_version ]; then + apt-get -y install libcurl4-openssl-dev + elif [ ${OS} != "FreeBSD" ]; then + yum -y install libcurl-devel + else + pkg install -y curl + fi + fi + +# if [ "${FREETYPE_VER}" != "0" ]; then +# doFreeType +# fi + + if [ "${SYSTEMD}" = "yes" ] && [ "${CLOUDLINUX_OPT}" != "yes" ]; then + SKIP_BRWAP=false + if systemd-detect-virt | grep -m1 -q -E 'lxc|openvz'; then + if [ -e /dev/.lxc/proc/self/uid_map ]; then + if ! cat /dev/.lxc/proc/self/uid_map >/dev/null 2>&1; then + SKIP_BRWAP=false + else + SKIP_BRWAP=true + fi + else + SKIP_BRWAP=true + fi + fi + if ! ${SKIP_BRWAP}; then + doBubblewrap + fi + fi + + if [ "${MYSQL_INST_OPT}" != "no" ]; then + doMySQL + fi + +# if [ "${LIBXML2_VER}" != "0" ]; then +# doLibxml2 +# fi + +# if [ "${LIBXSLT_VER}" != "0" ]; then +# doLibxslt +# fi + +# if [ "${LIBSODIUM_VER}" != "0" ]; then +# doLibsodium +# fi + + if [ "${CLAMAV_OPT}" = "yes" ] && [ "${CLAMAV_VER}" != "0" ]; then + doclamav + fi + + if [ ! -e /usr/include/zstd.h ] && [ ! -e /usr/local/include/zstd.h ]; then + if [ ${OS} = "FreeBSD" ]; then + ${PKG_INSTALL} install -y zstd + elif [ -e ${DEBIAN_VERSION} ]; then + apt-get -y install zstd libzstd-dev + else + if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ] ; then + yum -y install zstd libzstd-devel --enablerepo=${EPEL_REPO_NAME} + else + yum -y install zstd libzstd-devel + fi + fi + fi + + doPhp n + + if [ "${IMAGICK_OPT}" != "no" ]; then + doImageMagick + fi + + if [ "${WEBALIZER_OPT}" = "yes" ] && [ "${WEBALIZER_VER}" != "0" ]; then + doWebalizer + fi + + if [ "${AWSTATS_OPT}" = "yes" ] && [ "${AWSTATS_VER}" != "0" ]; then + doawstats + fi + + if [ "${EXIM_OPT}" = "yes" ] && [ "${EXIM_VER}" != "0" ]; then + doExim + fi + + if [ "${DOVECOT_OPT}" = "yes" ] && [ "${DOVECOT_VER}" != "0" ]; then + doDovecot + fi + + if [ "${FTPD_OPT}" = "proftpd" ] && [ "${PROFTPD_VER}" != "0" ]; then + doProftpd + fi + + if [ "${FTPD_OPT}" = "pureftpd" ] && [ "${PUREFTPD_VER}" != "0" ]; then + doPureftpd + fi + + if [ "${FTPD_OPT}" = "no" ]; then + doNoFtpd + fi + + if [ "${SPAMD_OPT}" = "spamassassin" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then + dospamassassin + fi + + if [ "${REDIS_OPT}" = "yes" ]; then + doRedis + fi + + if [ "${SPAMD_OPT}" = "rspamd" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then + doRspamd + do_rspamd_conf + fi + +# Mailman is not yet supported +# if [ "${MAILMAN_OPT}" = "yes" ]; then +# domailman +# fi + + chown -R root:${ROOT_GRP} ${WORKDIR} + + if [ "${UNIT_OPT}" = "yes" ] && [ "${UNIT_VER}" != "0" ]; then + doNginxUnit + fi + + if [ "${ROUNDCUBE_OPT}" = "yes" ] && [ "${ROUNDCUBE_VER}" != "0" ]; then + doroundcube + fi + + if [ "${PHPMYADMIN_OPT}" = "yes" ] && [ "${PHPMYADMIN_VER}" != "0" ]; then + dophpMyAdmin + fi + + if [ "${SQUIRRELMAIL_OPT}" = "yes" ] && [ "${SQUIRRELMAIL_VER}" != "0" ]; then + doSquirrelmail + fi + + if [ "${EXIMCONF_OPT}" = "yes" ]; then + doEximConf + fi + + if [ "${BLOCKCRACKING_OPT}" = "yes" ]; then + doBlockCracking + fi + + if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then + doEasySpamFighter + fi + + if [ "${PHP_INI_OPT}" = "yes" ]; then + doPhpIni + fi + if [ "${CUSTOMBUILD_PLUGIN_OPT}" = "yes" ]; then + doCustombuildPlugin + fi + + doLetsEncrypt + if [ -s /usr/local/directadmin/scripts/letsencrypt.sh ] && [ -x ${DA_BIN} ]; then + if ${DA_BIN} c | grep '^ssl=0' && ${DA_BIN} c | grep '^ssl_port=0'; then + /usr/local/directadmin/scripts/letsencrypt.sh request `hostname` >/dev/null 2>&1 + fi + fi + + if [ "${CRON_OPT}" = "yes" ]; then + doCron + fi + + fix_curl_link_for_yum + + if [ -s /usr/local/directadmin/scripts/setup.txt ]; then + if grep -m1 -q '^hostname=$' /usr/local/directadmin/scripts/setup.txt; then + echo "Fixing empty hostname in /usr/local/directadmin/scripts/setup.txt..." + perl -pi -e 's|^hostname=$|hostname=server.yourdirectadminserver.com|g' /usr/local/directadmin/scripts/setup.txt + fi + if grep -m1 -q '^ns1=ns1\.$' /usr/local/directadmin/scripts/setup.txt; then + perl -pi -e 's|^ns1=ns1\.$|ns1=ns1.yourdirectadminserver.com|g' /usr/local/directadmin/scripts/setup.txt + fi + if grep -m1 -q '^ns2=ns2\.$' /usr/local/directadmin/scripts/setup.txt; then + perl -pi -e 's|^ns2=ns2\.$|ns2=ns2.yourdirectadminserver.com|g' /usr/local/directadmin/scripts/setup.txt + fi + if grep -m1 -q '^email=admin@$' /usr/local/directadmin/scripts/setup.txt; then + perl -pi -e 's|^email=admin@$|email=admin@yourdirectadminserver.com|g' /usr/local/directadmin/scripts/setup.txt + fi + fi + printf "\n\n\n" + echo "*************************************" + echo "* *" + echo "* All parts have been installed *" + echo "* *" + echo "*************************************" + echo "" + doGrubConf + if ${NEW_INSTALL}; then + echo "action=notify&value=admin&subject=CustomBuild installation has finished&message=CustomBuild installation has finished, to check the full log please check:%0A/usr/local/directadmin/custombuild/install.txt" >> ${TASK_QUEUE} + run_dataskq + fi +} + +#################################################### + + +if [ $# -eq 2 ]; then + USER_INPUT=0 + INPUT_VALUE=$2 +fi + +doHook ${1} pre + +case "$1" in + all) doChecks; doAll; + ;; + options) doChecks; options + ;; + options_nobold) BOLD_OPT=no; boldon=""; boldoff=""; doChecks; options + ;; + os_license_mismatch) os_license_mismatch + ;; + create_options) create_options + ;; + used_configs) used_configs + ;; + remove_nghttp2) doRemoveNghttp2 + ;; + nghttp2) doNghttp2 + ;; + apache) doChecks; doApache2 + ;; + majordomo) doMajordomo + ;; + bind) doBind + ;; + csf) doCSF + ;; + sysbk) doSysbk + ;; + letsencrypt) doLetsEncrypt + ;; + litespeed) doChecks; doLiteSpeed + ;; + openlitespeed) doChecks; doOpenLiteSpeed + ;; + litespeed_license) doChecks; doLiteSpeedLicense 1 + ;; + litespeed_license_migrate) ${LSWS_HOME}/bin/lshttpd -r + ;; + libpng) doLibPng + ;; + libmaxminddb) dolibmaxminddb + ;; + geoipupdate) doGeoipupdate + ;; + cron) doCron + ;; + curl) doCURL + ;; + freetype) doFreeType + ;; + icu) doICU + ;; + php_imagick|imagick) doIMagick + ;; + php_phalcon) doPhalcon + ;; + php_psr) doPsr + ;; + php_bz2) doPHPBz2 + ;; + php_imap) doPHPImap + ;; + php_redis) doPHPRedis + ;; + php_xmlrpc) doPHPXmlrpc + ;; + php_gmp) doPHPGmp + ;; + php_readline) doPHPReadline + ;; + php_ldap) doPHPLDAP + ;; + redis) doRedis + ;; + imagemagick) doImageMagick + ;; + nginx) doChecks; doNginx + ;; + nginx_apache) doChecks; doApache2; doNginx + ;; + libsodium) doLibsodium + ;; + libxml2) doLibxml2 + ;; + libxslt) doLibxslt + ;; + libzip) doLibzip + ;; + pigz) doPigz + ;; + mod_lsapi) doModLsapi 1 + ;; + mod_hostinglimits) doModHostingLimits 1 + ;; + mod_proctitle) doModProctitle 1 + ;; + modsecurity) doChecks + if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then + doModSecurity 1 + else + doLibModSecurity 1 + fi + ;; + modsecurity_connector) doChecks; doModSecurityConnector 1 + ;; + libmodsecurity) doChecks; doLibModSecurity 1 + ;; + modsec-sdbm-util) doModSecsdbmutil + ;; + modsecurity_rules|modsecurity_ruleset) doChecks; doModSecurityRules + ;; + mod_ruid2) doModRuid2 + ;; + mod_aclr2) doModAclr2 + ;; + mod_htscanner2) doModHtscanner + ;; + php_htscanner2) doPHPHtscanner $2 1 + ;; + suhosin|php_suhosin) doSuhosin + ;; + php_snuffleupagus) doSnuffleupagus + ;; + php_igbinary) doIgbinary + ;; + opcache|php_opcache) doOpcache + ;; + mod_fcgid) doModFCGID + ;; + clean) doClean + ;; + clean_old_webapps) doclean_old_webapps + ;; + clean_old_tarballs) doclean_old_tarballs + ;; + update) doUpdate + ;; + pcre) doPCRE + ;; + pcre2) doPCRE2 + ;; + phpMyAdmin|phpmyadmin|pma) dophpMyAdmin + ;; + roundcube) doroundcube + ;; + squirrelmail) doSquirrelmail + ;; + update_script) doUpdateScript + ;; + update_data) doUpdateData + ;; + rewrite_confs) doChecks; doRewriteConfs + ;; + secure_php) secure_php + ;; + update_da) doUpdateDA + ;; + versions) doChecks; doVersions 1 + ;; + versions_nobold) BOLD_OPT=no; boldon=""; boldoff=""; doChecks; doVersions 1 + ;; + update_versions) doChecks; doVersions 0 $3 + ;; + update_versions_full|update_full) doChecks; doUpdate; ./build update_versions 0 full + ;; + update_webapps) doVersions 2 + ;; + awstats) doawstats + ;; + unit) doNginxUnit + ;; + unit_modules) doNginxUnit_modules + ;; + unit_module) doNginxUnit_module $2 $3 + ;; + awstats_process|awstats_process.sh) doawstats_process + ;; + webalizer) doWebalizer + ;; + proftpd) doChecks; doProftpd + ;; + pureftpd|pure-ftpd) doChecks; doPureftpd + ;; + noftpd) doChecks; doNoFtpd + ;; + zend|php_zend) doZend + ;; + ioncube|php_ioncube) doIoncube + ;; + mysql) doChecks; doMySQL + ;; + mariadb) doChecks; doMySQL + ;; + compile_mysql_binary) compile_mysql_binary + ;; + setup_my_cnf) setup_my_cnf + ;; + s-nail|snail) doSnail + ;; + msmtp) doMsmtp + ;; + lua) doLua + ;; + exim) doExim + ;; + eximconf|exim_conf) doEximConf + ;; + dovecotconf|dovecot_conf) doDovecotConf + ;; + grubconf|grub_conf) doGrubConf + ;; + php_extensions) doExtensionsSetup + ;; + libspf2) doLibspf2 + ;; + libsrs_alt) doLibsrsAlt + ;; + blockcracking) doBlockCracking + ;; + easy_spam_fighter) doEasySpamFighter + ;; + rspamd_conf) do_rspamd_conf + ;; + php) doChecks; doPhp + ;; + php_expert) doChecks; doPhp_build $2 $3 + ;; + php_ini) doChecks; doPhpIni + ;; + php_cacert) ensure_curl_cacert 1 + ;; + suphp) doChecks; doSuPhp + ;; + todovecot) convertToDovecot + ;; + dovecot) doDovecot + ;; + xapian) doXapian + ;; + fts-xapian) doFTSXapian + ;; + zstd) dozstd + ;; + bubblewrap) doBubblewrap + ;; + jailshell) doJailshell + ;; + cpanel_to_da) doCPanelToDA + ;; + pigeonhole) doPigeonhole + ;; + spamassassin|spamd) doChecks; dospamassassin + ;; + plugin|custombuild_plugin) doCustombuildPlugin + ;; + rspamd) doChecks; doRspamd + ;; + netdata) doNetdata + ;; + spamassassin_cron) dospamassassinCron + ;; + clamav) doclamav + ;; +# Mailman is not yet supported +# mailman) domailman +# ;; + set_fastest) set_fastest 0 + ;; + set_fastest_quiet) set_fastest 1 + ;; + set) setOpt $2 $3 + ;; + set_php) setPhpOpt $2 $3 + ;; + csfpingore) doCSFpignore + ;; + composer) doComposer + ;; + wp) doWP + ;; + imapsync) doImapsync + ;; + lego) doLego + ;; + check_options) doChecks + ;; + version) showVersion + ;; + set_service) set_service $2 $3 + ;; + opt_help) allSettings $2 + ;; + settings_json) allSettingsJSON; #used for CustomBuild plugin only + ;; + gen_help) generateHelp + ;; + gen_help_json) generateHelpJSON $2; #used for CustomBuild plugin only + ;; + versions_json) echo "$(doVersions json)" | perl -0p -e 's/\},\n\}/\}\n\}/'; #used for CustomBuild plugin only + ;; + versions_ajax) doVersions_ajax + ;; + get_versions_txt) downloadVersionsTxt; #will probably be used for CustomBuild plugin + ;; + kill) doKill + ;; + mysql_backup|backup_mysql) doMySQLback + ;; + custom_config) customize_config $2; #used for CustomBuild plugin only + ;; + set_versions_txt) set_versions $2; #used for CustomBuild plugin only + ;; + show_component_config) showComponentConfig $2; #used for CustomBuild plugin only + ;; + remove_customized_config) removeComponentConfig $2; #used for CustomBuild plugin only + ;; + list_configs_json) listConfigsJSON; #used for CustomBuild plugin only + ;; + show_file) showFile $2; #used for CustomBuild plugin only + ;; + get_timezone) getTimezone + ;; + #Removal functions + remove_clamav) doRemoveClamav + ;; + remove_suphp) doRemoveSuPhp + ;; + remove_curl) doRemoveCURL + ;; + remove_unit) doRemoveUnit + ;; + remove_apache) doRemoveApache2 + ;; + remove_nginx) doRemoveNginx + ;; + remove_litespeed) doRemoveLiteSpeed + ;; + remove_php) doRemovePhp $2 + ;; + remove_easy_spam_fighter) doRemoveEasySpamFighter + ;; + remove_blockcracking) doRemoveBlockCracking + ;; + remove_spamassassin) doRemoveSpamassassin + ;; + remove_rspamd) do_remove_rspamd + ;; + remove_rspamd_conf) do_remove_rspamd_conf + ;; + remove_dovecot) doRemoveDovecot + ;; + remove_proftpd) doRemoveProftpd + ;; + remove_pureftpd) doRemovePureftpd + ;; + remove_squirrelmail) doRemoveSquirrelmail + ;; + remove_phpmyadmin) doRemovephpMyAdmin + ;; + remove_roundcube) doRemoveRoundcube + ;; + remove_items) doRemoveSuggest 0 + ;; + list_removals) doRemoveSuggest 1 + ;; + list_removals_json) echo "$(doRemoveSuggest json)" | perl -0p -e 's/\},\n\}/\}\n\}/'; #used for CustomBuild plugin only + ;; + * ) showHelp + exit 0 + ;; +esac + +doHook $1 post + +DOCLEAN_CASE=1 +case "$1" in + update) doclean_toggle ;; + update_data) doclean_toggle ;; + "") doclean_toggle ;; + gen_help_json) doclean_toggle ;; + opt_help) doclean_toggle ;; + set) doclean_toggle ;; + set_php) doclean_toggle ;; + get_versions_txt) doclean_toggle ;; + update_script) doclean_toggle ;; + versions_json) doclean_toggle ;; + list_removals) doclean_toggle ;; + list_removals_json) doclean_toggle ;; + remove_items) doclean_toggle ;; + versions_ajax) doclean_toggle ;; + gen_help) doclean_toggle ;; + version) doclean_toggle ;; + versions) doclean_toggle ;; + set_fastest) doclean_toggle ;; + set_fastest_quiet) doclean_toggle ;; + kill) doclean_toggle ;; + update_da) doclean_toggle ;; + versions_nobold) doclean_toggle ;; + list_configs_json) doclean_toggle ;; + settings_json) doclean_toggle ;; + get_timezone) doclean_toggle ;; + custom_config) doclean_toggle ;; + set_versions_txt) doclean_toggle ;; + show_component_config) doclean_toggle ;; + remove_customized_config) doclean_toggle ;; + show_file) doclean_toggle ;; + check_options) doclean_toggle ;; +esac + +if [ "${CLEAN_OPT}" = "yes" ] && [ "${DOCLEAN_CASE}" = "1" ]; then + doClean +fi +if [ "${DOCLEAN_CASE}" = "1" ]; then + if [ "${CLEAN_OPT}" = "yes" ]; then + if [ ! -e ${LOCKFILE} ]; then + doClean + fi + fi + writeLog "called: $@" +fi + +exit ${EXIT_CODE} diff --git a/services/custombuild/custombuild/configure/ap2/cert_config.txt b/services/custombuild/custombuild/configure/ap2/cert_config.txt new file mode 100644 index 0000000..39bc8fe --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/cert_config.txt @@ -0,0 +1,13 @@ +[ req ] + default_bits = 1024 + distinguished_name = req_distinguished_name + prompt = no + +[ req_distinguished_name ] + C = US + ST = Someprovince + L = Sometown + O = none + OU = none + CN = localhost + emailAddress = webmaster@localhost diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/directadmin-vhosts.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/directadmin-vhosts.conf new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/directadmin-vhosts.conf @@ -0,0 +1 @@ + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-alias.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-alias.conf new file mode 100644 index 0000000..00756f5 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-alias.conf @@ -0,0 +1,8 @@ +Alias /config "/var/www/html/redirect.php" +Alias /phpMyAdmin "/var/www/html/phpMyAdmin/" +Alias /phpmyadmin "/var/www/html/phpMyAdmin/" +Alias /pma "/var/www/html/phpMyAdmin/" +Alias /squirrelmail "/var/www/html/squirrelmail/" +Alias /roundcube "/var/www/html/roundcube/" +Alias /webmail "/var/www/html/roundcube/" +Alias /.well-known/acme-challenge "/var/www/html/.well-known/acme-challenge/" diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-autoindex.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-autoindex.conf new file mode 100644 index 0000000..1567ea1 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-autoindex.conf @@ -0,0 +1,93 @@ +# +# Directives controlling the display of server-generated directory listings. +# +# Required modules: mod_authz_core, mod_authz_host, +# mod_autoindex, mod_alias +# +# To see the listing of a directory, the Options directive for the +# directory must include "Indexes", and the directory must not contain +# a file matching those listed in the DirectoryIndex directive. +# + + +# +# IndexOptions: Controls the appearance of server-generated directory +# listings. +# +IndexOptions HTMLTable VersionSort + +# We include the /icons/ alias for FancyIndexed directory listings. If +# you do not use FancyIndexing, you may comment this out. +# +#Alias /icons/ "/var/www/icons/" + + + Options Indexes MultiViews + AllowOverride None + Require all granted + + +# +# AddIcon* directives tell the server which icon to show for different +# files or filename extensions. These are only displayed for +# FancyIndexed directories. +# +AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip + +AddIconByType (TXT,/icons/text.gif) text/* +AddIconByType (IMG,/icons/image2.gif) image/* +AddIconByType (SND,/icons/sound2.gif) audio/* +AddIconByType (VID,/icons/movie.gif) video/* + +AddIcon /icons/binary.gif .bin .exe +AddIcon /icons/binhex.gif .hqx +AddIcon /icons/tar.gif .tar +AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv +AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip +AddIcon /icons/a.gif .ps .ai .eps +AddIcon /icons/layout.gif .html .shtml .htm .pdf +AddIcon /icons/text.gif .txt +AddIcon /icons/c.gif .c +AddIcon /icons/p.gif .pl .py +AddIcon /icons/f.gif .for +AddIcon /icons/dvi.gif .dvi +AddIcon /icons/uuencoded.gif .uu +AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl +AddIcon /icons/tex.gif .tex +AddIcon /icons/bomb.gif core + +AddIcon /icons/back.gif .. +AddIcon /icons/hand.right.gif README +AddIcon /icons/folder.gif ^^DIRECTORY^^ +AddIcon /icons/blank.gif ^^BLANKICON^^ + +# +# DefaultIcon is which icon to show for files which do not have an icon +# explicitly set. +# +DefaultIcon /icons/unknown.gif + +# +# AddDescription allows you to place a short description after a file in +# server-generated indexes. These are only displayed for FancyIndexed +# directories. +# Format: AddDescription "description" filename +# +#AddDescription "GZIP compressed document" .gz +#AddDescription "tar archive" .tar +#AddDescription "GZIP compressed tar archive" .tgz + +# +# ReadmeName is the name of the README file the server will look for by +# default, and append to directory listings. +# +# HeaderName is the name of a file which should be prepended to +# directory indexes. +ReadmeName README.html +HeaderName HEADER.html + +# +# IndexIgnore is a set of filenames which directory indexing should ignore +# and not include in the listing. Shell-style wildcarding is permitted. +# +IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-cloudflare.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-cloudflare.conf new file mode 100644 index 0000000..52bc755 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-cloudflare.conf @@ -0,0 +1,24 @@ +# Declare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPHeader X-Forwarded-For +RemoteIPTrustedProxy 173.245.48.0/20 +RemoteIPTrustedProxy 103.21.244.0/22 +RemoteIPTrustedProxy 103.22.200.0/22 +RemoteIPTrustedProxy 103.31.4.0/22 +RemoteIPTrustedProxy 141.101.64.0/18 +RemoteIPTrustedProxy 108.162.192.0/18 +RemoteIPTrustedProxy 190.93.240.0/20 +RemoteIPTrustedProxy 188.114.96.0/20 +RemoteIPTrustedProxy 197.234.240.0/22 +RemoteIPTrustedProxy 198.41.128.0/17 +RemoteIPTrustedProxy 162.158.0.0/15 +RemoteIPTrustedProxy 104.16.0.0/13 +RemoteIPTrustedProxy 104.24.0.0/14 +RemoteIPTrustedProxy 172.64.0.0/13 +RemoteIPTrustedProxy 131.0.72.0/22 +RemoteIPTrustedProxy 2400:cb00::/32 +RemoteIPTrustedProxy 2606:4700::/32 +RemoteIPTrustedProxy 2803:f800::/32 +RemoteIPTrustedProxy 2405:b500::/32 +RemoteIPTrustedProxy 2405:8100::/32 +RemoteIPTrustedProxy 2a06:98c0::/29 +RemoteIPTrustedProxy 2c0f:f248::/32 diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-dav.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-dav.conf new file mode 100644 index 0000000..18d9a7b --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-dav.conf @@ -0,0 +1,50 @@ +# +# Distributed authoring and versioning (WebDAV) +# +# Required modules: mod_alias, mod_auth_digest, mod_authn_core, mod_authn_file, +# mod_authz_core, mod_authz_user, mod_dav, mod_dav_fs, +# mod_setenvif + +# The following example gives DAV write access to a directory called +# "uploads" under the ServerRoot directory. +# +# The User/Group specified in httpd.conf needs to have write permissions +# on the directory where the DavLockDB is placed and on any directory where +# "Dav On" is specified. + +#DavLockDB "/etc/httpd/var/DavLock" + +#Alias /davuploads "/etc/httpd/uploads" + +# +# Dav On +# +# AuthType Digest +# AuthName DAV-upload + # You can use the htdigest program to create the password database: + # htdigest -c "/etc/httpd/user.passwd" DAV-upload admin +# AuthUserFile "/etc/httpd/user.passwd" +# AuthDigestProvider file + + # Allow universal read-access, but writes are restricted + # to the admin user. +# +# Require method GET POST OPTIONS +# Require user admin +# +# + +# +# The following directives disable redirects on non-GET requests for +# a directory that does not include the trailing slash. This fixes a +# problem with several clients that do not appropriately handle +# redirects for folders with DAV methods. +# +BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully +BrowserMatch "MS FrontPage" redirect-carefully +BrowserMatch "^WebDrive" redirect-carefully +BrowserMatch "^WebDAVFS/1.[01234]" redirect-carefully +BrowserMatch "^gnome-vfs/1.0" redirect-carefully +BrowserMatch "^XML Spy" redirect-carefully +BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully +BrowserMatch " Konqueror/4" redirect-carefully diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-default.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-default.conf new file mode 100644 index 0000000..ccc0863 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-default.conf @@ -0,0 +1,116 @@ +# +# This configuration file reflects default settings for Apache HTTP Server. +# +# You may change these, but chances are that you may not need to. +# + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout 60 + +# +# ProxyTimeout: The number of seconds before proxy receives and sends time out. +# +ProxyTimeout 1800 + +# +# ProxyErrorOverride: Override error pages for proxied content. +# +ProxyErrorOverride off + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive On + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests 100 + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout 2 + +# +# UseCanonicalName: Determines how Apache constructs self-referencing +# URLs and the SERVER_NAME and SERVER_PORT variables. +# When set "Off", Apache will use the Hostname and Port supplied +# by the client. When set "On", Apache will use the value of the +# ServerName directive. +# +UseCanonicalName Off + +# +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives. See also the AllowOverride +# directive. +# +AccessFileName .htaccess + +# +# ServerTokens +# This directive configures what you return as the Server HTTP response +# Header. The default is 'Full' which sends information about the OS-Type +# and compiled in modules. +# Set to one of: Full | OS | Minor | Minimal | Major | Prod +# where Full conveys the most information, and Prod the least. +# +ServerTokens Major + +# +# Optionally add a line containing the server version and virtual host +# name to server-generated pages (internal error documents, FTP directory +# listings, mod_status and mod_info output etc., but not CGI generated +# documents or custom error documents). +# Set to "EMail" to also include a mailto: link to the ServerAdmin. +# Set to one of: On | Off | EMail +# +ServerSignature Off + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# +# Set a timeout for how long the client may take to send the request header +# and body. +# The default for the headers is header=20-40,MinRate=500, which means wait +# for the first byte of headers for 20 seconds. If some data arrives, +# increase the timeout corresponding to a data rate of 500 bytes/s, but not +# above 40 seconds. +# The default for the request body is body=20,MinRate=500, which is the same +# but has no upper limit for the timeout. +# To disable, set to header=0 body=0 +# + + RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500 + + + + RewriteEngine on + RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) + RewriteRule .* - [F] + + +TraceEnable Off + + + RequestHeader unset Proxy early + + + + CacheRoot /home/lscache/ + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-deflate.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-deflate.conf new file mode 100644 index 0000000..b3d1b07 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-deflate.conf @@ -0,0 +1,28 @@ +# +# Required modules: mod_deflate +# +# Please see the documentation at +# +# for further details before you try to setup deflate module. +# + + +# Insert filter +SetOutputFilter DEFLATE + +# Netscape 4.x has some problems... +BrowserMatch ^Mozilla/4 gzip-only-text/html + +# Netscape 4.06-4.08 have some more problems +BrowserMatch ^Mozilla/4\.0[678] no-gzip + +# MSIE masquerades as Netscape, but it is fine +BrowserMatch \bMSIE !no-gzip !gzip-only-text/html + +# Don't compress images and other uncompressible content +SetEnvIfNoCase Request_URI \ + \.(?:gif|jpe?g|png|rar|zip|exe|flv|swf|mov|wma|mp3|mp4|avi|mp?g)$ no-gzip dont-vary + +# Make sure proxies don't deliver the wrong content +Header append Vary User-Agent env=!dont-vary + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-new.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-new.conf new file mode 100644 index 0000000..9f12650 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-new.conf @@ -0,0 +1,20 @@ + + Options SymLinksIfOwnerMatch + AllowOverride None + + Require all denied + + + + AllowOverride AuthConfig FileInfo Indexes Limit Options=Includes,IncludesNOEXEC,Indexes,ExecCGI,MultiViews,SymLinksIfOwnerMatch,None + Options IncludesNoExec Includes SymLinksIfOwnerMatch ExecCGI + AllowMethods |HTTP_METHODS| + + +Include /etc/httpd/conf/extra/httpd-hostname.conf + + + AllowOverride None + Options None + Require all granted + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-old.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-old.conf new file mode 100644 index 0000000..015b08d --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directories-old.conf @@ -0,0 +1,13 @@ + + AllowOverride All + Options All -MultiViews -Indexes +FollowSymLinks +IncludesNoExec +Includes + AllowMethods |HTTP_METHODS| + + +Include /etc/httpd/conf/extra/httpd-hostname.conf + + + AllowOverride None + Options None + Require all granted + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directoryindex.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directoryindex.conf new file mode 100644 index 0000000..e0af6ca --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-directoryindex.conf @@ -0,0 +1 @@ +DirectoryIndex index.html index.htm index.shtml index.php index.phtml diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-fcgid.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-fcgid.conf new file mode 100644 index 0000000..66eee95 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-fcgid.conf @@ -0,0 +1,20 @@ +# +# mod_fcgid configuration file +# + + + FcgidIPCDir /var/run/fcgidsock + SharememPath /var/run/fcgid_shm + FcgidMinProcessesPerClass 0 + FcgidMaxProcessesPerClass 8 + FcgidMaxProcesses 300 + FcgidProcessLifeTime 120 + FcgidIdleScanInterval 30 + FcgidIdleTimeout 60 + FcgidBusyTimeout 3600 + FcgidIOTimeout 2000 + FcgidMaxRequestLen 1073741824 + FcgidPassHeader Authorization + FcgidFixPathinfo 1 + AddHandler fcgid-script .fcgi + \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-info.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-info.conf new file mode 100644 index 0000000..0053ab4 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-info.conf @@ -0,0 +1,40 @@ +# +# Get information about the requests being processed by the server +# and the configuration of the server. +# +# Required modules: mod_authz_core, mod_authz_host, +# mod_info (for the server-info handler), +# mod_status (for the server-status handler) + +# +# Allow server status reports generated by mod_status, +# with the URL of http://servername/server-status +# Change the ".example.com" to match your domain to enable. + + + SetHandler server-status + AuthType basic + AuthName "Apache status" + AuthUserFile /var/www/passwd-server-status + Require valid-user + + +# +# ExtendedStatus controls whether Apache will generate "full" status +# information (ExtendedStatus On) or just basic information (ExtendedStatus +# Off) when the "server-status" handler is called. The default is Off. +# +ExtendedStatus On + +# +# Allow remote server configuration reports, with the URL of +# http://servername/server-info (requires that mod_info.c be loaded). +# Change the ".example.com" to match your domain to enable. +# + + SetHandler server-info + AuthType basic + AuthName "Apache status" + AuthUserFile /var/www/passwd-server-status + Require valid-user + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-languages.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-languages.conf new file mode 100644 index 0000000..7f66461 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-languages.conf @@ -0,0 +1,141 @@ +# +# Settings for hosting different languages. +# +# Required modules: mod_mime, mod_negotiation + +# DefaultLanguage and AddLanguage allows you to specify the language of +# a document. You can then use content negotiation to give a browser a +# file in a language the user can understand. +# +# Specify a default language. This means that all data +# going out without a specific language tag (see below) will +# be marked with this one. You probably do NOT want to set +# this unless you are sure it is correct for all cases. +# +# * It is generally better to not mark a page as +# * being a certain language than marking it with the wrong +# * language! +# +# DefaultLanguage nl +# +# Note 1: The suffix does not have to be the same as the language +# keyword --- those with documents in Polish (whose net-standard +# language code is pl) may wish to use "AddLanguage pl .po" to +# avoid the ambiguity with the common suffix for perl scripts. +# +# Note 2: The example entries below illustrate that in some cases +# the two character 'Language' abbreviation is not identical to +# the two character 'Country' code for its country, +# E.g. 'Danmark/dk' versus 'Danish/da'. +# +# Note 3: In the case of 'ltz' we violate the RFC by using a three char +# specifier. There is 'work in progress' to fix this and get +# the reference data for rfc1766 cleaned up. +# +# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl) +# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de) +# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja) +# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn) +# Norwegian (no) - Polish (pl) - Portugese (pt) +# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv) +# Turkish (tr) - Simplified Chinese (zh-CN) - Spanish (es) +# Traditional Chinese (zh-TW) +# +AddLanguage ca .ca +AddLanguage cs .cz .cs +AddLanguage da .dk +AddLanguage de .de +AddLanguage el .el +AddLanguage en .en +AddLanguage eo .eo +AddLanguage es .es +AddLanguage et .et +AddLanguage fr .fr +AddLanguage he .he +AddLanguage hr .hr +AddLanguage it .it +AddLanguage ja .ja +AddLanguage ko .ko +AddLanguage ltz .ltz +AddLanguage nl .nl +AddLanguage nn .nn +AddLanguage no .no +AddLanguage pl .po +AddLanguage pt .pt +AddLanguage pt-BR .pt-br +AddLanguage ru .ru +AddLanguage sv .sv +AddLanguage tr .tr +AddLanguage zh-CN .zh-cn +AddLanguage zh-TW .zh-tw + +# LanguagePriority allows you to give precedence to some languages +# in case of a tie during content negotiation. +# +# Just list the languages in decreasing order of preference. We have +# more or less alphabetized them here. You probably want to change this. +# +LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW + +# +# ForceLanguagePriority allows you to serve a result page rather than +# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback) +# [in case no accepted languages matched the available variants] +# +ForceLanguagePriority Prefer Fallback + +# +# Commonly used filename extensions to character sets. You probably +# want to avoid clashes with the language extensions, unless you +# are good at carefully testing your setup after each change. +# See http://www.iana.org/assignments/character-sets for the +# official list of charset names and their respective RFCs. +# +AddCharset us-ascii.ascii .us-ascii +AddCharset ISO-8859-1 .iso8859-1 .latin1 +AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen +AddCharset ISO-8859-3 .iso8859-3 .latin3 +AddCharset ISO-8859-4 .iso8859-4 .latin4 +AddCharset ISO-8859-5 .iso8859-5 .cyr .iso-ru +AddCharset ISO-8859-6 .iso8859-6 .arb .arabic +AddCharset ISO-8859-7 .iso8859-7 .grk .greek +AddCharset ISO-8859-8 .iso8859-8 .heb .hebrew +AddCharset ISO-8859-9 .iso8859-9 .latin5 .trk +AddCharset ISO-8859-10 .iso8859-10 .latin6 +AddCharset ISO-8859-13 .iso8859-13 +AddCharset ISO-8859-14 .iso8859-14 .latin8 +AddCharset ISO-8859-15 .iso8859-15 .latin9 +AddCharset ISO-8859-16 .iso8859-16 .latin10 +AddCharset ISO-2022-JP .iso2022-jp .jis +AddCharset ISO-2022-KR .iso2022-kr .kis +AddCharset ISO-2022-CN .iso2022-cn .cis +AddCharset Big5.Big5 .big5 .b5 +AddCharset cn-Big5 .cn-big5 +# For russian, more than one charset is used (depends on client, mostly): +AddCharset WINDOWS-1251 .cp-1251 .win-1251 +AddCharset CP866 .cp866 +AddCharset KOI8 .koi8 +AddCharset KOI8-E .koi8-e +AddCharset KOI8-r .koi8-r .koi8-ru +AddCharset KOI8-U .koi8-u +AddCharset KOI8-ru .koi8-uk .ua +AddCharset ISO-10646-UCS-2 .ucs2 +AddCharset ISO-10646-UCS-4 .ucs4 +AddCharset UTF-7 .utf7 +AddCharset UTF-8 .utf8 +AddCharset UTF-16 .utf16 +AddCharset UTF-16BE .utf16be +AddCharset UTF-16LE .utf16le +AddCharset UTF-32 .utf32 +AddCharset UTF-32BE .utf32be +AddCharset UTF-32LE .utf32le +AddCharset euc-cn .euc-cn +AddCharset euc-gb .euc-gb +AddCharset euc-jp .euc-jp +AddCharset euc-kr .euc-kr +#Not sure how euc-tw got in - IANA doesn't list it??? +AddCharset EUC-TW .euc-tw +AddCharset gb2312 .gb2312 .gb +AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2 +AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4 +AddCharset shift_jis .shift_jis .sjis diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-manual.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-manual.conf new file mode 100644 index 0000000..fb1327b --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-manual.conf @@ -0,0 +1,33 @@ +# +# Provide access to the documentation on your server as +# http://yourserver.example.com/manual/ +# The documentation is always available at +# http://httpd.apache.org/docs/2.4/ +# +# Required modules: mod_alias, mod_authz_core, mod_authz_host, +# mod_setenvif, mod_negotiation +# + +AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|pt-br|ru))?(/.*)?$ "/var/www/manual$1" + + + Options Indexes + AllowOverride None + Require all granted + + + SetHandler type-map + + # .tr is text/troff in mime.types! + + ForceType text/html + + + AddLanguage da .da + + SetEnvIf Request_URI ^/manual/(da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn)/ prefer-language=$1 + RedirectMatch 301 ^/manual(?:/(da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn)){2,}(/.*)?$ /manual/$1$2 + + LanguagePriority en da de es fr ja ko pt-br ru tr + ForceLanguagePriority Prefer Fallback + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-modsecurity.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-modsecurity.conf new file mode 100644 index 0000000..c204f37 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-modsecurity.conf @@ -0,0 +1,39 @@ +LoadFile /usr/local/lib/libxml2.so +LoadModule security2_module /usr/lib/apache/mod_security2.so + + # Default recommended configuration + SecRuleEngine On + SecRequestBodyAccess On + SecDefaultAction "phase:2,deny,log,status:406" + SecRequestBodyLimitAction ProcessPartial + SecResponseBodyLimitAction ProcessPartial + SecRequestBodyLimit 13107200 + SecRequestBodyNoFilesLimit 131072 + SecAuditLogFormat JSON + + SecPcreMatchLimit 250000 + SecPcreMatchLimitRecursion 250000 + + SecCollectionTimeout 600 + + SecDebugLog /var/log/httpd/modsec_debug.log + SecDebugLogLevel 0 + SecAuditEngine RelevantOnly + + + SecAuditLogDirMode 1733 + SecAuditLogFileMode 0550 + SecAuditLogType Concurrent + SecAuditLogStorageDir /var/log/modsec_audit + + SecAuditLog /var/log/httpd/modsec_audit.log + SecUploadDir /tmp + SecTmpDir /tmp + SecDataDir /tmp + SecTmpSaveUploadedFiles on + + # ModSecurity Core Rules Set and Local configuration + IncludeOptional /etc/modsecurity.d/*.conf.main + IncludeOptional /etc/modsecurity.d/*.conf + IncludeOptional /usr/local/directadmin/data/admin/modsecurity_rules + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-mpm.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-mpm.conf new file mode 100644 index 0000000..99f644a --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-mpm.conf @@ -0,0 +1,127 @@ +# +# Server-Pool Management (MPM specific) +# + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# +# Note that this is the default PidFile for most MPMs. +# + + PidFile "/var/run/httpd.pid" + + +# +# Only one of the below sections will be relevant on your +# installed httpd. Use "apachectl -l" to find out the +# active mpm. +# + +# +# Only one of the below sections will be relevant on your +# installed httpd. Use "apachectl -l" to find out the +# active mpm. +# + +# prefork MPM +# StartServers: number of server processes to start +# MinSpareServers: minimum number of server processes which are kept spare +# MaxSpareServers: maximum number of server processes which are kept spare +# MaxRequestWorkers: maximum number of server processes allowed to start +# MaxConnectionsPerChild: maximum number of connections a server process serves +# before terminating + + StartServers 5 + MinSpareServers 5 + MaxSpareServers 10 + ServerLimit 450 + MaxRequestWorkers 450 + MaxConnectionsPerChild 10000 + + +# worker MPM +# StartServers: initial number of server processes to start +# MinSpareThreads: minimum number of worker threads which are kept spare +# MaxSpareThreads: maximum number of worker threads which are kept spare +# ThreadsPerChild: constant number of worker threads in each server process +# MaxRequestWorkers: maximum number of worker threads +# MaxConnectionsPerChild: maximum number of connections a server process serves +# before terminating + + StartServers 6 + MinSpareThreads 50 + MaxSpareThreads 150 + ThreadsPerChild 50 + MaxRequestWorkers 300 + MaxConnectionsPerChild 10000 + + +# event MPM +# StartServers: initial number of server processes to start +# MinSpareThreads: minimum number of worker threads which are kept spare +# MaxSpareThreads: maximum number of worker threads which are kept spare +# ThreadsPerChild: constant number of worker threads in each server process +# MaxRequestWorkers: maximum number of worker threads +# MaxConnectionsPerChild: maximum number of connections a server process serves +# before terminating + + StartServers 6 + MinSpareThreads 32 + MaxSpareThreads 128 + ThreadsPerChild 64 + ServerLimit 32 + MaxRequestWorkers 2048 + MaxConnectionsPerChild 10000 + + +# NetWare MPM +# ThreadStackSize: Stack size allocated for each worker thread +# StartThreads: Number of worker threads launched at server startup +# MinSpareThreads: Minimum number of idle threads, to handle request spikes +# MaxSpareThreads: Maximum number of idle threads +# MaxThreads: Maximum number of worker threads alive at the same time +# MaxConnectionsPerChild: Maximum number of connections a thread serves. It +# is recommended that the default value of 0 be set +# for this directive on NetWare. This will allow the +# thread to continue to service requests indefinitely. + + ThreadStackSize 65536 + StartThreads 250 + MinSpareThreads 25 + MaxSpareThreads 250 + MaxThreads 1000 + MaxConnectionsPerChild 0 + + +# OS/2 MPM +# StartServers: Number of server processes to maintain +# MinSpareThreads: Minimum number of idle threads per process, +# to handle request spikes +# MaxSpareThreads: Maximum number of idle threads per process +# MaxConnectionsPerChild: Maximum number of connections per server process + + StartServers 2 + MinSpareThreads 5 + MaxSpareThreads 10 + MaxConnectionsPerChild 0 + + +# WinNT MPM +# ThreadsPerChild: constant number of worker threads in the server process +# MaxConnectionsPerChild: maximum number of connections a server process serves + + ThreadsPerChild 150 + MaxConnectionsPerChild 0 + + +# The maximum number of free Kbytes that every allocator is allowed +# to hold without calling free(). In threaded MPMs, every thread has its own +# allocator. When not set, or when set to zero, the threshold will be set to +# unlimited. + + MaxMemFree 2048 + + + MaxMemFree 100 + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-multilang-errordoc.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-multilang-errordoc.conf new file mode 100644 index 0000000..4ba6255 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-multilang-errordoc.conf @@ -0,0 +1,35 @@ +# +# The configuration below implements multi-language error documents through +# content-negotiation. +# +# Required modules: mod_alias, mod_authz_core, mod_authz_host, +# mod_include, mod_negotiation +# +# We use Alias to redirect any /error/HTTP_.html.var response to +# our collection of by-error message multi-language collections. We use +# includes to substitute the appropriate text. +# +# You can modify the messages' appearance without changing any of the +# default HTTP_.html.var files by adding the line: +# +# Alias /error/include/ "/your/include/path/" +# +# which allows you to create your own set of files by starting with the +# /var/www/error/include/ files and copying them to /your/include/path/, +# even on a per-VirtualHost basis. The default include files will display +# your Apache version number and your ServerAdmin email address regardless +# of the setting of ServerSignature. + +#Alias /error/ "/var/www/error/" + + + AllowOverride None + Options IncludesNoExec + AddOutputFilter Includes html + AddHandler type-map var + Require all granted + LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr + ForceLanguagePriority Prefer Fallback + + +ErrorDocument 404 /404.shtml diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf new file mode 100644 index 0000000..21c9c47 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf @@ -0,0 +1,3 @@ +SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 +SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 +SSLHonorCipherOrder off diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf new file mode 100644 index 0000000..d3fa923 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf @@ -0,0 +1,4 @@ +SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2 +SSLHonorCipherOrder off +SSLSessionTickets off + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.old.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.old.conf new file mode 100644 index 0000000..b1375bc --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl-protocol.old.conf @@ -0,0 +1,3 @@ +SSLProtocol All -SSLv2 -SSLv3 -TLSv1 +SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA +SSLHonorCipherOrder On diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl.conf new file mode 100644 index 0000000..5c3da0a --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-ssl.conf @@ -0,0 +1,242 @@ +# +# This is the Apache server configuration file providing SSL support. +# It contains the configuration directives to instruct the server how to +# serve pages over an https connection. For detailing information about these +# directives see +# +# Do NOT simply read the instructions in here without understanding +# what they do. They're here only as hints or reminders. If you are unsure +# consult the online docs. You have been warned. +# + +# +# Pseudo Random Number Generator (PRNG): +# Configure one or more sources to seed the PRNG of the SSL library. +# The seed data should be of good random quality. +# WARNING! On some platforms /dev/random blocks if not enough entropy +# is available. This means you then cannot use the /dev/random device +# because it would lead to very long connection times (as long as +# it requires to make more entropy available). But usually those +# platforms additionally provide a /dev/urandom device which doesn't +# block. So, if available, use this one instead. Read the mod_ssl User +# Manual for more details. +# +#SSLRandomSeed startup file:/dev/random 512 +#SSLRandomSeed startup file:/dev/urandom 512 +#SSLRandomSeed connect file:/dev/random 512 +#SSLRandomSeed connect file:/dev/urandom 512 + + +# +# When we also provide SSL we have to listen to the +# standard HTTP port (see above) and to the HTTPS port +# +# Note: Configurations that use IPv6 but not IPv4-mapped addresses need two +# Listen directives: "Listen [::]:443" and "Listen 0.0.0.0:443" +# +Listen |PORT_443| + +## +## SSL Global Context +## +## All SSL configuration in this context applies both to +## the main server and all SSL-enabled virtual hosts. +## + +# +# Some MIME-types for downloading Certificates and CRLs +# +AddType application/x-x509-ca-cert .crt +AddType application/x-pkcs7-crl .crl + +# Pass Phrase Dialog: +# Configure the pass phrase gathering process. +# The filtering dialog program (`builtin' is a internal +# terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog builtin + +# Inter-Process Session Cache: +# Configure the SSL Session Cache: First the mechanism +# to use and second the expiring timeout (in seconds). +#SSLSessionCache dbm:/var/logs/ssl_scache +SSLSessionCache shmcb:/var/log/httpd/ssl_scache(512000) +SSLSessionCacheTimeout 300 + +# Semaphore: +# Configure the path to the mutual exclusion semaphore the +# SSL engine uses internally for inter-process synchronization. +#SSLMutex file:/var/log/httpd/ssl_mutex + +# Disable SSLv2/3, TLSv1 +SSLProtocol All -SSLv2 -SSLv3 -TLSv1 +SSLHonorCipherOrder On +# https://mozilla.github.io/server-side-tls/ssl-config-generator/ intermediate configuration. +SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA + + +## +## SSL Virtual Host Context +## + + + +# General setup for the virtual host +DocumentRoot "/var/www/html" +ServerName www.example.com:|PORT_443| +ServerAdmin you@example.com +ErrorLog /var/log/httpd/error_log +TransferLog /var/log/httpd/access_log + +# SSL Engine Switch: +# Enable/Disable SSL for this virtual host. +SSLEngine on + +# SSL Cipher Suite: +# List the ciphers that the client is permitted to negotiate. +# See the mod_ssl documentation for a complete list. +# https://mozilla.github.io/server-side-tls/ssl-config-generator/ intermediate configuration. +SSLHonorCipherOrder On +SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA + + +# Server Certificate: +# Point SSLCertificateFile at a PEM encoded certificate. If +# the certificate is encrypted, then you will be prompted for a +# pass phrase. Note that a kill -HUP will prompt again. Keep +# in mind that if you have both an RSA and a DSA certificate you +# can configure both in parallel (to also allow the use of DSA +# ciphers, etc.) +SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt +#SSLCertificateFile /etc/httpd/conf/server-dsa.crt + +# Server Private Key: +# If the key is not combined with the certificate, use this +# directive to point at the key file. Keep in mind that if +# you've both a RSA and a DSA private key you can configure +# both in parallel (to also allow the use of DSA ciphers, etc.) +SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key +#SSLCertificateKeyFile /etc/httpd/conf/server-dsa.key + +# Server Certificate Chain: +# Point SSLCertificateChainFile at a file containing the +# concatenation of PEM encoded CA certificates which form the +# certificate chain for the server certificate. Alternatively +# the referenced file can be the same as SSLCertificateFile +# when the CA certificates are directly appended to the server +# certificate for convinience. +#SSLCertificateChainFile /etc/httpd/conf/server-ca.crt + +# Certificate Authority (CA): +# Set the CA certificate verification path where to find CA +# certificates for client authentication or alternatively one +# huge file containing all of them (file must be PEM encoded) +# Note: Inside SSLCACertificatePath you need hash symlinks +# to point to the certificate files. Use the provided +# Makefile to update the hash symlinks after changes. +SSLCACertificateFile /etc/httpd/conf/ssl.crt/server.ca +#SSLCACertificatePath /etc/httpd/conf/ssl.crt +#SSLCACertificateFile /etc/httpd/conf/ssl.crt/ca-bundle.crt + +# Certificate Revocation Lists (CRL): +# Set the CA revocation path where to find CA CRLs for client +# authentication or alternatively one huge file containing all +# of them (file must be PEM encoded) +# Note: Inside SSLCARevocationPath you need hash symlinks +# to point to the certificate files. Use the provided +# Makefile to update the hash symlinks after changes. +#SSLCARevocationPath /etc/httpd/conf/ssl.crl +#SSLCARevocationFile /etc/httpd/conf/ssl.crl/ca-bundle.crl + +# Client Authentication (Type): +# Client certificate verification type and depth. Types are +# none, optional, require and optional_no_ca. Depth is a +# number which specifies how deeply to verify the certificate +# issuer chain before deciding the certificate is not valid. +#SSLVerifyClient require +#SSLVerifyDepth 10 + +# Access Control: +# With SSLRequire you can do per-directory access control based +# on arbitrary complex boolean expressions containing server +# variable checks and other lookup directives. The syntax is a +# mixture between C and Perl. See the mod_ssl documentation +# for more details. +# +#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \ +# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ +# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \ +# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \ +# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \ +# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/ +# + +# SSL Engine Options: +# Set various options for the SSL engine. +# o FakeBasicAuth: +# Translate the client X.509 into a Basic Authorisation. This means that +# the standard Auth/DBMAuth methods can be used for access control. The +# user name is the `one line' version of the client's X.509 certificate. +# Note that no password is obtained from the user. Every entry in the user +# file needs this password: `xxj31ZMTZzkVA'. +# o ExportCertData: +# This exports two additional environment variables: SSL_CLIENT_CERT and +# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the +# server (always existing) and the client (only existing when client +# authentication is used). This can be used to import the certificates +# into CGI scripts. +# o StdEnvVars: +# This exports the standard SSL/TLS related `SSL_*' environment variables. +# Per default this exportation is switched off for performance reasons, +# because the extraction step is an expensive operation and is usually +# useless for serving static content. So one usually enables the +# exportation for CGI and SSI requests only. +# o StrictRequire: +# This denies access when "SSLRequireSSL" or "SSLRequire" applied even +# under a "Satisfy any" situation, i.e. when it applies access is denied +# and no other module can change it. +# o OptRenegotiate: +# This enables optimized SSL connection renegotiation handling when SSL +# directives are used in per-directory context. +#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + +# SSL Protocol Adjustments: +# The safe and default but still SSL/TLS standard compliant shutdown +# approach is that mod_ssl sends the close notify alert but doesn't wait for +# the close notify alert from client. When you need a different shutdown +# approach you can use one of the following variables: +# o ssl-unclean-shutdown: +# This forces an unclean shutdown when the connection is closed, i.e. no +# SSL close notify alert is send or allowed to received. This violates +# the SSL/TLS standard but is needed for some brain-dead browsers. Use +# this when you receive I/O errors because of the standard approach where +# mod_ssl sends the close notify alert. +# o ssl-accurate-shutdown: +# This forces an accurate shutdown when the connection is closed, i.e. a +# SSL close notify alert is send and mod_ssl waits for the close notify +# alert of the client. This is 100% SSL/TLS standard compliant, but in +# practice often causes hanging connections with brain-dead browsers. Use +# this only for browsers where you know that their SSL implementation +# works correctly. +# Notice: Most problems of broken clients are also related to the HTTP +# keep-alive facility, so you usually additionally want to disable +# keep-alive for those clients, too. Use variable "nokeepalive" for this. +# Similarly, one has to force some clients to use HTTP/1.0 to workaround +# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and +# "force-response-1.0" for this. +BrowserMatch ".*MSIE.*" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + +# Per-Server Logging: +# The home of a custom SSL log file. Use this when you want a +# compact non-error SSL logfile on a virtual host basis. +CustomLog /var/log/httpd/ssl_request_log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-userdir.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-userdir.conf new file mode 100644 index 0000000..f9dab44 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-userdir.conf @@ -0,0 +1,14 @@ +# Settings for user home directories +# +# Required module: mod_authz_core, mod_authz_host, mod_userdir + +# +# UserDir: The name of the directory that is appended onto a user's home +# directory if a ~user request is received. Note that you must also set +# the default access control for these directories, as in the example below. +# +UserDir disabled + + + DisableCgiOverride On + diff --git a/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-vhosts.conf b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-vhosts.conf new file mode 100644 index 0000000..663712f --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/extra/httpd-vhosts.conf @@ -0,0 +1,67 @@ +# +# Virtual Hosts +# +# Required modules: mod_log_config +# +# If you want to maintain multiple domains/hostnames on your +# machine you can setup VirtualHost containers for them. Most configurations +# use only name-based virtual hosts so the server doesn't need to worry about +# IP addresses. This is indicated by the asterisks in the directives below. +# +# Please see the documentation at +# +# for further details before you try to setup virtual hosts. +# +# You may use the command line option '-S' to verify your virtual host +# configuration. + +########################################################## +# Use name-based virtual hosting. # +# All NameVirtualHost lines are in this file # +# Don't remove this line or apache will generate errors. # +########################################################## +Include /etc/httpd/conf/ips.conf + +# +# VirtualHost example: +# Almost any Apache directive may go into a VirtualHost container. +# The first VirtualHost section is used for all requests that do not +# match a ServerName or ServerAlias in any block. +# + + ServerAdmin webmaster@localhost + UserDir public_html + DocumentRoot /var/www/html + ServerName localhost + ScriptAlias /cgi-bin/ /var/www/cgi-bin/ + CustomLog /var/log/httpd/homedir.log homedir + CustomLog /var/log/httpd/access_log combined + ErrorLog /var/log/httpd/error_log + + + SuexecUserGroup webapps webapps + + + + + ServerAdmin webmaster@localhost + UserDir public_html + DocumentRoot /var/www/html + ServerName localhost + ScriptAlias /cgi-bin/ /var/www/cgi-bin/ + CustomLog /var/log/httpd/homedir.log homedir + CustomLog /var/log/httpd/access_log combined + ErrorLog /var/log/httpd/error_log + + SSLEngine on + SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt + SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key + SSLCACertificateFile /etc/httpd/conf/ssl.crt/server.ca + + + SuexecUserGroup webapps webapps + + + + + diff --git a/services/custombuild/custombuild/configure/ap2/conf/httpd.conf b/services/custombuild/custombuild/configure/ap2/conf/httpd.conf new file mode 100644 index 0000000..fde4281 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/httpd.conf @@ -0,0 +1,234 @@ +# +# This is the main Apache HTTP server configuration file. It contains the +# configuration directives that give the server its instructions. +# See for detailed information. +# In particular, see +# +# for a discussion of each configuration directive. +# +# Do NOT simply read the instructions in here without understanding +# what they do. They're here only as hints or reminders. If you are unsure +# consult the online docs. You have been warned. + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# Do not add a slash at the end of the directory path. If you point +# ServerRoot at a non-local disk, be sure to specify a local disk on the +# Mutex directive, if file-based mutexes are used. If you wish to share the +# same ServerRoot for multiple httpd daemons, you will need to change at +# least PidFile. +# +ServerRoot "/etc/httpd" + +# +# Listen: Allows you to bind Apache to specific IP addresses and/or +# ports, instead of the default. See also the +# directive. +# +# Change this to Listen on specific IP addresses as shown below to +# prevent Apache from glomming onto all bound IP addresses. +# +#Listen 12.34.56.78:80 +Listen |PORT_80| + + +# +# If you wish httpd to run as a different user or group, you must run +# httpd as root initially and it will switch. +# +# User/Group: The name (or #number) of the user/group to run httpd as. +# It is usually good practice to create a dedicated user and group for +# running httpd, as with most system services. +# +User apache +Group apache + + +#LoadModule dummy_module /usr/lib/apache/mod_dummy.so +Include /etc/httpd/conf/extra/httpd-phpmodules.conf + +# +# ServerAdmin: Your address, where problems with the server should be +# e-mailed. This address appears on some server-generated pages, such +# as error documents. e.g. admin@your-domain.com +# +ServerAdmin admin@localhost +DocumentRoot "/var/www/html" + + + Include /etc/httpd/conf/extra/httpd-directoryindex.conf + + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# + + Require all denied + + +# +# The following lines prevent .user.ini files from being viewed by Web clients. +# + + Require all denied + + +# +# The following lines prevent .env files from being viewed by Web clients. +# + + Require all denied + + +# +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a +# container, error messages relating to that virtual host will be +# logged here. If you *do* define an error logfile for a +# container, that host's errors will be logged there and not here. +# +ErrorLog /var/log/httpd/error_log + +# +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +# +LogLevel warn + + + #replace %b with %O for more accurate logging + + LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%a %l %u %t \"%r\" %>s %O" common + LogFormat "%O %I" bytes + + LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio + + + CustomLog /var/log/httpd/access_log common + + + + # Include some DirectAdmin alias + Include conf/extra/httpd-alias.conf + + +#DefaultType text/plain + + + TypesConfig conf/mime.types + AddType application/x-gzip .tgz + AddEncoding x-compress .Z + AddEncoding x-gzip .gz .tgz + AddType application/x-compress .Z + AddType application/x-gzip .gz .tgz + AddHandler cgi-script .cgi + AddHandler type-map var + AddType text/html .shtml + AddOutputFilter INCLUDES .shtml + AddType video/x-ms-asf .avi + AddType video/mpeg .mpg + AddType video/mpeg .mpeg + AddType video/quicktime .mov + AddType video/x-ms-wmv .wmv + + +# +# MaxRanges: Maximum number of Ranges in a request before +# returning the entire resource, or one of the special +# values 'default', 'none' or 'unlimited'. +# Default setting is to accept 200 Ranges. +#MaxRanges unlimited + +# +# EnableMMAP and EnableSendfile: On systems that support it, +# memory-mapping or the sendfile syscall may be used to deliver +# files. This usually improves server performance, but must +# be turned off when serving from networked-mounted +# filesystems or if support for these functions is otherwise +# broken on your system. +# Defaults: EnableMMAP On, EnableSendfile Off +# +#EnableMMAP off +#EnableSendfile off + +####################################################################################### +# For user configurations not maintained by DirectAdmin. Empty by default. +####################################################################################### + +Include conf/extra/httpd-includes.conf + +####################################################################################### +# Supplemental configuration +####################################################################################### + +# CloudFlare whitelisted IPs +Include conf/extra/httpd-cloudflare.conf + +# Options and AllowOverrides +Include conf/extra/httpd-directories.conf + +# Nginx reverse proxy configuration +Include conf/extra/httpd-nginx.conf + +# Server-pool management (MPM specific) +Include conf/extra/httpd-mpm.conf + +# Multi-language error messages +Include conf/extra/httpd-multilang-errordoc.conf + +# Fancy directory listings +Include conf/extra/httpd-autoindex.conf + +# Language settings +Include conf/extra/httpd-languages.conf + +# User home directories +#Include conf/extra/httpd-userdir.conf + +# Real-time info on requests and configuration +Include conf/extra/httpd-info.conf + +# Suphp +Include conf/extra/httpd-suphp.conf + +# Local access to the Apache HTTP Server Manual +#Include conf/extra/httpd-manual.conf + +# Distributed authoring and versioning (WebDAV) +Include conf/extra/httpd-dav.conf + +# Various default settings +Include conf/extra/httpd-default.conf + +# Secure (SSL/TLS) connections +Include conf/extra/httpd-ssl.conf + +# Deflate module settings +Include conf/extra/httpd-deflate.conf + +####################################################################################### +# Do not change anything in files below, because they are rewritten by DirectAdmin # +####################################################################################### + +# This is needed for PHP +Include conf/extra/httpd-php-handlers.conf + +# Virtual hosts +Include conf/extra/httpd-vhosts.conf + +# All the DirectAdmin vhosts +Include conf/extra/directadmin-vhosts.conf + +####################################################################################### +# End of included files that are rewritten by DirectAdmin # +####################################################################################### + + +SSLRandomSeed startup builtin +SSLRandomSeed connect builtin + diff --git a/services/custombuild/custombuild/configure/ap2/conf/magic b/services/custombuild/custombuild/configure/ap2/conf/magic new file mode 100644 index 0000000..7c56119 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/magic @@ -0,0 +1,385 @@ +# Magic data for mod_mime_magic Apache module (originally for file(1) command) +# The module is described in /manual/mod/mod_mime_magic.html +# +# The format is 4-5 columns: +# Column #1: byte number to begin checking from, ">" indicates continuation +# Column #2: type of data to match +# Column #3: contents of data to match +# Column #4: MIME type of result +# Column #5: MIME encoding of result (optional) + +#------------------------------------------------------------------------------ +# Localstuff: file(1) magic for locally observed files +# Add any locally observed files here. + +#------------------------------------------------------------------------------ +# end local stuff +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Java + +0 short 0xcafe +>2 short 0xbabe application/java + +#------------------------------------------------------------------------------ +# audio: file(1) magic for sound formats +# +# from Jan Nicolai Langfeldt , +# + +# Sun/NeXT audio data +0 string .snd +>12 belong 1 audio/basic +>12 belong 2 audio/basic +>12 belong 3 audio/basic +>12 belong 4 audio/basic +>12 belong 5 audio/basic +>12 belong 6 audio/basic +>12 belong 7 audio/basic + +>12 belong 23 audio/x-adpcm + +# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format +# that uses little-endian encoding and has a different magic number +# (0x0064732E in little-endian encoding). +0 lelong 0x0064732E +>12 lelong 1 audio/x-dec-basic +>12 lelong 2 audio/x-dec-basic +>12 lelong 3 audio/x-dec-basic +>12 lelong 4 audio/x-dec-basic +>12 lelong 5 audio/x-dec-basic +>12 lelong 6 audio/x-dec-basic +>12 lelong 7 audio/x-dec-basic +# compressed (G.721 ADPCM) +>12 lelong 23 audio/x-dec-adpcm + +# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM" +# AIFF audio data +8 string AIFF audio/x-aiff +# AIFF-C audio data +8 string AIFC audio/x-aiff +# IFF/8SVX audio data +8 string 8SVX audio/x-aiff + +# Creative Labs AUDIO stuff +# Standard MIDI data +0 string MThd audio/unknown +#>9 byte >0 (format %d) +#>11 byte >1 using %d channels +# Creative Music (CMF) data +0 string CTMF audio/unknown +# SoundBlaster instrument data +0 string SBI audio/unknown +# Creative Labs voice data +0 string Creative\ Voice\ File audio/unknown +## is this next line right? it came this way... +#>19 byte 0x1A +#>23 byte >0 - version %d +#>22 byte >0 \b.%d + +# [GRR 950115: is this also Creative Labs? Guessing that first line +# should be string instead of unknown-endian long...] +#0 long 0x4e54524b MultiTrack sound data +#0 string NTRK MultiTrack sound data +#>4 long x - version %ld + +# Microsoft WAVE format (*.wav) +# [GRR 950115: probably all of the shorts and longs should be leshort/lelong] +# Microsoft RIFF +0 string RIFF audio/unknown +# - WAVE format +>8 string WAVE audio/x-wav +# MPEG audio. +0 beshort&0xfff0 0xfff0 audio/mpeg +# C64 SID Music files, from Linus Walleij +0 string PSID audio/prs.sid + +#------------------------------------------------------------------------------ +# c-lang: file(1) magic for C programs or various scripts +# + +# XPM icons (Greg Roelofs, newt@uchicago.edu) +# ideally should go into "images", but entries below would tag XPM as C source +0 string /*\ XPM image/x-xbm 7bit + +# this first will upset you if you're a PL/1 shop... (are there any left?) +# in which case rm it; ascmagic will catch real C programs +# C or REXX program text +0 string /* text/plain +# C++ program text +0 string // text/plain + +#------------------------------------------------------------------------------ +# compress: file(1) magic for pure-compression formats (no archives) +# +# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, whap, etc. +# +# Formats for various forms of compressed data +# Formats for "compress" proper have been moved into "compress.c", +# because it tries to uncompress it to figure out what's inside. + +# standard unix compress +0 string \037\235 application/octet-stream x-compress + +# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver) +0 string \037\213 application/octet-stream x-gzip + +# According to gzip.h, this is the correct byte order for packed data. +0 string \037\036 application/octet-stream +# +# This magic number is byte-order-independent. +# +0 short 017437 application/octet-stream + +# XXX - why *two* entries for "compacted data", one of which is +# byte-order independent, and one of which is byte-order dependent? +# +# compacted data +0 short 0x1fff application/octet-stream +0 string \377\037 application/octet-stream +# huf output +0 short 0145405 application/octet-stream + +# Squeeze and Crunch... +# These numbers were gleaned from the Unix versions of the programs to +# handle these formats. Note that I can only uncrunch, not crunch, and +# I didn't have a crunched file handy, so the crunch number is untested. +# Keith Waclena +#0 leshort 0x76FF squeezed data (CP/M, DOS) +#0 leshort 0x76FE crunched data (CP/M, DOS) + +# Freeze +#0 string \037\237 Frozen file 2.1 +#0 string \037\236 Frozen file 1.0 (or gzip 0.5) + +# lzh? +#0 string \037\240 LZH compressed data + +#------------------------------------------------------------------------------ +# frame: file(1) magic for FrameMaker files +# +# This stuff came on a FrameMaker demo tape, most of which is +# copyright, but this file is "published" as witness the following: +# +0 string \ +# and Anna Shergold +# +0 string \ +0 string \14 byte 12 (OS/2 1.x format) +#>14 byte 64 (OS/2 2.x format) +#>14 byte 40 (Windows 3.x format) +#0 string IC icon +#0 string PI pointer +#0 string CI color icon +#0 string CP color pointer +#0 string BA bitmap array + +0 string \x89PNG image/png +0 string FWS application/x-shockwave-flash +0 string CWS application/x-shockwave-flash + +#------------------------------------------------------------------------------ +# lisp: file(1) magic for lisp programs +# +# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) +0 string ;; text/plain 8bit +# Emacs 18 - this is always correct, but not very magical. +0 string \012( application/x-elc +# Emacs 19 +0 string ;ELC\023\000\000\000 application/x-elc + +#------------------------------------------------------------------------------ +# mail.news: file(1) magic for mail and news +# +# There are tests to ascmagic.c to cope with mail and news. +0 string Relay-Version: message/rfc822 7bit +0 string #!\ rnews message/rfc822 7bit +0 string N#!\ rnews message/rfc822 7bit +0 string Forward\ to message/rfc822 7bit +0 string Pipe\ to message/rfc822 7bit +0 string Return-Path: message/rfc822 7bit +0 string Path: message/news 8bit +0 string Xref: message/news 8bit +0 string From: message/rfc822 7bit +0 string Article message/news 8bit +#------------------------------------------------------------------------------ +# msword: file(1) magic for MS Word files +# +# Contributor claims: +# Reversed-engineered MS Word magic numbers +# + +0 string \376\067\0\043 application/msword +0 string \333\245-\0\0\0 application/msword + +# disable this one because it applies also to other +# Office/OLE documents for which msword is not correct. See PR#2608. +#0 string \320\317\021\340\241\261 application/msword + + + +#------------------------------------------------------------------------------ +# printer: file(1) magic for printer-formatted files +# + +# PostScript +0 string %! application/postscript +0 string \004%! application/postscript + +# Acrobat +# (due to clamen@cs.cmu.edu) +0 string %PDF- application/pdf + +#------------------------------------------------------------------------------ +# sc: file(1) magic for "sc" spreadsheet +# +38 string Spreadsheet application/x-sc + +#------------------------------------------------------------------------------ +# tex: file(1) magic for TeX files +# +# XXX - needs byte-endian stuff (big-endian and little-endian DVI?) +# +# From + +# Although we may know the offset of certain text fields in TeX DVI +# and font files, we can't use them reliably because they are not +# zero terminated. [but we do anyway, christos] +0 string \367\002 application/x-dvi +#0 string \367\203 TeX generic font data +#0 string \367\131 TeX packed font data +#0 string \367\312 TeX virtual font data +#0 string This\ is\ TeX, TeX transcript text +#0 string This\ is\ METAFONT, METAFONT transcript text + +# There is no way to detect TeX Font Metric (*.tfm) files without +# breaking them apart and reading the data. The following patterns +# match most *.tfm files generated by METAFONT or afm2tfm. +#2 string \000\021 TeX font metric data +#2 string \000\022 TeX font metric data +#>34 string >\0 (%s) + +# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com) +#0 string \\input\ texinfo Texinfo source text +#0 string This\ is\ Info\ file GNU Info text + +# correct TeX magic for Linux (and maybe more) +# from Peter Tobias (tobias@server.et-inf.fho-emden.de) +# +0 leshort 0x02f7 application/x-dvi + +# RTF - Rich Text Format +0 string {\\rtf application/rtf + +#------------------------------------------------------------------------------ +# animation: file(1) magic for animation/movie formats +# +# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8) +# MPEG file +0 string \000\000\001\263 video/mpeg +# +# The contributor claims: +# I couldn't find a real magic number for these, however, this +# -appears- to work. Note that it might catch other files, too, +# so BE CAREFUL! +# +# Note that title and author appear in the two 20-byte chunks +# at decimal offsets 2 and 22, respectively, but they are XOR'ed with +# 255 (hex FF)! DL format SUCKS BIG ROCKS. +# +# DL file version 1 , medium format (160x100, 4 images/screen) +0 byte 1 video/unknown +0 byte 2 video/unknown +# Quicktime video, from Linus Walleij +# from Apple quicktime file format documentation. +4 string moov video/quicktime +4 string mdat video/quicktime + diff --git a/services/custombuild/custombuild/configure/ap2/conf/mime.types b/services/custombuild/custombuild/configure/ap2/conf/mime.types new file mode 100644 index 0000000..b3cae2e --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/conf/mime.types @@ -0,0 +1,1510 @@ +# This file maps Internet media types to unique file extension(s). +# Although created for httpd, this file is used by many software systems +# and has been placed in the public domain for unlimited redisribution. +# +# The table below contains both registered and (common) unregistered types. +# A type that has no unique extension can be ignored -- they are listed +# here to guide configurations toward known types and to make it easier to +# identify "new" types. File extensions are also commonly used to indicate +# content languages and encodings, so choose them carefully. +# +# Internet media types should be registered as described in RFC 4288. +# The registry is at . +# +# MIME type (lowercased) Extensions +# ============================================ ========== +# application/1d-interleaved-parityfec +# application/3gpp-ims+xml +# application/activemessage +application/andrew-inset ez +# application/applefile +application/applixware aw +application/atom+xml atom +application/atomcat+xml atomcat +# application/atomicmail +application/atomsvc+xml atomsvc +# application/auth-policy+xml +# application/batch-smtp +# application/beep+xml +# application/calendar+xml +# application/cals-1840 +# application/ccmp+xml +application/ccxml+xml ccxml +application/cdmi-capability cdmia +application/cdmi-container cdmic +application/cdmi-domain cdmid +application/cdmi-object cdmio +application/cdmi-queue cdmiq +# application/cea-2018+xml +# application/cellml+xml +# application/cfw +# application/cnrp+xml +# application/commonground +# application/conference-info+xml +# application/cpl+xml +# application/csta+xml +# application/cstadata+xml +application/cu-seeme cu +# application/cybercash +application/davmount+xml davmount +# application/dca-rft +# application/dec-dx +# application/dialog-info+xml +# application/dicom +# application/dns +# application/dskpp+xml +application/dssc+der dssc +application/dssc+xml xdssc +# application/dvcs +application/ecmascript ecma +# application/edi-consent +# application/edi-x12 +# application/edifact +application/emma+xml emma +# application/epp+xml +application/epub+zip epub +# application/eshop +# application/example +application/exi exi +# application/fastinfoset +# application/fastsoap +# application/fits +application/font-tdpfr pfr +# application/framework-attributes+xml +# application/h224 +# application/held+xml +# application/http +application/hyperstudio stk +# application/ibe-key-request+xml +# application/ibe-pkg-reply+xml +# application/ibe-pp-data +# application/iges +# application/im-iscomposing+xml +# application/index +# application/index.cmd +# application/index.obj +# application/index.response +# application/index.vnd +application/inkml+xml ink inkml +# application/iotp +application/ipfix ipfix +# application/ipp +# application/isup +application/java-archive jar +application/java-serialized-object ser +application/java-vm class +application/javascript js +application/json json +# application/kpml-request+xml +# application/kpml-response+xml +application/lost+xml lostxml +application/mac-binhex40 hqx +application/mac-compactpro cpt +# application/macwriteii +application/mads+xml mads +application/marc mrc +application/marcxml+xml mrcx +application/mathematica ma nb mb +# application/mathml-content+xml +# application/mathml-presentation+xml +application/mathml+xml mathml +# application/mbms-associated-procedure-description+xml +# application/mbms-deregister+xml +# application/mbms-envelope+xml +# application/mbms-msk+xml +# application/mbms-msk-response+xml +# application/mbms-protection-description+xml +# application/mbms-reception-report+xml +# application/mbms-register+xml +# application/mbms-register-response+xml +# application/mbms-user-service-description+xml +application/mbox mbox +# application/media_control+xml +application/mediaservercontrol+xml mscml +application/metalink4+xml meta4 +application/mets+xml mets +# application/mikey +application/mods+xml mods +# application/moss-keys +# application/moss-signature +# application/mosskey-data +# application/mosskey-request +application/mp21 m21 mp21 +application/mp4 mp4s +# application/mpeg4-generic +# application/mpeg4-iod +# application/mpeg4-iod-xmt +# application/msc-ivr+xml +# application/msc-mixer+xml +application/msword doc dot +application/mxf mxf +# application/nasdata +# application/news-checkgroups +# application/news-groupinfo +# application/news-transmission +# application/nss +# application/ocsp-request +# application/ocsp-response +application/octet-stream bin dms lha lrf lzh so iso dmg dist distz pkg bpk dump elc deploy +application/oda oda +application/oebps-package+xml opf +application/ogg ogx +application/onenote onetoc onetoc2 onetmp onepkg +application/oxps oxps +# application/parityfec +application/patch-ops-error+xml xer +application/pdf pdf +application/pgp-encrypted pgp +# application/pgp-keys +application/pgp-signature asc sig +application/pics-rules prf +# application/pidf+xml +# application/pidf-diff+xml +application/pkcs10 p10 +application/pkcs7-mime p7m p7c +application/pkcs7-signature p7s +application/pkcs8 p8 +application/pkix-attr-cert ac +application/pkix-cert cer +application/pkix-crl crl +application/pkix-pkipath pkipath +application/pkixcmp pki +application/pls+xml pls +# application/poc-settings+xml +application/postscript ai eps ps +# application/prs.alvestrand.titrax-sheet +application/prs.cww cww +# application/prs.nprend +# application/prs.plucker +# application/prs.rdf-xml-crypt +# application/prs.xsf+xml +application/pskc+xml pskcxml +# application/qsig +application/rdf+xml rdf +application/reginfo+xml rif +application/relax-ng-compact-syntax rnc +# application/remote-printing +application/resource-lists+xml rl +application/resource-lists-diff+xml rld +# application/riscos +# application/rlmi+xml +application/rls-services+xml rs +application/rpki-ghostbusters gbr +application/rpki-manifest mft +application/rpki-roa roa +# application/rpki-updown +application/rsd+xml rsd +application/rss+xml rss +application/rtf rtf +# application/rtx +# application/samlassertion+xml +# application/samlmetadata+xml +application/sbml+xml sbml +application/scvp-cv-request scq +application/scvp-cv-response scs +application/scvp-vp-request spq +application/scvp-vp-response spp +application/sdp sdp +# application/set-payment +application/set-payment-initiation setpay +# application/set-registration +application/set-registration-initiation setreg +# application/sgml +# application/sgml-open-catalog +application/shf+xml shf +# application/sieve +# application/simple-filter+xml +# application/simple-message-summary +# application/simplesymbolcontainer +# application/slate +# application/smil +application/smil+xml smi smil +# application/soap+fastinfoset +# application/soap+xml +application/sparql-query rq +application/sparql-results+xml srx +# application/spirits-event+xml +application/srgs gram +application/srgs+xml grxml +application/sru+xml sru +application/ssml+xml ssml +# application/tamp-apex-update +# application/tamp-apex-update-confirm +# application/tamp-community-update +# application/tamp-community-update-confirm +# application/tamp-error +# application/tamp-sequence-adjust +# application/tamp-sequence-adjust-confirm +# application/tamp-status-query +# application/tamp-status-response +# application/tamp-update +# application/tamp-update-confirm +application/tei+xml tei teicorpus +application/thraud+xml tfi +# application/timestamp-query +# application/timestamp-reply +application/timestamped-data tsd +# application/tve-trigger +# application/ulpfec +# application/vcard+xml +# application/vemmi +# application/vividence.scriptfile +# application/vnd.3gpp.bsf+xml +application/vnd.3gpp.pic-bw-large plb +application/vnd.3gpp.pic-bw-small psb +application/vnd.3gpp.pic-bw-var pvb +# application/vnd.3gpp.sms +# application/vnd.3gpp2.bcmcsinfo+xml +# application/vnd.3gpp2.sms +application/vnd.3gpp2.tcap tcap +application/vnd.3m.post-it-notes pwn +application/vnd.accpac.simply.aso aso +application/vnd.accpac.simply.imp imp +application/vnd.acucobol acu +application/vnd.acucorp atc acutc +application/vnd.adobe.air-application-installer-package+zip air +application/vnd.adobe.fxp fxp fxpl +# application/vnd.adobe.partial-upload +application/vnd.adobe.xdp+xml xdp +application/vnd.adobe.xfdf xfdf +# application/vnd.aether.imp +# application/vnd.ah-barcode +application/vnd.ahead.space ahead +application/vnd.airzip.filesecure.azf azf +application/vnd.airzip.filesecure.azs azs +application/vnd.amazon.ebook azw +application/vnd.americandynamics.acc acc +application/vnd.amiga.ami ami +# application/vnd.amundsen.maze+xml +application/vnd.android.package-archive apk +application/vnd.anser-web-certificate-issue-initiation cii +application/vnd.anser-web-funds-transfer-initiation fti +application/vnd.antix.game-component atx +application/vnd.apple.installer+xml mpkg +application/vnd.apple.mpegurl m3u8 +# application/vnd.arastra.swi +application/vnd.aristanetworks.swi swi +application/vnd.astraea-software.iota iota +application/vnd.audiograph aep +# application/vnd.autopackage +# application/vnd.avistar+xml +application/vnd.blueice.multipass mpm +# application/vnd.bluetooth.ep.oob +application/vnd.bmi bmi +application/vnd.businessobjects rep +# application/vnd.cab-jscript +# application/vnd.canon-cpdl +# application/vnd.canon-lips +# application/vnd.cendio.thinlinc.clientconf +application/vnd.chemdraw+xml cdxml +application/vnd.chipnuts.karaoke-mmd mmd +application/vnd.cinderella cdy +# application/vnd.cirpack.isdn-ext +application/vnd.claymore cla +application/vnd.cloanto.rp9 rp9 +application/vnd.clonk.c4group c4g c4d c4f c4p c4u +application/vnd.cluetrust.cartomobile-config c11amc +application/vnd.cluetrust.cartomobile-config-pkg c11amz +# application/vnd.collection+json +# application/vnd.commerce-battelle +application/vnd.commonspace csp +application/vnd.contact.cmsg cdbcmsg +application/vnd.cosmocaller cmc +application/vnd.crick.clicker clkx +application/vnd.crick.clicker.keyboard clkk +application/vnd.crick.clicker.palette clkp +application/vnd.crick.clicker.template clkt +application/vnd.crick.clicker.wordbank clkw +application/vnd.criticaltools.wbs+xml wbs +application/vnd.ctc-posml pml +# application/vnd.ctct.ws+xml +# application/vnd.cups-pdf +# application/vnd.cups-postscript +application/vnd.cups-ppd ppd +# application/vnd.cups-raster +# application/vnd.cups-raw +# application/vnd.curl +application/vnd.curl.car car +application/vnd.curl.pcurl pcurl +# application/vnd.cybank +application/vnd.data-vision.rdz rdz +application/vnd.dece.data uvf uvvf uvd uvvd +application/vnd.dece.ttml+xml uvt uvvt +application/vnd.dece.unspecified uvx uvvx +application/vnd.dece.zip uvz uvvz +application/vnd.denovo.fcselayout-link fe_launch +# application/vnd.dir-bi.plate-dl-nosuffix +application/vnd.dna dna +application/vnd.dolby.mlp mlp +# application/vnd.dolby.mobile.1 +# application/vnd.dolby.mobile.2 +application/vnd.dpgraph dpg +application/vnd.dreamfactory dfac +application/vnd.dvb.ait ait +# application/vnd.dvb.dvbj +# application/vnd.dvb.esgcontainer +# application/vnd.dvb.ipdcdftnotifaccess +# application/vnd.dvb.ipdcesgaccess +# application/vnd.dvb.ipdcesgaccess2 +# application/vnd.dvb.ipdcesgpdd +# application/vnd.dvb.ipdcroaming +# application/vnd.dvb.iptv.alfec-base +# application/vnd.dvb.iptv.alfec-enhancement +# application/vnd.dvb.notif-aggregate-root+xml +# application/vnd.dvb.notif-container+xml +# application/vnd.dvb.notif-generic+xml +# application/vnd.dvb.notif-ia-msglist+xml +# application/vnd.dvb.notif-ia-registration-request+xml +# application/vnd.dvb.notif-ia-registration-response+xml +# application/vnd.dvb.notif-init+xml +# application/vnd.dvb.pfr +application/vnd.dvb.service svc +# application/vnd.dxr +application/vnd.dynageo geo +# application/vnd.easykaraoke.cdgdownload +# application/vnd.ecdis-update +application/vnd.ecowin.chart mag +# application/vnd.ecowin.filerequest +# application/vnd.ecowin.fileupdate +# application/vnd.ecowin.series +# application/vnd.ecowin.seriesrequest +# application/vnd.ecowin.seriesupdate +# application/vnd.emclient.accessrequest+xml +application/vnd.enliven nml +# application/vnd.eprints.data+xml +application/vnd.epson.esf esf +application/vnd.epson.msf msf +application/vnd.epson.quickanime qam +application/vnd.epson.salt slt +application/vnd.epson.ssf ssf +# application/vnd.ericsson.quickcall +application/vnd.eszigno3+xml es3 et3 +# application/vnd.etsi.aoc+xml +# application/vnd.etsi.cug+xml +# application/vnd.etsi.iptvcommand+xml +# application/vnd.etsi.iptvdiscovery+xml +# application/vnd.etsi.iptvprofile+xml +# application/vnd.etsi.iptvsad-bc+xml +# application/vnd.etsi.iptvsad-cod+xml +# application/vnd.etsi.iptvsad-npvr+xml +# application/vnd.etsi.iptvservice+xml +# application/vnd.etsi.iptvsync+xml +# application/vnd.etsi.iptvueprofile+xml +# application/vnd.etsi.mcid+xml +# application/vnd.etsi.overload-control-policy-dataset+xml +# application/vnd.etsi.sci+xml +# application/vnd.etsi.simservs+xml +# application/vnd.etsi.tsl+xml +# application/vnd.etsi.tsl.der +# application/vnd.eudora.data +application/vnd.ezpix-album ez2 +application/vnd.ezpix-package ez3 +# application/vnd.f-secure.mobile +application/vnd.fdf fdf +application/vnd.fdsn.mseed mseed +application/vnd.fdsn.seed seed dataless +# application/vnd.ffsns +# application/vnd.fints +application/vnd.flographit gph +application/vnd.fluxtime.clip ftc +# application/vnd.font-fontforge-sfd +application/vnd.framemaker fm frame maker book +application/vnd.frogans.fnc fnc +application/vnd.frogans.ltf ltf +application/vnd.fsc.weblaunch fsc +application/vnd.fujitsu.oasys oas +application/vnd.fujitsu.oasys2 oa2 +application/vnd.fujitsu.oasys3 oa3 +application/vnd.fujitsu.oasysgp fg5 +application/vnd.fujitsu.oasysprs bh2 +# application/vnd.fujixerox.art-ex +# application/vnd.fujixerox.art4 +# application/vnd.fujixerox.hbpl +application/vnd.fujixerox.ddd ddd +application/vnd.fujixerox.docuworks xdw +application/vnd.fujixerox.docuworks.binder xbd +# application/vnd.fut-misnet +application/vnd.fuzzysheet fzs +application/vnd.genomatix.tuxedo txd +# application/vnd.geocube+xml +application/vnd.geogebra.file ggb +application/vnd.geogebra.tool ggt +application/vnd.geometry-explorer gex gre +application/vnd.geonext gxt +application/vnd.geoplan g2w +application/vnd.geospace g3w +# application/vnd.globalplatform.card-content-mgt +# application/vnd.globalplatform.card-content-mgt-response +application/vnd.gmx gmx +application/vnd.google-earth.kml+xml kml +application/vnd.google-earth.kmz kmz +application/vnd.grafeq gqf gqs +# application/vnd.gridmp +application/vnd.groove-account gac +application/vnd.groove-help ghf +application/vnd.groove-identity-message gim +application/vnd.groove-injector grv +application/vnd.groove-tool-message gtm +application/vnd.groove-tool-template tpl +application/vnd.groove-vcard vcg +# application/vnd.hal+json +application/vnd.hal+xml hal +application/vnd.handheld-entertainment+xml zmm +application/vnd.hbci hbci +# application/vnd.hcl-bireports +application/vnd.hhe.lesson-player les +application/vnd.hp-hpgl hpgl +application/vnd.hp-hpid hpid +application/vnd.hp-hps hps +application/vnd.hp-jlyt jlt +application/vnd.hp-pcl pcl +application/vnd.hp-pclxl pclxl +# application/vnd.httphone +application/vnd.hydrostatix.sof-data sfd-hdstx +application/vnd.hzn-3d-crossword x3d +# application/vnd.ibm.afplinedata +# application/vnd.ibm.electronic-media +application/vnd.ibm.minipay mpy +application/vnd.ibm.modcap afp listafp list3820 +application/vnd.ibm.rights-management irm +application/vnd.ibm.secure-container sc +application/vnd.iccprofile icc icm +application/vnd.igloader igl +application/vnd.immervision-ivp ivp +application/vnd.immervision-ivu ivu +# application/vnd.informedcontrol.rms+xml +# application/vnd.informix-visionary +# application/vnd.infotech.project +# application/vnd.infotech.project+xml +application/vnd.insors.igm igm +application/vnd.intercon.formnet xpw xpx +application/vnd.intergeo i2g +# application/vnd.intertrust.digibox +# application/vnd.intertrust.nncp +application/vnd.intu.qbo qbo +application/vnd.intu.qfx qfx +# application/vnd.iptc.g2.conceptitem+xml +# application/vnd.iptc.g2.knowledgeitem+xml +# application/vnd.iptc.g2.newsitem+xml +# application/vnd.iptc.g2.packageitem+xml +application/vnd.ipunplugged.rcprofile rcprofile +application/vnd.irepository.package+xml irp +application/vnd.is-xpr xpr +application/vnd.isac.fcs fcs +application/vnd.jam jam +# application/vnd.japannet-directory-service +# application/vnd.japannet-jpnstore-wakeup +# application/vnd.japannet-payment-wakeup +# application/vnd.japannet-registration +# application/vnd.japannet-registration-wakeup +# application/vnd.japannet-setstore-wakeup +# application/vnd.japannet-verification +# application/vnd.japannet-verification-wakeup +application/vnd.jcp.javame.midlet-rms rms +application/vnd.jisp jisp +application/vnd.joost.joda-archive joda +application/vnd.kahootz ktz ktr +application/vnd.kde.karbon karbon +application/vnd.kde.kchart chrt +application/vnd.kde.kformula kfo +application/vnd.kde.kivio flw +application/vnd.kde.kontour kon +application/vnd.kde.kpresenter kpr kpt +application/vnd.kde.kspread ksp +application/vnd.kde.kword kwd kwt +application/vnd.kenameaapp htke +application/vnd.kidspiration kia +application/vnd.kinar kne knp +application/vnd.koan skp skd skt skm +application/vnd.kodak-descriptor sse +application/vnd.las.las+xml lasxml +# application/vnd.liberty-request+xml +application/vnd.llamagraphics.life-balance.desktop lbd +application/vnd.llamagraphics.life-balance.exchange+xml lbe +application/vnd.lotus-1-2-3 123 +application/vnd.lotus-approach apr +application/vnd.lotus-freelance pre +application/vnd.lotus-notes nsf +application/vnd.lotus-organizer org +application/vnd.lotus-screencam scm +application/vnd.lotus-wordpro lwp +application/vnd.macports.portpkg portpkg +# application/vnd.marlin.drm.actiontoken+xml +# application/vnd.marlin.drm.conftoken+xml +# application/vnd.marlin.drm.license+xml +# application/vnd.marlin.drm.mdcf +application/vnd.mcd mcd +application/vnd.medcalcdata mc1 +application/vnd.mediastation.cdkey cdkey +# application/vnd.meridian-slingshot +application/vnd.mfer mwf +application/vnd.mfmp mfm +application/vnd.micrografx.flo flo +application/vnd.micrografx.igx igx +application/vnd.mif mif +# application/vnd.minisoft-hp3000-save +# application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf daf +application/vnd.mobius.dis dis +application/vnd.mobius.mbk mbk +application/vnd.mobius.mqy mqy +application/vnd.mobius.msl msl +application/vnd.mobius.plc plc +application/vnd.mobius.txf txf +application/vnd.mophun.application mpn +application/vnd.mophun.certificate mpc +# application/vnd.motorola.flexsuite +# application/vnd.motorola.flexsuite.adsi +# application/vnd.motorola.flexsuite.fis +# application/vnd.motorola.flexsuite.gotap +# application/vnd.motorola.flexsuite.kmr +# application/vnd.motorola.flexsuite.ttc +# application/vnd.motorola.flexsuite.wem +# application/vnd.motorola.iprm +application/vnd.mozilla.xul+xml xul +application/vnd.ms-artgalry cil +# application/vnd.ms-asf +application/vnd.ms-cab-compressed cab +application/vnd.ms-excel xls xlm xla xlc xlt xlw +application/vnd.ms-excel.addin.macroenabled.12 xlam +application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb +application/vnd.ms-excel.sheet.macroenabled.12 xlsm +application/vnd.ms-excel.template.macroenabled.12 xltm +application/vnd.ms-fontobject eot +application/vnd.ms-htmlhelp chm +application/vnd.ms-ims ims +application/vnd.ms-lrm lrm +# application/vnd.ms-office.activex+xml +application/vnd.ms-officetheme thmx +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +# application/vnd.ms-playready.initiator+xml +application/vnd.ms-powerpoint ppt pps pot +application/vnd.ms-powerpoint.addin.macroenabled.12 ppam +application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm +application/vnd.ms-powerpoint.slide.macroenabled.12 sldm +application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm +application/vnd.ms-powerpoint.template.macroenabled.12 potm +application/vnd.ms-project mpp mpt +# application/vnd.ms-tnef +# application/vnd.ms-wmdrm.lic-chlg-req +# application/vnd.ms-wmdrm.lic-resp +# application/vnd.ms-wmdrm.meter-chlg-req +# application/vnd.ms-wmdrm.meter-resp +application/vnd.ms-word.document.macroenabled.12 docm +application/vnd.ms-word.template.macroenabled.12 dotm +application/vnd.ms-works wps wks wcm wdb +application/vnd.ms-wpl wpl +application/vnd.ms-xpsdocument xps +application/vnd.mseq mseq +# application/vnd.msign +# application/vnd.multiad.creator +# application/vnd.multiad.creator.cif +# application/vnd.music-niff +application/vnd.musician mus +application/vnd.muvee.style msty +application/vnd.mynfc taglet +# application/vnd.ncd.control +# application/vnd.ncd.reference +# application/vnd.nervana +# application/vnd.netfpx +application/vnd.neurolanguage.nlu nlu +application/vnd.noblenet-directory nnd +application/vnd.noblenet-sealer nns +application/vnd.noblenet-web nnw +# application/vnd.nokia.catalogs +# application/vnd.nokia.conml+wbxml +# application/vnd.nokia.conml+xml +# application/vnd.nokia.isds-radio-presets +# application/vnd.nokia.iptv.config+xml +# application/vnd.nokia.landmark+wbxml +# application/vnd.nokia.landmark+xml +# application/vnd.nokia.landmarkcollection+xml +# application/vnd.nokia.n-gage.ac+xml +application/vnd.nokia.n-gage.data ngdat +application/vnd.nokia.n-gage.symbian.install n-gage +# application/vnd.nokia.ncd +# application/vnd.nokia.pcd+wbxml +# application/vnd.nokia.pcd+xml +application/vnd.nokia.radio-preset rpst +application/vnd.nokia.radio-presets rpss +application/vnd.novadigm.edm edm +application/vnd.novadigm.edx edx +application/vnd.novadigm.ext ext +# application/vnd.ntt-local.file-transfer +# application/vnd.ntt-local.sip-ta_remote +# application/vnd.ntt-local.sip-ta_tcp_stream +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.chart-template otc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.formula-template odft +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.image-template oti +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +# application/vnd.obn +# application/vnd.oftn.l10n+json +# application/vnd.oipf.contentaccessdownload+xml +# application/vnd.oipf.contentaccessstreaming+xml +# application/vnd.oipf.cspg-hexbinary +# application/vnd.oipf.dae.svg+xml +# application/vnd.oipf.dae.xhtml+xml +# application/vnd.oipf.mippvcontrolmessage+xml +# application/vnd.oipf.pae.gem +# application/vnd.oipf.spdiscovery+xml +# application/vnd.oipf.spdlist+xml +# application/vnd.oipf.ueprofile+xml +# application/vnd.oipf.userprofile+xml +application/vnd.olpc-sugar xo +# application/vnd.oma-scws-config +# application/vnd.oma-scws-http-request +# application/vnd.oma-scws-http-response +# application/vnd.oma.bcast.associated-procedure-parameter+xml +# application/vnd.oma.bcast.drm-trigger+xml +# application/vnd.oma.bcast.imd+xml +# application/vnd.oma.bcast.ltkm +# application/vnd.oma.bcast.notification+xml +# application/vnd.oma.bcast.provisioningtrigger +# application/vnd.oma.bcast.sgboot +# application/vnd.oma.bcast.sgdd+xml +# application/vnd.oma.bcast.sgdu +# application/vnd.oma.bcast.simple-symbol-container +# application/vnd.oma.bcast.smartcard-trigger+xml +# application/vnd.oma.bcast.sprov+xml +# application/vnd.oma.bcast.stkm +# application/vnd.oma.cab-address-book+xml +# application/vnd.oma.cab-feature-handler+xml +# application/vnd.oma.cab-pcc+xml +# application/vnd.oma.cab-user-prefs+xml +# application/vnd.oma.dcd +# application/vnd.oma.dcdc +application/vnd.oma.dd2+xml dd2 +# application/vnd.oma.drm.risd+xml +# application/vnd.oma.group-usage-list+xml +# application/vnd.oma.pal+xml +# application/vnd.oma.poc.detailed-progress-report+xml +# application/vnd.oma.poc.final-report+xml +# application/vnd.oma.poc.groups+xml +# application/vnd.oma.poc.invocation-descriptor+xml +# application/vnd.oma.poc.optimized-progress-report+xml +# application/vnd.oma.push +# application/vnd.oma.scidm.messages+xml +# application/vnd.oma.xcap-directory+xml +# application/vnd.omads-email+xml +# application/vnd.omads-file+xml +# application/vnd.omads-folder+xml +# application/vnd.omaloc-supl-init +application/vnd.openofficeorg.extension oxt +# application/vnd.openxmlformats-officedocument.custom-properties+xml +# application/vnd.openxmlformats-officedocument.customxmlproperties+xml +# application/vnd.openxmlformats-officedocument.drawing+xml +# application/vnd.openxmlformats-officedocument.drawingml.chart+xml +# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml +# application/vnd.openxmlformats-officedocument.extended-properties+xml +# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml +# application/vnd.openxmlformats-officedocument.presentationml.comments+xml +# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml +application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml +application/vnd.openxmlformats-officedocument.presentationml.slide sldx +# application/vnd.openxmlformats-officedocument.presentationml.slide+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml +application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx +# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml +# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml +# application/vnd.openxmlformats-officedocument.presentationml.tags+xml +application/vnd.openxmlformats-officedocument.presentationml.template potx +# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml +# application/vnd.openxmlformats-officedocument.theme+xml +# application/vnd.openxmlformats-officedocument.themeoverride+xml +# application/vnd.openxmlformats-officedocument.vmldrawing +# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml +# application/vnd.openxmlformats-package.core-properties+xml +# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml +# application/vnd.openxmlformats-package.relationships+xml +# application/vnd.quobject-quoxdocument +# application/vnd.osa.netdeploy +application/vnd.osgeo.mapguide.package mgp +# application/vnd.osgi.bundle +application/vnd.osgi.dp dp +# application/vnd.otps.ct-kip+xml +application/vnd.palm pdb pqa oprc +# application/vnd.paos.xml +application/vnd.pawaafile paw +application/vnd.pg.format str +application/vnd.pg.osasli ei6 +# application/vnd.piaccess.application-licence +application/vnd.picsel efif +application/vnd.pmi.widget wg +# application/vnd.poc.group-advertisement+xml +application/vnd.pocketlearn plf +application/vnd.powerbuilder6 pbd +# application/vnd.powerbuilder6-s +# application/vnd.powerbuilder7 +# application/vnd.powerbuilder7-s +# application/vnd.powerbuilder75 +# application/vnd.powerbuilder75-s +# application/vnd.preminet +application/vnd.previewsystems.box box +application/vnd.proteus.magazine mgz +application/vnd.publishare-delta-tree qps +application/vnd.pvi.ptid1 ptid +# application/vnd.pwg-multiplexed +# application/vnd.pwg-xhtml-print+xml +# application/vnd.qualcomm.brew-app-res +application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb +# application/vnd.radisys.moml+xml +# application/vnd.radisys.msml+xml +# application/vnd.radisys.msml-audit+xml +# application/vnd.radisys.msml-audit-conf+xml +# application/vnd.radisys.msml-audit-conn+xml +# application/vnd.radisys.msml-audit-dialog+xml +# application/vnd.radisys.msml-audit-stream+xml +# application/vnd.radisys.msml-conf+xml +# application/vnd.radisys.msml-dialog+xml +# application/vnd.radisys.msml-dialog-base+xml +# application/vnd.radisys.msml-dialog-fax-detect+xml +# application/vnd.radisys.msml-dialog-fax-sendrecv+xml +# application/vnd.radisys.msml-dialog-group+xml +# application/vnd.radisys.msml-dialog-speech+xml +# application/vnd.radisys.msml-dialog-transform+xml +# application/vnd.rainstor.data +# application/vnd.rapid +application/vnd.realvnc.bed bed +application/vnd.recordare.musicxml mxl +application/vnd.recordare.musicxml+xml musicxml +# application/vnd.renlearn.rlprint +application/vnd.rig.cryptonote cryptonote +application/vnd.rim.cod cod +application/vnd.rn-realmedia rm +application/vnd.route66.link66+xml link66 +# application/vnd.ruckus.download +# application/vnd.s3sms +application/vnd.sailingtracker.track st +# application/vnd.sbm.cid +# application/vnd.sbm.mid2 +# application/vnd.scribus +# application/vnd.sealed.3df +# application/vnd.sealed.csf +# application/vnd.sealed.doc +# application/vnd.sealed.eml +# application/vnd.sealed.mht +# application/vnd.sealed.net +# application/vnd.sealed.ppt +# application/vnd.sealed.tiff +# application/vnd.sealed.xls +# application/vnd.sealedmedia.softseal.html +# application/vnd.sealedmedia.softseal.pdf +application/vnd.seemail see +application/vnd.sema sema +application/vnd.semd semd +application/vnd.semf semf +application/vnd.shana.informed.formdata ifm +application/vnd.shana.informed.formtemplate itp +application/vnd.shana.informed.interchange iif +application/vnd.shana.informed.package ipk +application/vnd.simtech-mindmapper twd twds +application/vnd.smaf mmf +# application/vnd.smart.notebook +application/vnd.smart.teacher teacher +# application/vnd.software602.filler.form+xml +# application/vnd.software602.filler.form-xml-zip +application/vnd.solent.sdkm+xml sdkm sdkd +application/vnd.spotfire.dxp dxp +application/vnd.spotfire.sfs sfs +# application/vnd.sss-cod +# application/vnd.sss-dtf +# application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.stepmania.package smzip +application/vnd.stepmania.stepchart sm +# application/vnd.street-stream +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +# application/vnd.sun.wadl+xml +application/vnd.sus-calendar sus susp +application/vnd.svd svd +# application/vnd.swiftview-ics +application/vnd.symbian.install sis sisx +application/vnd.syncml+xml xsm +application/vnd.syncml.dm+wbxml bdm +application/vnd.syncml.dm+xml xdm +# application/vnd.syncml.dm.notification +# application/vnd.syncml.ds.notification +application/vnd.tao.intent-module-archive tao +application/vnd.tcpdump.pcap pcap cap dmp +application/vnd.tmobile-livetv tmo +application/vnd.trid.tpt tpt +application/vnd.triscape.mxs mxs +application/vnd.trueapp tra +# application/vnd.truedoc +# application/vnd.ubisoft.webplayer +application/vnd.ufdl ufd ufdl +application/vnd.uiq.theme utz +application/vnd.umajin umj +application/vnd.unity unityweb +application/vnd.uoml+xml uoml +# application/vnd.uplanet.alert +# application/vnd.uplanet.alert-wbxml +# application/vnd.uplanet.bearer-choice +# application/vnd.uplanet.bearer-choice-wbxml +# application/vnd.uplanet.cacheop +# application/vnd.uplanet.cacheop-wbxml +# application/vnd.uplanet.channel +# application/vnd.uplanet.channel-wbxml +# application/vnd.uplanet.list +# application/vnd.uplanet.list-wbxml +# application/vnd.uplanet.listcmd +# application/vnd.uplanet.listcmd-wbxml +# application/vnd.uplanet.signal +application/vnd.vcx vcx +# application/vnd.vd-study +# application/vnd.vectorworks +# application/vnd.verimatrix.vcas +# application/vnd.vidsoft.vidconference +application/vnd.visio vsd vst vss vsw +application/vnd.visionary vis +# application/vnd.vividence.scriptfile +application/vnd.vsf vsf +# application/vnd.wap.sic +# application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo wtb +# application/vnd.wfa.wsc +# application/vnd.wmc +# application/vnd.wmf.bootstrap +# application/vnd.wolfram.mathematica +# application/vnd.wolfram.mathematica.package +application/vnd.wolfram.player nbp +application/vnd.wordperfect wpd +application/vnd.wqd wqd +# application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf stf +# application/vnd.wv.csp+wbxml +# application/vnd.wv.csp+xml +# application/vnd.wv.ssp+xml +application/vnd.xara xar +application/vnd.xfdl xfdl +# application/vnd.xfdl.webform +# application/vnd.xmi+xml +# application/vnd.xmpie.cpkg +# application/vnd.xmpie.dpkg +# application/vnd.xmpie.plan +# application/vnd.xmpie.ppkg +# application/vnd.xmpie.xlim +application/vnd.yamaha.hv-dic hvd +application/vnd.yamaha.hv-script hvs +application/vnd.yamaha.hv-voice hvp +application/vnd.yamaha.openscoreformat osf +application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg +# application/vnd.yamaha.remote-setup +application/vnd.yamaha.smaf-audio saf +application/vnd.yamaha.smaf-phrase spf +# application/vnd.yamaha.through-ngn +# application/vnd.yamaha.tunnel-udpencap +application/vnd.yellowriver-custom-menu cmp +application/vnd.zul zir zirz +application/vnd.zzazz.deck+xml zaz +application/voicexml+xml vxml +# application/vq-rtcpxr +# application/watcherinfo+xml +# application/whoispp-query +# application/whoispp-response +application/widget wgt +application/winhlp hlp +# application/wita +# application/wordperfect5.1 +application/wsdl+xml wsdl +application/wspolicy+xml wspolicy +application/x-7z-compressed 7z +application/x-abiword abw +application/x-ace-compressed ace +application/x-authorware-bin aab x32 u32 vox +application/x-authorware-map aam +application/x-authorware-seg aas +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-bzip bz +application/x-bzip2 bz2 boz +application/x-cdlink vcd +application/x-chat chat +application/x-chess-pgn pgn +# application/x-compress +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb udeb +application/x-director dir dcr dxr cst cct cxt w3d fgd swa +application/x-doom wad +application/x-dtbncx+xml ncx +application/x-dtbook+xml dtb +application/x-dtbresource+xml res +application/x-dvi dvi +application/x-font-bdf bdf +# application/x-font-dos +# application/x-font-framemaker +application/x-font-ghostscript gsf +# application/x-font-libgrx +application/x-font-linux-psf psf +application/x-font-otf otf +application/x-font-pcf pcf +application/x-font-snf snf +# application/x-font-speedo +# application/x-font-sunos-news +application/x-font-ttf ttf ttc +application/x-font-type1 pfa pfb pfm afm +application/x-font-woff woff +# application/x-font-vfont +application/x-futuresplash spl +application/x-gnumeric gnumeric +application/x-gtar gtar +# application/x-gzip +application/x-hdf hdf +application/x-java-jnlp-file jnlp +application/x-latex latex +application/x-mobipocket-ebook prc mobi +application/x-ms-application application +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-ms-xbap xbap +application/x-msaccess mdb +application/x-msbinder obd +application/x-mscardfile crd +application/x-msclip clp +application/x-msdownload exe dll com bat msi +application/x-msmediaview mvb m13 m14 +application/x-msmetafile wmf +application/x-msmoney mny +application/x-mspublisher pub +application/x-msschedule scd +application/x-msterminal trm +application/x-mswrite wri +application/x-netcdf nc cdf +application/x-pkcs12 p12 pfx +application/x-pkcs7-certificates p7b spc +application/x-pkcs7-certreqresp p7r +application/x-rar-compressed rar +application/x-sh sh +application/x-shar shar +application/x-shockwave-flash swf +application/x-silverlight-app xap +application/x-stuffit sit +application/x-stuffitx sitx +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-tar tar +application/x-tcl tcl +application/x-tex tex +application/x-tex-tfm tfm +application/x-texinfo texinfo texi +application/x-ustar ustar +application/x-wais-source src +application/x-x509-ca-cert der crt +application/x-xfig fig +application/x-xpinstall xpi +# application/x400-bp +# application/xcap-att+xml +# application/xcap-caps+xml +application/xcap-diff+xml xdf +# application/xcap-el+xml +# application/xcap-error+xml +# application/xcap-ns+xml +# application/xcon-conference-info-diff+xml +# application/xcon-conference-info+xml +application/xenc+xml xenc +application/xhtml+xml xhtml xht +# application/xhtml-voice+xml +application/xml xml xsl +application/xml-dtd dtd +# application/xml-external-parsed-entity +# application/xmpp+xml +application/xop+xml xop +application/xslt+xml xslt +application/xspf+xml xspf +application/xv+xml mxml xhvml xvml xvm +application/yang yang +application/yin+xml yin +application/zip zip +# audio/1d-interleaved-parityfec +# audio/32kadpcm +# audio/3gpp +# audio/3gpp2 +# audio/ac3 +audio/adpcm adp +# audio/amr +# audio/amr-wb +# audio/amr-wb+ +# audio/asc +# audio/atrac-advanced-lossless +# audio/atrac-x +# audio/atrac3 +audio/basic au snd +# audio/bv16 +# audio/bv32 +# audio/clearmode +# audio/cn +# audio/dat12 +# audio/dls +# audio/dsr-es201108 +# audio/dsr-es202050 +# audio/dsr-es202211 +# audio/dsr-es202212 +# audio/dv +# audio/dvi4 +# audio/eac3 +# audio/evrc +# audio/evrc-qcp +# audio/evrc0 +# audio/evrc1 +# audio/evrcb +# audio/evrcb0 +# audio/evrcb1 +# audio/evrcwb +# audio/evrcwb0 +# audio/evrcwb1 +# audio/example +# audio/fwdred +# audio/g719 +# audio/g722 +# audio/g7221 +# audio/g723 +# audio/g726-16 +# audio/g726-24 +# audio/g726-32 +# audio/g726-40 +# audio/g728 +# audio/g729 +# audio/g7291 +# audio/g729d +# audio/g729e +# audio/gsm +# audio/gsm-efr +# audio/gsm-hr-08 +# audio/ilbc +# audio/ip-mr_v2.5 +# audio/l16 +# audio/l20 +# audio/l24 +# audio/l8 +# audio/lpc +audio/midi mid midi kar rmi +# audio/mobile-xmf +audio/mp4 mp4a +# audio/mp4a-latm +# audio/mpa +# audio/mpa-robust +audio/mpeg mpga mp2 mp2a mp3 m2a m3a +# audio/mpeg4-generic +audio/ogg oga ogg spx +# audio/parityfec +# audio/pcma +# audio/pcma-wb +# audio/pcmu-wb +# audio/pcmu +# audio/prs.sid +# audio/qcelp +# audio/red +# audio/rtp-enc-aescm128 +# audio/rtp-midi +# audio/rtx +# audio/smv +# audio/smv0 +# audio/smv-qcp +# audio/sp-midi +# audio/speex +# audio/t140c +# audio/t38 +# audio/telephone-event +# audio/tone +# audio/uemclip +# audio/ulpfec +# audio/vdvi +# audio/vmr-wb +# audio/vnd.3gpp.iufp +# audio/vnd.4sb +# audio/vnd.audiokoz +# audio/vnd.celp +# audio/vnd.cisco.nse +# audio/vnd.cmles.radio-events +# audio/vnd.cns.anp1 +# audio/vnd.cns.inf1 +audio/vnd.dece.audio uva uvva +audio/vnd.digital-winds eol +# audio/vnd.dlna.adts +# audio/vnd.dolby.heaac.1 +# audio/vnd.dolby.heaac.2 +# audio/vnd.dolby.mlp +# audio/vnd.dolby.mps +# audio/vnd.dolby.pl2 +# audio/vnd.dolby.pl2x +# audio/vnd.dolby.pl2z +# audio/vnd.dolby.pulse.1 +audio/vnd.dra dra +audio/vnd.dts dts +audio/vnd.dts.hd dtshd +# audio/vnd.dvb.file dvb +# audio/vnd.everad.plj +# audio/vnd.hns.audio +audio/vnd.lucent.voice lvp +audio/vnd.ms-playready.media.pya pya +# audio/vnd.nokia.mobile-xmf +# audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 ecelp4800 +audio/vnd.nuera.ecelp7470 ecelp7470 +audio/vnd.nuera.ecelp9600 ecelp9600 +# audio/vnd.octel.sbc +# audio/vnd.qcelp +# audio/vnd.rhetorex.32kadpcm +audio/vnd.rip rip +# audio/vnd.sealedmedia.softseal.mpeg +# audio/vnd.vmx.cvsd +# audio/vorbis +# audio/vorbis-config +audio/webm weba +audio/x-aac aac +audio/x-aiff aif aiff aifc +audio/x-mpegurl m3u +audio/x-ms-wax wax +audio/x-ms-wma wma +audio/x-pn-realaudio ram ra +audio/x-pn-realaudio-plugin rmp +audio/x-wav wav +chemical/x-cdx cdx +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-csml csml +# chemical/x-pdb +chemical/x-xyz xyz +image/bmp bmp +image/cgm cgm +# image/example +# image/fits +image/g3fax g3 +image/gif gif +image/ief ief +# image/jp2 +image/jpeg jpeg jpg jpe +# image/jpm +# image/jpx +image/ktx ktx +# image/naplps +image/png png +image/prs.btif btif +# image/prs.pti +image/svg+xml svg svgz +# image/t38 +image/tiff tiff tif +# image/tiff-fx +image/vnd.adobe.photoshop psd +# image/vnd.cns.inf2 +image/vnd.dece.graphic uvi uvvi uvg uvvg +image/vnd.dvb.subtitle sub +image/vnd.djvu djvu djv +image/vnd.dwg dwg +image/vnd.dxf dxf +image/vnd.fastbidsheet fbs +image/vnd.fpx fpx +image/vnd.fst fst +image/vnd.fujixerox.edmics-mmr mmr +image/vnd.fujixerox.edmics-rlc rlc +# image/vnd.globalgraphics.pgb +# image/vnd.microsoft.icon +# image/vnd.mix +image/vnd.ms-modi mdi +image/vnd.net-fpx npx +# image/vnd.radiance +# image/vnd.sealed.png +# image/vnd.sealedmedia.softseal.gif +# image/vnd.sealedmedia.softseal.jpg +# image/vnd.svf +image/vnd.wap.wbmp wbmp +image/vnd.xiff xif +image/webp webp +image/x-cmu-raster ras +image/x-cmx cmx +image/x-freehand fh fhc fh4 fh5 fh7 +image/x-icon ico +image/x-pcx pcx +image/x-pict pic pct +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd +# message/cpim +# message/delivery-status +# message/disposition-notification +# message/example +# message/external-body +# message/feedback-report +# message/global +# message/global-delivery-status +# message/global-disposition-notification +# message/global-headers +# message/http +# message/imdn+xml +# message/news +# message/partial +message/rfc822 eml mime +# message/s-http +# message/sip +# message/sipfrag +# message/tracking-status +# message/vnd.si.simp +# model/example +model/iges igs iges +model/mesh msh mesh silo +model/vnd.collada+xml dae +model/vnd.dwf dwf +# model/vnd.flatland.3dml +model/vnd.gdl gdl +# model/vnd.gs-gdl +# model/vnd.gs.gdl +model/vnd.gtw gtw +# model/vnd.moml+xml +model/vnd.mts mts +# model/vnd.parasolid.transmit.binary +# model/vnd.parasolid.transmit.text +model/vnd.vtu vtu +model/vrml wrl vrml +# multipart/alternative +# multipart/appledouble +# multipart/byteranges +# multipart/digest +# multipart/encrypted +# multipart/example +# multipart/form-data +# multipart/header-set +# multipart/mixed +# multipart/parallel +# multipart/related +# multipart/report +# multipart/signed +# multipart/voice-message +# text/1d-interleaved-parityfec +text/calendar ics ifb +text/css css +text/csv csv +# text/directory +# text/dns +# text/ecmascript +# text/enriched +# text/example +# text/fwdred +text/html html htm +# text/javascript +text/n3 n3 +# text/parityfec +text/plain txt text conf def list log in +# text/prs.fallenstein.rst +text/prs.lines.tag dsc +# text/vnd.radisys.msml-basic-layout +# text/red +# text/rfc822-headers +text/richtext rtx +# text/rtf +# text/rtp-enc-aescm128 +# text/rtx +text/sgml sgml sgm +# text/t140 +text/tab-separated-values tsv +text/troff t tr roff man me ms +text/turtle ttl +# text/ulpfec +text/uri-list uri uris urls +text/vcard vcard +# text/vnd.abc +text/vnd.curl curl +text/vnd.curl.dcurl dcurl +text/vnd.curl.scurl scurl +text/vnd.curl.mcurl mcurl +# text/vnd.dmclientscript +text/vnd.dvb.subtitle sub +# text/vnd.esmertec.theme-descriptor +text/vnd.fly fly +text/vnd.fmi.flexstor flx +text/vnd.graphviz gv +text/vnd.in3d.3dml 3dml +text/vnd.in3d.spot spot +# text/vnd.iptc.newsml +# text/vnd.iptc.nitf +# text/vnd.latex-z +# text/vnd.motorola.reflex +# text/vnd.ms-mediapackage +# text/vnd.net2phone.commcenter.command +# text/vnd.si.uricatalogue +text/vnd.sun.j2me.app-descriptor jad +# text/vnd.trolltech.linguist +# text/vnd.wap.si +# text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-asm s asm +text/x-c c cc cxx cpp h hh dic +text/x-fortran f for f77 f90 +text/x-pascal p pas +text/x-java-source java +text/x-setext etx +text/x-uuencode uu +text/x-vcalendar vcs +text/x-vcard vcf +# text/xml +# text/xml-external-parsed-entity +# video/1d-interleaved-parityfec +video/3gpp 3gp +# video/3gpp-tt +video/3gpp2 3g2 +# video/bmpeg +# video/bt656 +# video/celb +# video/dv +# video/example +video/h261 h261 +video/h263 h263 +# video/h263-1998 +# video/h263-2000 +video/h264 h264 +# video/h264-rcdo +# video/h264-svc +video/jpeg jpgv +# video/jpeg2000 +video/jpm jpm jpgm +video/mj2 mj2 mjp2 +# video/mp1s +# video/mp2p +# video/mp2t +video/mp4 mp4 mp4v mpg4 +# video/mp4v-es +video/mpeg mpeg mpg mpe m1v m2v +# video/mpeg4-generic +# video/mpv +# video/nv +video/ogg ogv +# video/parityfec +# video/pointer +video/quicktime qt mov +# video/raw +# video/rtp-enc-aescm128 +# video/rtx +# video/smpte292m +# video/ulpfec +# video/vc1 +# video/vnd.cctv +video/vnd.dece.hd uvh uvvh +video/vnd.dece.mobile uvm uvvm +# video/vnd.dece.mp4 +video/vnd.dece.pd uvp uvvp +video/vnd.dece.sd uvs uvvs +video/vnd.dece.video uvv uvvv +# video/vnd.directv.mpeg +# video/vnd.directv.mpeg-tts +# video/vnd.dlna.mpeg-tts +video/vnd.dvb.file dvb +video/vnd.fvt fvt +# video/vnd.hns.video +# video/vnd.iptvforum.1dparityfec-1010 +# video/vnd.iptvforum.1dparityfec-2005 +# video/vnd.iptvforum.2dparityfec-1010 +# video/vnd.iptvforum.2dparityfec-2005 +# video/vnd.iptvforum.ttsavc +# video/vnd.iptvforum.ttsmpeg2 +# video/vnd.motorola.video +# video/vnd.motorola.videop +video/vnd.mpegurl mxu m4u +video/vnd.ms-playready.media.pyv pyv +# video/vnd.nokia.interleaved-multimedia +# video/vnd.nokia.videovoip +# video/vnd.objectvideo +# video/vnd.sealed.mpeg1 +# video/vnd.sealed.mpeg4 +# video/vnd.sealed.swf +# video/vnd.sealedmedia.softseal.mov +video/vnd.uvvu.mp4 uvu uvvu +video/vnd.vivo viv +video/webm webm +video/x-f4v f4v +video/x-fli fli +video/x-flv flv +video/x-m4v m4v +video/x-ms-asf asf asx +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie +x-conference/x-cooltalk ice diff --git a/services/custombuild/custombuild/configure/ap2/configure.apache b/services/custombuild/custombuild/configure/ap2/configure.apache new file mode 100644 index 0000000..2bc1d96 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.apache @@ -0,0 +1,43 @@ +#!/bin/sh +"./configure" \ + "--prefix=/etc/httpd" \ + "--exec-prefix=/etc/httpd" \ + "--bindir=/usr/bin" \ + "--sbindir=/usr/sbin" \ + "--sysconfdir=/etc/httpd/conf" \ + "--enable-so" \ + "--enable-dav" \ + "--enable-dav-fs" \ + "--enable-dav-lock" \ + "--enable-suexec" \ + "--enable-deflate" \ + "--enable-unique-id" \ + "--enable-cgi" \ + "--disable-cgid" \ + "--enable-mods-static=most" \ + "--enable-mpms-shared=all" \ + "--with-suexec-safedir=/usr/local/safe-bin" \ + "--with-suexec-caller=apache" \ + "--with-suexec-docroot=/" \ + "--with-suexec-gidmin=100" \ + "--with-suexec-logfile=/var/log/httpd/suexec_log" \ + "--with-suexec-uidmin=100" \ + "--with-suexec-userdir=public_html" \ + "--with-suexec-bin=/usr/sbin/suexec" \ + "--with-included-apr" \ + "--with-pcre=/usr/local" \ + "--includedir=/usr/include/apache" \ + "--libexecdir=/usr/lib/apache" \ + "--libdir=/usr/lib/apache" \ + "--mandir=/usr/share/man" \ + "--datadir=/var/www" \ + "--localstatedir=/var" \ + "--enable-logio" \ + "--enable-ssl" \ + "--enable-rewrite" \ + "--enable-proxy" \ + "--enable-expires" \ + "--enable-reqtimeout" \ + "--with-ssl=/usr" \ + "--disable-md" \ + "--enable-headers" \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/ap2/configure.modsecurity b/services/custombuild/custombuild/configure/ap2/configure.modsecurity new file mode 100644 index 0000000..308bca6 --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.modsecurity @@ -0,0 +1,2 @@ +#!/bin/sh +./configure --with-yajl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php53 b/services/custombuild/custombuild/configure/ap2/configure.php53 new file mode 100644 index 0000000..966275a --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php53 @@ -0,0 +1,35 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql=mysqlnd \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php54 b/services/custombuild/custombuild/configure/ap2/configure.php54 new file mode 100644 index 0000000..966275a --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php54 @@ -0,0 +1,35 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql=mysqlnd \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php55 b/services/custombuild/custombuild/configure/ap2/configure.php55 new file mode 100644 index 0000000..966275a --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php55 @@ -0,0 +1,35 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql=mysqlnd \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php56 b/services/custombuild/custombuild/configure/ap2/configure.php56 new file mode 100644 index 0000000..966275a --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php56 @@ -0,0 +1,35 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql=mysqlnd \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php70 b/services/custombuild/custombuild/configure/ap2/configure.php70 new file mode 100644 index 0000000..b13a9fa --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php70 @@ -0,0 +1,35 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-webp-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php71 b/services/custombuild/custombuild/configure/ap2/configure.php71 new file mode 100644 index 0000000..b13a9fa --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php71 @@ -0,0 +1,35 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-webp-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php72 b/services/custombuild/custombuild/configure/ap2/configure.php72 new file mode 100644 index 0000000..d3b378f --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php72 @@ -0,0 +1,34 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-sodium=/usr/local \ + --with-webp-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php73 b/services/custombuild/custombuild/configure/ap2/configure.php73 new file mode 100644 index 0000000..569f6ef --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php73 @@ -0,0 +1,35 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-sodium=/usr/local \ + --with-webp-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --without-libzip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/ap2/configure.php74 b/services/custombuild/custombuild/configure/ap2/configure.php74 new file mode 100644 index 0000000..cce31bb --- /dev/null +++ b/services/custombuild/custombuild/configure/ap2/configure.php74 @@ -0,0 +1,29 @@ +#!/bin/sh +./configure \ + --with-apxs2 \ + --with-config-file-scan-dir=/usr/local/lib/php.conf.d \ + --with-curl \ + --enable-gd \ + --with-gettext \ + --with-jpeg \ + --with-freetype \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-sodium=/usr/local \ + --with-webp \ + --with-xsl \ + --with-zlib \ + --with-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/clamav/configure.clamav b/services/custombuild/custombuild/configure/clamav/configure.clamav new file mode 100644 index 0000000..ffe09b9 --- /dev/null +++ b/services/custombuild/custombuild/configure/clamav/configure.clamav @@ -0,0 +1,2 @@ +#!/bin/sh +cmake .. -D CMAKE_INSTALL_PREFIX=/usr/local -D APP_CONFIG_DIRECTORY=/etc -D ENABLE_MILTER=OFF -D ENABLE_TESTS=OFF diff --git a/services/custombuild/custombuild/configure/clamav/runav.conf b/services/custombuild/custombuild/configure/clamav/runav.conf new file mode 100644 index 0000000..8439d12 --- /dev/null +++ b/services/custombuild/custombuild/configure/clamav/runav.conf @@ -0,0 +1,11 @@ +# --------------------------------------------------------------- +# Core ModSecurity Rule Set ver.2.2.9 +# Copyright (C) 2006-2012 Trustwave All rights reserved. +# +# The OWASP ModSecurity Core Rule Set is distributed under +# Apache Software License (ASL) version 2 +# Please see the enclosed LICENCE file for full details. +# --------------------------------------------------------------- + +SecRule FILES_TMPNAMES "@inspectFile /usr/local/bin/runav.pl" \ + "phase:2,t:none,block,msg:'Virus found in uploaded file',id:'950115',tag:'MALICIOUS_SOFTWARE/VIRUS',tag:'PCI/5.1',severity:'2',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-MALICIOUS_SOFTWARE/VIRUS-%{matched_var_name}=%{tx.0}" \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/clamav/runav.pl b/services/custombuild/custombuild/configure/clamav/runav.pl new file mode 100644 index 0000000..37b32a1 --- /dev/null +++ b/services/custombuild/custombuild/configure/clamav/runav.pl @@ -0,0 +1,40 @@ +#!/usr/bin/perl +# +# runav.pl +# Copyright (c) 2004-2011 Trustwave +# +# This script is an interface between ModSecurity and its +# ability to intercept files being uploaded through the +# web server, and ClamAV + + +$CLAMDSCAN = "/usr/local/bin/clamdscan"; + +if ($#ARGV != 0) { + print "Usage: runav.pl \n"; + exit; +} + +my ($FILE) = shift @ARGV; + +$cmd = "$CLAMDSCAN --stdout --no-summary $FILE"; +$input = `$cmd`; +$input =~ m/^(.+)/; +$error_message = $1; + +$output = "1 Unable to parse clamscan output [$1]"; + +if ($error_message =~ m/: Empty file\.?$/) { + $output = "1 empty file"; +} +elsif ($error_message =~ m/: (.+) ERROR$/) { + $output = "1 clamscan: $1"; +} +elsif ($error_message =~ m/: (.+) FOUND$/) { + $output = "0 clamscan: $1"; +} +elsif ($error_message =~ m/: OK$/) { + $output = "1 clamscan: OK"; +} + +print "$output\n"; diff --git a/services/custombuild/custombuild/configure/csf.pignore b/services/custombuild/custombuild/configure/csf.pignore new file mode 100644 index 0000000..32d46db --- /dev/null +++ b/services/custombuild/custombuild/configure/csf.pignore @@ -0,0 +1,43 @@ +exe:/usr/libexec/dovecot/pop3 +exe:/usr/libexec/dovecot/imap +exe:/usr/libexec/dovecot/lmtp +exe:/usr/libexec/dovecot/stats +exe:/usr/libexec/dovecot/managesieve-login +exe:/usr/libexec/dovecot/indexer +exe:/usr/libexec/dovecot/indexer-worker +exe:/usr/local/bin/freshclam +exe:/usr/local/bin/clamd +exe:/usr/share/cagefs-skeleton/usr/selector/lsphp +exe:/usr/selector/lsphp +exe:/usr/local/bin/lsphp +exe:/usr/lib/systemd/systemd-timesyncd +pexe:/usr/local/lsws/bin/lshttpd.* +pexe:/usr/local/php../bin/php_uploadscan.sh +pexe:/opt/alt/php../usr/bin/php-cgi +pexe:/opt/alt/php../usr/bin/php +pexe:/opt/alt/php../usr/bin/lsphp +pexe:/usr/local/php../sbin/php-fpm.. +pexe:/usr/local/php../bin/php-cgi.. +pexe:/usr/local/php../bin/php.. +pexe:/usr/local/php../bin/lsphp.. +exe:/usr/local/mysql/bin/mysqld +exe:/usr/sbin/pure-ftpd +exe:/usr/local/bin/pureftpd_uploadscan.sh +exe:/usr/selector/php +exe:/usr/selector/php-cli +exe:/usr/sbin/nginx +exe:/usr/sbin/proxyexec +pexe:/usr/local/safe-bin/fcgid...sh +exe:/usr/sbin/rsyslogd +exe:/usr/sbin/atd +exe:/usr/bin/wget +exe:/bin/gzip +exe:/bin/tar +exe:/usr/bin/rspamd +exe:/opt/netdata/usr/libexec/netdata/plugins.d/go.d.plugin +exe:/opt/netdata/bin/srv/netdata +exe:/opt/netdata/usr/libexec/netdata/plugins.d/apps.plugin +exe:/opt/netdata/bin/bash +exe:/usr/local/bin/redis-server +user:netdata +user:mysql diff --git a/services/custombuild/custombuild/configure/curl/configure.curl b/services/custombuild/custombuild/configure/curl/configure.curl new file mode 100644 index 0000000..029f953 --- /dev/null +++ b/services/custombuild/custombuild/configure/curl/configure.curl @@ -0,0 +1,2 @@ +#!/bin/sh +./configure --with-openssl diff --git a/services/custombuild/custombuild/configure/custombuild/eol_os.txt b/services/custombuild/custombuild/configure/custombuild/eol_os.txt new file mode 100644 index 0000000..41e9259 --- /dev/null +++ b/services/custombuild/custombuild/configure/custombuild/eol_os.txt @@ -0,0 +1,25 @@ +CentOS 3 +CentOS 4 +CentOS 5 +Fedora 1 +Fedora 2 +Fedora 3 +Fedora 4 +Fedora 5 +Fedora 6 +Fedora 7 +Fedora 8 +Fedora 9 +Fedora 10 +FreeBSD 3 +FreeBSD 4 +FreeBSD 5 +FreeBSD 6 +FreeBSD 7 +FreeBSD 8 +FreeBSD 9 +Debian 3 +Debian 4 +Debian 5 +Debian 6 +Debian 7 diff --git a/services/custombuild/custombuild/configure/dovecot/conf.d/90-fts-xapian.conf b/services/custombuild/custombuild/configure/dovecot/conf.d/90-fts-xapian.conf new file mode 100644 index 0000000..9466ae6 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf.d/90-fts-xapian.conf @@ -0,0 +1,18 @@ +#add quota to end of line in: +#/etc/dovecot/conf/mail_plugins.conf, eg: +#mail_plugins = $mail_plugins fts fts_xapian + +plugin { + plugin = fts fts_xapian + + fts = xapian + fts_xapian = partial=2 full=20 verbose=0 + + fts_autoindex = yes + fts_enforced = yes + + fts_autoindex_exclude = \Junk + fts_autoindex_exclude2 = \Trash + fts_autoindex_exclude3 = \INBOX.spam + fts_autoindex_exclude4 = \Inbox.Trash +} diff --git a/services/custombuild/custombuild/configure/dovecot/conf.d/90-quota.conf b/services/custombuild/custombuild/configure/dovecot/conf.d/90-quota.conf new file mode 100644 index 0000000..2a9fc34 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf.d/90-quota.conf @@ -0,0 +1,11 @@ +#add quota to end of line in: +#/etc/dovecot/conf/mail_plugins.conf, eg: +#mail_plugins = $mail_plugins quota + +#add imap_quota to end of line in: +#/etc/dovecot/conf/imap_mail_plugins.conf, eg: +#mail_plugins = $mail_plugins imap_quota + +plugin { + quota = maildir +} diff --git a/services/custombuild/custombuild/configure/dovecot/conf.d/90-sieve.conf b/services/custombuild/custombuild/configure/dovecot/conf.d/90-sieve.conf new file mode 100644 index 0000000..da406be --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf.d/90-sieve.conf @@ -0,0 +1,46 @@ +#add sieve to end of line in: +#/etc/dovecot/conf/protocols.conf, eg: +#protocols = imap pop3 lmtp sieve + +#Managesieve service (allows rules editing on client-side) +service managesieve-login { + inet_listener sieve { + port = 4190 + } + service_count = 1 + process_min_avail = 4 +} + +service managesieve { +} + +protocol sieve { + managesieve_max_line_length = 65536 + managesieve_implementation_string = Dovecot Pigeonhole + managesieve_max_compile_errors = 5 + managesieve_logout_format = bytes=%i/%o + log_path = /var/log/dovecot-sieve-errors.log + info_log_path = /var/log/dovecot-sieve.log +} + +plugin { + #More details: http://wiki2.dovecot.org/Pigeonhole/Sieve/Configuration + # The location of the user's main script storage. The active script + # in this storage is used as the main user script executed during + # delivery. The include extension fetches the :personal scripts + # from this location. When ManageSieve is used, this is also where + # scripts are uploaded. This example uses the file system as + # storage, with all the user's scripts located in the directory + # `~/sieve' and the active script (symbolic link) located at + # `~/.dovecot.sieve'. + sieve = file:~/sieve;active=~/.dovecot.sieve + + # If the user has no personal active script (i.e. if the location + # indicated in sieve= does not exist or has no active script), use + # this one: + sieve_default = /var/lib/dovecot/sieve/default.sieve + + # The include extension fetches the :global scripts from this + # location. + sieve_global = /var/lib/dovecot/sieve/global/ +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/dovecot/conf.d/90-zlib.conf b/services/custombuild/custombuild/configure/dovecot/conf.d/90-zlib.conf new file mode 100644 index 0000000..49b8605 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf.d/90-zlib.conf @@ -0,0 +1,10 @@ +#add zlib to end of line in: +#/etc/dovecot/conf/mail_plugins.conf, eg: +#mail_plugins = $mail_plugins quota zlib + +plugin { + # use zstd for compression + zlib_save = zstd + # level 6 + zlib_save_level = 6 +} diff --git a/services/custombuild/custombuild/configure/dovecot/conf/imap_mail_plugins.conf b/services/custombuild/custombuild/configure/dovecot/conf/imap_mail_plugins.conf new file mode 100644 index 0000000..e0f5627 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/imap_mail_plugins.conf @@ -0,0 +1 @@ +mail_plugins = $mail_plugins diff --git a/services/custombuild/custombuild/configure/dovecot/conf/ip.conf b/services/custombuild/custombuild/configure/dovecot/conf/ip.conf new file mode 100644 index 0000000..28cb28a --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/ip.conf @@ -0,0 +1,5 @@ +#IPv4 +listen = * + +#IPv4 and IPv6: +#listen = *, :: diff --git a/services/custombuild/custombuild/configure/dovecot/conf/limits.conf b/services/custombuild/custombuild/configure/dovecot/conf/limits.conf new file mode 100644 index 0000000..909b58d --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/limits.conf @@ -0,0 +1,3 @@ +default_process_limit=2048 +default_client_limit=12288 +default_vsz_limit=8GB diff --git a/services/custombuild/custombuild/configure/dovecot/conf/lmtp.conf b/services/custombuild/custombuild/configure/dovecot/conf/lmtp.conf new file mode 100644 index 0000000..ddc840b --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/lmtp.conf @@ -0,0 +1,25 @@ +#Regex HOSTNAMe below. +#add sieve to end of line in: +#/etc/dovecot/conf/lmtp_mail_plugins.conf +#mail_plugins = $mail_plugins sieve + +# LMTP socket for local delivery from exim +service lmtp { + executable = lmtp -L + process_min_avail = 16 + unix_listener lmtp-client { + user = mail + group = mail + mode = 0660 + } +} + +lmtp_rcpt_check_quota = yes + +protocol lmtp { + !include lmtp_mail_plugins.conf + log_path = /var/log/dovecot-lmtp-errors.log + info_log_path = /var/log/dovecot-lmtp.log + postmaster_address = root@%{hostname} + quota_full_tempfail = no +} diff --git a/services/custombuild/custombuild/configure/dovecot/conf/lmtp_mail_plugins.conf b/services/custombuild/custombuild/configure/dovecot/conf/lmtp_mail_plugins.conf new file mode 100644 index 0000000..e0f5627 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/lmtp_mail_plugins.conf @@ -0,0 +1 @@ +mail_plugins = $mail_plugins diff --git a/services/custombuild/custombuild/configure/dovecot/conf/mail_max_userip_connections.conf b/services/custombuild/custombuild/configure/dovecot/conf/mail_max_userip_connections.conf new file mode 100644 index 0000000..1789517 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/mail_max_userip_connections.conf @@ -0,0 +1,4 @@ +mail_max_userip_connections = 15 +remote 127.0.0.1 { + mail_max_userip_connections = 150 +} diff --git a/services/custombuild/custombuild/configure/dovecot/conf/mail_plugins.conf b/services/custombuild/custombuild/configure/dovecot/conf/mail_plugins.conf new file mode 100644 index 0000000..7e5e686 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/mail_plugins.conf @@ -0,0 +1 @@ +mail_plugins = $mail_plugins zlib diff --git a/services/custombuild/custombuild/configure/dovecot/conf/maildir_copy_with_hardlinks.conf b/services/custombuild/custombuild/configure/dovecot/conf/maildir_copy_with_hardlinks.conf new file mode 100644 index 0000000..3d6a0ab --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/maildir_copy_with_hardlinks.conf @@ -0,0 +1 @@ +maildir_copy_with_hardlinks = no diff --git a/services/custombuild/custombuild/configure/dovecot/conf/namespace_private.conf b/services/custombuild/custombuild/configure/dovecot/conf/namespace_private.conf new file mode 100644 index 0000000..9fd9834 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/namespace_private.conf @@ -0,0 +1,56 @@ +namespace inbox { + type = private + separator = . + prefix = + inbox = yes + + mailbox Drafts { + special_use = \Drafts + auto = subscribe + } + + mailbox Junk { + special_use = \Junk # autocreate Junk, but don't autosubscribe + auto = create + } + + mailbox spam { + special_use = \Junk + auto = no + } + + mailbox Spam { + special_use = \Junk + auto = no + } + + mailbox Trash { + special_use = \Trash + auto = subscribe + } + + mailbox Sent { + special_use = \Sent + auto = subscribe + } + + mailbox "Sent Messages" { + special_use = \Sent + auto = no + } + + mailbox "Sent Items" { + special_use = \Sent + auto = no + } + + mailbox Archive { + special_use = \Archive + auto = no + } + + mailbox "Archives" { + special_use = \Archive + auto = no + } +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/dovecot/conf/protocols.conf b/services/custombuild/custombuild/configure/dovecot/conf/protocols.conf new file mode 100644 index 0000000..b146cf5 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/protocols.conf @@ -0,0 +1 @@ +protocols = imap pop3 lmtp diff --git a/services/custombuild/custombuild/configure/dovecot/conf/ssl.conf b/services/custombuild/custombuild/configure/dovecot/conf/ssl.conf new file mode 100644 index 0000000..6157f12 --- /dev/null +++ b/services/custombuild/custombuild/configure/dovecot/conf/ssl.conf @@ -0,0 +1,6 @@ +ssl_cert = /dev/null) +else + exec /usr/local/php${PHP_VER}/bin/php-cgi${PHP_VER} ${OPTIONS} -d sendmail_path="/usr/sbin/sendmail -t -i ${SENDMAIL_ADD}" $@ +fi diff --git a/services/custombuild/custombuild/configure/fastcgi/fcgid_freebsd.sh b/services/custombuild/custombuild/configure/fastcgi/fcgid_freebsd.sh new file mode 100644 index 0000000..1a21f1b --- /dev/null +++ b/services/custombuild/custombuild/configure/fastcgi/fcgid_freebsd.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +PHP_VER=`echo $0 | grep -o '[0-9]*'` + +OPTIONS= +if [ "$1" != "" ]; then + if [ -s "$1" ]; then + OPTIONS=" -c ${1} ${OPTIONS}" + fi + shift +fi + +if [ "$#" -gt 0 ]; then + SENDMAIL_FROM="`echo $@ | grep -o 'sendmail_from=[^ ]*' | cut -d'\"' -f2`" + if [ "${SENDMAIL_FROM}" != "" ]; then + SENDMAIL_ADD="-f ${SENDMAIL_FROM}" + fi +else + SENDMAIL_ADD="-f admin@`hostname`" +fi + +# http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html +# Set desired PHP_FCGI_* environment variables. +# Example: +# PHP FastCGI processes exit after 500 requests by default. +# JE: Do not limit it to facilitate XCache (or set it really high, like 10000) +PHP_FCGI_MAX_REQUESTS=0 +export PHP_FCGI_MAX_REQUESTS + +# See http://www.webhostingtalk.com/archive/index.php/t-1165678.html +PHP_FCGI_CHILDREN=0 +export PHP_FCGI_CHILDREN +exec /usr/local/php${PHP_VER}/bin/php-cgi${PHP_VER} ${OPTIONS} -d sendmail_path="/usr/sbin/sendmail -t -i ${SENDMAIL_ADD}" $@ diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.53 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.53 new file mode 100644 index 0000000..59f160d --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.53 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php53/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php53 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php53/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm53.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.54 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.54 new file mode 100644 index 0000000..137d54a --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.54 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php54/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php54 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php54/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm54.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.55 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.55 new file mode 100644 index 0000000..e99b8ca --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.55 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php55/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php55 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php55/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm55.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.56 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.56 new file mode 100644 index 0000000..bad43cb --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.56 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php56/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php56 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php56/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm56.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.70 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.70 new file mode 100644 index 0000000..8acd9c6 --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.70 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php70/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php70 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php70/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm70.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.71 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.71 new file mode 100644 index 0000000..af5e0d9 --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.71 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php71/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php71 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php71/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm71.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.72 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.72 new file mode 100644 index 0000000..1074298 --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.72 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php72/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php72 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php72/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm72.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.73 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.73 new file mode 100644 index 0000000..5906c31 --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.73 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php73/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php73 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php73/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm73.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.74 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.74 new file mode 100644 index 0000000..a93a69d --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.74 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php74/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php74 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php74/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm74.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.80 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.80 new file mode 100644 index 0000000..27a0fb1 --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.80 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php80/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php80 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php80/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm80.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.81 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.81 new file mode 100644 index 0000000..681da77 --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.81 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php81/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php81 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php81/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm81.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.82 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.82 new file mode 100644 index 0000000..889b69b --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.82 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php82/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php82 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php82/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm82.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.83 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.83 new file mode 100644 index 0000000..130e54a --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.83 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php83/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php83 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php83/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm83.conf diff --git a/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.84 b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.84 new file mode 100644 index 0000000..702c560 --- /dev/null +++ b/services/custombuild/custombuild/configure/fpm/conf/php-fpm.conf.84 @@ -0,0 +1,68 @@ +[global] +error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +log_level = notice + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +[webapps] +user = $pool +group = $pool + +listen = /usr/local/php84/sockets/$pool.sock +listen.owner = $pool +listen.group = apache +listen.mode = 660 + +pm = ondemand +pm.max_children = 10 +pm.process_idle_timeout = 60 +pm.max_requests = 1000 + +;pm.status_path = /status +;ping.path = /ping +;ping.response = pong + +;access.log = log/$pool.access.log +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" +;slowlog = log/$pool.log.slow +;request_slowlog_timeout = 0 +;request_terminate_timeout = 30s + +security.limit_extensions = .php .php5 .php84 .inc .phtml + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M +;php_admin_value[open_basedir] = /tmp:/var/tmp:/var/www/html:/usr/local/php84/lib/php + +; Load all DA User configs +include=/usr/local/directadmin/data/users/*/php/php-fpm84.conf diff --git a/services/custombuild/custombuild/configure/imagemagick/configure.imagemagick b/services/custombuild/custombuild/configure/imagemagick/configure.imagemagick new file mode 100644 index 0000000..a1f4d8d --- /dev/null +++ b/services/custombuild/custombuild/configure/imagemagick/configure.imagemagick @@ -0,0 +1,3 @@ +#!/bin/sh +./configure \ +--prefix=/usr/local diff --git a/services/custombuild/custombuild/configure/libxml2/configure.libxml2 b/services/custombuild/custombuild/configure/libxml2/configure.libxml2 new file mode 100644 index 0000000..5ea688e --- /dev/null +++ b/services/custombuild/custombuild/configure/libxml2/configure.libxml2 @@ -0,0 +1,2 @@ +#!/bin/sh +./configure --prefix=/usr/local --without-python --with-zlib=/usr \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/libxslt/configure.libxslt b/services/custombuild/custombuild/configure/libxslt/configure.libxslt new file mode 100644 index 0000000..60b7651 --- /dev/null +++ b/services/custombuild/custombuild/configure/libxslt/configure.libxslt @@ -0,0 +1,2 @@ +#!/bin/sh +./configure --prefix=/usr/local --with-libxml-prefix=/usr/local diff --git a/services/custombuild/custombuild/configure/modsecurity/configure.modsecurity b/services/custombuild/custombuild/configure/modsecurity/configure.modsecurity new file mode 100644 index 0000000..54ccc91 --- /dev/null +++ b/services/custombuild/custombuild/configure/modsecurity/configure.modsecurity @@ -0,0 +1,2 @@ +#!/bin/sh +./configure --with-lua=/usr/local diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-cloudflare.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-cloudflare.conf new file mode 100644 index 0000000..26521e2 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-cloudflare.conf @@ -0,0 +1,23 @@ +real_ip_header X-Forwarded-For; +set_real_ip_from 103.21.244.0/22; +set_real_ip_from 103.22.200.0/22; +set_real_ip_from 103.31.4.0/22; +set_real_ip_from 104.16.0.0/13; +set_real_ip_from 104.24.0.0/14; +set_real_ip_from 108.162.192.0/18; +set_real_ip_from 131.0.72.0/22; +set_real_ip_from 141.101.64.0/18; +set_real_ip_from 162.158.0.0/15; +set_real_ip_from 172.64.0.0/13; +set_real_ip_from 173.245.48.0/20; +set_real_ip_from 188.114.96.0/20; +set_real_ip_from 190.93.240.0/20; +set_real_ip_from 197.234.240.0/22; +set_real_ip_from 198.41.128.0/17; +set_real_ip_from 2400:cb00::/32; +set_real_ip_from 2606:4700::/32; +set_real_ip_from 2803:f800::/32; +set_real_ip_from 2405:b500::/32; +set_real_ip_from 2405:8100::/32; +set_real_ip_from 2c0f:f248::/32; +set_real_ip_from 2a06:98c0::/29; diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-defaults.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-defaults.conf new file mode 100644 index 0000000..c018523 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-defaults.conf @@ -0,0 +1,33 @@ +default_type application/octet-stream; +tcp_nopush on; +tcp_nodelay on; +sendfile on; + +log_format bytes '$bytes_sent $request_length'; + +keepalive_timeout 15; +types_hash_max_size 2048; + +disable_symlinks if_not_owner from=$document_root; + +server_tokens off; + +client_max_body_size 1024m; +client_body_buffer_size 128k; + +server_names_hash_bucket_size 128; +server_names_hash_max_size 10240; + +ssl_dhparam /etc/nginx/ssl.crt/dhparams.pem; + +ssl_session_cache shared:SSL:10m; +ssl_session_timeout 5m; + +proxy_read_timeout 1800s; + +# https://mozilla.github.io/server-side-tls/ssl-config-generator/ intermediate configuration. +ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; +ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; +ssl_prefer_server_ciphers on; + +include /etc/nginx/nginx-directoryindex.conf; diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-directoryindex.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-directoryindex.conf new file mode 100644 index 0000000..535b8a0 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-directoryindex.conf @@ -0,0 +1 @@ +index index.html index.htm index.php; diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-events.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-events.conf new file mode 100644 index 0000000..2f414ba --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-events.conf @@ -0,0 +1 @@ +worker_connections 10240; \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-fastcgi-cache.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-fastcgi-cache.conf new file mode 100644 index 0000000..56a4470 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-fastcgi-cache.conf @@ -0,0 +1,4 @@ +fastcgi_cache_path /var/run/nginx-fastcgi-cache levels=1:2 keys_zone=FASTCGICACHE:100m inactive=60m; +fastcgi_cache_key "$scheme$request_method$host$request_uri"; +fastcgi_cache_use_stale error timeout invalid_header http_500; +fastcgi_ignore_headers Cache-Control Expires Set-Cookie; \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-gzip.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-gzip.conf new file mode 100644 index 0000000..8f3ae7c --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-gzip.conf @@ -0,0 +1,9 @@ +gzip on; +gzip_static on; +gzip_disable "msie6"; +gzip_http_version 1.1; +gzip_vary on; +gzip_comp_level 1; +gzip_proxied any; +gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js image/svg+xml; +gzip_buffers 16 8k; diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-info.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-info.conf new file mode 100644 index 0000000..098a60d --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-info.conf @@ -0,0 +1,13 @@ +location /nginx_status { + # Enable nginx status page + stub_status on; + + # Disable status page logging in access_log + access_log off; + + # Allow access from 127.0.0.1 + allow 127.0.0.1; + + # Deny all the other connections + deny all; +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-modsecurity.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-modsecurity.conf new file mode 100644 index 0000000..015af0d --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-modsecurity.conf @@ -0,0 +1,27 @@ +# Default recommended configuration +SecRuleEngine On +SecRequestBodyAccess On +SecDefaultAction "phase:2,deny,log,status:406" +SecRequestBodyLimitAction ProcessPartial +SecResponseBodyLimitAction ProcessPartial +SecRequestBodyLimit 13107200 +SecRequestBodyNoFilesLimit 131072 +SecAuditLogFormat JSON + +SecPcreMatchLimit 250000 +SecPcreMatchLimitRecursion 250000 + +SecCollectionTimeout 600 + +SecDebugLog /var/log/nginx/modsec_debug.log +SecDebugLogLevel 0 +SecAuditEngine RelevantOnly +SecAuditLog /var/log/nginx/modsec_audit.log +SecUploadDir /tmp +SecTmpDir /tmp +SecDataDir /tmp +SecTmpSaveUploadedFiles on + +# ModSecurity Core Rules Set and Local configuration +Include /etc/modsecurity.d/*.conf.main +Include /etc/modsecurity.d/*.conf diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-userdir.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-userdir.conf new file mode 100644 index 0000000..2a2a886 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-userdir.conf @@ -0,0 +1,20 @@ +#Support UserDir (~/user/) +location ~^/~(?.+?)(?/.*)?$ { + alias /home/$userdir_user/public_html$userdir_uri; + autoindex on; + + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + include /etc/nginx/fastcgi_params; + fastcgi_index index.php; + + #try_files does not work after alias directive + if (!-f $request_filename) { + return 404; + } + + fastcgi_param DOCUMENT_ROOT /home/$userdir_user/public_html; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_pass unix:/usr/local/php54/sockets/$userdir_user.sock; + } +} diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx-vhosts.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx-vhosts.conf new file mode 100644 index 0000000..dd8a89c --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx-vhosts.conf @@ -0,0 +1,56 @@ + server { + listen |IP|:|PORT_80|; + listen 127.0.0.1:|PORT_80|; + listen [::1]:|PORT_80|; +|LINKEDIP| + server_name $hostname |IP|; + + root /var/www/html; + + include /etc/nginx/nginx-userdir.conf; + + # Pass all .php files onto a php-fpm/php-fcgi server. + location ~ \.php$ { + try_files $uri =404; + + fastcgi_split_path_info ^(.+\.php)(/.+)$; + include /etc/nginx/fastcgi_params; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass unix:/usr/local/php54/sockets/webapps.sock; + } + + include /etc/nginx/nginx-info.conf; + include /etc/nginx/webapps.conf; + } + + # HTTPS server + # + server { + listen |IP|:|PORT_443| ssl|SPACE_HTTP2|; + listen 127.0.0.1:|PORT_443| ssl|SPACE_HTTP2|; + listen [::1]:|PORT_443| ssl|SPACE_HTTP2|; +|LINKEDIPSSL| + server_name $hostname |IP|; + + ssl_certificate /etc/nginx/ssl.crt/server.crt.combined; + ssl_certificate_key /etc/nginx/ssl.key/server.key; + + root /var/www/html; + + include /etc/nginx/nginx-userdir.conf; + + # Pass all .php files onto a php-fpm/php-fcgi server. + location ~ \.php$ { + try_files $uri =404; + + fastcgi_split_path_info ^(.+\.php)(/.+)$; + include /etc/nginx/fastcgi_params; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass unix:/usr/local/php54/sockets/webapps.sock; + } + + include /etc/nginx/nginx-info.conf; + include /etc/nginx/webapps.ssl.conf; + } diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx.conf new file mode 100644 index 0000000..cb4e623 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx.conf @@ -0,0 +1,31 @@ +#user nginx; + +worker_processes auto; +pid /var/run/nginx.pid; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +events { + include /etc/nginx/nginx-events.conf; +} + + +http { + include /etc/nginx/mime.types; + + # For user configurations not maintained by DirectAdmin. Empty by default. + include /etc/nginx/nginx-includes.conf; + + # Supplemental configuration + include /etc/nginx/nginx-fastcgi-cache.conf; + include /etc/nginx/nginx-cloudflare.conf; + include /etc/nginx/nginx-modsecurity-enable.conf; + include /etc/nginx/nginx-defaults.conf; + include /etc/nginx/nginx-gzip.conf; + include /etc/nginx/directadmin-ips.conf; + include /etc/nginx/directadmin-settings.conf; + include /etc/nginx/nginx-vhosts.conf; + include /etc/nginx/directadmin-vhosts.conf; +} diff --git a/services/custombuild/custombuild/configure/nginx/conf/nginx_limits.conf b/services/custombuild/custombuild/configure/nginx/conf/nginx_limits.conf new file mode 100644 index 0000000..6734374 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/nginx_limits.conf @@ -0,0 +1,8 @@ +fastcgi_buffer_size 128k; +fastcgi_buffers 256 16k; +fastcgi_busy_buffers_size 256k; +fastcgi_temp_file_write_size 256k; +fastcgi_send_timeout 600; +fastcgi_read_timeout 600; +fastcgi_intercept_errors on; +fastcgi_param HTTP_PROXY ""; diff --git a/services/custombuild/custombuild/configure/nginx/conf/webapps_settings.conf b/services/custombuild/custombuild/configure/nginx/conf/webapps_settings.conf new file mode 100644 index 0000000..f82dabb --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/conf/webapps_settings.conf @@ -0,0 +1,7 @@ +try_files $uri =404; +root /var/www/html/; +fastcgi_pass unix:/usr/local/php54/sockets/webapps.sock; +fastcgi_index index.php; +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +include /etc/nginx/fastcgi_params; +include /etc/nginx/nginx_limits.conf; diff --git a/services/custombuild/custombuild/configure/nginx/configure.modsecurity b/services/custombuild/custombuild/configure/nginx/configure.modsecurity new file mode 100644 index 0000000..fe15ab2 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/configure.modsecurity @@ -0,0 +1,4 @@ +#!/bin/sh +./configure \ + --enable-standalone-module \ + --disable-mlogc \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx/configure.nginx b/services/custombuild/custombuild/configure/nginx/configure.nginx new file mode 100644 index 0000000..a667328 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx/configure.nginx @@ -0,0 +1,20 @@ +#!/bin/sh +./configure \ + "--user=nginx" \ + "--group=nginx" \ + "--prefix=/usr" \ + "--sbin-path=/usr/sbin" \ + "--conf-path=/etc/nginx/nginx.conf" \ + "--pid-path=/var/run/nginx.pid" \ + "--http-log-path=/var/log/nginx/access_log" \ + "--error-log-path=/var/log/nginx/error_log" \ + "--without-mail_imap_module" \ + "--without-mail_smtp_module" \ + "--with-http_ssl_module" \ + "--with-http_realip_module" \ + "--with-http_stub_status_module" \ + "--with-http_gzip_static_module" \ + "--with-http_dav_module" \ + "--with-http_v2_module" \ + "--add-module=../ngx_cache_purge" \ + "--with-cc-opt='-D FD_SETSIZE=32768'" \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-cloudflare.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-cloudflare.conf new file mode 100644 index 0000000..26521e2 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-cloudflare.conf @@ -0,0 +1,23 @@ +real_ip_header X-Forwarded-For; +set_real_ip_from 103.21.244.0/22; +set_real_ip_from 103.22.200.0/22; +set_real_ip_from 103.31.4.0/22; +set_real_ip_from 104.16.0.0/13; +set_real_ip_from 104.24.0.0/14; +set_real_ip_from 108.162.192.0/18; +set_real_ip_from 131.0.72.0/22; +set_real_ip_from 141.101.64.0/18; +set_real_ip_from 162.158.0.0/15; +set_real_ip_from 172.64.0.0/13; +set_real_ip_from 173.245.48.0/20; +set_real_ip_from 188.114.96.0/20; +set_real_ip_from 190.93.240.0/20; +set_real_ip_from 197.234.240.0/22; +set_real_ip_from 198.41.128.0/17; +set_real_ip_from 2400:cb00::/32; +set_real_ip_from 2606:4700::/32; +set_real_ip_from 2803:f800::/32; +set_real_ip_from 2405:b500::/32; +set_real_ip_from 2405:8100::/32; +set_real_ip_from 2c0f:f248::/32; +set_real_ip_from 2a06:98c0::/29; diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-defaults.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-defaults.conf new file mode 100644 index 0000000..10e3118 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-defaults.conf @@ -0,0 +1,31 @@ +default_type application/octet-stream; +tcp_nopush on; +tcp_nodelay on; +sendfile on; + +log_format bytes '$bytes_sent $request_length'; + +keepalive_timeout 15; +types_hash_max_size 2048; + +disable_symlinks if_not_owner from=$document_root; + +server_tokens off; + +client_max_body_size 1024m; +client_body_buffer_size 128k; + +server_names_hash_bucket_size 128; +server_names_hash_max_size 10240; + +ssl_dhparam /etc/nginx/ssl.crt/dhparams.pem; + +ssl_session_cache shared:SSL:10m; +ssl_session_timeout 5m; + +# https://mozilla.github.io/server-side-tls/ssl-config-generator/ intermediate configuration. +ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; +ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; +ssl_prefer_server_ciphers on; + +include /etc/nginx/nginx-directoryindex.conf; diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-directoryindex.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-directoryindex.conf new file mode 100644 index 0000000..535b8a0 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-directoryindex.conf @@ -0,0 +1 @@ +index index.html index.htm index.php; diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-events.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-events.conf new file mode 100644 index 0000000..2f414ba --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-events.conf @@ -0,0 +1 @@ +worker_connections 10240; \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-fastcgi-cache.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-fastcgi-cache.conf new file mode 100644 index 0000000..56a4470 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-fastcgi-cache.conf @@ -0,0 +1,4 @@ +fastcgi_cache_path /var/run/nginx-fastcgi-cache levels=1:2 keys_zone=FASTCGICACHE:100m inactive=60m; +fastcgi_cache_key "$scheme$request_method$host$request_uri"; +fastcgi_cache_use_stale error timeout invalid_header http_500; +fastcgi_ignore_headers Cache-Control Expires Set-Cookie; \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-gzip.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-gzip.conf new file mode 100644 index 0000000..4754961 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-gzip.conf @@ -0,0 +1,9 @@ +gzip on; +gzip_static on; +gzip_disable "msie6"; +gzip_http_version 1.1; +gzip_vary on; +gzip_comp_level 1; +gzip_proxied any; +gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js image/svg+xml; +gzip_buffers 16 8k; \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-info.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-info.conf new file mode 100644 index 0000000..098a60d --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-info.conf @@ -0,0 +1,13 @@ +location /nginx_status { + # Enable nginx status page + stub_status on; + + # Disable status page logging in access_log + access_log off; + + # Allow access from 127.0.0.1 + allow 127.0.0.1; + + # Deny all the other connections + deny all; +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-modsecurity.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-modsecurity.conf new file mode 100644 index 0000000..015af0d --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-modsecurity.conf @@ -0,0 +1,27 @@ +# Default recommended configuration +SecRuleEngine On +SecRequestBodyAccess On +SecDefaultAction "phase:2,deny,log,status:406" +SecRequestBodyLimitAction ProcessPartial +SecResponseBodyLimitAction ProcessPartial +SecRequestBodyLimit 13107200 +SecRequestBodyNoFilesLimit 131072 +SecAuditLogFormat JSON + +SecPcreMatchLimit 250000 +SecPcreMatchLimitRecursion 250000 + +SecCollectionTimeout 600 + +SecDebugLog /var/log/nginx/modsec_debug.log +SecDebugLogLevel 0 +SecAuditEngine RelevantOnly +SecAuditLog /var/log/nginx/modsec_audit.log +SecUploadDir /tmp +SecTmpDir /tmp +SecDataDir /tmp +SecTmpSaveUploadedFiles on + +# ModSecurity Core Rules Set and Local configuration +Include /etc/modsecurity.d/*.conf.main +Include /etc/modsecurity.d/*.conf diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-proxy.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-proxy.conf new file mode 100644 index 0000000..7e88336 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-proxy.conf @@ -0,0 +1,6 @@ +proxy_connect_timeout 150s; +proxy_send_timeout 150s; +proxy_read_timeout 1800s; +proxy_buffer_size 128k; +proxy_buffers 4 256k; +proxy_busy_buffers_size 256k; \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-userdir.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-userdir.conf new file mode 100644 index 0000000..032f471 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-userdir.conf @@ -0,0 +1,16 @@ +#Support UserDir (~/user/) +location ~^/~(?.+?)(?/.*)?$ { + alias /home/$userdir_user/public_html$userdir_uri; + access_log off; + proxy_pass http://|IP|:|PORT_8080|; + proxy_set_header X-Client-IP $remote_addr; + proxy_set_header X-Accel-Internal /nginx_user_files; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +} + +location /nginx_user_files/ { + access_log /var/log/nginx/access_log_proxy; + alias /home/$userdir_user/public_html; + internal; +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-vhosts.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-vhosts.conf new file mode 100644 index 0000000..c95a776 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx-vhosts.conf @@ -0,0 +1,76 @@ + server { + listen |IP|:|PORT_80|; + listen 127.0.0.1:|PORT_80|; + listen [::1]:|PORT_80|; +|LINKEDIP| + server_name $hostname |IP|; + + root /var/www/html; + + include /etc/nginx/nginx-userdir.conf; + + location / { + access_log off; + proxy_pass http://|IP|:|PORT_8080|; + proxy_set_header X-Client-IP $remote_addr; + proxy_set_header X-Accel-Internal /nginx_static_files; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_hide_header Upgrade; + } + + location /nginx_static_files/ { + access_log /var/log/nginx/access_log_proxy; + alias /var/www/html/; + internal; + } + + # deny access to .htaccess, .env and .user.ini files + location ~ /(\.ht|\.env|\.user\.ini) { + deny all; + } + + include /etc/nginx/nginx-info.conf; + include /etc/nginx/webapps.hostname.conf; + } + + # HTTPS server + # + server { + listen |IP|:|PORT_443| ssl|SPACE_HTTP2|; + listen 127.0.0.1:|PORT_443| ssl|SPACE_HTTP2|; + listen [::1]:|PORT_443| ssl|SPACE_HTTP2|; +|LINKEDIPSSL| + server_name $hostname |IP|; + + ssl_certificate /etc/httpd/conf/ssl.crt/server.crt.combined; + ssl_certificate_key /etc/httpd/conf/ssl.key/server.key; + + root /var/www/html; + + include /etc/nginx/nginx-userdir.conf; + + location / { + access_log off; + proxy_pass https://|IP|:|PORT_8081|; + proxy_set_header X-Client-IP $remote_addr; + proxy_set_header X-Accel-Internal /nginx_static_files; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_hide_header Upgrade; + } + + location /nginx_static_files/ { + access_log /var/log/nginx/access_log_proxy; + alias /var/www/html/; + internal; + } + + # deny access to .htaccess, .env and .user.ini files + location ~ /(\.ht|\.env|\.user\.ini) { + deny all; + } + + include /etc/nginx/nginx-info.conf; + include /etc/nginx/webapps.hostname.conf; + } diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx.conf new file mode 100644 index 0000000..972f46f --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx.conf @@ -0,0 +1,32 @@ +#user nginx; + +worker_processes auto; +pid /var/run/nginx.pid; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +events { + include /etc/nginx/nginx-events.conf; +} + + +http { + include /etc/nginx/mime.types; + + # For user configurations not maintained by DirectAdmin. Empty by default. + include /etc/nginx/nginx-includes.conf; + + # Supplemental configuration + include /etc/nginx/nginx-fastcgi-cache.conf; + include /etc/nginx/nginx-cloudflare.conf; + include /etc/nginx/nginx-modsecurity-enable.conf; + include /etc/nginx/nginx-defaults.conf; + include /etc/nginx/nginx-gzip.conf; + include /etc/nginx/nginx-proxy.conf; + include /etc/nginx/directadmin-ips.conf; + include /etc/nginx/directadmin-settings.conf; + include /etc/nginx/nginx-vhosts.conf; + include /etc/nginx/directadmin-vhosts.conf; +} diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx_limits.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx_limits.conf new file mode 100644 index 0000000..6734374 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/nginx_limits.conf @@ -0,0 +1,8 @@ +fastcgi_buffer_size 128k; +fastcgi_buffers 256 16k; +fastcgi_busy_buffers_size 256k; +fastcgi_temp_file_write_size 256k; +fastcgi_send_timeout 600; +fastcgi_read_timeout 600; +fastcgi_intercept_errors on; +fastcgi_param HTTP_PROXY ""; diff --git a/services/custombuild/custombuild/configure/nginx_reverse/conf/webapps_settings.conf b/services/custombuild/custombuild/configure/nginx_reverse/conf/webapps_settings.conf new file mode 100644 index 0000000..f82dabb --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/conf/webapps_settings.conf @@ -0,0 +1,7 @@ +try_files $uri =404; +root /var/www/html/; +fastcgi_pass unix:/usr/local/php54/sockets/webapps.sock; +fastcgi_index index.php; +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +include /etc/nginx/fastcgi_params; +include /etc/nginx/nginx_limits.conf; diff --git a/services/custombuild/custombuild/configure/nginx_reverse/configure.modsecurity b/services/custombuild/custombuild/configure/nginx_reverse/configure.modsecurity new file mode 100644 index 0000000..fe15ab2 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/configure.modsecurity @@ -0,0 +1,4 @@ +#!/bin/sh +./configure \ + --enable-standalone-module \ + --disable-mlogc \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_reverse/configure.nginx b/services/custombuild/custombuild/configure/nginx_reverse/configure.nginx new file mode 100644 index 0000000..4fc58ea --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_reverse/configure.nginx @@ -0,0 +1,20 @@ +#!/bin/sh +./configure \ + "--user=nginx" \ + "--group=nginx" \ + "--prefix=/usr" \ + "--sbin-path=/usr/sbin" \ + "--conf-path=/etc/nginx/nginx.conf" \ + "--pid-path=/var/run/nginx.pid" \ + "--http-log-path=/var/log/nginx/access_log" \ + "--error-log-path=/var/log/nginx/error_log" \ + "--without-mail_imap_module" \ + "--without-mail_smtp_module" \ + "--with-http_ssl_module" \ + "--with-http_realip_module" \ + "--with-http_stub_status_module" \ + "--with-http_gzip_static_module" \ + "--with-http_dav_module" \ + "--with-http_v2_module" \ + "--add-module=../ngx_cache_purge" \ + "--with-cc-opt='-D FD_SETSIZE=32768'" diff --git a/services/custombuild/custombuild/configure/nginx_templates/cms_made_simple.conf b/services/custombuild/custombuild/configure/nginx_templates/cms_made_simple.conf new file mode 100644 index 0000000..3e87f85 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/cms_made_simple.conf @@ -0,0 +1,2 @@ +#INFO=name=CMS Made Simple +try_files $uri $uri/ ${template_location}index.php?page=$request_uri; diff --git a/services/custombuild/custombuild/configure/nginx_templates/codeigniter.conf b/services/custombuild/custombuild/configure/nginx_templates/codeigniter.conf new file mode 100644 index 0000000..5d4dd8b --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/codeigniter.conf @@ -0,0 +1,2 @@ +#INFO=name=Codeigniter +try_files $uri $uri/ ${template_location}index.php; diff --git a/services/custombuild/custombuild/configure/nginx_templates/dokuwiki.conf b/services/custombuild/custombuild/configure/nginx_templates/dokuwiki.conf new file mode 100644 index 0000000..8d08ff3 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/dokuwiki.conf @@ -0,0 +1,7 @@ +#INFO=name=Dokuwiki +if (!-f $request_filename) { + rewrite /_media/(.*) ${template_location}lib/exe/fetch.php?media=$relative_location last; + rewrite /_detail/(.*) ${template_location}lib/exe/detail.php?media=$relative_location last; + rewrite /_export/([^/]+)/(.*) ${template_location}doku.php?do=export_$1&id=$2 last; + rewrite ^ ${template_location}doku.php?id=$relative_location last; +} diff --git a/services/custombuild/custombuild/configure/nginx_templates/drupal.conf b/services/custombuild/custombuild/configure/nginx_templates/drupal.conf new file mode 100644 index 0000000..b96b787 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/drupal.conf @@ -0,0 +1,51 @@ +#INFO=name=Drupal +try_files $uri ${template_location}index.php?$query_string; + +# Very rarely should these ever be accessed outside of your lan +location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; +} + +location ~ \..*/.*\.php$ { + return 403; +} + +location ~ /sites/.*/private/ { + return 403; +} + +# Block access to scripts in site files directory +location ~ /sites/[^/]+/files/.*\.php$ { + deny all; +} + +# Allow "Well-Known URIs" as per RFC 5785 +location ~ /.well-known/ { + allow all; +} + +# Block access to "hidden" files and directories whose names begin with a +# period. This includes directories used by version control systems such +# as Subversion or Git to store control files. +location ~ (^|/)\. { + return 403; +} + +# Don't allow direct access to PHP files in the vendor directory. +location ~ /vendor/.*\.php$ { + deny all; + return 404; +} + +# Protect files and directories from prying eyes. +location ~* \.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|/(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock)|web\.config)$|/#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$ { + deny all; + return 404; +} + +# Handle private files through Drupal. Private file's path can come +# with a language prefix. +location ~ (/[a-z\-]+)?/system/files/ { + try_files $uri ${template_location}index.php?$query_string; +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/nginx_templates/elgg.conf b/services/custombuild/custombuild/configure/nginx_templates/elgg.conf new file mode 100644 index 0000000..4eb41f0 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/elgg.conf @@ -0,0 +1,12 @@ +#INFO=name=Elgg +if (!-f $request_filename) { + rewrite /action/([A-Za-z\_\-\/] +) ${template_location}engine/handlers/action_handler.php?action=$1 last; + rewrite /actions/([A-Za-z\_\-\/] +) ${template_location}engine/handlers/action_handler.php?action=$1 last; + rewrite /export/([A-Za-z] +)/([0-9] +) ${template_location}services/export/handler.php?view=$1&guid=$2 last; + rewrite /export/([A-Za-z] +)/([0-9] +)/([A-Za-z] +)/([A-Za-z0-9\_] +) ${template_location}services/export/handler.php?view=$1&guid=$2&type=$3&idname=$4 last; + rewrite /_css/css.css ${template_location}_css/css.php last; + rewrite /pg/([A-Za-z\_\-] +)/(.*) ${template_location}engine/handlers/pagehandler.php?handler=$1&page=$2 last; + rewrite /pg/([A-Za-z\_\-] +) ${template_location}engine/handlers/pagehandler.php?handler=$1 last; + rewrite /xml-rpc.php ${template_location}engine/handlers/xml-rpc_handler.php last; + rewrite /mt/mt-xmlrpc.cgi ${template_location}engine/handlers/xml-rpc_handler.php last; +} diff --git a/services/custombuild/custombuild/configure/nginx_templates/joomla.conf b/services/custombuild/custombuild/configure/nginx_templates/joomla.conf new file mode 100644 index 0000000..102a65a --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/joomla.conf @@ -0,0 +1,2 @@ +#INFO=name=Joomla +try_files $uri $uri/ ${template_location}index.php?$args; diff --git a/services/custombuild/custombuild/configure/nginx_templates/laravel.conf b/services/custombuild/custombuild/configure/nginx_templates/laravel.conf new file mode 100644 index 0000000..d28bf7c --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/laravel.conf @@ -0,0 +1,4 @@ +#INFO=name=Laravel +try_files $uri $uri/ ${template_location}index.php?$query_string; + + diff --git a/services/custombuild/custombuild/configure/nginx_templates/omeka.conf b/services/custombuild/custombuild/configure/nginx_templates/omeka.conf new file mode 100644 index 0000000..453952f --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/omeka.conf @@ -0,0 +1,5 @@ +#INFO=name=Omeka (Omeka-s) +location ~ /admin { + try_files $uri ${template_location}admin/index.php?$args; +} +try_files $uri $uri/ ${template_location}index.php?$args; diff --git a/services/custombuild/custombuild/configure/nginx_templates/opencart.conf b/services/custombuild/custombuild/configure/nginx_templates/opencart.conf new file mode 100644 index 0000000..75cce75 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/opencart.conf @@ -0,0 +1,2 @@ +#INFO=name=OpenCart +try_files $uri $uri/ ${template_location}index.php?$args; diff --git a/services/custombuild/custombuild/configure/nginx_templates/prestashop.conf b/services/custombuild/custombuild/configure/nginx_templates/prestashop.conf new file mode 100644 index 0000000..60ba67b --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/prestashop.conf @@ -0,0 +1,57 @@ +#INFO=name=Prestashop +# Redirect 404 errors to prestashop +error_page 404 ${template_location}index.php?controller=404; + +# Cloudflare / Max CDN fix +location ~* \.(eot|otf|ttf|woff(?:2)?)$ { + add_header Access-Control-Allow-Origin *; +} + +# Force pdf files to be downloaded +location ~* \.pdf$ { + add_header Content-Disposition Attachment; + add_header X-Content-Type-Options nosniff; +} + +# Force files inupload directory to be downloaded +location /upload/ { + add_header Content-Disposition Attachment; + add_header X-Content-Type-Options nosniff; +} + +# Images +rewrite /([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ ${template_location}img/p/$1/$1$2$3.jpg last; +rewrite /([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ ${template_location}img/p/$1/$2/$1$2$3$4.jpg last; +rewrite /([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ ${template_location}img/p/$1/$2/$3/$1$2$3$4$5.jpg last; +rewrite /([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ ${template_location}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last; +rewrite /([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ ${template_location}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last; +rewrite /([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ ${template_location}img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last; +rewrite /([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ ${template_location}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last; +rewrite /([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ ${template_location}img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last; +rewrite /c/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$ ${template_location}img/c/$1$2$3.jpg last; +rewrite /c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ ${template_location}img/c/$1$2.jpg last; + +# Source code directories +location ~ /(app|bin|cache|classes|config|controllers|docs|localization|override|src|tests|tools|translations|travis-scripts|vendor|var)/ { + deny all; +} +# vendor in modules directory +location ~ /modules/.*/vendor/ { + deny all; +} +# Prevent exposing other sensitive files +location ~ \.(yml|log|tpl|twig|sass)$ { + deny all; +} +# Prevent injection of php files +location ~ /upload { + location ~ \.php$ { + deny all; + } +} +location ~ /img { + location ~ \.php$ { + deny all; + } +} +try_files $uri $uri/ ${template_location}index.php?$uri&$args; diff --git a/services/custombuild/custombuild/configure/nginx_templates/pyrocms.conf b/services/custombuild/custombuild/configure/nginx_templates/pyrocms.conf new file mode 100644 index 0000000..6202f02 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/pyrocms.conf @@ -0,0 +1,5 @@ +#INFO=name=PyroCMS +try_files $uri $uri/ ${template_location}index.php; +location ~ /installer { + try_files $uri $uri/ ${template_location}installer/index.php; +} diff --git a/services/custombuild/custombuild/configure/nginx_templates/silverstripe.conf b/services/custombuild/custombuild/configure/nginx_templates/silverstripe.conf new file mode 100644 index 0000000..f8fdc63 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/silverstripe.conf @@ -0,0 +1,19 @@ +#INFO=name=SilverStripe +# Defend against SS-2015-013 -- http://www.silverstripe.org/software/download/security-releases/ss-2015-013 +if ($http_x_forwarded_host) { + return 400; +} + +try_files $uri ${template_location}index.php?$query_string; + +error_page 404 /assets/error-404.html; +error_page 500 /assets/error-500.html; + +# See caveats +error_page 502 /assets/error-500.html; +error_page 503 /assets/error-500.html; + +location ~ /assets/ { + sendfile on; + try_files $uri =404; +} diff --git a/services/custombuild/custombuild/configure/nginx_templates/symfony.conf b/services/custombuild/custombuild/configure/nginx_templates/symfony.conf new file mode 100644 index 0000000..b7671fb --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/symfony.conf @@ -0,0 +1,2 @@ +#INFO=name=Symfony +try_files $uri ${template_location}index.php$is_args$args; diff --git a/services/custombuild/custombuild/configure/nginx_templates/wordpress.conf b/services/custombuild/custombuild/configure/nginx_templates/wordpress.conf new file mode 100644 index 0000000..487cbdf --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/wordpress.conf @@ -0,0 +1,2 @@ +#INFO=name=WordPress +try_files $uri $uri/ ${template_location}index.php?$args; diff --git a/services/custombuild/custombuild/configure/nginx_templates/wordpress_with_fastcgi_cache.conf b/services/custombuild/custombuild/configure/nginx_templates/wordpress_with_fastcgi_cache.conf new file mode 100644 index 0000000..49d92f8 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/wordpress_with_fastcgi_cache.conf @@ -0,0 +1,30 @@ +#INFO=name=WordPress (FastCGI Cache) +set $skip_cache 0; + +# POST requests and urls with a query string should always go to PHP +if ($request_method = POST) { + set $skip_cache 1; +} + +if ($query_string != "") { + set $skip_cache 1; +} + +# Don't cache uris containing the following segments +if ($request_uri ~* "${template_location}wp-admin/|${template_location}xmlrpc.php|${template_location}wp-.*.php|${template_location}feed/|${template_location}index.php|${template_location}sitemap(_index)?.xml") { + set $skip_cache 1; +} + +# Don't use the cache for logged in users or recent commenters +if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { + set $skip_cache 1; +} + +location ~ /purge(/.*) { + fastcgi_cache_purge FASTCGICACHE "$scheme$request_method$host$1"; +} + +if (!-e $request_filename) +{ + rewrite ^(.+)$ ${template_location}index.php?q=$1 last; +} diff --git a/services/custombuild/custombuild/configure/nginx_templates/xenforo.conf b/services/custombuild/custombuild/configure/nginx_templates/xenforo.conf new file mode 100644 index 0000000..29c3776 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/xenforo.conf @@ -0,0 +1,2 @@ +#INFO=name=XenForo +try_files $uri $uri/ ${template_location}index.php?$uri&$args; diff --git a/services/custombuild/custombuild/configure/nginx_templates/yii.conf b/services/custombuild/custombuild/configure/nginx_templates/yii.conf new file mode 100644 index 0000000..06ba575 --- /dev/null +++ b/services/custombuild/custombuild/configure/nginx_templates/yii.conf @@ -0,0 +1,9 @@ +#INFO=name=Yii +location / { + try_files $uri $uri/ ${template_location}index.php?$args; +} + +location ~ /(protected|framework|themes/\w+/views) { + deny all; +} + diff --git a/services/custombuild/custombuild/configure/opcache/opcache.ini b/services/custombuild/custombuild/configure/opcache/opcache.ini new file mode 100644 index 0000000..2ad14b8 --- /dev/null +++ b/services/custombuild/custombuild/configure/opcache/opcache.ini @@ -0,0 +1,9 @@ +opcache.memory_consumption=128 +opcache.interned_strings_buffer=8 +opcache.max_accelerated_files=4000 +opcache.revalidate_freq=0 +opcache.enable_cli=1 +opcache.validate_permission=1 +opcache.use_cwd=1 +opcache.revalidate_path=1 +opcache.enable_file_override=1 diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-accesscontrol.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-accesscontrol.conf new file mode 100644 index 0000000..5cc80a9 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-accesscontrol.conf @@ -0,0 +1,4 @@ +accessControl{ + allow ALL, 173.245.48.0/20T, 103.21.244.0/22T, 103.22.200.0/22T, 103.31.4.0/22T, 141.101.64.0/18T, 108.162.192.0/18T, 190.93.240.0/20T, 188.114.96.0/20T, 197.234.240.0/22T, 198.41.128.0/17T, 162.158.0.0/15T, 104.16.0.0/13T, 104.24.0.0/14T, 172.64.0.0/13T, 131.0.72.0/22T, 2400:cb00::/32T, 2606:4700::/32T, 2803:f800::/32T, 2405:b500::/32T, 2405:8100::/32T, 2a06:98c0::/29T, 2c0f:f248::/32T + deny +} diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-accessdenydir.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-accessdenydir.conf new file mode 100644 index 0000000..099d232 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-accessdenydir.conf @@ -0,0 +1,7 @@ +accessDenyDir{ + dir / + dir /etc/* + dir /dev/* + dir conf/* + dir admin/conf/* +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-cgirlimit.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-cgirlimit.conf new file mode 100644 index 0000000..03fe321 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-cgirlimit.conf @@ -0,0 +1,13 @@ +CGIRLimit{ + maxCGIInstances 20 + minUID 11 + minGID 10 + priority 0 + CPUSoftLimit 10 + CPUHardLimit 50 + memSoftLimit 1460M + memHardLimit 1470M + procSoftLimit 400 + procHardLimit 450 + cgroups 2 +} diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-defaults.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-defaults.conf new file mode 100644 index 0000000..c07f5b9 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-defaults.conf @@ -0,0 +1,18 @@ +httpdWorkers 2 +user apache +group apache +priority 0 +autoRestart 1 +chrootPath / +enableChroot 0 +inMemBufSize 60M +swappingDir /tmp/lshttpd/swap +autoFix503 1 +gracefulRestartTimeout 300 +mime conf/mime.properties +showVersionNumber 0 +adminEmails root@localhost +disableWebAdmin 0 +enableLVE 0 +useIpInProxyHeader 2 +include /usr/local/lsws/conf/httpd-directoryindex.conf diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-directoryindex.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-directoryindex.conf new file mode 100644 index 0000000..b3844fd --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-directoryindex.conf @@ -0,0 +1 @@ +indexFiles index.html, index.htm, index.php diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-expires.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-expires.conf new file mode 100644 index 0000000..4e23b04 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-expires.conf @@ -0,0 +1,4 @@ +expires { + enableExpires 1 + expiresByType image/*=A604800,text/css=A604800,application/x-javascript=A604800,application/javascript=A604800,font/*=A604800,application/x-font-ttf=A604800 +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-fileaccesscontrol.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-fileaccesscontrol.conf new file mode 100644 index 0000000..eb65a15 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-fileaccesscontrol.conf @@ -0,0 +1,6 @@ +fileAccessControl{ + followSymbolLink 1 + checkSymbolLink 0 + requiredPermissionMask 000 + restrictedPermissionMask 000 +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-logs.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-logs.conf new file mode 100644 index 0000000..92fe461 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-logs.conf @@ -0,0 +1,19 @@ +errorlog /var/log/httpd/error_log { + logLevel ERROR + rollingSize 0 + enableStderrLog 1 +} + +accesslog /var/log/httpd/access_log { + logReferer 1 + logUserAgent 1 + logFormat %a %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i" + logHeaders 5 + rollingSize 0 +} + +accesslog /var/log/httpd/homedir.log { + useServer 0 + logFormat %O %I + rollingSize 0 +} diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-lscache.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-lscache.conf new file mode 100644 index 0000000..ba033a1 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-lscache.conf @@ -0,0 +1,19 @@ +module cache { + ls_enabled 1 + + checkPrivateCache 1 + checkPublicCache 1 + maxCacheObjSize 10000000 + maxStaleAge 200 + qsCache 1 + reqCookieCache 1 + respCookieCache 1 + ignoreReqCacheCtrl 1 + ignoreRespCacheCtrl 0 + + enableCache 0 + expireInSeconds 3600 + enablePrivateCache 0 + privateExpireInSeconds 3600 + +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-lsrecaptcha.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-lsrecaptcha.conf new file mode 100644 index 0000000..c9e5050 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-lsrecaptcha.conf @@ -0,0 +1,14 @@ +lsrecaptcha { + enabled 0 +# siteKey Your_SITE_KEY +# secretKey Your_SECRET_KEY + type 2 + maxTries 3 + allowedRobotHits 3 + + botWhiteList { +# google.com + } + regConnLimit 15000 + sslConnLimit 10000 +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-modsecurity.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-modsecurity.conf new file mode 100644 index 0000000..14892d8 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-modsecurity.conf @@ -0,0 +1,27 @@ +# Default recommended configuration +SecRuleEngine On +SecRequestBodyAccess On +SecDefaultAction "phase:2,deny,log,status:406" +SecRequestBodyLimitAction ProcessPartial +SecResponseBodyLimitAction ProcessPartial +SecRequestBodyLimit 13107200 +SecRequestBodyNoFilesLimit 131072 +SecAuditLogFormat JSON + +SecPcreMatchLimit 250000 +SecPcreMatchLimitRecursion 250000 + +SecCollectionTimeout 600 + +SecDebugLog /var/log/httpd/modsec_debug.log +SecDebugLogLevel 0 +SecAuditEngine RelevantOnly +SecAuditLog /var/log/httpd/modsec_audit.log +SecUploadDir /tmp +SecTmpDir /tmp +SecDataDir /tmp +SecTmpSaveUploadedFiles on + +# ModSecurity Core Rules Set and Local configuration +Include /etc/modsecurity.d/*.conf.main +Include /etc/modsecurity.d/*.conf diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-nodedefaults.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-nodedefaults.conf new file mode 100644 index 0000000..4267751 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-nodedefaults.conf @@ -0,0 +1,18 @@ +nodeDefaults{ + binPath + railsEnv 1 + maxConns 5 + env LSAPI_MAX_IDLE=60 + initTimeout 60 + retryTimeout 0 + pcKeepAliveTimeout 60 + respBuffer 0 + backlog 50 + runOnStartUp 1 + extMaxIdleTime 300 + priority 3 + memSoftLimit 2047M + memHardLimit 2047M + procSoftLimit 500 + procHardLimit 600 +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-perclientconnlimit.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-perclientconnlimit.conf new file mode 100644 index 0000000..80e3568 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-perclientconnlimit.conf @@ -0,0 +1,10 @@ +perClientConnLimit{ + staticReqPerSec 0 + dynReqPerSec 0 + outBandwidth 0 + inBandwidth 0 + softLimit 10000 + hardLimit 10000 + gracePeriod 15 + banPeriod 300 +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-phplimits.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-phplimits.conf new file mode 100644 index 0000000..16b670f --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-phplimits.conf @@ -0,0 +1,15 @@ +maxConns 35 +env PHP_LSAPI_CHILDREN=35 +env LSPHP_ENABLE_USER_INI=on +initTimeout 60 +memSoftLimit 2047M +memHardLimit 2047M +procSoftLimit 400 +procHardLimit 500 +backlog 100 +instances 1 +priority 0 +retryTimeout 0 +persistConn 1 +pcKeepAliveTimeout +respBuffer 0 diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-railsdefaults.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-railsdefaults.conf new file mode 100644 index 0000000..2a1bb75 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-railsdefaults.conf @@ -0,0 +1,18 @@ +railsDefaults{ + binPath + railsEnv 1 + maxConns 5 + env LSAPI_MAX_IDLE=60 + initTimeout 60 + retryTimeout 0 + pcKeepAliveTimeout 60 + respBuffer 0 + backlog 50 + runOnStartUp 1 + extMaxIdleTime 300 + priority 3 + memSoftLimit 2047M + memHardLimit 2047M + procSoftLimit 500 + procHardLimit 600 +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-tuning.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-tuning.conf new file mode 100644 index 0000000..2ec0114 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-tuning.conf @@ -0,0 +1,32 @@ +tuning{ + maxConnections 10000 + maxSSLConnections 5000 + connTimeout 300 + maxKeepAliveReq 10000 + smartKeepAlive 0 + keepAliveTimeout 5 + sndBufSize 0 + rcvBufSize 0 + gzipStaticCompressLevel 6 + gzipMaxFileSize 10M + eventDispatcher best + maxCachedFileSize 4096 + totalInMemCacheSize 20M + maxMMapFileSize 256K + totalMMapCacheSize 40M + useSendfile 1 + fileETag 28 + SSLCryptoDevice null + maxReqURLLen 8192 + maxReqHeaderSize 16380 + maxReqBodySize 2047M + maxDynRespHeaderSize 8192 + maxDynRespSize 2047M + enableGzipCompress 1 + enableBrCompress 1 + enableDynGzipCompress 1 + gzipCompressLevel 6 + compressibleTypes text/*, application/x-javascript, application/xml, application/javascript, image/svg+xml,application/rss+xml + gzipAutoUpdateStatic 1 + gzipMinFileSize 300 +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-vhosts.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-vhosts.conf new file mode 100644 index 0000000..c0f078c --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-vhosts.conf @@ -0,0 +1,59 @@ +virtualHost hostname { + user webapps + group webapps + vhRoot /var/www + allowSymbolLink 1 + enableScript 1 + restrained 1 + setUIDMode 2 + docRoot /var/www/html + vhDomain |HOSTNAME| + # order: Exact macth first; Then wildMatch; Then the default, which is * + # having "vhAliases *" is not dangerous, and would just serve the vhost as "default vhost" + vhAliases * + listeners |IP_LISTENER|-|PORT_80|, |IP_LISTENER|-|PORT_443||LINKEDIP_LISTENERS| + adminEmails root@localhost + enableGzip 1 + enableIpGeo 1 + + phpIniOverride { + php_admin_value session.save_path '/var/www/tmp' + php_admin_value upload_tmp_dir '/var/www/tmp' + } + + rewrite { + enable 1 + autoLoadHtaccess 1 + } + + vhssl { + keyFile /usr/local/lsws/ssl.key/server.key + certFile /usr/local/lsws/ssl.crt/server.crt.combined + certChain 1 + sslProtocol 24 + ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 + } + + # logs + errorlog /var/log/httpd/error_log { + logLevel ERROR + useServer 1 + } + + accesslog /var/log/httpd/access_log { + logReferer 1 + logUserAgent 1 + logFormat %a %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i" + logHeaders 5 + rollingSize 0 + } + + accesslog /var/log/httpd/homedir.log { + useServer 0 + logFormat %O %I + rollingSize 0 + } + + # include aliases + include /usr/local/lsws/conf/httpd-alias.conf +} diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-webapps-php.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-webapps-php.conf new file mode 100644 index 0000000..0d9f9d2 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-webapps-php.conf @@ -0,0 +1,12 @@ + allowBrowse 1 + addMIMEType application/x-httpd-lsphpwebapps php + addDefaultCharset off + phpIniOverride { + php_admin_value open_basedir "" + php_admin_value session.save_path "/var/www/tmp" + php_admin_value upload_tmp_dir "/var/www/tmp" + } + rewrite { + enable 1 + autoLoadHtaccess 1 + } diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-wsgidefaults.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-wsgidefaults.conf new file mode 100644 index 0000000..400c884 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd-wsgidefaults.conf @@ -0,0 +1,18 @@ +wsgiDefaults{ + binPath + railsEnv 1 + maxConns 5 + env LSAPI_MAX_IDLE=60 + initTimeout 60 + retryTimeout 0 + pcKeepAliveTimeout 60 + respBuffer 0 + backlog 50 + runOnStartUp 1 + extMaxIdleTime 300 + priority 3 + memSoftLimit 2047M + memHardLimit 2047M + procSoftLimit 500 + procHardLimit 600 +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/conf/httpd_config.conf b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd_config.conf new file mode 100644 index 0000000..aec4d8d --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/conf/httpd_config.conf @@ -0,0 +1,44 @@ +####################################################################################### +# Main configuration # +####################################################################################### +include /usr/local/lsws/conf/httpd-defaults.conf +include /usr/local/lsws/conf/httpd-logs.conf +####################################################################################### +# For user configurations not maintained by DirectAdmin. Empty by default. # +####################################################################################### +include /usr/local/lsws/conf/httpd-includes.conf +####################################################################################### +# Supplemental configuration # +####################################################################################### +include /usr/local/lsws/conf/httpd-expires.conf +include /usr/local/lsws/conf/httpd-tuning.conf +include /usr/local/lsws/conf/httpd-accessdenydir.conf +include /usr/local/lsws/conf/httpd-fileaccesscontrol.conf +include /usr/local/lsws/conf/httpd-perclientconnlimit.conf +include /usr/local/lsws/conf/httpd-cgirlimit.conf +include /usr/local/lsws/conf/httpd-accesscontrol.conf +include /usr/local/lsws/conf/httpd-railsdefaults.conf +include /usr/local/lsws/conf/httpd-wsgidefaults.conf +include /usr/local/lsws/conf/httpd-nodedefaults.conf +include /usr/local/lsws/conf/httpd-lscache.conf +include /usr/local/lsws/conf/httpd-lsrecaptcha.conf +####################################################################################### +# Files gennerated by CustomBuild # +####################################################################################### +include /usr/local/lsws/conf/httpd-modsecurity-enable.conf +include /usr/local/lsws/conf/httpd-extprocessors.conf +include /usr/local/lsws/conf/httpd-scripthandler.conf +####################################################################################### +# Do not change anything in files below, because they are rewritten by DirectAdmin # +####################################################################################### +# Include of default and SSL listeners # +include /usr/local/lsws/conf/listeners.conf +# Shared IP pages +include /usr/local/lsws/conf/ips.conf +# Virtual hosts +include /usr/local/lsws/conf/httpd-vhosts.conf +# All the DirectAdmin vhosts +include /usr/local/lsws/conf/directadmin-vhosts.conf +####################################################################################### +# End of included files that are rewritten by DirectAdmin # +####################################################################################### diff --git a/services/custombuild/custombuild/configure/openlitespeed/configure.openlitespeed b/services/custombuild/custombuild/configure/openlitespeed/configure.openlitespeed new file mode 100644 index 0000000..3214be2 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/configure.openlitespeed @@ -0,0 +1,6 @@ +#!/bin/sh +./configure \ + --with-group=apache \ + --with-user=apache \ + --with-iptogeo2 \ + --enable-iptogeo=no \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/httpd-extprocessors.template b/services/custombuild/custombuild/configure/openlitespeed/httpd-extprocessors.template new file mode 100644 index 0000000..e3d31d6 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/httpd-extprocessors.template @@ -0,0 +1,7 @@ +extProcessor lsphp|PHP_SHORTRELEASE| { + type lsapi + address uds://tmp/lshttpd/lsphp|PHP_SHORTRELEASE|.sock + autoStart 1 + path /usr/local/php|PHP_SHORTRELEASE|/bin/lsphp + include /usr/local/lsws/conf/httpd-phplimits.conf +} \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/openlitespeed/httpd-webapps-extprocessor.template b/services/custombuild/custombuild/configure/openlitespeed/httpd-webapps-extprocessor.template new file mode 100644 index 0000000..70d5b83 --- /dev/null +++ b/services/custombuild/custombuild/configure/openlitespeed/httpd-webapps-extprocessor.template @@ -0,0 +1,10 @@ +extProcessor lsphpwebapps { + type lsapi + address uds://tmp/lshttpd/lsphpwebapps.sock + autoStart 2 + path /usr/local/php|PHP_SHORTRELEASE|/bin/lsphp + runOnStartUp 3 + extUser webapps + extGroup webapps + include /usr/local/lsws/conf/httpd-phplimits.conf +} diff --git a/services/custombuild/custombuild/configure/php/configure.php53 b/services/custombuild/custombuild/configure/php/configure.php53 new file mode 100644 index 0000000..c9164e3 --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php53 @@ -0,0 +1,38 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php53 \ + --program-suffix=53 \ + --enable-fpm \ + --with-litespeed \ + --with-config-file-scan-dir=/usr/local/php53/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql=mysqlnd \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php54 b/services/custombuild/custombuild/configure/php/configure.php54 new file mode 100644 index 0000000..7a90684 --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php54 @@ -0,0 +1,38 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php54 \ + --program-suffix=54 \ + --enable-fpm \ + --with-litespeed \ + --with-config-file-scan-dir=/usr/local/php54/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql=mysqlnd \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php55 b/services/custombuild/custombuild/configure/php/configure.php55 new file mode 100644 index 0000000..0e05ffe --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php55 @@ -0,0 +1,38 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php55 \ + --program-suffix=55 \ + --enable-fpm \ + --with-litespeed \ + --with-config-file-scan-dir=/usr/local/php55/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql=mysqlnd \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php56 b/services/custombuild/custombuild/configure/php/configure.php56 new file mode 100644 index 0000000..7286341 --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php56 @@ -0,0 +1,38 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php56 \ + --program-suffix=56 \ + --enable-fpm \ + --with-litespeed \ + --with-config-file-scan-dir=/usr/local/php56/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql=mysqlnd \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php70 b/services/custombuild/custombuild/configure/php/configure.php70 new file mode 100644 index 0000000..a7a692e --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php70 @@ -0,0 +1,38 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php70 \ + --program-suffix=70 \ + --enable-fpm \ + --with-litespeed \ + --with-config-file-scan-dir=/usr/local/php70/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-webp-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php71 b/services/custombuild/custombuild/configure/php/configure.php71 new file mode 100644 index 0000000..3c66830 --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php71 @@ -0,0 +1,38 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php71 \ + --program-suffix=71 \ + --enable-fpm \ + --with-litespeed \ + --with-config-file-scan-dir=/usr/local/php71/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --enable-gd-native-ttf \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mcrypt \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-webp-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php72 b/services/custombuild/custombuild/configure/php/configure.php72 new file mode 100644 index 0000000..a4bc21a --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php72 @@ -0,0 +1,37 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php72 \ + --program-suffix=72 \ + --enable-fpm \ + --with-litespeed \ + --with-config-file-scan-dir=/usr/local/php72/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pcre-regex=/usr/local \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-sodium=/usr/local \ + --with-webp-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php73 b/services/custombuild/custombuild/configure/php/configure.php73 new file mode 100644 index 0000000..b5d1349 --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php73 @@ -0,0 +1,37 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php73 \ + --program-suffix=73 \ + --enable-fpm \ + --with-litespeed \ + --with-config-file-scan-dir=/usr/local/php73/lib/php.conf.d \ + --with-curl \ + --with-gd \ + --with-gettext \ + --with-jpeg-dir=/usr/local/lib \ + --with-freetype-dir=/usr/local/lib \ + --with-libxml-dir=/usr/local/lib \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-png-dir=/usr/local/lib \ + --with-sodium=/usr/local \ + --with-webp-dir=/usr/local/lib \ + --with-xsl \ + --with-zlib \ + --enable-zip \ + --without-libzip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --with-icu-dir=/usr/local/icu \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php74 b/services/custombuild/custombuild/configure/php/configure.php74 new file mode 100644 index 0000000..20d29b5 --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php74 @@ -0,0 +1,33 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php74 \ + --program-suffix=74 \ + --enable-fpm \ + --enable-litespeed \ + --with-config-file-scan-dir=/usr/local/php74/lib/php.conf.d \ + --with-curl \ + --enable-gd \ + --with-gettext \ + --with-jpeg \ + --with-freetype \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-sodium=/usr/local \ + --with-webp \ + --with-xsl \ + --with-zlib \ + --with-zip \ + --with-iconv=/usr/local \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php80 b/services/custombuild/custombuild/configure/php/configure.php80 new file mode 100644 index 0000000..384f82e --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php80 @@ -0,0 +1,32 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php80 \ + --program-suffix=80 \ + --enable-fpm \ + --enable-litespeed \ + --with-config-file-scan-dir=/usr/local/php80/lib/php.conf.d \ + --with-curl \ + --enable-gd \ + --with-gettext \ + --with-jpeg \ + --with-freetype \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-sodium=/usr/local \ + --with-webp \ + --with-xsl \ + --with-zlib \ + --with-zip \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php81 b/services/custombuild/custombuild/configure/php/configure.php81 new file mode 100644 index 0000000..bb8c91d --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php81 @@ -0,0 +1,32 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php81 \ + --program-suffix=81 \ + --enable-fpm \ + --enable-litespeed \ + --with-config-file-scan-dir=/usr/local/php81/lib/php.conf.d \ + --with-curl \ + --enable-gd \ + --with-gettext \ + --with-jpeg \ + --with-freetype \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-sodium=/usr/local \ + --with-webp \ + --with-xsl \ + --with-zlib \ + --with-zip \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php82 b/services/custombuild/custombuild/configure/php/configure.php82 new file mode 100644 index 0000000..28acffe --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php82 @@ -0,0 +1,32 @@ +#!/bin/sh +./configure \ + --prefix=/usr/local/php82 \ + --program-suffix=82 \ + --enable-fpm \ + --enable-litespeed \ + --with-config-file-scan-dir=/usr/local/php82/lib/php.conf.d \ + --with-curl \ + --enable-gd \ + --with-gettext \ + --with-jpeg \ + --with-freetype \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-sodium=/usr/local \ + --with-webp \ + --with-xsl \ + --with-zlib \ + --with-zip \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php83 b/services/custombuild/custombuild/configure/php/configure.php83 new file mode 100644 index 0000000..3f88472 --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php83 @@ -0,0 +1,35 @@ +#!/bin/sh +export CFLAGS="$CFLAGS -fPIC -fPIE" +export CXXFLAGS="$CXXFLAGS -fPIC -fPIE" +export LDFLAGS="$LDFLAGS -pie" +./configure \ + --prefix=/usr/local/php83 \ + --program-suffix=83 \ + --enable-fpm \ + --enable-litespeed \ + --with-config-file-scan-dir=/usr/local/php83/lib/php.conf.d \ + --with-curl \ + --enable-gd \ + --with-gettext \ + --with-jpeg \ + --with-freetype \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-sodium=/usr/local \ + --with-webp \ + --with-xsl \ + --with-zlib \ + --with-zip \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/php/configure.php84 b/services/custombuild/custombuild/configure/php/configure.php84 new file mode 100644 index 0000000..776c7bb --- /dev/null +++ b/services/custombuild/custombuild/configure/php/configure.php84 @@ -0,0 +1,35 @@ +#!/bin/sh +export CFLAGS="$CFLAGS -fPIC -fPIE" +export CXXFLAGS="$CXXFLAGS -fPIC -fPIE" +export LDFLAGS="$LDFLAGS -pie" +./configure \ + --prefix=/usr/local/php84 \ + --program-suffix=84 \ + --enable-fpm \ + --enable-litespeed \ + --with-config-file-scan-dir=/usr/local/php84/lib/php.conf.d \ + --with-curl \ + --enable-gd \ + --with-gettext \ + --with-jpeg \ + --with-freetype \ + --with-kerberos \ + --with-openssl \ + --with-mhash \ + --with-mysql-sock=/var/lib/mysql/mysql.sock \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-pear \ + --with-sodium=/usr/local \ + --with-webp \ + --with-xsl \ + --with-zlib \ + --with-zip \ + --enable-bcmath \ + --enable-calendar \ + --enable-exif \ + --enable-ftp \ + --enable-sockets \ + --enable-soap \ + --enable-mbstring \ + --enable-intl diff --git a/services/custombuild/custombuild/configure/phpmyadmin/config.inc.php b/services/custombuild/custombuild/configure/phpmyadmin/config.inc.php new file mode 100644 index 0000000..88d96d1 --- /dev/null +++ b/services/custombuild/custombuild/configure/phpmyadmin/config.inc.php @@ -0,0 +1,136 @@ +. + * + * @package PhpMyAdmin + */ + +/** + * This is needed for cookie based authentication to encrypt password in + * cookie. Needs to be 32 chars long. + */ +$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ + +/** + * Servers configuration + */ +$i = 0; + +/** + * First server + */ +$i++; + +if (isset($_COOKIE['SignonSession'])) +{ + $cfg['Servers'][$i]['auth_type'] = 'signon'; + $cfg['Servers'][$i]['SignonSession'] = 'SignonSession'; + $cfg['Servers'][$i]['SignonURL'] = 'direct_login/index.php'; + $cfg['Servers'][$i]['LogoutURL'] = 'direct_login/logout.php'; +} +else +{ + /* Authentication type */ + $cfg['Servers'][$i]['auth_type'] = 'cookie'; + $cfg['Servers'][$i]['AllowRoot'] = false; + /* Server parameters */ + $cfg['Servers'][$i]['host'] = 'localhost'; + $cfg['Servers'][$i]['compress'] = false; + $cfg['Servers'][$i]['AllowNoPassword'] = false; +} + +$cfg['Servers'][$i]['DisableIS'] = true; + +/** + * End of servers configuration + */ + +/** + * Directories for saving/loading files from server + */ +$cfg['UploadDir'] = ''; +$cfg['SaveDir'] = ''; + +/** + * Whether to display icons or text or both icons and text in table row + * action segment. Value can be either of 'icons', 'text' or 'both'. + * default = 'both' + */ +//$cfg['RowActionType'] = 'icons'; + +/** + * Defines whether a user should be displayed a "show all (records)" + * button in browse mode or not. + * default = false + */ +//$cfg['ShowAll'] = true; + +/** + * Number of rows displayed when browsing a result set. If the result + * set contains more rows, "Previous" and "Next". + * Possible values: 25, 50, 100, 250, 500 + * default = 25 + */ +//$cfg['MaxRows'] = 50; + +/** + * Disallow editing of binary fields + * valid values are: + * false allow editing + * 'blob' allow editing except for BLOB fields + * 'noblob' disallow editing except for BLOB fields + * 'all' disallow editing + * default = 'blob' + */ +//$cfg['ProtectBinary'] = false; + +/** + * Default language to use, if not browser-defined or user-defined + * (you find all languages in the locale folder) + * uncomment the desired line: + * default = 'en' + */ +//$cfg['DefaultLang'] = 'en'; +//$cfg['DefaultLang'] = 'de'; + +/** + * How many columns should be used for table display of a database? + * (a value larger than 1 results in some information being hidden) + * default = 1 + */ +//$cfg['PropertiesNumColumns'] = 2; + +/** + * Set to true if you want DB-based query history.If false, this utilizes + * JS-routines to display query history (lost by window close) + * + * This requires configuration storage enabled, see above. + * default = false + */ +//$cfg['QueryHistoryDB'] = true; + +/** + * When using DB-based query history, how many entries should be kept? + * default = 25 + */ +//$cfg['QueryHistoryMax'] = 100; + +/** + * Whether or not to query the user before sending the error report to + * the phpMyAdmin team when a JavaScript error occurs + * + * Available options + * ('ask' | 'always' | 'never') + * default = 'ask' + */ +//$cfg['SendErrorReports'] = 'always'; + +/** + * You can find more configuration options in the documentation + * in the doc/ folder or at . + */ diff --git a/services/custombuild/custombuild/configure/proftpd/conf/proftpd.conf b/services/custombuild/custombuild/configure/proftpd/conf/proftpd.conf new file mode 100644 index 0000000..62676d9 --- /dev/null +++ b/services/custombuild/custombuild/configure/proftpd/conf/proftpd.conf @@ -0,0 +1,82 @@ +ServerName "ProFTPd" +ServerType standalone + +Port 21 +PassivePorts 35000 35999 +UseReverseDNS off +TimesGMT off +TimeoutLogin 120 +TimeoutIdle 600 +TimeoutNoTransfer 900 +TimeoutStalled 3600 + +ScoreboardFile /var/run/proftpd/proftpd.scoreboard +PidFile /var/run/proftpd/proftpd.pid + +TransferLog /var/log/proftpd/xferlog.legacy +LogFormat default "%h %l %u %t \"%r\" %s %b" +LogFormat auth "%v [%P] %h %t \"%r\" %s" +LogFormat write "%h %l %u %t \"%r\" %s %b" + +#DON'T modify this log format. Its used by DirectAdmin to determine user usage +LogFormat userlog "%u %b %m %a" +ExtendedLog /var/log/proftpd/|IP|.bytes WRITE,READ userlog + +AuthUserFile /etc/proftpd.passwd +DefaultServer on +AuthOrder mod_auth_file.c + +#AuthPAM off + + + PassivePorts 35000 35999 + DeferWelcome on + + RequireValidShell no + + DefaultRoot ~ + DirFakeUser on ftp + DirFakeGroup on ftp + + User ftp + Group ftp + #UserAlias anonymous ftp + + AllowStoreRestart on + AllowRetrieveRestart on + + ListOptions -a + ShowSymlinks on + + ##Enable this with proftpd 1.3.4b+ to fix FileZilla MLSD + ##http://www.proftpd.org/docs/modules/mod_facts.html#FactsOptions + # FactsOptions UseSlink + + + Umask 022 + DisplayLogin welcome.msg + DisplayChdir readme + AllowOverwrite yes + ExtendedLog /var/log/proftpd/access.log WRITE,READ write + ExtendedLog /var/log/proftpd/auth.log AUTH auth + + + TLSEngine on + TLSLog /var/log/proftpd/proftpd.tls.log + TLSProtocol TLSv1 TLSv1.1 TLSv1.2 + TLSCipherSuite HIGH:MEDIUM:+TLSv1 + TLSVerifyClient off + TLSRequired off + + #Certificates + TLSRSACertificateFile /etc/exim.cert + TLSRSACertificateKeyFile /etc/exim.key + #TLSCACertificateFile /etc/ftpd/root.cert.pem + + # + # Paranoia logging level.... + # + #ExtendedLog /var/log/proftpd/paranoid.log ALL default + + +Include /etc/proftpd.vhosts.conf diff --git a/services/custombuild/custombuild/configure/proftpd/configure.proftpd b/services/custombuild/custombuild/configure/proftpd/configure.proftpd new file mode 100644 index 0000000..fc9648c --- /dev/null +++ b/services/custombuild/custombuild/configure/proftpd/configure.proftpd @@ -0,0 +1,13 @@ +#!/bin/sh +install_user=ftp \ +install_group=ftp \ +./configure \ +--prefix=/usr \ +--sysconfdir=/etc \ +--localstatedir=/var/run \ +--mandir=/usr/share/man \ +--without-pam \ +--disable-auth-pam \ +--enable-nls \ +--enable-dso \ +--with-modules=mod_ratio:mod_readme:mod_tls diff --git a/services/custombuild/custombuild/configure/pureftpd/configure.pureftpd b/services/custombuild/custombuild/configure/pureftpd/configure.pureftpd new file mode 100644 index 0000000..7b0c5fc --- /dev/null +++ b/services/custombuild/custombuild/configure/pureftpd/configure.pureftpd @@ -0,0 +1,13 @@ +#!/bin/sh +./configure \ +--prefix=/usr \ +--sysconfdir=/etc \ +--with-certfile=/etc/pure-ftpd.pem \ +--with-tls \ +--with-puredb \ +--with-quotas \ +--with-altlog \ +--with-ftpwho \ +--with-ratios \ +--with-welcomemsg \ +--with-uploadscript diff --git a/services/custombuild/custombuild/configure/pureftpd/pure-ftpd.conf b/services/custombuild/custombuild/configure/pureftpd/pure-ftpd.conf new file mode 100644 index 0000000..1bd13da --- /dev/null +++ b/services/custombuild/custombuild/configure/pureftpd/pure-ftpd.conf @@ -0,0 +1,462 @@ + +############################################################ +# # +# Configuration file for pure-ftpd # +# # +############################################################ + +# If you want to run Pure-FTPd with this configuration +# instead of command-line options, please run the +# following command : +# +# /usr/sbin/pure-ftpd /etc/etc/pure-ftpd.conf +# +# Online documentation: +# https://www.pureftpd.org/project/pure-ftpd/doc + + +# Restrict users to their home directory + +ChrootEveryone yes + + + +# If the previous option is set to "no", members of the following group +# won't be restricted. Others will be. If you don't want chroot()ing anyone, +# just comment out ChrootEveryone and TrustedGID. + +# TrustedGID 100 + + + +# Turn on compatibility hacks for broken clients + +BrokenClientsCompatibility no + + + +# Maximum number of simultaneous users + +MaxClientsNumber 50 + + + +# Run as a background process + +Daemonize yes + + + +# Maximum number of simultaneous clients with the same IP address + +MaxClientsPerIP 15 + + + +# If you want to log all client commands, set this to "yes". +# This directive can be specified twice to also log server responses. + +VerboseLog no + + + +# List dot-files even when the client doesn't send "-a". + +DisplayDotFiles yes + + + +# Disallow authenticated users - Act only as a public FTP server. + +AnonymousOnly no + + + +# Disallow anonymous connections. Only accept authenticated users. + +NoAnonymous yes + + + +# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*) +# The default facility is "ftp". "none" disables logging. + +SyslogFacility ftp + + + +# Display fortune cookies + +# FortunesFile /usr/share/fortune/zippy + + + +# Don't resolve host names in log files. Recommended unless you trust +# reverse host names, and don't care about DNS resolution being possibly slow. + +DontResolve yes + + + +# Maximum idle time in minutes (default = 15 minutes) + +MaxIdleTime 15 + + + +# LDAP configuration file (see README.LDAP) + +# LDAPConfigFile /etc/pureftpd-ldap.conf + + + +# MySQL configuration file (see README.MySQL) + +# MySQLConfigFile /etc/pureftpd-mysql.conf + + +# PostgreSQL configuration file (see README.PGSQL) + +# PGSQLConfigFile /etc/pureftpd-pgsql.conf + + +# PureDB user database (see README.Virtual-Users) + +PureDB /etc/pureftpd.pdb + + +# Path to pure-authd socket (see README.Authentication-Modules) + +# ExtAuth /var/run/ftpd.sock + + + +# If you want to enable PAM authentication, uncomment the following line + +# PAMAuthentication yes + + + +# If you want simple Unix (/etc/passwd) authentication, uncomment this + +# UnixAuthentication yes + + + +# Please note that LDAPConfigFile, MySQLConfigFile, PAMAuthentication and +# UnixAuthentication can be used specified once, but can be combined +# together. For instance, if you use MySQLConfigFile, then UnixAuthentication, +# the SQL server will be used first. If the SQL authentication fails because the +# user wasn't found, a new attempt will be done using system authentication. +# If the SQL authentication fails because the password didn't match, the +# authentication chain stops here. Authentication methods are chained in +# the order they are given. + + + +# 'ls' recursion limits. The first argument is the maximum number of +# files to be displayed. The second one is the max subdirectories depth. + +LimitRecursion 10000 8 + + + +# Are anonymous users allowed to create new directories? + +AnonymousCanCreateDirs no + + + +# If the system load is greater than the given value, anonymous users +# aren't allowed to download. + +MaxLoad 4 + + + +# Port range for passive connections - keep it as broad as possible. + +PassivePortRange 35000 35999 + + + +# Force an IP address in PASV/EPSV/SPSV replies. - for NAT. +# Symbolic host names are also accepted for gateways with dynamic IP +# addresses. + +# ForcePassiveIP 192.168.0.1 + + + +# Upload/download ratio for anonymous users. + +# AnonymousRatio 1 10 + + + +# Upload/download ratio for all users. +# This directive supersedes the previous one. + +# UserRatio 1 10 + + + +# Disallow downloads of files owned by the "ftp" system user; +# files that were uploaded but not validated by a local admin. + +AntiWarez yes + + + +# IP address/port to listen to (default=all IP addresses, port 21). + +# Bind 127.0.0.1,21 + + + +# Maximum bandwidth for anonymous users in KB/s + +# AnonymousBandwidth 8 + + + +# Maximum bandwidth for *all* users (including anonymous) in KB/s +# Use AnonymousBandwidth *or* UserBandwidth, not both. + +# UserBandwidth 8 + + + +# File creation mask. : . +# 177:077 if you feel paranoid. + +Umask 133:022 + + + +# Minimum UID for an authenticated user to log in. +# For example, a value of 100 prevents all users whose user id is below +# 100 from logging in. If you want "root" to be able to log in, use 0. + +MinUID 99 + + + +# Allow FXP transfers for authenticated users. + +AllowUserFXP yes + + + +# Allow anonymous FXP for anonymous and non-anonymous users. + +AllowAnonymousFXP no + + + +# Users can't delete/write files starting with a dot ('.') +# even if they own them. But if TrustedGID is enabled, that group +# will exceptionally have access to dot-files. + +ProhibitDotFilesWrite no + + + +# Prohibit *reading* of files starting with a dot (.history, .ssh...) + +ProhibitDotFilesRead no + + + +# Don't overwrite files. When a file whose name already exist is uploaded, +# it gets automatically renamed to file.1, file.2, file.3, ... + +AutoRename no + + + +# Prevent anonymous users from uploading new files (no = upload is allowed) + +AnonymousCantUpload no + + + +# Only connections to this specific IP address are allowed to be +# non-anonymous. You can use this directive to open several public IPs for +# anonymous FTP, and keep a private firewalled IP for remote administration. +# You can also only allow a non-routable local IP (such as 10.x.x.x) for +# authenticated users, and run a public anon-only FTP server on another IP. + +# TrustedIP 10.1.1.1 + + + +# To add the PID to log entries, uncomment the following line. + +# LogPID yes + + + +# Create an additional log file with transfers logged in a Apache-like format : +# fw.c9x.org - jedi [13/Apr/2017:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338 +# This log file can then be processed by common HTTP traffic analyzers. + +# AltLog clf:/var/log/pureftpd.log + + + +# Create an additional log file with transfers logged in a format optimized +# for statistic reports. + +AltLog stats:/var/log/pureftpd.log + + + +# Create an additional log file with transfers logged in the standard W3C +# format (compatible with many HTTP log analyzers) + +# AltLog w3c:/var/log/pureftpd.log + + + +# Disallow the CHMOD command. Users cannot change perms of their own files. + +# NoChmod yes + + + +# Allow users to resume/upload files, but *NOT* to delete them. + +# KeepAllFiles yes + + + +# Automatically create home directories if they are missing + +# CreateHomeDir yes + + + +# Enable virtual quotas. The first value is the max number of files. +# The second value is the maximum size, in megabytes. +# So 1000:10 limits every user to 1000 files and 10 MB. + +# Quota 1000:10 + + + +# If your pure-ftpd has been compiled with standalone support, you can change +# the location of the pid file. The default is /var/run/pure-ftpd.pid + +PIDFile /run/pure-ftpd.pid + + + +# If your pure-ftpd has been compiled with pure-uploadscript support, +# this will make pure-ftpd write info about new uploads to +# /var/run/pure-ftpd.upload.pipe so pure-uploadscript can read it and +# spawn a script to handle the upload. +# Don't enable this option if you don't actually use pure-uploadscript. + +CallUploadScript no + + + +# This option is useful on servers where anonymous upload is +# allowed. When the partition is more that percententage full, +# new uploads are disallowed. + +MaxDiskUsage 99 + + + +# Set to 'yes' to prevent users from renaming files. + +# NoRename yes + + + +# Be 'customer proof': forbids common customer mistakes such as +# 'chmod 0 public_html', that are valid, but can cause customers to +# unintentionally shoot themselves in the foot. + +CustomerProof yes + + + +# Per-user concurrency limits. Will only work if the FTP server has +# been compiled with --with-peruserlimits. +# Format is: : +# For example, 3:20 means that an authenticated user can have up to 3 active +# sessions, and that up to 20 anonymous sessions are allowed. + +# PerUserLimits 3:20 + + + +# When a file is uploaded and there was already a previous version of the file +# with the same name, the old file will neither get removed nor truncated. +# The file will be stored under a temporary name and once the upload is +# complete, it will be atomically renamed. For example, when a large PHP +# script is being uploaded, the web server will keep serving the old version and +# later switch to the new one as soon as the full file will have been +# transferred. This option is incompatible with virtual quotas. + +# NoTruncate yes + + + +# This option accepts three values: +# 0: disable SSL/TLS encryption layer (default). +# 1: accept both cleartext and encrypted sessions. +# 2: refuse connections that don't use the TLS security mechanism, +# including anonymous sessions. +# Do _not_ uncomment this blindly. Double check that: +# 1) The server has been compiled with TLS support (--with-tls), +# 2) A valid certificate is in place, +# 3) Only compatible clients will log in. + +TLS 1 + + +# Cipher suite for TLS sessions. +# The default suite is secure and setting this property is usually +# only required to *lower* the security to cope with legacy clients. +# Prefix with -C: in order to require valid client certificates. +# If -C: is used, make sure that clients' public keys are present on +# the server. + +TLSCipherSuite HIGH + + + +# Certificate file, for TLS + +CertFile /etc/pure-ftpd.pem +# CertFileAndKey "/etc/pure-ftpd.cert" "/etc/pure-ftpd.key" + +# Unix socket of the external certificate handler, for TLS + +ExtCert /var/run/pure-certd.sock + +# Listen only to IPv4 addresses in standalone mode (ie. disable IPv6) +# By default, both IPv4 and IPv6 are enabled. + +# IPV4Only yes + + + +# Listen only to IPv6 addresses in standalone mode (i.e. disable IPv4) +# By default, both IPv4 and IPv6 are enabled. + +# IPV6Only yes + + + +# UTF-8 support for file names (RFC 2640) +# Set the charset of the server filesystem and optionally the default charset +# for remote clients that don't use UTF-8. +# Works only if pure-ftpd has been compiled with --with-rfc2640 + +# FileSystemCharset big5 +# ClientCharset big5 diff --git a/services/custombuild/custombuild/configure/pureftpd/pureftpd_sni.sh b/services/custombuild/custombuild/configure/pureftpd/pureftpd_sni.sh new file mode 100644 index 0000000..0f930a2 --- /dev/null +++ b/services/custombuild/custombuild/configure/pureftpd/pureftpd_sni.sh @@ -0,0 +1,26 @@ +#!/bin/sh +echo 'action:fallback' +DOMAIN_NAME=`echo "${CERTD_SNI_NAME}" | tr '[:upper:]' '[:lower:]'` +if [ -s /etc/virtual/snidomains ] && [ ! -z "${DOMAIN_NAME}" ] && [ "${DOMAIN_NAME}" != "`hostname -f`" ]; then + WILDCARD_DOMAIN=`echo "${DOMAIN_NAME}" | perl -p0 -e 's|[^.]*|*|'` + PARENT_DOMAIN=`echo "${DOMAIN_NAME}" | perl -p0 -e 's|[^.]*\.||'` + if grep -m1 -qE "^${DOMAIN_NAME}:|^${PARENT_DOMAIN}:|^\\${WILDCARD_DOMAIN}:" /etc/virtual/snidomains; then + USERNAME=`grep -m1 -E "^${DOMAIN_NAME}:|^${PARENT_DOMAIN}:|^\\\\${WILDCARD_DOMAIN}:" /etc/virtual/snidomains | cut -d':' -f2` + REALDOMAIN=`grep -m1 -E "^${DOMAIN_NAME}:|^${PARENT_DOMAIN}:|^\\\\${WILDCARD_DOMAIN}:" /etc/virtual/snidomains | cut -d':' -f3` + if [ -s /usr/local/directadmin/data/users/${USERNAME}/domains/${REALDOMAIN}.key ]; then + echo "key_file:/usr/local/directadmin/data/users/${USERNAME}/domains/${REALDOMAIN}.key" + fi + if [ -s "/usr/local/directadmin/data/users/${USERNAME}/domains/${REALDOMAIN}.cert.combined" ]; then + echo "cert_file:/usr/local/directadmin/data/users/${USERNAME}/domains/${REALDOMAIN}.cert.combined" + elif [ -s "/usr/local/directadmin/data/users/${USERNAME}/domains/${REALDOMAIN}.cert" ]; then + echo "cert_file:/usr/local/directadmin/data/users/${USERNAME}/domains/${REALDOMAIN}.cert" + else + echo "cert_file:/etc/pure-ftpd.pem" + fi + else + echo "cert_file:/etc/pure-ftpd.pem" + fi +else + echo "cert_file:/etc/pure-ftpd.pem" +fi +echo 'end' diff --git a/services/custombuild/custombuild/configure/pureftpd/pureftpd_uploadscan.sh b/services/custombuild/custombuild/configure/pureftpd/pureftpd_uploadscan.sh new file mode 100644 index 0000000..cc67843 --- /dev/null +++ b/services/custombuild/custombuild/configure/pureftpd/pureftpd_uploadscan.sh @@ -0,0 +1,9 @@ +#!/bin/sh +if echo "$1" | grep -m1 -q "/.htaccess$" && [ -e /usr/local/lsws/bin/lshttpd ]; then + if [ "`readlink /usr/local/lsws/bin/lshttpd`" = "/usr/local/lsws/bin/openlitespeed" ] && [ -e /tmp/lshttpd/lshttpd.pid ]; then + /usr/local/lsws/bin/lswsctrl restart + fi +elif [ -x /usr/local/bin/clamdscan ]; then + /usr/local/bin/clamdscan --remove --quiet --no-summary "$1" +fi +exit 0; \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/rspamd/exim.spamd.conf b/services/custombuild/custombuild/configure/rspamd/exim.spamd.conf new file mode 100644 index 0000000..72fce0d --- /dev/null +++ b/services/custombuild/custombuild/configure/rspamd/exim.spamd.conf @@ -0,0 +1,50 @@ +# do not scan messages submitted from our own hosts +# +relay_hosts is assumed to be a list of hosts in configuration +accept hosts = +relay_hosts + +# do not scan messages from submission port (or maybe you want to?) +accept condition = ${if eq{$interface_port}{587}} + +# skip scanning for authenticated users (if desired?) +accept authenticated = * + +#allow large files though. +accept condition = ${if >={$message_size}{500k}{yes}{no}} + +# scan the message with rspamd +warn spam = nobody:true + +# This will set variables as follows: +# $spam_action is the action recommended by rspamd +# $spam_score is the message score (we unlikely need it) +# $spam_score_int is spam score multiplied by 10 +# $spam_report lists symbols matched & protocol messages +# $spam_bar is a visual indicator of spam/ham level + +# use greylisting available in rspamd v1.3+ +#defer message = Please try again later +# condition = ${if eq{$spam_action}{soft reject}} + +deny message = Message discarded as high-probability spam + condition = ${if eq{$spam_action}{reject}} + +# Remove foreign headers +warn remove_header = x-spam-bar : x-spam-score : x-spam-report : x-spam-status + +# add spam-score and spam-report header when "add header" action is recommended by rspamd +warn +condition = ${if eq{$spam_action}{add header}} +add_header = X-Spam-Score: $spam_score ($spam_bar) +add_header = X-Spam-Report: $spam_report +set acl_m_spam_assassin_has_run = 1 + +# add x-spam-status header if message is not ham +warn +! condition = ${if eq{$spam_action}{no action}} +add_header = X-Spam-Status: Yes +set acl_m_is_spam = 1 + +# add x-spam-bar header if score is positive +warn +condition = ${if >{$spam_score_int}{0}} + add_header = X-Spam-Bar: $spam_bar \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/spamassassin/exim.spamd.conf b/services/custombuild/custombuild/configure/spamassassin/exim.spamd.conf new file mode 100644 index 0000000..f81b41f --- /dev/null +++ b/services/custombuild/custombuild/configure/spamassassin/exim.spamd.conf @@ -0,0 +1,44 @@ +# do not scan messages submitted from our own hosts +# +relay_hosts is assumed to be a list of hosts in configuration +accept hosts = +relay_hosts + +# do not scan messages from submission port (or maybe you want to?) +accept condition = ${if eq{$interface_port}{587}} + +# skip scanning for authenticated users (if desired?) +accept authenticated = * + +#allow large files though. +accept condition = ${if >={$message_size}{500k}{yes}{no}} + +# scan the message with SpamAssasin +warn spam = ${lookup{$domain}lsearch{/etc/virtual/domainowners}{$value}{nobody}}/defer_ok + +# This will set variables as follows: +# $spam_action is the action recommended by rspamd +# $spam_score is the message score (we unlikely need it) +# $spam_score_int is spam score multiplied by 10 +# $spam_report lists symbols matched & protocol messages +# $spam_bar is a visual indicator of spam/ham level + +deny message = Message discarded as high-probability spam + condition = ${if eq{$spam_action}{reject}} + +# Remove foreign headers +warn remove_header = x-spam-bar : x-spam-score : x-spam-report : x-spam-status + +# add spam-score and spam-report header when "add header" action is recommended by rspamd +warn +condition = ${if eq{$spam_action}{add header}} +add_header = X-Spam-Score: $spam_score ($spam_bar) +add_header = X-Spam-Report: $spam_report + +# add x-spam-status header if message is not ham +warn +! condition = ${if eq{$spam_action}{no action}} +add_header = X-Spam-Status: Yes + +# add x-spam-bar header if score is positive +warn +condition = ${if >{$spam_score_int}{0}} + add_header = X-Spam-Bar: $spam_bar \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/suhosin/php_uploadscan.sh b/services/custombuild/custombuild/configure/suhosin/php_uploadscan.sh new file mode 100644 index 0000000..981e18c --- /dev/null +++ b/services/custombuild/custombuild/configure/suhosin/php_uploadscan.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Make the script CageFS compatible +if [ -e ~/.cagefs$1 ]; then + USER_HOMEDIR=`echo ~` + FILE=${USER_HOMEDIR}/.cagefs$1 +else + FILE=$1 +fi + +if [ -n "`/usr/local/bin/clamdscan --infected --no-summary ${FILE}`" ]; then + echo 0; +else + echo 1; +fi +exit 0; \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/suhosin/suhosin.ini b/services/custombuild/custombuild/configure/suhosin/suhosin.ini new file mode 100644 index 0000000..361f5d8 --- /dev/null +++ b/services/custombuild/custombuild/configure/suhosin/suhosin.ini @@ -0,0 +1 @@ +suhosin.session.encrypt=Off \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/suphp/configure.suphp b/services/custombuild/custombuild/configure/suphp/configure.suphp new file mode 100644 index 0000000..641d495 --- /dev/null +++ b/services/custombuild/custombuild/configure/suphp/configure.suphp @@ -0,0 +1,8 @@ +#!/bin/sh +"./configure" \ +"--prefix=/usr/local/suphp" \ +"--sysconfdir=/usr/local/suphp/etc/" \ +"--with-apache-user=apache" \ +"--with-setid-mode=paranoid" \ +"--with-apxs=/usr/sbin/apxs" \ +"--disable-checkpath" diff --git a/services/custombuild/custombuild/configure/systemd/clamd.service b/services/custombuild/custombuild/configure/systemd/clamd.service new file mode 100644 index 0000000..110d4a8 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/clamd.service @@ -0,0 +1,18 @@ +# clamav binary startup for DirectAdmin servers +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description = Generic clamav scanner daemon +After = syslog.target nss-lookup.target network.target + +[Service] +Type = simple +ExecStartPre=-/bin/mkdir -p /var/run/clamd +ExecStartPre=-/bin/chown -R clamav:clamav /var/run/clamd +ExecStart = /usr/local/sbin/clamd --foreground=yes +Restart = on-failure +PrivateTmp = true + +[Install] +WantedBy = multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/clamd.service.debian b/services/custombuild/custombuild/configure/systemd/clamd.service.debian new file mode 100644 index 0000000..110d4a8 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/clamd.service.debian @@ -0,0 +1,18 @@ +# clamav binary startup for DirectAdmin servers +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description = Generic clamav scanner daemon +After = syslog.target nss-lookup.target network.target + +[Service] +Type = simple +ExecStartPre=-/bin/mkdir -p /var/run/clamd +ExecStartPre=-/bin/chown -R clamav:clamav /var/run/clamd +ExecStart = /usr/local/sbin/clamd --foreground=yes +Restart = on-failure +PrivateTmp = true + +[Install] +WantedBy = multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/dependencies/httpd-2.4.10-systemd.patch b/services/custombuild/custombuild/configure/systemd/dependencies/httpd-2.4.10-systemd.patch new file mode 100644 index 0000000..a45578f --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/dependencies/httpd-2.4.10-systemd.patch @@ -0,0 +1,227 @@ +--- a/modules/arch/unix/config5.m4 ++++ b/modules/arch/unix/config5.m4 +@@ -18,6 +18,16 @@ APACHE_MODULE(privileges, Per-virtualhost Unix UserIDs and enhanced security for + fi + ]) + ++APACHE_MODULE(systemd, Systemd support, , , all, [ ++ if test "${ac_cv_header_systemd_sd_daemon_h}" = "no" || test -z "${SYSTEMD_LIBS}"; then ++ AC_MSG_WARN([Your system does not support systemd.]) ++ enable_systemd="no" ++ else ++ APR_ADDTO(MOD_SYSTEMD_LDADD, [$SYSTEMD_LIBS]) ++ enable_systemd="yes" ++ fi ++]) ++ + APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current]) + + APACHE_MODPATH_FINISH +diff --git a/modules/arch/unix/mod_systemd.c b/modules/arch/unix/mod_systemd.c +new file mode 100644 +index 0000000..5381c98 +--- /dev/null ++++ b/modules/arch/unix/mod_systemd.c +@@ -0,0 +1,145 @@ ++/* Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache License, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ * ++ */ ++ ++#include ++#include ++#include "ap_mpm.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#include "unixd.h" ++#include "scoreboard.h" ++#include "mpm_common.h" ++ ++#include "systemd/sd-daemon.h" ++ ++#if APR_HAVE_UNISTD_H ++#include ++#endif ++ ++static int shutdown_timer = 0; ++static int shutdown_counter = 0; ++static unsigned long bytes_served; ++static pid_t mainpid; ++ ++static int systemd_pre_mpm(apr_pool_t *p, ap_scoreboard_e sb_type) ++{ ++ int rv; ++ ++ ap_extended_status = 1; ++ mainpid = getpid(); ++ ++ rv = sd_notifyf(0, "READY=1\n" ++ "STATUS=Processing requests...\n" ++ "MAINPID=%" APR_PID_T_FMT, mainpid); ++ if (rv < 0) { ++ ap_log_perror(APLOG_MARK, APLOG_ERR, 0, p, APLOGNO(02395) ++ "sd_notifyf returned an error %d", rv); ++ } ++ ++ return OK; ++} ++ ++static int systemd_monitor(apr_pool_t *p, server_rec *s) ++{ ++ ap_sload_t sload; ++ apr_interval_time_t up_time; ++ char bps[5]; ++ int rv; ++ ++ ap_get_sload(&sload); ++ /* up_time in seconds */ ++ up_time = (apr_uint32_t) apr_time_sec(apr_time_now() - ++ ap_scoreboard_image->global->restart_time); ++ ++ apr_strfsize((unsigned long)((float) (sload.bytes_served) ++ / (float) up_time), bps); ++ ++ rv = sd_notifyf(0, "READY=1\n" ++ "STATUS=Total requests: %lu; Idle/Busy workers %d/%d;" ++ "Requests/sec: %.3g; Bytes served/sec: %sB/sec\n", ++ sload.access_count, sload.idle, sload.busy, ++ ((float) sload.access_count) / (float) up_time, bps); ++ ++ if (rv < 0) { ++ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02396) ++ "sd_notifyf returned an error %d", rv); ++ } ++ ++ /* Shutdown httpd when nothing is sent for shutdown_timer seconds. */ ++ if (sload.bytes_served == bytes_served) { ++ /* mpm_common.c: INTERVAL_OF_WRITABLE_PROBES is 10 */ ++ shutdown_counter += 10; ++ if (shutdown_timer > 0 && shutdown_counter >= shutdown_timer) { ++ rv = sd_notifyf(0, "READY=1\n" ++ "STATUS=Stopped as result of IdleShutdown " ++ "timeout."); ++ if (rv < 0) { ++ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02804) ++ "sd_notifyf returned an error %d", rv); ++ } ++ kill(mainpid, AP_SIG_GRACEFUL); ++ } ++ } ++ else { ++ shutdown_counter = 0; ++ } ++ ++ bytes_served = sload.bytes_served; ++ ++ return DECLINED; ++} ++ ++static void systemd_register_hooks(apr_pool_t *p) ++{ ++ /* We know the PID in this hook ... */ ++ ap_hook_pre_mpm(systemd_pre_mpm, NULL, NULL, APR_HOOK_LAST); ++ /* Used to update httpd's status line using sd_notifyf */ ++ ap_hook_monitor(systemd_monitor, NULL, NULL, APR_HOOK_MIDDLE); ++} ++ ++static const char *set_shutdown_timer(cmd_parms *cmd, void *dummy, ++ const char *arg) ++{ ++ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); ++ if (err != NULL) { ++ return err; ++ } ++ ++ shutdown_timer = atoi(arg); ++ return NULL; ++} ++ ++static const command_rec systemd_cmds[] = ++{ ++AP_INIT_TAKE1("IdleShutdown", set_shutdown_timer, NULL, RSRC_CONF, ++ "Number of seconds in idle-state after which httpd is shutdown"), ++ {NULL} ++}; ++ ++AP_DECLARE_MODULE(systemd) = { ++ STANDARD20_MODULE_STUFF, ++ NULL, ++ NULL, ++ NULL, ++ NULL, ++ systemd_cmds, ++ systemd_register_hooks, ++}; +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -594,6 +594,30 @@ AC_DEFUN(APACHE_CHECK_OPENSSL,[ + fi + ]) + ++AC_DEFUN(APACHE_CHECK_SYSTEMD, [ ++dnl Check for systemd support for listen.c's socket activation. ++case $host in ++*-linux-*) ++ if test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd; then ++ SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd` ++ elif test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd-daemon; then ++ SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd-daemon` ++ else ++ AC_CHECK_LIB(systemd-daemon, sd_notify, SYSTEMD_LIBS="-lsystemd-daemon") ++ fi ++ if test -n "$SYSTEMD_LIBS"; then ++ AC_CHECK_HEADERS(systemd/sd-daemon.h) ++ if test "${ac_cv_header_systemd_sd_daemon_h}" = "no" || test -z "${SYSTEMD_LIBS}"; then ++ AC_MSG_WARN([Your system does not support systemd.]) ++ else ++ APR_ADDTO(LIBS, [$SYSTEMD_LIBS]) ++ AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd is supported]) ++ fi ++ fi ++ ;; ++esac ++]) ++ + dnl + dnl APACHE_EXPORT_ARGUMENTS + dnl Export (via APACHE_SUBST) the various path-related variables that +--- a/configure.in ++++ b/configure.in +@@ -509,6 +509,8 @@ if test "$ac_cv_struct_tm_gmtoff" = "yes"; then + AC_DEFINE(HAVE_GMTOFF, 1, [Define if struct tm has a tm_gmtoff field]) + fi + ++APACHE_CHECK_SYSTEMD ++ + dnl ## Set up any appropriate OS-specific environment variables for apachectl + + case $host in +--- a/server/main.c 2016-05-01 00:32:03.648000000 +0300 ++++ b/server/main.c 2016-03-17 11:42:18.000000000 +0200 +@@ -222,6 +222,10 @@ + printf(" -D HTTPD_ROOT=\"" HTTPD_ROOT "\"\n"); + #endif + ++#ifdef HAVE_SYSTEMD ++ printf(" -D HAVE_SYSTEMD\n"); ++#endif ++ + #ifdef SUEXEC_BIN + printf(" -D SUEXEC_BIN=\"" SUEXEC_BIN "\"\n"); + #endif \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/systemd/dovecot.service b/services/custombuild/custombuild/configure/systemd/dovecot.service new file mode 100644 index 0000000..654b76b --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/dovecot.service @@ -0,0 +1,20 @@ +# dovecot binary startup for DirectAdmin servers +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description=Dovecot IMAP/POP3 email server +After=local-fs.target network.target + +[Service] +Type=simple +#ExecStartPre=/usr/libexec/dovecot/prestartscript +ExecStart=/usr/sbin/dovecot -F +ExecReload=/bin/kill -HUP $MAINPID +#PrivateTmp=true +NonBlocking=yes +LimitMEMLOCK=infinity +LimitNOFILE=65535 + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/systemd/dovecot.socket b/services/custombuild/custombuild/configure/systemd/dovecot.socket new file mode 100644 index 0000000..d2d293d --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/dovecot.socket @@ -0,0 +1,20 @@ +[Unit] +Description=Dovecot IMAP/POP3 email server activation socket + +[Socket] +#dovecot expects separate IPv4 and IPv6 sockets +BindIPv6Only=ipv6-only +ListenStream=0.0.0.0:110 +ListenStream=[::]:110 +ListenStream=0.0.0.0:143 +ListenStream=[::]:143 +ListenStream=0.0.0.0:993 +ListenStream=[::]:993 +ListenStream=0.0.0.0:995 +ListenStream=[::]:995 +ListenStream=0.0.0.0:4190 +ListenStream=[::]:4190 +KeepAlive=true + +[Install] +WantedBy=sockets.target \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/systemd/exim.service b/services/custombuild/custombuild/configure/systemd/exim.service new file mode 100644 index 0000000..2cfae01 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/exim.service @@ -0,0 +1,17 @@ +# exim binary startup for DirectAdmin servers +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description=Exim Mail Transport Agent +After=network.target +Conflicts=sendmail.service postfix.service + +[Service] +PrivateTmp=true +Environment=QUEUE=1h +ExecStart=/usr/sbin/exim -bd -q${QUEUE} +ExecReload=/bin/sh -c 'kill -HUP ${MAINPID}' + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/freshclam.service b/services/custombuild/custombuild/configure/systemd/freshclam.service new file mode 100644 index 0000000..542f429 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/freshclam.service @@ -0,0 +1,15 @@ +# freshclam binary startup for DirectAdmin servers +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description = ClamAV updater daemon +After = syslog.target nss-lookup.target network.target + +[Service] +Type = forking +ExecStart = /usr/local/bin/freshclam -d +PrivateTmp = true + +[Install] +WantedBy = multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/httpd.service b/services/custombuild/custombuild/configure/systemd/httpd.service new file mode 100644 index 0000000..38cdd7d --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/httpd.service @@ -0,0 +1,35 @@ +# httpd binary startup for DirectAdmin servers +# To specify environment options, please use +# environment line in [Service] like: +# [Service] +# Environment=OPTIONS=-DMY_DEFINE + +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description=The Apache HTTP Server +After=network.target remote-fs.target nss-lookup.target + +[Service] +Type=notify +Environment=LANG=C +UMask=0022 + +ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND +ExecReload=/usr/sbin/httpd $OPTIONS -k graceful +ExecStop=/bin/kill -WINCH ${MAINPID} +# We want systemd to give httpd some time to finish gracefully, but still want +# it to kill httpd after TimeoutStopSec if something went wrong during the +# graceful stop. Normally, Systemd sends SIGTERM signal right after the +# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give +# httpd time to finish. +KillSignal=SIGCONT +TimeoutStopSec=5s +PrivateTmp=true + +LimitMEMLOCK=infinity +LimitNOFILE=655350 + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/litespeed.service b/services/custombuild/custombuild/configure/systemd/litespeed.service new file mode 100644 index 0000000..b0e1fd5 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/litespeed.service @@ -0,0 +1,26 @@ +# should be added as /etc/systemd/system/litespeed.service +[Unit] +Description=The LiteSpeed HTTP Server +After=network-online.target remote-fs.target nss-lookup.target lve_namespaces.service +Wants=network-online.target + +[Service] +Type=forking +PIDFile=/tmp/lshttpd/lshttpd.pid +ExecStart=/usr/local/lsws/bin/lswsctrl start +ExecReload=/usr/local/lsws/bin/lswsctrl restart +ExecStop=/usr/local/lsws/bin/lswsctrl stop + +KillMode=none +PrivateTmp=false + +# do not want to be limited in anyway +CPUAccounting=false +TasksAccounting=false +MemoryAccounting=false + +[Install] +WantedBy=multi-user.target +Alias=lsws.service +Alias=lshttpd.service +Alias=openlitespeed.service diff --git a/services/custombuild/custombuild/configure/systemd/mariadb.service b/services/custombuild/custombuild/configure/systemd/mariadb.service new file mode 100644 index 0000000..ac38d96 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/mariadb.service @@ -0,0 +1,141 @@ +# USED FOR MARIADB >=10.1 +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. +# +# Thanks to: +# Daniel Black +# Erkan Yanar +# David Strauss +# and probably others + +[Unit] +Description=MariaDB database server +After=network.target +After=syslog.target + +[Install] +WantedBy=multi-user.target +Alias=mysql.service +Alias=mysqld.service +Alias=mariadb.service + +[Service] + +############################################################################## +## Core requirements +## + +Type=notify + +RuntimeDirectory=mysqld +RuntimeDirectoryMode=0755 + +# Setting this to true can break replication and the Type=notify settings +# See also bind-address mysqld option. +PrivateNetwork=false + +############################################################################## +## Package maintainers +## + +User=mysql +Group=mysql + +# To allow memlock to be used as non-root user if set in configuration +CapabilityBoundingSet=CAP_IPC_LOCK + +NoNewPrivileges=true + +PrivateDevices=true + +# Execute pre and post scripts as root, otherwise it does it as User= +PermissionsStartOnly=true + +# Perform automatic wsrep recovery. When server is started without wsrep, +# galera_recovery simply returns an empty string. In any case, however, +# the script is not expected to return with a non-zero status. +# It is always safe to unset _WSREP_START_POSITION environment variable. +ExecStartPre=/bin/sh -c "systemctl unset-environment _WSREP_START_POSITION" +ExecStartPre=/bin/sh -c "[ -x /usr/bin/galera_recovery ] || exit 0; VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] && \ + systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1" + +# Needed to create system tables etc. +# ExecStartPre=/usr/bin/mysql_install_db -u mysql + +# Start main service +# MYSQLD_OPTS here is for users to set in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf +# Use the [service] section and Environment="MYSQLD_OPTS=...". +# This isn't a replacement for my.cnf. +# _WSREP_NEW_CLUSTER is for the exclusive use of the script galera_new_cluster + +ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION + + +# Unset _WSREP_START_POSITION environment variable. +ExecStartPost=/bin/sh -c "systemctl unset-environment _WSREP_START_POSITION" + +KillMode=process +KillSignal=SIGTERM + +# Don't want to see an automated SIGKILL ever +SendSIGKILL=no + +# Restart crashed server only, on-failure would also restart, for example, when +# my.cnf contains unknown option +Restart=on-abort +RestartSec=5s + +############################################################################## +## USERs can override +## +## +## by creating a file in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf +## and adding/setting the following will override this file's settings. + +# Useful options not previously available in [mysqld_safe] + +# Kernels like killing mysqld when out of memory because its big. +# Lets temper that preference a little. +# OOMScoreAdjust=-600 + +# Explicitly start with high IO priority +# BlockIOWeight=1000 + +# If you don't use the /tmp directory for SELECT ... OUTFILE and +# LOAD DATA INFILE you can enable PrivateTmp=true for a little more security. +PrivateTmp=true + +## +## Options previously available to be set via [mysqld_safe] +## that now needs to be set by systemd config files as mysqld_safe +## isn't executed. +## + +# Number of files limit. previously [mysqld_safe] open-file-limit +LimitNOFILE=655350 + +# Maximium core size. previously [mysqld_safe] core-file-size +# LimitCore= + +# Nice priority. previously [mysqld_safe] nice +# Nice=-5 + +# Timezone. previously [mysqld_safe] timezone +# Environment="TZ=UTC" + +# Library substitutions. previously [mysqld_safe] malloc-lib with explict paths +# (in LD_LIBRARY_PATH) and library name (in LD_PRELOAD). +# Environment="LD_LIBRARY_PATH=/path1 /path2" "LD_PRELOAD= + +# Flush caches. previously [mysqld_safe] flush-caches=1 +# ExecStartPre=sync +# ExecStartPre=sysctl -q -w vm.drop_caches=3 + +# numa-interleave=1 equalivant +# Change ExecStart=numactl --interleave=all /usr/sbin/mysqld...... + +# crash-script equalivent +# FailureAction= diff --git a/services/custombuild/custombuild/configure/systemd/mariadb55.service b/services/custombuild/custombuild/configure/systemd/mariadb55.service new file mode 100644 index 0000000..7f2380b --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/mariadb55.service @@ -0,0 +1,41 @@ +# mysql binary startup for DirectAdmin servers +# For example, if you want to increase mysql's open-files-limit to 10000, +# you need to increase systemd's LimitNOFILE setting like: +# [Service] +# LimitNOFILE=10000 + +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description=MySQL database server +After=syslog.target +After=network.target + +[Service] +Type=simple +User=mysql +Group=mysql +RuntimeDirectory=mysqld +RuntimeDirectoryMode=0755 + +# Note: we set --basedir to prevent probes that might trigger SELinux alarms, +# per bug #547485 +ExecStart=/usr/bin/mysqld_safe --basedir=/usr + +#ExecStartPost=/usr/libexec/mysql-wait-ready $MAINPID + +# Give a reasonable amount of time for the server to start up/shut down +TimeoutSec=300 + +# Place temp files in a secure directory, not /tmp +PrivateTmp=true + +LimitMEMLOCK=infinity +LimitNOFILE=655350 + +[Install] +WantedBy=multi-user.target +Alias=mysql.service +Alias=mysqld.service +Alias=mariadb.service diff --git a/services/custombuild/custombuild/configure/systemd/mysqld.service b/services/custombuild/custombuild/configure/systemd/mysqld.service new file mode 100644 index 0000000..517dcfe --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/mysqld.service @@ -0,0 +1,38 @@ +# mysql binary startup for DirectAdmin servers +# For example, if you want to increase mysql's open-files-limit to 10000, +# you need to increase systemd's LimitNOFILE setting like: +# [Service] +# LimitNOFILE=10000 + +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description=MySQL database server +After=syslog.target +After=network.target + +[Service] +Type=simple +User=mysql +Group=mysql +RuntimeDirectory=mysqld +RuntimeDirectoryMode=0755 + +# Note: we set --basedir to prevent probes that might trigger SELinux alarms, +# per bug #547485 +ExecStart=/usr/bin/mysqld_safe --basedir=/usr + +#ExecStartPost=/usr/libexec/mysql-wait-ready $MAINPID + +# Give a reasonable amount of time for the server to start up/shut down +TimeoutSec=300 + +# Place temp files in a secure directory, not /tmp +PrivateTmp=true + +LimitMEMLOCK=infinity +LimitNOFILE=655350 + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/mysqld.service.debian b/services/custombuild/custombuild/configure/systemd/mysqld.service.debian new file mode 100644 index 0000000..809c103 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/mysqld.service.debian @@ -0,0 +1,35 @@ +# mysql binary startup for DirectAdmin servers +# For example, if you want to increase mysql's open-files-limit to 10000, +# you need to increase systemd's LimitNOFILE setting like: +# [Service] +# LimitNOFILE=10000 + +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description=MySQL database server +After=syslog.target +After=network.target + +[Service] +Type=simple +User=mysql +Group=mysql +RuntimeDirectory=mysqld +RuntimeDirectoryMode=0755 +PIDFile=/usr/local/mysql/data/mysqld.pid + +ExecStart=/usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysqld.pid --socket=/usr/local/mysql/data/mysql.sock + +# Give a reasonable amount of time for the server to start up/shut down +TimeoutSec=300 + +# Place temp files in a secure directory, not /tmp +PrivateTmp=true + +LimitMEMLOCK=infinity +LimitNOFILE=655350 + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/mysqld57.service b/services/custombuild/custombuild/configure/systemd/mysqld57.service new file mode 100644 index 0000000..5ce591f --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/mysqld57.service @@ -0,0 +1,43 @@ +[Unit] +Description=MySQL Server +Documentation=man:mysqld(8) +Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html +After=network.target +After=syslog.target + +[Install] +WantedBy=multi-user.target + +[Service] +User=mysql +Group=mysql +RuntimeDirectory=mysqld +RuntimeDirectoryMode=0755 + +Type=forking + +#PIDFile=/var/run/mysqld/mysqld.pid + +# Disable service start and stop timeout logic of systemd for mysqld service. +TimeoutSec=0 + +# Execute pre and post scripts as root +PermissionsStartOnly=true + +# Needed to create system tables +ExecStartPre=/usr/bin/mysqld_pre_systemd + +# Start main service +ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS + +# Use this to switch malloc implementation +EnvironmentFile=-/etc/sysconfig/mysql + +# Sets open_files_limit +LimitNOFILE = 655350 + +Restart=on-failure + +RestartPreventExitStatus=1 + +PrivateTmp=false diff --git a/services/custombuild/custombuild/configure/systemd/named-setup-rndc.service b/services/custombuild/custombuild/configure/systemd/named-setup-rndc.service new file mode 100644 index 0000000..ff85e3c --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/named-setup-rndc.service @@ -0,0 +1,7 @@ +[Unit] +Description=Generate rndc key for BIND (DNS) + +[Service] +Type=oneshot + +ExecStart=/usr/libexec/generate-rndc-key.sh diff --git a/services/custombuild/custombuild/configure/systemd/named.service b/services/custombuild/custombuild/configure/systemd/named.service new file mode 100644 index 0000000..70e1c06 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/named.service @@ -0,0 +1,27 @@ +[Unit] +Description=Berkeley Internet Name Domain (DNS) +Wants=nss-lookup.target +Wants=named-setup-rndc.service +Before=nss-lookup.target +After=network.target +After=named-setup-rndc.service + +[Service] +Type=forking +EnvironmentFile=-/etc/sysconfig/named +Environment=KRB5_KTNAME=/etc/named.keytab +PIDFile=/run/named/named.pid +ExecStartPre=-/bin/mkdir -p /run/named +ExecStartPre=-/bin/chown named:named /run/named +ExecStartPre=/usr/sbin/named-checkconf -z /etc/named.conf +ExecStart=/usr/sbin/named -u named $OPTIONS + +ExecReload=/bin/sh -c '/usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID' + +ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID' + +PrivateTmp=true + +[Install] +WantedBy=multi-user.target + diff --git a/services/custombuild/custombuild/configure/systemd/named.service.debian b/services/custombuild/custombuild/configure/systemd/named.service.debian new file mode 100644 index 0000000..5cbafa1 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/named.service.debian @@ -0,0 +1,12 @@ +[Unit] +Description=BIND Domain Name Server +Documentation=man:named(8) +After=network.target + +[Service] +ExecStart=/usr/sbin/named -f -u bind +ExecReload=/usr/sbin/rndc reload +ExecStop=/usr/sbin/rndc stop + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/nginx.service b/services/custombuild/custombuild/configure/systemd/nginx.service new file mode 100644 index 0000000..b57b477 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/nginx.service @@ -0,0 +1,21 @@ +# nginx binary startup for DirectAdmin servers +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description=The nginx HTTP and reverse proxy server +After=syslog.target network.target remote-fs.target nss-lookup.target + +[Service] +Type=forking +PIDFile=/var/run/nginx.pid +ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf +ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf +ExecReload=/bin/kill -s HUP $MAINPID +ExecStop=/bin/kill -s QUIT $MAINPID +PrivateTmp=true +LimitMEMLOCK=infinity +LimitNOFILE=65535 + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/php-fpm.service b/services/custombuild/custombuild/configure/systemd/php-fpm.service new file mode 100644 index 0000000..e1c1ae9 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/php-fpm.service @@ -0,0 +1,64 @@ +# php-fpm startup for DirectAdmin servers +# To alter the FPM environment, drop a file with the suffix +# .conf in /etc/systemd/system/php-fpm.service.d, with +# [Service] +# Environment=FOO=bar +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description=The PHP FastCGI Process Manager +After=syslog.target network.target + +[Service] +Type=notify +PIDFile=/run/php-fpm.pid +ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --pid=/run/php-fpm.pid +ExecReload=/bin/kill -USR2 $MAINPID +LimitMEMLOCK=infinity +LimitNOFILE=65535 + +# Set up a new file system namespace and mounts private /tmp and /var/tmp directories +# so this service cannot access the global directories and other processes cannot +# access this service's directories. +PrivateTmp=true + +# Sets up a new /dev namespace for the executed processes and only adds API pseudo devices +# such as /dev/null, /dev/zero or /dev/random (as well as the pseudo TTY subsystem) to it, +# but no physical devices such as /dev/sda. +# CageFS does not work with php-fpm on DirectAdmin servers. The issue is caused by this directive set to true, thus, commented out +#PrivateDevices=true + +# Attempts to create memory mappings that are writable and executable at the same time, +# or to change existing memory mappings to become executable are prohibited. + +# Commented out, problems with PHP 7.0/7.1 reported +#MemoryDenyWriteExecute=true + +# Explicit module loading will be denied. This allows to turn off module load and unload +# operations on modular kernels. It is recommended to turn this on for most services that +# do not need special file systems or extra kernel modules to work. +ProtectKernelModules=true + +# Kernel variables accessible through /proc/sys, /sys, /proc/sysrq-trigger, /proc/latency_stats, +# /proc/acpi, /proc/timer_stats, /proc/fs and /proc/irq will be made read-only to all processes +# of the unit. Usually, tunable kernel variables should only be written at boot-time, with the +# sysctl.d(5) mechanism. Almost no services need to write to these at runtime; it is hence +# recommended to turn this on for most services. +ProtectKernelTunables=true + +# Required for resource throttling +ProtectControlGroups=false + +# Any attempts to enable realtime scheduling in a process of the unit are refused. +RestrictRealtime=true + +# Restricts the set of socket address families accessible to the processes of this unit. +# Protects against vulnerabilities such as CVE-2016-8655 +RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX + +# Takes away the ability to create or manage any kind of namespace +#RestrictNamespaces=true + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/proftpd.service b/services/custombuild/custombuild/configure/systemd/proftpd.service new file mode 100644 index 0000000..daebf7a --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/proftpd.service @@ -0,0 +1,19 @@ +# proftpd binary startup for DirectAdmin servers +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload + +[Unit] +Description = ProFTPD FTP Server +After = network.target nss-lookup.target local-fs.target remote-fs.target + +[Service] +Type=forking +Environment = PROFTPD_OPTIONS= +ExecStartPre=-/usr/bin/mkdir -p /var/run/proftpd +ExecStart=/usr/sbin/proftpd $PROFTPD_OPTIONS +ExecReload=/bin/kill -HUP $MAINPID +LimitMEMLOCK=infinity +LimitNOFILE=65535 + +[Install] +WantedBy = multi-user.target \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/systemd/pure-certd.service b/services/custombuild/custombuild/configure/systemd/pure-certd.service new file mode 100644 index 0000000..e39b7af --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/pure-certd.service @@ -0,0 +1,6 @@ +[Unit] +Description=pure-certd SNI certificate daemon +ConditionPathExists=/usr/sbin/pure-certd + +[Service] +ExecStart=/usr/sbin/pure-certd -r /usr/local/bin/pureftpd_sni.sh -s /var/run/pure-certd.sock diff --git a/services/custombuild/custombuild/configure/systemd/pure-ftpd.service b/services/custombuild/custombuild/configure/systemd/pure-ftpd.service new file mode 100644 index 0000000..9a1a7bb --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/pure-ftpd.service @@ -0,0 +1,14 @@ +# pure-ftpd binary startup for DirectAdmin servers +# To reload systemd daemon after changes to this file: +# systemctl --system daemon-reload +[Unit] +Description=Pure-FTPd FTP server +Requires=pure-certd.service +After=syslog.target network.target pure-certd.service + +[Service] +Type=forking +ExecStart=/usr/sbin/pure-ftpd /etc/pure-ftpd.conf + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/pure-uploadscript.service b/services/custombuild/custombuild/configure/systemd/pure-uploadscript.service new file mode 100644 index 0000000..3125191 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/pure-uploadscript.service @@ -0,0 +1,6 @@ +[Unit] +Description=pure-ftpd upload scan script +ConditionPathExists=/usr/sbin/pure-uploadscript + +[Service] +ExecStart=/usr/sbin/pure-uploadscript -r /usr/local/bin/pureftpd_uploadscan.sh \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/systemd/redis-rspamd.service b/services/custombuild/custombuild/configure/systemd/redis-rspamd.service new file mode 100644 index 0000000..cf93680 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/redis-rspamd.service @@ -0,0 +1,29 @@ +[Unit] +Description=Multi-user redis persistent key-value database +After=network.target +Documentation=http://redis.io/documentation, man:redis-server(1) + +[Service] +User=_rspamd +Group=_rspamd +ExecStartPre=-/bin/mkdir -p ${HOME}/.redis/db/ +ExecStart=/usr/local/bin/redis-server --supervised systemd --dir ${HOME}/.redis/db/ --port 0 --unixsocket ${HOME}/.redis/redis.sock --unixsocketperm 770 --save "900 1" --save "300 10" --save "60 10000" +Type=notify +RuntimeDirectory=redis +RuntimeDirectoryMode=0755 + +UMask=007 +LimitNOFILE=65535 + +NoNewPrivileges=true +CapabilityBoundingSet=CAP_SETGID CAP_SETUID CAP_SYS_RESOURCE +MemoryDenyWriteExecute=true +ProtectKernelModules=true +ProtectKernelTunables=true +ProtectControlGroups=true +RestrictRealtime=true +RestrictNamespaces=true +RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/redis@.service b/services/custombuild/custombuild/configure/systemd/redis@.service new file mode 100644 index 0000000..761ba30 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/redis@.service @@ -0,0 +1,30 @@ +[Unit] +Description=Multi-user redis persistent key-value database +After=network.target +Documentation=http://redis.io/documentation, man:redis-server(1) + +[Service] +User=%i +Group=%i +ExecStartPre=-/bin/mkdir -p ${HOME}/.redis/db/ +ExecStartPost=-+/bin/sh -c "if [ -d /sys/fs/cgroup/user.slice ]; then mkdir -p /sys/fs/cgroup/user.slice/user-$(id -u ${USER}).slice/directadmin-exec.scope; echo $MAINPID > /sys/fs/cgroup/user.slice/user-$(id -u ${USER}).slice/directadmin-exec.scope/cgroup.procs; systemctl start user-$(id -u ${USER}).slice; fi" +ExecStart=/usr/local/bin/redis-server --include /usr/local/directadmin/data/users/${USER}/redis.conf --supervised systemd --dir ${HOME}/.redis/db/ --port 0 --unixsocket ${HOME}/.redis/redis.sock --unixsocketperm 770 +Type=notify +RuntimeDirectory=redis +RuntimeDirectoryMode=0755 + +UMask=007 +LimitNOFILE=65535 + +NoNewPrivileges=true +CapabilityBoundingSet=CAP_SETGID CAP_SETUID CAP_SYS_RESOURCE +MemoryDenyWriteExecute=true +ProtectKernelModules=true +ProtectKernelTunables=true +ProtectControlGroups=true +RestrictRealtime=true +RestrictNamespaces=true +RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/systemd/rspamd.service b/services/custombuild/custombuild/configure/systemd/rspamd.service new file mode 100644 index 0000000..95ababc --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/rspamd.service @@ -0,0 +1,17 @@ +[Unit] +Description=rapid spam filtering system +After=nss-lookup.target +Documentation=https://rspamd.com/doc/ + +[Service] +LimitNOFILE=1048576 +NonBlocking=true +ExecStart=/usr/local/bin/rspamd -c /etc/rspamd/rspamd.conf -f +ExecReload=/bin/kill -HUP $MAINPID +User=_rspamd +RuntimeDirectory=rspamd +RuntimeDirectoryMode=0755 +Restart=always + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/systemd/scripts/dovecot_prestartscript b/services/custombuild/custombuild/configure/systemd/scripts/dovecot_prestartscript new file mode 100644 index 0000000..49202d0 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/scripts/dovecot_prestartscript @@ -0,0 +1,3 @@ +#!/bin/sh +#Dovecot prestart script, which needs to be placed in /usr/libexec/dovecot/prestartscript +/bin/systemctl -q is-enabled NetworkManager.service >/dev/null 2>&1 && /usr/bin/nm-online -q --timeout 30 ||: \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/systemd/scripts/mysql-wait-ready b/services/custombuild/custombuild/configure/systemd/scripts/mysql-wait-ready new file mode 100644 index 0000000..4a3dae0 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/scripts/mysql-wait-ready @@ -0,0 +1,60 @@ +#!/bin/sh + +# This script waits for mysqld to be ready to accept connections +# (which can be many seconds or even minutes after launch, if there's +# a lot of crash-recovery work to do). +# Running this as ExecStartPost is useful so that services declared as +# "After mysqld" won't be started until the database is really ready. + +# Service file passes us the daemon's PID (actually, mysqld_safe's PID) +daemon_pid="$1" + +# extract value of a MySQL option from config files +# Usage: get_mysql_option SECTION VARNAME DEFAULT +# result is returned in $result +# We use my_print_defaults which prints all options from multiple files, +# with the more specific ones later; hence take the last match. +get_mysql_option(){ + result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1` + if [ -z "$result" ]; then + # not found, use default + result="$3" + fi +} + +# Defaults here had better match what mysqld_safe will default to +get_mysql_option mysqld datadir "/var/lib/mysql" +datadir="$result" +get_mysql_option mysqld socket "/var/lib/mysql/mysql.sock" +socketfile="$result" + +# Wait for the server to come up or for the mysqld process to disappear +ret=0 +while /bin/true; do + MYSQLDRUNNING=0 + if [ -d "/proc/${daemon_pid}" ] ; then + MYSQLDRUNNING=1 + fi + RESPONSE=`/usr/bin/mysqladmin --defaults-extra-file=/usr/local/directadmin/conf/my.cnf ping 2>&1` + mret=$? + if [ $mret -eq 0 ] && [ $MYSQLDRUNNING -eq 1 ]; then + break + fi + # exit codes 1, 11 (EXIT_CANNOT_CONNECT_TO_SERVICE) are expected, + # anything else suggests a configuration error + if [ $mret -ne 1 -a $mret -ne 11 ]; then + ret=1 + break + fi + # "Access denied" also means the server is alive + echo "$RESPONSE" | grep -q "Access denied for user" && break + + # Check process still exists + if ! /bin/kill -0 $daemon_pid 2>/dev/null; then + ret=1 + break + fi + sleep 1 +done + +exit $ret \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/systemd/spamassassin.service b/services/custombuild/custombuild/configure/systemd/spamassassin.service new file mode 100644 index 0000000..07b4fde --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/spamassassin.service @@ -0,0 +1,15 @@ +[Unit] +Description=Spamassassin daemon +After=syslog.target network.target + +[Service] +Type=forking +PIDFile=/var/run/spamd.pid +ExecStart=/usr/bin/spamd --pidfile /var/run/spamd.pid -d -c -m 15 --ipv4 +StandardOutput=syslog +StandardError=syslog +Restart=always + +[Install] +WantedBy=multi-user.target +Alias=spamd.service diff --git a/services/custombuild/custombuild/configure/systemd/unit.service b/services/custombuild/custombuild/configure/systemd/unit.service new file mode 100644 index 0000000..e2e1707 --- /dev/null +++ b/services/custombuild/custombuild/configure/systemd/unit.service @@ -0,0 +1,27 @@ +# Modifying this file in-place is not recommended, because changes +# will be overwritten during package upgrades. To customize the +# behaviour, run "systemctl edit unit" to create an override unit. + +# For example, to change options given to the unitd binary at startup, +# create an override unit (as is done by systemctl edit) and enter +# the following: + +# [Service] +# Environment="UNITD_OPTIONS=--log /var/log/unit/unit.log --pid /var/run/unit/unit.pid" + +[Unit] +Description=NGINX Unit +Wants=network-online.target +After=network-online.target + +[Service] +Type=simple +Environment="UNITD_OPTIONS=--log /var/log/unit/unit.log --pid /var/run/unit/unit.pid" +ExecStart=/usr/sbin/unitd $UNITD_OPTIONS --no-daemon +ExecStartPost=/usr/local/directadmin/custombuild/configure/unit/unit_checks.sh +ExecReload= +RuntimeDirectory=unit +RuntimeDirectoryMode=0755 + +[Install] +WantedBy=multi-user.target diff --git a/services/custombuild/custombuild/configure/unit/configure.unit b/services/custombuild/custombuild/configure/unit/configure.unit new file mode 100644 index 0000000..6a0c366 --- /dev/null +++ b/services/custombuild/custombuild/configure/unit/configure.unit @@ -0,0 +1,16 @@ +#!/bin/sh +./configure \ + "--user=nginx_unit" \ + "--group=nginx_unit" \ + "--prefix=/usr" \ + "--sbindir=/usr/sbin" \ + "--state=/var/lib/unit" \ + "--control=unix:/var/run/unit/control.sock" \ + "--pid=/var/run/unit/unit.pid" \ + "--log=/var/log/unit/unit.log" \ + "--tests" \ + "--openssl" \ + "--modules=/usr/lib/unit/modules" \ + "--libdir=/usr/lib" \ + "--tmp=/tmp" \ + "--cc-opt=-D FD_SETSIZE=32768" \ No newline at end of file diff --git a/services/custombuild/custombuild/configure/unit/unit_checks.sh b/services/custombuild/custombuild/configure/unit/unit_checks.sh new file mode 100644 index 0000000..dc43e96 --- /dev/null +++ b/services/custombuild/custombuild/configure/unit/unit_checks.sh @@ -0,0 +1,22 @@ +#!/bin/sh +if [ -x /usr/local/directadmin/custombuild/custom/unit/check_unit.sh ] && echo "$0" | grep -m1 -q '/configure/'; then + /usr/local/directadmin/custombuild/custom/unit/check_unit.sh + exit $? +fi + +TASK_QUEUE=/usr/local/directadmin/data/task.queue.cb + +run_dataskq() { + echo "action=rewrite&value=nginx_unit" >> ${TASK_QUEUE} + /usr/local/directadmin/dataskq --custombuild +} + +if ! [ -e /var/run/unit/control.sock ]; then + exit +fi + +result="$(curl -s --unix-socket /var/run/unit/control.sock http://localhost/config/listeners -f)" + +if [ "$?" -ne "0" ] || echo ${result} | head -n1 | grep -m1 -q '{}'; then + run_dataskq +fi \ No newline at end of file diff --git a/services/custombuild/custombuild/note b/services/custombuild/custombuild/note new file mode 100644 index 0000000..288016b --- /dev/null +++ b/services/custombuild/custombuild/note @@ -0,0 +1,72 @@ +Created symlink /etc/systemd/system/mysql.service -> /etc/systemd/system/mariadb.service. +Created symlink /etc/systemd/system/mysqld.service -> /etc/systemd/system/mariadb.service. +Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service -> /etc/systemd/system/mariadb.service. + +echo "Create symlink for Mariadbbb..." + ln -sf /usr/sbin/mariadbd /usr/sbin/mysqld + ln -sf /usr/sbin/mariadbd /usr/local/mysql/bin/mysql + ln -sf /usr/bin/mariadb /usr/bin/mysql + +Installing dependencies... +Last metadata expiration check: 1:37:47 ago on Sun Oct 19 11:31:50 2025. +Package boost-program-options-1.66.0-13.el8.x86_64 is already installed. +Package perl-Compress-Raw-Bzip2-2.081-1.el8.x86_64 is already installed. +Package perl-Compress-Raw-Zlib-2.081-1.el8.x86_64 is already installed. +Package perl-DBI-1.641-4.module_el8.6.0+2823+173faa7e.x86_64 is already installed. +Package perl-Data-Dumper-2.167-399.el8.x86_64 is already installed. +Package perl-IO-Compress-2.081-1.el8.noarch is already installed. +No match for argument: perl-PlRPC +Package lsof-4.93.2-1.el8.x86_64 is already installed. +Package rsync-3.1.3-19.el8_7.1.x86_64 is already installed. +Package pcre2-10.32-3.el8_6.x86_64 is already installed. +Error: Unable to find a match: perl-PlRPC +Installing galera... +Found /usr/local/directadmin/custombuild/mysql/galera-4-26.4.23-1.el8.x86_64.rpm +warning: /usr/local/directadmin/custombuild/mysql/galera-4-26.4.23-1.el8.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID c74cd1d8: NOKEY +Verifying... ################################# [100%] +Preparing... ################################# [100%] +Updating / installing... + 1:galera-4-26.4.23-1.el8 ################################# [ 50%] +Cleaning up / removing... + 2:galera-4-26.4.8-1.el8 ################################# [100%] +Stopping mysqld ... +Service didn't get stopped, sleeping for 20 secs and re-trying ... +Stopping mysqld ... +Upgrading MariaDB 10.6.15 to 11.4.8 +Preparing packages... +MariaDB-devel-10.6.15-1.el8.x86_64 +Preparing packages... +MariaDB-client-10.6.15-1.el8.x86_64 +Preparing packages... +MariaDB-shared-10.6.15-1.el8.x86_64 +Preparing packages... +MariaDB-backup-10.6.15-1.el8.x86_64 +Preparing packages... +MariaDB-common-10.6.15-1.el8.x86_64 +warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave +Preparing packages... +MariaDB-server-10.6.15-1.el8.x86_64 +warning: file /etc/logrotate.d/mysql: remove failed: No such file or directory +warning: MariaDB-client-11.4.8-1.el8.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID c74cd1d8: NOKEY +Verifying... ################################# [100%] +Preparing... ################################# [100%] +Updating / installing... + 1:MariaDB-common-11.4.8-1.el8 ################################# [ 17%] + 2:MariaDB-shared-11.4.8-1.el8 ################################# [ 33%] + 3:MariaDB-client-11.4.8-1.el8 ################################# [ 50%] + 4:MariaDB-server-11.4.8-1.el8 ################################# [ 67%] + 5:MariaDB-devel-11.4.8-1.el8 ################################# [ 83%] + 6:MariaDB-backup-11.4.8-1.el8 ################################# [100%] +Created symlink /etc/systemd/system/mysql.service -> /etc/systemd/system/mariadb.service. +Created symlink /etc/systemd/system/mysqld.service -> /etc/systemd/system/mariadb.service. +Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service -> /etc/systemd/system/mariadb.service. +Ensuring local-infile is disabled for security reasons in MySQL configuration file... +Job for mariadb.service failed because the control process exited with error code. +See "systemctl status mariadb.service" and "journalctl -xe" for details. +Giving mysqld a few seconds to start up... +Giving mysqld a another few seconds to start up... +Giving mysqld last 20 seconds to start up... +Restarting MySQL. +Job for mariadb.service failed because the control process exited with error code. +See "systemctl status mariadb.service" and "journalctl -xe" for details. +Installation completed. diff --git a/update.tar.gz b/update.tar.gz index ba28c39..45d5473 100644 Binary files a/update.tar.gz and b/update.tar.gz differ diff --git a/update/da-popb4smtp b/update/da-popb4smtp new file mode 100644 index 0000000..7a0a7a8 Binary files /dev/null and b/update/da-popb4smtp differ diff --git a/update/data/lang/ar/LC_MESSAGES/internal.po b/update/data/lang/ar/LC_MESSAGES/internal.po new file mode 100644 index 0000000..4daa110 --- /dev/null +++ b/update/data/lang/ar/LC_MESSAGES/internal.po @@ -0,0 +1,8553 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: DirectAdmin 1.61.5\n" +"Report-Msgid-Bugs-To: support@directadmin.com\n" +"POT-Creation-Date: 2021-05-25 17:49-0600\n" +"PO-Revision-Date: 2021-05-23 21:07+0000\n" +"Last-Translator: Mohammed A \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" +"X-Generator: Weblate 4.6\n" + +#, c-format +msgid " - %d New Message Inside" +msgid_plural " - %d New Messages Inside" +msgstr[0] " - %d رسالة جديدة داخل" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid " / Day" +msgstr " / يوم" + +#, c-format +msgid " and %d User" +msgid_plural " and %d Users" +msgstr[0] " والمستخدم %d" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "# of Domains" +msgstr "# من المجالات" + +msgid "# of IPs" +msgstr "# من IPs" + +msgid "# of MySQL DBs" +msgstr "# من الخلية DBs" + +msgid "# of Resellers" +msgstr "من الموزعين" + +msgid "# of SubDomains" +msgstr "# من النطاقات Ø§Ù„ÙØ±Ø¹ÙŠØ©" + +msgid "# of Users" +msgstr "من المستخدمين" + +msgid "# of free IPs" +msgstr "# من IPs Ø§Ù„Ù…ØªÙˆÙØ±Ø©" + +#, c-format +msgid "%d Days, %d Hours and %d Minutes" +msgstr "%d أيام وساعات %d ودقائق %d" + +#, c-format +msgid "%d of %d Admin/Reseller accounts currently exist." +msgstr "%d %d ØØ³Ø§Ø¨Ø§Øª المسؤول/الموزع موجودة ØØ§Ù„ياً." + +#, c-format +msgid "%d of %d accounts currently exist." +msgstr "%d ØØ³Ø§Ø¨Ø§Øª %d موجودة ØØ§Ù„يا." + +#, c-format +msgid "%d of %d domains currently exist." +msgstr "%d المجالات %d موجودة ØØ§Ù„يا." + +#, fuzzy, c-format +#| msgid "%s does not exist" +msgid "%s %s %s did not exist" +msgstr "%s غير موجود" + +#, c-format +msgid "" +"%s '%s' cannot be restored under '%s'. Restoring under the file's default: " +"'%s'" +msgstr "" +"%s لا يمكن استعادة \"%s\" ØªØØª \"%s\". استعادة ضمن Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Ø§Ù„Ù…Ù„Ù: '%s'" + +#. /# %1$s - IP address +#. /# %2$s - Username +#, c-format +msgid "%s - user's '%s' current IP" +msgstr "%s - IP Ø§Ù„ØØ§Ù„ÙŠ للمستخدم \"%s\"" + +#, c-format +msgid "%s Day(s)" +msgstr "%s يوم (أيام)" + +#, c-format +msgid "" +"%s Edit the User Welcome Message to ensure the subject and message are set." +msgstr "%s ØªØØ±ÙŠØ± رسالة ترØÙŠØ¨ المستخدم لضمان تعيين الموضوع والرسالة." + +#, c-format +msgid "%s License" +msgstr "رخصة %s" + +#, c-format +msgid "%s Month(s)" +msgstr "%s الشهر /الـشهر" + +#, c-format +msgid "%s Removed" +msgstr "%s إزالتها" + +#, c-format +msgid "%s Week(s)" +msgstr "%s الأسبوع (الـ)" + +#, c-format +msgid "%s account %s has just been created" +msgstr "%s Ø§Ù„ØØ³Ø§Ø¨ %s تم إنشاؤها للتو" + +#, c-format +msgid "%s already exists" +msgstr "%s موجود Ø¨Ø§Ù„ÙØ¹Ù„" + +#, c-format +msgid "%s already exists on a remote server." +msgstr "%s موجود مسبقاً على ملقم بعيد." + +#, c-format +msgid "%s already exists on the server." +msgstr "%s موجود مسبقاً على الملقم." + +#, c-format +msgid "%s already exists. Pass overwrite=yes to force" +msgstr "%s موجود Ø¨Ø§Ù„ÙØ¹Ù„. تمرير الكتابة Ùوق = نعم إلى ÙØ±Ø¶" + +#, c-format +msgid "%s appears to be a link. Aborting." +msgstr "%s يبدو أن يكون صلة. Ø§ØØ¨Ø§Ø·." + +#, c-format +msgid "%s can now be shared." +msgstr "%s يمكن مشاركتها الآن." + +#, fuzzy, c-format +#| msgid "Key contains invalid characters" +msgid "%s contains dangerous characters" +msgstr "ÙŠØØªÙˆÙŠ Ø§Ù„Ù…ÙØªØ§Ø على Ø£ØØ±Ù غير ØµØ§Ù„ØØ©" + +#, c-format +msgid "%s could not be assigned, it must first be free and unassigned." +msgstr "%s تعذر تعيينها، يجب أن تكون ØØ±Ø© أولاً وغير مخصصة." + +#, c-format +msgid "" +"%s could not be freed, it must first have zero domain if it is shared, or " +"must be reserved." +msgstr "" +"%s تعذر ØªØØ±ÙŠØ±Ù‡ØŒ يجب أن يكون المجال ØµÙØ±Ø§Ù‹ أولاً إذا كان مشتركًا أو يجب ØØ¬Ø²Ù‡." + +#, c-format +msgid "%s could not be removed, you must free it first." +msgstr "%s لا يمكن إزالتها، يجب عليك ØªØØ±ÙŠØ±Ù‡ أولاً." + +#, c-format +msgid "%s could not be shared, it must first be free" +msgstr "%s لا يمكن مشاركتها، يجب أن تكون ØØ±Ø© أولاً" + +#, c-format +msgid "%s deleted successfully." +msgstr "%s ØØ°Ù بنجاØ." + +#, c-format +msgid "%s does not exist" +msgstr "%s غير موجود" + +#, c-format +msgid "%s does not have same ownership as %s" +msgstr "%s ليس لها Ù†ÙØ³ ملكية %s" + +#, c-format +msgid "%s has been blocked in %s to prevent further attempts on the account." +msgstr "تم ØØ¸Ø± %s ÙÙŠ %s لمنع المزيد من Ø§Ù„Ù…ØØ§ÙˆÙ„ات على Ø§Ù„ØØ³Ø§Ø¨." + +#, c-format +msgid "%s has been copied to %s." +msgstr "تم نسخ %s إلى %s." + +#, c-format +msgid "%s has been removed from the list" +msgstr "%s تمت إزالته من القائمة" + +#, c-format +msgid "%s has been renamed to %s." +msgstr "تمت إعادة تسمية %s إلى %s." + +#, c-format +msgid "%s has been saved as %s." +msgstr "تم ØÙظ %s كما %s." + +#, c-format +msgid "%s is a directory, will not delete" +msgstr "%s هو دليل ØŒ لن ØªØØ°Ù" + +#, c-format +msgid "%s is a link" +msgstr "%s هو ارتباط" + +#, c-format +msgid "%s is hard or symbolic link" +msgstr "%s هو وصلة الثابت أو الرمزي" + +#, fuzzy, c-format +#| msgid "%s is a link" +msgid "%s is missing" +msgstr "%s هو ارتباط" + +#, c-format +msgid "%s is not a directory" +msgstr "%s ليس دليلاً" + +#, c-format +msgid "%s is not a socket" +msgstr "%s ليس مأخذ توصيل" + +#, c-format +msgid "%s is not a symlink" +msgstr "%s ليس سمينلين" + +#, c-format +msgid "%s is not a valid IP or range" +msgstr "%s ليس IP أو نطاق صالØ" + +#, c-format +msgid "%s is not a valid access host" +msgstr "%s ليس مضي٠وصول صالØ" + +#, c-format +msgid "%s is not a valid database name" +msgstr "%s غير اسم قاعدة بيانات صالØ" + +#, c-format +msgid "%s is not a valid file" +msgstr "%s مل٠غير صالØ" + +#, c-format +msgid "%s is not a valid ip range. Use: 1.2.3.4-10" +msgstr "%s ليس نطاق IP صالØ. الاستخدام: 1.2.3.4-10" + +#, c-format +msgid "%s is not a valid key, skipping" +msgstr "%s غير ØµØ§Ù„Ø Ø§Ù„Ù…ÙØªØ§ØØŒ تخطي" + +#, c-format +msgid "%s is not chowned to %s which is a likely cause for extraction failure" +msgstr "لا %s هو chowned %s وهو سبب من Ø§Ù„Ù…Ø±Ø¬Ø Ø£Ù† ÙØ´Ù„ الاستخراج" + +#, fuzzy, c-format +#| msgid "Php is not enabled" +msgid "%s is not enabled" +msgstr "لم يتم تمكين PHP" + +#, c-format +msgid "%s is not in your commands list" +msgstr "%s غير موجود ÙÙŠ قائمة الأوامر" + +#, c-format +msgid "%s is not on your domain's IP list" +msgstr "%s غير موجود ÙÙŠ قائمة IP الخاصة بمجالك" + +#, c-format +msgid "%s is not one of the listed redirect types" +msgstr "%s ليس Ø£ØØ¯ أنواع إعادة التوجيه المسرودة" + +#, c-format +msgid "%s is not owned by %s" +msgstr "%s ليست مملوكة %s" + +#, c-format +msgid "%s is not set to 'free' or is still assigned to a reseller" +msgstr "لم يتم تعيين %s إلى \"ØªØØ±ÙŠØ±\" أو لا يزال يتم تعيينه إلى موزع" + +#, c-format +msgid "%s is now controlled by %s" +msgstr "%s الآن ØªØØª سيطرة %s" + +#, c-format +msgid "%s is now free" +msgstr "%s الآن مجانا" + +#, c-format +msgid "%s is now unassigned." +msgstr "%s الآن غير Ù…Ùنَتَهَم." + +#, c-format +msgid "%s is now your default domain." +msgstr "%s الآن المجال Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Ø§Ù„Ø®Ø§Øµ بك." + +#, fuzzy, c-format +#| msgid "%s is now free" +msgid "%s is out of range" +msgstr "%s الآن مجانا" + +#, c-format +msgid "" +"%s is reporting that IP %s has issued a password change request for user " +"'%s' without approval." +msgstr "" +"%s هو الإبلاغ عن أن %s IP قد أصدرت طلب تغيير كلمة المرور للمستخدم '%s' دون " +"مواÙقة." + +#, c-format +msgid "%s is required for %s" +msgstr "%s مطلوبة %s" + +#, c-format +msgid "%s must not be a symlink" +msgstr "%s يجب ألا يكون سمين" + +#, c-format +msgid "%s no longer has a Name Server Label." +msgstr "لم يعد %s تسمية ملقم الاسم." + +#, c-format +msgid "%s not implemented" +msgstr "لم ØªÙ†ÙØ° %s" + +#, c-format +msgid "%s records disabled at this level" +msgstr "%s تم تعطيل السجلات على هذا المستوى" + +#, c-format +msgid "%s value of '%s' is not in the home_override_list" +msgstr "%s قيمة \"%s\" ليست ÙÙŠ home_override_list" + +#, c-format +msgid "%s will now point to %s" +msgstr "%s الآن تشير إلى %s" + +#, c-format +msgid "%s's config files have been removed" +msgstr "تمت إزالة Ù…Ù„ÙØ§Øª التكوين %s" + +#, c-format +msgid "%s: lstat error on linnk value '%s': %s" +msgstr "%s: خطأ lstat على قيمة %s\": %s" + +#, c-format +msgid "%s: readlinke error: %s" +msgstr "%s: خطأ ÙÙŠ ربطة %s" + +#, c-format +msgid "%s=%s requires nginx_proxy=1 and the %s Pro-Pack" +msgstr "" + +#. /# %1$s - CPUQuota +#. /# %1$s - 200% +#. /# %1$s - percent +#, c-format +msgid "%s='%s' is not a valid %s type" +msgstr "" + +#, c-format +msgid "%sClick Here%s to learn how to enable it" +msgstr "%s انقر هنا%s Ù„Ù…Ø¹Ø±ÙØ© كيÙية تمكينه" + +#, c-format +msgid "%sClick Here%s to view the local raw zone data" +msgstr "%s انقر هنا%s لعرض بيانات المنطقة الخام المØÙ„ية" + +#, c-format +msgid "%sSave Increase%s" +msgstr "%s ØÙظ زيادة%s" + +#, c-format +msgid "%sTemporary Bandwidth Increase" +msgstr "%s زيادة عرض النطاق الترددي المؤقت" + +#, c-format +msgid "%sYour IP will be blacklisted" +msgstr "%s سيتم إدراج IP الخاص بك على القائمة السوداء" + +#, c-format +msgid "'%s' does not exist" +msgstr "\"%s\" غير موجود" + +#, c-format +msgid "'%s' does not exist\n" +msgstr "\"%s\" غير موجود\n" + +#, c-format +msgid "'%s' does not start with '%s'\n" +msgstr "'%s' لا يبدأ بـ\"%s\"\n" + +#, c-format +msgid "'%s' has been set to '%s'" +msgstr "تم تعيين \"%s\" إلى \"%s\"" + +#, c-format +msgid "'%s' is a forbidden package name." +msgstr "'%s' هو اسم ØØ²Ù…Ø© ممنوعة." + +#, c-format +msgid "'%s' is not a valid css hex color" +msgstr "'%s' ليست ØµØ§Ù„ØØ© المغلق ست عشرية اللون" + +#, fuzzy, c-format +#| msgid "'%s' is not enabled in your license" +msgid "'%s' is not assigned to your Reseller account." +msgstr "لم يتم تمكين \"%s\" ÙÙŠ الترخيص" + +#, c-format +msgid "'%s' is not enabled in your license" +msgstr "لم يتم تمكين \"%s\" ÙÙŠ الترخيص" + +#, c-format +msgid "'%s' is not on your list" +msgstr "\"%s\" غير موجود ÙÙŠ قائمتك" + +#, c-format +msgid "'%s' is required" +msgstr "\"%s\" مطلوب" + +#, c-format +msgid "'%s' must be '%s' or '%s'" +msgstr "يجب أن يكون \"%s\" \"%s\" أو \"%s\"" + +msgid "'import' does not appear to be base 64 encoded" +msgstr "'استيراد' لا يبدو أن الأساس 64 ترميز" + +msgid "'when' should be all, newer or older" +msgstr "'متى' ينبغي أن يكون كل شيء، Ø£ØØ¯Ø« أو أقدم" + +#, c-format +msgid "(%d) The following hard links have been found under User %s:" +msgstr "(%d) تم العثور على الروابط الثابتة التالية ØªØØª %s المستخدم:" + +msgid "* irretrievable *" +msgstr "* لا يمكن استرجاعها *" + +msgid "*** Stopped ***" +msgstr "توق٠***" + +msgid "-- None Available --" +msgstr "-- لا يوجد -" + +msgid "-- Reason:" +msgstr "السبب:" + +msgid "-- Select IP" +msgstr "-- اختر IP" + +msgid "-- Select Package" +msgstr "-- اختر ØØ²Ù…Ø©" + +msgid "-- any time --" +msgstr "- ÙÙŠ أي وقت -" + +msgid "-- anything --" +msgstr "-- أي شيء --" + +msgid "1k-blocks" +msgstr "1k كتل" + +#, c-format +msgid "A %s record already exists with that name" +msgstr "سجل %s موجود Ø¨Ø§Ù„ÙØ¹Ù„ بهذا الاسم" + +msgid "A 'free' IP can only be assigned to 1 User" +msgstr "يمكن تعيين IP \"مجاني\" Ùقط إلى مستخدم ÙˆØ§ØØ¯" + +msgid "A Record Type is required: A, NS, MX, CNAME, PTR, or TXT" +msgstr "مطلوب نوع سجل: AØŒ NSØŒ MXØŒ CNAMEØŒ PTRØŒ أو TXT" + +msgid "A Reseller can only control level=user" +msgstr "يمكن للموزع التØÙƒÙ… Ùقط ÙÙŠ المستوى = المستخدم" + +msgid "A Reseller cannot control other equal or higher account levels" +msgstr "لا يمكن للموزع التØÙƒÙ… ÙÙŠ مستويات Ø§Ù„ØØ³Ø§Ø¨ الأخرى المتساوية أو الأعلى" + +msgid "A file is required" +msgstr "مطلوب ملÙ" + +msgid "A forwarder already exists with that name" +msgstr "مع إعادة توجيه موجود Ø¨Ø§Ù„ÙØ¹Ù„ بهذا الاسم" + +msgid "A full domain/zone with this name already exists." +msgstr "يوجد Ø¨Ø§Ù„ÙØ¹Ù„ مجال/منطقة كاملة بهذا الاسم." + +msgid "A key with that name already exists" +msgstr "يوجد Ø¨Ø§Ù„ÙØ¹Ù„ Ù…ÙØªØ§Ø بهذا الاسم" + +msgid "A list alias already exists with that name" +msgstr "اسم مستعار قائمة موجود Ø¨Ø§Ù„ÙØ¹Ù„ بهذا الاسم" + +msgid "A message for that user already exists" +msgstr "رسالة لهذا المستخدم موجودة مسبقاً" + +msgid "A pop account already exists with that name" +msgstr "يوجد ØØ³Ø§Ø¨ البوب Ø¨Ø§Ù„ÙØ¹Ù„ بهذا الاسم" + +msgid "A skin name is required" +msgstr "مطلوب اسم الجلد" + +msgid "" +"A subdomain with the same name already exists on the system under another " +"domain." +msgstr "يوجد نطاق ÙØ±Ø¹ÙŠ Ø¨Ù†ÙØ³ الاسم Ø¨Ø§Ù„ÙØ¹Ù„ على النظام ضمن مجال آخر." + +msgid "Abuse" +msgstr "" + +msgid "Access Hosts" +msgstr "وصول المضيÙين" + +msgid "Access host has been added" +msgstr "تم Ø¥Ø¶Ø§ÙØ© مضي٠الوصول" + +msgid "Access hosts have been removed" +msgstr "تمت إزالة مضيÙÙŠ الوصول" + +msgid "Account" +msgstr "Ø§Ù„ØØ³Ø§Ø¨" + +#, c-format +msgid "Account %s has just created %s %s from IP %s" +msgstr "%s Ø§Ù„ØØ³Ø§Ø¨ قد أنشأ للتو %s %s من %s IP" + +#, c-format +msgid "Account %s skipped due to suspension" +msgstr "%s تخطي Ø§Ù„ØØ³Ø§Ø¨ بسبب التعليق" + +#, c-format +msgid "Account %s was suspended by an Admin and you only have Reseller access." +msgstr "تم تعليق %s Ø§Ù„ØØ³Ø§Ø¨ من قبل مسؤول ولا تملك إلا وصول الموزع." + +#, c-format +msgid "Account %s with domain %s has an empty caroot cert" +msgstr "" + +msgid "Account created" +msgstr "إنشاء Ø§Ù„ØØ³Ø§Ø¨" + +#, c-format +msgid "Account created in directory '%s'" +msgstr "تم إنشاء Ø§Ù„ØØ³Ø§Ø¨ ÙÙŠ الدليل '%s'" + +msgid "Account has been unblocked from BlockCracking" +msgstr "تم إلغاء ØØ¸Ø± Ø§Ù„ØØ³Ø§Ø¨ من BlockCracking" + +msgid "Account is not a Reseller" +msgstr "Ø§Ù„ØØ³Ø§Ø¨ ليس موزع" + +msgid "Account is suspended" +msgstr "Ø§Ù„ØØ³Ø§Ø¨ معلق" + +msgid "Account password changed" +msgstr "تغيير كلمة مرور Ø§Ù„ØØ³Ø§Ø¨" + +#, c-format +msgid "Accounts restored to %s partition." +msgstr "Ø§Ù„ØØ³Ø§Ø¨Ø§Øª التي تمت استعادتها إلى قسم %s." + +msgid "Action" +msgstr "الإجراء" + +msgid "Activate" +msgstr "ØªÙØ¹ÙŠÙ„" + +msgid "Active" +msgstr "نشط" + +msgid "Add" +msgstr "Ø¥Ø¶Ø§ÙØ©" + +#, c-format +msgid "Add %s" +msgstr "Ø¥Ø¶Ø§ÙØ© %s" + +msgid "Add Codes" +msgstr "Ø¥Ø¶Ø§ÙØ© رموز" + +msgid "Add Host" +msgstr "Ø¥Ø¶Ø§ÙØ© مضيÙ" + +msgid "Add Override" +msgstr "Ø¥Ø¶Ø§ÙØ© تجاوز" + +msgid "Add new Security Question" +msgstr "Ø¥Ø¶Ø§ÙØ© سؤال أمان جديد" + +msgid "Add the new NS records first." +msgstr "قم Ø¨Ø¥Ø¶Ø§ÙØ© سجلات NS الجديدة أولاً." + +msgid "Add to Apache" +msgstr "أض٠إلى أباتشي" + +msgid "Add to Clipboard" +msgstr "Ø¥Ø¶Ø§ÙØ© إلى Ø§Ù„ØØ§Ùظة" + +msgid "Add to DNS" +msgstr "Ø¥Ø¶Ø§ÙØ© إلى DNS" + +#, c-format +msgid "Added ns1 as %s and ns2 as %s" +msgstr "وأضا٠ns1 كما %s Ùˆns2 كما %s" + +msgid "Additional" +msgstr "معلومات إضاÙية" + +msgid "Admin" +msgstr "مشرÙ" + +msgid "Admin Backup/Transfer" +msgstr "مسؤول النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ / نقل" + +msgid "Admin Certificate Management" +msgstr "إدارة شهادات المسؤول" + +msgid "Admin DNS Administration" +msgstr "إدارة DNS المسؤول" + +msgid "Admin File Editor" +msgstr "مدير ØªØØ±ÙŠØ± Ø§Ù„Ù…Ù„ÙØ§Øª" + +msgid "Admin History" +msgstr "سجل المسؤول" + +msgid "Admin IP Management" +msgstr "إدارة IP المسؤول" + +msgid "Admin Plugins" +msgstr "Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª المشرÙ" + +msgid "Admin Resource Limits" +msgstr "" + +msgid "Admin SSL" +msgstr "مشر٠SSL" + +#, fuzzy +#| msgid "SSH is not enabled" +msgid "Admin SSL is not enabled" +msgstr "لم يتم تمكين SSH" + +msgid "Admin Settings" +msgstr "إعدادات المسؤول" + +msgid "Admin Statistics" +msgstr "Ø¥ØØµØ§Ø¦ÙŠØ§Øª المسؤول" + +msgid "Advanced Search" +msgstr "Ø¨ØØ« متقدم" + +msgid "" +"After many tries, we were unable to create a unique login name. This is " +"improbable." +msgstr "" +"بعد العديد من Ù…ØØ§ÙˆÙ„ات، كنا غير قادرين على إنشاء اسم تسجيل دخول ÙØ±ÙŠØ¯. هذا " +"غير Ù…ØØªÙ…Ù„" + +msgid "Afternoon" +msgstr "ÙØªØ±Ø© ما بعد الظهر" + +#, c-format +msgid "Alias %s@%s -> %s has been created" +msgstr "تم إنشاء الاسم المستعار %s@%s-> %s" + +msgid "All" +msgstr "الكل" + +msgid "All Data" +msgstr "ÙƒØ§ÙØ© البيانات" + +msgid "All E-Mail" +msgstr "ÙƒØ§ÙØ© البريد الإلكتروني" + +msgid "All Months (cgi)" +msgstr "كل الشهور (cgi)" + +msgid "All Resellers" +msgstr "جميع الموزعين" + +msgid "All User Cron Jobs" +msgstr "جميع وظائ٠Cron المستخدم" + +msgid "All Users" +msgstr "جميع المستخدمين" + +msgid "All Users Except Selected Users" +msgstr "ÙƒØ§ÙØ© المستخدمين باستثناء المستخدمين Ø§Ù„Ù…ØØ¯Ø¯ÙŠÙ†" + +msgid "All Users Except:" +msgstr "جميع المستخدمين Ùيما عدا:" + +msgid "All Users deleted successfully" +msgstr "تم ØØ°Ù ÙƒØ§ÙØ© المستخدمين بنجاØ" + +msgid "All databases removed succesfully" +msgstr "تمت إزالة ÙƒØ§ÙØ© قواعد البيانات بنجاØ" + +msgid "All of Your Users" +msgstr "جميع المستخدمين" + +msgid "All privileges have been set" +msgstr "تم تعيين ÙƒØ§ÙØ© الامتيازات" + +msgid "All route steps except the last are required to have a 'match'" +msgstr "جميع خطوات المسار باستثناء الأخيرة مطلوبة ليكون لها \"تطابق\"" + +msgid "All selected Users have been suspended" +msgstr "تم تعليق ÙƒØ§ÙØ© المستخدمين Ø§Ù„Ù…ØØ¯Ø¯ÙŠÙ†" + +msgid "All selected Users have been unsuspended" +msgstr "لم يتم Ø¥ÙŠÙ‚Ø§Ù ÙƒØ§ÙØ© المستخدمين Ø§Ù„Ù…ØØ¯Ø¯ÙŠÙ†" + +msgid "All specified forwarders removed" +msgstr "تمت إزالة ÙƒØ§ÙØ© معلّم Ø§Ù„Ù…ØØ¯Ø¯" + +msgid "Allocated" +msgstr "تخصيص" + +msgid "Allow" +msgstr "سماØ" + +msgid "Allow Overselling" +msgstr "Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ø§Ù„Ø¨ÙŠØ¹ الزائد" + +#, c-format +msgid "Allowance threshold is 0%%" +msgstr "Ø§Ù„ØØ¯ الأقصى للبدل هو 0%%" + +#, c-format +msgid "Allowing that much %s would put you over your limit of %s" +msgstr "Ø§Ù„Ø³Ù…Ø§Ø Ù„Ù‡Ø°Ø§ %s من شأنه أن يضعك Ùوق Ø§Ù„ØØ¯ الأقصى الخاص بك من %s" + +msgid "Already Exists" +msgstr "موجود مسبقا" + +msgid "" +"Although a backup error has occurred, the upload of valid backups would have " +"still been attempted to" +msgstr "" +"على الرغم من ØØ¯ÙˆØ« خطأ النسخ Ø§ØØªÙŠØ§Ø·ÙŠØŒ تØÙ…يل النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ© ØµØ§Ù„ØØ© قد لا يزال " +"قد ØØ§ÙˆÙ„" + +msgid "An Error Occurred" +msgstr "ØØ¯Ø« خظا ما" + +msgid "An Error has occurred" +msgstr "ØØ¯Ø« خطأ غير متوقع." + +msgid "An auto responder already exists with that name" +msgstr "يوجد Ø¨Ø§Ù„ÙØ¹Ù„ مستجيب تلقائي ÙŠØÙ…Ù„ هذا الاسم" + +msgid "An autoresponder with that name already exists" +msgstr "يوجد Ø¨Ø§Ù„ÙØ¹Ù„ جهاز الرد التلقائي بهذا الاسم" + +msgid "An error has occurred" +msgstr "ØØ¯Ø« خطأ" + +msgid "An error has occurred while rewriting the Nginx Unit config" +msgstr "ØØ¯Ø« خطأ أثناء إعادة كتابة تكوين ÙˆØØ¯Ø© Nginx" + +msgid "An error occured during extraction" +msgstr "ØØ¯Ø« خطأ أثناء الاستخراج" + +msgid "An error occured while creating the compressed file" +msgstr "ØØ¯Ø« خطأ أثناء إنشاء المل٠المضغوط" + +msgid "An error occured while resetting the file ownership" +msgstr "ØØ¯Ø« خطأ أثناء إعادة تعيين ملكية الملÙ" + +msgid "An error occurred during the backup" +msgstr "ØØ¯Ø« خطأ أثناء النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ" + +msgid "An error occurred listing the databases:" +msgstr "ØØ¯Ø« خطأ سرد قواعد البيانات:" + +msgid "An error occurred when unblocking the account" +msgstr "ØØ¯Ø« خطأ عند إلغاء ØØ¸Ø± Ø§Ù„ØØ³Ø§Ø¨" + +msgid "An error occurred while applying settings to your Users" +msgstr "ØØ¯Ø« خطأ أثناء تطبيق الإعدادات على المستخدمين" + +msgid "An error occurred while attempting to copy the file" +msgstr "ØØ¯Ø« خطأ أثناء Ù…ØØ§ÙˆÙ„Ø© نسخ الملÙ" + +msgid "An error occurred while attempting to create the directory" +msgstr "ØØ¯Ø« خطأ أثناء Ù…ØØ§ÙˆÙ„Ø© إنشاء الدليل" + +msgid "An error occurred while attempting to protect the directory" +msgstr "ØØ¯Ø« خطأ أثناء Ù…ØØ§ÙˆÙ„Ø© ØÙ…اية الدليل" + +msgid "An error occurred while attempting to rename the file" +msgstr "ØØ¯Ø« خطأ أثناء Ù…ØØ§ÙˆÙ„Ø© إعادة تسمية الملÙ" + +msgid "An error occurred while attempting to restore the file" +msgstr "ØØ¯Ø« خطأ أثناء Ù…ØØ§ÙˆÙ„Ø© استعادة الملÙ" + +msgid "Anonymous Ftp" +msgstr "Ftp مجهول" + +msgid "Answer" +msgstr "إجابة" + +msgid "Apache" +msgstr "ØØ§Ù„Ø© خادم Apache" + +msgid "Apache Handlers" +msgstr "معالجات أباتشي" + +msgid "Apache config file re-written with new ip" +msgstr "أباتشي مل٠التكوين إعادة كتابة مع الملكية الÙكرية الجديدة" + +msgid "Apparent Size" +msgstr "ØØ¬Ù… ظاهر" + +msgid "Appears as the first item within the section." +msgstr "يظهر كأول عنصر داخل المقطع." + +msgid "Appears at the very top of the template, before setting the variables." +msgstr "يظهر ÙÙŠ أعلى القالب، قبل تعيين المتغيرات." + +msgid "" +"Appears in ALL context{} sections, used for password protected directories." +msgstr "يظهر ÙÙŠ ÙƒØ§ÙØ© المقاطع السياق{} ØŒ المستخدمة للدلائل المØÙ…ية بكلمة مرور." + +msgid "Appears in phpIniOverride{} section." +msgstr "يظهر ÙÙŠ phpIniOverride{} المقطع." + +msgid "Appears in rewrite{} section." +msgstr "يظهر ÙÙŠ المقطع إعادة كتابة{} ." + +msgid "Appears in scripthandler{} section." +msgstr "يظهر ÙÙŠ مقطع برنامج نصي_handler{} ." + +msgid "Appears in vhssl{} section." +msgstr "يظهر ÙÙŠ مقطع vhssl{} ." + +msgid "Appears just before the section." +msgstr "يظهر قبل المقطع." + +msgid "Apply to All Users" +msgstr "تطبيق على ÙƒØ§ÙØ© المستخدمين" + +msgid "Apply to Me" +msgstr "تنطبق على لي" + +msgid "Apply to existing Domains" +msgstr "تطبيق على المجالات الموجودة" + +msgid "Apr" +msgstr "ابريل" + +msgid "Archive Size" +msgstr "ØØ¬Ù… الأرشيÙ" + +msgid "Archives purged" +msgstr "المØÙوظات التي تم تطهيرها" + +msgid "Are you sure you want to Delete the selected accounts?" +msgstr "هل تريد بالتأكيد ØØ°Ù Ø§Ù„ØØ³Ø§Ø¨Ø§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø©ØŸ" + +msgid "Are you sure you want to Delete the selected databases?" +msgstr "هل تريد بالتأكيد ØØ°Ù قواعد البيانات Ø§Ù„Ù…ØØ¯Ø¯Ø©ØŸ" + +msgid "Are you sure you want to Delete the selected keys?" +msgstr "هل تريد بالتأكيد ØØ°Ù Ø§Ù„Ù…ÙØ§ØªÙŠØ Ø§Ù„Ù…ØØ¯Ø¯Ø©ØŸ" + +msgid "Are you sure you want to delete the selected zones?" +msgstr "هل تريد بالتأكيد ØØ°Ù المناطق Ø§Ù„Ù…ØØ¯Ø¯Ø©ØŸ" + +msgid "Are you sure you want to delete these files?" +msgstr "هل أنت متأكد أنك تريد ØØ°Ù Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø©ØŸ" + +msgid "Are you sure you want to kill these processes?" +msgstr "هل أنت متأكد من أنك تريد قتل هذه العمليات؟" + +msgid "Ascending" +msgstr "تصاعدي" + +msgid "Assign to" +msgstr "يسند إلى" + +#, fuzzy +#| msgid "Signed" +msgid "Assigned" +msgstr "وقعت" + +msgid "At least one crediential is required." +msgstr "مطلوب مصداقية ÙˆØ§ØØ¯Ø© على الأقل." + +#, c-format +msgid "Attempting to copy %s onto itself, file skipped." +msgstr "Ù…ØØ§ÙˆÙ„Ø© نسخ %s إلى Ù†ÙØ³Ù‡ØŒ تم تخطي الملÙ." + +#, c-format +msgid "Attempting to move %s onto itself, file skipped." +msgstr "Ù…ØØ§ÙˆÙ„Ø© نقل %s إلى Ù†ÙØ³Ù‡ØŒ تم تخطي الملÙ." + +msgid "Attempts" +msgstr "Ø§Ù„Ù…ØØ§ÙˆÙ„ات" + +msgid "Aug" +msgstr "أغسطس" + +msgid "Auth::logoutCreator error" +msgstr "خطأ ÙÙŠ Auth::logoutCreator" + +#, c-format +msgid "" +"Authenication::get_unique_login_hash: could not generate a unique login has " +"after %s attempts" +msgstr "" +"Authenication::get_unique_login_hash: تعذر إنشاء تسجيل دخول ÙØ±ÙŠØ¯ لديه بعد %s " +"Ù…ØØ§ÙˆÙ„ات" + +msgid "Authentication" +msgstr "المصادقة" + +msgid "Authorize" +msgstr "الصلاØÙŠØ§Øª" + +msgid "Auto" +msgstr "تلقائي" + +msgid "Auto media selection active." +msgstr "" + +msgid "Auto+Confirm" +msgstr "تلقائي+تأكيد" + +msgid "AutoResponders" +msgstr "اوتوريسبوندرز" + +#, c-format +msgid "Automated certificate renewal for %s has succeeded" +msgstr "Ù†Ø¬Ø§Ø ØªØ¬Ø¯ÙŠØ¯ الشهادة الآلية %s" + +msgid "Autoreply" +msgstr "تلقائي" + +msgid "Autoresponder" +msgstr "الرد الالي" + +msgid "Autoresponder updated" +msgstr "ØªØØ¯ÙŠØ« الرد التلقائي" + +msgid "Autoresponders" +msgstr "اوتوريسبوندرز" + +msgid "Available" +msgstr "المتاØ" + +msgid "Avoid use of trailers." +msgstr "" + +msgid "Awstats" +msgstr "Awstats" + +msgid "Awstats ..." +msgstr "Awstats..." + +msgid "Awstats setting changed" +msgstr "تم تغيير إعداد Awstats" + +msgctxt "readable size" +msgid "B" +msgstr "B" + +msgid "Back" +msgstr "رجوع" + +msgid "Backing up Databases" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ù‚ÙˆØ§Ø¹Ø¯ البيانات" + +msgid "Backing up E-Mail Data" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ø¨ÙŠØ§Ù†Ø§Øª البريد الإلكتروني" + +msgid "Backing up E-Mail Settings" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª البريد الإلكتروني" + +msgid "Backing up FTP" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ù€ FTP" + +msgid "Backing up User Configs" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„ØªÙƒÙˆÙŠÙ†Ø§Øª المستخدم" + +msgid "Backing up User Data" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ø¨ÙŠØ§Ù†Ø§Øª المستخدم" + +msgid "Backing up extra E-Mail items" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ø¹Ù†Ø§ØµØ± البريد الإلكتروني الإضاÙية" + +msgid "Backup" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ" + +#, c-format +msgid "Backup %d is not currently running." +msgstr "%d النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ ØºÙŠØ± قيد التشغيل ØØ§Ù„ياً." + +#, c-format +msgid "Backup Abort (%d): A hard link was found under User %s's path" +msgstr "" +"Ø¥ØØ¨Ø§Ø· النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ (%d): تم العثور على ارتباط ثابت ضمن مسار %s المستخدم" + +#, c-format +msgid "Backup Error with Nginx Unit: %s" +msgstr "خطأ النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù…Ø¹ ÙˆØØ¯Ø© Nginx: %s" + +msgid "Backup Halted" +msgstr "تم إيقا٠النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ" + +msgid "Backup ID" +msgstr "معر٠النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ" + +msgid "Backup creation added to queue" +msgstr "Ø¥Ø¶Ø§ÙØ© إنشاء النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ø¥Ù„Ù‰ قائمة الانتظار" + +#, c-format +msgid "Backup path %s has been created." +msgstr "تم إنشاء %s مسار النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ." + +msgid "Backups added to Queue" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ© Ø§Ù„Ù…Ø¶Ø§ÙØ© إلى قائمة الانتظار" + +msgid "Bad User usertype" +msgstr "نوع مستخدم غير صØÙŠØ" + +msgid "Bandwidth" +msgstr "عرض النطاق" + +msgid "Bandwidth (MB)" +msgstr "عرض النطاق الترددي (MB)" + +msgid "Bandwidth Breakdown" +msgstr "توزيع النطاق الترددي" + +msgid "Bandwidth Usage" +msgstr "استخدام النطاق الترددي" + +msgid "Be sure to re-scan the QR code, as all old codes become invalid." +msgstr "" +"تأكد من إعادة Ù…Ø³Ø Ø±Ù…Ø² الاستجابة السريعة، ØÙŠØ« ØªØµØ¨Ø Ø¬Ù…ÙŠØ¹ الرموز القديمة غير " +"ØµØ§Ù„ØØ©." + +msgid "" +"Because the script meets the required criteria, it has been disabled via " +"chmod to 0." +msgstr "" +"لأن البرنامج النصي ÙŠÙÙŠ بالمعايير المطلوبة، Ùقد تم تعطيله عبر chmod إلى 0." + +msgid "" +"Before Unblocking, ensure that any compromised scripts have been removed or " +"fixed." +msgstr "قبل إلغاء Ø§Ù„ØØ¸Ø±ØŒ تأكد من إزالة أو Ø¥ØµÙ„Ø§Ø Ø£ÙŠØ© برامج نصية تم اختراقها." + +#, fuzzy +#| msgid "Mailing Lists" +msgid "Billing Issue" +msgstr "القوائم البريدية" + +#, c-format +msgid "Blank value: default, global limit of %d" +msgstr "قيمة ÙØ§Ø±ØºØ©: Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØŒ Ø§Ù„ØØ¯ العمومي %d" + +msgid "Block Usage" +msgstr "ØØ¸Ø± الاستخدام" + +msgid "BlockCracker Blocked Paths" +msgstr "مسارات Ù…ØØ¸ÙˆØ±Ø© BlockCracker" + +msgid "Blocked" +msgstr "Ù…ØØ¸ÙˆØ±" + +msgid "Both DNS Control and ttl override must be enabled" +msgstr "يجب تمكين كل من التØÙƒÙ… DNS وتجاوز ttl" + +msgid "Brute Force Monitor" +msgstr "أداة مراقبة القوة الغاشمة" + +msgid "Brute-Force Attack detected in service log" +msgstr "هجوم القوة الغاشمة التي تم اكتشاÙها ÙÙŠ سجل الخدمة" + +msgid "CA Certificate is Invalid" +msgstr "شهادة المرجع المصدق غير ØµØ§Ù„ØØ©" + +msgid "CA Certificate is ok. Your site should be secure within a few minutes." +msgstr "شهادة CA على ما يرام. يجب أن يكون موقعك آمنًا ÙÙŠ غضون دقائق قليلة." + +msgid "CC Address" +msgstr "عنوان CC" + +msgid "CGI-Bin" +msgstr "CGI-بن" + +msgid "CPU Quota" +msgstr "" + +msgid "Can use Server IP" +msgstr "يمكن استخدام IP الملقم" + +msgid "Can't get file lock on" +msgstr "لا يمكن Ø§Ù„ØØµÙˆÙ„ على تأمين الملÙ" + +#, c-format +msgid "Can't open file %s for reading" +msgstr "لا يمكن ÙØªØ %s المل٠للقراءة" + +#, c-format +msgid "Can't reopen file %s for appending" +msgstr "لا يمكن إعادة ÙØªØ المل٠%s Ù„Ø¥Ù„ØØ§Ù‚" + +msgid "Cancel" +msgstr "إلغاء" + +msgid "Cannot Add A Record" +msgstr "لا يمكن Ø¥Ø¶Ø§ÙØ© سجل" + +msgid "Cannot Add CNAME Record" +msgstr "لا يمكن Ø¥Ø¶Ø§ÙØ© سجل CNAME" + +msgid "Cannot Add Record" +msgstr "لا يمكن Ø¥Ø¶Ø§ÙØ© سجل" + +msgid "Cannot Create Account" +msgstr "لا يمكن إنشاء ØØ³Ø§Ø¨" + +msgid "Cannot Create Another Autoresponder" +msgstr "لا يمكن إنشاء جهاز إعادة تشغيل تلقائي آخر" + +msgid "Cannot Create Another Database" +msgstr "لا يمكن إنشاء قاعدة بيانات أخرى" + +msgid "Cannot Create Another Domain" +msgstr "لا يمكن إنشاء مجال آخر" + +msgid "Cannot Create Another Domain Pointer" +msgstr "لا يمكن إنشاء مؤشر مجال آخر" + +msgid "Cannot Create Another FTP Account" +msgstr "لا يمكن إنشاء ØØ³Ø§Ø¨ FTP آخر" + +msgid "Cannot Create Another Forwarder" +msgstr "لا يمكن إنشاء معير آخر" + +msgid "Cannot Create Another Mailing List" +msgstr "لا يمكن إنشاء قائمة مراسلات أخرى" + +msgid "Cannot Create Another POP Account" +msgstr "لا يمكن إنشاء ØØ³Ø§Ø¨ POP آخر" + +msgid "Cannot Create Another Subdomain" +msgstr "لا يمكن إنشاء نطاق ÙØ±Ø¹ÙŠ Ø¢Ø®Ø±" + +msgid "Cannot Create Autoresponder" +msgstr "لا يمكن إنشاء \"جهاز الرد التلقائي\"" + +msgid "Cannot Create Domain" +msgstr "لا يمكن إنشاء مجال" + +msgid "Cannot Create Vacation Message" +msgstr "لا يمكن إنشاء رسالة عطلة" + +msgid "Cannot Create a Message" +msgstr "لا يمكن إنشاء رسالة" + +msgid "Cannot Execute Command" +msgstr "لا يمكن تنÙيذ الأمر" + +msgid "Cannot Execute Your Request" +msgstr "لا يمكن تنÙيذ طلبك" + +msgid "Cannot Modify Key" +msgstr "لا يمكن تعديل Ù…ÙØªØ§Ø" + +msgid "Cannot Modify User" +msgstr "لا يمكن تعديل المستخدم" + +msgid "Cannot View Domain Settings" +msgstr "لا يمكن عرض إعدادات المجال" + +#, c-format +msgid "Cannot add pointer %s, you have reached your limit of %s" +msgstr "لا يمكن Ø¥Ø¶Ø§ÙØ© مؤشر %sØŒ لقد وصلت إلى Ø§Ù„ØØ¯ الأقصى %s" + +#, fuzzy +#| msgid "Cannot manage zone" +msgid "Cannot be an object" +msgstr "لا يمكن إدارة المنطقة" + +msgid "Cannot change the ip" +msgstr "لا يمكن تغيير IP" + +msgid "" +"Cannot change the password for a system account. Login to the control panel " +"to do that." +msgstr "" +"لا يمكن تغيير كلمة المرور Ù„ØØ³Ø§Ø¨ نظام. تسجيل الدخول إلى Ù„ÙˆØØ© التØÙƒÙ… للقيام " +"بذلك." + +msgid "" +"Cannot change the password for this email account. The account is currently " +"on a suspended domain." +msgstr "" +"لا يمكن تغيير كلمة المرور Ù„ØØ³Ø§Ø¨ البريد الإلكتروني هذا. Ø§Ù„ØØ³Ø§Ø¨ ØØ§Ù„ياً على " +"مجال مرØÙ„ÙŠ." + +msgid "Cannot change your email" +msgstr "لا يمكن تغيير البريد الإلكتروني الخاص بك" + +msgid "Cannot change your name" +msgstr "لا يمكن تغيير اسمك" + +msgid "Cannot change your password" +msgstr "لا يمكن تغيير كلمة المرور" + +msgid "Cannot create User Backup" +msgstr "" + +msgid "Cannot create domain" +msgstr "لا يمكن إنشاء مجال" + +msgid "Cannot create that domain" +msgstr "لا يمكن إنشاء هذا المجال" + +msgid "Cannot create user using those settings" +msgstr "لا يمكن إنشاء مستخدم باستخدام هذه الإعدادات" + +msgid "Cannot delete records" +msgstr "لا يمكن ØØ°Ù السجلات" + +msgid "Cannot delete the skin you're currently using." +msgstr "لا يمكن ØØ°Ù الجلد الذي تستخدمه ØØ§Ù„يًا." + +#, fuzzy, c-format +#| msgid "Cannot Create Another Subdomain" +msgid "Cannot determine owner of subdomain '%s'" +msgstr "لا يمكن إنشاء نطاق ÙØ±Ø¹ÙŠ Ø¢Ø®Ø±" + +msgid "Cannot execute your request" +msgstr "لا يمكن تنÙيذ طلبك" + +#, c-format +msgid "Cannot find %s" +msgstr "يتعذر العثور علي %s" + +#, c-format +msgid "Cannot find %s in list" +msgstr "لا يمكن العثور على %s ÙÙŠ القائمة" + +#, c-format +msgid "Cannot find %s in name" +msgstr "لا يمكن العثور على %s ÙÙŠ الاسم" + +#, c-format +msgid "Cannot find %s to convert %s" +msgstr "لا يمكن العثور على %s لتØÙˆÙŠÙ„ %s" + +#, c-format +msgid "Cannot find %s, skipping." +msgstr "لا يمكن العثور على %sØŒ تخطي." + +#, c-format +msgid "Cannot find %s. Ensure the domain exists and is not suspended" +msgstr "لا يمكن العثور على %s. تأكد من وجود المجال وعدم تعليقه" + +#, c-format +msgid "Cannot find '%s'" +msgstr "لا يمكن العثور على '%s'" + +#, c-format +msgid "Cannot find '%s' in the list of allowed values for %s" +msgstr "لا يمكن العثور على \"%s\" ÙÙŠ قائمة القيم Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§ %s" + +#, c-format +msgid "Cannot find '%s' in the template" +msgstr "لا يمكن العثور على '%s' ÙÙŠ القالب" + +msgid "Cannot find IP" +msgstr "لا يمكن العثور على IP" + +#, c-format +msgid "Cannot find Security Question ID %d in the User list" +msgstr "لا يمكن العثور على %d معر٠سؤال الأمان ÙÙŠ قائمة المستخدمين" + +#, c-format +msgid "Cannot find User '%s'" +msgstr "لا يمكن العثور على المستخدم '%s'" + +msgid "Cannot find a valid system username in the domainowners file." +msgstr "لا يمكن العثور على اسم مستخدم نظام ØµØ§Ù„Ø ÙÙŠ مل٠domainners." + +msgid "Cannot find any SAN values in the certificate." +msgstr "لا يمكن العثور على أية قيم SAN ÙÙŠ الشهادة." + +msgid "Cannot find any message subjects from clear_message_system_list" +msgstr "لا يمكن العثور على أي مواضيع رسالة من clear_message_system_list" + +msgid "Cannot find any security questions from security_questions.txt" +msgstr "لا يمكن العثور على أي أسئلة أمان من security_questions.txt" + +#, c-format +msgid "Cannot find any tar.gz after converting from %s" +msgstr "لا يمكن العثور على أي قطران.gz بعد التØÙˆÙŠÙ„ من %s" + +msgid "Cannot find domain in domain owners file" +msgstr "لا يمكن العثور على مجال ÙÙŠ مل٠مالكي المجال" + +msgid "Cannot find domain in the certificate." +msgstr "لا يمكن العثور على مجال ÙÙŠ الشهادة." + +#, c-format +msgid "Cannot find key value in %s" +msgstr "لا يمكن العثور على قيمة Ø§Ù„Ù…ÙØªØ§Ø ÙÙŠ %s" + +#, c-format +msgid "Cannot find logo file for token %s in skin %s" +msgstr "لا يمكن العثور على مل٠شعار %s المميزة ÙÙŠ %s" + +#, c-format +msgid "Cannot find logo file for token %s=%s in skin %s" +msgstr "لا يمكن العثور على مل٠شعار %s الرمز المميز = %s ÙÙŠ %s" + +#, c-format +msgid "Cannot find plugin %s" +msgstr "لا يمكن العثور على %s المساعد" + +msgid "Cannot find show_blocked_ips.sh" +msgstr "لا يمكن العثور على show_blocked_ips.sh" + +msgid "Cannot find template_php_ini or domain_php_ini in json" +msgstr "لا يمكن العثور على template_php_ini أو domain_php_ini ÙÙŠ json" + +msgid "Cannot find that code. It's likely expired." +msgstr "لا يمكن العثور على هذا الرمز. من Ø§Ù„Ù…ØØªÙ…Ù„ أن يكون منتهي الصلاØÙŠØ©" + +msgid "Cannot find that domain in the domainowners file" +msgstr "لا يمكن العثور على هذا المجال ÙÙŠ مل٠domainners" + +msgid "Cannot find that key id" +msgstr "لا يمكن العثور على Ù…Ø¹Ø±Ù Ø§Ù„Ù…ÙØªØ§Ø هذا" + +msgid "Cannot find the account nor the forwarder" +msgstr "لا يمكن العثور على Ø§Ù„ØØ³Ø§Ø¨ أو مع مع إعادة التوجيه" + +msgid "Cannot find the letsencrypt.sh script" +msgstr "لا يمكن العثور على البرنامج النصي letsencrypt.sh" + +msgid "Cannot find the sql file after backup was run:" +msgstr "لا يمكن العثور على مل٠sql بعد تشغيل النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ:" + +#, c-format +msgid "Cannot find the user %s which should already exist" +msgstr "لا يمكن العثور على المستخدم %s التي يجب أن تكون موجودة مسبقاً" + +#, c-format +msgid "Cannot get '%s' index from skin.conf" +msgstr "لا يمكن Ø§Ù„ØØµÙˆÙ„ على مؤشر \"%s\" من skin.conf" + +#, c-format +msgid "Cannot get mime-type for %s" +msgstr "لا يمكن Ø§Ù„ØØµÙˆÙ„ على نوع mime %s" + +#, c-format +msgid "Cannot get the user list for database %s" +msgstr "لا يمكن Ø§Ù„ØØµÙˆÙ„ على قائمة المستخدمين %s قاعدة البيانات" + +msgid "Cannot have newline characters in subject" +msgstr "لا يمكن أن يكون لديك Ø£ØØ±Ù سطر جديد ÙÙŠ الموضوع" + +msgid "Cannot have unlimited E-Mail quotas" +msgstr "لا يمكن أن يكون لديك ØØµØµ نسبية غير Ù…ØØ¯ÙˆØ¯Ø© للبريد الإلكتروني" + +msgid "Cannot load lang po" +msgstr "لا يمكن تØÙ…يل لانغ بو" + +msgid "Cannot load lang request" +msgstr "لا يمكن تØÙ…يل طلب lang" + +msgid "Cannot manage zone" +msgstr "لا يمكن إدارة المنطقة" + +#, c-format +msgid "Cannot move a directory (%s) onto an existing file or directory (%s)" +msgstr "لا يمكن نقل دليل (%s) إلى مل٠موجود أو دليل (%s)" + +msgid "Cannot open the password file to add the user" +msgstr "لا يمكن ÙØªØ مل٠كلمة المرور Ù„Ø¥Ø¶Ø§ÙØ© المستخدم" + +msgid "Cannot open the password file to change the password" +msgstr "لا يمكن ÙØªØ مل٠كلمة المرور لتغيير كلمة المرور" + +msgid "Cannot open the user password file for reading" +msgstr "لا يمكن ÙØªØ مل٠كلمة مرور المستخدم للقراءة" + +msgid "Cannot read the numerical 'limit' (original -1 is still set)" +msgstr "لا يمكن قراءة \"Ø§Ù„ØØ¯\" العددي (لا يزال يتم تعيين -1 الأصلي)" + +msgid "Cannot rename a directory onto an existing file or directory" +msgstr "لا يمكن إعادة تسمية دليل إلى مل٠موجود أو دليل موجود" + +msgid "Cannot resend welcome email" +msgstr "لا يمكن إعادة إرسال البريد الإلكتروني الترØÙŠØ¨ÙŠ" + +msgid "Cannot resolve host value for license check" +msgstr "لا يمكن ØÙ„ قيمة المضي٠للتأكد من الترخيص" + +#, c-format +msgid "" +"Cannot restore the ftp account for %s. You have reached your limit (%s)." +msgstr "لا يمكن استعادة ØØ³Ø§Ø¨ ftp %s. لقد وصلت إلى Ø§Ù„ØØ¯ الأقصى الخاص بك (%s)." + +msgid "Cannot set TTL" +msgstr "" + +msgid "Cannot set default domain" +msgstr "لا يمكن تعيين المجال Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ" + +msgid "Cannot stat the source file" +msgstr "لا يمكن stat المل٠المصدر" + +msgid "Cannot use the main account username" +msgstr "لا يمكن استخدام اسم المستخدم الرئيسي Ù„Ù„ØØ³Ø§Ø¨" + +msgid "Case Sensitive" +msgstr "ØØ³Ø§Ø³ Ù„ØØ§Ù„Ø© Ø§Ù„Ø£ØØ±Ù" + +#, c-format +msgid "Catch all is now set to %s" +msgstr "تم الآن تعيين كل التقاط إلى %s" + +msgid "Catch-All E-Mail" +msgstr "التقاط جميع البريد الإلكتروني" + +msgid "Catch-All Email" +msgstr "القبض على جميع البريد الإلكتروني" + +msgid "Catch-All Email has been disabled on this account" +msgstr "تم تعطيل البريد الإلكتروني \"التقاط الكل\" على هذا Ø§Ù„ØØ³Ø§Ø¨" + +msgid "Catch-All email updated successfully" +msgstr "تم ØªØØ¯ÙŠØ« البريد الإلكتروني \"التقاط الكل\" بنجاØ" + +msgid "Catch-All is now set to fail" +msgstr "تم الآن تعيين \"الكل\" Ù„Ù„ÙØ´Ù„" + +msgid "Catch-All is now set to ignore wrong addresses" +msgstr "تم الآن تعيين \"التقاط الكل\" لتجاهل عناوين خاطئة" + +#, fuzzy +#| msgid "SSL Certificates" +msgid "Certificate" +msgstr "شهادات SSL" + +msgid "Certificate and Key Saved." +msgstr "الشهادة ÙˆØ§Ù„Ù…ÙØªØ§Ø المØÙوظ." + +msgid "Certificate is Invalid" +msgstr "الشهادة غير ØµØ§Ù„ØØ©" + +msgid "Certificate is Self-Signed" +msgstr "الشهادة موقّعة ذاتياً" + +msgid "Change Password" +msgstr "تغيير كلمة المرور" + +msgid "Change the password to unblock it." +msgstr "تغيير كلمة المرور لإلغاء ØØ¸Ø±Ù‡Ø§." + +#, c-format +msgid "Changed by IP: %s" +msgstr "تم تغييرها بواسطة IP: %s" + +msgid "Changes saved" +msgstr "تم ØÙظ التغييرات" + +msgid "Check" +msgstr "التØÙ‚Ù‚" + +msgid "Check has already been done recently. Try later." +msgstr "لقد تم التØÙ‚Ù‚ Ø¨Ø§Ù„ÙØ¹Ù„ مؤخراً. ØØ§ÙˆÙ„ لاØÙ‚اً" + +msgid "Check the error log for more information." +msgstr "تØÙ‚Ù‚ من سجل الأخطاء Ù„Ù„ØØµÙˆÙ„ على مزيد من المعلومات." + +msgid "Check the time on both your server and your phone." +msgstr "تØÙ‚Ù‚ من الوقت على كل من الخادم والهاتÙ." + +msgid "Check to see if the current software is valid" +msgstr "تØÙ‚Ù‚ Ù„Ù…Ø¹Ø±ÙØ© ما إذا كان البرنامج Ø§Ù„ØØ§Ù„ÙŠ صالØÙ‹Ø§" + +#, c-format +msgid "Child user %s deleted" +msgstr "%s ØØ°Ù المستخدم التابع" + +msgid "" +"Choose from: blacklist_usernames, blacklist_smtp_usernames, " +"blacklist_script_usernames" +msgstr "" +"الاختيار من بين: blacklist_usernamesØŒ blacklist_smtp_usernamesØŒ " +"blacklist_script_usernames" + +msgid "City must only contain letters, spaces and/or periods" +msgstr "يجب أن ØªØØªÙˆÙŠ Ø§Ù„Ù…Ø¯ÙŠÙ†Ø© على Ø£ØØ±Ù Ùˆ/أو Ù…Ø³Ø§ÙØ§Øª Ùˆ/أو ÙØªØ±Ø§Øª Ùقط" + +msgid "Clean Forwarders" +msgstr "معلّّم Ø§Ù„Ù†Ø¸Ø§ÙØ©" + +#, c-format +msgid "Cleaning %s" +msgstr "%s التنظيÙ" + +msgid "Clear Customization" +msgstr "Ù…Ø³Ø Ø§Ù„ØªØ®ØµÙŠØµ" + +msgid "Clear Messages System" +msgstr "نظام الرسائل ÙˆØ§Ø¶ØØ©" + +msgid "Clear NS" +msgstr "Ù…Ø³Ø NS" + +msgid "Clear Search Filter" +msgstr "Ù…Ø³Ø Ø¹Ø§Ù…Ù„ تصÙية Ø§Ù„Ø¨ØØ«" + +#, c-format +msgid "Click %sHERE%s to go back" +msgstr "انقر Ùوق %sHERE% للعودة" + +#, c-format +msgid "Click %sHERE%s to return" +msgstr "انقر Ùوق %sHERE% للعودة" + +#, c-format +msgid "Click %sHERE%s to return to main page" +msgstr "انقر Ùوق %sHERE% للعودة إلى Ø§Ù„ØµÙØØ© الرئيسية" + +msgid "Click Here to Download the Latest Backup" +msgstr "انقر هنا لتØÙ…يل Ø£ØØ¯Ø« النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ" + +msgid "Click here to close this window" +msgstr "انقر هنا لإغلاق هذه Ø§Ù„Ù†Ø§ÙØ°Ø©" + +msgid "Click here to enable SSL on the domain" +msgstr "انقر هنا لتمكين SSL على المجال" + +msgid "Clipboard" +msgstr "Ø§Ù„ØØ§Ùظة" + +msgid "Close" +msgstr "إغلاق" + +msgid "Closed" +msgstr "مغلق" + +msgid "Closed+Confirm" +msgstr "مغلق +تأكيد" + +msgid "Code" +msgstr "الكود" + +msgid "Code does not match" +msgstr "رمز غير متطابق" + +#, c-format +msgid "Color %s (%s) is not from the list: %s" +msgstr "%s اللون (%s) غير من القائمة: %s" + +msgid "Color has been customized" +msgstr "تم تخصيص اللون" + +msgid "Column in" +msgstr "عمود" + +msgid "Command" +msgstr "الأمر" + +msgid "Command Returned" +msgstr "الأمر الذي تم إرجاعه" + +msgid "Comment" +msgstr "التعليق" + +msgid "Comments" +msgstr "التعليقات" + +msgid "Company must only contain letters, numbers, spaces, and/or periods" +msgstr "يجب أن ØªØØªÙˆÙŠ Ø§Ù„Ø´Ø±ÙƒØ© على Ø§Ù„Ø£ØØ±Ù والأرقام ÙˆØ§Ù„Ù…Ø³Ø§ÙØ§Øª Ùˆ/أو Ø§Ù„ÙØªØ±Ø§Øª Ùقط" + +msgid "Compressed File Created" +msgstr "تم إنشاء مل٠مضغوط" + +#, c-format +msgid "Compressing %s" +msgstr "ضغط %s" + +msgid "Confirm" +msgstr "تأكيد" + +#, c-format +msgid "Confirm results on the %sDirectAdmin Website%s" +msgstr "تأكيد النتائج على موقع %sDirectAdmin%s" + +#, c-format +msgid "Connection error: %s" +msgstr "خطأ ÙÙŠ الاتصال: %s" + +msgid "Continuing with the other files." +msgstr "الاستمرار ÙÙŠ Ø§Ù„Ù…Ù„ÙØ§Øª الأخرى." + +msgid "" +"Controlling widgets for accounts under your control requires an Admin or " +"Reseller login" +msgstr "" +"يتطلب التØÙƒÙ… ÙÙŠ Ø§Ù„ØØ§Ø¬ÙŠØ§Øª Ù„Ù„ØØ³Ø§Ø¨Ø§Øª الخاضعة لتØÙƒÙ…Ùƒ تسجيل دخول المسؤول أو البائع" + +msgid "Copy" +msgstr "نسخ" + +msgid "Copy Clipboard Files here" +msgstr "نسخ Ù…Ù„ÙØ§Øª Ø§Ù„ØØ§Ùظة هنا" + +msgid "Copy the packages export data" +msgstr "نسخ بيانات تصدير Ø§Ù„ØØ²Ù…" + +msgid "Copying Admin Data" +msgstr "نسخ بيانات المسؤول" + +msgid "Copying Reseller Data" +msgstr "نسخ بيانات الموزع" + +msgid "" +"Copying files has been disabled with the filemanager_disable_features option" +msgstr "تم تعطيل نسخ Ø§Ù„Ù…Ù„ÙØ§Øª باستخدام الخيار filemanager_disable_features" + +msgid "Copying unreadable data" +msgstr "نسخ بيانات غير قابلة للقراءة" + +msgid "Could not excute your request" +msgstr "لا يمكن أن تÙÙ‚ÙŽÙ„ÙŽÙ„ طلبك" + +msgid "Could not execute your request" +msgstr "تعذر تنÙيذ طلبك" + +#, c-format +msgid "Could not generate a random hash name after %d tries." +msgstr "تعذر إنشاء اسم تجزئة عشوائي بعد %d ÙŠØØ§ÙˆÙ„." + +#, c-format +msgid "Could not get rDNS for IP '%s'" +msgstr "تعذر Ø§Ù„ØØµÙˆÙ„ على rDNS لـ IP '%s'" + +msgid "Could not read tickets" +msgstr "تعذر قراءة التذاكر" + +msgid "Could not write tickets" +msgstr "تعذر كتابة التذاكر" + +#, c-format +msgid "Couldn't find any IPs of any type to give User (requested ip=%s)." +msgstr "" +"تعذر العثور على أي برامج IPs من أي نوع لإعطاء المستخدم (IP المطلوب = %s)." + +msgid "Couldn't find the 2nd part of the MX value, after the number" +msgstr "تعذر العثور على الجزء الثاني من قيمة MXØŒ بعد الرقم" + +#, c-format +msgid "Couldn't read db file for %s. Unable to add ns1 and ns2 to it." +msgstr "تعذر قراءة مل٠db %s. غير قادر على Ø¥Ø¶Ø§ÙØ© NS1 Ùˆ ns2 إليها." + +msgid "Count" +msgstr "عد" + +msgid "Counted" +msgstr "Ù…ØØ³ÙˆØ¨" + +msgid "Country code must be 2 letters" +msgstr "يجب أن يكون رمز البلد 2 ØØ±Ù" + +msgid "Create/Restore Backups" +msgstr "إنشاء/استعادة النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ©" + +msgid "Created" +msgstr "تم الإنشاء" + +msgid "" +"Creating directories has been disabled with the filemanager_disable_features " +"option" +msgstr "تم تعطيل إنشاء الدلائل باستخدام الخيار filemanager_disable_features" + +#, c-format +msgid "Creating that many %s would put you over your limit of %s" +msgstr "خلق أن العديد من %s من شأنه أن يضع لك أكثر من Ø§Ù„ØØ¯ الخاص بك من %s" + +msgid "Creating zip files is disabled" +msgstr "تم تعطيل إنشاء Ù…Ù„ÙØ§Øª مضغوطة" + +msgid "Creator" +msgstr "المنشئ" + +msgid "Creator Duplicate" +msgstr "تكرار منشئ" + +msgid "Cron Created" +msgstr "Cron تم إنشاؤه" + +msgid "Cron E-Mail set" +msgstr "مجموعة البريد الإلكتروني كرون" + +msgid "Cron Job(s) Deleted" +msgstr "Cron Job (وظائÙ) Ù…ØØ°ÙˆÙØ©" + +msgid "Cron Jobs" +msgstr "وظائ٠كرون" + +msgid "Cron Jobs Deleted" +msgstr "وظائ٠Cron Ø§Ù„Ù…ØØ°ÙˆÙØ©" + +msgid "Cron Jobs Duplicated" +msgstr "وظائ٠كرون مكررة" + +msgid "Cron Jobs will run in the background" +msgstr "سيتم تشغيل وظائ٠كرون ÙÙŠ الخلÙية" + +msgid "Cron Modified" +msgstr "كرون معدلة" + +msgid "Cron job has been created" +msgstr "تم إنشاء ÙˆØ¸ÙŠÙØ© Cron" + +msgid "Current IPs" +msgstr "برامج العمل الدولية Ø§Ù„ØØ§Ù„ية" + +#, c-format +msgid "Current IPs Assigned to %s" +msgstr "IPs Ø§Ù„ØØ§Ù„ÙŠ المعين %s" + +msgid "Current Protected Directories" +msgstr "الدلائل المØÙ…ية Ø§Ù„ØØ§Ù„ية" + +msgid "Current Usage" +msgstr "الاستخدام Ø§Ù„ØØ§Ù„ÙŠ" + +msgid "Custom" +msgstr "مخصص" + +msgid "Custom Color" +msgstr "لون مخصص" + +msgid "Custom HTTPD Configurations" +msgstr "تكوينات HTTPD مخصصة" + +msgid "Custom Question" +msgstr "سؤال مخصص" + +msgid "Custom Skin Logo uploaded" +msgstr "شعار مخصص للبشرة تم تØÙ…يله" + +msgid "Custom Skin Logos are not enabled" +msgstr "لم يتم تمكين شعارات البشرة المخصصة" + +msgid "Custom logo deleted" +msgstr "تم ØØ°Ù شعار مخصص" + +msgid "Custom threshold must be a valid number. A decimal is allowed." +msgstr "يجب أن يكون Ø§Ù„ØØ¯ الأقصى المخصص رقماً ØµØ§Ù„ØØ§Ù‹. Ù…Ø³Ù…ÙˆØ Ø¨Ø¹Ù„Ø§Ù…Ø© عشرية." + +msgid "Customization Disabled" +msgstr "تم تعطيل التخصيص" + +msgid "Customization written" +msgstr "ØªØØ±ÙŠØ± التخصيص" + +msgid "Customize the skin" +msgstr "تخصيص الجلد" + +msgid "DKIM disabled" +msgstr "DKIM معطل" + +msgid "DKIM enabled" +msgstr "تمكين DKIM" + +msgid "DNS" +msgstr "نظام أسماء النطاقات" + +msgid "DNS Control" +msgstr "تØÙƒÙ… DNS" + +msgid "DNS Management" +msgstr "إدارة DNS" + +msgid "DNSSEC Keys generated" +msgstr "Ù…ÙØ§ØªÙŠØ DNSSEC التي تم إنشاؤها" + +msgid "DNSSEC is not enabled" +msgstr "لم يتم تمكين DNSSEC" + +msgid "DNSSSEC - DNS Security" +msgstr "DNSSSEC - أمان DNS" + +msgid "Database" +msgstr "قاعدة البيانات" + +#, c-format +msgid "Database %s was removed successfully" +msgstr "تمت إزالة %s قاعدة البيانات بنجاØ" + +msgid "Database Created" +msgstr "إنشاء قاعدة بيانات" + +msgid "Database Disk Usage" +msgstr "  استخدام قرص قاعدة البيانات" + +msgid "Database has been successfully Restored" +msgstr "تمت استعادة قاعدة البيانات بنجاØ" + +msgid "Database:" +msgstr "قاعدة البيانات" + +msgid "Databases" +msgstr "قواعد البيانات" + +msgid "Date" +msgstr "التاريخ" + +msgid "Date Added" +msgstr "تاريخ Ø§Ù„Ø¥Ø¶Ø§ÙØ©" + +msgid "Date Blocked" +msgstr "تاريخ Ù…ØØ¸ÙˆØ±" + +msgid "Date Created" +msgstr "تاريخ الإنشاء" + +msgid "Date Suspended" +msgstr "تاريخ تعليق" + +msgid "Day of Month" +msgstr "يوم من الشهر" + +msgid "Day of Week" +msgstr "اليوم من الأسبوع" + +msgid "Days must be a valid number." +msgstr "يجب أن تكون الأيام رقمًا صالØÙ‹Ø§." + +msgid "Debug Guide" +msgstr "دليل التصØÙŠØ" + +msgid "Dec" +msgstr "ديسمبر" + +msgid "Decending" +msgstr "تخÙيض/تنازلي" + +#, c-format +msgid "Decryption of %s has failed" +msgstr "ÙØ´Ù„ ÙÙƒ تشÙير %s" + +msgid "Default" +msgstr "Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ" + +msgid "Delete" +msgstr "ØØ°Ù" + +msgid "Delete Extension" +msgstr "ØØ°Ù ملØÙ‚" + +msgid "Delete Handler" +msgstr "معالج Ø§Ù„ØØ°Ù" + +msgid "Delete MimeType" +msgstr "ØØ°Ù نوع Mيمي نوع" + +msgid "Delete Selected" +msgstr "ØØ°Ù Ø§Ù„Ù…ØØ¯Ø¯" + +msgid "Delete the DNSSEC keys and use a non-signed zone" +msgstr "ØØ°Ù Ù…ÙØ§ØªÙŠØ DNSSEC واستخدام منطقة غير موقعة" + +msgid "Delete the following domains:" +msgstr "ØØ°Ù المجالات التالية:" + +msgid "Delete the following users" +msgstr "ØØ°Ù المستخدمين التاليين" + +msgid "Delete web data" +msgstr "ØØ°Ù بيانات ويب" + +msgid "Deleted" +msgstr "تم Ø§Ù„ØØ°Ù" + +msgid "Deleted User Bandwidth" +msgstr "نطاق عرض النطاق الترددي للمستخدم Ø§Ù„Ù…ØØ°ÙˆÙ" + +#, c-format +msgid "Deleting %s ..." +msgstr "ØØ°Ù %s ..." + +msgid "" +"Deleting files/directories has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"تم تعطيل ØØ°Ù Ø§Ù„Ù…Ù„ÙØ§Øª/الدلائل باستخدام الخيار filemanager_disable_features" + +msgid "Deleting these NS records will leave you with 0." +msgstr "سيؤدي ØØ°Ù سجلات NS هذه إلى ترك 0." + +msgid "Deny" +msgstr "ممنوع" + +msgid "Destination" +msgstr "الوجهة" + +#, c-format +msgid "Destination URL error: %s" +msgstr "خطأ URL الوجهة: %s" + +msgid "Detail" +msgstr "Ø§Ù„ØªÙØ§ØµÙŠÙ„" + +msgid "Details" +msgstr "ØªÙØ§ØµÙŠÙ„" + +msgid "Digest Subscriber" +msgstr "المشترك ÙÙŠ هضم" + +msgid "Digest Subscribers" +msgstr "هضم المشتركين" + +msgid "DirectAdmin will be restarted in 1 minute" +msgstr "سيتم إعادة تشغيل DirectAdmin ÙÙŠ 1 دقيقة" + +msgid "Directory Protection Settings have been saved." +msgstr "تم ØÙظ \"إعدادات ØÙ…اية الدليل\"." + +msgid "Directory created" +msgstr "تم إنشاء الدليل" + +msgid "Disable" +msgstr "تعطيل" + +msgid "Disable Auto-Renew" +msgstr "تعطيل التجديد التلقائي" + +msgid "Disabled" +msgstr "معطل" + +msgid "" +"Disabled Reseller settings will be applied to Users and Packages in the " +"background." +msgstr "سيتم تطبيق إعدادات الموزعين المعطلين على المستخدمين ÙˆØ§Ù„ØØ²Ù… ÙÙŠ الخلÙية." + +msgid "Disk Space" +msgstr "Ù…Ø³Ø§ØØ© القرص" + +msgid "Disk Space (MB)" +msgstr "Ù…Ø³Ø§ØØ© القرص (MB)" + +msgid "Disk Usage" +msgstr "استخدام القرص" + +msgid "Disk Usage Details" +msgstr "ØªÙØ§ØµÙŠÙ„ استخدام القرص" + +msgid "Division must only contain letters, numbers, spaces, and/or periods" +msgstr "يجب أن ÙŠØØªÙˆÙŠ Ø§Ù„Ù‚Ø³Ù… على Ø§Ù„Ø£ØØ±Ù والأرقام ÙˆØ§Ù„Ù…Ø³Ø§ÙØ§Øª Ùˆ/أو Ø§Ù„ÙØªØ±Ø§Øª Ùقط" + +msgid "Dns Provider reset." +msgstr "إعادة تعيين Ù…ÙˆÙØ± Dns." + +msgid "Dns Provider saved." +msgstr "Ù…ÙˆÙØ± Dns الذي تم ØÙظه." + +msgid "Do not use CAPS in the domain name." +msgstr "لا تستخدم CAPS ÙÙŠ اسم المجال." + +msgid "Do not use any spaces between the email names." +msgstr "لا تستخدم أي Ù…Ø³Ø§ÙØ§Øª بين أسماء البريد الإلكتروني." + +#, c-format +msgid "Do not use spaces in the %s value" +msgstr "" + +msgid "Do you want to overwrite any existing files?" +msgstr "هل تريد الكتابة Ùوق أية Ù…Ù„ÙØ§Øª موجودة؟" + +msgid "DocumentRoot" +msgstr "قتر المستند" + +#, c-format +msgid "Does not match setting: %s" +msgstr "لا يتطابق مع الإعداد: %s" + +msgid "Domain" +msgstr "النطاق" + +#, c-format +msgid "Domain %s Created" +msgstr "%s المجال التي تم إنشاؤها" + +#, c-format +msgid "Domain %s may not use a %s override path of %s" +msgstr "لا يجوز %s المجال استخدام مسار تجاوز %s %s" + +#, c-format +msgid "" +"Domain %s was suspended by an Admin and you not have this access. You cannot " +"unsuspend this domain." +msgstr "" +"تم تعليق %s المجال من قبل مسؤول وليس لديك هذا الوصول. لا يمكنك إلغاء تعليق " +"هذا المجال." + +msgid "Domain AWstats" +msgstr "AWstats المجال" + +msgid "Domain AWstats + Webalizer" +msgstr "نطاق AWstats + Webalizer" + +#, fuzzy +#| msgid "Bandwidth" +msgid "Domain Bandwidth" +msgstr "عرض النطاق" + +msgid "Domain Created" +msgstr "إنشاء المجال" + +msgid "Domain Created Successfully" +msgstr "تم إنشاء المجال بنجاØ" + +msgid "Domain Deletion Results" +msgstr "نتائج ØØ°Ù المجال" + +msgid "Domain Pointer" +msgid_plural "Domain Pointers" +msgstr[0] "مؤشر المجال" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "Domain Pointer Added" +msgstr "تمت Ø¥Ø¶Ø§ÙØ© مؤشر المجال" + +msgid "Domain Pointer on" +msgstr "مؤشر المجال على" + +msgid "Domain Pointers" +msgstr "مؤشرات المجال" + +#, fuzzy +#| msgid "Domain AWstats" +msgid "Domain Quota" +msgstr "AWstats المجال" + +msgid "Domain Renaming is not enabled" +msgstr "لم يتم تمكين إعادة تسمية المجال" + +msgid "Domain Setup" +msgstr "إعداد المجال" + +msgid "Domain Webalizer Stats" +msgstr "Ø¥ØØµØ§Ø¦ÙŠØ§Øª Webalizer المجال" + +msgid "Domain and password are required" +msgstr "المجال وكلمة المرور مطلوبة" + +msgid "Domain does not belong to you" +msgstr "المجال لا ينتمي إليك" + +#, c-format +msgid "Domain exists on %s" +msgstr "المجال موجود على %s" + +msgid "Domain has already been deleted. It wasn't in the named.conf file" +msgstr "تم ØØ°Ù المجال Ø¨Ø§Ù„ÙØ¹Ù„. لم يكن ÙÙŠ مل٠named.conf" + +msgid "" +"Domain is already processing an SSL request. Please allow it to finish " +"before making other changes." +msgstr "" +"يعالج المجال Ø¨Ø§Ù„ÙØ¹Ù„ طلب SSL. الرجاء Ø§Ù„Ø³Ù…Ø§Ø Ù„Ù‡Ø§ لإنهاء قبل إجراء تغييرات " +"أخرى." + +msgid "Domain is forbidden" +msgstr "المجال ممنوع" + +msgid "Domain is not in your list" +msgstr "المجال غير موجود ÙÙŠ قائمتك" + +msgid "Domain name has been successfully changed" +msgstr "تم تغيير اسم المجال بنجاØ" + +msgid "Domain php.ini overrides" +msgstr "المجال php.ini تجاوزات" + +#, c-format +msgid "Domain pointer %s for domain %s for user %s already exists" +msgstr "%s مؤشر المجال %s المجال %s المستخدم موجود Ø¨Ø§Ù„ÙØ¹Ù„" + +msgid "Domain(s)" +msgstr "تم ØªØØ¯ÙŠØ« النطاق %s." + +msgid "Domain(s) modified" +msgstr "المجال (المجالات) المعدلة" + +msgid "Domains" +msgstr "النطاقات" + +msgid "Domains directory created successfully" +msgstr "إنشاء دليل المجالات بنجاØ" + +msgid "Domains directory created successfully in user's home" +msgstr "إنشاء دليل المجالات Ø¨Ù†Ø¬Ø§Ø ÙÙŠ منزل المستخدم" + +msgid "Double click for main domain page" +msgstr "انقر نقراً مزدوجاً Ù„Ù„ØØµÙˆÙ„ على ØµÙØØ© المجال الرئيسية" + +#, c-format +msgid "Dovecot file '%s' is missing data. Run './build dovecot_conf'" +msgstr "دوÙكوت مل٠'%s' Ù…Ùقود البيانات. تشغيل './بناء dovecot_conf'" + +msgid "Download" +msgstr "تنزيل" + +msgid "Download Backup" +msgstr "تØÙ…يل النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ" + +#, c-format +msgid "Downloaded: %s" +msgstr "تم تنزيله: %s" + +msgid "Downloading a new webalizer binary" +msgstr "تنزيل ثنائي webalizer جديد" + +msgid "" +"Downloading compress folders has been disabled with the " +"filemanager_disable_features option" +msgstr "تم تعطيل تنزيل مجلدات ضغط مع الخيار filemanager_disable_features" + +msgid "" +"Downloading files has been disabled with the filemanager_disable_features " +"option" +msgstr "تم تعطيل تنزيل Ø§Ù„Ù…Ù„ÙØ§Øª باستخدام الخيار filemanager_disable_features" + +msgid "Driver signals L1 up." +msgstr "" + +msgid "Driver signals dormant." +msgstr "" + +msgid "Duplicate" +msgstr "تكرار" + +msgid "E-Mail" +msgstr "البريد الإلكتروني" + +msgid "E-Mail Accounts" +msgstr "ØØ³Ø§Ø¨Ø§Øª البريد الإلكتروني" + +msgid "E-Mail Accounts Deleted" +msgstr "ØØ³Ø§Ø¨Ø§Øª البريد الإلكتروني Ø§Ù„Ù…ØØ°ÙˆÙØ©" + +msgid "E-Mail Address has been successfully changed" +msgstr "تم تغيير عنوان البريد الإلكتروني بنجاØ" + +msgid "E-Mail Limit has been set" +msgstr "" + +msgid "E-Mail Updated" +msgstr "تم ØªØØ¯ÙŠØ« البريد الإلكتروني" + +msgid "E-Mail Usage" +msgstr "استخدام البريد الإلكتروني" + +msgid "E-Mail account already exists" +msgstr "ØØ³Ø§Ø¨ البريد الإلكتروني موجود Ø¨Ø§Ù„ÙØ¹Ù„" + +msgid "E-Mail has been changed" +msgstr "تم تغيير البريد الإلكتروني" + +#, c-format +msgid "E-Mail has been changed to %s" +msgstr "تم تغيير البريد الإلكتروني إلى %s" + +#, c-format +msgid "E-Mail quota must not exceed %s" +msgstr "يجب ألا تتجاوز Ø§Ù„ØØµØ© النسبية للبريد الإلكتروني %s" + +msgid "EC-256" +msgstr "EC-256" + +msgid "EC-384" +msgstr "EC-384" + +msgid "EC-521" +msgstr "EC-521" + +msgid "Echo sent packets." +msgstr "" + +msgid "Edit" +msgstr "ØªØØ±ÙŠØ±" + +msgid "Edit Admin Welcome Message" +msgstr "ØªØØ±ÙŠØ± رسالة الترØÙŠØ¨ بالمسؤول" + +msgid "Edit Reseller Welcome Message" +msgstr "ØªØØ±ÙŠØ± رسالة الترØÙŠØ¨ بالموزع" + +msgid "Edit Suspension Message" +msgstr "ØªØØ±ÙŠØ± رسالة التعليق" + +msgid "Edit User Welcome Message" +msgstr "ØªØØ±ÙŠØ± رسالة ترØÙŠØ¨ المستخدم" + +msgid "Edit the zone on the master server." +msgstr "ØªØØ±ÙŠØ± المنطقة على الملقم الرئيسي." + +msgid "" +"Either have your account creator change your password to unblock it, or use " +"the Lost Password feature on the login page (if enabled)." +msgstr "" +"إما أن يكون منشئ ØØ³Ø§Ø¨Ùƒ تغيير كلمة المرور الخاصة بك لإلغاء ØØ¸Ø±Ù‡Ø§ØŒ أو استخدام " +"ميزة كلمة المرور المÙقودة على ØµÙØØ© تسجيل الدخول (إذا تم تمكين)." + +msgid "Email" +msgstr "البريد الإلكتروني" + +#, c-format +msgid "Email '%s' does not exist" +msgstr "البريد الإلكتروني '%s' غير موجود" + +msgid "Email Deliveries (Sent)" +msgstr "تسليم البريد الإلكتروني (تم إرساله)" + +msgid "Email Disk Usage" +msgstr "استخدام قرص البريد الإلكتروني" + +msgid "Email Forwarders" +msgstr "معلّّم البريد الإلكتروني" + +msgid "Email Only" +msgstr "البريد الإلكتروني Ùقط" + +msgid "Email Sent" +msgstr "البريد الإلكتروني المرسل" + +msgid "Email created but" +msgstr "تم إنشاء البريد الإلكتروني ولكن" + +msgid "Empty Clipboard" +msgstr "ØØ§Ùظة ÙØ§Ø±ØºØ©" + +msgid "Empty:" +msgstr "إذا ترك هذا الØÙ‚Ù„ ÙØ§Ø±ØºÙ‹Ø§ ØŒ Ùلن يتم ØØ°Ù أي Ù…Ù„ÙØ§Øª." + +msgid "Enable" +msgstr "ØªÙØ¹ÙŠÙ„" + +msgid "Enabled" +msgstr "Ù…ÙØ¹Ù„" + +#, c-format +msgid "Encryption of %s has failed" +msgstr "ÙØ´Ù„ تشÙير %s" + +msgid "End Time" +msgstr "وقت النهاية" + +#, c-format +msgid "" +"End of file reached while trying reading in %lld bytes from %s. filled=%lld" +msgstr "" +"تم الوصول إلى نهاية المل٠أثناء Ù…ØØ§ÙˆÙ„Ø© القراءة %lld بايت من %s. تعبئة = %lld" + +#, c-format +msgid "Ensure %s exists and is chmod to 1777." +msgstr "تأكد من %s موجود وهو chmod إلى 1777." + +msgid "Ensure the 2nd key matches the first" +msgstr "تأكد من أن Ø§Ù„Ù…ÙØªØ§Ø الثاني يطابق Ø§Ù„Ù…ÙØªØ§Ø الأول" + +msgid "Ensure the Reseller's ip.list has some usable IPs." +msgstr "" +"تأكد من أن ip.list الخاص بالموزع ÙŠØØªÙˆÙŠ Ø¹Ù„Ù‰ بعض عناوين IP القابلة للاستخدام." + +msgid "Ensuring stored domains are present" +msgstr "ضمان وجود المجالات المخزنة" + +msgid "Enter your Two-Step Authentication Code" +msgstr "أدخل رمز المصادقة من خطوتين" + +#, c-format +msgid "Error %s widgets from accounts: %s" +msgstr "خطأ %s Ø§Ù„ØØ§Ø¬ÙŠØ§Øª من Ø§Ù„ØØ³Ø§Ø¨Ø§Øª: %s" + +msgid "Error Adding Main Username to database:" +msgstr "خطأ Ø¥Ø¶Ø§ÙØ© اسم المستخدم الرئيسي إلى قاعدة البيانات:" + +msgid "Error Compressing the backup file" +msgstr "خطأ ÙÙŠ ضغط مل٠النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ" + +msgid "Error Creating Cron Job" +msgstr "خطأ ÙÙŠ إنشاء ÙˆØ¸ÙŠÙØ© كرون" + +msgid "Error Creating Domain" +msgstr "خطأ ÙÙŠ إنشاء مجال" + +msgid "Error Creating Key" +msgstr "خطأ ÙÙŠ إنشاء Ù…ÙØªØ§Ø" + +msgid "Error Creating User" +msgstr "خطأ ÙÙŠ إنشاء مستخدم" + +#, c-format +msgid "Error Deleting %s" +msgstr "خطأ ÙÙŠ ØØ°Ù %s" + +msgid "Error Executing Perl" +msgstr "خطأ ÙÙŠ تنÙيذ بيرل" + +msgid "Error Flushing Privileges" +msgstr "أخطاء Ù…Ø³Ø Ø§Ù„Ø§Ù…ØªÙŠØ§Ø²Ø§Øª" + +msgid "Error Flushing Privileges:" +msgstr "خطأ Ù…Ø³Ø Ø§Ù„Ø§Ù…ØªÙŠØ§Ø²Ø§Øª:" + +msgid "Error Log" +msgstr "سجل الاخطاء" + +msgid "Error Reading Message File" +msgstr "خطأ ÙÙŠ قراءة مل٠الرسالة" + +msgid "Error Reading db file" +msgstr "خطأ ÙÙŠ قراءة مل٠db" + +#, c-format +msgid "Error Removing User %s" +msgstr "خطأ ÙÙŠ إزالة %s المستخدم" + +msgid "Error Resetting Key Uses" +msgstr "خطأ إعادة تعيين استخدامات Ø§Ù„Ù…ÙØ§ØªÙŠØ" + +msgid "Error Resetting Zone" +msgstr "خطأ إعادة تعيين المنطقة" + +msgid "Error Restoring database" +msgstr "خطأ ÙÙŠ استعادة قاعدة البيانات" + +#, c-format +msgid "Error Saving Password: %s" +msgstr "خطأ ÙÙŠ ØÙظ كلمة المرور: %s" + +msgid "Error Unblocking paths" +msgstr "خطأ ÙÙŠ إلغاء ØØ¸Ø± المسارات" + +msgid "Error Updating User" +msgstr "خطأ ÙÙŠ ØªØØ¯ÙŠØ« المستخدم" + +#, c-format +msgid "Error Writing %s" +msgstr "خطأ ÙÙŠ كتابة %s" + +#, c-format +msgid "Error activating %s's user %s: %s" +msgstr "خطأ ÙÙŠ تنشيط %s المستخدم %s: %s" + +#, c-format +msgid "Error activating cronjobs: %s" +msgstr "خطأ ÙÙŠ تنشيط cronjobs: %s" + +#, c-format +msgid "Error activating data for %s: %s" +msgstr "خطأ ÙÙŠ تنشيط البيانات %s: %s" + +#, c-format +msgid "Error adding DS records for %s to remote parent zone: %s" +msgstr "خطأ ÙÙŠ Ø¥Ø¶Ø§ÙØ© سجلات DS %s إلى المنطقة الأصل البعيدة: %s" + +msgid "Error authorizing SSH Key" +msgstr "خطأ ÙÙŠ Ø§Ù„ØªØµØ±ÙŠØ Ø¨Ù…ÙØªØ§Ø SSH" + +msgid "Error changing password" +msgstr "خطأ ÙÙŠ تغيير كلمة المرور" + +msgid "Error changing password. Contact your webhost." +msgstr "خطأ ÙÙŠ تغيير كلمة المرور. اتصل بمضي٠الويب الخاص بك." + +msgid "Error clearing LetsEncrypt files" +msgstr "خطأ ÙÙŠ Ù…Ø³Ø Ù…Ù„ÙØ§Øª LetsEncrypt" + +msgid "Error converting file: " +msgstr "خطأ ÙÙŠ تØÙˆÙŠÙ„ الملÙ: " + +#, c-format +msgid "Error copying %s to %s : %s" +msgstr "خطأ ÙÙŠ النسخ %s إلى %s: %s" + +#, c-format +msgid "Error copying %s to %s: %s" +msgstr "%s نسخ الخطأ إلى %s: %s" + +#, c-format +msgid "Error copying logo file: %s" +msgstr "خطأ ÙÙŠ نسخ مل٠الشعار: %s" + +#, c-format +msgid "Error creating %s" +msgstr "خطأ ÙÙŠ إنشاء %s" + +#, c-format +msgid "Error creating %s: %s" +msgstr "خطأ ÙÙŠ إنشاء %s: %s" + +msgid "Error creating Autoresponder" +msgstr "خطأ ÙÙŠ إنشاء \"مرسل تلقائي\"" + +#, c-format +msgid "Error creating NginxUnit application '%s': %s" +msgstr "خطأ ÙÙŠ إنشاء تطبيق NginxUnit '%s': %s" + +#, c-format +msgid "Error creating NginxUnit route '%s': %s" +msgstr "خطأ ÙÙŠ إنشاء مسار NginxUnit '%s': %s" + +msgid "Error creating SSH Key" +msgstr "خطأ ÙÙŠ إنشاء Ù…ÙØªØ§Ø SSH" + +msgid "Error creating User" +msgstr "خطأ ÙÙŠ إنشاء مستخدم" + +msgid "Error creating Vacation Message" +msgstr "خطأ ÙÙŠ إنشاء رسالة الإجازة" + +msgid "Error creating account" +msgstr "خطأ ÙÙŠ إنشاء ØØ³Ø§Ø¨" + +#, c-format +msgid "" +"Error creating default directories in %s. See error.log for more " +"information." +msgstr "" +"خطأ ÙÙŠ إنشاء الدلائل Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ© ÙÙŠ %s. راجع الخطأ.log لمزيد من المعلومات." + +msgid "Error creating forwarder" +msgstr "خطأ ÙÙŠ إنشاء مع توجيه" + +msgid "Error creating the database" +msgstr "خطأ ÙÙŠ إنشاء قاعدة البيانات" + +msgid "Error decoding the base 64 data" +msgstr "خطأ ÙÙŠ ÙÙƒ تشÙير البيانات الأساسية 64" + +#, c-format +msgid "Error deleting %s: %s" +msgstr "خطأ ÙÙŠ ØØ°Ù %s: %s" + +msgid "Error deleting SSH Key" +msgstr "خطأ ÙÙŠ ØØ°Ù Ù…ÙØªØ§Ø SSH" + +msgid "Error deleting Security Questions" +msgstr "خطأ ÙÙŠ ØØ°Ù أسئلة الأمان" + +msgid "Error deleting account(s)" +msgstr "" + +msgid "Error deleting autoresponder(s)" +msgstr "" + +msgid "Error deleting filter(s)" +msgstr "" + +msgid "Error deleting key(s)" +msgstr "خطأ ÙÙŠ ØØ°Ù Ø§Ù„Ù…ÙØªØ§Ø (Ø§Ù„Ù…ÙØ§ØªÙŠØ)" + +msgid "Error deleting records" +msgstr "خطأ ÙÙŠ ØØ°Ù السجلات" + +msgid "Error determining username from " +msgstr "خطأ ÙÙŠ ØªØØ¯ÙŠØ¯ اسم المستخدم من " + +#, c-format +msgid "Error during automated certificate renewal for %s" +msgstr "خطأ أثناء التجديد التلقائي للشهادة %s" + +#, c-format +msgid "Error during deletion of child user %s" +msgstr "خطأ أثناء ØØ°Ù %s المستخدم التابع" + +msgid "Error during extraction" +msgstr "خطأ أثناء الاستخراج" + +msgid "Error executing your request" +msgstr "خطأ ÙÙŠ تنÙيذ طلبك" + +msgid "Error generating scratch codes" +msgstr "خطأ ÙÙŠ إنشاء رموز الخدش" + +msgid "Error generating zone keys" +msgstr "خطأ ÙÙŠ إنشاء Ù…ÙØ§ØªÙŠØ المنطقة" + +msgid "Error importing base 64 encoded packages" +msgstr "خطأ ÙÙŠ استيراد Ø§Ù„ØØ²Ù… Ø§Ù„Ù…Ø´ÙØ±Ø© الأساسية 64" + +msgid "Error in post. Requires domain, type and value." +msgstr "خطأ ÙÙŠ مرØÙ„Ø© ما بعد. يتطلب المجال والنوع والقيمة." + +msgid "Error modifying SSH key" +msgstr "خطأ ÙÙŠ تعديل Ù…ÙØªØ§Ø SSH" + +msgid "Error parsing 'routes'." +msgstr "خطأ ÙÙŠ تØÙ„يل 'المسارات'." + +msgid "Error parsing json output" +msgstr "خطأ ÙÙŠ تØÙ„يل إخراج json" + +msgid "Error purging archives" +msgstr "خطأ تطهير المØÙوظات" + +#, c-format +msgid "Error reading %s: %s" +msgstr "خطأ ÙÙŠ قراءة %s: %s" + +msgid "Error reading admin list file." +msgstr "خطأ ÙÙŠ قراءة مل٠قائمة المسؤولين." + +msgid "Error reading domain config file" +msgstr "خطأ ÙÙŠ قراءة مل٠تكوين المجال" + +msgid "Error reading domain config files" +msgstr "خطأ ÙÙŠ قراءة Ù…Ù„ÙØ§Øª تكوين المجال" + +msgid "Error reading domainowners" +msgstr "خطأ ÙÙŠ قراءة مالكي المجالات" + +msgid "Error reading domainowners file" +msgstr "خطأ ÙÙŠ قراءة مل٠مالكي المجالات" + +msgid "Error reading named db file" +msgstr "خطأ ÙÙŠ قراءة مل٠db المسمى" + +#, c-format +msgid "Error reading new license: %s" +msgstr "خطأ ÙÙŠ قراءة الترخيص الجديد: %s" + +msgid "Error reading the db file after writing to it, before DNSSEC signing" +msgstr "خطأ ÙÙŠ قراءة مل٠db بعد الكتابة إليه، قبل توقيع DNSSEC" + +msgid "Error reading the license file for restore." +msgstr "خطأ ÙÙŠ قراءة مل٠الترخيص للاستعادة." + +#, c-format +msgid "Error reading user files for %s, continuing anyway." +msgstr "خطأ ÙÙŠ قراءة Ù…Ù„ÙØ§Øª المستخدم %sØŒ المتابعة على أي ØØ§Ù„." + +msgid "Error reading user_ip.list file" +msgstr "خطأ ÙÙŠ قراءة مل٠user_ip.list" + +#, c-format +msgid "Error removing %s: %s" +msgstr "خطأ ÙÙŠ إزالة %s: %s" + +#, c-format +msgid "Error removing IP(s) from %s" +msgstr "خطأ ÙÙŠ إزالة IP (Ù‚) من %s" + +msgid "Error removing file: " +msgstr "خطأ ÙÙŠ إزالة الملÙ: " + +#, c-format +msgid "Error removing path %s: %s" +msgstr "خطأ ÙÙŠ إزالة %s المسار: %s" + +msgid "Error removing subdomain(s)" +msgstr "خطأ ÙÙŠ إزالة المجال Ø§Ù„ÙØ±Ø¹ÙŠ (النطاقات)" + +#, c-format +msgid "Error removing user %s" +msgstr "خطأ ÙÙŠ إزالة %s المستخدم" + +#, c-format +msgid "Error renaming %s to %s: %s" +msgstr "خطأ ÙÙŠ إعادة تسمية %s إلى %s: %s" + +#, c-format +msgid "Error restoring %s: %s" +msgstr "خطأ ÙÙŠ استعادة %s: %s" + +#, c-format +msgid "Error restoring php settings for '%s': %s" +msgstr "خطأ ÙÙŠ استعادة إعدادات php Ù„'%s': %s" + +#, c-format +msgid "Error rewriting %s" +msgstr "خطأ ÙÙŠ إعادة كتابة %s" + +#, c-format +msgid "Error running %s auto: %s" +msgstr "خطأ ÙÙŠ تشغيل %s تلقائي: %s" + +#, c-format +msgid "Error running %s: %s" +msgstr "خطأ ÙÙŠ تشغيل %s: %s" + +msgid "Error running rndc addzone." +msgstr "خطأ ÙÙŠ تشغيل rndc addzone." + +msgid "Error running rndc delzone." +msgstr "خطأ ÙÙŠ تشغيل rndc delzone." + +msgid "Error saving Cron E-Mail" +msgstr "خطأ ÙÙŠ ØÙظ البريد الإلكتروني كرون" + +msgid "Error saving Nameservers" +msgstr "خطأ ÙÙŠ ØÙظ خوادم الأسماء" + +#, c-format +msgid "Error selecting database %s: %s" +msgstr "خطأ ÙÙŠ ØªØØ¯ÙŠØ¯ %s قاعدة البيانات: %s" + +#, c-format +msgid "Error sending signal to %d: %s" +msgstr "خطأ ÙÙŠ إرسال إشارة إلى %d: %s" + +msgid "Error setting MX Template" +msgstr "خطأ ÙÙŠ إعداد قالب MX" + +msgid "Error setting MX template for pointer" +msgstr "خطأ ÙÙŠ تعيين قالب MX للمؤشر" + +msgid "Error setting PHP versions" +msgstr "خطأ ÙÙŠ إعداد إصدارات PHP" + +msgid "Error setting Security Question" +msgstr "خطأ ÙÙŠ تعيين سؤال الأمان" + +#, c-format +msgid "Error setting cgroup limits for %s: %s" +msgstr "" + +msgid "Error setting clipboard files" +msgstr "خطأ ÙÙŠ إعداد Ù…Ù„ÙØ§Øª Ø§Ù„ØØ§Ùظة" + +msgid "Error setting global key" +msgstr "خطأ ÙÙŠ إعداد Ø§Ù„Ù…ÙØªØ§Ø العمومي" + +#, c-format +msgid "Error setting permission on %s: %s" +msgstr "خطأ ÙÙŠ إعداد الإذن على %s: %s" + +msgid "Error setting the filter" +msgstr "خطأ ÙÙŠ إعداد عامل التصÙية" + +msgid "Error setting the spam filter" +msgstr "خطأ ÙÙŠ إعداد عامل تصÙية البريد الإلكتروني العشوائي" + +msgid "Error setting timezone" +msgstr "خطأ ÙÙŠ إعداد المنطقة الزمنية" + +msgid "Error showing Email Acounts" +msgstr "خطأ ÙÙŠ إظهار رسائل البريد الإلكتروني" + +msgid "Error showing message ID info" +msgstr "ØØ¯Ø« خطأ ÙÙŠ عرض معلومات معر٠الرسالة" + +msgid "Error showing smtp log info" +msgstr "خطأ ÙÙŠ عرض معلومات سجل smtp" + +msgid "Error signing zone" +msgstr "منطقة توقيع الخطأ" + +#, c-format +msgid "Error suspending %s's user %s: %s" +msgstr "خطأ ÙÙŠ تعليق %s المستخدم %s: %s" + +#, c-format +msgid "Error suspending cronjobs: %s" +msgstr "خطأ ÙÙŠ تعليق cronjobs: %s" + +msgid "Error updating Autoresponder" +msgstr "خطأ ÙÙŠ ØªØØ¯ÙŠØ« \"جهاز الرد التلقائي\"" + +msgid "Error updating Catch-All value" +msgstr "خطأ ÙÙŠ ØªØØ¯ÙŠØ« قيمة Catch-All" + +msgid "Error updating Vacation Message" +msgstr "خطأ ÙÙŠ ØªØØ¯ÙŠØ« رسالة الإجازة" + +msgid "Error updating forwarder" +msgstr "خطأ ÙÙŠ ØªØØ¯ÙŠØ« مع توجيه" + +#, c-format +msgid "Error while backing up database %s" +msgstr "خطأ أثناء النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ù‚Ø§Ø¹Ø¯Ø© البيانات %s" + +msgid "Error while compressing file" +msgstr "خطأ أثناء ضغط الملÙ" + +msgid "Error while creating User" +msgstr "خطأ أثناء إنشاء المستخدم" + +msgid "Error while creating the backup" +msgstr "خطأ أثناء إنشاء النسخة Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ©" + +msgid "Error while deleting Users" +msgstr "خطأ أثناء ØØ°Ù المستخدمين" + +msgid "Error while saving changes" +msgstr "خطأ أثناء ØÙظ التغييرات" + +msgid "Error while saving password" +msgstr "خطأ أثناء ØÙظ كلمة المرور" + +msgid "Error while sending email" +msgstr "خطأ أثناء إرسال البريد الإلكتروني" + +#, c-format +msgid "Error while writing %s" +msgstr "خطأ أثناء كتابة %s" + +#, c-format +msgid "Error with Command::master_login:search:gettimeofday: %s" +msgstr "خطأ ÙÙŠ الأمر:: master_login:Ø§Ù„Ø¨ØØ«:gettimeofday: %s" + +msgid "Error with LetsEncrypt request" +msgstr "خطأ مع طلب LetsEncrypt" + +msgid "Error with Security Questions" +msgstr "خطأ مع أسئلة الأمان" + +msgid "Error with Two-Step Authentication" +msgstr "خطأ ÙÙŠ المصادقة بخطوتين" + +msgid "Error with command:" +msgstr "خطأ مع الأمر:" + +msgid "Error with curl request" +msgstr "خطأ مع طلب ØÙ„يقة" + +msgid "Error with exigrep" +msgstr "خطأ مع exigrep" + +msgid "Error with fchownat" +msgstr "خطأ مع fchownat" + +#, c-format +msgid "Error with request: '%s' More info in debug output." +msgstr "خطأ مع الطلب: '%s' مزيد من المعلومات ÙÙŠ إخراج التصØÙŠØ." + +msgid "Error with system Quotas" +msgstr "خطأ ÙÙŠ Ø§Ù„ØØµØµ النسبية للنظام" + +#, c-format +msgid "" +"Error with the backup plan (rename failed): the copy of %s to %s has also " +"failed: %s" +msgstr "" +"خطأ ÙÙŠ خطة النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ (ÙØ´Ù„ت إعادة تسمية): نسخة %s %s ÙØ´Ù„ت أيضا: %s" + +#, c-format +msgid "Error writing %s" +msgstr "خطأ ÙÙŠ كتابة %s" + +#, c-format +msgid "Error writing %s: %s" +msgstr "%s خطأ ÙÙŠ الكتابة: %s" + +msgid "Error writing domain config file" +msgstr "خطأ ÙÙŠ كتابة مل٠تكوين المجال" + +msgid "Error writing password request file." +msgstr "خطأ ÙÙŠ كتابة مل٠طلب كلمة المرور." + +msgid "Error writing pop cache" +msgstr "خطأ ÙÙŠ كتابة ذاكرة التخزين المؤقت للبوب" + +#, c-format +msgid "Error writing settings file for %s" +msgstr "خطأ ÙÙŠ كتابة مل٠إعدادات %s" + +msgid "Error writing the directadmin.conf" +msgstr "خطأ ÙÙŠ كتابة directadmin.conf" + +#, c-format +msgid "Error writing to %s: %s" +msgstr "خطأ ÙÙŠ الكتابة إلى %s: %s" + +msgid "Errors" +msgstr "أخطاء" + +msgid "Evening" +msgstr "مساء" + +msgid "Expecting 0 or 1" +msgstr "توقع 0 أو 1" + +msgid "Expecting any integer" +msgstr "توقع أي عدد صØÙŠØ" + +msgid "Expecting any long long integer" +msgstr "توقع أي عدد صØÙŠØ طويل طويل" + +msgid "Expired" +msgstr "منتهية الصلاØÙŠØ©" + +msgid "Expires" +msgstr "ينتهي" + +msgid "Expiry" +msgstr "انقضاء" + +msgid "Export Selected" +msgstr "تصدير Ù…ØØ¯Ø¯" + +msgid "Extension" +msgstr "التمديد" + +msgid "Extensions" +msgstr "ملØÙ‚ات" + +msgid "Extract" +msgstr "استخراج" + +msgid "Extract selected to directory" +msgstr "استخراج Ù…ØØ¯Ø¯ إلى الدليل" + +msgid "Extracting User Data" +msgstr "استخراج بيانات المستخدم" + +msgid "" +"Extracting files has been disabled with the filemanager_disable_features " +"option" +msgstr "تم تعطيل استخراج Ø§Ù„Ù…Ù„ÙØ§Øª باستخدام الخيار filemanager_disable_features" + +msgid "Extracting non-readable files" +msgstr "استخراج Ø§Ù„Ù…Ù„ÙØ§Øª غير القابلة للقراءة" + +msgid "Extracting ~/domains directory" +msgstr "استخراج الدليل ~/domains" + +msgid "Extracting ~/imap directory" +msgstr "استخراج الدليل ~/imap" + +msgid "FTP" +msgstr "بروتوكول نقل Ø§Ù„Ù…Ù„ÙØ§Øª" + +msgid "FTP account already exists" +msgstr "ØØ³Ø§Ø¨ FTP موجود Ø¨Ø§Ù„ÙØ¹Ù„" + +msgid "FTP information invalid." +msgstr "معلومات FTP غير ØµØ§Ù„ØØ©." + +msgid "FTP: default creation error" +msgstr "FTP: خطأ إنشاء Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ" + +msgid "Failed Referer Check" +msgstr "التØÙ‚Ù‚ من المرجعي Ø§Ù„ÙØ§Ø´Ù„Ø©" + +msgid "Failed to verify" +msgstr "ÙØ´Ù„ التØÙ‚Ù‚" + +msgid "Feature Disabled" +msgstr "تم تعطيل الميزة" + +msgid "Feb" +msgstr "ÙØ¨Ø±Ø§ÙŠØ±" + +msgid "File" +msgstr "ملÙ" + +#, c-format +msgid "File %s already exists, file skipped." +msgstr "%s المل٠موجود Ø¨Ø§Ù„ÙØ¹Ù„ØŒ تم تخطي الملÙ." + +msgid "File Extracted" +msgstr "تم استخراج الملÙ" + +msgid "File Manager" +msgstr "مدير Ø§Ù„Ù…Ù„ÙØ§Øª" + +#, c-format +msgid "File being read as '%s'" +msgstr "مل٠يتم قراءته كـ \"%s\"" + +msgid "File copied successfully" +msgstr "مل٠تم نسخه بنجاØ" + +msgid "File does not exist" +msgstr "لم يتم العثور على الملÙ" + +msgid "File does not exist or you don't have access to file" +msgstr "المل٠غير موجود أو لا يمكنك الوصول إلى الملÙ" + +msgid "File ownership reset" +msgstr "إعادة تعيين ملكية الملÙ" + +msgid "File restored successfully" +msgstr "تم استعادة المل٠بنجاØ" + +msgid "Filename" +msgstr "اسم الملÙ" + +msgid "Files added to clipboard" +msgstr "Ø§Ù„Ù…Ù„ÙØ§Øª التي تمت Ø¥Ø¶Ø§ÙØªÙ‡Ø§ إلى Ø§Ù„ØØ§Ùظة" + +msgid "Filesystem" +msgstr "Ø§Ù„Ù…Ù„ÙØ§Øª" + +msgid "Filter" +msgstr "تصÙية" + +msgid "Fingerprint" +msgstr "بصمة" + +msgid "First" +msgstr "الأول" + +msgid "First PHP" +msgstr "أول PHP" + +msgid "First Page" +msgstr "Ø§Ù„ØµÙØØ© الأولى" + +#, c-format +msgid "Flag value for '%s' is blank" +msgstr "قيمة العلامة لـ '%s' ÙØ§Ø±ØºØ©" + +msgid "Flush from DNS" +msgstr "تدÙÙ‚ من DNS" + +msgid "Follow the link above to find a directory and protect it" +msgstr "اتبع الرابط أعلاه للعثور على دليل ÙˆØÙ…ايته" + +msgid "For backwards compatibility" +msgstr "لتواÙÙ‚ مع الإصدارات السابقة" + +msgid "" +"For cases where the large number of domains to process may cause a timeout" +msgstr "بالنسبة Ù„Ù„ØØ§Ù„ات التي قد يؤدي Ùيها عدد كبير من المجالات إلى معالجة مهلة" + +#, c-format +msgid "For debugging purposes, this file came from: %s" +msgstr "لأغراض التصØÙŠØØŒ جاء هذا المل٠من: %s" + +msgid "Forgot your Password?" +msgstr "نسيت كلمة المرور الخاصة بك؟" + +msgid "Forwarder" +msgstr "معيد التوجيه" + +#, c-format +msgid "Forwarder %s cannot point to itself" +msgstr "لا يمكن %s مع توجيه التوجيه الإشارة إلى Ù†ÙØ³Ù‡" + +#, c-format +msgid "Forwarder %s@%s deleted as it had zero recipients remaining." +msgstr "%s@%s ØØ°Ù مع توجيه التوجيه ØÙŠØ« أنه لم يتبق بقية المستلمين." + +#, c-format +msgid "Forwarder '%s' already exists." +msgstr "مع توجيه \"%s\" موجود Ø¨Ø§Ù„ÙØ¹Ù„." + +msgid "Forwarder already exists" +msgstr "مع توجيه التوجيه موجودة Ø¨Ø§Ù„ÙØ¹Ù„" + +#, c-format +msgid "" +"Forwarder contains a local_part_suffix character: '%s' meaning everything " +"after it will be ignored and the forwarder will never match." +msgstr "" +"مع توجيه ÙŠØØªÙˆÙŠ Ø¹Ù„Ù‰ ØØ±Ù local_part_suffix: '%s' يعني كل شيء بعد أن يتم " +"تجاهلها ولن يتطابق مع معّلّد ابدأ." + +msgid "Forwarder created" +msgstr "تم إنشاء مع توجيه" + +#, c-format +msgid "Forwarder loop found: %s" +msgstr "العثور على ØÙ„قة مع توجيه: %s" + +msgid "Forwarder updated" +msgstr "ØªØØ¯ÙŠØ« مع توجيه" + +msgid "Forwarders" +msgstr "وكلاء" + +msgid "Free - randomly selected" +msgstr "مجاني - تم اختياره عشوائيًا" + +msgid "Free Memory" +msgstr "ذاكرة ØØ±Ø©" + +msgid "Free Selected" +msgstr "اختيار مجاني" + +msgid "Free Swap Memory" +msgstr "ذاكرة التبادل Ø§Ù„ØØ±Ø©" + +msgid "From" +msgstr "من" + +msgid "Frontpage Not Installed" +msgstr "Ø§Ù„ØµÙØØ© الأمامية غير مثبتة" + +msgid "Frontpage changes successful." +msgstr "تم إجراء تغييرات ÙÙŠ Frontpage بنجاØ." + +msgid "Frontpage is not active on this server" +msgstr "Ø§Ù„ØµÙØØ© الأمامية غير نشطة على هذا الملقم" + +msgid "Ftp" +msgstr "بروتوكول نقل Ø§Ù„Ù…Ù„ÙØ§Øª" + +msgid "Ftp Accounts" +msgstr "ØØ³Ø§Ø¨Ø§Øª Ftp" + +msgid "Ftp IPs successfully swapped" +msgstr "تم تبديل بروتوكول نقل Ø§Ù„Ù…Ù„ÙØ§Øª (FTP) بنجاØ" + +msgid "Ftp Management" +msgstr "إدارة Ftp" + +msgid "Ftp account changed" +msgstr "تم تغيير ØØ³Ø§Ø¨ Ftp" + +msgid "Ftp settings saved" +msgstr "إعدادات Ftp المØÙوظة" + +msgid "Full Date" +msgstr "كامل التاريخ" + +msgid "Full Name has been successfully changed" +msgstr "تم تغيير الاسم الكامل بنجاØ" + +#, c-format +msgid "Full format name '%s' does not end with zone name" +msgstr "لا ينتهي اسم التنسيق الكامل '%s' باسم المنطقة" + +msgid "GB" +msgstr "جيجابايت" + +msgid "GID" +msgstr "Gid" + +msgid "Generate Keys" +msgstr "إنشاء Ù…ÙØ§ØªÙŠØ" + +msgid "Get the code from your phone's app, or use a backup scratch code." +msgstr "Ø§ØØµÙ„ على الرمز من تطبيق هاتÙك، أو استخدم رمزًا Ø§ØØªÙŠØ§Ø·ÙŠÙ‹Ø§ للخدش." + +msgid "Global" +msgstr "شامل" + +msgid "Global - randomly selected" +msgstr "عالمي - تم اختياره عشوائياً" + +msgid "Global Key" +msgstr "Ø§Ù„Ù…ÙØªØ§Ø العالمي" + +msgid "Global Key set" +msgstr "مجموعة Ø§Ù„Ù…ÙØ§ØªÙŠØ العمومية" + +msgid "Global ssh keys not available to Users" +msgstr "Ù…ÙØ§ØªÙŠØ ssh العمومية غير Ù…ØªÙˆÙØ±Ø© للمستخدمين" + +#, c-format +msgid "Go to %s" +msgstr "ذهاب إلى %s" + +#, c-format +msgid "Group %s already exists. Please chose a different username." +msgstr "%s المجموعة موجودة Ø¨Ø§Ù„ÙØ¹Ù„. الرجاء اختيار اسم مستخدم مختلÙ." + +msgid "Handler" +msgstr "معالج" + +msgid "" +"Hello,\n" +"\n" +"This message is to notify you that your account '|USERNAME|' has been " +"suspended.\n" +"Reason: |REASON|\n" +"\n" +"If you feel this has been done in error, please contact your hosting " +"provider for more information\n" +"\n" +"|MSG_FOOTER|\n" +msgstr "" +"Ù…Ø±ØØ¨Ù‹Ø§\n" +"\n" +"هذه الرسالة هي لإعلامك بأن ØØ³Ø§Ø¨Ùƒ '| تم تعليق اسم المستخدم|'\n" +"السبب: | السبب|\n" +"\n" +"إذا كنت تشعر أن هذا قد تم عن خطأ، يرجى الاتصال بمزود Ø§Ù„Ø§Ø³ØªØ¶Ø§ÙØ© Ù„Ù„ØØµÙˆÙ„ على " +"مزيد من المعلومات\n" +"\n" +"| MSG_FOOTER|\n" + +msgid "Hello, this is my autoresponder" +msgstr "Ù…Ø±ØØ¨Ø§ØŒ هذا هو بلدي الرد الآلي" + +msgid "Here are the results" +msgstr "وهنا النتائج" + +msgid "Here are the results:" +msgstr "وها هي النتائج:" + +#. /# %c here denotes newline character +#, c-format +msgid "" +"Hi,%c I am currently on vacation. I will view your message when I get back." +msgstr "Ù…Ø±ØØ¨Ø§ØŒ %c أنا ØØ§Ù„يا ÙÙŠ إجازة. سأنظر إلى رسالتك عندما أعود." + +msgid "High" +msgstr "Ù…Ø±ØªÙØ¹" + +msgid "Highest" +msgstr "أعلى" + +msgid "Hit end-of-file while searching for @ or domain header line in" +msgstr "ضرب نهاية المل٠أثناء Ø§Ù„Ø¨ØØ« عن @ أو سطر رأس المجال ÙÙŠ" + +msgid "Home Directory" +msgstr "الدليل الرئيسي" + +#, c-format +msgid "Home path '%s' is not in the allowed home_override_list" +msgstr "مسار \"%s\" غير موجود ÙÙŠ home_override_list Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡" + +msgid "Host:" +msgstr "المضيÙ:" + +#, fuzzy +#| msgid "Host:" +msgid "Hosts" +msgstr "المضيÙ:" + +msgid "Hotlink Protection" +msgstr "ØÙ…اية الارتباط الساخن" + +msgid "Hour" +msgstr "ساعة" + +msgid "How to process the request" +msgstr "كيÙية معالجة الطلب" + +#, c-format +msgid "" +"However, after %s attempts, they were not able to provide a valid Two-Step " +"Authentication code, so no access was granted." +msgstr "" +"ومع ذلك، بعد %s Ù…ØØ§ÙˆÙ„ات، لم تكن قادرة على توÙير رمز مصادقة خطوتين ØµØ§Ù„ØØŒ لذلك " +"لم يتم Ù…Ù†Ø Ø§Ù„ÙˆØµÙˆÙ„." + +#, c-format +msgid "" +"However, after %s attempts, they were not able to provide a valid answer for " +"the security questions, so no access was granted." +msgstr "" +"ومع ذلك، بعد %s Ù…ØØ§ÙˆÙ„ات، لم يتمكنوا من تقديم إجابة صØÙŠØØ© عن الأسئلة الأمنية، " +"لذلك لم يتم Ù…Ù†Ø Ø§Ù„ÙˆØµÙˆÙ„." + +msgid "However, subdomains have been found instead. Proceeding with them." +msgstr "ومع ذلك، تم العثور على نطاقات ÙØ±Ø¹ÙŠØ© بدلاً من ذلك. المضي قدما معهم." + +msgid "ID" +msgstr "معرÙ" + +msgid "ID does not belong to you" +msgstr "لا ينتمي لك المعرÙ" + +msgid "ID: 1234 or \"1234-1239\"" +msgstr "رقم التعريÙ: 1234 أو \"1234-1239\"" + +msgid "IO Read Bandwidth Max" +msgstr "" + +msgid "IO Write Bandwidth Max" +msgstr "" + +msgid "IOPS Read Max" +msgstr "" + +msgid "IOPS Write Max" +msgstr "" + +msgid "IP" +msgstr "IP" + +msgid "IP Added" +msgstr "IP Ø§Ù„Ù…Ø¶Ø§ÙØ©" + +msgid "IP Info" +msgstr "معلومات IP" + +msgid "IP Link Added" +msgstr "تمت Ø¥Ø¶Ø§ÙØ© رابط IP" + +msgid "IP Link(s) Removed" +msgstr "الملكية الÙكرية الارتباط (Ù‚) إزالتها" + +msgid "IP List is empty" +msgstr "قائمة IP ÙØ§Ø±ØºØ©" + +msgid "IP Netmask Set" +msgstr "مجموعة قناعات IP" + +msgid "IP Type" +msgstr "نوع IP" + +#, c-format +msgid "IP in domain config file (%s) is not valid." +msgstr "IP ÙÙŠ مل٠تكوين المجال (%s) غير صالØ." + +msgid "IP must be shared or free" +msgstr "يجب أن يكون IP مشتركًا أو مجانيًا" + +msgid "IP will be linked in the background" +msgstr "سيتم ربط IP ÙÙŠ الخلÙية" + +msgid "IP(s)" +msgstr "" +"يجب عليك تضمين IP الخاص بك %s على الأقل لتتمكن من تعطيل وضع الصيانة لاØÙ‚ًا " +"عبر Ø§Ù„Ù…ØªØµÙØ الخاص بك." + +msgid "IP(s) removed" +msgstr "IP (الملكية الÙكرية) إزالتها" + +msgid "IP/User" +msgstr "IP/ المستخدم" + +msgid "IPs" +msgstr "IPs" + +msgid "" +"If the username entered is correct, you will receive a confirmation email " +"shortly." +msgstr "" +"إذا كان اسم المستخدم الذي تم إدخاله صØÙŠØØ§Ù‹ØŒ سو٠تتلقى رسالة تأكيد بالبريد " +"الإلكتروني قريباً." + +#, c-format +msgid "If this continues, consider putting %s in the ip_blacklist file." +msgstr "إذا استمر هذا، خذ بعين الاعتبار وضع %s ÙÙŠ مل٠ip_blacklist." + +msgid "If this is not your IP, change your password." +msgstr "إذا لم يكن هذا IP الخاص بك، قم بتغيير كلمة المرور الخاصة بك." + +msgid "" +"If you aren't expecting a new license the same license file will be " +"generated." +msgstr "إذا لم تكن تتوقع ترخيصًا جديدًا، سيتم إنشاء Ù†ÙØ³ مل٠الترخيص." + +msgid "" +"If you do not wish to overwrite the current certificate, please disable the " +"auto-renewal" +msgstr "" +"إذا كنت لا ترغب ÙÙŠ الكتابة Ùوق الشهادة Ø§Ù„ØØ§Ù„ية، يرجى تعطيل التجديد التلقائي" + +msgid "" +"If you proceed, these User accounts, along with ALL the associated website " +"and email contents, which are not listed here, will also be removed." +msgstr "" +"إذا كنت المضي قدما، هذه Ø§Ù„ØØ³Ø§Ø¨Ø§Øª المستخدم، جنبا إلى جنب مع جميع Ù…ØØªÙˆÙŠØ§Øª " +"الموقع والبريد الإلكتروني المرتبطة بها، والتي لم يتم سردها هنا، وسو٠تتم " +"أيضا إزالة." + +msgid "" +"If you set it to 0, no basic httpd request will work. You wont even be able " +"to login." +msgstr "" +"إذا قمت بتعيينه إلى 0ØŒ لن يعمل أي طلب httpd أساسي. لن تكون قادراً على الدخول." + +msgid "Image filenames only have 1 dot" +msgstr "أسماء Ù…Ù„ÙØ§Øª الصورة لديها نقطة ÙˆØ§ØØ¯Ø© Ùقط" + +msgid "Imap" +msgstr "Imap" + +msgid "Imap Folders" +msgstr "مجلدات Imap" + +msgid "In what city did you meet your spouse/significant other?" +msgstr "ÙÙŠ أي مدينة لم يجتمع زوجتك / أخرى هامة؟" + +msgid "In what city does your nearest sibling live?" +msgstr "ÙÙŠ أي مدينة يعيش أقرب شقيق لك؟" + +msgid "In what city or town did your mother and father meet?" +msgstr "ÙÙŠ أي مدينة أو بلدة قابلت أمك ووالدك؟" + +msgid "In what city or town was your first job?" +msgstr "ÙÙŠ أي مدينة أو بلدة كانت ÙˆØ¸ÙŠÙØªÙƒ الأولى؟" + +#, fuzzy +#| msgid "Active" +msgid "Inactive" +msgstr "نشط" + +msgid "Inbox" +msgstr "البريد الوارد" + +msgid "Include Domains" +msgstr "تضمين المجالات" + +msgid "Include your license information" +msgstr "تضمين معلومات الترخيص" + +msgid "Info" +msgstr "معلومات" + +msgid "Info for admins" +msgstr "معلومات للمسؤولين" + +msgid "Inherit" +msgstr "موروث" + +msgid "Inodes" +msgstr "إنودس" + +msgid "Install Serverwide" +msgstr "تثبيت على مستوى الخادم" + +msgid "Installed" +msgstr "تنصيب" + +msgid "Installed Perl Modules" +msgstr "ÙˆØØ¯Ø§Øª بيرل المثبتة" + +msgid "Interface is a loopback interface." +msgstr "" + +msgid "Interface is a point-to-point link." +msgstr "" + +msgid "Interface is in promiscuous mode." +msgstr "" + +#, fuzzy +#| msgid "Process is running" +msgid "Interface is running." +msgstr "العملية قيد التشغيل" + +msgid "Internal debugging flag." +msgstr "" + +msgid "Invalid " +msgstr "غير ØµØ§Ù„Ø " + +#, c-format +msgid "Invalid '%s'" +msgstr "'%s' غير صالØ" + +msgid "Invalid CC email address" +msgstr "عنوان بريد إلكتروني CC غير صالØ" + +msgid "" +"Invalid Characters in the skin name. Only use a-zA-Z0-9._-[] Must not start " +"with '.'" +msgstr "" +"Ø£ØØ±Ù غير ØµØ§Ù„ØØ© ÙÙŠ اسم السطØ. Ùقط استخدام a-zA-Z0-9._-[]يجب أن لا تبدأ بـ " +"\"\"." + +msgid "Invalid Cron ID" +msgstr "معر٠كرون غير صالØ" + +msgid "Invalid DNS name" +msgstr "اسم DNS غير صالØ" + +msgid "Invalid DNS value" +msgstr "قيمة DNS غير ØµØ§Ù„ØØ©" + +msgid "Invalid Domain" +msgstr "مجال غير صالØ" + +msgid "Invalid Domain Name" +msgstr "اسم مجال غير صالØ" + +msgid "Invalid E-Mail" +msgstr "بريد إلكتروني غير صالØ" + +msgid "Invalid E-Mail User" +msgstr "مستخدم البريد الإلكتروني غير صالØ" + +msgid "" +"Invalid E-Mail address. Multiple and DirectAdmin login username, or blank " +"also allowed" +msgstr "" +"عنوان البريد الإلكتروني غير صالØ. اسم مستخدم تسجيل دخول متعددة Ùˆ " +"DirectAdminØŒ أو ÙØ§Ø±ØºØ© Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§ أيضًا" + +msgid "Invalid Email" +msgstr "خطأ ÙÙŠ البرید الإلکتروني" + +msgid "Invalid Email Name" +msgstr "اسم البريد الإلكتروني غير صالØ" + +msgid "Invalid Email limit" +msgstr "ØØ¯ البريد الإلكتروني غير صالØ" + +msgid "Invalid FTP account" +msgstr "ØØ³Ø§Ø¨ FTP غير صالØ" + +msgid "Invalid IP (1.2.3.4) or IP range (1.2.3.4-5)" +msgstr "IP غير ØµØ§Ù„Ø (1.2.3.4) أو نطاق IP (1.2.3.4-5)" + +msgid "Invalid IP/Domain for the ftp connection" +msgstr "IP/المجال غير ØµØ§Ù„Ø Ù„Ø§ØªØµØ§Ù„ ftp" + +#, c-format +msgid "Invalid Log Rotate Value: %d" +msgstr "قيمة تدوير السجل غير Ø§Ù„ØµØ§Ù„ØØ©: %d" + +msgid "Invalid MX value" +msgstr "قيمة MX غير ØµØ§Ù„ØØ©" + +msgid "Invalid Name" +msgstr "اسم غير صالØ" + +msgid "Invalid Netmask" +msgstr "قناع الشبكة غير صالØ" + +msgid "Invalid Password" +msgstr "كلمة مرور غير صØÙŠØØ©" + +msgid "Invalid RSA comment" +msgstr "تعليق RSA غير صالØ" + +msgid "Invalid RSA id. Use simple characters: a-zA-Z0-9" +msgstr "معر٠RSA غير صالØ. استخدام Ø£ØØ±Ù بسيطة: Ø£-zA-Z0-9" + +msgid "Invalid RSA key" +msgstr "Ù…ÙØªØ§Ø RSA غير صالØ" + +msgid "Invalid SecRuleRemoveById value" +msgstr "قيمة غير ØµØ§Ù„ØØ© لـ SecRuleRemoveById" + +#, c-format +msgid "Invalid Session Minutes value: %lld" +msgstr "قيمة دقائق جلسة العمل غير ØµØ§Ù„ØØ©: %lld" + +msgid "Invalid Subdomain" +msgstr "نطاق ÙØ±Ø¹ÙŠ ØºÙŠØ± صالØ" + +msgid "Invalid Two-Step Auth code" +msgstr "رمز مصادقة خطوتين غير صالØ" + +msgid "Invalid URL" +msgstr "رابط غير صالØ" + +msgid "Invalid User" +msgstr "مستخدم غير صالØ" + +msgid "Invalid User type" +msgstr "نوع المستخدم غير صالØ" + +msgid "Invalid Username" +msgstr "إسم مستخدم غير صØÙŠØ ." + +msgid "Invalid Username or Password" +msgstr "اسم مستخدم غير ØµØ§Ù„Ø Ø£Ùˆ كلمة المرور غير ØµØ§Ù„ØØ©." + +msgid "Invalid action" +msgstr "إجراء غير صØÙŠØ" + +#, c-format +msgid "Invalid characters in description. Allowed %s" +msgstr "Ø£ØØ±Ù غير ØµØ§Ù„ØØ© ÙÙŠ الوصÙ. %s Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§" + +msgid "Invalid characters in password" +msgstr "Ø£ØØ±Ù غير ØµØ§Ù„ØØ© ÙÙŠ كلمة المرور" + +msgid "Invalid characters in search" +msgstr "Ø£ØØ±Ù غير ØµØ§Ù„ØØ© ÙÙŠ Ø§Ù„Ø¨ØØ«" + +msgid "Invalid characters in security answer" +msgstr "Ø£ØØ±Ù غير صØÙŠØØ© ÙÙŠ إجابة الأمان" + +msgid "Invalid characters in security question" +msgstr "Ø£ØØ±Ù غير ØµØ§Ù„ØØ© ÙÙŠ سؤال الأمان" + +msgid "Invalid characters in word" +msgstr "Ø£ØØ±Ù غير صØÙŠØØ© ÙÙŠ الكلمة" + +msgid "Invalid code" +msgstr "رمز غير صالØ" + +msgid "Invalid crypted passwd" +msgstr "passwd سرداب غير صالØ" + +msgid "Invalid database name:" +msgstr "اسم قاعدة بيانات غير صالØ:" + +msgid "Invalid delete_messages_days or delete_tickets_days. Too big. Max = " +msgstr "" +"delete_messages_days أو delete_tickets_days غير صالØ. كبير جداً Ø§Ù„ØØ¯ الأقصى " +"= " + +msgid "" +"Invalid delete_messages_days or delete_tickets_days. Should be 0 or a " +"positive integer." +msgstr "" +"delete_messages_days أو delete_tickets_days غير صالØ. يجب أن يكون 0 أو عدد " +"صØÙŠØ موجب." + +msgid "Invalid dnsprovider" +msgstr "Ù…ÙˆÙØ± dns غير صالØ" + +msgid "Invalid domain" +msgstr "مجال غير صالØ" + +msgid "Invalid email address" +msgstr "عنوان البريد الإلكتروني غير صالØ" + +msgid "Invalid email address on file. Contact your webhost." +msgstr "عنوان بريد إلكتروني غير ØµØ§Ù„Ø ÙÙŠ الملÙ. اتصل بمضي٠الويب الخاص بك." + +msgid "Invalid email user" +msgstr "مستخدم بريد إلكتروني غير صالØ" + +msgid "Invalid email username" +msgstr "" + +msgid "Invalid encryption password" +msgstr "كلمة مرور تشÙير غير ØµØ§Ù„ØØ©" + +msgid "Invalid file extension list" +msgstr "قائمة ملØÙ‚ المل٠غير صالØ" + +msgid "Invalid filename:" +msgstr "اسم المل٠غير صالØ:" + +msgid "Invalid filter type" +msgstr "نوع عامل التصÙية غير صالØ" + +msgid "Invalid fingerprint" +msgstr "بصمة غير ØµØ§Ù„ØØ©" + +msgid "Invalid ftp password" +msgstr "كلمة مرور ftp غير ØµØ§Ù„ØØ©" + +msgid "Invalid ftp path" +msgstr "مسار ftp غير صالØ" + +msgid "Invalid ftp port" +msgstr "Ù…Ù†ÙØ° ftp غير صالØ" + +msgid "Invalid ftp username" +msgstr "اسم مستخدم ftp غير صالØ" + +#, c-format +msgid "Invalid key bit length: '%s'" +msgstr "طول بت Ø§Ù„Ù…ÙØªØ§Ø غير صالØ: '%s'" + +#, c-format +msgid "Invalid key option name or value: %s=%s" +msgstr "اسم خيار Ø§Ù„Ù…ÙØªØ§Ø غير ØµØ§Ù„Ø Ø£Ùˆ قيمة: %s = %s" + +#, c-format +msgid "Invalid key type: '%s'" +msgstr "نوع Ø§Ù„Ù…ÙØªØ§Ø غير صالØ: '%s'" + +#, c-format +msgid "Invalid keysize. Valid values: %s" +msgstr "Ù…ÙØ§ØªÙŠØ غير ØµØ§Ù„ØØ©. القيم Ø§Ù„ØµØ§Ù„ØØ©: %s" + +msgid "Invalid language" +msgstr "لغة غير ØµØ§Ù„ØØ©" + +msgid "Invalid list of allowed domains" +msgstr "قائمة غير صØÙŠØØ© بالمجالات Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§" + +msgid "Invalid local path" +msgstr "مسار Ù…ØÙ„ÙŠ غير صالØ" + +msgid "Invalid login. Please verify your Username and Password" +msgstr "تسجيل دخول غير صالØ. يرجى التØÙ‚Ù‚ من اسم المستخدم وكلمة المرور" + +#, c-format +msgid "Invalid master type: %d for '%s'" +msgstr "نوع رئيسي غير صالØ: %d لـ \"%s\"" + +msgid "Invalid message days. Should be a positive integer." +msgstr "أيام الرسائل غير ØµØ§Ù„ØØ©. يجب أن يكون عدد صØÙŠØ موجب." + +msgid "Invalid message id" +msgstr "معر٠الرسالة غير صالØ" + +msgid "Invalid message type. Only request, reply and message are allowed" +msgstr "نوع رسالة غير صالØ. Ùقط طلب, الرد ورسالة مسموØ" + +#, c-format +msgid "Invalid method: '%s'" +msgstr "أسلوب غير صالØ: '%s'" + +msgid "Invalid name or extension" +msgstr "اسم أو ملØÙ‚ غير صالØ" + +msgid "Invalid netmask type for IP type" +msgstr "نوع قناع الشبكة غير ØµØ§Ù„Ø Ù„Ù†ÙˆØ¹ IP" + +msgid "Invalid new user value" +msgstr "قيمة مستخدم جديدة غير ØµØ§Ù„ØØ©" + +msgid "Invalid number" +msgstr "رقم غير صالØ" + +msgid "Invalid package name" +msgstr "اسم Ø§Ù„ØØ²Ù…Ø© غير صالØ" + +msgid "Invalid password (empty)" +msgstr "كلمة المرور غير ØµØ§Ù„ØØ© (ÙØ§Ø±ØºØ©)" + +msgid "Invalid path" +msgstr "مسار غير صالØ" + +msgid "Invalid path append value" +msgstr "قيمة Ø¥Ù„ØØ§Ù‚ مسار غير صالØ" + +msgid "Invalid path. Must start with /" +msgstr "مسار غير صالØ. يجب أن تبدأ ب /" + +msgid "Invalid plugin name" +msgstr "اسم المكون الإضاÙÙŠ غير صالØ" + +msgid "Invalid redirect URL" +msgstr "عنوان URL غير ØµØ§Ù„Ø Ù„Ø¥Ø¹Ø§Ø¯Ø© التوجيه" + +#, c-format +msgid "Invalid request: '%s'" +msgstr "طلب غير صالØ: '%s'" + +msgid "Invalid session timeout or max filesize values" +msgstr "قيم مهلة جلسة العمل غير Ø§Ù„ØµØ§Ù„ØØ© أو Ø§Ù„ØØ¯ الأقصى Ù„ØØ¬Ù… Ø§Ù„Ù…Ù„ÙØ§Øª" + +msgid "Invalid subdomain name" +msgstr "اسم نطاق ÙØ±Ø¹ÙŠ ØºÙŠØ± صالØ" + +msgid "Invalid ticket days. Should be a positive integer." +msgstr "أيام التذكرة غير ØµØ§Ù„ØØ©. يجب أن يكون عدد صØÙŠØ موجب." + +#, c-format +msgid "Invalid ticket days. Too big. Max = %s" +msgstr "أيام التذكرة غير ØµØ§Ù„ØØ©. كبير جداً Ø§Ù„ØØ¯ الأقصى = %s" + +#, c-format +msgid "Invalid type for '%s': '%s'" +msgstr "نوع غير ØµØ§Ù„Ø Ù„Ù€ \"%s\": '%s'" + +msgid "Invalid user" +msgstr "مستخدم غير صالØ" + +msgid "Invalid username" +msgstr "اسم المستخدم غير صالØ" + +msgid "Invalid values" +msgstr "قيم غير ØµØ§Ù„ØØ©" + +msgid "Invalid widget name" +msgstr "اسم عنصر واجهة مستخدم غير صالØ" + +msgid "Is able to select media type via ifmap." +msgstr "" + +msgid "Issue verifying license" +msgstr "ترخيص التØÙ‚Ù‚ من الإصدار" + +msgid "Issuer" +msgstr "Ø§Ù„Ù…ÙØµØ¯Ø±" + +msgid "It already exists on the following system(s)" +msgstr "وهو موجود Ø¨Ø§Ù„ÙØ¹Ù„ على النظام التالي (النظم)" + +msgid "It has been disabled" +msgstr "تم تعطيل نطاق" + +msgid "It must be a positive integer." +msgstr "يجب أن يكون عدد صØÙŠØ موجب." + +msgid "It must not be an IP" +msgstr "يجب ألا يكون عنواناً Ùكرياً" + +#, c-format +msgid "It's already associated with %s" +msgstr "إنه مرتبط Ø¨Ø§Ù„ÙØ¹Ù„ %s" + +msgid "Items per page" +msgstr "مواد لكل ØµÙØØ©" + +msgid "Jailed Home" +msgstr "الرئيسية المسجونة" + +msgid "Jan" +msgstr "يناير" + +msgid "Jul" +msgstr "يوليو" + +msgid "Jun" +msgstr "يونيو" + +msgctxt "readable size" +msgid "KB" +msgstr "كيلوبايت" + +msgid "Keep it for future reference." +msgstr "Ø§Ù„Ø§ØØªÙاظ بها للرجوع إليها ÙÙŠ المستقبل." + +msgid "Keep the numbers to a realistic value please." +msgstr "Ø§ØØªÙظ بالأرقام إلى قيمة واقعية من ÙØ¶Ù„Ùƒ." + +msgid "Key" +msgstr "Ù…ÙØªØ§Ø" + +msgid "Key Created. Take note of it's value and keep it safe." +msgstr "تم إنشاء Ø§Ù„Ù…ÙØªØ§Ø. Ù„Ø§ØØ¸ قيمة لها والØÙاظ على أمنها." + +msgid "Key ID" +msgstr "Ù…Ø¹Ø±Ù Ø§Ù„Ù…ÙØªØ§Ø" + +msgid "" +"Key Modified. If you've modified its value, take note of it and keep it safe." +msgstr "Ù…ÙØªØ§Ø تم تعديله. إذا قمت بتعديل قيمته، Ù„Ø§ØØ¸ ذلك ÙˆØ§Ù„Ø§ØØªÙاظ بها آمنة." + +msgid "Key Name" +msgstr "اسم Ø§Ù„Ù…ÙØªØ§Ø" + +msgid "Key Name must be simple: a-zA-Z0-9" +msgstr "يجب أن يكون اسم Ø§Ù„Ù…ÙØªØ§Ø بسيطًا: a-zA-Z0-9" + +msgid "Key Uses Reset" +msgstr "إعادة تعيين استخدامات Ø§Ù„Ù…ÙØªØ§Ø" + +msgid "Key already exists via fingerprint matching" +msgstr "Ø§Ù„Ù…ÙØªØ§Ø موجود Ø¨Ø§Ù„ÙØ¹Ù„ عبر مطابقة بصمة الإصبع" + +msgid "Key contains invalid characters" +msgstr "ÙŠØØªÙˆÙŠ Ø§Ù„Ù…ÙØªØ§Ø على Ø£ØØ±Ù غير ØµØ§Ù„ØØ©" + +msgid "Key is Invalid" +msgstr "Ø§Ù„Ù…ÙØªØ§Ø غير صالØ" + +msgid "Key value must differ from your DirectAdmin password" +msgstr "يجب أن تختل٠قيمة Ø§Ù„Ù…ÙØªØ§Ø عن كلمة مرور DirectAdmin" + +msgid "Key(s) deleted" +msgstr "Ù…ÙØªØ§Ø (Ù…ÙØ§ØªÙŠØ) Ù…ØØ°ÙˆÙ" + +msgid "Keys" +msgstr "Ù…ÙØ§ØªÙŠØ" + +msgid "Keys listed below" +msgstr "Ø§Ù„Ù…ÙØ§ØªÙŠØ المسرودة أدناه" + +msgid "Kill" +msgstr "اغلق العنصر Ø§Ù„ØØ§Ù„ÙŠ قسراً" + +msgid "Language" +msgstr "اللغة" + +#, c-format +msgid "Language has been changed to %s" +msgstr "تم تغيير اللغة إلى %s" + +msgid "Language has been successfully changed" +msgstr "تم تغيير اللغة بنجاØ" + +msgid "Last" +msgstr "الأخير" + +msgid "Last Accessed" +msgstr "آخر وصول تم" + +msgid "Last Changed" +msgstr "آخر تغيير" + +#, c-format +msgid "Last Login IP: %s" +msgstr "IP تسجيل الدخول الأخير: %s" + +#, c-format +msgid "Last Login: %s" +msgstr "آخر تسجيل دخول: %s" + +msgid "Last Message" +msgstr "آخر رسالة" + +msgid "Last Modified" +msgstr "آخر تعديل" + +msgid "Last Page" +msgstr "Ø§Ù„ØµÙØØ© الأخيرة" + +msgid "Last Tally Completion" +msgstr "الانتهاء من آخر ØØµÙŠÙ„Ø©" + +msgid "Leave DNS" +msgstr "ترك DNS" + +#, c-format +msgid "Left user on %s's list" +msgstr "المستخدم الأيسر ÙÙŠ قائمة %s" + +msgid "Let's Encrypt Certificate Entries" +msgstr "دعونا تشÙير إدخالات الشهادات" + +msgid "Let's Encrypt is not enabled. You cannot use this option." +msgstr "لنجعل \"تشÙير\" غير ممكّن. لا يمكنك استخدام هذا الخيار." + +msgid "LetsEncrypt files have been cleared" +msgstr "لقد تم Ù…Ø³Ø Ù…Ù„ÙØ§Øª LetsEncrypt" + +msgid "LetsEncrypt request successful" +msgstr "LetsEncrypt طلب ناجØ" + +msgid "LetsEncrypt request successful for" +msgstr "LetsEncrypt طلب Ù†Ø§Ø¬Ø Ù„Ù„" + +#, c-format +msgid "License is limited to %d Admins/Resellers, and you currently have %d" +msgstr "الترخيص مقصور على %d المسؤولين/الموزعين، لديك ØØ§Ù„ياً %d" + +#, c-format +msgid "License is limited to %d accounts, and you currently have %d" +msgstr "الترخيص يقتصر على %d Ø§Ù„ØØ³Ø§Ø¨Ø§ØªØŒ لديك ØØ§Ù„يا %d" + +#, c-format +msgid "License is limited to %d domains, and you currently have %d" +msgstr "الترخيص يقتصر على %d المجالات، لديك ØØ§Ù„يا %d" + +msgid "License is not valid" +msgstr "الترخيص غير صالØ" + +msgid "License limits exceeded" +msgstr "تجاوز ØØ¯ÙˆØ¯ الترخيص" + +msgid "" +"License requires a newer version of DirectAdmin, but auto_update is " +"disabled. Please update your DirectAdmin version." +msgstr "" +"يتطلب الترخيص إصدارًا Ø£ØØ¯Ø« من DirectAdminØŒ ولكن auto_update معطل. الرجاء " +"ØªØØ¯ÙŠØ« إصدار DirectAdmin." + +msgid "" +"License requires a newer version of DirectAdmin, but your OS is end-of-life. " +"Please install a newer OS to continue." +msgstr "" +"يتطلب الترخيص إصدارًا Ø£ØØ¯Ø« من DirectAdminØŒ ولكن نظام التشغيل الخاص بك هو " +"نهاية العمر. الرجاء تثبيت نظام تشغيل Ø£ØØ¯Ø« للمتابعة." + +msgid "License verified" +msgstr "تم التØÙ‚Ù‚ من الترخيص" + +msgid "Licensing / Updates" +msgstr "الترخيص / Ø§Ù„ØªØØ¯ÙŠØ«Ø§Øª" + +msgid "Limit Notice" +msgstr "إشعار Ø§Ù„ØØ¯" + +msgid "Limit is not a number" +msgstr "Ø§Ù„ØØ¯ ليس رقماً" + +msgid "Link" +msgstr "رابط" + +msgid "Link in Background" +msgstr "الارتباط ÙÙŠ الخلÙية" + +msgid "Linked IPs" +msgstr "برامج العمل الدولية المرتبطة" + +msgid "List" +msgstr "قائمة" + +msgid "List Admins" +msgstr "Ùهرست مدیران" + +msgid "List Configurations Saved" +msgstr "تكوينات القوائم المØÙوظة" + +msgid "List Resellers" +msgstr "قائمة الموزعين" + +msgid "List Users" +msgstr "عرض الموظÙين" + +msgid "List of Users is too long" +msgstr "قائمة المستخدمين طويلة جداً" + +#, c-format +msgid "Listname must be %d characters or less" +msgstr "يجب أن يكون اسم القائمة %d Ø£ØØ±Ù أو أقل" + +msgid "Listname must be all lower case letters" +msgstr "يجب أن يكون اسم القائمة ÙƒØ§ÙØ© Ø§Ù„Ø£ØØ±Ù الأقل ØØ§Ù„Ø©" + +msgid "Load Average" +msgstr "متوسط الØÙ…Ù„" + +msgid "Local Data" +msgstr "البيانات المØÙ„ية" + +msgid "Local Default" +msgstr "Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Ø§Ù„Ù…ØÙ„ÙŠ" + +msgid "Local Mail" +msgstr "البريد المØÙ„ÙŠ" + +msgid "Local URL Path" +msgstr "مسار URL المØÙ„ÙŠ" + +msgid "Log" +msgstr "سجل" + +msgid "Log Entry" +msgstr "إدخال السجل" + +msgid "Log Usage" +msgstr "استخدام السجل" + +msgid "Log Viewer" +msgstr "عارض السجل" + +msgid "Login" +msgstr "تسجيل الدخول" + +msgid "Login Failures" +msgstr "ÙØ´Ù„ تسجيل الدخول" + +msgid "Login History" +msgstr "سجل تسجيل الدخول" + +msgid "Login Keys" +msgstr "Ù…ÙØ§ØªÙŠØ تسجيل الدخول" + +msgid "Login Keys are disabled" +msgstr "Ù…ÙØ§ØªÙŠØ تسجيل الدخول معطلة" + +msgid "Login Page" +msgstr "ØµÙØØ© تسجيل الدخول" + +#, c-format +msgid "Login as %s" +msgstr "تسجيل الدخول كما %s" + +msgid "Logout" +msgstr "تسجيل الخروج" + +msgid "Low" +msgstr "Ù…Ù†Ø®ÙØ¶" + +msgctxt "readable size" +msgid "MB" +msgstr "ميجابايت" + +msgid "MX Records" +msgstr "سجلات MX" + +msgid "MX Template set" +msgstr "مجموعة قوالب MX" + +msgid "MX Templates are disabled" +msgstr "تم تعطيل قوالب MX" + +msgid "MX priority should be an positive number" +msgstr "يجب أن تكون أولوية MX رقمًا موجبًا" + +msgid "Mail Queue Administration" +msgstr "إدارة قائمة انتظار البريد" + +msgid "Mailing List" +msgstr "قائمة الأيميل" + +msgid "Mailing Lists" +msgstr "القوائم البريدية" + +msgid "Main" +msgstr "الرئيسية" + +msgid "Main Domain ..." +msgstr "النطاق الرئيسي" + +#, c-format +msgid "Major Error: Error finding home for %s" +msgstr "خطأ رئيسي: خطأ ÙÙŠ Ø§Ù„Ø¨ØØ« عن منزل %s" + +msgid "Make sure 'unit' is running" +msgstr "تأكد من تشغيل \"Ø§Ù„ÙˆØØ¯Ø©\"" + +msgid "Make sure that the values passed are valid for their type" +msgstr "تأكد من أن القيم التي تم تمريرها ØµØ§Ù„ØØ© لنوعها" + +msgid "Manage Reseller Packages" +msgstr "إدارة ØØ²Ù… الموزعين" + +msgid "Manage Tickets" +msgstr "إدارة التذاكر" + +msgid "Manage User Backups" +msgstr "إدارة النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ù„Ù…Ø³ØªØ®Ø¯Ù…" + +msgid "Manage User Packages" +msgstr "إدارة ØØ²Ù… المستخدمين" + +#, c-format +msgid "Manually by %s" +msgstr "يدوياً بواسطة %s" + +msgid "Mar" +msgstr "مارس" + +msgid "Mark as read" +msgstr "إشارة تم قراءته" + +msgid "Master of a load balancing bundle." +msgstr "" + +msgid "Max Tasks that may be created in the unit" +msgstr "" + +msgid "Max Usage (Meg)" +msgstr "أقصى استخدام (ميج)" + +msgid "Max disk read operations per second." +msgstr "" + +msgid "Max disk write operations per second." +msgstr "" + +msgid "Max limit User can set per E-Mail" +msgstr "Ø§Ù„ØØ¯ الأقصى للمستخدم يمكن تعيين لكل بريد إلكتروني" + +msgid "Max number of uses must be a valid number (no decimals)" +msgstr "يجب أن يكون Ø§Ù„ØØ¯ الأقصى لعدد الاستخدامات رقمًا صالØÙ‹Ø§ (بدون أرقام عشرية)" + +msgid "Max rate data can be read from a disk." +msgstr "" + +msgid "Max rate data can be written to a disk." +msgstr "" + +msgid "Maximum Usage" +msgstr "الاستخدام الأقصى" + +#, c-format +msgid "Maximum number of files listed (%d). Suppressing further output." +msgstr "Ø§Ù„ØØ¯ الأقصى لعدد Ø§Ù„Ù…Ù„ÙØ§Øª المسرودة (%d). منع المزيد من الإخراج." + +#, fuzzy, c-format +#| msgid "The maximum value is %d" +msgid "Maximum value: %s=%s" +msgstr "القيمة القصوى هي %d" + +msgid "May" +msgstr "مايو" + +msgid "Medium" +msgstr "متوسط" + +msgid "Meg" +msgstr "ميج" + +#, fuzzy +#| msgid "Memory Usage" +msgid "Memory High" +msgstr "استخدام الذاكرة" + +msgid "Memory Usage" +msgstr "استخدام الذاكرة" + +msgid "Message #" +msgstr "الرسالة:" + +msgid "Message Reset" +msgstr "إعادة تعيين الرسالة" + +msgid "Message System" +msgstr "نظام الرسائل" + +msgid "Message Type" +msgstr "نوع الرسالة" + +msgid "Message is being sent" +msgstr "يتم إرسال الرسالة" + +msgid "Message(s) removed" +msgstr "تمت إزالة الرسالة (الرسائل)" + +msgid "Messages Updated" +msgstr "تم ØªØØ¯ÙŠØ« الرسائل" + +msgid "Mime Types" +msgstr "أنواع Mime" + +msgid "MimeType" +msgstr "Mيمي نوع" + +msgid "Minute" +msgstr "دقيقة" + +msgid "Missing closing bracket in zone line." +msgstr "قوس الإغلاق Ù…Ùقود ÙÙŠ خط المنطقة." + +msgid "Missing open bracket in zone line." +msgstr "قوس Ù…ÙØªÙˆØ Ù…Ùقود ÙÙŠ خط المنطقة." + +msgid "Missing template" +msgstr "قالب Ù…Ùقود" + +msgid "ModSecurity Flags" +msgstr "إشارات وزارة Ø§Ù„Ø¯ÙØ§Ø¹" + +msgid "ModSecurity Rules" +msgstr "قواعد الأمن ÙÙŠ وزارة Ø§Ù„Ø¯ÙØ§Ø¹" + +msgid "ModSecurity Rules Saved" +msgstr "قواعد Modsecurity المØÙوظة" + +msgid "ModSecurity Skipped Rules" +msgstr "قواعد تخطي ModSecurity" + +msgid "ModSecurity is not enabled" +msgstr "لم يتم تمكين ModSecurity" + +msgid "Modify" +msgstr "تعديل" + +msgid "Modify Password" +msgstr "تعديل كلمة المرور" + +msgid "Month" +msgstr "شهر" + +msgid "More Info" +msgstr "مزيد من المعلومات" + +msgid "Morning" +msgstr "الصباØ" + +msgid "Mounted on" +msgstr "شنت على" + +msgid "Move Clipboard Files here" +msgstr "نقل Ù…Ù„ÙØ§Øª Ø§Ù„ØØ§Ùظة هنا" + +msgid "Move Users between Resellers" +msgstr "نقل المستخدمين بين الموزعين" + +msgid "Move any existing files to trash?" +msgstr "نقل أي Ù…Ù„ÙØ§Øª موجودة إلى المهملات؟" + +msgid "Move to Trash" +msgstr "ارسال Ùˆ نقل الى سلة Ø§Ù„Ù…ØØ°ÙˆÙات" + +msgid "Multi-Server Setup" +msgstr "إعداد متعدد الخوادم" + +msgid "" +"Must provide a mime type or handler name and a single extention. eg: \"text/" +"html\" or \"cgi-script\" and \"html\"" +msgstr "" +"يجب توÙير اسم نوع mime أو معالج Ùˆ extention ÙˆØ§ØØ¯. على سبيل المثال: \"نص / " +"html\" أو \"cgi-النصي\" Ùˆ \"html\"" + +msgid "Must select more than zero LetsEncrypt entries." +msgstr "يجب ØªØØ¯ÙŠØ¯ أكثر من ØµÙØ± LetsEncrypt الإدخالات." + +#, c-format +msgid "Must use letsencrypt=1 for options. letsencrypt=%d is currently set." +msgstr "يجب استخدام letsencrypt = 1 للخيارات. letsencrypt = %d ØØ§Ù„يا." + +msgid "MySQL is not enabled on this server" +msgstr "لم يتم تمكين MySQL على هذا الخادم" + +msgid "NGINX Unit" +msgstr "ÙˆØØ¯Ø© NGINX" + +msgid "" +"NOTE: You are using the server IP, so your CA Root Certificate has been " +"saved to" +msgstr "" +"Ù…Ù„Ø§ØØ¸Ø©: أنت تستخدم IP الملقم، لذلك تم ØÙظ شهادة جذر المرجع المصدق (CA) إلى" + +msgid "" +"NOTE: You are using the server IP, so your certificate and key have been " +"saved to" +msgstr "Ù…Ù„Ø§ØØ¸Ø©: أنت تستخدم IP الملقم، لذلك تم ØÙظ الشهادة ÙˆØ§Ù„Ù…ÙØªØ§Ø إلى" + +msgid "Name" +msgstr "الاسم" + +msgid "Name Server 1" +msgstr "اسم خادم 1" + +msgid "Name Server 2" +msgstr "اسم خادم 2" + +msgid "Name Servers" +msgstr "خوادم الأسماء" + +msgid "Name must only contain letters, spaces and/or periods" +msgstr "يجب أن ÙŠØØªÙˆÙŠ Ø§Ù„Ø§Ø³Ù… على Ø£ØØ±Ù Ùˆ/أو Ù…Ø³Ø§ÙØ§Øª Ùˆ/أو ÙØªØ±Ø§Øª Ùقط" + +msgid "Nameserver" +msgstr "اسمver" + +msgid "Nameservers deleted" +msgstr "تم ØØ°Ù خوادم الأسماء" + +msgid "Nameservers have been changed" +msgstr "تم تغيير خوادم الأسماء" + +msgid "Namesevers have been changed." +msgstr "أسماء تم تغييرها." + +msgid "Netmask" +msgstr "قناع" + +msgid "Never" +msgstr "مطلقا" + +#, c-format +msgid "New License is invalid: %s" +msgstr "الترخيص الجديد غير صالØ: %s" + +#, c-format +msgid "New Secret Set: %s" +msgstr "مجموعة سر جديدة: %s" + +msgid "New password isn't different" +msgstr "كلمة المرور الجديدة ليست Ù…Ø®ØªÙ„ÙØ©" + +#, c-format +msgid "Newly installed key is %s-bit" +msgstr "Ø§Ù„Ù…ÙØªØ§Ø المثبت ØØ¯ÙŠØ«Ù‹Ø§ هو %s بت" + +msgid "Next Retry" +msgstr "" + +msgid "Nginx Template" +msgstr "قالب Nginx" + +msgid "Nginx is not enabled" +msgstr "لم يتم تمكين Nginx" + +msgid "NginxUnit is not enabled or not running" +msgstr "NginxUnit غير ممكّنة أو غير قيد التشغيل" + +msgid "No" +msgstr "لا" + +msgid "No Awstats" +msgstr "لا أوستاتس" + +msgid "No Data to Show" +msgstr "لا توجد بيانات لإظهارها" + +msgid "No IPs selected" +msgstr "لم يتم ØªØØ¯ÙŠØ¯ أي برامج IPs" + +#, c-format +msgid "No ListFile in container at route position %lld" +msgstr "لا يوجد ListFile ÙÙŠ ØØ§ÙˆÙŠØ© ÙÙŠ %lld موضع التوجيه" + +msgid "No Send class set" +msgstr "لا يوجد مجموعة ÙØ¦Ø§Øª الإرسال" + +msgid "No User Data" +msgstr "بيانات العضو" + +msgid "No arp protocol, L2 destination address not set." +msgstr "" + +msgid "No changes have been made" +msgstr "لم يتم إجراء أي تغييرات" + +msgid "No changes were needed. Skipping write." +msgstr "لم تكن هناك ØØ§Ø¬Ø© إلى أي تغييرات. تخطي الكتابة." + +msgid "No colors have been selected" +msgstr "لم يتم ØªØØ¯ÙŠØ¯ ألوان" + +#, c-format +msgid "No container at route position %lld" +msgstr "لا ØØ§ÙˆÙŠØ© ÙÙŠ موقع الطريق %lld" + +msgid "No events for this period." +msgstr "" + +msgid "No files have been selected for upload." +msgstr "لم يتم ØªØØ¯ÙŠØ¯ أية Ù…Ù„ÙØ§Øª للتØÙ…يل." + +msgid "No free IPs found" +msgstr "لم يتم العثور على أي برامج خدمة IPs مجانية" + +msgid "No global IPs found" +msgstr "لم يتم العثور على أي برامج خدمة عمومية" + +msgid "No keys have been selected" +msgstr "لم يتم ØªØØ¯ÙŠØ¯ أية Ù…ÙØ§ØªÙŠØ" + +msgid "No keys selected" +msgstr "لم يتم ØªØØ¯ÙŠØ¯ أية Ù…ÙØ§ØªÙŠØ" + +msgid "No options were selected" +msgstr "لم يتم ØªØØ¯ÙŠØ¯ خيارات" + +msgid "No passwd entries provided." +msgstr "لم يتم توÙير إدخالات passwd." + +msgid "No paths were provided." +msgstr "لم يتم توÙير مسارات." + +msgid "No shared IPs found" +msgstr "لم يتم العثور على \"أي برامج مشاركة\"" + +msgid "No such username in the request list. Your request may have expired." +msgstr "لا يوجد اسم مستخدم ÙÙŠ قائمة الطلبات. قد يكون طلبك قد انتهت صلاØÙŠØªÙ‡." + +msgid "No such username in the request list. Your request may have expired." +msgstr "لا يوجد اسم مستخدم ÙÙŠ قائمة الطلبات. قد يكون طلبك قد انتهت صلاØÙŠØªÙ‡." + +msgid "No text provided" +msgstr "لم يتم توÙير أي نص" + +msgid "No vacation message set" +msgstr "لا توجد مجموعة رسائل إجازات" + +msgid "Not a valid IP Address" +msgstr "عنوان IP غير صالØ" + +#, c-format +msgid "" +"Not enough IP's to create nameservers. It requires at least %d free, un-" +"assigned ips." +msgstr "" +"لا يكÙÙŠ IP لإنشاء خوادم الأسماء. يتطلب على الأقل %d مجانا، غير المعينة ips." + +msgid "Not setting up Mail SNI." +msgstr "لم يتم إعداد البريد SNI." + +msgid "Not yet generated" +msgstr "لم يتم إنشاؤه بعد" + +msgid "Not yet signed" +msgstr "لم يتم التوقيع بعد" + +#, c-format +msgid "" +"Note: the previous Let's Encrypt config is still set to renew in %d days." +msgstr "" +"Ù…Ù„Ø§ØØ¸Ø©: لا يزال التكوين السابق لـ Let's Encrypt تم تعيينه لتجديده ÙÙŠ %d أيام." + +msgid "Nothing" +msgstr "لا شيء" + +#, c-format +msgid "Notification that Login Key %s has been successfully created by %s" +msgstr "إعلام بأن %s Ù…ÙØªØ§Ø الدخول قد تم إنشاؤه Ø¨Ù†Ø¬Ø§Ø Ø¨ÙˆØ§Ø³Ø·Ø© %s" + +msgid "Notified" +msgstr "اعلام" + +msgid "Nov" +msgstr "نوÙمبر" + +msgid "Null values" +msgstr "القيم Ø§Ù„ÙØ§Ø±ØºØ©" + +#, c-format +msgid "Number %s=%s is out of range (required: %d-%d)" +msgstr "رقم %s = %s خارج النطاق (مطلوب: %d-%د)" + +msgid "Number of Users" +msgstr "عدد المستخدمين" + +msgid "OK" +msgstr "مواÙÙ‚" + +msgid "Oct" +msgstr "اكتوبر" + +msgid "Off" +msgstr "إيقاÙ" + +#, c-format +msgid "Old %s-bit key has been backed up to %s" +msgstr "تم نسخ Ù…ÙØªØ§Ø %s بت القديم Ø§ØØªÙŠØ§Ø·ÙŠÙ‹Ø§ ØØªÙ‰ %s" + +msgid "Old password incorrect" +msgstr "كلمة المرور القديمة غير صØÙŠØØ©" + +msgid "Older than" +msgstr "" +"Ø§Ù…Ø³Ø Ø±Ø³Ø§Ø¦Ù„ البريد الإلكتروني الأقدم من XX يومًا من مجلد البريد المزعج / " +"البريد الغير مرغوب به." + +msgid "On" +msgstr "تشغيل" + +msgid "One (or more) of the selected IPs are not currently in your list" +msgstr "ÙˆØ§ØØ¯ (أو أكثر) من البرامج Ø§Ù„Ù…ØØ¯Ø¯Ø© غير موجودة ØØ§Ù„ياً ÙÙŠ القائمة" + +#, c-format +msgid "" +"One-Click login requires does not support webmail_link=%s. Try " +"webmail_link=roundcube." +msgstr "" +"يتطلب تسجيل الدخول بنقرة ÙˆØ§ØØ¯Ø© لا يعتمد webmail_link = %s. ØØ§ÙˆÙ„ " +"webmail_link = roundcube." + +msgid "One-Time Login URL Created" +msgstr "تم إنشاء URL لتسجيل الدخول لمرة ÙˆØ§ØØ¯Ø©" + +#, c-format +msgid "Only %d of the requested %d global IPs were assigned." +msgstr "ولم يتم تعيين %d من برامج العمل العالمية المطلوبة إلا %d." + +msgid "Only 'Additional' IPs can be removed from a User using this method" +msgstr "يمكن Ùقط إزالة \"إضاÙية\" برامج تشغيل من مستخدم باستخدام هذه الطريقة" + +msgid "Only Admin accounts can save settings" +msgstr "ØØ³Ø§Ø¨Ø§Øª المسؤول Ùقط يمكن ØÙظ الإعدادات" + +msgid "Only Admins can reset the usage count" +msgstr "يمكن للمسؤولين Ùقط إعادة تعيين عدد الاستخدامات" + +msgid "Only Admins may run this request" +msgstr "يمكن Ùقط للمسؤولين تشغيل هذا الطلب" + +msgid "" +"Only provide one extension at a time. eg: \"jpg\" and NOT \"jpg jpeg jpe\"" +msgstr "" +"توÙير ملØÙ‚ ÙˆØ§ØØ¯ Ùقط ÙÙŠ كل مرة. على سبيل المثال: \"jpg\" وليس \"jpg jpeg jpe\"" + +msgid "Only the location of the route can be renamed" +msgstr "يمكن إعادة تسمية موقع المسار Ùقط" + +msgid "Only use wildcard on domains who currently have functional local DNS" +msgstr "" +"استخدام ØØ±Ù البدل Ùقط على المجالات التي لديها ØØ§Ù„يا DNS المØÙ„ية الوظيÙية" + +msgid "Open" +msgstr "ÙØªØ" + +msgid "Open Basedir disabled on selected domains" +msgstr "ÙØªØ Basedir معطل على مجالات Ù…ØØ¯Ø¯Ø©" + +msgid "Open Basedir enabled on selected domains" +msgstr "تمكين \"أساس ÙØªØ\" ÙÙŠ المجالات Ø§Ù„Ù…ØØ¯Ø¯Ø©" + +msgid "Open+Confirm" +msgstr "ÙØªØ +تأكيد" + +msgid "Operation" +msgstr "عملية ملÙ" + +msgid "Optimize" +msgstr "ØªØØ³ÙŠÙ†" + +#, c-format +msgid "Option '%s' has already been set" +msgstr "تم Ø¨Ø§Ù„ÙØ¹Ù„ تعيين الخيار \"%s\"" + +msgid "Options" +msgstr "الخيارات" + +msgid "Options changed successfully" +msgstr "خيارات تم تغييرها بنجاØ" + +msgid "Order" +msgstr "طلب" + +msgid "Order (when the first sort values are equal)" +msgstr "ترتيب (عندما تكون قيم Ø§Ù„ÙØ±Ø² الأولى متساوية)" + +msgid "Original Package" +msgstr "Ø§Ù„ØØ²Ù…Ø© الأصلية" + +msgid "Other" +msgstr "أخرى" + +msgid "Other Disk Usage" +msgstr "استخدام القرص الآخر" + +msgid "Other Usage" +msgstr "استخدام آخر" + +msgid "Outlook Settings" +msgstr "إعدادات Outlook" + +msgid "Overview" +msgstr "نظرة عامة" + +msgid "Owner" +msgstr "المالك" + +#, c-format +msgid "Owner of global IP swapped to Admin %s" +msgstr "تم تبديل مالك IP العمومي إلى %s المسؤول" + +msgid "PHP" +msgstr "Php" + +msgid "PHP Configuration" +msgstr "PHP التكوين" + +msgid "PHP Script Name" +msgstr "PHP اسم البرنامج النصي" + +msgid "PHP Version Selector" +msgstr "PHP الإصدار Ù…ØØ¯Ø¯" + +msgid "PHP versions saved" +msgstr "إصدارات PHP المØÙوظة" + +msgid "PID" +msgstr "معر٠مزود الخدمة" + +#, c-format +msgid "PID '%s' is not a number" +msgstr "PID '%s' ليست رقما" + +msgid "POP Email Accounts" +msgstr "ØØ³Ø§Ø¨Ø§Øª البريد الإلكتروني POP" + +msgid "POP/IMAP Server" +msgstr "خادم POP/IMAP" + +msgid "Package" +msgstr "الباقة" + +#, c-format +msgid "Package '%s' already exists" +msgstr "ØØ²Ù…Ø© '%s' موجود Ø¨Ø§Ù„ÙØ¹Ù„" + +#, c-format +msgid "Package '%s' does not exist" +msgstr "ØØ²Ù…Ø© '%s' غير موجود" + +#, c-format +msgid "Package '%s' is not in your list" +msgstr "Ø§Ù„ØØ²Ù…Ø© \"%s\" غير موجود ÙÙŠ قائمتك" + +msgid "Package not found" +msgstr "لم يتم العثور على Ø§Ù„ØØ²Ù…Ø©" + +msgid "Page" +msgstr "ØµÙØØ©" + +#, c-format +msgid "Parent directory %s was created." +msgstr "تم إنشاء %s الدليل الأصل." + +msgid "Parsing Error. Check logs" +msgstr "خطأ ÙÙŠ التØÙ„يل. التØÙ‚Ù‚ من السجلات" + +msgid "Password" +msgstr "كلمة المرور" + +msgid "Password Changed" +msgstr "تغيير كلمة المرور" + +#, c-format +msgid "Password Changed: %s" +msgstr "تغيير كلمة المرور: %s" + +msgid "Password Not Changed" +msgstr "كلمة المرور لم تتغير" + +msgid "Password Protected Directories" +msgstr "دلائل Ù…ØÙ…ية بكلمة مرور" + +msgid "Password Saved!" +msgstr "كلمة المرور المØÙوظة!" + +msgid "Password cannot contain single quotes" +msgstr "لا يمكن أن ØªØØªÙˆÙŠ ÙƒÙ„Ù…Ø© المرور على علامات اقتباس Ù…ÙØ±Ø¯Ø©" + +msgid "Password is not valid" +msgstr "كلمة المرور غير ØµØ§Ù„ØØ©" + +msgid "Password is too long" +msgstr "كلمة المرور طويلة جداً" + +msgid "Password is too long for the database" +msgstr "كلمة المرور طويلة جداً بالنسبة لقاعدة البيانات" + +msgid "Password is too short" +msgstr "كلمة المرور قصيرة جداً" + +#, c-format +msgid "Password is too short (%d). Use at least %d characters" +msgstr "كلمة المرور قصيرة جداً (%d). استخدام Ø£ØØ±Ù %d على الأقل" + +#, c-format +msgid "Password must be more than %d characters" +msgstr "يجب أن تكون كلمة المرور أكثر من %d ØØ±Ù" + +msgid "Password/Quota" +msgstr "كلمة المرور/Ø§Ù„ØØµØ© النسبية" + +msgid "Password:" +msgstr "كلمة المرور:" + +msgid "Passwords do not match" +msgstr "كلمات المرور غير متطابقة" + +msgid "Passwords do not match or are invalid" +msgstr "كلمات المرور غير متطابقة أو غير صØÙŠØØ©" + +msgid "Path" +msgstr "المسار" + +#, c-format +msgid "Path %s does not exist or is not accessible by the %s user." +msgstr "%s المسار غير موجود أو غير قابل للوصول من قبل المستخدم %s." + +#, c-format +msgid "" +"Path '%s' already exists before User creation. Please remove/rename this " +"path first." +msgstr "" +"المسار '%s' موجود مسبقاً قبل إنشاء المستخدم. الرجاء إزالة/إعادة تسمية هذا " +"المسار أولاً." + +msgid "Path does not exist" +msgstr "المسار غير موجود" + +#, c-format +msgid "Path must start with '%s'" +msgstr "يجب أن يبدأ المسار بـ \"%s\"" + +msgid "Path must start with a forward slash (/)" +msgstr "يجب أن يبدأ المسار بخط مائل للأمام (/)" + +msgid "Paths Unblocked" +msgstr "المسارات غير Ø§Ù„Ù…ØØ¸ÙˆØ±Ø©" + +msgid "Paths must be within your home directory" +msgstr "يجب أن تكون المسارات ضمن الدليل الرئيسي" + +msgid "Percent" +msgstr "النسبة المئوية" + +#, no-c-format +msgid "Percent must end with a % character" +msgstr "" + +#, c-format +msgid "Percent of CPU Core. >100% for more cores." +msgstr "" + +#, c-format +msgid "Percentage must be between %d and %d, inclusive" +msgstr "" + +msgid "Perl Modules" +msgstr "ÙˆØØ¯Ø§Øª بيرل" + +msgid "Perm." +msgstr "بيرم." + +msgid "Permissions set" +msgstr "تعيين الأذونات" + +msgid "Php Settings" +msgstr "إعدادات PHP" + +msgid "Php is not enabled" +msgstr "لم يتم تمكين PHP" + +msgid "Please answer this Security Question" +msgstr "الرجاء الإجابة على سؤال الأمان هذا" + +#, c-format +msgid "" +"Please check the zone for %s to ensure the nameserver A records are correct." +msgstr "الرجاء التØÙ‚Ù‚ من المنطقة %s للتأكد من ØµØØ© سجلات Ø§Ù„Ù…ÙØ³Ù…اÙير A." + +msgid "Please confirm you wish to delete your DNSSEC data" +msgstr "الرجاء تأكيد رغبتك ÙÙŠ ØØ°Ù بيانات DNSSEC" + +#, c-format +msgid "Please contact %s for more info." +msgstr "يرجى الاتصال %s لمزيد من المعلومات." + +msgid "Please enter your Username and Password" +msgstr "الرجاء إدخال اسم المستخدم وكلمة المرور" + +msgid "Please generate a secret before adding the scratch codes" +msgstr "الرجاء إنشاء سرا قبل Ø¥Ø¶Ø§ÙØ© رموز Ø§Ù„ØµÙØ±" + +msgid "Please pick only one skin to apply" +msgstr "يرجى اختيار الجلد ÙˆØ§ØØ¯ Ùقط لتطبيق" + +#, c-format +msgid "Please provide an '%s'" +msgstr "يرجى تقديم \"%s\"" + +msgid "Please redirect accordingly" +msgstr "الرجاء إعادة توجيه ÙˆÙقا لذلك" + +#, c-format +msgid "Please see this URL and check for curl exit code '(%d)': %s" +msgstr "يرجى الاطلاع على هذا URL والتØÙ‚Ù‚ من رمز الخروج ØÙ„يقة '(%d)': %s" + +msgid "Please select 1 Security Question" +msgstr "الرجاء اختيار سؤال أمان 1" + +msgid "Please select 1 domain to be your default domain" +msgstr "الرجاء ØªØØ¯ÙŠØ¯ مجال 1 ليكون المجال Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Ø§Ù„Ø®Ø§Øµ بك" + +msgid "Please select at least one User" +msgstr "الرجاء ØªØØ¯ÙŠØ¯ مستخدم ÙˆØ§ØØ¯ على الأقل" + +msgid "Please select at least one domains" +msgstr "الرجاء ØªØØ¯ÙŠØ¯ نطاق ÙˆØ§ØØ¯ على الأقل" + +msgid "Please select at least one file" +msgstr "الرجاء ØªØØ¯ÙŠØ¯ Ù…Ù„Ù ÙˆØ§ØØ¯ على الأقل" + +msgid "Please select at least one item" +msgstr "الرجاء ØªØØ¯ÙŠØ¯ عنصر ÙˆØ§ØØ¯ على الأقل" + +msgid "Please select at least one package" +msgstr "الرجاء ØªØØ¯ÙŠØ¯ ØØ²Ù…Ø© ÙˆØ§ØØ¯Ø© على الأقل" + +msgid "Please select at least one widget" +msgstr "الرجاء ØªØØ¯ÙŠØ¯ عنصر واجهة مستخدم ÙˆØ§ØØ¯ على الأقل" + +msgid "Please select more than zero files to extract from the archive" +msgstr "الرجاء اختيار أكثر من ØµÙØ± Ù…Ù„ÙØ§Øª لاستخراج من الأرشيÙ" + +msgid "Please select one or more Databases" +msgstr "الرجاء ØªØØ¯ÙŠØ¯ قاعدة بيانات ÙˆØ§ØØ¯Ø© أو أكثر" + +msgid "Please select only 1 cronjob to edit" +msgstr "الرجاء اختيار 1 كرونجوب Ùقط Ù„ØªØØ±ÙŠØ±" + +#, c-format +msgid "Please set a limit between 1 and %d" +msgstr "الرجاء تعيين ØØ¯ بين 1 Ùˆ %d" + +msgid "Please specify 'who' to get" +msgstr "يرجى ØªØØ¯ÙŠØ¯ \"من\" Ù„Ù„ØØµÙˆÙ„ على" + +msgid "Please specify add or delete" +msgstr "يرجى ØªØØ¯ÙŠØ¯ Ø¥Ø¶Ø§ÙØ© أو ØØ°Ù" + +#, c-format +msgid "Please unlink all IPs from '%s' prior to deleting it." +msgstr "الرجاء إلغاء ربط ÙƒØ§ÙØ© برامج العمل الدولية من \"%s\" قبل ØØ°Ùها." + +msgid "Please use all lower case characters in the username" +msgstr "الرجاء استخدام جميع Ø£ØØ±Ù Ø§Ù„ØØ§Ù„Ø© الأقل ÙÙŠ اسم المستخدم" + +msgid "Plugin Manager" +msgstr "مدير البرنامج المساعد" + +msgid "Plugin Uploaded" +msgstr "تØÙ…يل البرنامج المساعد" + +msgid "Plugin(s) Installed" +msgstr "المكون الإضاÙÙŠ (البرامج) المثبتة" + +msgid "Plugin(s) Un-Installed" +msgstr "البرنامج المساعد (البرامج) غير مثبت" + +msgid "Plugin(s) Updated" +msgstr "المساعد (Ù‚) ØªØØ¯ÙŠØ«" + +msgid "Plugins" +msgstr "Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª" + +#, c-format +msgid "Pointer '%s' does not belong to you." +msgstr "المؤشر '%s' لا ينتمي إليك." + +msgid "Pop" +msgstr "POP" + +msgid "Post Scripts" +msgstr "نشر البرامج النصية" + +msgid "Post scripts" +msgstr "نشر البرامج النصية" + +msgid "Pre-backup hard-link check" +msgstr "التØÙ‚Ù‚ من الارتباط الثابت قبل النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ" + +msgid "Preparing 'domains' data" +msgstr "إعداد بيانات \"المجالات\"" + +msgid "Preparing data (no 'domains')" +msgstr "إعداد البيانات (بدون 'المجالات')" + +msgid "Present" +msgstr "ØØ§Ø¶Ø±" + +msgid "" +"Preserving the web data only applies to /domains/domain.com. Other areas " +"like E-Mail data will not be preserved." +msgstr "" +"يتم Ø§Ù„Ø§ØØªÙاظ ببيانات الويب Ùقط على /domains/domain.com. لن يتم Ø§Ù„Ø§ØØªÙاظ " +"بالمناطق الأخرى مثل بيانات البريد الإلكتروني." + +msgid "Print" +msgstr "طباعة" + +msgid "Priority" +msgstr "الأولوية" + +msgid "Private Directory" +msgstr "دليل خاص" + +msgid "Privileges" +msgstr "امتيازات" + +#, c-format +msgid "Process ID %d is not 'dataskq'. It's '%s'" +msgstr "معر٠العملية %d ليس 'dataskq'. إنها \"%s\"" + +msgid "Process Monitor" +msgstr "مراقبة العملية" + +msgid "Process is running" +msgstr "العملية قيد التشغيل" + +msgid "Process is stopped" +msgstr "تم إيقا٠العملية" + +msgid "Processor Name" +msgstr "اسم المعالج" + +msgid "Processor Speed (MHz)" +msgstr "سرعة المعالج (ميغا هرتز)" + +msgid "Progress" +msgstr "التقدم" + +msgid "Protect" +msgstr "الØÙ…اية" + +msgid "Protected directory name contains invalid characters. Keep it simple" +msgstr "ÙŠØØªÙˆÙŠ Ø§Ø³Ù… الدليل المØÙ…ÙŠ على Ø£ØØ±Ù غير ØµØ§Ù„ØØ©. يبقيه بسيط" + +msgid "" +"Protecting directories has been disabled with the " +"filemanager_disable_features option" +msgstr "تم تعطيل ØÙ…اية الدلائل باستخدام خيار filemanager_disable_features" + +msgid "Provide either an IP, an IP range, domain, or wildcard domain." +msgstr "توÙير إما IP أو نطاق IP أو مجال أو مجال بدل." + +msgid "Provided password is not correct." +msgstr "كلمة المرور Ø§Ù„Ù…ØªÙˆÙØ±Ø© غير صØÙŠØØ©." + +msgid "Provided value is not a Username or Email address" +msgstr "القيمة المقدمة ليست اسم مستخدم أو عنوان بريد إلكتروني" + +msgid "Provided value is not valid." +msgstr "القيمة المقدمة غير صØÙŠØØ©." + +msgid "Proxy socket address" +msgstr "" + +msgid "Publish" +msgstr "نشر" + +msgid "Purge" +msgstr "تطهير" + +msgid "Purge Archives" +msgstr "تطهير المØÙوظات" + +msgid "Purge From" +msgstr "تطهير من" + +#, c-format +msgid "Purge in %s" +msgstr "التطهير ÙÙŠ %s" + +msgid "Ranges must be put in \"quotes\"" +msgstr "يجب وضع النطاقات ÙÙŠ \"عروض الأسعار\"" + +msgid "Re-sign your zone." +msgstr "إعادة التوقيع منطقتك." + +#, c-format +msgid "Read error with %s: %s" +msgstr "خطأ ÙÙŠ القراءة مع %s: %s" + +msgid "Reason:" +msgstr "السبب:" + +msgid "Reboot" +msgstr "إعادة التشغيل" + +msgid "Receive all multicast packets." +msgstr "" + +msgid "Received" +msgstr "تم الاستلام" + +msgid "Received Emails" +msgstr "رسائل البريد الإلكتروني التي تم تلقيها" + +msgid "Reconfiguration Error" +msgstr "خطأ إعادة تشكيل" + +msgid "Record Added" +msgstr "تمت Ø¥Ø¶Ø§ÙØ© السجل" + +#, fuzzy +#| msgid "Record Added" +msgid "Record Edited" +msgstr "تمت Ø¥Ø¶Ø§ÙØ© السجل" + +msgid "Records Deleted" +msgstr "السجلات Ø§Ù„Ù…ØØ°ÙˆÙØ©" + +msgid "Recursive" +msgstr "العوديه" + +#, c-format +msgid "Recursive search at max depth on %s" +msgstr "Ø¨ØØ« متكرر ÙÙŠ العمق الأقصى على %s" + +msgid "Recursively" +msgstr "شكل متكرر" + +msgid "" +"Recursively resetting ownership has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"تم تعطيل ملكية إعادة التعيين بشكل متكرر مع خيار filemanager_disable_features" + +msgid "Redirect Added" +msgstr "إعادة التوجيه Ø§Ù„Ù…Ø¶Ø§ÙØ©" + +msgid "Redirect URL" +msgstr "إعادة توجيه للرابط URL" + +msgid "Redirect(s) deleted" +msgstr "إعادة التوجيه (إعادة التوجيه) Ø§Ù„Ù…ØØ°ÙˆÙØ©" + +msgid "Refresh" +msgstr "ØªØØ¯ÙŠØ«" + +msgid "Related" +msgstr "ذا صلة" + +msgid "Reload" +msgstr "إعادة تØÙ…يل" + +msgid "Reload requested" +msgstr "إعادة التØÙ…يل المطلوبة" + +msgid "Remote Mail" +msgstr "البريد البعيد" + +msgid "Remove" +msgstr "إزالة" + +msgid "Remove DNS records for IP(s)" +msgstr "إزالة سجلات DNS لـ IP (السجلات)" + +msgid "Remove DNSSEC" +msgstr "إزالة DNSSEC" + +msgid "Remove Directory Contents" +msgstr "إزالة Ù…ØØªÙˆÙŠØ§Øª الدليل" + +msgid "Remove From Skip List" +msgstr "إزالة من قائمة التخطي" + +msgid "Remove from reseller" +msgstr "إزالة من بائع التجزئة" + +#, c-format +msgid "Removed user from %s's list" +msgstr "مستخدم تمت إزالته من قائمة %s" + +msgid "Rename" +msgstr "إعادة تسمية" + +msgid "Rename Domain" +msgstr "إعادة تسمية المجال" + +msgid "" +"Renaming files has been disabled with the filemanager_disable_features option" +msgstr "" +"تم تعطيل إعادة تسمية Ø§Ù„Ù…Ù„ÙØ§Øª باستخدام الخيار filemanager_disable_features" + +msgid "Repair" +msgstr "إصلاØ" + +msgid "Replies" +msgstr "الردود" + +msgid "Reply" +msgstr "الرد" + +msgid "Reply Sent" +msgstr "رد تم إرساله" + +msgid "Report of false password reset request" +msgstr "تقرير طلب إعادة تعيين كلمة المرور الخاطئة" + +msgid "Report sent to the server admins" +msgstr "إرسال التقرير إلى مسؤولي الملقم" + +msgid "Request added to task.queue" +msgstr "الطلب الذي تمت Ø¥Ø¶Ø§ÙØªÙ‡ إلى task.queue" + +#, c-format +msgid "Request: %s" +msgstr "الطلب: %s" + +#, c-format +msgid "Requested LetsEncrypt value of '%s' is not an allowed value." +msgstr "مطلوب LetsEncrypt قيمة '%s' ليست قيمة Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§." + +#, c-format +msgid "Requested filesize (%lld) exceeds the maxfilesize value (%lld)" +msgstr "ØØ¬Ù… Ø§Ù„Ù…Ù„ÙØ§Øª المطلوبة (%lld) يتجاوز قيمة maxfilesize (%lld)" + +#, fuzzy, c-format +#| msgid "'%s' must be '%s' or '%s'" +msgid "Required: '%s' or '%s'" +msgstr "يجب أن يكون \"%s\" \"%s\" أو \"%s\"" + +msgid "Reseller" +msgstr "موزع" + +#, fuzzy +#| msgid "Deleted User Bandwidth" +msgid "Reseller Bandwidth" +msgstr "نطاق عرض النطاق الترددي للمستخدم Ø§Ù„Ù…ØØ°ÙˆÙ" + +msgid "Reseller History" +msgstr "تاريخ البائعين" + +msgid "Reseller IP Management" +msgstr "إدارة IP الموزع" + +msgid "Reseller Plugins" +msgstr "Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª الموزعة" + +#, fuzzy +#| msgid "Reseller" +msgid "Reseller Quota" +msgstr "موزع" + +#, fuzzy +#| msgid "Reseller History" +msgid "Reseller Resource Limits" +msgstr "تاريخ البائعين" + +msgid "Reseller Statistics" +msgstr "Ø¥ØØµØ§Ø¡Ø§Øª الموزعين" + +msgid "Reseller created" +msgstr "تم إنشاء موزع" + +msgid "Reseller deleted" +msgstr "ØØ°Ù موزع" + +msgid "Reseller is assigned zero IP's. Cannot create a domain without an ip." +msgstr "الموزع هو تعيين ØµÙØ± IP. لا يمكن إنشاء مجال بدون ip." + +#, c-format +msgid "Reseller only got %s of their %s ip." +msgid_plural "Reseller only got %s of their %s ips." +msgstr[0] "الموزع Ùقط ØØµÙ„ت على %s من %s IP." +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, fuzzy +#| msgid "Reseller" +msgid "Reseller's IP" +msgstr "موزع" + +msgid "Reseller::add_widgets_to_acccounts: Invalid widget level" +msgstr "البائع::add_widgets_to_acccounts: مستوى القطعة غير صالØ" + +msgid "Reseller::delete_widgets_from_accounts: Invalid widget level" +msgstr "موزع::d_widgets_from_accounts: مستوى القطعة غير صالØ" + +msgid "Reset" +msgstr "إعادة تعيين" + +msgid "Reset Owner" +msgstr "إعادة تعيين المالك" + +msgid "Reset Ownership" +msgstr "إعادة تعيين الملكية" + +msgid "Reset Today" +msgstr "إعادة التعيين اليوم" + +msgid "Reset Uses" +msgstr "إعادة تعيين الاستخدامات" + +msgid "" +"Resetting file ownership has been disabled with the " +"filemanager_disable_features option" +msgstr "" + +#, fuzzy +#| msgid "Reseller created" +msgid "Resources allocated." +msgstr "تم إنشاء موزع" + +msgid "Restart" +msgstr "إعادة التشغيل" + +msgid "Restore" +msgstr "استعادة" + +msgid "Restore Complete!" +msgstr "استعادة كاملة!" + +#, c-format +msgid "Restore Error with Nginx Unit: %s" +msgstr "استعادة الخطأ مع ÙˆØØ¯Ø© Nginx: %s" + +#, c-format +msgid "" +"Restore of account '%s' to creator '%s' has been denied, as this account " +"already exists under the control of creator '%s'" +msgstr "" +"تم Ø±ÙØ¶ استعادة Ø§Ù„ØØ³Ø§Ø¨ \"%s\" إلى \"%s\" للمنشئ ØŒ لأن هذا Ø§Ù„ØØ³Ø§Ø¨ موجود Ø¨Ø§Ù„ÙØ¹Ù„ " +"ØªØØª سيطرة منشئ %s" + +msgid "Restore will run in the background" +msgstr "سيتم تشغيل الاستعادة ÙÙŠ الخلÙية" + +msgid "Restores added to Queue" +msgstr "الاستعادة Ø§Ù„Ù…Ø¶Ø§ÙØ© إلى قائمة الانتظار" + +msgid "Restoring Databases" +msgstr "استعادة قواعد البيانات" + +msgid "Restoring Domains Data" +msgstr "استعادة بيانات المجالات" + +msgid "Restoring E-Mail Data" +msgstr "استعادة بيانات البريد الإلكتروني" + +msgid "Restoring E-Mail Settings" +msgstr "استعادة إعدادات البريد الإلكتروني" + +msgid "Restoring Extra Admin Data" +msgstr "استعادة بيانات المسؤول الإضاÙÙŠ" + +msgid "Restoring Extra Reseller Data" +msgstr "استعادة بيانات الموزع الإضاÙÙŠ" + +msgid "Restoring Extra User Data" +msgstr "استعادة بيانات المستخدم الإضاÙية" + +msgid "Restoring FTP" +msgstr "استعادة FTP" + +msgid "Restoring extra E-Mail items" +msgstr "استعادة عناصر البريد الإلكتروني الإضاÙية" + +msgid "" +"Restoring files has been disabled with the filemanager_disable_features " +"option" +msgstr "تم تعطيل استعادة Ø§Ù„Ù…Ù„ÙØ§Øª باستخدام الخيار filemanager_disable_features" + +msgid "Result" +msgstr "النتيجة" + +msgid "Result of file copy" +msgstr "نتيجة نسخة الملÙ" + +msgid "Result of file move" +msgstr "نتيجة نقل الملÙ" + +msgid "Results" +msgstr "النتائج" + +msgid "Retries" +msgstr "" + +#, fuzzy +#| msgid "retry" +msgid "Retry" +msgstr "أعد Ø§Ù„Ù…ØØ§ÙˆÙ„Ø©" + +#, c-format +msgid "Return code 3XX(%d) requires a location" +msgstr "رمز الإرجاع 3XX(%d) يتطلب موقع" + +#, c-format +msgid "Return code: %s" +msgstr "رمز الإرجاع: %s" + +msgid "Return with httpd code" +msgstr "" + +msgid "" +"Revoking all privileges would delete the User from the mysql.db. Please " +"grant at least 1 privilege." +msgstr "" +"إلغاء جميع الامتيازات من شأنه ØØ°Ù المستخدم من الخلية .db. يرجى Ù…Ù†Ø Ø§Ù…ØªÙŠØ§Ø² 1 " +"على الأقل." + +msgid "Rewrite Apache" +msgstr "إعادة كتابة أباتشي" + +msgid "RoundCube missing direct_login option. Please re-install RoundCube." +msgstr "خيار direct_login Ù…Ùقود RoundCube. الرجاء إعادة تثبيت RoundCube." + +#, c-format +msgid "Route '%s' does not end with '%s'" +msgstr "الطريق '%s' لا ينتهي مع '%s'" + +msgid "Rules Reset" +msgstr "إعادة تعيين القواعد" + +msgid "Run Now" +msgstr "انطلق الأن" + +msgid "Running" +msgstr "قيد التشغيل" + +msgid "SMTP Log" +msgstr "سجل SMTP" + +msgid "SMTP Server" +msgstr "پروتکل ارسال ایمیل ساده" + +#, fuzzy +#| msgid "Sender Host" +msgid "SNI Host" +msgstr "مضي٠المرسل" + +msgid "SNI is disabled for this domain" +msgstr "" + +msgid "SSH Key Modified" +msgstr "SSH Ù…ÙØªØ§Ø تعديل" + +msgid "SSH Key authorized" +msgstr "SSH Ù…ÙØªØ§Ø معتمد" + +msgid "SSH Key created" +msgstr "SSH Ù…ÙØªØ§Ø تم إنشاؤه" + +msgid "SSH Key deleted" +msgstr "Ù…ÙØªØ§Ø SSH Ù…ØØ°ÙˆÙ" + +msgid "SSH Keys" +msgstr "Ù…ÙØ§ØªÙŠØ SSH" + +msgid "SSH is not enabled" +msgstr "لم يتم تمكين SSH" + +msgid "SSL Certificates" +msgstr "شهادات SSL" + +msgid "SSL is not enabled for this domain" +msgstr "لم يتم تمكين SSL لهذا المجال" + +msgid "Safe Mode Disabled on selected domains" +msgstr "تم تعطيل الوضع الآمن على المجالات Ø§Ù„Ù…ØØ¯Ø¯Ø©" + +msgid "Safe Mode Enabled on selected domains" +msgstr "تمكين الوضع الآمن على المجالات Ø§Ù„Ù…ØØ¯Ø¯Ø©" + +msgid "Save" +msgstr "ØÙظ" + +msgid "Save Awstats" +msgstr "ØÙظ أوستاتس" + +msgid "Save Comments" +msgstr "ØÙظ التعليقات" + +msgid "Save E-Mail" +msgstr "ØÙظ البريد الإلكتروني" + +msgid "Save Increase" +msgstr "ØÙظ زيادة" + +msgid "Save Language" +msgstr "ØÙظ اللغة" + +msgid "Save Limit" +msgstr "ØÙظ Ø§Ù„ØØ¯" + +msgid "Save Limit Notice" +msgstr "ØÙظ إشعار Ø§Ù„ØØ¯" + +msgid "Save Name" +msgstr "ØÙظ الاسم" + +msgid "Save Nameservers" +msgstr "ØÙظ خوادم الأسماء" + +msgid "Save Skin" +msgstr "ØÙظ البشرة" + +msgid "" +"Saving/Editing files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"تم تعطيل ØÙظ/ØªØØ±ÙŠØ± Ø§Ù„Ù…Ù„ÙØ§Øª باستخدام الخيار filemanager_disable_features" + +msgid "Scratch Codes" +msgstr "رموز الخدش" + +msgid "Scratch codes" +msgstr "رموز الخدش" + +msgid "Script output" +msgstr "إخراج البرنامج النصي" + +msgid "Search" +msgstr "Ø¨ØØ«" + +msgid "SecRuleRemoveById id is blank" +msgstr "تعري٠SecRuleRemoveById ÙØ§Ø±Øº" + +msgid "Second PHP" +msgstr "بي بي الثانية" + +msgid "Secure Socket Layer (ssl)" +msgstr "طبقة مأخذ التوصيل الآمنة (ssl)" + +#, c-format +msgid "Secured Home of %s" +msgstr "منزل آمن %s" + +#, c-format +msgid "Security Answer is too long max=%d" +msgstr "الإجابة على الأمان طويلة جداً ÙƒØØ¯ أقصى = %d" + +msgid "Security Question" +msgstr "السؤال الامني" + +msgid "Security Question set" +msgstr "مجموعة أسئلة الأمان" + +msgid "Security Questions" +msgstr "أسئلة الأمان" + +msgid "Security Questions are disabled" +msgstr "تم تعطيل أسئلة الأمان" + +msgid "Security Questions deleted" +msgstr "أسئلة الأمان Ø§Ù„Ù…ØØ°ÙˆÙØ©" + +#, c-format +msgid "See %sthis guide%s to fix it." +msgstr "راجع %sهذا الدليل%s لإصلاØÙ‡." + +msgid "Select" +msgstr "ØªØØ¯ÙŠØ¯" + +msgid "Select MX Template" +msgstr "ØªØØ¯ÙŠØ¯ قالب MX" + +#, c-format +msgid "Select an IP to Link to %s" +msgstr "ØØ¯Ø¯ عنوان IP للارتباط %s" + +msgid "Selected Content-Type is not valid." +msgstr "نوع Ø§Ù„Ù…ØØªÙˆÙ‰ Ø§Ù„Ù…ØØ¯Ø¯ غير صالØ." + +msgid "Selected Data" +msgstr "البيانات Ø§Ù„Ù…ØØ¯Ø¯Ø©" + +msgid "Selected Plugins Activated" +msgstr "تم تنشيط Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø©" + +msgid "Selected Plugins De-Activated" +msgstr "Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø© إلغاء تنشيط" + +msgid "Selected Plugins Deleted" +msgstr "تم ØØ°Ù Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø©" + +msgid "Selected Users" +msgstr "ØªØØ¯ÙŠØ¯ المستخدمين" + +msgid "Selected character-set encoding is not valid." +msgstr "ترميز مجموعة Ø§Ù„Ø£ØØ±Ù Ø§Ù„Ù…ØØ¯Ø¯Ø© غير صالØ." + +msgid "Send Count" +msgstr "إرسال عدد" + +msgid "Send Signal" +msgstr "إرسال إشارة" + +msgid "Send a Message" +msgstr "إرسال رسالة" + +msgid "Send limit must be a valid number, or blank." +msgstr "يجب أن يكون ØØ¯ الإرسال رقماً صØÙŠØØ§Ù‹ أو ÙØ§Ø±ØºØ§Ù‹." + +msgid "Sender" +msgstr "المرسل" + +msgid "Sender Host" +msgstr "مضي٠المرسل" + +#, c-format +msgid "Sender domain must match the list domain '%s', or use '%s'" +msgstr "يجب أن يتطابق مجال المرسل مع مجال القائمة '%s'ØŒ أو استخدام '%s'" + +msgid "Sent" +msgstr "أرسلت" + +msgid "Sent E-mails" +msgstr "رسائل البريد الإلكتروني المرسلة" + +msgid "Sent Emails" +msgstr "رسائل البريد الإلكتروني المرسلة" + +msgid "Sep" +msgstr "سبتمبر" + +msgid "Server" +msgstr "الخادم" + +msgid "Server History" +msgstr "Ù…ØÙوظات الخادم" + +msgid "Server Path" +msgstr "مسار الخادم" + +msgid "Service" +msgstr "الخدمة" + +msgid "Service Monitor" +msgstr "مراقبة الخدمة" + +msgid "Set" +msgstr "تعيين" + +msgid "Set 0 for unlimited. Set a blank value to reset to default." +msgstr "تعيين 0 Ù„ غير Ù…ØØ¯ÙˆØ¯. تعيين قيمة ÙØ§Ø±ØºØ© لإعادة التعيين إلى Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ." + +msgid "Set Global" +msgstr "تعيين عمومية" + +msgid "Set Global Shared" +msgstr "تعيين مشاركة عمومية" + +msgid "Set as Default" +msgstr "الوضع Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ" + +msgid "Set selected domains to be publicly viewable from" +msgstr "تعيين المجالات Ø§Ù„Ù…ØØ¯Ø¯Ø© للعرض بشكل عام من" + +msgid "Set selected to" +msgstr "تعيين Ø§Ù„Ù…ØØ¯Ø¯ إلى" + +msgid "Set to" +msgstr "تعيين رسالة لزوار" + +msgid "Setting" +msgstr "الاعدادات" + +msgid "Setting changed" +msgstr "تم تغيير الإعداد" + +msgid "" +"Setting file/directory permissions has been disabled with the " +"filemanager_disable_features option" +msgstr "تم تعطيل أذونات الملÙ/الدليل مع خيار filemanager_disable_features" + +msgid "Settings" +msgstr "الإعدادات" + +msgid "Settings Saved" +msgstr "تمّ ØÙظ الإعدادات" + +msgid "Share Selected" +msgstr "مشاركة مختارة" + +msgid "Share a static path" +msgstr "مشاركة مسار ثابت" + +msgid "Shared" +msgstr "مشاركة" + +msgid "Shared - randomly selected" +msgstr "مشترك - Ù…ØØ¯Ø¯ عشوائيًا" + +msgid "Shell Access (ssh)" +msgstr "وصول شل (ssh)" + +msgid "Shell for Resellers's Users" +msgstr "شل لمستخدمي الموزعين" + +msgid "Show" +msgstr "عرض" + +msgid "Show All Users" +msgstr "إظهار ÙƒØ§ÙØ© المستخدمين" + +msgid "Show Domain" +msgstr "إظهار الدومين" + +msgid "Sign" +msgstr "تسجيل الخروج" + +msgid "Signed" +msgstr "وقعت" + +msgid "Site Redirection" +msgstr "إعادة توجيه الموقع" + +msgid "Site Summary / Statistics / Logs" +msgstr "ملخص الموقع / Ø§Ù„Ø¥ØØµØ§Ø¦ÙŠØ§Øª / السجلات" + +msgid "Size" +msgstr "Ø§Ù„ØØ¬Ù…" + +msgid "Size is not a number" +msgstr "Ø§Ù„ØØ¬Ù… ليس رقماً" + +msgid "Skin" +msgstr "بشرة" + +#, c-format +msgid "Skin '%s' does not have any custom color variables to set" +msgstr "الجلد '%s' ليس لديها أي متغيرات اللون المخصصة لتعيين" + +msgid "Skin Installed" +msgstr "الجلد المثبتة" + +msgid "Skin Name" +msgstr "اسم البشرة" + +msgid "Skin Owner" +msgstr "مالك البشرة" + +msgid "Skin Set" +msgstr "مجموعة الجلد" + +msgid "Skin applied to all users" +msgstr "تطبيق الجلد على جميع المستخدمين" + +msgid "Skin has been customized" +msgstr "وقد تم تخصيص الجلد" + +msgid "Skin has been successfully changed" +msgstr "تم تغيير الجلد بنجاØ" + +msgid "Skins" +msgstr "x شكل" + +msgid "Skins Deleted" +msgstr "Ø£Ø³Ø·Ø Ù…ØØ°ÙˆÙØ©" + +msgid "Skip Suspended" +msgstr "تخطي مرØÙ„ياً" + +msgid "Skipped rule added" +msgstr "تمت Ø¥Ø¶Ø§ÙØ© قاعدة تم تخطيها" + +msgid "Skipping system E-Mail account" +msgstr "تخطي ØØ³Ø§Ø¨ البريد الإلكتروني للنظام" + +msgid "Slave of a load balancing bundle." +msgstr "" + +msgid "Sorry, this function does not support domain pointers at this time" +msgstr "عذراً، لا تدعم هذه الدالة مؤشرات المجال ÙÙŠ هذا الوقت" + +msgid "Sort" +msgstr "ÙØ±Ø²" + +msgid "Sort Selected Column in" +msgstr "ÙØ±Ø² العمود Ø§Ù„Ù…ØØ¯Ø¯ ÙÙŠ" + +msgid "Source Domain" +msgstr "المجال المصدر" + +#, fuzzy +#| msgid "Spambox" +msgid "Spam" +msgstr "صندوق البريد العشوائي" + +msgid "Spam Filters" +msgstr "تدريب Ù…Ø±Ø´ØØ§Øª البريد الغير مرغوب به" + +msgid "SpamAassassin is disabled on your account" +msgstr "تم تعطيل SpamAassassin على ØØ³Ø§Ø¨Ùƒ" + +msgid "SpamAssassin" +msgstr "البريد المزعج" + +msgid "Spamassassin disabled" +msgstr "تعطيل البريد العشوائي" + +msgid "Spambox" +msgstr "صندوق البريد العشوائي" + +msgid "Spamd is not running on your system." +msgstr "لا يتم تشغيل البريد غير المرغوب Ùيه على النظام الخاص بك." + +msgid "Splitting error for unix socket" +msgstr "خطأ ÙÙŠ تقسيم مأخذ التوصيل يونكس" + +msgid "Ssl" +msgstr "SSL" + +msgid "Start" +msgstr "ابدأ" + +msgid "Start Time" +msgstr "وقت البدء" + +msgid "Start Time must be before End Time." +msgstr "يجب أن يكون وقت البدء قبل وقت الانتهاء." + +msgid "State/Province must only contain letters, spaces and/or periods" +msgstr "يجب أن ØªØØªÙˆÙŠ Ø§Ù„ÙˆÙ„Ø§ÙŠØ©/المقاطعة على Ø£ØØ±Ù Ùˆ/أو Ù…Ø³Ø§ÙØ§Øª Ùˆ/أو ÙØªØ±Ø§Øª Ùقط" + +msgid "Stats links created" +msgstr "إنشاء ارتباطات Ø§Ù„Ø¥ØØµØ§Ø¦ÙŠØ§Øª" + +msgid "Stats links removed" +msgstr "تمت إزالة ارتباطات Ø§Ù„Ø¥ØØµØ§Ø¦ÙŠØ§Øª" + +msgid "Status" +msgstr "Ø§Ù„ØØ§Ù„Ø©" + +msgid "Sticky bit's not allowed: 777 is the max allowed permission" +msgstr "غير Ù…Ø³Ù…ÙˆØ Ø¨Øª لزج: 777 هو Ø§Ù„ØØ¯ الأقصى Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡ إذن" + +msgid "Stop" +msgstr "إيقاÙ" + +msgid "Stopped" +msgstr "Ù…ÙˆÙ‚ÙˆÙØ©" + +msgid "String contains an invalid email address" +msgstr "ØªØØªÙˆÙŠ Ø§Ù„Ø³Ù„Ø³Ù„Ø© على عنوان بريد إلكتروني غير صالØ" + +msgid "Sub Domains" +msgstr "المجالات Ø§Ù„ÙØ±Ø¹ÙŠØ©" + +msgid "Sub Sort" +msgstr "ÙØ±Ø² ÙØ±Ø¹ÙŠ" + +msgid "Sub Sort Selected Column in" +msgstr "ÙØ±Ø² ÙØ±Ø¹ÙŠ Ù„Ù„Ø¹Ù…ÙˆØ¯ Ø§Ù„Ù…ØØ¯Ø¯ ÙÙŠ" + +msgid "Sub-domain is forbidden" +msgstr "المجال Ø§Ù„ÙØ±Ø¹ÙŠ Ù…Ù…Ù†ÙˆØ¹" + +msgid "SubDomain Name" +msgstr "اسم النطاق Ø§Ù„ÙØ±Ø¹ÙŠ" + +msgid "Subdomain Created" +msgstr "إنشاء نطاق ÙØ±Ø¹ÙŠ" + +msgid "Subdomain Stats" +msgstr "Ø¥ØØµØ§Ø¦ÙŠØ§Øª النطاق Ø§Ù„ÙØ±Ø¹ÙŠ" + +msgid "Subdomain already exists" +msgstr "المجال Ø§Ù„ÙØ±Ø¹ÙŠ Ù…ÙˆØ¬ÙˆØ¯ Ø¨Ø§Ù„ÙØ¹Ù„" + +msgid "Subdomain created" +msgstr "المجال Ø§Ù„ÙØ±Ø¹ÙŠ Ø§Ù„Ø°ÙŠ تم إنشاؤه" + +msgid "Subdomain does not exist" +msgstr "المجال Ø§Ù„ÙØ±Ø¹ÙŠ ØºÙŠØ± موجود" + +#, c-format +msgid "Subdomain name too long. Maximum %d characters." +msgstr "اسم المجال Ø§Ù„ÙØ±Ø¹ÙŠ Ø·ÙˆÙŠÙ„ جداً. Ø§Ù„ØØ¯ الأقصى %d Ø§Ù„Ø£ØØ±Ù." + +msgid "Subdomains" +msgstr "النطاقات Ø§Ù„ÙØ±Ø¹ÙŠØ©" + +msgid "Subdomains Removed" +msgstr "إزالة نطاقات ÙØ±Ø¹ÙŠØ©" + +msgid "Subdomains deleted" +msgstr "نطاقات ÙØ±Ø¹ÙŠØ© Ù…ØØ°ÙˆÙØ©" + +msgid "Subject" +msgstr "الموضوع" + +msgid "Subject Contains" +msgstr "ÙŠØØªÙˆÙŠ Ø§Ù„Ù…ÙˆØ¶ÙˆØ¹ على" + +#, c-format +msgid "Subject prefix contains invalid characters. Use %s" +msgstr "ØªØØªÙˆÙŠ Ø¨Ø§Ø¯Ø¦Ø© الموضوع على Ø£ØØ±Ù غير ØµØ§Ù„ØØ©. استخدام %s" + +msgid "Submit" +msgstr "إرسال" + +msgid "Subscriber" +msgstr "مشترك" + +msgid "Subscribers" +msgstr "المشتركين" + +msgid "Success" +msgstr "نجاØ" + +#, c-format +msgid "Success with %s of selected widgets" +msgstr "Ø§Ù„Ù†Ø¬Ø§Ø Ù…Ø¹ %s من Ø§Ù„ØØ§Ø¬ÙŠØ§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø©" + +#, c-format +msgid "Success with '%s'" +msgstr "Ø§Ù„Ù†Ø¬Ø§Ø Ù…Ø¹ \"%s\"" + +msgid "Supports multicast" +msgstr "" + +msgid "Suspend" +msgstr "تعليق" + +msgid "Suspend / Unsuspend" +msgstr "تعليق / غير Ù…ÙØ¹Ù„ّق" + +msgid "Suspend Reason" +msgstr "سبب التوق٠المرØÙ„ÙŠ" + +msgid "Suspend at Limit" +msgstr "تعليق عند Ø§Ù„ØØ¯" + +msgid "Suspended" +msgstr "معلق" + +msgid "Syntax check has been disabled" +msgstr "تم تعطيل ÙØØµ بناء الجملة" + +msgid "System Backup" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ù„Ù†Ø¸Ø§Ù…" + +msgid "System Info" +msgstr "معلومات النظام" + +msgid "System Information" +msgstr "معلومات النظام" + +msgid "System Rebooting Now!" +msgstr "إعادة تشغيل النظام الآن!" + +msgid "System Uptime" +msgstr "وقت تشغيل النظام" + +#, c-format +msgid "" +"System account exists, but unable to read the User data files for user %s" +msgstr "ØØ³Ø§Ø¨ النظام موجود، ولكن غير قادر على قراءة Ù…Ù„ÙØ§Øª بيانات المستخدم %s" + +msgid "Systems Quotas are size 0." +msgstr "Ø§Ù„ØØµØµ النسبية للأنظمة هي Ø§Ù„ØØ¬Ù… 0." + +msgid "TB" +msgstr "تيرابايت" + +msgid "TTL has been saved" +msgstr "تم ØÙظ TTL" + +msgid "Table" +msgstr "جدول" + +msgid "Tail" +msgstr "الذيل" + +msgid "Tasks Max" +msgstr "" + +#, c-format +msgid "Temp file %s is 0 bytes after writing to disk. Will not rename it." +msgstr "%s هو المؤقت 0 بايت بعد الكتابة إلى القرص. لن يتم إعادة تسميته." + +msgid "Template does not exist" +msgstr "قالب غير موجود" + +msgid "Temporary Bandwidth Increase" +msgstr "زيادة عرض النطاق الترددي المؤقت" + +#, c-format +msgid "" +"Temporary account action lock in place. There might be some other process " +"working on the account. This should last no more than %d minutes" +msgstr "" +"تأمين إجراء Ø§Ù„ØØ³Ø§Ø¨ المؤقت ÙÙŠ مكانه. قد يكون هناك بعض العمليات الأخرى التي " +"تعمل على Ø§Ù„ØØ³Ø§Ø¨. يجب ألا يدوم هذا أكثر من %d دقيقة" + +msgid "Temporary bandwidth increase has been set" +msgstr "تم تعيين زيادة عرض النطاق الترددي المؤقتة" + +msgid "Text" +msgstr "النص" + +msgid "Text contains invalid characters" +msgstr "ÙŠØØªÙˆÙŠ Ø§Ù„Ù†Øµ على Ø£ØØ±Ù غير صØÙŠØØ©" + +msgid "That ID is not of type 'admin'" +msgstr "هذا المعر٠ليس من النوع 'المشرÙ'" + +msgid "That IP already exists on the domain" +msgstr "أن الملكية الÙكرية موجودة Ø¨Ø§Ù„ÙØ¹Ù„ على المجال" + +msgid "That IP does not exist" +msgstr "أن الملكية الÙكرية غير موجودة" + +msgid "That IP does not exist in your User's IP list" +msgstr "أن الملكية الÙكرية غير موجودة ÙÙŠ قائمة IP للمستخدم الخاص بك" + +msgid "That IP does not exist in your list" +msgstr "أن الملكية الÙكرية غير موجودة ÙÙŠ قائمتك" + +msgid "That IP is already in your list of Additional IPs" +msgstr "أن الملكية الÙكرية Ø¨Ø§Ù„ÙØ¹Ù„ ÙÙŠ قائمة IP إضاÙية" + +msgid "That IP is already owned" +msgstr "أن الملكية الÙكرية مملوكة Ø¨Ø§Ù„ÙØ¹Ù„" + +msgid "That IP is not available for linking" +msgstr "أن الملكية الÙكرية غير Ù…ØªÙˆÙØ±Ø© للربط" + +msgid "That User already exists on another server" +msgstr "هذا المستخدم موجود مسبقاً على ملقم آخر" + +msgid "That database already exists" +msgstr "قاعدة البيانات موجودة Ø¨Ø§Ù„ÙØ¹Ù„." + +msgid "That database does not belong to you" +msgstr "قاعدة البيانات هذه لا تنتمي إليك" + +msgid "That database does not exist" +msgstr "قاعدة البيانات هذه غير موجودة" + +msgid "That domain already exists" +msgstr "نطاق النظام موجود Ø¨Ø§Ù„ÙØ¹Ù„." + +msgid "That domain already exists on another server" +msgstr "هذا المجال موجود Ø¨Ø§Ù„ÙØ¹Ù„ على ملقم آخر" + +msgid "That domain does not belong to you" +msgstr "هذا المجال لا ينتمي لك" + +msgid "That domain does not exist" +msgstr "نطاق البريد الإلكتروني غير موجود." + +msgid "That domain is on the forbidden domains list" +msgstr "هذا المجال موجود ÙÙŠ قائمة المجالات Ø§Ù„Ù…ØØ¸ÙˆØ±Ø©" + +msgid "That domain is suspended. Unsuspend it before changing it's name" +msgstr "هذا المجال متوق٠مرØÙ„ياً لا تعليق عليه قبل تغيير اسمها" + +msgid "That email user does not exist" +msgstr "مستخدم البريد الإلكتروني هذا غير موجود" + +msgid "That file was empty" +msgstr "كان هذا Ø§Ù„Ù…Ù„Ù ÙØ§Ø±ØºØ§Ù‹" + +msgid "That filter already exists" +msgstr "هذا Ø§Ù„Ù…Ø±Ø´Ø Ù…ÙˆØ¬ÙˆØ¯ Ø¨Ø§Ù„ÙØ¹Ù„" + +msgid "That ftp_password file does not exist" +msgstr "هذا المل٠ftp_password غير موجود" + +msgid "That is an invalid email address / email list" +msgstr "هذا هو عنوان البريد الإلكتروني غير ØµØ§Ù„ØØ© / قائمة البريد الإلكتروني" + +msgid "That is an invalid filename" +msgstr "اسم مل٠غير صالØ" + +msgid "That is not a valid access host" +msgstr "هذا ليس مضي٠وصول صالØ" + +msgid "" +"That is not a valid path. Either it is not in your home directory, it " +"contains symbolic links, or it contains invalid characters" +msgstr "" +"هذا ليس مساراً صØÙŠØØ§Ù‹. إما أنه ليس ÙÙŠ الدليل الرئيسي الخاص بك، أو أنه ÙŠØØªÙˆÙŠ " +"على ارتباطات رمزية، أو أنه ÙŠØØªÙˆÙŠ Ø¹Ù„Ù‰ Ø£ØØ±Ù غير ØµØ§Ù„ØØ©" + +msgid "" +"That is not a valid path. Either it is not in your home directory, it " +"doesn't exist, it contains symbolic links, or it contains invalid characters" +msgstr "" +"هذا ليس مساراً صØÙŠØØ§Ù‹. إما أنه ليس ÙÙŠ الدليل الرئيسي الخاص بك، أو أنه غير " +"موجود، أو ÙŠØØªÙˆÙŠ Ø¹Ù„Ù‰ ارتباطات رمزية، أو ÙŠØØªÙˆÙŠ Ø¹Ù„Ù‰ Ø£ØØ±Ù غير ØµØ§Ù„ØØ©" + +msgid "That is not a valid quota" +msgstr "هذه ليست ØØµØ© نسبية ØµØ§Ù„ØØ©" + +msgid "That is not a valid username" +msgstr "الرجاءادخال اسم مستخدم صØÙŠØ." + +msgid "That is not your domain" +msgstr "هذا ليس مجالك" + +msgid "That is not your system password" +msgstr "هذه ليست كلمة مرور النظام" + +msgid "" +"That is the hostname which is reserved. Either change the hostname, or use a " +"different domain" +msgstr "" +"هذا هو اسم المضي٠الذي Ù…ØØ¬ÙˆØ². إما تغيير اسم Ø§Ù„Ù…Ø¶ÙŠÙØŒ أو استخدام مجال مختلÙ" + +msgid "That isn't a gzip file" +msgstr "هذا ليس مل٠gzip" + +msgid "That key does not exist" +msgstr "هذا Ø§Ù„Ù…ÙØªØ§Ø غير موجود" + +msgid "That password is incorrect" +msgstr "كلمة المرور هذه غير صØÙŠØØ©" + +msgid "That path isn't protectable" +msgstr "هذا الطريق غير قابل للØÙ…اية" + +msgid "That pop account doesn't exist" +msgstr "ØØ³Ø§Ø¨ البوب هذا غير موجود" + +#, c-format +msgid "That skin cannot be customized. It's skin.conf requires %s" +msgstr "لا يمكن تخصيص هذا الجلد. انها skin.conf يتطلب %s" + +msgid "That skin does not exist" +msgstr "هذا الجلد غير موجود" + +msgid "That skin is not in your list" +msgstr "هذا الجلد ليس ÙÙŠ قائمتك" + +msgid "That skin name already exists in your Reseller skin list" +msgstr "اسم الجلد هذا موجود Ø¨Ø§Ù„ÙØ¹Ù„ ÙÙŠ قائمة بشرة الموزع" + +msgid "That user already Exists" +msgstr "العضو موجود مسبقاً" + +msgid "That user already exists" +msgstr "العضو موجود مسبقاً" + +#, c-format +msgid "" +"That user contains the ftp separator (%c) which cannot be in the username." +msgstr "" +"ÙŠØØªÙˆÙŠ Ù‡Ø°Ø§ المستخدم على ÙØ§ØµÙ„ ftp (%c) الذي لا يمكن أن يكون ÙÙŠ اسم المستخدم." + +msgid "That user does not belong to you" +msgstr "ذلك المستخدم لا ينتمي إليك" + +msgid "That user does not exist" +msgstr "المستخدم غير موجود" + +msgid "" +"That user does not exist, please create the user before changing their " +"privileges" +msgstr "هذا المستخدم غير موجود، الرجاء إنشاء المستخدم قبل تغيير امتيازاتها" + +msgid "That user doesn't exist" +msgstr "هذا المستخدم غير موجود" + +msgid "That user is reserved for the anonymous account" +msgstr "Ù…ØØ¬ÙˆØ²Ø© هذا المستخدم Ù„ØØ³Ø§Ø¨ مجهول" + +msgid "That username already exists on the system" +msgstr "اسم المستخدم هذا موجود Ø¨Ø§Ù„ÙØ¹Ù„ على النظام" + +msgid "That username is a reserved system name" +msgstr "اسم المستخدم هذا هو اسم نظام Ù…ØØ¬ÙˆØ²" + +msgid "That zone already exists" +msgstr "تلك المنطقة موجودة Ø¨Ø§Ù„ÙØ¹Ù„" + +msgid "Thats a reserved skin name." +msgstr "Thats اسم الجلد Ù…ØÙوظة." + +#, c-format +msgid "The %s backups have been created in %s" +msgstr "تم إنشاء %s النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ© ÙÙŠ %s" + +msgid "The 'ttl' value passed is not a number or is too large" +msgstr "قيمة 'ttl' التي تم تمريرها ليست رقماً أو كبيرة جداً" + +msgid "The Administrator has disabled the User Backup Function" +msgstr "قام المسؤول بتعطيل ÙˆØ¸ÙŠÙØ© النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ù„Ù„Ù…Ø³ØªØ®Ø¯Ù…" + +msgid "" +"The CA Certificate will not be used. The file will remain, but will not be " +"included." +msgstr "" +"لن يتم استخدام شهادة المرجع المصدق .. سيبقى Ø§Ù„Ù…Ù„ÙØŒ ولكن لن يتم تضمينه." + +msgid "" +"The CC value entered will create an infinite loop. Please use a different " +"CC value." +msgstr "سيتم إدخال قيمة CC ØÙ„قة لا نهائية. الرجاء استخدام قيمة نسخة Ù…Ø®ØªÙ„ÙØ©." + +#, c-format +msgid "The E-Mail '%s' contains invalid characters" +msgstr "ÙŠØØªÙˆÙŠ \"%s\" البريد الإلكتروني على Ø£ØØ±Ù غير صØÙŠØØ©" + +#, c-format +msgid "The IP %s does not exist. User %s will not be created" +msgstr "لا يوجد %s IP. لن يتم إنشاء %s المستخدم" + +#, c-format +msgid "The IP %s has provided the correct password for the %s account." +msgstr "وقد ÙˆÙØ±Øª %s IP كلمة المرور الصØÙŠØØ© Ù„ØØ³Ø§Ø¨ %s." + +#, c-format +msgid "The OS being updated %s has expired. No further updates can be done" +msgstr "" +"انتهت مدة صلاØÙŠØ© نظام التشغيل الذي يتم ØªØØ¯ÙŠØ«Ù‡ %s. لا يمكن إجراء ØªØØ¯ÙŠØ«Ø§Øª أخرى" + +msgid "The Ticket System is not enabled." +msgstr "لم يتم تمكين نظام التذاكر." + +msgid "The User backups have been uploaded to" +msgstr "تم تØÙ…يل النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ© للمستخدم" + +#, c-format +msgid "The User files have been restored from %s" +msgstr "تمت استعادة Ù…Ù„ÙØ§Øª المستخدم من %s" + +msgid "The Users display cache will be updated momentarily." +msgstr "سيتم ØªØØ¯ÙŠØ« ذاكرة التخزين المؤقت عرض المستخدمين Ù„Ù„ØØ¸Ø§Øª." + +msgid "The addresses are lost when the interface goes down." +msgstr "" + +msgid "" +"The cache is being updated, the current values may not be correct. Please " +"refresh the page in 1 minute." +msgstr "" +"ذاكرة التخزين المؤقت يتم ØªØØ¯ÙŠØ«Ù‡Ø§ØŒ قد لا تكون القيم Ø§Ù„ØØ§Ù„ية صØÙŠØØ©. يرجى ØªØØ¯ÙŠØ« " +"Ø§Ù„ØµÙØØ© ÙÙŠ دقيقة ÙˆØ§ØØ¯Ø©." + +msgid "" +"The certificate and key do not match. Please ensure you are using the " +"correct key with this certificate" +msgstr "" +"الشهادة ÙˆØ§Ù„Ù…ÙØªØ§Ø غير متطابقين. الرجاء التأكد من أنك تستخدم Ø§Ù„Ù…ÙØªØ§Ø الصØÙŠØ " +"مع هذه الشهادة" + +msgid "" +"The clipboard has been disabled with the filemanager_disable_features option" +msgstr "تم تعطيل Ø§Ù„ØØ§Ùظة مع الخيار filemanager_disable_features" + +msgid "The code is valid, but for a different time." +msgstr "التعليمات البرمجية ØµØ§Ù„ØØ© ولكن لوقت مختلÙ." + +msgid "The command cannot contain any newline characters" +msgstr "لا يمكن أن ÙŠØØªÙˆÙŠ Ø§Ù„Ø£Ù…Ø± على أي Ø£ØØ±Ù سطر جديد" + +#, c-format +msgid "The database '%s' does not belong to you" +msgstr "قاعدة البيانات '%s' لا تنتمي لك" + +msgid "The day of month is not a valid cron value (1-31)" +msgstr "يوم الشهر ليس قيمة كرون ØµØ§Ù„ØØ© (1-31)" + +msgid "The day of week is not a valid cron value (0-7)" +msgstr "يوم الأسبوع ليس قيمة كرون ØµØ§Ù„ØØ© (0-7)" + +msgid "The default has been set" +msgstr "تم تعيين الإعداد Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ" + +#, c-format +msgid "" +"The directory %s seems to be owned by 'apache'. Try using the 'Reset Owner' " +"option, then try again." +msgstr "" +"الدليل %s يبدو أن مملوكة من قبل 'أباتشي'. جرّب استخدام خيار \"إعادة تعيين " +"المالك\"ØŒ ثم ØØ§ÙˆÙ„ مرة أخرى." + +#, c-format +msgid "" +"The disk usage for the selected Users totals more than %d MB, thus will be " +"removed in the background." +msgstr "" +"إجماليات استخدام القرص للمستخدمين Ø§Ù„Ù…ØØ¯Ø¯ÙŠÙ† أكثر من %d ميغابايت، وبالتالي " +"سيتم إزالة ÙÙŠ الخلÙية." + +#, c-format +msgid "The domain %s does not belong to you." +msgstr "المجال %s لا ينتمي لك." + +#, c-format +msgid "" +"The domain %s does not belong to you. The subdomain will not be created." +msgstr "المجال %s لا ينتمي لك. لن يتم إنشاء المجال Ø§Ù„ÙØ±Ø¹ÙŠ." + +msgid "" +"The domain entered is invalid. It must be of the form 'sourcedomain.com'" +msgstr "" +"المجال الذي تم إدخاله غير صالØ. يجب أن يكون من النموذج \"sourcedomain.com\"" + +msgid "The domain must not match your hostname." +msgstr "يجب ألا يتطابق المجال مع اسم المضيÙ." + +#, c-format +msgid "" +"The download of %s has failed the md5sum check. Please check the file and " +"retry the update again. Not extracted." +msgstr "" +"ÙØ´Ù„ تنزيل %s الاختيار md5sum. الرجاء التØÙ‚Ù‚ من المل٠وإعادة Ù…ØØ§ÙˆÙ„Ø© Ø§Ù„ØªØØ¯ÙŠØ« " +"مرة أخرى. لم يتم استخراجها." + +msgid "The e-mail containing your new password has been sent." +msgstr "تم إرسال البريد الإلكتروني الذي ÙŠØØªÙˆÙŠ Ø¹Ù„Ù‰ كلمة المرور الجديدة." + +msgid "The email address provided is not a valid email address" +msgstr "عنوان البريد الإلكتروني المقدم ليس عنوان بريد إلكتروني صالØ" + +msgid "The entered path must be a-zA-Z0-9" +msgstr "يجب أن يكون المسار المدخل a-zA-Z0-9" + +msgid "The expiry entered is too far in the future" +msgstr "إن انتهاء الصلاØÙŠØ© الذي تم إدخاله بعيد جداً ÙÙŠ المستقبل" + +#, c-format +msgid "The file %s has more than 1 hard link" +msgstr "ÙŠØØªÙˆÙŠ %s المل٠على أكثر من 1 ارتباط ثابت" + +msgid "The file is generated when the account is reset." +msgstr "يتم إنشاء المل٠عند إعادة تعيين Ø§Ù„ØØ³Ø§Ø¨." + +msgid "The file must be of the form: type.creator.username.tar.gz" +msgstr "يجب أن يكون المل٠من النموذج: type.creator.username.tar.gz" + +msgid "The file must be of the form: username.tar.gz" +msgstr "يجب أن يكون المل٠من النموذج: اسم المستخدم.tar.gz" + +#, c-format +msgid "The file: '%s' is not in the form username.tar.gz" +msgstr "الملÙ: '%s' ليس ÙÙŠ نموذج اسم المستخدم.tar.gz" + +msgid "The following file could not be found. No reset required" +msgstr "تعذر العثور على المل٠التالي. لا إعادة تعيين مطلوبة" + +#, c-format +msgid "The following hard links have been found under User %s:" +msgstr "تم العثور على الارتباطات الثابتة التالية ضمن %s المستخدم:" + +msgid "The following test database tables have been found:" +msgstr "تم العثور على جداول قاعدة بيانات الاختبار التالية:" + +#, c-format +msgid "The ftp user %s does not exist in passwd file %s" +msgstr "%s مستخدم ftp غير موجود ÙÙŠ %s مل٠%s" + +msgid "The full format name entered does not end with the name of the zone" +msgstr "اسم التنسيق الكامل الذي تم إدخاله لا ينتهي باسم المنطقة" + +msgid "The local url path or the destination url is invalid." +msgstr "مسار url المØÙ„ÙŠ أو عنوان URL الوجهة غير صالØ." + +msgid "The location has not changed" +msgstr "لم يتم تغيير الموقع" + +msgid "The lost password feature is disabled" +msgstr "تم تعطيل ميزة كلمة المرور المÙقودة" + +msgid "The max upload size cannot be 0" +msgstr "لا يمكن أن يكون ØØ¬Ù… التØÙ…يل الأقصى 0" + +#, fuzzy, c-format +#| msgid "The owner of %s is not %s" +msgid "The maximum for %s is %s" +msgstr "مالك %s ليس %s" + +#, c-format +msgid "The maximum value is %d" +msgstr "القيمة القصوى هي %d" + +#, fuzzy, c-format +#| msgid "The owner of %s is not %s" +msgid "The minimum for %s is %s" +msgstr "مالك %s ليس %s" + +msgid "The month is not a valid cron value (1-12)" +msgstr "الشهر ليس قيمة كرون ØµØ§Ù„ØØ© (1-12)" + +msgid "The name you've entered contains invalid characters" +msgstr "ÙŠØØªÙˆÙŠ Ø§Ù„Ø§Ø³Ù… الذي أدخلته على Ø£ØØ±Ù غير ØµØ§Ù„ØØ©" + +msgid "The new key was created, but there was an issue during authorization" +msgstr "تم إنشاء Ø§Ù„Ù…ÙØªØ§Ø الجديد، ولكن كانت هناك مشكلة أثناء التخويل" + +msgid "The new passwords do not match" +msgstr "كلمات المرور الجديدة غير متطابقة" + +msgid "The number and type of ticket is required" +msgstr "عدد ونوع التذكرة مطلوب" + +#, c-format +msgid "The owner of %s is not %s" +msgstr "مالك %s ليس %s" + +msgid "The password changing feature has been disabled" +msgstr "تم تعطيل ميزة تغيير كلمة المرور" + +#, c-format +msgid "The path %s already exists" +msgstr "المسار %s موجود Ø¨Ø§Ù„ÙØ¹Ù„" + +msgid "The path already exists, but is not a directory" +msgstr "المسار موجود Ø¨Ø§Ù„ÙØ¹Ù„ØŒ ولكنه ليس دليلاً" + +msgid "" +"The process is currently being used to execute this request so it will be " +"executed shortly by the Task Queue." +msgstr "" +"العملية قيد الاستخدام ØØ§Ù„ياً لتنÙيذ هذا الطلب بØÙŠØ« سيتم تنÙيذه قريباً من قبل " +"قائمة انتظار المهام." + +msgid "The provided IP is not valid" +msgstr "IP Ø§Ù„Ù…ØªÙˆÙØ±Ø© غير ØµØ§Ù„ØØ©" + +msgid "The provided domain name matches your hostname." +msgstr "يطابق اسم المجال Ø§Ù„Ù…ØªÙˆÙØ± اسم المضي٠الخاص بك." + +msgid "The question was" +msgstr "وكان السؤال" + +#, c-format +msgid "The referer request set (%s) is not in the allowed list: %s" +msgstr "مجموعة طلب Ø§Ù„Ù…ÙØ±Ø¬Ø¹ (%s) ليست ÙÙŠ القائمة Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§: %s" + +#, c-format +msgid "The referer used is not safe as it can be controlled by a User: %s" +msgstr "Ø§Ù„Ù…ÙØ±Ø¬Ø¹ المستخدم ليس آمناً ØÙŠØ« يمكن التØÙƒÙ… Ùيه من قبل المستخدم: %s" + +msgid "" +"The request you've made cannot be executed because it does not exist in your " +"authority level" +msgstr "لا يمكن تنÙيذ الطلب الذي قمت به لأنه غير موجود ÙÙŠ مستوى السلطة" + +msgid "The requested command requires POST but GET was used" +msgstr "يتطلب الأمر المطلوب POST ولكن تم استخدام GET" + +msgid "" +"The skin package did not install properly. Either there were files missing, " +"or their permissions were incorrectly set" +msgstr "" +"لم يتم تثبيت ØØ²Ù…Ø© الجلد بشكل صØÙŠØ. إما أن هناك Ù…Ù„ÙØ§Øª Ù…Ùقودة، أو أن الأذونات " +"الخاصة بها تم تعيينها بشكل غير صØÙŠØ" + +msgid "The sql file is 0 bytes in size:" +msgstr "مل٠sql هو 0 بايت ÙÙŠ Ø§Ù„ØØ¬Ù…:" + +#, c-format +msgid "The subdomain '%s' already exists under the %s domain" +msgstr "المجال Ø§Ù„ÙØ±Ø¹ÙŠ '%s' موجود Ø¨Ø§Ù„ÙØ¹Ù„ ØªØØª المجال %s" + +msgid "" +"The times must formatted like one of the following (eg. hour, no spaces)" +msgstr "" +"يجب أن يتم تنسيق الأوقات مثل ÙˆØ§ØØ¯ من التالي (على سبيل المثال. ساعة، لا " +"Ù…Ø³Ø§ÙØ§Øª)" + +msgid "The update is not allowed to be downloaded." +msgstr "لا ÙŠÙØ³Ù…Ø Ø¨ØªÙ†Ø²ÙŠÙ„ Ø§Ù„ØªØØ¯ÙŠØ«." + +#, c-format +msgid "The user %s does not belong to you" +msgstr "%s المستخدم لا ينتمي إليك" + +#, c-format +msgid "The user %s does not exist" +msgstr "%s المستخدم غير موجود" + +#, c-format +msgid "" +"The username is invalid. Usernames must start with a-z, contain >= 3 " +"characters and <= %d." +msgstr "" +"اسم المستخدم غير صالØ. يجب أن تبدأ أسماء المستخدمين بـ a-zØŒ ÙˆØªØØªÙˆÙŠ Ø¹Ù„Ù‰ > = 3 " +"Ø£ØØ±Ù < = %d." + +msgid "The username is invalid. Usernames must use a-z0-9" +msgstr "اسم المستخدم غير صالØ. يجب أن تستخدم أسماء المستخدمين a-z0-9" + +msgid "The value must be an IP address" +msgstr "يجب أن تكون القيمة عنوان IP" + +msgid "The very last entry." +msgstr "آخر مدخل" + +msgid "The welcome email(s) has successfully been resent." +msgstr "تم Ø¨Ù†Ø¬Ø§Ø Ø¥Ø¹Ø§Ø¯Ø© إرسال رسائل (رسائل) الترØÙŠØ¨." + +msgid "There are no messages for that ticket" +msgstr "لا توجد رسائل لتلك التذكرة" + +#, c-format +msgid "" +"There are still Users on %s. Remove them from the IP first and set it to " +"'free'." +msgstr "" +"لا يزال هناك مستخدمون على %s. إزالتها من الملكية الÙكرية أولاً وتعيينه إلى " +"'Ø§Ù„ØØ±Ø©'." + +#, c-format +msgid "" +"There have been %d renew failures, thus no more attempts will be made.%s" +msgstr "وقد ØØ¯Ø«Øª %d ØØ§Ù„ات ÙØ´Ù„ تجديد، وبالتالي لن تبذل أي Ù…ØØ§ÙˆÙ„ات أخرى. %s" + +msgid "There is already a CNAME record with that name" +msgstr "يوجد Ø¨Ø§Ù„ÙØ¹Ù„ سجل CNAME بهذا الاسم" + +msgid "There is already a mailing list alias with that name" +msgstr "يوجد Ø¨Ø§Ù„ÙØ¹Ù„ اسم مستعار للقائمة البريدية ÙŠØÙ…Ù„ هذا الاسم" + +msgid "There is already an A record with that name" +msgstr "يوجد Ø¨Ø§Ù„ÙØ¹Ù„ سجل A بهذا الاسم" + +msgid "There is already an account with that name" +msgstr "يوجد ØØ³Ø§Ø¨ بهذا الاسم" + +msgid "There is already an autoresponder with that name" +msgstr "هناك Ø¨Ø§Ù„ÙØ¹Ù„ الرد الآلي مع هذا الاسم" + +#, c-format +msgid "There is not sufficient space on %s to upload %lld bytes of data" +msgstr "لا توجد Ù…Ø³Ø§ØØ© كاÙية على %s لتØÙ…يل بايت %lld من البيانات" + +#, c-format +msgid "There is only 1 %s record for %s=%s, not removing it" +msgstr "لا يوجد سوى سجل %s ÙˆØ§ØØ¯ %s = %s ØŒ وليس إزالته" + +msgid "" +"There were md5 errors from all servers, above. Please send report to " +"DirectAdmin Support." +msgstr "" +"كانت هناك أخطاء md5 من ÙƒØ§ÙØ© الملقمات، أعلاه. الرجاء إرسال تقرير إلى دعم " +"DirectAdmin." + +msgid "These are dynamic values. They change with the date." +msgstr "هذه هي القيم الØÙŠÙˆÙŠØ©. تتغير مع التاريخ." + +msgid "They should not exist. To delete them, run:" +msgstr "لا يجب أن تكون موجودة. Ù„ØØ°Ùها، قم بتشغيل:" + +#, c-format +msgid "" +"This OS is now End-Of-Life and no further updates are availble. The " +"automated updater will no longer accept request after %s (manual attempts " +"can be done with https://help.directadmin.com/item.php?id=29) but may not do " +"anything." +msgstr "" +"نظام التشغيل هذا هو الآن نهاية الØÙŠØ§Ø© وليس هناك مزيد من Ø§Ù„ØªØØ¯ÙŠØ«Ø§Øª availble. " +"لن يقبل Ø§Ù„ØªØØ¯ÙŠØ« التلقائي الطلب بعد %s (يمكن القيام Ø¨Ø§Ù„Ù…ØØ§ÙˆÙ„ات اليدوية " +"باستخدام https://help.directadmin.com/item.php?id=29) ولكن قد لا ÙŠÙØ¹Ù„ أي شيء." + +msgid "This OS is now end-of-life. Future automated updates may fail." +msgstr "" +"نظام التشغيل هذا هو الآن نهاية الØÙŠØ§Ø©. قد ØªÙØ´Ù„ Ø§Ù„ØªØØ¯ÙŠØ«Ø§Øª التلقائية " +"المستقبلية." + +#, c-format +msgid "" +"This Reseller account is unable to allocate unlimited %s, yet that amount " +"has alredy been allocated." +msgstr "" +"ØØ³Ø§Ø¨ الموزع هذا غير قادر على تخصيص %s غير Ù…ØØ¯ÙˆØ¯ ØŒ ومع ذلك تم تخصيص هذا " +"المبلغ alredy." + +msgid "" +"This account already exists on the system. If you restore, it will overwrite " +"and/or merge the data." +msgstr "" +"هذا Ø§Ù„ØØ³Ø§Ø¨ موجود Ø¨Ø§Ù„ÙØ¹Ù„ على النظام. إذا قمت بالاستعادة، ÙØ¥Ù†Ù‡ سيتم الكتابة " +"Ùوق Ùˆ/أو دمج البيانات." + +msgid "This account is blocked via BlockCracking." +msgstr "يتم ØØ¸Ø± هذا Ø§Ù„ØØ³Ø§Ø¨ عبر BlockCracking." + +msgid "This account is blocked via BlockCracking. Unblocking is disabled." +msgstr "يتم ØØ¸Ø± هذا Ø§Ù„ØØ³Ø§Ø¨ عبر BlockCracking. إلغاء Ø§Ù„ØØ¸Ø± معطل." + +msgid "" +"This domain will now temporarily use the Shared Server Certificate, unless " +"you restore the backup key (but backup the new key first or it will become " +"lost)" +msgstr "" +"هذا المجال الآن بشكل مؤقت استخدام \"شهادة الملقم المشترك\" ØŒ إلا إذا كنت " +"استعادة Ù…ÙØªØ§Ø النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ (ولكن النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ Ø§Ù„Ù…ÙØªØ§Ø الجديد أولاً أو " +"أنه Ø³ÙŠØµØ¨Ø Ùقدت)" + +msgid "This hash has already been converted to a key." +msgstr "" + +msgid "This is a Hash URL login. You can delete it, but you cannot modify it." +msgstr "هذا هو تسجيل دخول URL التجزئة. يمكنك ØØ°Ùه، ولكن لا يمكنك تعديله." + +msgid "This is a placeholder for the subdomain" +msgstr "هذا عنصر نائب ÙÙŠ المجال Ø§Ù„ÙØ±Ø¹ÙŠ" + +msgid "This is information about my mailing list" +msgstr "هذه هي معلومات ØÙˆÙ„ القائمة البريدية الخاصة بي" + +msgid "This may give unexpected results" +msgstr "قد يعطي هذا نتائج غير متوقعة" + +msgid "This may give unexpected results." +msgstr "قد يعطي هذا نتائج غير متوقعة." + +msgid "This plugin has been disabled for your account" +msgstr "تم تعطيل هذا البرنامج المساعد Ù„ØØ³Ø§Ø¨Ùƒ" + +msgid "" +"This will only happen *after* logs exist (domain must resolve and be used)." +msgstr "هذا Ø³ÙˆÙ ÙŠØØ¯Ø« Ùقط * بعد * سجلات موجودة (يجب ØÙ„ المجال واستخدامها)." + +msgid "This will skip the removal of the dns zone, leaving it in place." +msgstr "هذا سو٠تخطي إزالة منطقة dnsØŒ وتركها ÙÙŠ مكانها." + +msgid "Thread Count" +msgstr "عدد مؤشرات الترابط" + +msgid "Throttle Memory above this limit." +msgstr "" + +msgid "Ticket #" +msgstr "تذكرة #" + +msgid "Tickets Updated" +msgstr "تم ØªØØ¯ÙŠØ« التذاكر" + +msgid "Time" +msgstr "الوقت" + +#, c-format +msgid "Time slice discrepancy = %d" +msgstr "Ø§Ø®ØªÙ„Ø§Ù Ø´Ø±ÙŠØØ© الوقت = %d" + +msgid "Timeout during read" +msgstr "مهلة أثناء القراءة" + +#, c-format +msgid "Timeout while trying to connect to %s" +msgstr "مهلة أثناء Ù…ØØ§ÙˆÙ„Ø© الاتصال %s" + +#, c-format +msgid "Timezone '%s' does not exist on the system" +msgstr "المنطقة الزمنية '%s' غير موجود على النظام" + +msgid "Timezone does not exist" +msgstr "المنطقة الزمنية غير موجودة" + +msgid "" +"To add a cron job, you require all of the following: minute, hour, " +"dayofmonth, month, dayofweek and command" +msgstr "" +"Ù„Ø¥Ø¶Ø§ÙØ© ÙˆØ¸ÙŠÙØ© cronØŒ ØªØØªØ§Ø¬ إلى كل ما يلي: دقيقة، ساعة، يومmonthØŒ شهر، " +"dayofweek والأمر" + +msgid "" +"To change this page, upload a new index.html to your private_html folder" +msgstr "لتغيير هذه Ø§Ù„ØµÙØØ©ØŒ قم بتØÙ…يل Ùهرس جديد.html إلى مجلد private_html" + +msgid "Today" +msgstr "اليوم" + +msgid "Today at" +msgstr "اليوم الساعة" + +#, c-format +msgid "Today's E-Mail count has been reset for User %s" +msgstr "تم إعادة تعيين عدد البريد الإلكتروني اليوم %s المستخدم" + +msgid "Too long" +msgstr "طويل جداً" + +msgid "Too short" +msgstr "قصير جداً" + +msgid "Total" +msgstr "المجموع" + +msgid "Total Disk Usage (MB)" +msgstr "إجمالي استخدام القرص (MB)" + +msgid "Total Memory" +msgstr "إجمالي الذاكرة" + +msgid "Total Size:" +msgstr "Ø§Ù„ØØ¬Ù… الكلي" + +msgid "Total Swap Memory" +msgstr "إجمالي ذاكرة المبادلة" + +msgid "Total Usage" +msgstr "إجمالي الاستخدام" + +msgid "Trial License" +msgstr "رخصة Ø§Ù„Ù…ØØ§ÙƒÙ…Ø©" + +#, c-format +msgid "Tried to restore '%s' to '%s', but this path is not in the %s" +msgstr "ØØ§ÙˆÙ„ت استعادة '%s' إلى '%s'ØŒ ولكن هذا المسار ليس ÙÙŠ %s" + +msgid "Trust cookie has been cleared" +msgstr "تم Ù…Ø³Ø Ù…Ù„Ù ØªØ¹Ø±ÙŠÙ Ø§Ø±ØªØ¨Ø§Ø· الثقة" + +#, c-format +msgid "Trust this device for %d day" +msgid_plural "Trust this device for %d days" +msgstr[0] "الثقة ÙÙŠ هذا الجهاز ليوم %d" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, c-format +msgid "Try updating manually: %s" +msgstr "ØØ§ÙˆÙ„ Ø§Ù„ØªØØ¯ÙŠØ« يدويًا: %s" + +msgid "Trying another random redirection URL from the same control server" +msgstr "Ù…ØØ§ÙˆÙ„Ø© URL إعادة توجيه عشوائي آخر من Ù†ÙØ³ خادم عنصر التØÙƒÙ…" + +msgid "Two-Step Auth secret is not set." +msgstr "لم يتم تعيين سر Auth خطوتين." + +msgid "Two-Step Authentication" +msgstr "التØÙ‚Ù‚ بخطوتين" + +msgid "Two-Step Authentication is disabled" +msgstr "المصادقة ذات الخطيتين معطلة" + +msgid "Type" +msgstr "النوع" + +#, c-format +msgid "Type '%s' is disabled" +msgstr "تم تعطيل النوع \"%s\"" + +msgid "Type must be either 'paste' or 'id'" +msgstr "يجب أن يكون النوع إما \"لصق\" أو \"معرÙ\"" + +msgid "UID" +msgstr "Uid" + +msgid "URL" +msgstr "الرابط" + +msgid "Un-Link" +msgstr "Un-link" + +msgid "Un-Set" +msgstr "Un-Set" + +msgid "Unable To Execute Your Request" +msgstr "تعذر تنÙيذ طلبك" + +msgid "Unable to Execute Your Command" +msgstr "غير قادر على تنÙيذ الأمر الخاص بك" + +msgid "Unable to Locate that domain" +msgstr "غير قادر على ØªØØ¯ÙŠØ¯ موقع ذلك المجال" + +msgid "Unable to Logout" +msgstr "غير قادر على تسجيل الخروج" + +msgid "Unable to add IP" +msgstr "غير قادر على Ø¥Ø¶Ø§ÙØ© IP" + +msgid "Unable to add access host:" +msgstr "غير قادر على Ø¥Ø¶Ø§ÙØ© مضي٠الوصول:" + +msgid "Unable to add domain pointer" +msgstr "غير قادر على Ø¥Ø¶Ø§ÙØ© مؤشر المجال" + +#, c-format +msgid "Unable to add user %s." +msgstr "غير قادر على Ø¥Ø¶Ø§ÙØ© %s المستخدم." + +msgid "Unable to add user to ssh config file" +msgstr "غير قادر على Ø¥Ø¶Ø§ÙØ© مستخدم إلى مل٠تكوين ssh" + +#, c-format +msgid "" +"Unable to allocate unlimited %s. This account is not allowed to create that " +"amount." +msgstr "" +"غير قادر على تخصيص %s غير Ù…ØØ¯ÙˆØ¯. لا ÙŠÙØ³Ù…Ø Ù„Ù‡Ø°Ø§ Ø§Ù„ØØ³Ø§Ø¨ بإنشاء هذا المبلغ." + +msgid "" +"Unable to assign the Reseller ANY ips. Make sure to have free, un-assigned " +"ips." +msgstr "" +"غير قادر على تعيين بائع أي IPs. تأكد من أن يكون لديك ips مجانية غير مخصصة." + +msgid "Unable to authenitcate: Check your password for syntax" +msgstr "" +"غير قادر على authenitcate: التØÙ‚Ù‚ من كلمة المرور الخاصة بك لبناء الجملة" + +msgid "Unable to authenticate: Invalid password" +msgstr "غير قادر على المصادقة: كلمة مرور غير ØµØ§Ù„ØØ©" + +#, c-format +msgid "Unable to change %s" +msgstr "غير قادر على تغيير %s" + +msgid "Unable to change password" +msgstr "غير قادر على تغيير كلمة المرور" + +msgid "Unable to change the E-Mail Address" +msgstr "غير قادر على تغيير عنوان البريد الإلكتروني" + +msgid "Unable to change the Message System E-Mail Address" +msgstr "غير قادر على تغيير عنوان البريد الإلكتروني النظام رسالة" + +msgid "Unable to change the Name" +msgstr "غير قادر على تغيير الاسم" + +msgid "Unable to change the limit" +msgstr "غير قادر على تغيير Ø§Ù„ØØ¯" + +msgid "Unable to change the temporary bandwidth increase" +msgstr "غير قادر على تغيير زيادة عرض النطاق الترددي المؤقت" + +msgid "Unable to connect to any site for the update" +msgstr "تعذر الاتصال بأي موقع Ù„Ù„ØªØØ¯ÙŠØ«" + +msgid "Unable to connect to secure socket" +msgstr "غير قادر على الاتصال بمقبس توصيل آمن" + +msgid "Unable to connect to the database" +msgstr "غير قادر على الاتصال بقاعدة البيانات" + +#, c-format +msgid "Unable to copy %s to %s: %s" +msgstr "غير قادر على نسخ %s إلى %s: %s" + +#, c-format +msgid "Unable to copy directory %s to %s: %s" +msgstr "غير قادر على نسخ %s الدليل إلى %s: %s" + +#, c-format +msgid "Unable to create %s: %s" +msgstr "غير قادر على إنشاء %s: %s" + +msgid "Unable to create a Reseller" +msgstr "غير قادر على إنشاء موزع" + +msgid "Unable to create a User" +msgstr "غير قادر على إنشاء مستخدم" + +#, c-format +msgid "Unable to create backup directory (uid=%s)" +msgstr "غير قادر على إنشاء دليل النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ (uid = %s)" + +msgid "Unable to create database" +msgstr "غير قادر على إنشاء قاعدة بيانات" + +#, c-format +msgid "Unable to create directory %s" +msgstr "غير قادر على إنشاء %s الدليل" + +msgid "Unable to create new file" +msgstr "" + +msgid "Unable to create reverse IP lookup" +msgstr "غير قادر على إنشاء Ø¨ØØ« عكسي IP" + +msgid "Unable to create subdomain" +msgstr "غير قادر على إنشاء نطاق ÙØ±Ø¹ÙŠ" + +msgid "Unable to create user's data directory" +msgstr "غير قادر على إنشاء دليل بيانات المستخدم" + +msgid "Unable to create zone" +msgstr "غير قادر على إنشاء منطقة" + +msgid "Unable to create zone." +msgstr "غير قادر على إنشاء منطقة." + +#, c-format +msgid "Unable to delete %s: %s" +msgstr "غير قادر على ØØ°Ù %s: %s" + +#, c-format +msgid "Unable to delete directory %s: %s" +msgstr "غير قادر على ØØ°Ù %s الدليل: %s" + +msgid "Unable to delete files" +msgstr "غير قادر على ØØ°Ù Ø§Ù„Ù…Ù„ÙØ§Øª" + +msgid "Unable to delete the main email account" +msgstr "تعذر ØØ°Ù ØØ³Ø§Ø¨ البريد الإلكتروني الرئيسي" + +msgid "Unable to delete the reseller's ip.list file." +msgstr "غير قادر على ØØ°Ù مل٠ip.list الخاص بالموزع." + +msgid "Unable to delete users's domains directory" +msgstr "غير قادر على ØØ°Ù دليل المجالات للمستخدمين" + +msgid "Unable to download backup" +msgstr "غير قادر على تنزيل النسخة Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ©" + +msgid "Unable to edit file" +msgstr "غير قادر على ØªØØ±ÙŠØ± الملÙ" + +msgid "Unable to execute your command" +msgstr "تعذر تنÙيذ الأمر" + +msgid "Unable to execute your request" +msgstr "تعذر تنÙيذ طلبك" + +msgid "Unable to export packages" +msgstr "غير قادر على تصدير Ø§Ù„ØØ²Ù…" + +#, c-format +msgid "Unable to extract %s from" +msgstr "غير قادر على استخراج %s من" + +msgid "Unable to extract user.conf, reseller.conf or ip.list from" +msgstr "غير قادر على استخراج user.conf أو reseller.conf أو ip.list من" + +#, c-format +msgid "Unable to find %s" +msgstr "غير قادر على العثور على %s" + +#, c-format +msgid "Unable to find %s to create mysql backup" +msgstr "غير قادر على العثور على %s لإنشاء النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ mysql" + +#, c-format +msgid "Unable to find %s to extract mysql backup" +msgstr "غير قادر على العثور على %s لاستخراج النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ mysql" + +msgid "Unable to find CA certificate" +msgstr "غير قادر على العثور على شهادة CA" + +msgid "Unable to find certificate" +msgstr "تعذر العثور على شهادة" + +msgid "Unable to find key" +msgstr "تعذر العثور على Ø§Ù„Ù…ÙØªØ§Ø" + +msgid "Unable to generate a random username for login" +msgstr "غير قادر على إنشاء اسم مستخدم عشوائي لتسجيل الدخول" + +#, c-format +msgid "Unable to get file stats on %s" +msgstr "تعذر Ø§Ù„ØØµÙˆÙ„ على Ø¥ØØµØ§Ø¦ÙŠØ§Øª المل٠على %s" + +#, c-format +msgid "Unable to get lock on %s" +msgstr "غير قادر على Ø§Ù„ØØµÙˆÙ„ على تأمين %s" + +#, c-format +msgid "Unable to get privileges for %s: %s" +msgstr "غير قادر على Ø§Ù„ØØµÙˆÙ„ على امتيازات %s: %s" + +msgid "Unable to get the user's crypted password for the ftp passwd file" +msgstr "غير قادر على Ø§Ù„ØØµÙˆÙ„ على كلمة مرور المستخدم سرداب لمل٠ftp passwd" + +#, c-format +msgid "Unable to lock %s area" +msgstr "تعذر تأمين منطقة %s" + +#, c-format +msgid "Unable to lock %s: %s" +msgstr "غير قادر على تأمين %s: %s" + +#, c-format +msgid "Unable to lock the '%s' account actions" +msgstr "غير قادر على تأمين إجراءات Ø§Ù„ØØ³Ø§Ø¨ \"%s\"" + +#, c-format +msgid "Unable to lock user %s: %s" +msgstr "غير قادر على تأمين %s المستخدم: %s" + +#, fuzzy +#| msgid "Unable to Locate that domain" +msgid "Unable to modify that domain" +msgstr "غير قادر على ØªØØ¯ÙŠØ¯ موقع ذلك المجال" + +#, c-format +msgid "Unable to open %s for appending" +msgstr "تعذر ÙØªØ %s للتذييل" + +#, c-format +msgid "Unable to open %s for appending: %s" +msgstr "غير قادر على ÙØªØ %s للتذييل: %s" + +#, c-format +msgid "Unable to open %s for reading" +msgstr "غير قادر على ÙØªØ %s للقراءة" + +#, c-format +msgid "Unable to open %s for writing: %s" +msgstr "غير قادر على ÙØªØ %s للكتابة: %s" + +#, c-format +msgid "Unable to open %s to restore the databases" +msgstr "غير قادر على ÙØªØ %s لاستعادة قواعد البيانات" + +#, c-format +msgid "Unable to open %s: %s" +msgstr "غير قادر على ÙØªØ %s: %s" + +msgid "Unable to open a socket" +msgstr "غير قادر على ÙØªØ مأخذ توصيل" + +#, c-format +msgid "Unable to open ca certificate file (%s) to write to: %s" +msgstr "غير قادر على ÙØªØ ca شهادة المل٠(%s) إلى الكتابة إلى: %s" + +#, c-format +msgid "Unable to open certificate file (%s) to write to: %s" +msgstr "غير قادر على ÙØªØ مل٠الشهادة (%s) للكتابة إلى: %s" + +#, c-format +msgid "Unable to open directory %s: %s" +msgstr "غير قادر على ÙØªØ %s الدليل: %s" + +#, c-format +msgid "Unable to parse %s from script '%s '(%s) output:" +msgstr "غير قادر على تØÙ„يل %s من البرنامج النصي '%s الإخراج '(%s):" + +#, c-format +msgid "Unable to read %s as account %s" +msgstr "غير قادر على قراءة %s %s Ø§Ù„ØØ³Ø§Ø¨" + +#, c-format +msgid "Unable to read %s's user files" +msgstr "غير قادر على قراءة Ù…Ù„ÙØ§Øª المستخدم %s" + +#, c-format +msgid "Unable to read %s. This file is only created after a tally is run." +msgstr "غير قادر على قراءة %s. يتم إنشاء هذا المل٠Ùقط بعد تشغيل ØØµÙŠÙ„Ø©." + +#, c-format +msgid "" +"Unable to read %s. This file is only created when emails are delivered." +msgstr "" +"غير قادر على قراءة %s. يتم إنشاء هذا المل٠Ùقط عند تسليم رسائل البريد " +"الإلكتروني." + +#, c-format +msgid "Unable to read %s: %s" +msgstr "غير قادر على قراءة %s: %s" + +#, c-format +msgid "Unable to read DS file %s" +msgstr "غير قادر على قراءة %s مل٠DS" + +msgid "Unable to read History File." +msgstr "تعذر قراءة مل٠المØÙوظات." + +#, c-format +msgid "Unable to read RoundCube backup script: %s" +msgstr "غير قادر على قراءة برنامج نصي النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ RoundCube: %s" + +#, c-format +msgid "Unable to read RoundCube restore script: %s" +msgstr "غير قادر على قراءة البرنامج النصي استعادة RoundCube: %s" + +#, c-format +msgid "Unable to read data from %s" +msgstr "غير قادر على قراءة البيانات من %s" + +msgid "Unable to read directatdmin.conf" +msgstr "غير قادر على قراءة directatdmin.conf" + +msgid "Unable to read domain configuration files" +msgstr "غير قادر على قراءة Ù…Ù„ÙØ§Øª تكوين المجال" + +msgid "Unable to read package" +msgstr "تعذر قراءة Ø§Ù„ØØ²Ù…Ø©" + +msgid "Unable to read system uptime" +msgstr "غير قادر على قراءة وقت تشغيل النظام" + +#, c-format +msgid "Unable to read the %s file. Make sure it exists." +msgstr "غير قادر على قراءة المل٠%s. تأكد من وجودها." + +msgid "Unable to read the cliboard file" +msgstr "غير قادر على قراءة Ù…Ù„Ù Ù„ÙˆØ cliboard" + +msgid "Unable to read the system ftp passwd file to add the user to it." +msgstr "غير قادر على قراءة مل٠نظام ftp passwd Ù„Ø¥Ø¶Ø§ÙØ© المستخدم إليه." + +msgid "Unable to read the system ftp passwd file to remove the system ftp user" +msgstr "غير قادر على قراءة مل٠نظام ftp passwd لإزالة مستخدم ftp النظام" + +msgid "Unable to read the user's files" +msgstr "غير قادر على قراءة Ù…Ù„ÙØ§Øª المستخدم" + +msgid "Unable to read ticket config file" +msgstr "غير قادر على قراءة مل٠تكوين التذاكر" + +msgid "Unable to read zone file to increase serial" +msgstr "غير قادر على قراءة مل٠المنطقة لزيادة المسلسل" + +#, c-format +msgid "Unable to read zonefile for %s" +msgstr "غير قادر على قراءة مل٠المنطقة %s" + +msgid "Unable to reboot" +msgstr "غير قادر على إعادة التمهيد" + +msgid "Unable to remove IP(s)" +msgstr "غير قادر على إزالة IP (Ù‚)" + +msgid "Unable to remove Unix User." +msgstr "غير قادر على إزالة مستخدم يونكس." + +msgid "Unable to remove all the of the reseller's users" +msgstr "غير قادر على إزالة ÙƒØ§ÙØ© مستخدمي الموزع" + +#, c-format +msgid "Unable to rename %s to %s: %s" +msgstr "غير قادر على إعادة تسمية %s إلى %s: %s" + +#, c-format +msgid "Unable to restore %s to %s: %s" +msgstr "غير قادر على استعادة %s إلى %s: %s" + +#, c-format +msgid "" +"Unable to restore '%s' because the Reseller or Admin '%s' cannot be found. " +"Rename the file if needed." +msgstr "" +"تعذر استعادة '%s' لأنه يتعذر العثور على \"%s\" أو \"%s\" المسؤول. إعادة " +"تسمية المل٠إذا لزم الأمر." + +msgid "Unable to restore database" +msgstr "غير قادر على استعادة قاعدة البيانات" + +msgid "Unable to satisfy difficult password check." +msgstr "غير قادر على تلبية الاختيار صعوبة كلمة المرور." + +msgid "Unable to save dns zone: named-checkzone returned:" +msgstr "غير قادر على ØÙظ منطقة dns: تم إرجاع منطقة الاختيار المسماة:" + +msgid "Unable to save your changes" +msgstr "تعذر ØÙظ التغييرات" + +msgid "Unable to set bandwidth" +msgstr "غير قادر على تعيين عرض النطاق الترددي" + +msgid "Unable to set file permissions" +msgstr "غير قادر على تعيين أذونات الملÙ" + +#, c-format +msgid "Unable to set ip %s to be nameserver. Continuing anyway." +msgstr "غير قادر على تعيين ip %s أن يكون اسم. الاستمرار على أي ØØ§Ù„." + +msgid "Unable to set password" +msgstr "غير قادر على تعيين كلمة المرور" + +msgid "Unable to set quota" +msgstr "تعذر تعيين Ø§Ù„ØØµØ© النسبية" + +msgid "Unable to set stats link" +msgstr "تعذر تعيين ارتباط Ø§Ù„Ø¥ØØµØ§Ø¦ÙŠØ§Øª" + +msgid "Unable to set the E-Mail Limit" +msgstr "غير قادر على تعيين ØØ¯ البريد الإلكتروني" + +msgid "Unable to set the shell" +msgstr "غير قادر على تعيين Ø§Ù„Ù‚Ø°ÙŠÙØ©" + +msgid "Unable to show Admin History" +msgstr "غير قادر على إظهار Ù…ØÙوظات المسؤول" + +msgid "Unable to show Reseller History" +msgstr "غير قادر على إظهار Ù…ØÙوظات الموزع" + +msgid "Unable to show User History" +msgstr "غير قادر على إظهار Ù…ØÙوظات المستخدم" + +msgid "Unable to show current E-Mail usage" +msgstr "غير قادر على إظهار استخدام البريد الإلكتروني Ø§Ù„ØØ§Ù„ÙŠ" + +msgid "Unable to show the system information" +msgstr "غير قادر على إظهار معلومات النظام" + +#, c-format +msgid "Unable to trash %s to %s: %s" +msgstr "غير قادر على %s %s: %s" + +#, c-format +msgid "Unable to unlock user %s: %s" +msgstr "غير قادر على إلغاء تأمين %s المستخدم: %s" + +msgid "Unable to update your Disk Usage" +msgstr "غير قادر على ØªØØ¯ÙŠØ« استخدام القرص" + +msgid "Unable to use that new domain name" +msgstr "غير قادر على استخدام اسم المجال الجديد" + +#, c-format +msgid "Unable to write %s's user files" +msgstr "غير قادر على كتابة Ù…Ù„ÙØ§Øª المستخدم %s" + +#, c-format +msgid "Unable to write %s: %s" +msgstr "غير قادر على كتابة %s: %s" + +msgid "Unable to write User's httpd.conf" +msgstr "غير قادر على كتابة httpd.conf المستخدم" + +msgid "Unable to write reseller's IP list" +msgstr "غير قادر على كتابة قائمة IP الخاصة بـ موزعي التجزئة" + +msgid "Unable to write the domain config file" +msgstr "غير قادر على كتابة مل٠تكوين المجال" + +msgid "" +"Unable to write the main ftp password file. Your changes will not take " +"effect." +msgstr "" +"غير قادر على كتابة مل٠كلمة مرور ftp الرئيسي. لن تدخل التغييرات الخاصة بك " +"ØÙŠØ² التنÙيذ." + +#, c-format +msgid "" +"Unable to write the quota file. Let your administartor know that %s is " +"unwriteable." +msgstr "" +"غير قادر على كتابة Ù…Ù„Ù Ø§Ù„ØØµØ© النسبية. دع المشر٠الخاص بك يعر٠أن %s غير قابل " +"للروت." + +msgid "" +"Unable to write the system ftp passwd file to remove the system ftp user" +msgstr "غير قادر على كتابة مل٠نظام ftp passwd لإزالة مستخدم ftp النظام" + +#, c-format +msgid "" +"Unable to write the usage.cache file. Let your administartor know that %s is " +"unwriteable." +msgstr "" +"غير قادر على كتابة المل٠usage.cache. دع المشر٠الخاص بك يعر٠أن %s غير قابل " +"للروت." + +msgid "Unable to write ticket config" +msgstr "غير قادر على كتابة تكوين تذكرة" + +#, c-format +msgid "" +"Unable to write to the password file. Let your administrator know that %s is " +"unwritable." +msgstr "" +"غير قادر على الكتابة إلى مل٠كلمة المرور. إعلام المسؤول أن %s غير قابل للÙÙƒ." + +msgid "Unable to write to the system ftp passwd file to add the user to it." +msgstr "غير قادر على الكتابة إلى مل٠نظام ftp passwd Ù„Ø¥Ø¶Ø§ÙØ© المستخدم إليه." + +msgid "Unable to write zone file to increase serial" +msgstr "غير قادر على كتابة مل٠المنطقة لزيادة المسلسل" + +#, c-format +msgid "Unable to write zonefile for %s" +msgstr "غير قادر على كتابة مل٠المنطقة %s" + +msgid "Unblock" +msgstr "ÙÙƒ Ø§Ù„ØØ¸Ø±" + +msgid "Unblocking is disabled." +msgstr "إلغاء Ø§Ù„ØØ¸Ø± معطل." + +msgid "" +"Unchecking will immediately delete the file from disk and cannot be recovered" +msgstr "" +"سيؤدي إلغاء ØªØØ¯ÙŠØ¯ المل٠إلى ØØ°Ù المل٠على الÙور من القرص ولا يمكن استرداده" + +#, fuzzy +#| msgid "Invalid plugin name" +msgid "Unhandled exception name" +msgstr "اسم المكون الإضاÙÙŠ غير صالØ" + +#, c-format +msgid "Unhandled route %s value '%s'" +msgstr "قيمة %s المسار غير المعالجة '%s'" + +msgid "Unix User created successfully" +msgstr "تم إنشاء مستخدم يونكس بنجاØ" + +msgid "Unix User removed from the server" +msgstr "إزالة مستخدم Unix من الملقم" + +msgid "Unix proxy IP/port should not have any of path, query or hash" +msgstr "" +"لا يجب أن يكون لديك وكيل Unix IP/Ù…Ù†ÙØ° أي من المسارات أو الاستعلام أو التجزئة" + +#, fuzzy, c-format +#| msgid "Unknown action" +msgid "Unknown '%s'" +msgstr "إجراء غير معروÙ" + +msgid "Unknown action" +msgstr "إجراء غير معروÙ" + +msgid "Unknown backup destination" +msgstr "وجهة النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠ ØºÙŠØ± معروÙ" + +msgid "Unknown certificate type. Only server, create and paste are allowed" +msgstr "نوع الشهادة غير معروÙ. Ù…Ø³Ù…ÙˆØ Ùقط للخادم والإنشاء واللصق" + +msgid "Unknown ftp type" +msgstr "نوع ftp غير معروÙ" + +#, fuzzy, c-format +#| msgid "Unknown action" +msgid "Unknown option '%s'" +msgstr "إجراء غير معروÙ" + +#, c-format +msgid "Unknown value for %s" +msgstr "قيمة غير Ù…Ø¹Ø±ÙˆÙØ© %s" + +msgid "Unlimited" +msgstr "غير Ù…ØØ¯ÙˆØ¯" + +msgid "Unsuspend" +msgstr "إلغاء تعليق" + +msgid "" +"Until the cache is created, the values may not be correct. Refresh the page " +"in 1 minute." +msgstr "" +"ØØªÙ‰ يتم إنشاء ذاكرة التخزين المؤقت قد لا تكون القيم صØÙŠØØ©. ØªØØ¯ÙŠØ« Ø§Ù„ØµÙØØ© ÙÙŠ " +"دقيقة ÙˆØ§ØØ¯Ø©." + +msgid "Up a Level" +msgstr "أعلى مستوى" + +msgid "Update" +msgstr "ØªØØ¯ÙŠØ«" + +msgid "Update Successful" +msgstr "تم Ø§Ù„ØªØØ¯ÙŠØ« بنجاØ" + +msgid "Update queued" +msgstr "ØªØØ¯ÙŠØ« ÙÙŠ قائمة الانتظار" + +msgid "Upload successful" +msgstr "Ù†Ø¬Ø Ø§Ù„ØªØÙ…يل" + +#, c-format +msgid "Uploaded %s value is not valid json" +msgstr "قيمة %s التي تم تØÙ…يلها غير ØµØ§Ù„ØØ© json" + +msgid "Uploaded file is not valid for copy" +msgstr "المل٠الذي تم تØÙ…يله غير ØµØ§Ù„Ø Ù„Ù„Ù†Ø³Ø®" + +#, c-format +msgid "Uploaded: %s" +msgstr "تم تØÙ…يلها: %s" + +msgid "" +"Uploading files has been disabled with the filemanager_disable_features " +"option" +msgstr "تم تعطيل تØÙ…يل Ø§Ù„Ù…Ù„ÙØ§Øª باستخدام الخيار filemanager_disable_features" + +msgid "Usage (Meg)" +msgstr "الاستخدام (ميج)" + +msgid "Usage Log" +msgstr "سجل الاستخدام" + +msgid "Usage statistics have not yet been collected for this account" +msgstr "لم يتم جمع Ø¥ØØµØ§Ø¡Ø§Øª الاستخدام لهذا Ø§Ù„ØØ³Ø§Ø¨" + +#, c-format +msgid "Use%%" +msgstr "اسم المستخدم %s قيد الاستخدام Ø¨Ø§Ù„ÙØ¹Ù„." + +msgid "Used" +msgstr "المستعمل" + +msgid "User" +msgstr "مستخدم" + +#, c-format +msgid "User %s Removed" +msgstr "إزالة %s المستخدم" + +#, c-format +msgid "User %s already exists. Please chose a different username." +msgstr "%s المستخدم موجود Ø¨Ø§Ù„ÙØ¹Ù„. الرجاء اختيار اسم مستخدم مختلÙ." + +#, c-format +msgid "User %s created" +msgstr "%s تم إنشاء المستخدم" + +#, c-format +msgid "User %s did not exist on the server. Removing it from your list." +msgstr "لم يكن %s المستخدم موجودًا على الخادم. إزالته من قائمتك." + +#, c-format +msgid "User %s does not exist on the system." +msgstr "%s المستخدم غير موجود على النظام." + +#, c-format +msgid "User %s exists on the system but is not in your User list" +msgstr "%s المستخدم موجود على النظام ولكنه ليس ÙÙŠ قائمة المستخدمين" + +#, c-format +msgid "User %s has been added to your database. Use the following values:" +msgstr "تمت Ø¥Ø¶Ø§ÙØ© %s المستخدم إلى قاعدة البيانات. استخدم القيم التالية:" + +#, c-format +msgid "User %s has been backed up." +msgstr "تم نسخ %s المستخدم Ø§ØØªÙŠØ§Ø·ÙŠÙ‹Ø§." + +#, c-format +msgid "User %s has been restored" +msgstr "تمت استعادة %s المستخدم" + +#, c-format +msgid "User %s has been updated. Use the following values:" +msgstr "تم ØªØØ¯ÙŠØ« %s المستخدم. استخدم القيم التالية:" + +#, c-format +msgid "User %s has one or more hard links in their path:" +msgstr "%s المستخدم على ارتباط أو أكثر ÙÙŠ المسار الخاص بهم:" + +#, c-format +msgid "User %s is already suspended" +msgstr "%s المستخدم Ù…ØªÙˆÙ‚ÙØ© مسبقاً" + +#, c-format +msgid "User %s is already unsuspended" +msgstr "%s المستخدم غير Ù…ÙÙَتَزَم Ø¨Ø§Ù„ÙØ¹Ù„" + +#, c-format +msgid "User %s is not on your list. You cannot make a backup for him." +msgstr "%s المستخدم غير موجود ÙÙŠ القائمة. لا يمكنك عمل نسخة Ø§ØØªÙŠØ§Ø·ÙŠØ© له" + +#, c-format +msgid "User %s is not on your list. You cannot make a backup for them." +msgstr "%s المستخدم غير موجود ÙÙŠ القائمة. لا يمكنك إجراء نسخة Ø§ØØªÙŠØ§Ø·ÙŠØ© لهم." + +#, c-format +msgid "User %s not deleted. Unable to delete all of their users." +msgstr "لم يتم ØØ°Ù %s المستخدم. غير قادر على ØØ°Ù ÙƒØ§ÙØ© المستخدمين." + +#, c-format +msgid "User %s was not created by you-> Not Deleted." +msgstr "لم يتم إنشاء %s المستخدم من قبل > لم يتم ØØ°Ùها." + +#, c-format +msgid "User %s was suspended in the backup. Account suspended." +msgstr "تم تعليق %s المستخدم ÙÙŠ النسخة Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ©. تم تعليق Ø§Ù„ØØ³Ø§Ø¨." + +#, c-format +msgid "User %s was suspended in the backup. Error suspending the account:" +msgstr "تم تعليق %s المستخدم ÙÙŠ النسخة Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ©. خطأ ÙÙŠ Ø¥ÙŠÙ‚Ø§Ù Ø§Ù„ØØ³Ø§Ø¨:" + +#, c-format +msgid "User '%s' does not exist" +msgstr "المستخدم '%s' غير موجود" + +msgid "User Acconts" +msgstr "Acconts المستخدم" + +msgid "User Accounts" +msgstr "ØØ³Ø§Ø¨Ø§Øª المستخدمين" + +#, fuzzy +#| msgid "Bandwidth" +msgid "User Bandwidth" +msgstr "عرض النطاق" + +msgid "User Comment Box" +msgstr "مربع تعليق المستخدم" + +msgid "User DNSSEC Control is disabled" +msgstr "تم تعطيل عنصر تØÙƒÙ… DNSSEC المستخدم" + +#, fuzzy +#| msgid "User's System Quotas set" +msgid "User Disk Quota" +msgstr "تعيين ØØµØµ النظام الخاصة بالمستخدم" + +msgid "User History" +msgstr "Ù…ØÙوظات المستخدم" + +msgid "User Modified" +msgstr "تم تعديل المستخدم" + +msgid "User Resource Limits" +msgstr "" + +msgid "User SMTP Logs are are not enabled" +msgstr "لم يتم تمكين سجلات SMTP المستخدم" + +msgid "User Updated" +msgstr "تم ØªØØ¯ÙŠØ« المستخدم" + +msgid "User added to SSH config file successfully" +msgstr "وأضا٠المستخدم إلى مل٠تكوين SSH بنجاØ" + +msgid "User added to database" +msgstr "تمت Ø¥Ø¶Ø§ÙØ© المستخدم إلى قاعدة البيانات" + +msgid "User added to named.conf file successfully" +msgstr "تمت Ø¥Ø¶Ø§ÙØ© المستخدم إلى مل٠named.conf بنجاØ" + +msgid "User added to ssh config file." +msgstr "وأضا٠المستخدم إلى مل٠ssh التكوين." + +msgid "User backups have been disabled." +msgstr "تم تعطيل النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ© للمستخدم." + +msgid "User config file updated." +msgstr "تم ØªØØ¯ÙŠØ« مل٠تكوين المستخدم." + +msgid "User does not exist" +msgstr "المستخدم غير موجود" + +msgid "User password changed, however the account is still suspended" +msgstr "تغيير كلمة مرور المستخدم، ومع ذلك لا يزال Ø§Ù„ØØ³Ø§Ø¨ معلقًا" + +msgid "User removed from SSH" +msgstr "تمت إزالة المستخدم من SSH" + +msgid "User's System Quotas set" +msgstr "تعيين ØØµØµ النظام الخاصة بالمستخدم" + +msgid "User's config files deleted" +msgstr "ØØ°Ù Ù…Ù„ÙØ§Øª تكوين المستخدم" + +msgid "User's data directory created successfully" +msgstr "تم إنشاء دليل بيانات المستخدم بنجاØ" + +msgid "User's data directory removed." +msgstr "تمت إزالة دليل بيانات المستخدم." + +msgid "User(s)" +msgstr "المستخدمين" + +msgid "User::get_all_widgets: Invalid level" +msgstr "user::get_all_widgets: مستوى غير صالØ" + +#, c-format +msgid "UserDir: %s" +msgstr "المستخدمDir: %s" + +msgid "Username" +msgstr "اسم المستخدم" + +#, c-format +msgid "Username '%s' is too long. Length %d > max_username_length=%d" +msgstr "اسم المستخدم '%s' طويل جدا. الطول %d > max_username_length = %d" + +msgid "Username is too short. It must be at least 2 characters long." +msgstr "اسم المستخدم قصير جداً. يجب أن يكون طول ØØ±Ùين على الأقل." + +msgid "" +"Username must be Alphanumeric (a-z, A-Z, 0-9), with the first character " +"being a letter" +msgstr "" +"يجب أن يكون اسم المستخدم أبجديًا رقميًا (a-zØŒ A-ZØŒ 0-9)ØŒ مع Ø§Ù„ØØ±Ù الأول ØØ±Ù" + +msgid "Username:" +msgstr "اسم المستخدم:" + +msgid "Users" +msgstr "المستخدمين" + +msgid "Users deleted" +msgstr "ØØ°Ù المستخدمين" + +msgid "Users will be deleted in the background." +msgstr "سيتم ØØ°Ù المستخدمين ÙÙŠ الخلÙية." + +msgid "Users's domains directory removed." +msgstr "إزالة دليل مجالات المستخدمين." + +msgid "Usertype" +msgstr "نوع المستخدم" + +msgid "Uses" +msgstr "يستخدم" + +#, c-format +msgid "Using path %s is not allowed." +msgstr "غير Ù…Ø³Ù…ÙˆØ Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù… %s المسار." + +msgid "Vacation Account" +msgstr "ØØ³Ø§Ø¨ عطلة" + +msgid "Vacation Message Deleted" +msgstr "رسالة الإجازة Ù…ØØ°ÙˆÙØ©" + +msgid "Vacation Message set" +msgstr "مجموعة رسائل الإجازة" + +msgid "Vacation Message updated" +msgstr "رسالة عطلة ØªØØ¯ÙŠØ«" + +msgid "Vacation Messages" +msgstr "رسائل العطلات" + +msgid "Valid" +msgstr "صالØ" + +msgid "Valid broadcast address set." +msgstr "" + +msgid "Value" +msgstr "القيمة" + +#, c-format +msgid "Value is too long. Max=%d" +msgstr "القيمة طويلة جداً. ماكس = %d" + +msgid "Variable 'ip' is missing from the submission" +msgstr "متغير 'IP' Ù…Ùقود من الإرسال" + +msgid "Vendor ID" +msgstr "معر٠البائع" + +msgid "Verify" +msgstr "التØÙ‚Ù‚" + +msgid "View" +msgstr "عرض" + +msgid "View Clipboard" +msgstr "عرض Ø§Ù„ØØ§Ùظة" + +msgid "View previous sort" +msgstr "عرض Ø§Ù„ÙØ±Ø² السابق" + +msgid "Warning from named-checkzone:" +msgstr "ØªØØ°ÙŠØ± من منطقة الاختيار المسماة:" + +#, c-format +msgid "" +"Warning: %s has a valid password for %s but failed the Two-Step " +"Authentication code %s times." +msgstr "ØªØØ°ÙŠØ±: %s كلمة مرور ØµØ§Ù„ØØ© %s ولكن ÙØ´Ù„ت رمز المصادقة خطوتين %s مرات." + +#, c-format +msgid "" +"Warning: %s has a valid password for %s but failed the security questions %s " +"times." +msgstr "ØªØØ°ÙŠØ±: %s كلمة مرور ØµØ§Ù„ØØ© %s ولكن ÙØ´Ù„ أسئلة الأمان %s مرات." + +msgid "Warning: Quota limit reached. File(s) may be empty." +msgstr "ØªØØ°ÙŠØ±: تم الوصول إلى ØØ¯ Ø§Ù„ØØµØ© النسبية. قد يكون المل٠(Ø§Ù„Ù…Ù„ÙØ§Øª) ÙØ§Ø±ØºÙ‹Ø§." + +msgid "Warning: Saved filesize is less than uploaded filesize. Check quotas." +msgstr "" +"ØªØØ°ÙŠØ±: يتم تخزين Ø§Ù„Ù…Ù„ÙØ§Øª المØÙوظة أقل من ØØ¬Ù… Ø§Ù„Ù…Ù„ÙØ§Øª التي تم تØÙ…يلها. تØÙ‚Ù‚ " +"من Ø§Ù„ØØµØµ النسبية." + +msgid "Warning: The system load average is" +msgstr "ØªØØ°ÙŠØ±: متوسط تØÙ…يل النظام هو" + +#, c-format +msgid "We've only read %lld of the %lld byte file from %s" +msgstr "لقد قرأنا %lld من %lld من %s" + +msgid "Webalizer" +msgstr "ويبايزر" + +msgid "Webmail" +msgstr "بريد الويب" + +msgid "Webmail Attachments" +msgstr "مرÙقات بريد الويب" + +msgid "Webmail SSO" +msgstr "بريد الويب SSO" + +msgid "Week of Month" +msgstr "أسبوع من الشهر" + +#, c-format +msgid "Weekly Rate limit of %d for '%s' has been reached" +msgstr "" + +#, c-format +msgid "Welcome to %s" +msgstr "Ù…Ø±ØØ¨Ø§ بك ÙÙŠ %s" + +msgid "What" +msgstr "ماذا" + +msgid "What is the first name of the boy or girl that you first kissed?" +msgstr "ما هو الاسم الأول للصبي أو Ø§Ù„ÙØªØ§Ø© التي قبلتها لأول مرة؟" + +msgid "What is the middle name of your oldest child?" +msgstr "ما هو الاسم الأوسط لطÙلك الأكبر سناً؟" + +msgid "What is the name of a college you applied to but didn't attend?" +msgstr "ما هو اسم الكلية التي تقدمت إليها ولكن لم ØªØØ¶Ø±ØŸ" + +msgid "What is the name of the place your wedding reception was held?" +msgstr "ما هو اسم المكان الذي أقيم Ùيه ØÙÙ„ Ø²ÙØ§Ùك؟" + +msgid "What is the name of your favorite childhood friend?" +msgstr "ما هو اسم صديق الطÙولة Ø§Ù„Ù…ÙØ¶Ù„ لديك؟" + +msgid "What is your maternal grandmother's maiden name" +msgstr "ما هو اسم جدتك الأم قبل الزواج" + +msgid "" +"What is your oldest brother's birthday month and year? (e.g: January 1970)" +msgstr "" +"ما هو عيد ميلاد أخيك الأكبر ÙÙŠ الشهر والسنة؟ (على سبيل المثال: كانون الثاني/" +"يناير 1970)" + +msgid "What is your oldest cousin's first and last name?" +msgstr "ما هو اسم ابن عمك الأول والأخير؟" + +msgid "" +"What is your oldest sibling's birthday month and year? (e.g: January 1970)" +msgstr "" +"ما هو عيد ميلاد شقيقك الأكبر سناً ÙÙŠ الشهر والسنة؟ (على سبيل المثال: كانون " +"الثاني/يناير 1970)" + +msgid "What is your oldest sibling's middle name?" +msgstr "ما هو الاسم الأوسط لأختك الأكبر سناً؟" + +msgid "What school did you attend for sixth grade?" +msgstr "ما المدرسة التي ØØ¶Ø±ØªÙ‡Ø§ للص٠السادس؟" + +msgid "What street did you live on in third grade?" +msgstr "ما الشارع الذي عشت Ùيه ÙÙŠ الص٠الثالث؟" + +msgid "What was the last name of your third grade teacher?" +msgstr "ما هو الاسم الأخير لمعلمك ÙÙŠ الص٠الثالث؟" + +msgid "What was the name of your first stuffed animal?" +msgstr "ما هو اسم أول Ù…ØØ´ÙˆØŸ" + +msgid "What was your childhood nickname?" +msgstr "ما هو لقب Ø·Ùولتك؟" + +msgid "" +"What was your childhood phone number including area code? (e.g: 000-000-0000)" +msgstr "" +"ما هو رقم هات٠طÙولتك بما ÙÙŠ ذلك رمز المنطقة؟ (على سبيل المثال: 000-000-0000)" + +msgid "When" +msgstr "متى" + +msgid "Where" +msgstr "أين" + +msgid "Where were you when you had your first kiss?" +msgstr "أين كنت عندما ØØ¸ÙŠØª بقبلتك الأولى؟" + +msgid "Who" +msgstr "معلومات اضاÙية" + +#, c-format +msgid "Widget '%s' is not available" +msgstr "القطعة '%s' غير Ù…ØªÙˆÙØ±" + +msgid "Widgets are not enabled in this account level" +msgstr "لم يتم تمكين Ø§Ù„ØØ§Ø¬ÙŠØ§Øª ÙÙŠ مستوى Ø§Ù„ØØ³Ø§Ø¨ هذا" + +msgid "Wildcard" +msgstr "بدل" + +msgid "With Selected" +msgstr "ØªØØ¯ÙŠØ¯ المستخدمين" + +msgid "With selected" +msgstr "ØªØØ¯ÙŠØ¯ المستخدمين" + +#, c-format +msgid "Won't activate %s's account because its off" +msgstr "لن يتم تنشيط ØØ³Ø§Ø¨ %s لأن تشغيله" + +#, c-format +msgid "Write error with %s: %s" +msgstr "خطأ ÙÙŠ الكتابة باستخدام %s: %s" + +msgid "Wrong Answer." +msgstr "إجابة خاطئة." + +#, c-format +msgid "Wrong Answer. You have %d more attempt.%s" +msgid_plural "Wrong Answer. You have %d more attempts.%s" +msgstr[0] "إجابة خاطئة. لديك %d Ù…ØØ§ÙˆÙ„Ø© أكثر. %s" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, c-format +msgid "Wrong Answer. You have %d more attempts.%s" +msgstr "إجابة خاطئة. لديك %d المزيد من Ø§Ù„Ù…ØØ§ÙˆÙ„ات. %s" + +#, c-format +msgid "Wrong number of '%s' elements. Allowed: 1, or 2 with '%s')" +msgstr "عدد خاطئ من عناصر \"%s\". Ù…Ø³Ù…ÙˆØ Ø¨Ù‡: 1ØŒ أو 2 مع \"%s\")" + +#, c-format +msgid "Wrong number of 'pass' values: %d in '%s' (slash separated)" +msgstr "عدد غير صØÙŠØ من قيم \"التمرير\": %d ÙÙŠ \"%s\" (ÙØµÙ„ الخط المائل)" + +msgid "Yes" +msgstr "نعم" + +#, c-format +msgid "" +"You are deleting Admin or Reseller accounts that have %d User under their " +"control." +msgid_plural "" +"You are deleting Admin or Reseller accounts that have %d Users under their " +"control." +msgstr[0] "تقوم Ø¨ØØ°Ù ØØ³Ø§Ø¨Ø§Øª المسؤول أو البائع التي %d المستخدم ØªØØª سيطرتها." +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "You are not allowed to enable anonymous ftp" +msgstr "غير Ù…Ø³Ù…ÙˆØ Ù„Ùƒ بتمكين ftp المجهول" + +msgid "You are not allowed to modify your ssl settings" +msgstr "غير Ù…Ø³Ù…ÙˆØ Ù„Ùƒ بتعديل إعدادات ssl" + +msgid "You are not logged in from a master account" +msgstr "لم يتم تسجيل الدخول من ØØ³Ø§Ø¨ رئيسي" + +msgid "You aren't allowed to modify that ticket" +msgstr "لا ÙŠÙØ³Ù…Ø Ù„Ùƒ بتعديل تلك التذكرة" + +#, c-format +msgid "" +"You can click the E-Mail below to be immediately logged into %s as this " +"User, without knowing their password." +msgstr "" +"يمكنك النقر Ùوق البريد الإلكتروني أدناه ليتم تسجيل الدخول إلى %s على الÙور " +"مثل هذا المستخدم، دون Ù…Ø¹Ø±ÙØ© كلمة المرور الخاصة بهم." + +msgid "You can only add a certificate if you own the ip you are using" +msgstr "يمكنك Ùقط Ø¥Ø¶Ø§ÙØ© شهادة إذا كنت تملك الملكية الÙكرية التي تستخدمها" + +msgid "You can only add a certificate to your main domain" +msgstr "يمكنك Ùقط Ø¥Ø¶Ø§ÙØ© شهادة إلى المجال الرئيسي" + +msgid "You can't make a list named majordomo as its a reserved alias" +msgstr "لا يمكنك إنشاء قائمة باسم majordomo كما هو الاسم المستعار Ø§Ù„Ù…ØØ¬ÙˆØ²Ø©" + +msgid "You can't suspend root. That would be BAD" +msgstr "لا يمكنك تعليق الجذر. سيكون ذلك سيئاً" + +msgid "You cannot add that extension" +msgstr "لا يمكنك Ø¥Ø¶Ø§ÙØ© هذا الملØÙ‚" + +msgid "You cannot assign the domain more bandwidth than your account" +msgstr "لا يمكنك تعيين النطاق الترددي للنطاق أكثر من ØØ³Ø§Ø¨Ùƒ" + +msgid "You cannot assign the domain more quota than your account" +msgstr "لا يمكنك تعيين ØØµØ© نسبية للمجال أكثر من ØØ³Ø§Ø¨Ùƒ" + +msgid "You cannot create more Users than you are allowed domains." +msgstr "لا يمكنك إنشاء عدد من المستخدمين أكثر من المجالات Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§." + +msgid "You cannot delete all of your IPs" +msgstr "لا يمكنك ØØ°Ù ÙƒØ§ÙØ© برامج IPs" + +#, c-format +msgid "" +"You cannot delete the account %s because it is linked to your system account" +msgstr "لا يمكنك ØØ°Ù %s Ø§Ù„ØØ³Ø§Ø¨ لأنه مرتبط Ø¨ØØ³Ø§Ø¨ النظام الخاص بك" + +#, c-format +msgid "You cannot delete yourself (%s)" +msgstr "لا يمكنك ØØ°Ù Ù†ÙØ³Ùƒ (%s)" + +msgid "You cannot execute that command" +msgstr "لا يمكنك تنÙيذ هذا الأمر" + +msgid "You cannot login as yourself" +msgstr "لا يمكنك تسجيل الدخول كما Ù†ÙØ³Ùƒ" + +msgid "You cannot modify yourself" +msgstr "لا يمكنك تعديل Ù†ÙØ³Ùƒ" + +msgid "" +"You cannot restore multiple Users on one free IP. The IP must first be " +"shared." +msgstr "لا يمكنك استعادة عدة مستخدمين على IP ÙˆØ§ØØ¯ مجاناً. يجب أولاً مشاركة IP." + +msgid "You cannot set an unlimited send limit." +msgstr "لا يمكنك تعيين ØØ¯ إرسال غير Ù…ØØ¯ÙˆØ¯." + +msgid "You cannot suspend yourself" +msgstr "لا يمكنك تعليق Ù†ÙØ³Ùƒ" + +msgid "You cannot suspend/unsuspend yourself" +msgstr "لا يمكنك التوق٠عن العمل/إلغاء Ø§Ù„Ø¥ÙŠÙ‚Ø§Ù Ø¨Ù†ÙØ³Ùƒ" + +msgid "You cannot unsuspend this account." +msgstr "لا يمكنك إلغاء ØØ³Ø§Ø¨." + +msgid "" +"You cannot use that domain as a pointer. It already exists on the server" +msgstr "لا يمكنك استخدام هذا المجال كمؤشر. وهو موجود Ø¨Ø§Ù„ÙØ¹Ù„ على الخادم" + +#, c-format +msgid "You currently have %s Users and a maximum of %s domains." +msgstr "لديك ØØ§Ù„ياً %s المستخدمين ÙˆØ§Ù„ØØ¯ الأقصى للمجالات %s." + +msgid "You did not select any domains to modify" +msgstr "لم ØªØØ¯Ø¯ أي مجالات لتعديلها" + +msgid "You didn't chose a different ip, no changes have been made" +msgstr "لم تختار IP Ù…Ø®ØªÙ„ÙØ©ØŒ لم يتم إجراء أي تغييرات" + +msgid "You didn't select anyone to send it to" +msgstr "لم ØªØØ¯Ø¯ أي شخص لإرساله إلى" + +msgid "You do not have control over user" +msgstr "ليس لديك التØÙƒÙ… ÙÙŠ المستخدم" + +msgid "You do not own any IPs" +msgstr "أنت لا تملك أي برامج عمل IPs" + +msgid "You do not own that IP" +msgstr "أنت لا تملك أن الملكية الÙكرية" + +msgid "You do not own that domain" +msgstr "لا تملك هذا المجال" + +msgid "You do not own that ip" +msgstr "كنت لا تملك أن الملكية الÙكرية" + +msgid "You do not own that that cron ID" +msgstr "أنت لا تملك أن معر٠كرون" + +#, c-format +msgid "You do not own the IP %s. User %s will not be created" +msgstr "أنت لا تملك %s IP. لن يتم إنشاء %s المستخدم" + +msgid "You do not yet have any protected directories." +msgstr "لم يكن لديك ØØªÙ‰ الآن أية دلائل Ù…ØÙ…ية." + +msgid "You don't have authority over that User" +msgstr "ليس لديك سلطة على ذلك المستخدم" + +msgid "You don't have authority over that user" +msgstr "ليس لديك سلطة على ذلك المستخدم" + +msgid "You don't have permission to respond to that ticket" +msgstr "ليس لديك إذن للرد على تلك التذكرة" + +msgid "You don't have permission to restore user" +msgstr "ليس لديك إذن لاستعادة المستخدم" + +msgid "You don't have permission to view that ticket" +msgstr "ليس لديك إذن لعرض تلك التذكرة" + +msgid "You forgot to include a filename" +msgstr "نسيت تضمين اسم ملÙ" + +#, c-format +msgid "You have %d more attempt." +msgid_plural "You have %d more attempts." +msgstr[0] "لديك %d Ù…ØØ§ÙˆÙ„Ø© أكثر." +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, c-format +msgid "You have %d:%.2d left." +msgstr "لقد تركت %d: %.2d" + +msgid "You have already reached your assigned limit" +msgstr "لقد وصلت Ø¨Ø§Ù„ÙØ¹Ù„ إلى Ø§Ù„ØØ¯ المعين" + +msgid "You have not added any files to the clipboard." +msgstr "لم تقم Ø¨Ø¥Ø¶Ø§ÙØ© أية Ù…Ù„ÙØ§Øª إلى Ø§Ù„ØØ§Ùظة." + +msgid "" +"You have not given the reseller any IP's. Unable to create an assigned IP " +"domain or any nameservers without any" +msgstr "" +"لم تعط البائع أي IP. غير قادر على إنشاء مجال IP معين أو أي خوادم أسماء بدون " +"أي" + +msgid "" +"You have not selected any Files. Please go back and select some before " +"restoring the backup." +msgstr "" +"لم تقم Ø¨ØªØØ¯ÙŠØ¯ أية Ù…Ù„ÙØ§Øª. الرجاء الرجوع ÙˆØªØØ¯ÙŠØ¯ بعض قبل استعادة النسخة " +"Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ©." + +msgid "" +"You have not selected any Users. Please go back and select some before " +"creating the backup." +msgstr "" +"لم تقم Ø¨ØªØØ¯ÙŠØ¯ أي مستخدم. الرجاء الرجوع ÙˆØªØØ¯ÙŠØ¯ بعض قبل إنشاء النسخة " +"Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ©." + +msgid "You have not selected any domains" +msgstr "لم تقم Ø¨ØªØØ¯ÙŠØ¯ أي مجالات" + +msgid "" +"You have successfully issued a server reboot command. It may take a few " +"minutes for the system boot up and become live again." +msgstr "" +"لقد قمت بإصدار أمر إعادة تمهيد ملقم بنجاØ. قد يستغرق بضع دقائق للتمهيد " +"النظام ØØªÙ‰ ÙˆØªØµØ¨Ø ØÙŠØ© مرة أخرى." + +#, c-format +msgid "" +"You have used %d%% of your disk usage, which is more than the allowed " +"threshold of %d%%." +msgstr "لقد استخدمت %d%% of استخدام القرص، وهو أكثر من Ø§Ù„ØØ¯ Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡ %d%Ùª." + +msgid "You may need to press F5 to reload the logo" +msgstr "قد ØªØØªØ§Ø¬ إلى الضغط على F5 لإعادة تØÙ…يل الشعار" + +msgid "You may not use an IP for a domain name" +msgstr "لا يجوز لك استخدام IP لاسم مجال" + +msgid "You must enter a chmod value. eg: 755" +msgstr "يجب إدخال قيمة chmod. على سبيل المثال: 755" + +msgid "You must enter a folder 'name'. eg: images" +msgstr "يجب إدخال مجلد 'اسم'. على سبيل المثال: صور" + +msgid "You must enter both password" +msgstr "يجب إدخال كل من كلمة المرور" + +msgid "You must enter number, user, subject, priority, status and message" +msgstr "يجب إدخال رقم، المستخدم، الموضوع، الأولوية، Ø§Ù„ØØ§Ù„Ø© والرسالة" + +msgid "You must enter the password in both fields" +msgstr "يجب إدخال كلمة المرور ÙÙŠ كلا الØÙ‚لين" + +msgid "You must enter user, subject, priority and message" +msgstr "يجب إدخال المستخدم والموضوع والأولوية والرسالة" + +msgid "You must first create some packages" +msgstr "يجب أولاً إنشاء بعض Ø§Ù„ØØ²Ù…" + +msgid "You must first own an IP" +msgstr "يجب عليك أولاً امتلاك IP" + +msgid "You must have at least one database to login to phpMyAdmin" +msgstr "يجب أن يكون لديك قاعدة بيانات ÙˆØ§ØØ¯Ø© على الأقل للدخول إلى phpMyAdmin" + +msgid "You must have more than 0 NS records or named may not start." +msgstr "يجب أن يكون لديك أكثر من 0 NS السجلات أو اسم قد لا تبدأ." + +msgid "" +"You must provide 'required_hits' and 'required_hits_custom' if " +"'required_hits' is 'custom'" +msgstr "" +"يجب توÙير \"required_hits\" Ùˆ \"required_hits_custom\" إذا كان " +"\"required_hits\" \"مخصصًا\"" + +msgid "You must provide a list name" +msgstr "يجب توÙير اسم قائمة" + +msgid "" +"You must provide a protected directory password prompt. eg: Member's Area" +msgstr "يجب توÙير مطالبة بكلمة مرور دليل Ù…ØÙ…ية. على سبيل المثال: منطقة الأعضاء" + +msgid "You must provide a valid domain, ip, ns1 and ns2" +msgstr "يجب توÙير مجال ØµØ§Ù„ØØŒ IPØŒ ns1 Ùˆ ns2" + +msgid "" +"You must provide a valid email address, oldpassword, password1 and password2" +msgstr "" +"يجب عليك توÙير عنوان بريد إلكتروني ØµØ§Ù„Ø ÙˆÙƒÙ„Ù…Ø© مرور قديمة وكلمة مرور1 وكلمة " +"مرور 2" + +msgid "" +"You must provide a valid ftp address, oldpassword, password1 and password2" +msgstr "" +"يجب توÙير عنوان ftp ØµØ§Ù„Ø ÙˆÙƒÙ„Ù…Ø© المرور القديمة وكلمة المرور1 وكلمة المرور2" + +msgid "You must provide a valid ip" +msgstr "يجب توÙير IP صالØ" + +msgid "You must provide a valid name and it must exist." +msgstr "يجب توÙير اسم ØµØ§Ù„Ø ÙˆÙŠØ¬Ø¨ أن يكون موجوداً." + +msgid "You must provide a valid name and value" +msgstr "يجب توÙير اسم وقيمة ØµØ§Ù„ØØ©" + +msgid "You must provide the passwd variable" +msgstr "يجب توÙير متغير passwd" + +msgid "" +"You must select a nameserver ip pair (ns1.domain.com and ns2.domain.com)" +msgstr "يجب ØªØØ¯ÙŠØ¯ زوج ip Ù…Ùنشر أسماء (ns1.domain.com ns2.domain.com)" + +msgid "You must select at least one mailing list to delete" +msgstr "يجب ØªØØ¯ÙŠØ¯ قائمة بريدية ÙˆØ§ØØ¯Ø© على الأقل Ù„ØØ°Ùها" + +msgid "You must select at least one mailing list to purge" +msgstr "يجب ØªØØ¯ÙŠØ¯ قائمة بريدية ÙˆØ§ØØ¯Ø© على الأقل لإزالة" + +msgid "You must select exactly one key" +msgstr "يجب ØªØØ¯ÙŠØ¯ Ù…ÙØªØ§Ø ÙˆØ§ØØ¯ بالضبط" + +msgid "You must select something" +msgstr "يجب ØªØØ¯ÙŠØ¯ شيء" + +msgid "" +"You must use a number for the hour (0-23). You can only have a cron run once " +"per day. (You can make more than one cron)" +msgstr "" +"يجب استخدام رقم للساعة (0-23). يمكنك Ùقط تشغيل كرون مرة ÙˆØ§ØØ¯Ø© ÙÙŠ اليوم " +"Ø§Ù„ÙˆØ§ØØ¯. (يمكنك جعل أكثر من كرون ÙˆØ§ØØ¯)" + +msgid "" +"You must use a number for the minute (0-59). You can only have a cron run " +"once per day. (You can make more than one cron)" +msgstr "" +"يجب استخدام رقم للدقيقة (0-59). يمكنك Ùقط تشغيل كرون مرة ÙˆØ§ØØ¯Ø© ÙÙŠ اليوم " +"Ø§Ù„ÙˆØ§ØØ¯. (يمكنك جعل أكثر من كرون ÙˆØ§ØØ¯)" + +msgid "You must use a valid path" +msgstr "يجب استخدام مسار صالØ" + +#, c-format +msgid "You must wait at least %d minute between updates." +msgid_plural "You must wait at least %d minutes between updates." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "You must wait for the stats to be computed." +msgstr "يجب عليك الانتظار ØØªÙ‰ يتم ØØ³Ø§Ø¨ Ø§Ù„Ø¥ØØµØ§Ø¦ÙŠØ§Øª." + +msgid "You need to specify a domain" +msgstr "ØªØØªØ§Ø¬ إلى ØªØØ¯ÙŠØ¯ مجال" + +msgid "You require a database name" +msgstr "تتطلب اسم قاعدة بيانات" + +msgid "You require a domain, anon, anonup and a message" +msgstr "أنت ØªØØªØ§Ø¬ إلى مجال، أنون، أنونوب ورسالة" + +msgid "You require domain and passwd list to sync the accounts" +msgstr "تتطلب المجال وقائمة passwd لمزامنة Ø§Ù„ØØ³Ø§Ø¨Ø§Øª" + +msgid "You require either the passwd or quota" +msgstr "ØªØØªØ§Ø¬ إما إلى passwd أو Ø§Ù„ØØµØ© النسبية" + +msgid "You require name, user, passwd and passwd2" +msgstr "تتطلب الاسم، المستخدم، passwd Ùˆ passwd2" + +msgid "You require the name and user" +msgstr "ØªØØªØ§Ø¬ إلى الاسم والمستخدم" + +msgid "You require the name, user, passwd and passwd2" +msgstr "أنت ØªØØªØ§Ø¬ إلى الاسم، المستخدم، passwd Ùˆ passwd2" + +msgid "" +"You require the source url path (eg: /redirect) and the destination url (eg: " +"www.redirect.com)" +msgstr "" +"كنت Ø¨ØØ§Ø¬Ø© إلى مسار url المصدر (على سبيل المثال: / إعادة توجيه) وعنوان url " +"الوجهة (على سبيل المثال: www.redirect.com)" + +msgid "You require user and domain to change a pop account" +msgstr "تتطلب المستخدم والمجال لتغيير ØØ³Ø§Ø¨ البوب" + +msgid "You require user, domain and passwd to add a pop account" +msgstr "ØªØØªØ§Ø¬ المستخدم، والمجال Ùˆ passwd Ù„Ø¥Ø¶Ø§ÙØ© ØØ³Ø§Ø¨ البوب" + +msgid "You required a password" +msgstr "كنت ØªØØªØ§Ø¬ إلى كلمة مرور" + +msgid "You should be notified via the Message system when it is complete." +msgstr "يجب أن يتم إعلامك عبر نظام الرسائل عند اكتماله." + +msgid "You will be notified via the Message System upon completion." +msgstr "سيتم إعلامك عبر نظام الرسائل عند الانتهاء." + +msgid "" +"You will be notified via the Message System when the process is complete" +msgstr "سيتم إعلامك عبر نظام الرسائل عند اكتمال العملية" + +msgid "You will receive a message when it's complete." +msgstr "ستتلقى رسالة عند اكتمالها." + +msgid "" +"You're using the login-as option, so use your own password. Not the User's " +"password." +msgstr "" +"أنت تستخدم خيار تسجيل الدخول، لذا استخدم كلمة المرور الخاصة بك. ليس كلمة " +"مرور المستخدم." + +#, c-format +msgid "Your Hash URL Login '%s' has been created" +msgstr "تم إنشاء \"%s\" لتسجيل الدخول الخاص بك ÙÙŠ تجزئة URL" + +msgid "Your IP will be blacklisted" +msgstr "سيتم إدراج IP الخاص بك على القائمة السوداء" + +#, c-format +msgid "Your Login Key '%s' has been created" +msgstr "تم إنشاء Ù…ÙØªØ§Ø تسجيل الدخول الخاص بك '%s'" + +#, c-format +msgid "Your Name has been changed to %s" +msgstr "تم تغيير اسمك إلى %s" + +msgid "Your account" +msgstr "ØØ³Ø§Ø¨Ùƒ" + +#, c-format +msgid "Your account %s@%s has been setup. In your e-mail program, use" +msgstr "تم إعداد ØØ³Ø§Ø¨Ùƒ %s@%s. ÙÙŠ برنامج البريد الإلكتروني، استخدم" + +msgid "Your account '|USERNAME|' has been suspended. Reason: '|REASON|'" +msgstr "ØØ³Ø§Ø¨Ùƒ '| تم تعليق اسم المستخدم|' السبب: '| السبب|'" + +msgid "Your account for |domain| is now ready for use." +msgstr "ØØ³Ø§Ø¨Ùƒ | نطاق| جاهز الآن للاستخدام." + +msgid "Your backups are now ready" +msgstr "النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ© جاهزة الآن" + +msgid "Your database has been setup. Use the following values:" +msgstr "تم إعداد قاعدة البيانات الخاصة بك. استخدم القيم التالية:" + +#, c-format +msgid "Your database name (%s) contains invalid characters (%s)." +msgstr "ÙŠØØªÙˆÙŠ Ø§Ø³Ù… قاعدة البيانات (%s) على Ø£ØØ±Ù غير ØµØ§Ù„ØØ© (%s)." + +#, c-format +msgid "" +"Your database username (%s) contains invalid characters (%s). MySQL account " +"will not be created on %s." +msgstr "" +"ÙŠØØªÙˆÙŠ Ø§Ø³Ù… المستخدم قاعدة البيانات (%s) Ø£ØØ±Ù غير ØµØ§Ù„ØØ© (%s). لن يتم إنشاء " +"ØØ³Ø§Ø¨ MySQL على %s." + +msgid "Your default domain has been set" +msgstr "تم تعيين المجال Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Ø§Ù„Ø®Ø§Øµ بك" + +msgid "Your disk usage has been updated" +msgstr "تم ØªØØ¯ÙŠØ« استخدام القرص" + +msgid "Your message has been saved" +msgstr "تم ØÙظ رسالتك" + +msgid "Your message has been sent" +msgstr "تم ارسال رسالتك" + +msgid "Your message is being sent in the background" +msgstr "يتم إرسال رسالتك ÙÙŠ الخلÙية" + +msgid "" +"Your message is empty. Users might appreciate knowing what they're getting." +msgstr "رسالتك ÙØ§Ø±ØºØ©. قد يقدر المستخدمون Ù…Ø¹Ø±ÙØ© ما ÙŠØØµÙ„ون عليه." + +msgid "Your password" +msgstr "كلمة المرور" + +msgid "Your password is invalid" +msgstr "كلمة المرور غير ØµØ§Ù„ØØ©" + +msgid "" +"Your request for an update will begin in under a minute. You should be " +"notified via the Message system when it is complete" +msgstr "" +"سيبدأ طلبك Ù„Ù„ØØµÙˆÙ„ على ØªØØ¯ÙŠØ« ÙÙŠ أقل من دقيقة. يجب أن يتم إعلامك عبر نظام " +"الرسائل عند اكتماله" + +msgid "Your request for an updated license file will begin in under a minute." +msgstr "سيبدأ طلبك Ù„Ù„ØØµÙˆÙ„ على مل٠ترخيص Ù…ØØ¯Ù‘Ø« ÙÙŠ أقل من دقيقة." + +msgid "Your request has expired." +msgstr "انتهت صلاØÙŠØ© طلبك." + +msgid "Your request will be executed within 1 minute" +msgstr "سيتم تنÙيذ طلبك ÙÙŠ غضون دقيقة ÙˆØ§ØØ¯Ø©" + +msgid "" +"Your request will run in the background. Once completed, you'll be notified " +"in the Message System." +msgstr "سيتم تشغيل طلبك ÙÙŠ الخلÙية. بعد الانتهاء، سيتم إعلامك ÙÙŠ نظام الرسائل." + +msgid "Your reseller account has reached its assigned limit" +msgstr "بلغ ØØ³Ø§Ø¨ موزع الخاص بك Ø§Ù„ØØ¯ المخصص له" + +msgid "Your reseller has reached their assigned limit" +msgstr "وصل موزعك إلى Ø§Ù„ØØ¯ الأقصى المخصص له" + +msgid "Your subject contains invalid characters." +msgstr "ÙŠØØªÙˆÙŠ Ø§Ù„Ù…ÙˆØ¶ÙˆØ¹ على Ø£ØØ±Ù غير ØµØ§Ù„ØØ©." + +#, c-format +msgid "Your ticket number is %s." +msgstr "رقم تذكرتك %s." + +msgid "Your usertype is too low to request these widgets" +msgstr "نوع المستخدم الخاص بك Ù…Ù†Ø®ÙØ¶ جداً بØÙŠØ« لا يمكن طلب هذه Ø§Ù„ØØ§Ø¬ÙŠØ§Øª" + +msgid "Zone Keys are newer than the Zone Signinging." +msgstr "Ù…ÙØ§ØªÙŠØ المنطقة Ø£ØØ¯Ø« من منطقة التوقيع." + +msgid "Zone Reset" +msgstr "إعادة تعيين المنطقة" + +msgid "Zone Signing has expired." +msgstr "انتهت صلاØÙŠØ© توقيع المنطقة." + +msgid "" +"Zone has not yet been signed. Ensure you first generate the keys and sign " +"it one before using this automated sign tool" +msgstr "" +"المنطقة لم توقع بعد. تأكد من إنشاء Ø§Ù„Ù…ÙØ§ØªÙŠØ أولاً وتوقيعها قبل استخدام أداة " +"الإشارات التلقائية هذه" + +msgid "Zone is of type DNSSEC." +msgstr "المنطقة من نوع DNSSEC." + +msgid "Zone keys generated" +msgstr "تم إنشاء Ù…ÙØ§ØªÙŠØ المنطقة" + +msgid "Zone signed" +msgstr "المنطقة الموقعة" + +msgid "access hosts cannot be domains because skip_name_resolve=ON" +msgstr "لا يمكن أن يكون مضيÙÙˆ الوصول مجالات بسبب skip_name_resolve = ON" + +msgid "account ..." +msgstr "Ø§Ù„ØØ³Ø§Ø¨" + +msgid "adding" +msgstr "" +"يمكنك استخدام قوالب Ø§Ù„ØØ³Ø§Ø¨Ø§Øª لتبسيط عملية إنشاء المستخدم عند Ø¥Ø¶Ø§ÙØ© ØØ³Ø§Ø¨Ø§Øª " +"مستخدمين جديدة." + +msgid "allow_subdomain_docroot_override is disabled" +msgstr "تعطيل allow_subdomain_docroot_override" + +msgid "at least" +msgstr "على الأقل" + +msgid "at most" +msgstr "على الأكثر" + +msgid "can_dnssec is not enabled. Cannot sign the zone." +msgstr "لم يتم تمكين can_dnssec. لا يمكن توقيع المنطقة." + +#, c-format +msgid "cannot fstatat %s: %s" +msgstr "لا يمكن fstatat %s: %s" + +#, c-format +msgid "cannot unlinkat %s: %s" +msgstr "لا يمكن إلغاء ربط %s: %s" + +msgid "catch is required" +msgstr "مطلوب الصيد" + +#, fuzzy, c-format +#| msgid "Connection error: %s" +msgid "cgroup error: %s" +msgstr "خطأ ÙÙŠ الاتصال: %s" + +#, fuzzy +#| msgid "'%s' is not enabled in your license" +msgid "cgroup is not enabled in your license" +msgstr "لم يتم تمكين \"%s\" ÙÙŠ الترخيص" + +#, fuzzy +#| msgid "Error writing the directadmin.conf" +msgid "cgroup is turned off in the directadmin.conf" +msgstr "خطأ ÙÙŠ كتابة directadmin.conf" + +msgid "change" +msgstr "تغيير" + +msgid "contains" +msgstr "ÙŠØØªÙˆÙ‰" + +msgid "day" +msgid_plural "days" +msgstr[0] "يوم" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "day(s)" +msgstr "أيام" + +msgid "days" +msgstr "أيام" + +msgid "default user" +msgstr "مستخدم Ø§ÙØªØ±Ø§Ø¶ÙŠ" + +#, c-format +msgid "dnsprovider option '%s' contains invalid characters" +msgstr "خيار dnsprovider '%s' ÙŠØØªÙˆÙŠ Ø¹Ù„Ù‰ Ø£ØØ±Ù غير ØµØ§Ù„ØØ©" + +msgid "does not belong to you" +msgstr "لا ينتمي لك" + +msgid "emails have just been sent by" +msgstr "لقد تم إرسال رسائل البريد الإلكتروني من قبل" + +msgid "equals" +msgstr "يساوي" + +msgid "has been changed." +msgstr "تم تغييره." + +msgid "has been updated with the new ip" +msgstr "تم ØªØØ¯ÙŠØ« مع IP الجديد" + +msgid "hidden" +msgstr "Ø§Ø®ÙØ§Ø¡" + +msgid "high_score must be in the range 1 to 99" +msgstr "يجب أن يكون high_score ÙÙŠ النطاق 1 إلى 99" + +msgid "hour" +msgid_plural "hours" +msgstr[0] "ساعة" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "hours" +msgstr "ساعات" + +#, c-format +msgid "is an invalid email address. User %s will not be created" +msgstr "عنوان بريد إلكتروني غير صالØ. لن يتم إنشاء %s المستخدم" + +msgid "is currently down" +msgstr "ØØ§Ù„ياً أسÙÙ„" + +msgid "is not a valid database name" +msgstr "اسم قاعدة بيانات غير صالØ" + +msgid "is not a valid username" +msgstr "الرجاءادخال اسم مستخدم صØÙŠØ." + +#, c-format +msgid "is_ip_in_mask_range:%s:%s: range '%s' must be a positive integer" +msgstr "is_ip_in_mask_range:%s:%s: يجب أن يكون النطاق '%s' عددًا صØÙŠØÙ‹Ø§ موجبًا" + +#, c-format +msgid "" +"is_ip_in_mask_range:%s:%s: range '%s' must be between 1 and 128, inclusive" +msgstr "" +"is_ip_in_mask_range:%s:%s: يجب أن يكون النطاق \"%s\" بين 1 Ùˆ 128ØŒ شاملاً" + +#, c-format +msgid "is_ip_in_mask_range:%s:%s: range does not have /" +msgstr "is_ip_in_mask_range: %s: %s: لا يملك مجموعة /" + +msgid "json string" +msgstr "سلسلة json" + +msgid "license nresellers issue" +msgstr "إصدار بائعي التراخيص" + +msgid "license nusers issue" +msgstr "ترخيص قضية nusers" + +msgid "license vdomains issue" +msgstr "إصدار vdomains الترخيص" + +#, c-format +msgid "lstat error: %s" +msgstr "خطأ lstat: %s" + +msgid "mail() line number" +msgstr "رقم سطر البريد()" + +msgid "message is empty. Please enter some text." +msgstr "الرسالة ÙØ§Ø±ØºØ©. الرجاء إدخال بعض النص." + +#, c-format +msgid "mime type (%s) for '%s' is not of type 'image/'" +msgstr "نوع mime (%s) Ù„ '%s' ليس من نوع 'صورة/'" + +msgid "minute" +msgid_plural "minutes" +msgstr[0] "دقيقة" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "minutes" +msgstr "دقائق" + +#, c-format +msgid "mkdir(%s) error: %s" +msgstr "خطأ mkdir(%s): %s" + +msgid "modify password" +msgstr "تعديل كلمة المرور" + +msgid "modify privileges" +msgstr "تعديل الامتيازات" + +msgid "month" +msgid_plural "months" +msgstr[0] "شهر" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "mysqldump error output:" +msgstr "mysqldump خطأ الإخراج:" + +msgid "new_domain is not a valid domain" +msgstr "new_domain ليس مجالًا صالØÙ‹Ø§" + +msgid "newer than" +msgstr "Ø£ØØ¯Ø« من" + +msgid "ns1 or ns2 are not valid nameservers" +msgstr "ns1 أو ns2 ليست خوادم أسماء ØµØ§Ù„ØØ©" + +msgid "of" +msgstr "من" + +msgid "old_package or new_package are not valid package names" +msgstr "old_package أو new_package أسماء Ø§Ù„ØØ²Ù… غير ØµØ§Ù„ØØ©" + +msgid "older than" +msgstr "" +"Ø§Ù…Ø³Ø Ø±Ø³Ø§Ø¦Ù„ البريد الإلكتروني الأقدم من XX يومًا من مجلد البريد المزعج / " +"البريد الغير مرغوب به." + +#, c-format +msgid "older than %s days." +msgstr "أقدم من %s يوما." + +msgid "or" +msgstr "أو" + +msgid "or IPv6 (1:2:3:4:5:6:7:8) or IPv6 range (1:2:3:4:5:6:7:8-9)" +msgstr "أو IPv6 (1:2:3:4:5:6:7:8) أو IPv6 نطاق (1:2:3:4:5:6:7:8-9)" + +msgid "or select from" +msgstr "أو اختر من" + +msgid "php.ini override added" +msgstr "php.ini تجاوز وأضاÙ" + +#, c-format +msgid "php1_select and php2_select must be 0-%d" +msgstr "يجب أن يكون php1_select php2_select ØµÙØ±-%d" + +msgid "" +"phpMyAdmin is missing direct_login option. Please re-install phpMyAdmin." +msgstr "phpMyAdmin Ù…Ùقود direct_login الخيار. يرجى إعادة تثبيت phpMyAdmin." + +msgid "pop_disk_usage_cache is not enabled" +msgstr "لم يتم تمكين pop_disk_usage_cache" + +msgid "port" +msgstr "Ù…Ù†ÙØ°" + +msgid "redirect_url contains invalid characters" +msgstr "redirect_url ÙŠØØªÙˆÙŠ Ø¹Ù„Ù‰ Ø£ØØ±Ù غير صØÙŠØØ©" + +msgid "removing" +msgstr "ازاله" + +msgid "reseller_can_set_email_limit=0 is set, thus you cannot set a limit" +msgstr "reseller_can_set_email_limit = 0ØŒ وبالتالي لا يمكنك تعيين ØØ¯" + +msgid "retry" +msgstr "أعد Ø§Ù„Ù…ØØ§ÙˆÙ„Ø©" + +msgid "routes must start with a [ character." +msgstr "يجب أن تبدأ المسارات Ø¨ØØ±Ù ." + +#, c-format +msgid "search length out of bounds: 2 <= '%zd' <= 128" +msgstr "طول Ø§Ù„Ø¨ØØ« خارج Ø§Ù„ØØ¯ÙˆØ¯: 2 <= %zd < = 128" + +msgid "second" +msgid_plural "seconds" +msgstr[0] "ثانية" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "selected" +msgstr "مختار" + +msgid "selected overrides removed from php.ini" +msgstr "التجاوزات Ø§Ù„Ù…ØØ¯Ø¯Ø© إزالتها من php.ini" + +msgid "selected skipped rules removed" +msgstr "تم ØØ°Ù القواعد التي تم تخطيها" + +msgid "selecting none includes all domains" +msgstr "ØªØØ¯ÙŠØ¯ بلا يشمل جميع المجالات" + +msgid "sent" +msgstr "ارسال" + +msgid "set Permission" +msgstr "تعيين الإذن" + +msgid "show_blocked_ips.sh output:" +msgstr "show_blocked_ips.sh الإخراج:" + +msgid "starts with" +msgstr "يبدا ب" + +msgid "subject contains invalid characters." +msgstr "ÙŠØØªÙˆÙŠ Ø§Ù„Ù…ÙˆØ¶ÙˆØ¹ على Ø£ØØ±Ù غير ØµØ§Ù„ØØ©." + +#, c-format +msgid "subject_select != %d, but subject is not set. This shouldn't happen." +msgstr "subject_select != %dØŒ ولكن لم يتم تعيين الموضوع. هذا لا يجب أن ÙŠØØ¯Ø«" + +msgid "that is the server's hostname and you cannot use it" +msgstr "هذا هو اسم المضي٠للملقم ولا يمكنك استخدامه" + +msgid "the new domain name already exists on your system" +msgstr "اسم النطاق الجديد موجود Ø¨Ø§Ù„ÙØ¹Ù„ على النظام الخاص بك" + +msgid "too many iterations" +msgstr "تكرارات كثيرة جداً" + +msgid "too many tables" +msgstr "جداول كثيرة جداً" + +msgid "unlimited" +msgstr "غير Ù…ØØ¯ÙˆØ¯" + +msgid "user, passwd, passwd2 and type are required" +msgstr "المستخدم، passwdØŒ passwd2 ونوع مطلوبة" + +msgid "user.conf override" +msgstr "user.conf تجاوز" + +msgid "user_brutecount disabled" +msgstr "user_brutecount معطل" + +msgid "user_modify_pre.sh error" +msgstr "خطأ user_modify_pre.sh" + +msgid "value is required" +msgstr "القيمة مطلوبة" + +msgid "where=spamfolder has been disabled via show_main_spambox=0" +msgstr "" +"ØÙŠØ« تم تعطيل مجلد البريد الإلكتروني العشوائي عن طريق show_main_spambox = 0" + +msgid "with the incorrect answer of" +msgstr "مع إجابة غير صØÙŠØØ© من" + +msgid "your new password is" +msgstr "كلمة مرورك الجديدة!" + +msgid "your new quota is" +msgstr "Ø§Ù„ØØµØ© الجديدة الخاصة بك هي" + +#, c-format +msgid "your new send limit is: %s" +msgstr "ØØ¯ الإرسال الجديد الخاص بك هو: %s" + +msgid "" +"~/domains was missing, but we ran into an error while trying to re-create it" +msgstr "~ / المجالات كان Ù…Ùقودا ØŒ ولكن اصطدمنا خطأ أثناء Ù…ØØ§ÙˆÙ„Ø© إعادة إنشائه" + +#~ msgid "'%s' does not exist in the certificate" +#~ msgstr "'%s' غير موجود ÙÙŠ الشهادة" + +#~ msgid "Cannot find the %s account" +#~ msgstr "لا يمكن العثور على ØØ³Ø§Ø¨ %s" + +#~ msgid "Error reading %s to get 'email': %s" +#~ msgstr "خطأ ÙÙŠ قراءة %s Ù„Ù„ØØµÙˆÙ„ على \"البريد الإلكتروني\": %s" + +#~ msgid "Invalid command" +#~ msgstr "أمر غير صالØ" + +#~ msgid "Netdata Server Metrics" +#~ msgstr "مقاييس خادم Netdata" + +#~ msgid "Please select at least one Mail SNI Host" +#~ msgstr "الرجاء ØªØØ¯ÙŠØ¯ Ù…Ø¶ÙŠÙ ÙˆØ§ØØ¯ على الأقل لـ Mail SNI" + +#~ msgid "Rspamd WebUI" +#~ msgstr "Rspamd WebUI" + +#~ msgid "SNI Host '%s' does not belong to you" +#~ msgstr "SNI المضي٠'%s' لا ينتمي لك" + +#~ msgid "Cannot Delete those NS records" +#~ msgstr "لا يمكن ØØ°Ù هذه السجلات NS" + +#~ msgid "Deleting them will leave you with 0." +#~ msgstr "ØØ°Ùها سو٠أترك لكم مع 0." + +#~ msgid "Error writing %s : %s" +#~ msgstr "خطأ ÙÙŠ كتابة %s : %s" + +#~ msgid "Unable to read backups directory" +#~ msgstr "غير قادر على قراءة دليل النسخ Ø§Ù„Ø§ØØªÙŠØ§Ø·ÙŠØ©" diff --git a/update/data/lang/internal.pot b/update/data/lang/internal.pot new file mode 100644 index 0000000..a244f1b --- /dev/null +++ b/update/data/lang/internal.pot @@ -0,0 +1,8259 @@ +# #-#-#-#-# internal.pot (DirectAdmin ) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# internal.pot (DirectAdmin ) #-#-#-#-#\n" +"Project-Id-Version: DirectAdmin \n" +"Report-Msgid-Bugs-To: support@directadmin.com\n" +"POT-Creation-Date: 2021-06-09 14:36+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +"#-#-#-#-# bin.pot #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: \n" +"X-Generator: xgotext\n" +"#-#-#-#-# util.pot #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: \n" +"X-Generator: xgotext\n" + +#, c-format +msgid " - %d New Message Inside" +msgid_plural " - %d New Messages Inside" +msgstr[0] "" +msgstr[1] "" + +msgid " / Day" +msgstr "" + +msgid "# of Domains" +msgstr "" + +msgid "# of IPs" +msgstr "" + +msgid "# of MySQL DBs" +msgstr "" + +msgid "# of Resellers" +msgstr "" + +msgid "# of SubDomains" +msgstr "" + +msgid "# of Users" +msgstr "" + +msgid "# of free IPs" +msgstr "" + +#, c-format +msgid "%d Days, %d Hours and %d Minutes" +msgstr "" + +#, c-format +msgid "%d of %d Admin/Reseller accounts currently exist." +msgstr "" + +#, c-format +msgid "%d of %d accounts currently exist." +msgstr "" + +#, c-format +msgid "%d of %d domains currently exist." +msgstr "" + +#, c-format +msgid "%s %s %s did not exist" +msgstr "" + +#, c-format +msgid "" +"%s '%s' cannot be restored under '%s'. Restoring under the file's default: " +"'%s'" +msgstr "" + +#. /# %1$s - IP address +#. /# %2$s - Username +#, c-format +msgid "%s - user's '%s' current IP" +msgstr "" + +#, c-format +msgid "%s Day(s)" +msgstr "" + +#, c-format +msgid "" +"%s Edit the User Welcome Message to ensure the subject and message are set." +msgstr "" + +#, c-format +msgid "%s License" +msgstr "" + +#, c-format +msgid "%s Month(s)" +msgstr "" + +#, c-format +msgid "%s Removed" +msgstr "" + +#, c-format +msgid "%s Week(s)" +msgstr "" + +#, c-format +msgid "%s account %s has just been created" +msgstr "" + +#, c-format +msgid "%s already exists" +msgstr "" + +#, c-format +msgid "%s already exists on a remote server." +msgstr "" + +#, c-format +msgid "%s already exists on the server." +msgstr "" + +#, c-format +msgid "%s already exists. Pass overwrite=yes to force" +msgstr "" + +#, c-format +msgid "%s appears to be a link. Aborting." +msgstr "" + +#, c-format +msgid "%s can now be shared." +msgstr "" + +#, c-format +msgid "%s contains dangerous characters" +msgstr "" + +#, c-format +msgid "%s could not be assigned, it must first be free and unassigned." +msgstr "" + +#, c-format +msgid "" +"%s could not be freed, it must first have zero domain if it is shared, or " +"must be reserved." +msgstr "" + +#, c-format +msgid "%s could not be removed, you must free it first." +msgstr "" + +#, c-format +msgid "%s could not be shared, it must first be free" +msgstr "" + +#, c-format +msgid "%s deleted successfully." +msgstr "" + +#, c-format +msgid "%s does not exist" +msgstr "" + +#, c-format +msgid "%s does not have same ownership as %s" +msgstr "" + +#, c-format +msgid "%s has been blocked in %s to prevent further attempts on the account." +msgstr "" + +#, c-format +msgid "%s has been copied to %s." +msgstr "" + +#, c-format +msgid "%s has been removed from the list" +msgstr "" + +#, c-format +msgid "%s has been renamed to %s." +msgstr "" + +#, c-format +msgid "%s has been saved as %s." +msgstr "" + +#, c-format +msgid "%s is a directory, will not delete" +msgstr "" + +#, c-format +msgid "%s is a link" +msgstr "" + +#, c-format +msgid "%s is hard or symbolic link" +msgstr "" + +#, c-format +msgid "%s is missing" +msgstr "" + +#, c-format +msgid "%s is not a directory" +msgstr "" + +#, c-format +msgid "%s is not a socket" +msgstr "" + +#, c-format +msgid "%s is not a symlink" +msgstr "" + +#, c-format +msgid "%s is not a valid IP or range" +msgstr "" + +#, c-format +msgid "%s is not a valid access host" +msgstr "" + +#, c-format +msgid "%s is not a valid database name" +msgstr "" + +#, c-format +msgid "%s is not a valid file" +msgstr "" + +#, c-format +msgid "%s is not a valid ip range. Use: 1.2.3.4-10" +msgstr "" + +#, c-format +msgid "%s is not a valid key, skipping" +msgstr "" + +#, c-format +msgid "%s is not chowned to %s which is a likely cause for extraction failure" +msgstr "" + +#, c-format +msgid "%s is not enabled" +msgstr "" + +#, c-format +msgid "%s is not in your commands list" +msgstr "" + +#, c-format +msgid "%s is not on your domain's IP list" +msgstr "" + +#, c-format +msgid "%s is not one of the listed redirect types" +msgstr "" + +#, c-format +msgid "%s is not owned by %s" +msgstr "" + +#, c-format +msgid "%s is not set to 'free' or is still assigned to a reseller" +msgstr "" + +#, c-format +msgid "%s is now controlled by %s" +msgstr "" + +#, c-format +msgid "%s is now free" +msgstr "" + +#, c-format +msgid "%s is now unassigned." +msgstr "" + +#, c-format +msgid "%s is now your default domain." +msgstr "" + +#, c-format +msgid "%s is out of range" +msgstr "" + +#, c-format +msgid "" +"%s is reporting that IP %s has issued a password change request for user " +"'%s' without approval." +msgstr "" + +#, c-format +msgid "%s is required for %s" +msgstr "" + +#, c-format +msgid "%s must not be a symlink" +msgstr "" + +#, c-format +msgid "%s no longer has a Name Server Label." +msgstr "" + +#, c-format +msgid "%s not implemented" +msgstr "" + +#, c-format +msgid "%s records disabled at this level" +msgstr "" + +#, c-format +msgid "%s value of '%s' is not in the home_override_list" +msgstr "" + +#, c-format +msgid "%s will now point to %s" +msgstr "" + +#, c-format +msgid "%s's config files have been removed" +msgstr "" + +#, c-format +msgid "%s: lstat error on linnk value '%s': %s" +msgstr "" + +#, c-format +msgid "%s: readlinke error: %s" +msgstr "" + +#, c-format +msgid "%s=%s requires nginx_proxy=1 and the %s Pro-Pack" +msgstr "" + +#. /# %1$s - CPUQuota +#. /# %1$s - 200% +#. /# %1$s - percent +#, c-format +msgid "%s='%s' is not a valid %s type" +msgstr "" + +#, c-format +msgid "%sClick Here%s to learn how to enable it" +msgstr "" + +#, c-format +msgid "%sClick Here%s to view the local raw zone data" +msgstr "" + +#, c-format +msgid "%sSave Increase%s" +msgstr "" + +#, c-format +msgid "%sTemporary Bandwidth Increase" +msgstr "" + +#, c-format +msgid "%sYour IP will be blacklisted" +msgstr "" + +#, c-format +msgid "'%s' does not exist" +msgstr "" + +#, c-format +msgid "'%s' does not exist\n" +msgstr "" + +#, c-format +msgid "'%s' does not start with '%s'\n" +msgstr "" + +#, c-format +msgid "'%s' has been set to '%s'" +msgstr "" + +#, c-format +msgid "'%s' is a forbidden package name." +msgstr "" + +#, c-format +msgid "'%s' is disabled" +msgstr "" + +#, c-format +msgid "'%s' is not a valid css hex color" +msgstr "" + +#, c-format +msgid "'%s' is not assigned to your Reseller account." +msgstr "" + +#, c-format +msgid "'%s' is not enabled in your license" +msgstr "" + +#, c-format +msgid "'%s' is not enabled on the system." +msgstr "" + +#, c-format +msgid "'%s' is not on your list" +msgstr "" + +#, c-format +msgid "'%s' is required" +msgstr "" + +#, c-format +msgid "'%s' must be '%s' or '%s'" +msgstr "" + +msgid "'import' does not appear to be base 64 encoded" +msgstr "" + +msgid "'when' should be all, newer or older" +msgstr "" + +#, c-format +msgid "(%d) The following hard links have been found under User %s:" +msgstr "" + +msgid "* irretrievable *" +msgstr "" + +msgid "*** Stopped ***" +msgstr "" + +msgid "-- None Available --" +msgstr "" + +msgid "-- Reason:" +msgstr "" + +msgid "-- Select IP" +msgstr "" + +msgid "-- Select Package" +msgstr "" + +msgid "-- any time --" +msgstr "" + +msgid "-- anything --" +msgstr "" + +msgid "1k-blocks" +msgstr "" + +#, c-format +msgid "A %s record already exists with that name" +msgstr "" + +msgid "A 'free' IP can only be assigned to 1 User" +msgstr "" + +msgid "A Record Type is required: A, NS, MX, CNAME, PTR, or TXT" +msgstr "" + +msgid "A Reseller can only control level=user" +msgstr "" + +msgid "A Reseller cannot control other equal or higher account levels" +msgstr "" + +msgid "A file is required" +msgstr "" + +msgid "A forwarder already exists with that name" +msgstr "" + +msgid "A full domain/zone with this name already exists." +msgstr "" + +msgid "A key with that name already exists" +msgstr "" + +msgid "A list alias already exists with that name" +msgstr "" + +msgid "A message for that user already exists" +msgstr "" + +msgid "A pop account already exists with that name" +msgstr "" + +msgid "A skin name is required" +msgstr "" + +msgid "" +"A subdomain with the same name already exists on the system under another " +"domain." +msgstr "" + +msgid "Abuse" +msgstr "" + +msgid "Access Hosts" +msgstr "" + +msgid "Access host has been added" +msgstr "" + +msgid "Access hosts have been removed" +msgstr "" + +msgid "Account" +msgstr "" + +#, c-format +msgid "Account %s has just created %s %s from IP %s" +msgstr "" + +#, c-format +msgid "Account %s skipped due to suspension" +msgstr "" + +#, c-format +msgid "Account %s was suspended by an Admin and you only have Reseller access." +msgstr "" + +#, c-format +msgid "Account %s with domain %s has an empty caroot cert" +msgstr "" + +msgid "Account created" +msgstr "" + +#, c-format +msgid "Account created in directory '%s'" +msgstr "" + +msgid "Account has been unblocked from BlockCracking" +msgstr "" + +msgid "Account is not a Reseller" +msgstr "" + +msgid "Account is suspended" +msgstr "" + +msgid "Account password changed" +msgstr "" + +#, c-format +msgid "Accounts restored to %s partition." +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Activate" +msgstr "" + +msgid "Active" +msgstr "" + +msgid "Add" +msgstr "" + +#, c-format +msgid "Add %s" +msgstr "" + +msgid "Add Codes" +msgstr "" + +msgid "Add Host" +msgstr "" + +msgid "Add Override" +msgstr "" + +msgid "Add new Security Question" +msgstr "" + +msgid "Add the new NS records first." +msgstr "" + +msgid "Add to Apache" +msgstr "" + +msgid "Add to Clipboard" +msgstr "" + +msgid "Add to DNS" +msgstr "" + +#, c-format +msgid "Added ns1 as %s and ns2 as %s" +msgstr "" + +msgid "Additional" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Admin Backup/Transfer" +msgstr "" + +msgid "Admin Certificate Management" +msgstr "" + +msgid "Admin DNS Administration" +msgstr "" + +msgid "Admin File Editor" +msgstr "" + +msgid "Admin History" +msgstr "" + +msgid "Admin IP Management" +msgstr "" + +msgid "Admin Plugins" +msgstr "" + +msgid "Admin Resource Limits" +msgstr "" + +msgid "Admin SSL" +msgstr "" + +msgid "Admin SSL is not enabled" +msgstr "" + +msgid "Admin Settings" +msgstr "" + +msgid "Admin Statistics" +msgstr "" + +msgid "Advanced Search" +msgstr "" + +msgid "" +"After many tries, we were unable to create a unique login name. This is " +"improbable." +msgstr "" + +msgid "Afternoon" +msgstr "" + +#, c-format +msgid "Alias %s@%s -> %s has been created" +msgstr "" + +msgid "All" +msgstr "" + +msgid "All Data" +msgstr "" + +msgid "All E-Mail" +msgstr "" + +msgid "All Months (cgi)" +msgstr "" + +msgid "All Resellers" +msgstr "" + +msgid "All User Cron Jobs" +msgstr "" + +msgid "All Users" +msgstr "" + +msgid "All Users Except Selected Users" +msgstr "" + +msgid "All Users Except:" +msgstr "" + +msgid "All Users deleted successfully" +msgstr "" + +msgid "All databases removed succesfully" +msgstr "" + +msgid "All of Your Users" +msgstr "" + +msgid "All privileges have been set" +msgstr "" + +msgid "All route steps except the last are required to have a 'match'" +msgstr "" + +msgid "All selected Users have been suspended" +msgstr "" + +msgid "All selected Users have been unsuspended" +msgstr "" + +msgid "All specified forwarders removed" +msgstr "" + +msgid "Allocated" +msgstr "" + +msgid "Allow" +msgstr "" + +msgid "Allow Overselling" +msgstr "" + +#, c-format +msgid "Allowance threshold is 0%%" +msgstr "" + +#, c-format +msgid "Allowing that much %s would put you over your limit of %s" +msgstr "" + +msgid "Already Exists" +msgstr "" + +msgid "" +"Although a backup error has occurred, the upload of valid backups would have " +"still been attempted to" +msgstr "" + +msgid "An Error Occurred" +msgstr "" + +msgid "An Error has occurred" +msgstr "" + +msgid "An auto responder already exists with that name" +msgstr "" + +msgid "An autoresponder with that name already exists" +msgstr "" + +msgid "An error has occurred" +msgstr "" + +msgid "An error has occurred while rewriting the Nginx Unit config" +msgstr "" + +msgid "An error occured during extraction" +msgstr "" + +msgid "An error occured while creating the compressed file" +msgstr "" + +msgid "An error occured while resetting the file ownership" +msgstr "" + +msgid "An error occurred during the backup" +msgstr "" + +msgid "An error occurred listing the databases:" +msgstr "" + +msgid "An error occurred when unblocking the account" +msgstr "" + +msgid "An error occurred while applying settings to your Users" +msgstr "" + +msgid "An error occurred while attempting to copy the file" +msgstr "" + +msgid "An error occurred while attempting to create the directory" +msgstr "" + +msgid "An error occurred while attempting to protect the directory" +msgstr "" + +msgid "An error occurred while attempting to rename the file" +msgstr "" + +msgid "An error occurred while attempting to restore the file" +msgstr "" + +msgid "Anonymous Ftp" +msgstr "" + +msgid "Answer" +msgstr "" + +msgid "Apache" +msgstr "" + +msgid "Apache Handlers" +msgstr "" + +msgid "Apache config file re-written with new ip" +msgstr "" + +msgid "Apparent Size" +msgstr "" + +msgid "Appears as the first item within the section." +msgstr "" + +msgid "Appears at the very top of the template, before setting the variables." +msgstr "" + +msgid "" +"Appears in ALL context{} sections, used for password protected directories." +msgstr "" + +msgid "Appears in phpIniOverride{} section." +msgstr "" + +msgid "Appears in rewrite{} section." +msgstr "" + +msgid "Appears in scripthandler{} section." +msgstr "" + +msgid "Appears in vhssl{} section." +msgstr "" + +msgid "Appears just before the section." +msgstr "" + +msgid "Apply to All Users" +msgstr "" + +msgid "Apply to Me" +msgstr "" + +msgid "Apply to existing Domains" +msgstr "" + +msgid "Apr" +msgstr "" + +msgid "Archive Size" +msgstr "" + +msgid "Archives purged" +msgstr "" + +msgid "Are you sure you want to Delete the selected accounts?" +msgstr "" + +msgid "Are you sure you want to Delete the selected databases?" +msgstr "" + +msgid "Are you sure you want to Delete the selected keys?" +msgstr "" + +msgid "Are you sure you want to delete the selected zones?" +msgstr "" + +msgid "Are you sure you want to delete these files?" +msgstr "" + +msgid "Are you sure you want to kill these processes?" +msgstr "" + +msgid "Ascending" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assigned" +msgstr "" + +msgid "At least one crediential is required." +msgstr "" + +#, c-format +msgid "Attempting to copy %s onto itself, file skipped." +msgstr "" + +#, c-format +msgid "Attempting to move %s onto itself, file skipped." +msgstr "" + +msgid "Attempts" +msgstr "" + +msgid "Aug" +msgstr "" + +msgid "Auth::logoutCreator error" +msgstr "" + +#, c-format +msgid "" +"Authenication::get_unique_login_hash: could not generate a unique login has " +"after %s attempts" +msgstr "" + +msgid "Authentication" +msgstr "" + +msgid "Authorize" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Auto media selection active." +msgstr "" + +msgid "Auto+Confirm" +msgstr "" + +msgid "AutoResponders" +msgstr "" + +#, c-format +msgid "Automated certificate renewal for %s has succeeded" +msgstr "" + +msgid "Autoreply" +msgstr "" + +msgid "Autoresponder" +msgstr "" + +msgid "Autoresponder updated" +msgstr "" + +msgid "Autoresponders" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "Avoid use of trailers." +msgstr "" + +msgid "Awstats" +msgstr "" + +msgid "Awstats ..." +msgstr "" + +msgid "Awstats setting changed" +msgstr "" + +msgctxt "readable size" +msgid "B" +msgstr "" + +msgid "Back" +msgstr "" + +msgid "Backing up Databases" +msgstr "" + +msgid "Backing up E-Mail Data" +msgstr "" + +msgid "Backing up E-Mail Settings" +msgstr "" + +msgid "Backing up FTP" +msgstr "" + +msgid "Backing up User Configs" +msgstr "" + +msgid "Backing up User Data" +msgstr "" + +msgid "Backing up extra E-Mail items" +msgstr "" + +msgid "Backup" +msgstr "" + +#, c-format +msgid "Backup %d is not currently running." +msgstr "" + +#, c-format +msgid "Backup Abort (%d): A hard link was found under User %s's path" +msgstr "" + +#, c-format +msgid "Backup Error with Nginx Unit: %s" +msgstr "" + +msgid "Backup Halted" +msgstr "" + +msgid "Backup ID" +msgstr "" + +msgid "Backup creation added to queue" +msgstr "" + +#, c-format +msgid "Backup path %s has been created." +msgstr "" + +msgid "Backups added to Queue" +msgstr "" + +msgid "Bad User usertype" +msgstr "" + +msgid "Bandwidth" +msgstr "" + +msgid "Bandwidth (MB)" +msgstr "" + +msgid "Bandwidth Breakdown" +msgstr "" + +msgid "Bandwidth Usage" +msgstr "" + +msgid "Be sure to re-scan the QR code, as all old codes become invalid." +msgstr "" + +msgid "" +"Because the script meets the required criteria, it has been disabled via " +"chmod to 0." +msgstr "" + +msgid "" +"Before Unblocking, ensure that any compromised scripts have been removed or " +"fixed." +msgstr "" + +msgid "Billing Issue" +msgstr "" + +#, c-format +msgid "Blank value: default, global limit of %d" +msgstr "" + +msgid "Block Usage" +msgstr "" + +msgid "BlockCracker Blocked Paths" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "Both DNS Control and ttl override must be enabled" +msgstr "" + +msgid "Brute Force Monitor" +msgstr "" + +msgid "Brute-Force Attack detected in service log" +msgstr "" + +msgid "CA Certificate is Invalid" +msgstr "" + +msgid "CA Certificate is ok. Your site should be secure within a few minutes." +msgstr "" + +msgid "CC Address" +msgstr "" + +msgid "CGI-Bin" +msgstr "" + +msgid "CPU Quota" +msgstr "" + +msgid "Can use Server IP" +msgstr "" + +msgid "Can't get file lock on" +msgstr "" + +#, c-format +msgid "Can't open file %s for reading" +msgstr "" + +#, c-format +msgid "Can't reopen file %s for appending" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Cannot Add A Record" +msgstr "" + +msgid "Cannot Add CNAME Record" +msgstr "" + +msgid "Cannot Add Record" +msgstr "" + +msgid "Cannot Create Account" +msgstr "" + +msgid "Cannot Create Another Autoresponder" +msgstr "" + +msgid "Cannot Create Another Database" +msgstr "" + +msgid "Cannot Create Another Domain" +msgstr "" + +msgid "Cannot Create Another Domain Pointer" +msgstr "" + +msgid "Cannot Create Another FTP Account" +msgstr "" + +msgid "Cannot Create Another Forwarder" +msgstr "" + +msgid "Cannot Create Another Mailing List" +msgstr "" + +msgid "Cannot Create Another POP Account" +msgstr "" + +msgid "Cannot Create Another Subdomain" +msgstr "" + +msgid "Cannot Create Autoresponder" +msgstr "" + +msgid "Cannot Create Domain" +msgstr "" + +msgid "Cannot Create Vacation Message" +msgstr "" + +msgid "Cannot Create a Message" +msgstr "" + +msgid "Cannot Execute Command" +msgstr "" + +msgid "Cannot Execute Your Request" +msgstr "" + +msgid "Cannot Modify Key" +msgstr "" + +msgid "Cannot Modify User" +msgstr "" + +msgid "Cannot View Domain Settings" +msgstr "" + +#, c-format +msgid "Cannot add pointer %s, you have reached your limit of %s" +msgstr "" + +msgid "Cannot be an object" +msgstr "" + +msgid "Cannot change the ip" +msgstr "" + +msgid "" +"Cannot change the password for a system account. Login to the control panel " +"to do that." +msgstr "" + +msgid "" +"Cannot change the password for this email account. The account is currently " +"on a suspended domain." +msgstr "" + +msgid "Cannot change your email" +msgstr "" + +msgid "Cannot change your name" +msgstr "" + +msgid "Cannot change your password" +msgstr "" + +msgid "Cannot create User Backup" +msgstr "" + +msgid "Cannot create domain" +msgstr "" + +msgid "Cannot create that domain" +msgstr "" + +msgid "Cannot create user using those settings" +msgstr "" + +msgid "Cannot delete records" +msgstr "" + +msgid "Cannot delete the skin you're currently using." +msgstr "" + +#, c-format +msgid "Cannot determine owner of subdomain '%s'" +msgstr "" + +msgid "Cannot execute your request" +msgstr "" + +#, c-format +msgid "Cannot find %s" +msgstr "" + +#, c-format +msgid "Cannot find %s in list" +msgstr "" + +#, c-format +msgid "Cannot find %s in name" +msgstr "" + +#, c-format +msgid "Cannot find %s to convert %s" +msgstr "" + +#, c-format +msgid "Cannot find %s, skipping." +msgstr "" + +#, c-format +msgid "Cannot find %s. Ensure the domain exists and is not suspended" +msgstr "" + +#, c-format +msgid "Cannot find '%s'" +msgstr "" + +#, c-format +msgid "Cannot find '%s' in the list of allowed values for %s" +msgstr "" + +#, c-format +msgid "Cannot find '%s' in the template" +msgstr "" + +msgid "Cannot find IP" +msgstr "" + +#, c-format +msgid "Cannot find Security Question ID %d in the User list" +msgstr "" + +#, c-format +msgid "Cannot find User '%s'" +msgstr "" + +msgid "Cannot find a valid system username in the domainowners file." +msgstr "" + +msgid "Cannot find any SAN values in the certificate." +msgstr "" + +msgid "Cannot find any message subjects from clear_message_system_list" +msgstr "" + +msgid "Cannot find any security questions from security_questions.txt" +msgstr "" + +#, c-format +msgid "Cannot find any tar.gz after converting from %s" +msgstr "" + +msgid "Cannot find domain in domain owners file" +msgstr "" + +msgid "Cannot find domain in the certificate." +msgstr "" + +#, c-format +msgid "Cannot find key value in %s" +msgstr "" + +#, c-format +msgid "Cannot find logo file for token %s in skin %s" +msgstr "" + +#, c-format +msgid "Cannot find logo file for token %s=%s in skin %s" +msgstr "" + +#, c-format +msgid "Cannot find plugin %s" +msgstr "" + +msgid "Cannot find show_blocked_ips.sh" +msgstr "" + +msgid "Cannot find template_php_ini or domain_php_ini in json" +msgstr "" + +msgid "Cannot find that code. It's likely expired." +msgstr "" + +msgid "Cannot find that domain in the domainowners file" +msgstr "" + +msgid "Cannot find that key id" +msgstr "" + +msgid "Cannot find the account nor the forwarder" +msgstr "" + +msgid "Cannot find the letsencrypt.sh script" +msgstr "" + +msgid "Cannot find the sql file after backup was run:" +msgstr "" + +#, c-format +msgid "Cannot find the user %s which should already exist" +msgstr "" + +#, c-format +msgid "Cannot get '%s' index from skin.conf" +msgstr "" + +#, c-format +msgid "Cannot get mime-type for %s" +msgstr "" + +#, c-format +msgid "Cannot get the user list for database %s" +msgstr "" + +msgid "Cannot have newline characters in subject" +msgstr "" + +msgid "Cannot have unlimited E-Mail quotas" +msgstr "" + +msgid "Cannot load lang po" +msgstr "" + +msgid "Cannot load lang request" +msgstr "" + +msgid "Cannot manage zone" +msgstr "" + +#, c-format +msgid "Cannot move a directory (%s) onto an existing file or directory (%s)" +msgstr "" + +msgid "Cannot open the password file to add the user" +msgstr "" + +msgid "Cannot open the password file to change the password" +msgstr "" + +msgid "Cannot open the user password file for reading" +msgstr "" + +msgid "Cannot read the numerical 'limit' (original -1 is still set)" +msgstr "" + +msgid "Cannot rename a directory onto an existing file or directory" +msgstr "" + +msgid "Cannot resend welcome email" +msgstr "" + +msgid "Cannot resolve host value for license check" +msgstr "" + +#, c-format +msgid "" +"Cannot restore the ftp account for %s. You have reached your limit (%s)." +msgstr "" + +msgid "Cannot set TTL" +msgstr "" + +msgid "Cannot set default domain" +msgstr "" + +msgid "Cannot stat the source file" +msgstr "" + +msgid "Cannot use the main account username" +msgstr "" + +msgid "Case Sensitive" +msgstr "" + +#, c-format +msgid "Catch all is now set to %s" +msgstr "" + +msgid "Catch-All E-Mail" +msgstr "" + +msgid "Catch-All Email" +msgstr "" + +msgid "Catch-All Email has been disabled on this account" +msgstr "" + +msgid "Catch-All email updated successfully" +msgstr "" + +msgid "Catch-All is now set to fail" +msgstr "" + +msgid "Catch-All is now set to ignore wrong addresses" +msgstr "" + +msgid "Certificate" +msgstr "" + +msgid "Certificate and Key Saved." +msgstr "" + +msgid "Certificate is Invalid" +msgstr "" + +msgid "Certificate is Self-Signed" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change the password to unblock it." +msgstr "" + +#, c-format +msgid "Changed by IP: %s" +msgstr "" + +msgid "Changes saved" +msgstr "" + +msgid "Check" +msgstr "" + +msgid "Check has already been done recently. Try later." +msgstr "" + +msgid "Check the error log for more information." +msgstr "" + +msgid "Check the time on both your server and your phone." +msgstr "" + +msgid "Check to see if the current software is valid" +msgstr "" + +#, c-format +msgid "Child user %s deleted" +msgstr "" + +msgid "" +"Choose from: blacklist_usernames, blacklist_smtp_usernames, " +"blacklist_script_usernames" +msgstr "" + +msgid "City must only contain letters, spaces and/or periods" +msgstr "" + +msgid "Clean Forwarders" +msgstr "" + +#, c-format +msgid "Cleaning %s" +msgstr "" + +msgid "Clear Customization" +msgstr "" + +msgid "Clear Messages System" +msgstr "" + +msgid "Clear NS" +msgstr "" + +msgid "Clear Search Filter" +msgstr "" + +#, c-format +msgid "Click %sHERE%s to go back" +msgstr "" + +#, c-format +msgid "Click %sHERE%s to return" +msgstr "" + +#, c-format +msgid "Click %sHERE%s to return to main page" +msgstr "" + +msgid "Click Here to Download the Latest Backup" +msgstr "" + +msgid "Click here to close this window" +msgstr "" + +msgid "Click here to enable SSL on the domain" +msgstr "" + +msgid "Clipboard" +msgstr "" + +msgid "Close" +msgstr "" + +msgid "Closed" +msgstr "" + +msgid "Closed+Confirm" +msgstr "" + +msgid "Code" +msgstr "" + +msgid "Code does not match" +msgstr "" + +#, c-format +msgid "Color %s (%s) is not from the list: %s" +msgstr "" + +msgid "Color has been customized" +msgstr "" + +msgid "Column in" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command Returned" +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Comments" +msgstr "" + +msgid "Company must only contain letters, numbers, spaces, and/or periods" +msgstr "" + +msgid "Compressed File Created" +msgstr "" + +#, c-format +msgid "Compressing %s" +msgstr "" + +msgid "Confirm" +msgstr "" + +#, c-format +msgid "Confirm results on the %sDirectAdmin Website%s" +msgstr "" + +#, c-format +msgid "Connection error: %s" +msgstr "" + +msgid "Content-Type: text/plain; charset=UTF-8\n" +msgstr "" + +msgid "Continuing with the other files." +msgstr "" + +msgid "" +"Controlling widgets for accounts under your control requires an Admin or " +"Reseller login" +msgstr "" + +msgid "Copy" +msgstr "" + +msgid "Copy Clipboard Files here" +msgstr "" + +msgid "Copy the packages export data" +msgstr "" + +msgid "Copying Admin Data" +msgstr "" + +msgid "Copying Reseller Data" +msgstr "" + +msgid "" +"Copying files has been disabled with the filemanager_disable_features option" +msgstr "" + +msgid "Copying unreadable data" +msgstr "" + +msgid "Could not excute your request" +msgstr "" + +msgid "Could not execute your request" +msgstr "" + +#, c-format +msgid "Could not generate a random hash name after %d tries." +msgstr "" + +#, c-format +msgid "Could not get rDNS for IP '%s'" +msgstr "" + +msgid "Could not read tickets" +msgstr "" + +msgid "Could not write tickets" +msgstr "" + +#, c-format +msgid "Couldn't find any IPs of any type to give User (requested ip=%s)." +msgstr "" + +msgid "Couldn't find the 2nd part of the MX value, after the number" +msgstr "" + +#, c-format +msgid "Couldn't read db file for %s. Unable to add ns1 and ns2 to it." +msgstr "" + +msgid "Count" +msgstr "" + +msgid "Counted" +msgstr "" + +msgid "Country code must be 2 letters" +msgstr "" + +msgid "Create/Restore Backups" +msgstr "" + +msgid "Created" +msgstr "" + +msgid "" +"Creating directories has been disabled with the filemanager_disable_features " +"option" +msgstr "" + +#, c-format +msgid "Creating that many %s would put you over your limit of %s" +msgstr "" + +msgid "Creating zip files is disabled" +msgstr "" + +msgid "Creator" +msgstr "" + +msgid "Creator Duplicate" +msgstr "" + +msgid "Cron Created" +msgstr "" + +msgid "Cron E-Mail set" +msgstr "" + +msgid "Cron Job(s) Deleted" +msgstr "" + +msgid "Cron Jobs" +msgstr "" + +msgid "Cron Jobs Deleted" +msgstr "" + +msgid "Cron Jobs Duplicated" +msgstr "" + +msgid "Cron Jobs will run in the background" +msgstr "" + +msgid "Cron Modified" +msgstr "" + +msgid "Cron job has been created" +msgstr "" + +msgid "Current IPs" +msgstr "" + +#, c-format +msgid "Current IPs Assigned to %s" +msgstr "" + +msgid "Current Protected Directories" +msgstr "" + +msgid "Current Usage" +msgstr "" + +msgid "Custom" +msgstr "" + +msgid "Custom Color" +msgstr "" + +msgid "Custom HTTPD Configurations" +msgstr "" + +msgid "Custom Question" +msgstr "" + +msgid "Custom Skin Logo uploaded" +msgstr "" + +msgid "Custom Skin Logos are not enabled" +msgstr "" + +msgid "Custom logo deleted" +msgstr "" + +msgid "Custom threshold must be a valid number. A decimal is allowed." +msgstr "" + +msgid "Customization Disabled" +msgstr "" + +msgid "Customization written" +msgstr "" + +msgid "Customize the skin" +msgstr "" + +msgid "DKIM disabled" +msgstr "" + +msgid "DKIM enabled" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS Control" +msgstr "" + +msgid "DNS Management" +msgstr "" + +msgid "DNSSEC Keys generated" +msgstr "" + +msgid "DNSSEC is not enabled" +msgstr "" + +msgid "DNSSSEC - DNS Security" +msgstr "" + +msgid "Database" +msgstr "" + +#, c-format +msgid "Database %s was removed successfully" +msgstr "" + +msgid "Database Created" +msgstr "" + +msgid "Database Disk Usage" +msgstr "" + +msgid "Database has been successfully Restored" +msgstr "" + +msgid "Database:" +msgstr "" + +msgid "Databases" +msgstr "" + +msgid "Date" +msgstr "" + +msgid "Date Added" +msgstr "" + +msgid "Date Blocked" +msgstr "" + +msgid "Date Created" +msgstr "" + +msgid "Date Suspended" +msgstr "" + +msgid "Day of Month" +msgstr "" + +msgid "Day of Week" +msgstr "" + +msgid "Days must be a valid number." +msgstr "" + +msgid "Debug Guide" +msgstr "" + +msgid "Dec" +msgstr "" + +msgid "Decending" +msgstr "" + +#, c-format +msgid "Decryption of %s has failed" +msgstr "" + +msgid "Default" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Delete Extension" +msgstr "" + +msgid "Delete Handler" +msgstr "" + +msgid "Delete MimeType" +msgstr "" + +msgid "Delete Selected" +msgstr "" + +msgid "Delete the DNSSEC keys and use a non-signed zone" +msgstr "" + +msgid "Delete the following User" +msgid_plural "Delete the following Users" +msgstr[0] "" +msgstr[1] "" + +msgid "Delete the following domains:" +msgstr "" + +msgid "Delete web data" +msgstr "" + +msgid "Deleted" +msgstr "" + +msgid "Deleted User Bandwidth" +msgstr "" + +#, c-format +msgid "Deleting %s ..." +msgstr "" + +msgid "" +"Deleting files/directories has been disabled with the " +"filemanager_disable_features option" +msgstr "" + +msgid "Deleting these NS records will leave you with 0." +msgstr "" + +msgid "Deny" +msgstr "" + +msgid "Destination" +msgstr "" + +#, c-format +msgid "Destination URL error: %s" +msgstr "" + +msgid "Detail" +msgstr "" + +msgid "Details" +msgstr "" + +msgid "Digest Subscriber" +msgstr "" + +msgid "Digest Subscribers" +msgstr "" + +msgid "DirectAdmin will be restarted in 1 minute" +msgstr "" + +msgid "Directory Protection Settings have been saved." +msgstr "" + +msgid "Directory created" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Disable Auto-Renew" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "" +"Disabled Reseller settings will be applied to Users and Packages in the " +"background." +msgstr "" + +msgid "Disk Space" +msgstr "" + +msgid "Disk Space (MB)" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Disk Usage Details" +msgstr "" + +msgid "Division must only contain letters, numbers, spaces, and/or periods" +msgstr "" + +msgid "Dns Provider reset." +msgstr "" + +msgid "Dns Provider saved." +msgstr "" + +msgid "Do not use CAPS in the domain name." +msgstr "" + +msgid "Do not use any spaces between the email names." +msgstr "" + +#, c-format +msgid "Do not use spaces in the %s value" +msgstr "" + +msgid "Do you want to overwrite any existing files?" +msgstr "" + +msgid "DocumentRoot" +msgstr "" + +#, c-format +msgid "Does not match setting: %s" +msgstr "" + +msgid "Domain" +msgstr "" + +#, c-format +msgid "Domain %s Created" +msgstr "" + +#, c-format +msgid "Domain %s may not use a %s override path of %s" +msgstr "" + +#, c-format +msgid "" +"Domain %s was suspended by an Admin and you not have this access. You cannot " +"unsuspend this domain." +msgstr "" + +msgid "Domain AWstats" +msgstr "" + +msgid "Domain AWstats + Webalizer" +msgstr "" + +msgid "Domain Bandwidth" +msgstr "" + +msgid "Domain Created" +msgstr "" + +msgid "Domain Created Successfully" +msgstr "" + +msgid "Domain Deletion Results" +msgstr "" + +msgid "Domain Pointer" +msgid_plural "Domain Pointers" +msgstr[0] "" +msgstr[1] "" + +msgid "Domain Pointer Added" +msgstr "" + +msgid "Domain Pointer on" +msgstr "" + +msgid "Domain Pointers" +msgstr "" + +msgid "Domain Quota" +msgstr "" + +msgid "Domain Renaming is not enabled" +msgstr "" + +msgid "Domain Setup" +msgstr "" + +msgid "Domain Webalizer Stats" +msgstr "" + +msgid "Domain and password are required" +msgstr "" + +msgid "Domain does not belong to you" +msgstr "" + +#, c-format +msgid "Domain exists on %s" +msgstr "" + +msgid "Domain has already been deleted. It wasn't in the named.conf file" +msgstr "" + +msgid "" +"Domain is already processing an SSL request. Please allow it to finish " +"before making other changes." +msgstr "" + +msgid "Domain is forbidden" +msgstr "" + +msgid "Domain is not in your list" +msgstr "" + +msgid "Domain name has been successfully changed" +msgstr "" + +msgid "Domain php.ini overrides" +msgstr "" + +#, c-format +msgid "Domain pointer %s for domain %s for user %s already exists" +msgstr "" + +msgid "Domain(s)" +msgstr "" + +msgid "Domain(s) modified" +msgstr "" + +msgid "Domains" +msgstr "" + +msgid "Domains directory created successfully" +msgstr "" + +msgid "Domains directory created successfully in user's home" +msgstr "" + +msgid "Double click for main domain page" +msgstr "" + +#, c-format +msgid "Dovecot file '%s' is missing data. Run './build dovecot_conf'" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Download Backup" +msgstr "" + +#, c-format +msgid "Downloaded: %s" +msgstr "" + +msgid "Downloading a new webalizer binary" +msgstr "" + +msgid "" +"Downloading compress folders has been disabled with the " +"filemanager_disable_features option" +msgstr "" + +msgid "" +"Downloading files has been disabled with the filemanager_disable_features " +"option" +msgstr "" + +msgid "Driver signals L1 up." +msgstr "" + +msgid "Driver signals dormant." +msgstr "" + +msgid "Duplicate" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "E-Mail Accounts" +msgstr "" + +msgid "E-Mail Accounts Deleted" +msgstr "" + +msgid "E-Mail Address has been successfully changed" +msgstr "" + +msgid "E-Mail Limit has been set" +msgstr "" + +msgid "E-Mail Updated" +msgstr "" + +msgid "E-Mail Usage" +msgstr "" + +msgid "E-Mail account already exists" +msgstr "" + +msgid "E-Mail has been changed" +msgstr "" + +#, c-format +msgid "E-Mail has been changed to %s" +msgstr "" + +#, c-format +msgid "E-Mail quota must not exceed %s" +msgstr "" + +msgid "EC-256" +msgstr "" + +msgid "EC-384" +msgstr "" + +msgid "EC-521" +msgstr "" + +msgid "Echo sent packets." +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Edit Admin Welcome Message" +msgstr "" + +msgid "Edit Reseller Welcome Message" +msgstr "" + +msgid "Edit Suspension Message" +msgstr "" + +msgid "Edit User Welcome Message" +msgstr "" + +msgid "Edit the zone on the master server." +msgstr "" + +msgid "" +"Either have your account creator change your password to unblock it, or use " +"the Lost Password feature on the login page (if enabled)." +msgstr "" + +msgid "Email" +msgstr "" + +#, c-format +msgid "Email '%s' does not exist" +msgstr "" + +msgid "Email Deliveries (Sent)" +msgstr "" + +msgid "Email Disk Usage" +msgstr "" + +msgid "Email Forwarders" +msgstr "" + +msgid "Email Only" +msgstr "" + +msgid "Email Sent" +msgstr "" + +msgid "Email created but" +msgstr "" + +msgid "Empty Clipboard" +msgstr "" + +msgid "Empty:" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enabled" +msgstr "" + +#, c-format +msgid "Encryption of %s has failed" +msgstr "" + +msgid "End Time" +msgstr "" + +#, c-format +msgid "" +"End of file reached while trying reading in %lld bytes from %s. filled=%lld" +msgstr "" + +#, c-format +msgid "Ensure %s exists and is chmod to 1777." +msgstr "" + +msgid "Ensure the 2nd key matches the first" +msgstr "" + +msgid "Ensure the Reseller's ip.list has some usable IPs." +msgstr "" + +msgid "Ensuring stored domains are present" +msgstr "" + +msgid "Enter your Two-Step Authentication Code" +msgstr "" + +#, c-format +msgid "Error %s widgets from accounts: %s" +msgstr "" + +msgid "Error Adding Main Username to database:" +msgstr "" + +msgid "Error Compressing the backup file" +msgstr "" + +msgid "Error Creating Cron Job" +msgstr "" + +msgid "Error Creating Domain" +msgstr "" + +msgid "Error Creating Key" +msgstr "" + +msgid "Error Creating User" +msgstr "" + +#, c-format +msgid "Error Deleting %s" +msgstr "" + +msgid "Error Executing Perl" +msgstr "" + +msgid "Error Flushing Privileges" +msgstr "" + +msgid "Error Flushing Privileges:" +msgstr "" + +msgid "Error Log" +msgstr "" + +msgid "Error Reading Message File" +msgstr "" + +msgid "Error Reading db file" +msgstr "" + +#, c-format +msgid "Error Removing User %s" +msgstr "" + +msgid "Error Resetting Key Uses" +msgstr "" + +msgid "Error Resetting Zone" +msgstr "" + +msgid "Error Restoring database" +msgstr "" + +#, c-format +msgid "Error Saving Password: %s" +msgstr "" + +msgid "Error Unblocking paths" +msgstr "" + +msgid "Error Updating User" +msgstr "" + +#, c-format +msgid "Error Writing %s" +msgstr "" + +#, c-format +msgid "Error activating %s's user %s: %s" +msgstr "" + +#, c-format +msgid "Error activating cronjobs: %s" +msgstr "" + +#, c-format +msgid "Error activating data for %s: %s" +msgstr "" + +#, c-format +msgid "Error adding DS records for %s to remote parent zone: %s" +msgstr "" + +msgid "Error authorizing SSH Key" +msgstr "" + +msgid "Error changing password" +msgstr "" + +msgid "Error changing password. Contact your webhost." +msgstr "" + +msgid "Error clearing LetsEncrypt files" +msgstr "" + +msgid "Error converting file: " +msgstr "" + +#, c-format +msgid "Error copying %s to %s : %s" +msgstr "" + +#, c-format +msgid "Error copying %s to %s: %s" +msgstr "" + +#, c-format +msgid "Error copying logo file: %s" +msgstr "" + +#, c-format +msgid "Error creating %s" +msgstr "" + +#, c-format +msgid "Error creating %s: %s" +msgstr "" + +msgid "Error creating Autoresponder" +msgstr "" + +#, c-format +msgid "Error creating NginxUnit application '%s': %s" +msgstr "" + +#, c-format +msgid "Error creating NginxUnit route '%s': %s" +msgstr "" + +msgid "Error creating SSH Key" +msgstr "" + +msgid "Error creating User" +msgstr "" + +msgid "Error creating Vacation Message" +msgstr "" + +msgid "Error creating account" +msgstr "" + +#, c-format +msgid "" +"Error creating default directories in %s. See error.log for more " +"information." +msgstr "" + +msgid "Error creating forwarder" +msgstr "" + +msgid "Error creating the database" +msgstr "" + +msgid "Error decoding the base 64 data" +msgstr "" + +#, c-format +msgid "Error deleting %s: %s" +msgstr "" + +msgid "Error deleting SSH Key" +msgstr "" + +msgid "Error deleting Security Questions" +msgstr "" + +msgid "Error deleting account(s)" +msgstr "" + +msgid "Error deleting autoresponder(s)" +msgstr "" + +msgid "Error deleting filter(s)" +msgstr "" + +msgid "Error deleting key(s)" +msgstr "" + +msgid "Error deleting records" +msgstr "" + +msgid "Error determining username from " +msgstr "" + +#, c-format +msgid "Error during automated certificate renewal for %s" +msgstr "" + +#, c-format +msgid "Error during deletion of child user %s" +msgstr "" + +msgid "Error during extraction" +msgstr "" + +msgid "Error executing your request" +msgstr "" + +msgid "Error generating scratch codes" +msgstr "" + +msgid "Error generating zone keys" +msgstr "" + +msgid "Error importing base 64 encoded packages" +msgstr "" + +msgid "Error in post. Requires domain, type and value." +msgstr "" + +msgid "Error modifying SSH key" +msgstr "" + +msgid "Error parsing 'routes'." +msgstr "" + +msgid "Error parsing json output" +msgstr "" + +msgid "Error purging archives" +msgstr "" + +#, c-format +msgid "Error reading %s: %s" +msgstr "" + +msgid "Error reading admin list file." +msgstr "" + +msgid "Error reading domain config file" +msgstr "" + +msgid "Error reading domain config files" +msgstr "" + +msgid "Error reading domainowners" +msgstr "" + +msgid "Error reading domainowners file" +msgstr "" + +msgid "Error reading named db file" +msgstr "" + +#, c-format +msgid "Error reading new license: %s" +msgstr "" + +msgid "Error reading the db file after writing to it, before DNSSEC signing" +msgstr "" + +msgid "Error reading the license file for restore." +msgstr "" + +#, c-format +msgid "Error reading user files for %s, continuing anyway." +msgstr "" + +msgid "Error reading user_ip.list file" +msgstr "" + +#, c-format +msgid "Error removing %s: %s" +msgstr "" + +#, c-format +msgid "Error removing IP(s) from %s" +msgstr "" + +msgid "Error removing file: " +msgstr "" + +#, c-format +msgid "Error removing path %s: %s" +msgstr "" + +msgid "Error removing subdomain" +msgstr "" + +msgid "Error removing subdomain(s)" +msgstr "" + +msgid "Error removing subdomains" +msgstr "" + +#, c-format +msgid "Error removing user %s" +msgstr "" + +#, c-format +msgid "Error renaming %s to %s: %s" +msgstr "" + +#, c-format +msgid "Error restoring %s: %s" +msgstr "" + +#, c-format +msgid "Error restoring php settings for '%s': %s" +msgstr "" + +#, c-format +msgid "Error rewriting %s" +msgstr "" + +#, c-format +msgid "Error running %s auto: %s" +msgstr "" + +#, c-format +msgid "Error running %s: %s" +msgstr "" + +msgid "Error running rndc addzone." +msgstr "" + +msgid "Error running rndc delzone." +msgstr "" + +msgid "Error saving Cron E-Mail" +msgstr "" + +msgid "Error saving Nameservers" +msgstr "" + +#, c-format +msgid "Error selecting database %s: %s" +msgstr "" + +#, c-format +msgid "Error sending signal to %d: %s" +msgstr "" + +msgid "Error setting MX Template" +msgstr "" + +msgid "Error setting MX template for pointer" +msgstr "" + +msgid "Error setting PHP versions" +msgstr "" + +msgid "Error setting Security Question" +msgstr "" + +#, c-format +msgid "Error setting cgroup limits for %s: %s" +msgstr "" + +msgid "Error setting clipboard files" +msgstr "" + +msgid "Error setting global key" +msgstr "" + +#, c-format +msgid "Error setting permission on %s: %s" +msgstr "" + +msgid "Error setting the filter" +msgstr "" + +msgid "Error setting the spam filter" +msgstr "" + +msgid "Error setting timezone" +msgstr "" + +msgid "Error showing Email Acounts" +msgstr "" + +msgid "Error showing message ID info" +msgstr "" + +msgid "Error showing smtp log info" +msgstr "" + +msgid "Error signing zone" +msgstr "" + +#, c-format +msgid "Error suspending %s's user %s: %s" +msgstr "" + +#, c-format +msgid "Error suspending cronjobs: %s" +msgstr "" + +msgid "Error updating Autoresponder" +msgstr "" + +msgid "Error updating Catch-All value" +msgstr "" + +msgid "Error updating Vacation Message" +msgstr "" + +msgid "Error updating forwarder" +msgstr "" + +#, c-format +msgid "Error while backing up database %s" +msgstr "" + +msgid "Error while compressing file" +msgstr "" + +msgid "Error while creating User" +msgstr "" + +msgid "Error while creating the backup" +msgstr "" + +msgid "Error while deleting Users" +msgstr "" + +msgid "Error while saving changes" +msgstr "" + +msgid "Error while saving password" +msgstr "" + +msgid "Error while sending email" +msgstr "" + +#, c-format +msgid "Error while writing %s" +msgstr "" + +#, c-format +msgid "Error with Command::master_login:search:gettimeofday: %s" +msgstr "" + +msgid "Error with LetsEncrypt request" +msgstr "" + +msgid "Error with Security Questions" +msgstr "" + +msgid "Error with Two-Step Authentication" +msgstr "" + +msgid "Error with command:" +msgstr "" + +msgid "Error with curl request" +msgstr "" + +msgid "Error with exigrep" +msgstr "" + +msgid "Error with fchownat" +msgstr "" + +#, c-format +msgid "Error with request: '%s' More info in debug output." +msgstr "" + +msgid "Error with system Quotas" +msgstr "" + +#, c-format +msgid "" +"Error with the backup plan (rename failed): the copy of %s to %s has also " +"failed: %s" +msgstr "" + +#, c-format +msgid "Error writing %s" +msgstr "" + +#, c-format +msgid "Error writing %s: %s" +msgstr "" + +msgid "Error writing domain config file" +msgstr "" + +msgid "Error writing password request file." +msgstr "" + +msgid "Error writing pop cache" +msgstr "" + +#, c-format +msgid "Error writing settings file for %s" +msgstr "" + +msgid "Error writing the directadmin.conf" +msgstr "" + +#, c-format +msgid "Error writing to %s: %s" +msgstr "" + +msgid "Errors" +msgstr "" + +msgid "Evening" +msgstr "" + +msgid "Expecting 0 or 1" +msgstr "" + +msgid "Expecting any integer" +msgstr "" + +msgid "Expecting any long long integer" +msgstr "" + +msgid "Expired" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "Expiry" +msgstr "" + +msgid "Export Selected" +msgstr "" + +msgid "Extension" +msgstr "" + +msgid "Extensions" +msgstr "" + +msgid "Extract" +msgstr "" + +msgid "Extract selected to directory" +msgstr "" + +msgid "Extracting User Data" +msgstr "" + +msgid "" +"Extracting files has been disabled with the filemanager_disable_features " +"option" +msgstr "" + +msgid "Extracting non-readable files" +msgstr "" + +msgid "Extracting ~/domains directory" +msgstr "" + +msgid "Extracting ~/imap directory" +msgstr "" + +msgid "FTP" +msgstr "" + +msgid "FTP account already exists" +msgstr "" + +msgid "FTP information invalid." +msgstr "" + +msgid "FTP: default creation error" +msgstr "" + +msgid "Failed Referer Check" +msgstr "" + +msgid "Failed to verify" +msgstr "" + +msgid "Feature Disabled" +msgstr "" + +msgid "Feb" +msgstr "" + +msgid "File" +msgstr "" + +#, c-format +msgid "File %s already exists, file skipped." +msgstr "" + +msgid "File Extracted" +msgstr "" + +msgid "File Manager" +msgstr "" + +#, c-format +msgid "File being read as '%s'" +msgstr "" + +msgid "File copied successfully" +msgstr "" + +msgid "File does not exist" +msgstr "" + +msgid "File does not exist or you don't have access to file" +msgstr "" + +msgid "File ownership reset" +msgstr "" + +msgid "File restored successfully" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Files added to clipboard" +msgstr "" + +msgid "Filesystem" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Fingerprint" +msgstr "" + +msgid "First" +msgstr "" + +msgid "First PHP" +msgstr "" + +msgid "First Page" +msgstr "" + +#, c-format +msgid "Flag value for '%s' is blank" +msgstr "" + +msgid "Flush from DNS" +msgstr "" + +msgid "Follow the link above to find a directory and protect it" +msgstr "" + +msgid "For backwards compatibility" +msgstr "" + +msgid "" +"For cases where the large number of domains to process may cause a timeout" +msgstr "" + +#, c-format +msgid "For debugging purposes, this file came from: %s" +msgstr "" + +msgid "Forgot your Password?" +msgstr "" + +msgid "Forwarder" +msgstr "" + +#, c-format +msgid "Forwarder %s cannot point to itself" +msgstr "" + +#, c-format +msgid "Forwarder %s@%s deleted as it had zero recipients remaining." +msgstr "" + +#, c-format +msgid "Forwarder '%s' already exists." +msgstr "" + +msgid "Forwarder already exists" +msgstr "" + +#, c-format +msgid "" +"Forwarder contains a local_part_suffix character: '%s' meaning everything " +"after it will be ignored and the forwarder will never match." +msgstr "" + +msgid "Forwarder created" +msgstr "" + +#, c-format +msgid "Forwarder loop found: %s" +msgstr "" + +msgid "Forwarder updated" +msgstr "" + +msgid "Forwarders" +msgstr "" + +msgid "Free - randomly selected" +msgstr "" + +msgid "Free Memory" +msgstr "" + +msgid "Free Selected" +msgstr "" + +msgid "Free Swap Memory" +msgstr "" + +msgid "From" +msgstr "" + +msgid "Frontpage Not Installed" +msgstr "" + +msgid "Frontpage changes successful." +msgstr "" + +msgid "Frontpage is not active on this server" +msgstr "" + +msgid "Ftp" +msgstr "" + +msgid "Ftp Accounts" +msgstr "" + +msgid "Ftp IPs successfully swapped" +msgstr "" + +msgid "Ftp Management" +msgstr "" + +msgid "Ftp account changed" +msgstr "" + +msgid "Ftp settings saved" +msgstr "" + +msgid "Full Date" +msgstr "" + +msgid "Full Name has been successfully changed" +msgstr "" + +#, c-format +msgid "Full format name '%s' does not end with zone name" +msgstr "" + +msgid "GB" +msgstr "" + +msgid "GID" +msgstr "" + +msgid "Generate Keys" +msgstr "" + +msgid "Get the code from your phone's app, or use a backup scratch code." +msgstr "" + +msgid "Global" +msgstr "" + +msgid "Global - randomly selected" +msgstr "" + +msgid "Global Key" +msgstr "" + +msgid "Global Key set" +msgstr "" + +msgid "Global ssh keys not available to Users" +msgstr "" + +#, c-format +msgid "Go to %s" +msgstr "" + +#, c-format +msgid "Group %s already exists. Please chose a different username." +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "" +"Hello,\n" +"\n" +"This message is to notify you that your account '|USERNAME|' has been " +"suspended.\n" +"Reason: |REASON|\n" +"\n" +"If you feel this has been done in error, please contact your hosting " +"provider for more information\n" +"\n" +"|MSG_FOOTER|\n" +msgstr "" + +msgid "Hello, this is my autoresponder" +msgstr "" + +msgid "Here are the results" +msgstr "" + +msgid "Here are the results:" +msgstr "" + +#. /# %c here denotes newline character +#, c-format +msgid "" +"Hi,%c I am currently on vacation. I will view your message when I get back." +msgstr "" + +msgid "High" +msgstr "" + +msgid "Highest" +msgstr "" + +msgid "Hit end-of-file while searching for @ or domain header line in" +msgstr "" + +msgid "Home Directory" +msgstr "" + +#, c-format +msgid "Home path '%s' is not in the allowed home_override_list" +msgstr "" + +msgid "Host:" +msgstr "" + +msgid "Hosts" +msgstr "" + +msgid "Hotlink Protection" +msgstr "" + +msgid "Hour" +msgstr "" + +msgid "How to process the request" +msgstr "" + +#, c-format +msgid "" +"However, after %s attempts, they were not able to provide a valid Two-Step " +"Authentication code, so no access was granted." +msgstr "" + +#, c-format +msgid "" +"However, after %s attempts, they were not able to provide a valid answer for " +"the security questions, so no access was granted." +msgstr "" + +msgid "However, subdomains have been found instead. Proceeding with them." +msgstr "" + +msgid "ID" +msgstr "" + +msgid "ID does not belong to you" +msgstr "" + +msgid "ID: 1234 or \"1234-1239\"" +msgstr "" + +msgid "IO Read Bandwidth Max" +msgstr "" + +msgid "IO Write Bandwidth Max" +msgstr "" + +msgid "IOPS Read Max" +msgstr "" + +msgid "IOPS Write Max" +msgstr "" + +msgid "IP" +msgstr "" + +msgid "IP Added" +msgstr "" + +msgid "IP Info" +msgstr "" + +msgid "IP Link Added" +msgstr "" + +msgid "IP Link(s) Removed" +msgstr "" + +msgid "IP List is empty" +msgstr "" + +msgid "IP Netmask Set" +msgstr "" + +msgid "IP Type" +msgstr "" + +#, c-format +msgid "IP in domain config file (%s) is not valid." +msgstr "" + +msgid "IP must be shared or free" +msgstr "" + +msgid "IP will be linked in the background" +msgstr "" + +msgid "IP(s)" +msgstr "" + +msgid "IP(s) removed" +msgstr "" + +msgid "IP/User" +msgstr "" + +msgid "IPs" +msgstr "" + +msgid "" +"If the username entered is correct, you will receive a confirmation email " +"shortly." +msgstr "" + +#, c-format +msgid "If this continues, consider putting %s in the ip_blacklist file." +msgstr "" + +msgid "If this is not your IP, change your password." +msgstr "" + +msgid "" +"If you aren't expecting a new license the same license file will be " +"generated." +msgstr "" + +msgid "" +"If you do not wish to overwrite the current certificate, please disable the " +"auto-renewal" +msgstr "" + +msgid "" +"If you proceed, these User accounts, along with ALL the associated website " +"and email contents, which are not listed here, will also be removed." +msgstr "" + +msgid "" +"If you set it to 0, no basic httpd request will work. You wont even be able " +"to login." +msgstr "" + +msgid "Image filenames only have 1 dot" +msgstr "" + +msgid "Imap" +msgstr "" + +msgid "Imap Folders" +msgstr "" + +msgid "In what city did you meet your spouse/significant other?" +msgstr "" + +msgid "In what city does your nearest sibling live?" +msgstr "" + +msgid "In what city or town did your mother and father meet?" +msgstr "" + +msgid "In what city or town was your first job?" +msgstr "" + +msgid "Inactive" +msgstr "" + +msgid "Inbox" +msgstr "" + +msgid "Include Domains" +msgstr "" + +msgid "Include your license information" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Info for admins" +msgstr "" + +msgid "Inherit" +msgstr "" + +msgid "Inodes" +msgstr "" + +msgid "Install Serverwide" +msgstr "" + +msgid "Installed" +msgstr "" + +msgid "Installed Perl Modules" +msgstr "" + +msgid "Interface is a loopback interface." +msgstr "" + +msgid "Interface is a point-to-point link." +msgstr "" + +msgid "Interface is in promiscuous mode." +msgstr "" + +msgid "Interface is running." +msgstr "" + +msgid "Internal debugging flag." +msgstr "" + +msgid "Invalid " +msgstr "" + +#, c-format +msgid "Invalid '%s'" +msgstr "" + +msgid "Invalid CC email address" +msgstr "" + +msgid "" +"Invalid Characters in the skin name. Only use a-zA-Z0-9._-[] Must not start " +"with '.'" +msgstr "" + +msgid "Invalid Cron ID" +msgstr "" + +msgid "Invalid DNS name" +msgstr "" + +msgid "Invalid DNS value" +msgstr "" + +msgid "Invalid Domain" +msgstr "" + +msgid "Invalid Domain Name" +msgstr "" + +msgid "Invalid E-Mail" +msgstr "" + +msgid "Invalid E-Mail User" +msgstr "" + +msgid "" +"Invalid E-Mail address. Multiple and DirectAdmin login username, or blank " +"also allowed" +msgstr "" + +msgid "Invalid Email" +msgstr "" + +msgid "Invalid Email Name" +msgstr "" + +msgid "Invalid Email limit" +msgstr "" + +msgid "Invalid FTP account" +msgstr "" + +msgid "Invalid IP (1.2.3.4) or IP range (1.2.3.4-5)" +msgstr "" + +msgid "Invalid IP/Domain for the ftp connection" +msgstr "" + +#, c-format +msgid "Invalid Log Rotate Value: %d" +msgstr "" + +msgid "Invalid MX value" +msgstr "" + +msgid "Invalid Name" +msgstr "" + +msgid "Invalid Netmask" +msgstr "" + +msgid "Invalid Password" +msgstr "" + +msgid "Invalid RSA comment" +msgstr "" + +msgid "Invalid RSA id. Use simple characters: a-zA-Z0-9" +msgstr "" + +msgid "Invalid RSA key" +msgstr "" + +msgid "Invalid SecRuleRemoveById value" +msgstr "" + +#, c-format +msgid "Invalid Session Minutes value: %lld" +msgstr "" + +msgid "Invalid Subdomain" +msgstr "" + +msgid "Invalid Two-Step Auth code" +msgstr "" + +msgid "Invalid URL" +msgstr "" + +msgid "Invalid User" +msgstr "" + +msgid "Invalid User type" +msgstr "" + +msgid "Invalid Username" +msgstr "" + +msgid "Invalid Username or Password" +msgstr "" + +msgid "Invalid action" +msgstr "" + +#, c-format +msgid "Invalid characters in description. Allowed %s" +msgstr "" + +msgid "Invalid characters in password" +msgstr "" + +msgid "Invalid characters in search" +msgstr "" + +msgid "Invalid characters in security answer" +msgstr "" + +msgid "Invalid characters in security question" +msgstr "" + +msgid "Invalid characters in word" +msgstr "" + +msgid "Invalid code" +msgstr "" + +msgid "Invalid crypted passwd" +msgstr "" + +msgid "Invalid database name:" +msgstr "" + +msgid "Invalid delete_messages_days or delete_tickets_days. Too big. Max = " +msgstr "" + +msgid "" +"Invalid delete_messages_days or delete_tickets_days. Should be 0 or a " +"positive integer." +msgstr "" + +msgid "Invalid dnsprovider" +msgstr "" + +msgid "Invalid domain" +msgstr "" + +msgid "Invalid email address" +msgstr "" + +msgid "Invalid email address on file. Contact your webhost." +msgstr "" + +msgid "Invalid email user" +msgstr "" + +msgid "Invalid email username" +msgstr "" + +msgid "Invalid encryption password" +msgstr "" + +msgid "Invalid file extension list" +msgstr "" + +msgid "Invalid filename:" +msgstr "" + +msgid "Invalid filter type" +msgstr "" + +msgid "Invalid fingerprint" +msgstr "" + +msgid "Invalid ftp password" +msgstr "" + +msgid "Invalid ftp path" +msgstr "" + +msgid "Invalid ftp port" +msgstr "" + +msgid "Invalid ftp username" +msgstr "" + +#, c-format +msgid "Invalid key bit length: '%s'" +msgstr "" + +#, c-format +msgid "Invalid key option name or value: %s=%s" +msgstr "" + +#, c-format +msgid "Invalid key type: '%s'" +msgstr "" + +#, c-format +msgid "Invalid keysize. Valid values: %s" +msgstr "" + +msgid "Invalid language" +msgstr "" + +msgid "Invalid list of allowed domains" +msgstr "" + +msgid "Invalid local path" +msgstr "" + +msgid "Invalid login. Please verify your Username and Password" +msgstr "" + +#, c-format +msgid "Invalid master type: %d for '%s'" +msgstr "" + +msgid "Invalid message days. Should be a positive integer." +msgstr "" + +msgid "Invalid message id" +msgstr "" + +msgid "Invalid message type. Only request, reply and message are allowed" +msgstr "" + +#, c-format +msgid "Invalid method: '%s'" +msgstr "" + +msgid "Invalid name or extension" +msgstr "" + +msgid "Invalid netmask type for IP type" +msgstr "" + +msgid "Invalid new user value" +msgstr "" + +msgid "Invalid number" +msgstr "" + +msgid "Invalid package name" +msgstr "" + +msgid "Invalid password (empty)" +msgstr "" + +msgid "Invalid path" +msgstr "" + +msgid "Invalid path append value" +msgstr "" + +msgid "Invalid path. Must start with /" +msgstr "" + +msgid "Invalid plugin name" +msgstr "" + +msgid "Invalid redirect URL" +msgstr "" + +#, c-format +msgid "Invalid request: '%s'" +msgstr "" + +msgid "Invalid session timeout or max filesize values" +msgstr "" + +msgid "Invalid subdomain name" +msgstr "" + +msgid "Invalid ticket days. Should be a positive integer." +msgstr "" + +#, c-format +msgid "Invalid ticket days. Too big. Max = %s" +msgstr "" + +#, c-format +msgid "Invalid type for '%s': '%s'" +msgstr "" + +msgid "Invalid user" +msgstr "" + +msgid "Invalid username" +msgstr "" + +msgid "Invalid values" +msgstr "" + +msgid "Invalid widget name" +msgstr "" + +msgid "Is able to select media type via ifmap." +msgstr "" + +msgid "Issue verifying license" +msgstr "" + +msgid "Issuer" +msgstr "" + +msgid "It already exists on the following system(s)" +msgstr "" + +msgid "It has been disabled" +msgstr "" + +msgid "It must be a positive integer." +msgstr "" + +msgid "It must not be an IP" +msgstr "" + +#, c-format +msgid "It's already associated with %s" +msgstr "" + +msgid "Items per page" +msgstr "" + +msgid "Jailed Home" +msgstr "" + +msgid "Jan" +msgstr "" + +msgid "Jul" +msgstr "" + +msgid "Jun" +msgstr "" + +msgctxt "readable size" +msgid "KB" +msgstr "" + +msgid "Keep it for future reference." +msgstr "" + +msgid "Keep the numbers to a realistic value please." +msgstr "" + +msgid "Key" +msgstr "" + +msgid "Key Created. Take note of it's value and keep it safe." +msgstr "" + +msgid "Key ID" +msgstr "" + +msgid "" +"Key Modified. If you've modified its value, take note of it and keep it safe." +msgstr "" + +msgid "Key Name" +msgstr "" + +msgid "Key Name must be simple: a-zA-Z0-9" +msgstr "" + +msgid "Key Uses Reset" +msgstr "" + +msgid "Key already exists via fingerprint matching" +msgstr "" + +msgid "Key contains invalid characters" +msgstr "" + +msgid "Key is Invalid" +msgstr "" + +msgid "Key value must differ from your DirectAdmin password" +msgstr "" + +msgid "Key(s) deleted" +msgstr "" + +msgid "Keys" +msgstr "" + +msgid "Keys listed below" +msgstr "" + +msgid "Kill" +msgstr "" + +msgid "Language" +msgstr "" + +#, c-format +msgid "Language has been changed to %s" +msgstr "" + +msgid "Language has been successfully changed" +msgstr "" + +msgid "Last" +msgstr "" + +msgid "Last Accessed" +msgstr "" + +msgid "Last Changed" +msgstr "" + +#, c-format +msgid "Last Login IP: %s" +msgstr "" + +#, c-format +msgid "Last Login: %s" +msgstr "" + +msgid "Last Message" +msgstr "" + +msgid "Last Modified" +msgstr "" + +msgid "Last Page" +msgstr "" + +msgid "Last Tally Completion" +msgstr "" + +msgid "Leave DNS" +msgstr "" + +#, c-format +msgid "Left user on %s's list" +msgstr "" + +msgid "Let's Encrypt Certificate Entries" +msgstr "" + +msgid "Let's Encrypt is not enabled. You cannot use this option." +msgstr "" + +msgid "LetsEncrypt files have been cleared" +msgstr "" + +msgid "LetsEncrypt request successful" +msgstr "" + +msgid "LetsEncrypt request successful for" +msgstr "" + +#, c-format +msgid "License is limited to %d Admins/Resellers, and you currently have %d" +msgstr "" + +#, c-format +msgid "License is limited to %d accounts, and you currently have %d" +msgstr "" + +#, c-format +msgid "License is limited to %d domains, and you currently have %d" +msgstr "" + +msgid "License is not valid" +msgstr "" + +msgid "License limits exceeded" +msgstr "" + +msgid "" +"License requires a newer version of DirectAdmin, but auto_update is " +"disabled. Please update your DirectAdmin version." +msgstr "" + +msgid "" +"License requires a newer version of DirectAdmin, but your OS is end-of-life. " +"Please install a newer OS to continue." +msgstr "" + +msgid "License verified" +msgstr "" + +msgid "Licensing / Updates" +msgstr "" + +msgid "Limit Notice" +msgstr "" + +msgid "Limit is not a number" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Link in Background" +msgstr "" + +msgid "Linked IPs" +msgstr "" + +msgid "List" +msgstr "" + +msgid "List Admins" +msgstr "" + +msgid "List Configurations Saved" +msgstr "" + +msgid "List Resellers" +msgstr "" + +msgid "List Users" +msgstr "" + +msgid "List of Users is too long" +msgstr "" + +#, c-format +msgid "Listname must be %d characters or less" +msgstr "" + +msgid "Listname must be all lower case letters" +msgstr "" + +msgid "Load Average" +msgstr "" + +msgid "Local Data" +msgstr "" + +msgid "Local Default" +msgstr "" + +msgid "Local Mail" +msgstr "" + +msgid "Local URL Path" +msgstr "" + +msgid "Log" +msgstr "" + +msgid "Log Entry" +msgstr "" + +msgid "Log Usage" +msgstr "" + +msgid "Log Viewer" +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Login Failures" +msgstr "" + +msgid "Login History" +msgstr "" + +msgid "Login Keys" +msgstr "" + +msgid "Login Keys are disabled" +msgstr "" + +msgid "Login Page" +msgstr "" + +#, c-format +msgid "Login as %s" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Low" +msgstr "" + +msgctxt "readable size" +msgid "MB" +msgstr "" + +msgid "MX Records" +msgstr "" + +msgid "MX Template set" +msgstr "" + +msgid "MX Templates are disabled" +msgstr "" + +msgid "MX priority should be an positive number" +msgstr "" + +msgid "Mail Queue Administration" +msgstr "" + +msgid "Mailing List" +msgstr "" + +msgid "Mailing Lists" +msgstr "" + +msgid "Main" +msgstr "" + +msgid "Main Domain ..." +msgstr "" + +#, c-format +msgid "Major Error: Error finding home for %s" +msgstr "" + +msgid "Make sure 'unit' is running" +msgstr "" + +msgid "Make sure that the values passed are valid for their type" +msgstr "" + +msgid "Manage Reseller Packages" +msgstr "" + +msgid "Manage Tickets" +msgstr "" + +msgid "Manage User Backups" +msgstr "" + +msgid "Manage User Packages" +msgstr "" + +#, c-format +msgid "Manually by %s" +msgstr "" + +msgid "Mar" +msgstr "" + +msgid "Mark as read" +msgstr "" + +msgid "Master of a load balancing bundle." +msgstr "" + +msgid "Max Tasks that may be created in the unit" +msgstr "" + +msgid "Max Usage (Meg)" +msgstr "" + +msgid "Max disk read operations per second." +msgstr "" + +msgid "Max disk write operations per second." +msgstr "" + +msgid "Max limit User can set per E-Mail" +msgstr "" + +msgid "Max number of uses must be a valid number (no decimals)" +msgstr "" + +msgid "Max rate data can be read from a disk." +msgstr "" + +msgid "Max rate data can be written to a disk." +msgstr "" + +msgid "Maximum Usage" +msgstr "" + +#, c-format +msgid "Maximum number of files listed (%d). Suppressing further output." +msgstr "" + +#, c-format +msgid "Maximum value: %s=%s" +msgstr "" + +msgid "May" +msgstr "" + +msgid "Medium" +msgstr "" + +msgid "Meg" +msgstr "" + +msgid "Memory High" +msgstr "" + +msgid "Memory Usage" +msgstr "" + +msgid "Message #" +msgstr "" + +msgid "Message Reset" +msgstr "" + +msgid "Message System" +msgstr "" + +msgid "Message Type" +msgstr "" + +msgid "Message is being sent" +msgstr "" + +msgid "Message removed" +msgid_plural "Messages removed" +msgstr[0] "" +msgstr[1] "" + +msgid "Messages Updated" +msgstr "" + +msgid "Mime Types" +msgstr "" + +msgid "MimeType" +msgstr "" + +msgid "Minute" +msgstr "" + +msgid "Missing closing bracket in zone line." +msgstr "" + +msgid "Missing open bracket in zone line." +msgstr "" + +msgid "Missing template" +msgstr "" + +msgid "ModSecurity Flags" +msgstr "" + +msgid "ModSecurity Rules" +msgstr "" + +msgid "ModSecurity Rules Saved" +msgstr "" + +msgid "ModSecurity Skipped Rules" +msgstr "" + +msgid "ModSecurity is not enabled" +msgstr "" + +msgid "Modify" +msgstr "" + +msgid "Modify Password" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "More Info" +msgstr "" + +msgid "Morning" +msgstr "" + +msgid "Mounted on" +msgstr "" + +msgid "Move Clipboard Files here" +msgstr "" + +msgid "Move Users between Resellers" +msgstr "" + +msgid "Move any existing files to trash?" +msgstr "" + +msgid "Move to Trash" +msgstr "" + +msgid "Multi-Server Setup" +msgstr "" + +msgid "" +"Must provide a mime type or handler name and a single extention. eg: \"text/" +"html\" or \"cgi-script\" and \"html\"" +msgstr "" + +msgid "Must select more than zero LetsEncrypt entries." +msgstr "" + +#, c-format +msgid "Must use letsencrypt=1 for options. letsencrypt=%d is currently set." +msgstr "" + +msgid "MySQL is not enabled on this server" +msgstr "" + +msgid "NGINX Unit" +msgstr "" + +msgid "" +"NOTE: You are using the server IP, so your CA Root Certificate has been " +"saved to" +msgstr "" + +msgid "" +"NOTE: You are using the server IP, so your certificate and key have been " +"saved to" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Name Server 1" +msgstr "" + +msgid "Name Server 2" +msgstr "" + +msgid "Name Servers" +msgstr "" + +msgid "Name must only contain letters, spaces and/or periods" +msgstr "" + +msgid "Nameserver" +msgstr "" + +msgid "Nameservers deleted" +msgstr "" + +msgid "Nameservers have been changed" +msgstr "" + +msgid "Namesevers have been changed." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Never" +msgstr "" + +#, c-format +msgid "New License is invalid: %s" +msgstr "" + +#, c-format +msgid "New Secret Set: %s" +msgstr "" + +msgid "New password isn't different" +msgstr "" + +#, c-format +msgid "Newly installed key is %s-bit" +msgstr "" + +msgid "Next Retry" +msgstr "" + +msgid "Nginx Template" +msgstr "" + +msgid "Nginx is not enabled" +msgstr "" + +msgid "NginxUnit is not enabled or not running" +msgstr "" + +msgid "No" +msgstr "" + +msgid "No Awstats" +msgstr "" + +msgid "No Data to Show" +msgstr "" + +msgid "No IPs selected" +msgstr "" + +#, c-format +msgid "No ListFile in container at route position %lld" +msgstr "" + +msgid "No Send class set" +msgstr "" + +msgid "No User Data" +msgstr "" + +msgid "No arp protocol, L2 destination address not set." +msgstr "" + +msgid "No changes have been made" +msgstr "" + +msgid "No changes were needed. Skipping write." +msgstr "" + +msgid "No colors have been selected" +msgstr "" + +#, c-format +msgid "No container at route position %lld" +msgstr "" + +msgid "No events for this period." +msgstr "" + +msgid "No files have been selected for upload." +msgstr "" + +msgid "No free IPs found" +msgstr "" + +msgid "No global IPs found" +msgstr "" + +msgid "No keys have been selected" +msgstr "" + +msgid "No keys selected" +msgstr "" + +msgid "No options were selected" +msgstr "" + +msgid "No passwd entries provided." +msgstr "" + +msgid "No paths were provided." +msgstr "" + +msgid "No shared IPs found" +msgstr "" + +msgid "No such username in the request list. Your request may have expired." +msgstr "" + +msgid "No such username in the request list. Your request may have expired." +msgstr "" + +msgid "No text provided" +msgstr "" + +msgid "No vacation message set" +msgstr "" + +msgid "Not a valid IP Address" +msgstr "" + +#, c-format +msgid "" +"Not enough IP's to create nameservers. It requires at least %d free, un-" +"assigned ips." +msgstr "" + +msgid "Not setting up Mail SNI." +msgstr "" + +msgid "Not yet generated" +msgstr "" + +msgid "Not yet signed" +msgstr "" + +#, c-format +msgid "" +"Note: the previous Let's Encrypt config is still set to renew in %d days." +msgstr "" + +msgid "Nothing" +msgstr "" + +#, c-format +msgid "Notification that Login Key %s has been successfully created by %s" +msgstr "" + +msgid "Notified" +msgstr "" + +msgid "Nov" +msgstr "" + +msgid "Null values" +msgstr "" + +#, c-format +msgid "Number %s=%s is out of range (required: %d-%d)" +msgstr "" + +msgid "Number of Users" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Oct" +msgstr "" + +msgid "Off" +msgstr "" + +#, c-format +msgid "Old %s-bit key has been backed up to %s" +msgstr "" + +msgid "Old password incorrect" +msgstr "" + +msgid "Older than" +msgstr "" + +msgid "On" +msgstr "" + +msgid "One (or more) of the selected IPs are not currently in your list" +msgstr "" + +#, c-format +msgid "" +"One-Click login requires does not support webmail_link=%s. Try " +"webmail_link=roundcube." +msgstr "" + +msgid "One-Time Login URL Created" +msgstr "" + +#, c-format +msgid "Only %d of the requested %d global IPs were assigned." +msgstr "" + +msgid "Only 'Additional' IPs can be removed from a User using this method" +msgstr "" + +msgid "Only Admin accounts can save settings" +msgstr "" + +msgid "Only Admins can reset the usage count" +msgstr "" + +msgid "Only Admins may run this request" +msgstr "" + +msgid "" +"Only provide one extension at a time. eg: \"jpg\" and NOT \"jpg jpeg jpe\"" +msgstr "" + +msgid "Only the location of the route can be renamed" +msgstr "" + +msgid "Only use wildcard on domains who currently have functional local DNS" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Open Basedir disabled on selected domains" +msgstr "" + +msgid "Open Basedir enabled on selected domains" +msgstr "" + +msgid "Open+Confirm" +msgstr "" + +msgid "Operation" +msgstr "" + +msgid "Optimize" +msgstr "" + +#, c-format +msgid "Option '%s' has already been set" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Options changed successfully" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Order (when the first sort values are equal)" +msgstr "" + +msgid "Original Package" +msgstr "" + +msgid "Other" +msgstr "" + +msgid "Other Disk Usage" +msgstr "" + +msgid "Other Usage" +msgstr "" + +msgid "Outlook Settings" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Owner" +msgstr "" + +#, c-format +msgid "Owner of global IP swapped to Admin %s" +msgstr "" + +msgid "PHP" +msgstr "" + +msgid "PHP Configuration" +msgstr "" + +msgid "PHP Script Name" +msgstr "" + +msgid "PHP Version Selector" +msgstr "" + +msgid "PHP versions saved" +msgstr "" + +msgid "PID" +msgstr "" + +#, c-format +msgid "PID '%s' is not a number" +msgstr "" + +msgid "POP Email Accounts" +msgstr "" + +msgid "POP/IMAP Server" +msgstr "" + +msgid "Package" +msgstr "" + +#, c-format +msgid "Package '%s' already exists" +msgstr "" + +#, c-format +msgid "Package '%s' does not exist" +msgstr "" + +#, c-format +msgid "Package '%s' is not in your list" +msgstr "" + +msgid "Package not found" +msgstr "" + +msgid "Page" +msgstr "" + +#, c-format +msgid "Parent directory %s was created." +msgstr "" + +msgid "Parsing Error. Check logs" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password Changed" +msgstr "" + +#, c-format +msgid "Password Changed: %s" +msgstr "" + +msgid "Password Not Changed" +msgstr "" + +msgid "Password Protected Directories" +msgstr "" + +msgid "Password Saved!" +msgstr "" + +msgid "Password cannot contain single quotes" +msgstr "" + +msgid "Password is not valid" +msgstr "" + +msgid "Password is too long" +msgstr "" + +msgid "Password is too long for the database" +msgstr "" + +msgid "Password is too short" +msgstr "" + +#, c-format +msgid "Password is too short (%d). Use at least %d characters" +msgstr "" + +#, c-format +msgid "Password must be more than %d characters" +msgstr "" + +msgid "Password/Quota" +msgstr "" + +msgid "Password:" +msgstr "" + +msgid "Passwords do not match" +msgstr "" + +msgid "Passwords do not match or are invalid" +msgstr "" + +msgid "Path" +msgstr "" + +#, c-format +msgid "Path %s does not exist or is not accessible by the %s user." +msgstr "" + +#, c-format +msgid "" +"Path '%s' already exists before User creation. Please remove/rename this " +"path first." +msgstr "" + +msgid "Path does not exist" +msgstr "" + +#, c-format +msgid "Path must start with '%s'" +msgstr "" + +msgid "Path must start with a forward slash (/)" +msgstr "" + +msgid "Paths Unblocked" +msgstr "" + +msgid "Paths must be within your home directory" +msgstr "" + +msgid "Percent" +msgstr "" + +#, no-c-format +msgid "Percent must end with a % character" +msgstr "" + +#, c-format +msgid "Percent of CPU Core. >100% for more cores." +msgstr "" + +#, c-format +msgid "Percentage must be between %d and %d, inclusive" +msgstr "" + +msgid "Perl Modules" +msgstr "" + +msgid "Perm." +msgstr "" + +msgid "Permissions set" +msgstr "" + +msgid "Php Settings" +msgstr "" + +msgid "Php is not enabled" +msgstr "" + +msgid "Please answer this Security Question" +msgstr "" + +#, c-format +msgid "" +"Please check the zone for %s to ensure the nameserver A records are correct." +msgstr "" + +msgid "Please confirm you wish to delete your DNSSEC data" +msgstr "" + +#, c-format +msgid "Please contact %s for more info." +msgstr "" + +msgid "Please enter your Username and Password" +msgstr "" + +msgid "Please generate a secret before adding the scratch codes" +msgstr "" + +msgid "Please pick only one skin to apply" +msgstr "" + +#, c-format +msgid "Please provide an '%s'" +msgstr "" + +msgid "Please redirect accordingly" +msgstr "" + +#, c-format +msgid "Please see this URL and check for curl exit code '(%d)': %s" +msgstr "" + +msgid "Please select 1 Security Question" +msgstr "" + +msgid "Please select 1 domain to be your default domain" +msgstr "" + +msgid "Please select at least one User" +msgstr "" + +msgid "Please select at least one domains" +msgstr "" + +msgid "Please select at least one file" +msgstr "" + +msgid "Please select at least one item" +msgstr "" + +msgid "Please select at least one package" +msgstr "" + +msgid "Please select at least one widget" +msgstr "" + +msgid "Please select more than zero files to extract from the archive" +msgstr "" + +msgid "Please select one or more Databases" +msgstr "" + +msgid "Please select only 1 cronjob to edit" +msgstr "" + +#, c-format +msgid "Please set a limit between 1 and %d" +msgstr "" + +msgid "Please specify 'who' to get" +msgstr "" + +msgid "Please specify add or delete" +msgstr "" + +#, c-format +msgid "Please unlink all IPs from '%s' prior to deleting it." +msgstr "" + +msgid "Please use all lower case characters in the username" +msgstr "" + +msgid "Plugin Manager" +msgstr "" + +msgid "Plugin Uploaded" +msgstr "" + +msgid "Plugin(s) Installed" +msgstr "" + +msgid "Plugin(s) Un-Installed" +msgstr "" + +msgid "Plugin(s) Updated" +msgstr "" + +msgid "Plugins" +msgstr "" + +#, c-format +msgid "Pointer '%s' does not belong to you." +msgstr "" + +msgid "Pop" +msgstr "" + +msgid "Post Scripts" +msgstr "" + +msgid "Post scripts" +msgstr "" + +msgid "Pre-backup hard-link check" +msgstr "" + +msgid "Preparing 'domains' data" +msgstr "" + +msgid "Preparing data (no 'domains')" +msgstr "" + +msgid "Present" +msgstr "" + +msgid "" +"Preserving the web data only applies to /domains/domain.com. Other areas " +"like E-Mail data will not be preserved." +msgstr "" + +msgid "Print" +msgstr "" + +msgid "Priority" +msgstr "" + +msgid "Private Directory" +msgstr "" + +msgid "Privileges" +msgstr "" + +#, c-format +msgid "Process ID %d is not 'dataskq'. It's '%s'" +msgstr "" + +msgid "Process Monitor" +msgstr "" + +msgid "Process is running" +msgstr "" + +msgid "Process is stopped" +msgstr "" + +msgid "Processor Name" +msgstr "" + +msgid "Processor Speed (MHz)" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Protect" +msgstr "" + +msgid "Protected directory name contains invalid characters. Keep it simple" +msgstr "" + +msgid "" +"Protecting directories has been disabled with the " +"filemanager_disable_features option" +msgstr "" + +msgid "Provide either an IP, an IP range, domain, or wildcard domain." +msgstr "" + +msgid "Provided password is not correct." +msgstr "" + +msgid "Provided value is not a Username or Email address" +msgstr "" + +msgid "Provided value is not valid." +msgstr "" + +msgid "Proxy socket address" +msgstr "" + +msgid "Publish" +msgstr "" + +msgid "Purge" +msgstr "" + +msgid "Purge Archives" +msgstr "" + +msgid "Purge From" +msgstr "" + +#, c-format +msgid "Purge in %s" +msgstr "" + +msgid "Ranges must be put in \"quotes\"" +msgstr "" + +msgid "Re-sign your zone." +msgstr "" + +#, c-format +msgid "Read error with %s: %s" +msgstr "" + +msgid "Reason:" +msgstr "" + +msgid "Reboot" +msgstr "" + +msgid "Receive all multicast packets." +msgstr "" + +msgid "Received" +msgstr "" + +msgid "Received Emails" +msgstr "" + +msgid "Reconfiguration Error" +msgstr "" + +msgid "Record Added" +msgstr "" + +msgid "Record Edited" +msgstr "" + +msgid "Records Deleted" +msgstr "" + +msgid "Recursive" +msgstr "" + +#, c-format +msgid "Recursive search at max depth on %s" +msgstr "" + +msgid "Recursively" +msgstr "" + +msgid "" +"Recursively resetting ownership has been disabled with the " +"filemanager_disable_features option" +msgstr "" + +msgid "Redirect Added" +msgstr "" + +msgid "Redirect URL" +msgstr "" + +msgid "Redirect(s) deleted" +msgstr "" + +msgid "Redis" +msgstr "" + +msgid "Refresh" +msgstr "" + +msgid "Related" +msgstr "" + +msgid "Reload" +msgstr "" + +msgid "Reload requested" +msgstr "" + +msgid "Remote Mail" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "Remove DNS records for IP(s)" +msgstr "" + +msgid "Remove DNSSEC" +msgstr "" + +msgid "Remove Directory Contents" +msgstr "" + +msgid "Remove From Skip List" +msgstr "" + +msgid "Remove from reseller" +msgstr "" + +#, c-format +msgid "Removed user from %s's list" +msgstr "" + +msgid "Rename" +msgstr "" + +msgid "Rename Domain" +msgstr "" + +msgid "" +"Renaming files has been disabled with the filemanager_disable_features option" +msgstr "" + +msgid "Repair" +msgstr "" + +msgid "Replies" +msgstr "" + +msgid "Reply" +msgstr "" + +msgid "Reply Sent" +msgstr "" + +msgid "Report of false password reset request" +msgstr "" + +msgid "Report sent to the server admins" +msgstr "" + +msgid "Request added to task.queue" +msgstr "" + +#, c-format +msgid "Request: %s" +msgstr "" + +#, c-format +msgid "Requested LetsEncrypt value of '%s' is not an allowed value." +msgstr "" + +#, c-format +msgid "Requested filesize (%lld) exceeds the maxfilesize value (%lld)" +msgstr "" + +#, c-format +msgid "Required: '%s' or '%s'" +msgstr "" + +msgid "Reseller" +msgstr "" + +msgid "Reseller Bandwidth" +msgstr "" + +msgid "Reseller History" +msgstr "" + +msgid "Reseller IP Management" +msgstr "" + +msgid "Reseller Plugins" +msgstr "" + +msgid "Reseller Quota" +msgstr "" + +msgid "Reseller Resource Limits" +msgstr "" + +msgid "Reseller Statistics" +msgstr "" + +msgid "Reseller created" +msgstr "" + +msgid "Reseller deleted" +msgstr "" + +msgid "Reseller is assigned zero IP's. Cannot create a domain without an ip." +msgstr "" + +#, c-format +msgid "Reseller only got %s of their %s ip." +msgid_plural "Reseller only got %s of their %s ips." +msgstr[0] "" +msgstr[1] "" + +msgid "Reseller's IP" +msgstr "" + +msgid "Reseller::add_widgets_to_acccounts: Invalid widget level" +msgstr "" + +msgid "Reseller::delete_widgets_from_accounts: Invalid widget level" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Reset Owner" +msgstr "" + +msgid "Reset Ownership" +msgstr "" + +msgid "Reset Today" +msgstr "" + +msgid "Reset Uses" +msgstr "" + +msgid "" +"Resetting file ownership has been disabled with the " +"filemanager_disable_features option" +msgstr "" + +msgid "Resources allocated." +msgstr "" + +msgid "Restart" +msgstr "" + +msgid "Restore" +msgstr "" + +msgid "Restore Complete!" +msgstr "" + +#, c-format +msgid "Restore Error with Nginx Unit: %s" +msgstr "" + +#, c-format +msgid "" +"Restore of account '%s' to creator '%s' has been denied, as this account " +"already exists under the control of creator '%s'" +msgstr "" + +msgid "Restore will run in the background" +msgstr "" + +msgid "Restores added to Queue" +msgstr "" + +msgid "Restoring Databases" +msgstr "" + +msgid "Restoring Domains Data" +msgstr "" + +msgid "Restoring E-Mail Data" +msgstr "" + +msgid "Restoring E-Mail Settings" +msgstr "" + +msgid "Restoring Extra Admin Data" +msgstr "" + +msgid "Restoring Extra Reseller Data" +msgstr "" + +msgid "Restoring Extra User Data" +msgstr "" + +msgid "Restoring FTP" +msgstr "" + +msgid "Restoring extra E-Mail items" +msgstr "" + +msgid "" +"Restoring files has been disabled with the filemanager_disable_features " +"option" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Result of file copy" +msgstr "" + +msgid "Result of file move" +msgstr "" + +msgid "Results" +msgstr "" + +msgid "Retries" +msgstr "" + +msgid "Retry" +msgstr "" + +#, c-format +msgid "Return code 3XX(%d) requires a location" +msgstr "" + +#, c-format +msgid "Return code: %s" +msgstr "" + +msgid "Return with httpd code" +msgstr "" + +msgid "" +"Revoking all privileges would delete the User from the mysql.db. Please " +"grant at least 1 privilege." +msgstr "" + +msgid "Rewrite Apache" +msgstr "" + +msgid "RoundCube missing direct_login option. Please re-install RoundCube." +msgstr "" + +#, c-format +msgid "Route '%s' does not end with '%s'" +msgstr "" + +msgid "Rules Reset" +msgstr "" + +msgid "Run Now" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "SMTP Log" +msgstr "" + +msgid "SMTP Server" +msgstr "" + +msgid "SNI Host" +msgstr "" + +msgid "SNI is disabled for this domain" +msgstr "" + +msgid "SSH Key Modified" +msgstr "" + +msgid "SSH Key authorized" +msgstr "" + +msgid "SSH Key created" +msgstr "" + +msgid "SSH Key deleted" +msgstr "" + +msgid "SSH Keys" +msgstr "" + +msgid "SSH is not enabled" +msgstr "" + +msgid "SSL Certificates" +msgstr "" + +msgid "SSL is not enabled for this domain" +msgstr "" + +msgid "Safe Mode Disabled on selected domains" +msgstr "" + +msgid "Safe Mode Enabled on selected domains" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save Awstats" +msgstr "" + +msgid "Save Comments" +msgstr "" + +msgid "Save E-Mail" +msgstr "" + +msgid "Save Increase" +msgstr "" + +msgid "Save Language" +msgstr "" + +msgid "Save Limit" +msgstr "" + +msgid "Save Limit Notice" +msgstr "" + +msgid "Save Name" +msgstr "" + +msgid "Save Nameservers" +msgstr "" + +msgid "Save Skin" +msgstr "" + +msgid "" +"Saving/Editing files has been disabled with the filemanager_disable_features " +"option" +msgstr "" + +msgid "Scratch Codes" +msgstr "" + +msgid "Scratch codes" +msgstr "" + +msgid "Script output" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "SecRuleRemoveById id is blank" +msgstr "" + +msgid "Second PHP" +msgstr "" + +msgid "Secure Socket Layer (ssl)" +msgstr "" + +#, c-format +msgid "Secured Home of %s" +msgstr "" + +#, c-format +msgid "Security Answer is too long max=%d" +msgstr "" + +msgid "Security Question" +msgstr "" + +msgid "Security Question set" +msgstr "" + +msgid "Security Questions" +msgstr "" + +msgid "Security Questions are disabled" +msgstr "" + +msgid "Security Questions deleted" +msgstr "" + +#, c-format +msgid "See %sthis guide%s to fix it." +msgstr "" + +msgid "Select" +msgstr "" + +msgid "Select MX Template" +msgstr "" + +#, c-format +msgid "Select an IP to Link to %s" +msgstr "" + +msgid "Selected Content-Type is not valid." +msgstr "" + +msgid "Selected Data" +msgstr "" + +msgid "Selected Plugins Activated" +msgstr "" + +msgid "Selected Plugins De-Activated" +msgstr "" + +msgid "Selected Plugins Deleted" +msgstr "" + +msgid "Selected Users" +msgstr "" + +msgid "Selected character-set encoding is not valid." +msgstr "" + +msgid "Send Count" +msgstr "" + +msgid "Send Signal" +msgstr "" + +msgid "Send a Message" +msgstr "" + +msgid "Send limit must be a valid number, or blank." +msgstr "" + +msgid "Sender" +msgstr "" + +msgid "Sender Host" +msgstr "" + +#, c-format +msgid "Sender domain must match the list domain '%s', or use '%s'" +msgstr "" + +msgid "Sent" +msgstr "" + +msgid "Sent E-mails" +msgstr "" + +msgid "Sent Emails" +msgstr "" + +msgid "Sep" +msgstr "" + +msgid "Server" +msgstr "" + +msgid "Server History" +msgstr "" + +msgid "Server Path" +msgstr "" + +msgid "Service" +msgstr "" + +msgid "Service Monitor" +msgstr "" + +msgid "Set" +msgstr "" + +msgid "Set 0 for unlimited. Set a blank value to reset to default." +msgstr "" + +msgid "Set Global" +msgstr "" + +msgid "Set Global Shared" +msgstr "" + +msgid "Set as Default" +msgstr "" + +msgid "Set selected domains to be publicly viewable from" +msgstr "" + +msgid "Set selected to" +msgstr "" + +msgid "Set to" +msgstr "" + +msgid "Setting" +msgstr "" + +msgid "Setting changed" +msgstr "" + +msgid "" +"Setting file/directory permissions has been disabled with the " +"filemanager_disable_features option" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Settings Saved" +msgstr "" + +msgid "Share Selected" +msgstr "" + +msgid "Share a static path" +msgstr "" + +msgid "Shared" +msgstr "" + +msgid "Shared - randomly selected" +msgstr "" + +msgid "Shell Access (ssh)" +msgstr "" + +msgid "Shell for Resellers's Users" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Show All Users" +msgstr "" + +msgid "Show Domain" +msgstr "" + +msgid "Sign" +msgstr "" + +msgid "Signed" +msgstr "" + +msgid "Site Redirection" +msgstr "" + +msgid "Site Summary / Statistics / Logs" +msgstr "" + +msgid "Size" +msgstr "" + +msgid "Size is not a number" +msgstr "" + +msgid "Skin" +msgstr "" + +#, c-format +msgid "Skin '%s' does not have any custom color variables to set" +msgstr "" + +msgid "Skin Installed" +msgstr "" + +msgid "Skin Name" +msgstr "" + +msgid "Skin Owner" +msgstr "" + +msgid "Skin Set" +msgstr "" + +msgid "Skin applied to all users" +msgstr "" + +msgid "Skin has been customized" +msgstr "" + +msgid "Skin has been successfully changed" +msgstr "" + +msgid "Skins" +msgstr "" + +msgid "Skins Deleted" +msgstr "" + +msgid "Skip Suspended" +msgstr "" + +msgid "Skipped rule added" +msgstr "" + +msgid "Skipping system E-Mail account" +msgstr "" + +msgid "Slave of a load balancing bundle." +msgstr "" + +msgid "Sorry, this function does not support domain pointers at this time" +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Sort Selected Column in" +msgstr "" + +msgid "Source Domain" +msgstr "" + +msgid "Spam" +msgstr "" + +msgid "Spam Filters" +msgstr "" + +msgid "SpamAassassin is disabled on your account" +msgstr "" + +msgid "SpamAssassin" +msgstr "" + +msgid "Spamassassin disabled" +msgstr "" + +msgid "Spambox" +msgstr "" + +msgid "Spamd is not running on your system." +msgstr "" + +msgid "Splitting error for unix socket" +msgstr "" + +msgid "Ssl" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start Time" +msgstr "" + +msgid "Start Time must be before End Time." +msgstr "" + +msgid "State/Province must only contain letters, spaces and/or periods" +msgstr "" + +msgid "Stats links created" +msgstr "" + +msgid "Stats links removed" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Sticky bit's not allowed: 777 is the max allowed permission" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "String contains an invalid email address" +msgstr "" + +msgid "Sub Domains" +msgstr "" + +msgid "Sub Sort" +msgstr "" + +msgid "Sub Sort Selected Column in" +msgstr "" + +msgid "Sub-domain is forbidden" +msgstr "" + +msgid "SubDomain Name" +msgstr "" + +msgid "Subdomain Created" +msgstr "" + +msgid "Subdomain Removed" +msgstr "" + +msgid "Subdomain Stats" +msgstr "" + +msgid "Subdomain already exists" +msgstr "" + +msgid "Subdomain created" +msgstr "" + +msgid "Subdomain does not exist" +msgstr "" + +#, c-format +msgid "Subdomain name too long. Maximum %d characters." +msgstr "" + +msgid "Subdomains" +msgstr "" + +msgid "Subdomains Removed" +msgstr "" + +msgid "Subdomains deleted" +msgstr "" + +msgid "Subject" +msgstr "" + +msgid "Subject Contains" +msgstr "" + +#, c-format +msgid "Subject prefix contains invalid characters. Use %s" +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Subscriber" +msgstr "" + +msgid "Subscribers" +msgstr "" + +msgid "Success" +msgstr "" + +#, c-format +msgid "Success with %s of selected widgets" +msgstr "" + +#, c-format +msgid "Success with '%s'" +msgstr "" + +msgid "Supports multicast" +msgstr "" + +msgid "Suspend" +msgstr "" + +msgid "Suspend / Unsuspend" +msgstr "" + +msgid "Suspend Reason" +msgstr "" + +msgid "Suspend at Limit" +msgstr "" + +msgid "Suspended" +msgstr "" + +msgid "Syntax check has been disabled" +msgstr "" + +msgid "System Backup" +msgstr "" + +msgid "System Info" +msgstr "" + +msgid "System Information" +msgstr "" + +msgid "System Rebooting Now!" +msgstr "" + +msgid "System Uptime" +msgstr "" + +#, c-format +msgid "" +"System account exists, but unable to read the User data files for user %s" +msgstr "" + +msgid "Systems Quotas are size 0." +msgstr "" + +msgid "TB" +msgstr "" + +msgid "TTL has been saved" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "Tail" +msgstr "" + +msgid "Tasks Max" +msgstr "" + +#, c-format +msgid "Temp file %s is 0 bytes after writing to disk. Will not rename it." +msgstr "" + +msgid "Template does not exist" +msgstr "" + +msgid "Temporary Bandwidth Increase" +msgstr "" + +#, c-format +msgid "" +"Temporary account action lock in place. There might be some other process " +"working on the account. This should last no more than %d minutes" +msgstr "" + +msgid "Temporary bandwidth increase has been set" +msgstr "" + +msgid "Text" +msgstr "" + +msgid "Text contains invalid characters" +msgstr "" + +msgid "That ID is not of type 'admin'" +msgstr "" + +msgid "That IP already exists on the domain" +msgstr "" + +msgid "That IP does not exist" +msgstr "" + +msgid "That IP does not exist in your User's IP list" +msgstr "" + +msgid "That IP does not exist in your list" +msgstr "" + +msgid "That IP is already in your list of Additional IPs" +msgstr "" + +msgid "That IP is already owned" +msgstr "" + +msgid "That IP is not available for linking" +msgstr "" + +msgid "That User already exists on another server" +msgstr "" + +msgid "That database already exists" +msgstr "" + +msgid "That database does not belong to you" +msgstr "" + +msgid "That database does not exist" +msgstr "" + +msgid "That domain already exists" +msgstr "" + +msgid "That domain already exists on another server" +msgstr "" + +msgid "That domain does not belong to you" +msgstr "" + +msgid "That domain does not exist" +msgstr "" + +msgid "That domain is on the forbidden domains list" +msgstr "" + +msgid "That domain is suspended. Unsuspend it before changing it's name" +msgstr "" + +msgid "That email user does not exist" +msgstr "" + +msgid "That file was empty" +msgstr "" + +msgid "That filter already exists" +msgstr "" + +msgid "That ftp_password file does not exist" +msgstr "" + +msgid "That is an invalid email address / email list" +msgstr "" + +msgid "That is an invalid filename" +msgstr "" + +msgid "That is not a valid access host" +msgstr "" + +msgid "" +"That is not a valid path. Either it is not in your home directory, it " +"contains symbolic links, or it contains invalid characters" +msgstr "" + +msgid "" +"That is not a valid path. Either it is not in your home directory, it " +"doesn't exist, it contains symbolic links, or it contains invalid characters" +msgstr "" + +msgid "That is not a valid quota" +msgstr "" + +msgid "That is not a valid username" +msgstr "" + +msgid "That is not your domain" +msgstr "" + +msgid "That is not your system password" +msgstr "" + +msgid "" +"That is the hostname which is reserved. Either change the hostname, or use a " +"different domain" +msgstr "" + +msgid "That isn't a gzip file" +msgstr "" + +msgid "That key does not exist" +msgstr "" + +msgid "That password is incorrect" +msgstr "" + +msgid "That path isn't protectable" +msgstr "" + +msgid "That pop account doesn't exist" +msgstr "" + +#, c-format +msgid "That skin cannot be customized. It's skin.conf requires %s" +msgstr "" + +msgid "That skin does not exist" +msgstr "" + +msgid "That skin is not in your list" +msgstr "" + +msgid "That skin name already exists in your Reseller skin list" +msgstr "" + +msgid "That user already Exists" +msgstr "" + +msgid "That user already exists" +msgstr "" + +#, c-format +msgid "" +"That user contains the ftp separator (%c) which cannot be in the username." +msgstr "" + +msgid "That user does not belong to you" +msgstr "" + +msgid "That user does not exist" +msgstr "" + +msgid "" +"That user does not exist, please create the user before changing their " +"privileges" +msgstr "" + +msgid "That user doesn't exist" +msgstr "" + +msgid "That user is reserved for the anonymous account" +msgstr "" + +msgid "That username already exists on the system" +msgstr "" + +msgid "That username is a reserved system name" +msgstr "" + +msgid "That zone already exists" +msgstr "" + +msgid "Thats a reserved skin name." +msgstr "" + +#, c-format +msgid "The %s backups have been created in %s" +msgstr "" + +msgid "The 'ttl' value passed is not a number or is too large" +msgstr "" + +msgid "The Administrator has disabled the User Backup Function" +msgstr "" + +msgid "" +"The CA Certificate will not be used. The file will remain, but will not be " +"included." +msgstr "" + +msgid "" +"The CC value entered will create an infinite loop. Please use a different " +"CC value." +msgstr "" + +#, c-format +msgid "The E-Mail '%s' contains invalid characters" +msgstr "" + +#, c-format +msgid "The IP %s does not exist. User %s will not be created" +msgstr "" + +#, c-format +msgid "The IP %s has provided the correct password for the %s account." +msgstr "" + +#, c-format +msgid "The OS being updated %s has expired. No further updates can be done" +msgstr "" + +msgid "The Ticket System is not enabled." +msgstr "" + +msgid "The User backups have been uploaded to" +msgstr "" + +#, c-format +msgid "The User files have been restored from %s" +msgstr "" + +msgid "The Users display cache will be updated momentarily." +msgstr "" + +msgid "The addresses are lost when the interface goes down." +msgstr "" + +msgid "" +"The cache is being updated, the current values may not be correct. Please " +"refresh the page in 1 minute." +msgstr "" + +msgid "" +"The certificate and key do not match. Please ensure you are using the " +"correct key with this certificate" +msgstr "" + +msgid "" +"The clipboard has been disabled with the filemanager_disable_features option" +msgstr "" + +msgid "The code is valid, but for a different time." +msgstr "" + +msgid "The command cannot contain any newline characters" +msgstr "" + +#, c-format +msgid "The database '%s' does not belong to you" +msgstr "" + +msgid "The day of month is not a valid cron value (1-31)" +msgstr "" + +msgid "The day of week is not a valid cron value (0-7)" +msgstr "" + +msgid "The default has been set" +msgstr "" + +#, c-format +msgid "" +"The directory %s seems to be owned by 'apache'. Try using the 'Reset Owner' " +"option, then try again." +msgstr "" + +#, c-format +msgid "" +"The disk usage for the selected Users totals more than %d MB, thus will be " +"removed in the background." +msgstr "" + +#, c-format +msgid "The domain %s does not belong to you." +msgstr "" + +#, c-format +msgid "" +"The domain %s does not belong to you. The subdomain will not be created." +msgstr "" + +msgid "" +"The domain entered is invalid. It must be of the form 'sourcedomain.com'" +msgstr "" + +msgid "The domain must not match your hostname." +msgstr "" + +#, c-format +msgid "" +"The download of %s has failed the md5sum check. Please check the file and " +"retry the update again. Not extracted." +msgstr "" + +msgid "The e-mail containing your new password has been sent." +msgstr "" + +msgid "The email address provided is not a valid email address" +msgstr "" + +msgid "The entered path must be a-zA-Z0-9" +msgstr "" + +msgid "The expiry entered is too far in the future" +msgstr "" + +#, c-format +msgid "The file %s has more than 1 hard link" +msgstr "" + +msgid "The file is generated when the account is reset." +msgstr "" + +msgid "The file must be of the form: type.creator.username.tar.gz" +msgstr "" + +msgid "The file must be of the form: username.tar.gz" +msgstr "" + +#, c-format +msgid "The file: '%s' is not in the form username.tar.gz" +msgstr "" + +msgid "The following file could not be found. No reset required" +msgstr "" + +#, c-format +msgid "The following hard links have been found under User %s:" +msgstr "" + +msgid "The following test database tables have been found:" +msgstr "" + +#, c-format +msgid "The ftp user %s does not exist in passwd file %s" +msgstr "" + +msgid "The full format name entered does not end with the name of the zone" +msgstr "" + +msgid "The local url path or the destination url is invalid." +msgstr "" + +msgid "The location has not changed" +msgstr "" + +msgid "The lost password feature is disabled" +msgstr "" + +msgid "The max upload size cannot be 0" +msgstr "" + +#, c-format +msgid "The maximum for %s is %s" +msgstr "" + +#, c-format +msgid "The maximum value is %d" +msgstr "" + +#, c-format +msgid "The minimum for %s is %s" +msgstr "" + +msgid "The month is not a valid cron value (1-12)" +msgstr "" + +msgid "The name you've entered contains invalid characters" +msgstr "" + +msgid "The new key was created, but there was an issue during authorization" +msgstr "" + +msgid "The new passwords do not match" +msgstr "" + +msgid "The number and type of ticket is required" +msgstr "" + +#, c-format +msgid "The owner of %s is not %s" +msgstr "" + +msgid "The password changing feature has been disabled" +msgstr "" + +#, c-format +msgid "The path %s already exists" +msgstr "" + +msgid "The path already exists, but is not a directory" +msgstr "" + +msgid "" +"The process is currently being used to execute this request so it will be " +"executed shortly by the Task Queue." +msgstr "" + +msgid "The provided IP is not valid" +msgstr "" + +msgid "The provided domain name matches your hostname." +msgstr "" + +msgid "The question was" +msgstr "" + +#, c-format +msgid "The referer request set (%s) is not in the allowed list: %s" +msgstr "" + +#, c-format +msgid "The referer used is not safe as it can be controlled by a User: %s" +msgstr "" + +msgid "" +"The request you've made cannot be executed because it does not exist in your " +"authority level" +msgstr "" + +msgid "The requested command requires POST but GET was used" +msgstr "" + +msgid "" +"The skin package did not install properly. Either there were files missing, " +"or their permissions were incorrectly set" +msgstr "" + +msgid "The sql file is 0 bytes in size:" +msgstr "" + +#, c-format +msgid "The subdomain '%s' already exists under the %s domain" +msgstr "" + +msgid "" +"The times must formatted like one of the following (eg. hour, no spaces)" +msgstr "" + +msgid "The update is not allowed to be downloaded." +msgstr "" + +#, c-format +msgid "The user %s does not belong to you" +msgstr "" + +#, c-format +msgid "The user %s does not exist" +msgstr "" + +#, c-format +msgid "" +"The username is invalid. Usernames must start with a-z, contain >= 3 " +"characters and <= %d." +msgstr "" + +msgid "The username is invalid. Usernames must use a-z0-9" +msgstr "" + +msgid "The value must be an IP address" +msgstr "" + +msgid "The very last entry." +msgstr "" + +msgid "The welcome email(s) has successfully been resent." +msgstr "" + +msgid "There are no messages for that ticket" +msgstr "" + +#, c-format +msgid "" +"There are still Users on %s. Remove them from the IP first and set it to " +"'free'." +msgstr "" + +#, c-format +msgid "" +"There have been %d renew failures, thus no more attempts will be made.%s" +msgstr "" + +msgid "There is already a CNAME record with that name" +msgstr "" + +msgid "There is already a mailing list alias with that name" +msgstr "" + +msgid "There is already an A record with that name" +msgstr "" + +msgid "There is already an account with that name" +msgstr "" + +msgid "There is already an autoresponder with that name" +msgstr "" + +#, c-format +msgid "There is not sufficient space on %s to upload %lld bytes of data" +msgstr "" + +#, c-format +msgid "There is only 1 %s record for %s=%s, not removing it" +msgstr "" + +msgid "" +"There were md5 errors from all servers, above. Please send report to " +"DirectAdmin Support." +msgstr "" + +msgid "These are dynamic values. They change with the date." +msgstr "" + +msgid "They should not exist. To delete them, run:" +msgstr "" + +#, c-format +msgid "" +"This OS is now End-Of-Life and no further updates are availble. The " +"automated updater will no longer accept request after %s (manual attempts " +"can be done with https://help.directadmin.com/item.php?id=29) but may not do " +"anything." +msgstr "" + +msgid "This OS is now end-of-life. Future automated updates may fail." +msgstr "" + +#, c-format +msgid "" +"This Reseller account is unable to allocate unlimited %s, yet that amount " +"has alredy been allocated." +msgstr "" + +msgid "" +"This account already exists on the system. If you restore, it will overwrite " +"and/or merge the data." +msgstr "" + +msgid "This account is blocked via BlockCracking." +msgstr "" + +msgid "This account is blocked via BlockCracking. Unblocking is disabled." +msgstr "" + +msgid "" +"This domain will now temporarily use the Shared Server Certificate, unless " +"you restore the backup key (but backup the new key first or it will become " +"lost)" +msgstr "" + +msgid "This hash has already been converted to a key." +msgstr "" + +msgid "This is a Hash URL login. You can delete it, but you cannot modify it." +msgstr "" + +msgid "This is a placeholder for the subdomain" +msgstr "" + +msgid "This is information about my mailing list" +msgstr "" + +msgid "This may give unexpected results" +msgstr "" + +msgid "This may give unexpected results." +msgstr "" + +msgid "This plugin has been disabled for your account" +msgstr "" + +msgid "" +"This will only happen *after* logs exist (domain must resolve and be used)." +msgstr "" + +msgid "This will skip the removal of the dns zone, leaving it in place." +msgstr "" + +msgid "Thread Count" +msgstr "" + +msgid "Throttle Memory above this limit." +msgstr "" + +msgid "Ticket #" +msgstr "" + +msgid "Tickets Updated" +msgstr "" + +msgid "Time" +msgstr "" + +#, c-format +msgid "Time slice discrepancy = %d" +msgstr "" + +msgid "Timeout during read" +msgstr "" + +#, c-format +msgid "Timeout while trying to connect to %s" +msgstr "" + +#, c-format +msgid "Timezone '%s' does not exist on the system" +msgstr "" + +msgid "Timezone does not exist" +msgstr "" + +msgid "" +"To add a cron job, you require all of the following: minute, hour, " +"dayofmonth, month, dayofweek and command" +msgstr "" + +msgid "" +"To change this page, upload a new index.html to your private_html folder" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Today at" +msgstr "" + +#, c-format +msgid "Today's E-Mail count has been reset for User %s" +msgstr "" + +msgid "Too long" +msgstr "" + +msgid "Too short" +msgstr "" + +msgid "Total" +msgstr "" + +msgid "Total Disk Usage (MB)" +msgstr "" + +msgid "Total Memory" +msgstr "" + +msgid "Total Size:" +msgstr "" + +msgid "Total Swap Memory" +msgstr "" + +msgid "Total Usage" +msgstr "" + +msgid "Trial License" +msgstr "" + +#, c-format +msgid "Tried to restore '%s' to '%s', but this path is not in the %s" +msgstr "" + +msgid "Trust cookie has been cleared" +msgstr "" + +#, c-format +msgid "Trust this device for %d day" +msgid_plural "Trust this device for %d days" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "Try updating manually: %s" +msgstr "" + +msgid "Trying another random redirection URL from the same control server" +msgstr "" + +msgid "Two-Step Auth secret is not set." +msgstr "" + +msgid "Two-Step Authentication" +msgstr "" + +msgid "Two-Step Authentication is disabled" +msgstr "" + +msgid "Type" +msgstr "" + +#, c-format +msgid "Type '%s' is disabled" +msgstr "" + +msgid "Type must be either 'paste' or 'id'" +msgstr "" + +msgid "UID" +msgstr "" + +msgid "URL" +msgstr "" + +msgid "Un-Link" +msgstr "" + +msgid "Un-Set" +msgstr "" + +msgid "Unable To Execute Your Request" +msgstr "" + +msgid "Unable to Execute Your Command" +msgstr "" + +msgid "Unable to Locate that domain" +msgstr "" + +msgid "Unable to Logout" +msgstr "" + +msgid "Unable to add IP" +msgstr "" + +msgid "Unable to add access host:" +msgstr "" + +msgid "Unable to add domain pointer" +msgstr "" + +#, c-format +msgid "Unable to add user %s." +msgstr "" + +msgid "Unable to add user to ssh config file" +msgstr "" + +#, c-format +msgid "" +"Unable to allocate unlimited %s. This account is not allowed to create that " +"amount." +msgstr "" + +msgid "" +"Unable to assign the Reseller ANY ips. Make sure to have free, un-assigned " +"ips." +msgstr "" + +msgid "Unable to authenitcate: Check your password for syntax" +msgstr "" + +msgid "Unable to authenticate: Invalid password" +msgstr "" + +#, c-format +msgid "Unable to change %s" +msgstr "" + +msgid "Unable to change password" +msgstr "" + +msgid "Unable to change the E-Mail Address" +msgstr "" + +msgid "Unable to change the Message System E-Mail Address" +msgstr "" + +msgid "Unable to change the Name" +msgstr "" + +msgid "Unable to change the limit" +msgstr "" + +msgid "Unable to change the temporary bandwidth increase" +msgstr "" + +msgid "Unable to connect to any site for the update" +msgstr "" + +msgid "Unable to connect to secure socket" +msgstr "" + +msgid "Unable to connect to the database" +msgstr "" + +#, c-format +msgid "Unable to copy %s to %s: %s" +msgstr "" + +#, c-format +msgid "Unable to copy directory %s to %s: %s" +msgstr "" + +#, c-format +msgid "Unable to create %s: %s" +msgstr "" + +msgid "Unable to create a Reseller" +msgstr "" + +msgid "Unable to create a User" +msgstr "" + +#, c-format +msgid "Unable to create backup directory (uid=%s)" +msgstr "" + +msgid "Unable to create database" +msgstr "" + +#, c-format +msgid "Unable to create directory %s" +msgstr "" + +msgid "Unable to create new file" +msgstr "" + +msgid "Unable to create reverse IP lookup" +msgstr "" + +msgid "Unable to create subdomain" +msgstr "" + +msgid "Unable to create user's data directory" +msgstr "" + +msgid "Unable to create zone" +msgstr "" + +msgid "Unable to create zone." +msgstr "" + +#, c-format +msgid "Unable to delete %s: %s" +msgstr "" + +#, c-format +msgid "Unable to delete directory %s: %s" +msgstr "" + +msgid "Unable to delete files" +msgstr "" + +msgid "Unable to delete the main email account" +msgstr "" + +msgid "Unable to delete the reseller's ip.list file." +msgstr "" + +msgid "Unable to delete users's domains directory" +msgstr "" + +msgid "Unable to download backup" +msgstr "" + +msgid "Unable to edit file" +msgstr "" + +msgid "Unable to execute your command" +msgstr "" + +msgid "Unable to execute your request" +msgstr "" + +msgid "Unable to export packages" +msgstr "" + +#, c-format +msgid "Unable to extract %s from" +msgstr "" + +msgid "Unable to extract user.conf, reseller.conf or ip.list from" +msgstr "" + +#, c-format +msgid "Unable to find %s" +msgstr "" + +#, c-format +msgid "Unable to find %s to create mysql backup" +msgstr "" + +#, c-format +msgid "Unable to find %s to extract mysql backup" +msgstr "" + +msgid "Unable to find CA certificate" +msgstr "" + +msgid "Unable to find certificate" +msgstr "" + +msgid "Unable to find key" +msgstr "" + +msgid "Unable to generate a random username for login" +msgstr "" + +#, c-format +msgid "Unable to get file stats on %s" +msgstr "" + +#, c-format +msgid "Unable to get lock on %s" +msgstr "" + +#, c-format +msgid "Unable to get privileges for %s: %s" +msgstr "" + +msgid "Unable to get the user's crypted password for the ftp passwd file" +msgstr "" + +#, c-format +msgid "Unable to lock %s area" +msgstr "" + +#, c-format +msgid "Unable to lock %s: %s" +msgstr "" + +#, c-format +msgid "Unable to lock the '%s' account actions" +msgstr "" + +#, c-format +msgid "Unable to lock user %s: %s" +msgstr "" + +msgid "Unable to modify that domain" +msgstr "" + +#, c-format +msgid "Unable to open %s for appending" +msgstr "" + +#, c-format +msgid "Unable to open %s for appending: %s" +msgstr "" + +#, c-format +msgid "Unable to open %s for reading" +msgstr "" + +#, c-format +msgid "Unable to open %s for writing: %s" +msgstr "" + +#, c-format +msgid "Unable to open %s to restore the databases" +msgstr "" + +#, c-format +msgid "Unable to open %s: %s" +msgstr "" + +msgid "Unable to open a socket" +msgstr "" + +#, c-format +msgid "Unable to open ca certificate file (%s) to write to: %s" +msgstr "" + +#, c-format +msgid "Unable to open certificate file (%s) to write to: %s" +msgstr "" + +#, c-format +msgid "Unable to open directory %s: %s" +msgstr "" + +#, c-format +msgid "Unable to parse %s from script '%s '(%s) output:" +msgstr "" + +#, c-format +msgid "Unable to read %s as account %s" +msgstr "" + +#, c-format +msgid "Unable to read %s's user files" +msgstr "" + +#, c-format +msgid "Unable to read %s. This file is only created after a tally is run." +msgstr "" + +#, c-format +msgid "" +"Unable to read %s. This file is only created when emails are delivered." +msgstr "" + +#, c-format +msgid "Unable to read %s: %s" +msgstr "" + +#, c-format +msgid "Unable to read DS file %s" +msgstr "" + +msgid "Unable to read History File." +msgstr "" + +#, c-format +msgid "Unable to read RoundCube backup script: %s" +msgstr "" + +#, c-format +msgid "Unable to read RoundCube restore script: %s" +msgstr "" + +#, c-format +msgid "Unable to read data from %s" +msgstr "" + +msgid "Unable to read directatdmin.conf" +msgstr "" + +msgid "Unable to read domain configuration files" +msgstr "" + +msgid "Unable to read package" +msgstr "" + +msgid "Unable to read system uptime" +msgstr "" + +#, c-format +msgid "Unable to read the %s file. Make sure it exists." +msgstr "" + +msgid "Unable to read the cliboard file" +msgstr "" + +msgid "Unable to read the system ftp passwd file to add the user to it." +msgstr "" + +msgid "Unable to read the system ftp passwd file to remove the system ftp user" +msgstr "" + +msgid "Unable to read the user's files" +msgstr "" + +msgid "Unable to read ticket config file" +msgstr "" + +msgid "Unable to read zone file to increase serial" +msgstr "" + +#, c-format +msgid "Unable to read zonefile for %s" +msgstr "" + +msgid "Unable to reboot" +msgstr "" + +msgid "Unable to remove IP(s)" +msgstr "" + +msgid "Unable to remove Unix User." +msgstr "" + +msgid "Unable to remove all the of the reseller's users" +msgstr "" + +#, c-format +msgid "Unable to rename %s to %s: %s" +msgstr "" + +#, c-format +msgid "Unable to restore %s to %s: %s" +msgstr "" + +#, c-format +msgid "" +"Unable to restore '%s' because the Reseller or Admin '%s' cannot be found. " +"Rename the file if needed." +msgstr "" + +msgid "Unable to restore database" +msgstr "" + +msgid "Unable to satisfy difficult password check." +msgstr "" + +msgid "Unable to save dns zone: named-checkzone returned:" +msgstr "" + +msgid "Unable to save your changes" +msgstr "" + +msgid "Unable to set bandwidth" +msgstr "" + +msgid "Unable to set file permissions" +msgstr "" + +#, c-format +msgid "Unable to set ip %s to be nameserver. Continuing anyway." +msgstr "" + +msgid "Unable to set password" +msgstr "" + +msgid "Unable to set quota" +msgstr "" + +msgid "Unable to set stats link" +msgstr "" + +msgid "Unable to set the E-Mail Limit" +msgstr "" + +msgid "Unable to set the shell" +msgstr "" + +msgid "Unable to show Admin History" +msgstr "" + +msgid "Unable to show Reseller History" +msgstr "" + +msgid "Unable to show User History" +msgstr "" + +msgid "Unable to show current E-Mail usage" +msgstr "" + +msgid "Unable to show the system information" +msgstr "" + +#, c-format +msgid "Unable to trash %s to %s: %s" +msgstr "" + +#, c-format +msgid "Unable to unlock user %s: %s" +msgstr "" + +msgid "Unable to update your Disk Usage" +msgstr "" + +msgid "Unable to use that new domain name" +msgstr "" + +#, c-format +msgid "Unable to write %s's user files" +msgstr "" + +#, c-format +msgid "Unable to write %s: %s" +msgstr "" + +msgid "Unable to write User's httpd.conf" +msgstr "" + +msgid "Unable to write reseller's IP list" +msgstr "" + +msgid "Unable to write the domain config file" +msgstr "" + +msgid "" +"Unable to write the main ftp password file. Your changes will not take " +"effect." +msgstr "" + +#, c-format +msgid "" +"Unable to write the quota file. Let your administartor know that %s is " +"unwriteable." +msgstr "" + +msgid "" +"Unable to write the system ftp passwd file to remove the system ftp user" +msgstr "" + +#, c-format +msgid "" +"Unable to write the usage.cache file. Let your administartor know that %s is " +"unwriteable." +msgstr "" + +msgid "Unable to write ticket config" +msgstr "" + +#, c-format +msgid "" +"Unable to write to the password file. Let your administrator know that %s is " +"unwritable." +msgstr "" + +msgid "Unable to write to the system ftp passwd file to add the user to it." +msgstr "" + +msgid "Unable to write zone file to increase serial" +msgstr "" + +#, c-format +msgid "Unable to write zonefile for %s" +msgstr "" + +msgid "Unblock" +msgstr "" + +msgid "Unblocking is disabled." +msgstr "" + +msgid "" +"Unchecking will immediately delete the file from disk and cannot be recovered" +msgstr "" + +msgid "Unhandled exception name" +msgstr "" + +#, c-format +msgid "Unhandled route %s value '%s'" +msgstr "" + +msgid "Unix User created successfully" +msgstr "" + +msgid "Unix User removed from the server" +msgstr "" + +msgid "Unix proxy IP/port should not have any of path, query or hash" +msgstr "" + +#, c-format +msgid "Unknown '%s'" +msgstr "" + +msgid "Unknown action" +msgstr "" + +msgid "Unknown backup destination" +msgstr "" + +msgid "Unknown certificate type. Only server, create and paste are allowed" +msgstr "" + +msgid "Unknown ftp type" +msgstr "" + +#, c-format +msgid "Unknown option '%s'" +msgstr "" + +#, c-format +msgid "Unknown value for %s" +msgstr "" + +msgid "Unlimited" +msgstr "" + +msgid "Unsuspend" +msgstr "" + +msgid "" +"Until the cache is created, the values may not be correct. Refresh the page " +"in 1 minute." +msgstr "" + +msgid "Up a Level" +msgstr "" + +msgid "Update" +msgstr "" + +msgid "Update Successful" +msgstr "" + +msgid "Update queued" +msgstr "" + +msgid "Upload successful" +msgstr "" + +#, c-format +msgid "Uploaded %s value is not valid json" +msgstr "" + +msgid "Uploaded file is not valid for copy" +msgstr "" + +#, c-format +msgid "Uploaded: %s" +msgstr "" + +msgid "" +"Uploading files has been disabled with the filemanager_disable_features " +"option" +msgstr "" + +msgid "Usage (Meg)" +msgstr "" + +msgid "Usage Log" +msgstr "" + +msgid "Usage statistics have not yet been collected for this account" +msgstr "" + +#, c-format +msgid "Use%%" +msgstr "" + +msgid "Used" +msgstr "" + +msgid "User" +msgstr "" + +#, c-format +msgid "User %s Removed" +msgstr "" + +#, c-format +msgid "User %s already exists. Please chose a different username." +msgstr "" + +#, c-format +msgid "User %s created" +msgstr "" + +#, c-format +msgid "User %s did not exist on the server. Removing it from your list." +msgstr "" + +#, c-format +msgid "User %s does not exist on the system." +msgstr "" + +#, c-format +msgid "User %s exists on the system but is not in your User list" +msgstr "" + +#, c-format +msgid "User %s has been added to your database. Use the following values:" +msgstr "" + +#, c-format +msgid "User %s has been backed up." +msgstr "" + +#, c-format +msgid "User %s has been restored" +msgstr "" + +#, c-format +msgid "User %s has been updated. Use the following values:" +msgstr "" + +#, c-format +msgid "User %s has one or more hard links in their path:" +msgstr "" + +#, c-format +msgid "User %s is already suspended" +msgstr "" + +#, c-format +msgid "User %s is already unsuspended" +msgstr "" + +#, c-format +msgid "User %s is not on your list. You cannot make a backup for him." +msgstr "" + +#, c-format +msgid "User %s is not on your list. You cannot make a backup for them." +msgstr "" + +#, c-format +msgid "User %s not deleted. Unable to delete all of their users." +msgstr "" + +#, c-format +msgid "User %s was not created by you-> Not Deleted." +msgstr "" + +#, c-format +msgid "User %s was suspended in the backup. Account suspended." +msgstr "" + +#, c-format +msgid "User %s was suspended in the backup. Error suspending the account:" +msgstr "" + +#, c-format +msgid "User '%s' does not exist" +msgstr "" + +msgid "User Acconts" +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Bandwidth" +msgstr "" + +msgid "User Comment Box" +msgstr "" + +msgid "User DNSSEC Control is disabled" +msgstr "" + +msgid "User Disk Quota" +msgstr "" + +msgid "User History" +msgstr "" + +msgid "User Modified" +msgstr "" + +msgid "User Resource Limits" +msgstr "" + +msgid "User SMTP Logs are are not enabled" +msgstr "" + +msgid "User Updated" +msgstr "" + +msgid "User added to SSH config file successfully" +msgstr "" + +msgid "User added to database" +msgstr "" + +msgid "User added to named.conf file successfully" +msgstr "" + +msgid "User added to ssh config file." +msgstr "" + +msgid "User backups have been disabled." +msgstr "" + +msgid "User config file updated." +msgstr "" + +msgid "User deleted" +msgid_plural "Users deleted" +msgstr[0] "" +msgstr[1] "" + +msgid "User does not exist" +msgstr "" + +msgid "User password changed, however the account is still suspended" +msgstr "" + +msgid "User removed from SSH" +msgstr "" + +msgid "User's System Quotas set" +msgstr "" + +msgid "User's config files deleted" +msgstr "" + +msgid "User's data directory created successfully" +msgstr "" + +msgid "User's data directory removed." +msgstr "" + +msgid "User(s)" +msgstr "" + +msgid "User::get_all_widgets: Invalid level" +msgstr "" + +#, c-format +msgid "UserDir: %s" +msgstr "" + +msgid "Username" +msgstr "" + +#, c-format +msgid "Username '%s' is too long. Length %d > max_username_length=%d" +msgstr "" + +msgid "Username is too short. It must be at least 2 characters long." +msgstr "" + +msgid "" +"Username must be Alphanumeric (a-z, A-Z, 0-9), with the first character " +"being a letter" +msgstr "" + +msgid "Username:" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Users will be deleted in the background." +msgstr "" + +msgid "Users's domains directory removed." +msgstr "" + +msgid "Usertype" +msgstr "" + +msgid "Uses" +msgstr "" + +#, c-format +msgid "Using path %s is not allowed." +msgstr "" + +msgid "Vacation Account" +msgstr "" + +msgid "Vacation Message Deleted" +msgstr "" + +msgid "Vacation Message set" +msgstr "" + +msgid "Vacation Message updated" +msgstr "" + +msgid "Vacation Messages" +msgstr "" + +msgid "Valid" +msgstr "" + +msgid "Valid broadcast address set." +msgstr "" + +msgid "Value" +msgstr "" + +#, c-format +msgid "Value is too long. Max=%d" +msgstr "" + +msgid "Variable 'ip' is missing from the submission" +msgstr "" + +msgid "Vendor ID" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "View" +msgstr "" + +msgid "View Clipboard" +msgstr "" + +msgid "View previous sort" +msgstr "" + +msgid "Warning from named-checkzone:" +msgstr "" + +#, c-format +msgid "" +"Warning: %s has a valid password for %s but failed the Two-Step " +"Authentication code %s times." +msgstr "" + +#, c-format +msgid "" +"Warning: %s has a valid password for %s but failed the security questions %s " +"times." +msgstr "" + +msgid "Warning: Quota limit reached. File(s) may be empty." +msgstr "" + +msgid "Warning: Saved filesize is less than uploaded filesize. Check quotas." +msgstr "" + +msgid "Warning: The system load average is" +msgstr "" + +#, c-format +msgid "We've only read %lld of the %lld byte file from %s" +msgstr "" + +msgid "Webalizer" +msgstr "" + +msgid "Webmail" +msgstr "" + +msgid "Webmail Attachments" +msgstr "" + +msgid "Webmail SSO" +msgstr "" + +msgid "Week of Month" +msgstr "" + +#, c-format +msgid "Weekly Rate limit of %d for '%s' has been reached" +msgstr "" + +#, c-format +msgid "Welcome to %s" +msgstr "" + +msgid "What" +msgstr "" + +msgid "What is the first name of the boy or girl that you first kissed?" +msgstr "" + +msgid "What is the middle name of your oldest child?" +msgstr "" + +msgid "What is the name of a college you applied to but didn't attend?" +msgstr "" + +msgid "What is the name of the place your wedding reception was held?" +msgstr "" + +msgid "What is the name of your favorite childhood friend?" +msgstr "" + +msgid "What is your maternal grandmother's maiden name" +msgstr "" + +msgid "" +"What is your oldest brother's birthday month and year? (e.g: January 1970)" +msgstr "" + +msgid "What is your oldest cousin's first and last name?" +msgstr "" + +msgid "" +"What is your oldest sibling's birthday month and year? (e.g: January 1970)" +msgstr "" + +msgid "What is your oldest sibling's middle name?" +msgstr "" + +msgid "What school did you attend for sixth grade?" +msgstr "" + +msgid "What street did you live on in third grade?" +msgstr "" + +msgid "What was the last name of your third grade teacher?" +msgstr "" + +msgid "What was the name of your first stuffed animal?" +msgstr "" + +msgid "What was your childhood nickname?" +msgstr "" + +msgid "" +"What was your childhood phone number including area code? (e.g: 000-000-0000)" +msgstr "" + +msgid "When" +msgstr "" + +msgid "Where" +msgstr "" + +msgid "Where were you when you had your first kiss?" +msgstr "" + +msgid "Who" +msgstr "" + +#, c-format +msgid "Widget '%s' is not available" +msgstr "" + +msgid "Widgets are not enabled in this account level" +msgstr "" + +msgid "Wildcard" +msgstr "" + +msgid "With Selected" +msgstr "" + +msgid "With selected" +msgstr "" + +#, c-format +msgid "Won't activate %s's account because its off" +msgstr "" + +#, c-format +msgid "Write error with %s: %s" +msgstr "" + +msgid "Wrong Answer." +msgstr "" + +#, c-format +msgid "Wrong Answer. You have %d more attempt.%s" +msgid_plural "Wrong Answer. You have %d more attempts.%s" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "Wrong Answer. You have %d more attempts.%s" +msgstr "" + +#, c-format +msgid "Wrong number of '%s' elements. Allowed: 1, or 2 with '%s')" +msgstr "" + +#, c-format +msgid "Wrong number of 'pass' values: %d in '%s' (slash separated)" +msgstr "" + +msgid "Yes" +msgstr "" + +#, c-format +msgid "" +"You are deleting Admin or Reseller accounts that have %d User under their " +"control." +msgid_plural "" +"You are deleting Admin or Reseller accounts that have %d Users under their " +"control." +msgstr[0] "" +msgstr[1] "" + +msgid "You are not allowed to enable anonymous ftp" +msgstr "" + +msgid "You are not allowed to modify your ssl settings" +msgstr "" + +msgid "You are not logged in from a master account" +msgstr "" + +msgid "You aren't allowed to modify that ticket" +msgstr "" + +#, c-format +msgid "" +"You can click the E-Mail below to be immediately logged into %s as this " +"User, without knowing their password." +msgstr "" + +msgid "You can only add a certificate if you own the ip you are using" +msgstr "" + +msgid "You can only add a certificate to your main domain" +msgstr "" + +msgid "You can't make a list named majordomo as its a reserved alias" +msgstr "" + +msgid "You can't suspend root. That would be BAD" +msgstr "" + +msgid "You cannot add that extension" +msgstr "" + +msgid "You cannot assign the domain more bandwidth than your account" +msgstr "" + +msgid "You cannot assign the domain more quota than your account" +msgstr "" + +msgid "You cannot create more Users than you are allowed domains." +msgstr "" + +msgid "You cannot delete all of your IPs" +msgstr "" + +#, c-format +msgid "" +"You cannot delete the account %s because it is linked to your system account" +msgstr "" + +#, c-format +msgid "You cannot delete yourself (%s)" +msgstr "" + +msgid "You cannot execute that command" +msgstr "" + +msgid "You cannot login as yourself" +msgstr "" + +msgid "You cannot modify yourself" +msgstr "" + +msgid "" +"You cannot restore multiple Users on one free IP. The IP must first be " +"shared." +msgstr "" + +msgid "You cannot set an unlimited send limit." +msgstr "" + +msgid "You cannot suspend yourself" +msgstr "" + +msgid "You cannot suspend/unsuspend yourself" +msgstr "" + +msgid "You cannot unsuspend this account." +msgstr "" + +msgid "" +"You cannot use that domain as a pointer. It already exists on the server" +msgstr "" + +#, c-format +msgid "You currently have %s Users and a maximum of %s domains." +msgstr "" + +msgid "You did not select any domains to modify" +msgstr "" + +msgid "You didn't chose a different ip, no changes have been made" +msgstr "" + +msgid "You didn't select anyone to send it to" +msgstr "" + +msgid "You do not have control over user" +msgstr "" + +msgid "You do not own any IPs" +msgstr "" + +msgid "You do not own that IP" +msgstr "" + +msgid "You do not own that domain" +msgstr "" + +msgid "You do not own that ip" +msgstr "" + +msgid "You do not own that that cron ID" +msgstr "" + +#, c-format +msgid "You do not own the IP %s. User %s will not be created" +msgstr "" + +msgid "You do not yet have any protected directories." +msgstr "" + +msgid "You don't have authority over that User" +msgstr "" + +msgid "You don't have authority over that user" +msgstr "" + +msgid "You don't have permission to respond to that ticket" +msgstr "" + +msgid "You don't have permission to restore user" +msgstr "" + +msgid "You don't have permission to view that ticket" +msgstr "" + +msgid "You forgot to include a filename" +msgstr "" + +#, c-format +msgid "You have %d more attempt." +msgid_plural "You have %d more attempts." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "You have %d:%.2d left." +msgstr "" + +msgid "You have already reached your assigned limit" +msgstr "" + +msgid "You have not added any files to the clipboard." +msgstr "" + +msgid "" +"You have not given the reseller any IP's. Unable to create an assigned IP " +"domain or any nameservers without any" +msgstr "" + +msgid "" +"You have not selected any Files. Please go back and select some before " +"restoring the backup." +msgstr "" + +msgid "" +"You have not selected any Users. Please go back and select some before " +"creating the backup." +msgstr "" + +msgid "You have not selected any domains" +msgstr "" + +msgid "" +"You have successfully issued a server reboot command. It may take a few " +"minutes for the system boot up and become live again." +msgstr "" + +#, c-format +msgid "" +"You have used %d%% of your disk usage, which is more than the allowed " +"threshold of %d%%." +msgstr "" + +msgid "You may need to press F5 to reload the logo" +msgstr "" + +msgid "You may not use an IP for a domain name" +msgstr "" + +msgid "You must enter a chmod value. eg: 755" +msgstr "" + +msgid "You must enter a folder 'name'. eg: images" +msgstr "" + +msgid "You must enter both password" +msgstr "" + +msgid "You must enter number, user, subject, priority, status and message" +msgstr "" + +msgid "You must enter the password in both fields" +msgstr "" + +msgid "You must enter user, subject, priority and message" +msgstr "" + +msgid "You must first create some packages" +msgstr "" + +msgid "You must first own an IP" +msgstr "" + +msgid "You must have at least one database to login to phpMyAdmin" +msgstr "" + +msgid "You must have more than 0 NS records or named may not start." +msgstr "" + +msgid "" +"You must provide 'required_hits' and 'required_hits_custom' if " +"'required_hits' is 'custom'" +msgstr "" + +msgid "You must provide a list name" +msgstr "" + +msgid "" +"You must provide a protected directory password prompt. eg: Member's Area" +msgstr "" + +msgid "You must provide a valid domain, ip, ns1 and ns2" +msgstr "" + +msgid "" +"You must provide a valid email address, oldpassword, password1 and password2" +msgstr "" + +msgid "" +"You must provide a valid ftp address, oldpassword, password1 and password2" +msgstr "" + +msgid "You must provide a valid ip" +msgstr "" + +msgid "You must provide a valid name and it must exist." +msgstr "" + +msgid "You must provide a valid name and value" +msgstr "" + +msgid "You must provide the passwd variable" +msgstr "" + +msgid "" +"You must select a nameserver ip pair (ns1.domain.com and ns2.domain.com)" +msgstr "" + +msgid "You must select at least one mailing list to delete" +msgstr "" + +msgid "You must select at least one mailing list to purge" +msgstr "" + +msgid "You must select exactly one key" +msgstr "" + +msgid "You must select something" +msgstr "" + +msgid "" +"You must use a number for the hour (0-23). You can only have a cron run once " +"per day. (You can make more than one cron)" +msgstr "" + +msgid "" +"You must use a number for the minute (0-59). You can only have a cron run " +"once per day. (You can make more than one cron)" +msgstr "" + +msgid "You must use a valid path" +msgstr "" + +#, c-format +msgid "You must wait at least %d minute between updates." +msgid_plural "You must wait at least %d minutes between updates." +msgstr[0] "" +msgstr[1] "" + +msgid "You must wait for the stats to be computed." +msgstr "" + +msgid "You need to specify a domain" +msgstr "" + +msgid "You require a database name" +msgstr "" + +msgid "You require a domain, anon, anonup and a message" +msgstr "" + +msgid "You require domain and passwd list to sync the accounts" +msgstr "" + +msgid "You require either the passwd or quota" +msgstr "" + +msgid "You require name, user, passwd and passwd2" +msgstr "" + +msgid "You require the name and user" +msgstr "" + +msgid "You require the name, user, passwd and passwd2" +msgstr "" + +msgid "" +"You require the source url path (eg: /redirect) and the destination url (eg: " +"www.redirect.com)" +msgstr "" + +msgid "You require user and domain to change a pop account" +msgstr "" + +msgid "You require user, domain and passwd to add a pop account" +msgstr "" + +msgid "You required a password" +msgstr "" + +msgid "You should be notified via the Message system when it is complete." +msgstr "" + +msgid "You will be notified via the Message System upon completion." +msgstr "" + +msgid "" +"You will be notified via the Message System when the process is complete" +msgstr "" + +msgid "You will receive a message when it's complete." +msgstr "" + +msgid "" +"You're using the login-as option, so use your own password. Not the User's " +"password." +msgstr "" + +#, c-format +msgid "Your Hash URL Login '%s' has been created" +msgstr "" + +msgid "Your IP will be blacklisted" +msgstr "" + +#, c-format +msgid "Your Login Key '%s' has been created" +msgstr "" + +#, c-format +msgid "Your Name has been changed to %s" +msgstr "" + +msgid "Your account" +msgstr "" + +#, c-format +msgid "Your account %s@%s has been setup. In your e-mail program, use" +msgstr "" + +msgid "Your account '|USERNAME|' has been suspended. Reason: '|REASON|'" +msgstr "" + +msgid "Your account for |domain| is now ready for use." +msgstr "" + +msgid "Your backups are now ready" +msgstr "" + +msgid "Your database has been setup. Use the following values:" +msgstr "" + +#, c-format +msgid "Your database name (%s) contains invalid characters (%s)." +msgstr "" + +#, c-format +msgid "" +"Your database username (%s) contains invalid characters (%s). MySQL account " +"will not be created on %s." +msgstr "" + +msgid "Your default domain has been set" +msgstr "" + +msgid "Your disk usage has been updated" +msgstr "" + +msgid "Your message has been saved" +msgstr "" + +msgid "Your message has been sent" +msgstr "" + +msgid "Your message is being sent in the background" +msgstr "" + +msgid "" +"Your message is empty. Users might appreciate knowing what they're getting." +msgstr "" + +msgid "Your password" +msgstr "" + +msgid "Your password is invalid" +msgstr "" + +msgid "" +"Your request for an update will begin in under a minute. You should be " +"notified via the Message system when it is complete" +msgstr "" + +msgid "Your request for an updated license file will begin in under a minute." +msgstr "" + +msgid "Your request has expired." +msgstr "" + +msgid "Your request will be executed within 1 minute" +msgstr "" + +msgid "" +"Your request will run in the background. Once completed, you'll be notified " +"in the Message System." +msgstr "" + +msgid "Your reseller account has reached its assigned limit" +msgstr "" + +msgid "Your reseller has reached their assigned limit" +msgstr "" + +msgid "Your subject contains invalid characters." +msgstr "" + +#, c-format +msgid "Your ticket number is %s." +msgstr "" + +msgid "Your usertype is too low to request these widgets" +msgstr "" + +msgid "Zone Keys are newer than the Zone Signinging." +msgstr "" + +msgid "Zone Reset" +msgstr "" + +msgid "Zone Signing has expired." +msgstr "" + +msgid "" +"Zone has not yet been signed. Ensure you first generate the keys and sign " +"it one before using this automated sign tool" +msgstr "" + +msgid "Zone is of type DNSSEC." +msgstr "" + +msgid "Zone keys generated" +msgstr "" + +msgid "Zone signed" +msgstr "" + +msgid "access hosts cannot be domains because skip_name_resolve=ON" +msgstr "" + +msgid "account ..." +msgstr "" + +msgid "adding" +msgstr "" + +msgid "allow_subdomain_docroot_override is disabled" +msgstr "" + +#, c-format +msgid "and %d User" +msgid_plural "and %d Users" +msgstr[0] "" +msgstr[1] "" + +msgid "at least" +msgstr "" + +msgid "at most" +msgstr "" + +msgid "can_dnssec is not enabled. Cannot sign the zone." +msgstr "" + +#, c-format +msgid "cannot fstatat %s: %s" +msgstr "" + +#, c-format +msgid "cannot unlinkat %s: %s" +msgstr "" + +msgid "catch is required" +msgstr "" + +#, c-format +msgid "cgroup error: %s" +msgstr "" + +msgid "cgroup is not enabled in your license" +msgstr "" + +msgid "cgroup is turned off in the directadmin.conf" +msgstr "" + +msgid "change" +msgstr "" + +msgid "contains" +msgstr "" + +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +msgid "day(s)" +msgstr "" + +msgid "days" +msgstr "" + +msgid "default user" +msgstr "" + +#, c-format +msgid "dnsprovider option '%s' contains invalid characters" +msgstr "" + +msgid "does not belong to you" +msgstr "" + +msgid "emails have just been sent by" +msgstr "" + +msgid "equals" +msgstr "" + +msgid "has been changed." +msgstr "" + +msgid "has been updated with the new ip" +msgstr "" + +msgid "hidden" +msgstr "" + +msgid "high_score must be in the range 1 to 99" +msgstr "" + +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +msgid "hours" +msgstr "" + +#, c-format +msgid "is an invalid email address. User %s will not be created" +msgstr "" + +msgid "is currently down" +msgstr "" + +msgid "is not a valid database name" +msgstr "" + +msgid "is not a valid username" +msgstr "" + +#, c-format +msgid "is_ip_in_mask_range:%s:%s: range '%s' must be a positive integer" +msgstr "" + +#, c-format +msgid "" +"is_ip_in_mask_range:%s:%s: range '%s' must be between 1 and 128, inclusive" +msgstr "" + +#, c-format +msgid "is_ip_in_mask_range:%s:%s: range does not have /" +msgstr "" + +msgid "json string" +msgstr "" + +msgid "license nresellers issue" +msgstr "" + +msgid "license nusers issue" +msgstr "" + +msgid "license vdomains issue" +msgstr "" + +#, c-format +msgid "lstat error: %s" +msgstr "" + +msgid "mail() line number" +msgstr "" + +msgid "message is empty. Please enter some text." +msgstr "" + +#, c-format +msgid "mime type (%s) for '%s' is not of type 'image/'" +msgstr "" + +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "minutes" +msgstr "" + +#, c-format +msgid "mkdir(%s) error: %s" +msgstr "" + +msgid "modify password" +msgstr "" + +msgid "modify privileges" +msgstr "" + +msgid "month" +msgid_plural "months" +msgstr[0] "" +msgstr[1] "" + +msgid "mysqldump error output:" +msgstr "" + +msgid "new_domain is not a valid domain" +msgstr "" + +msgid "newer than" +msgstr "" + +msgid "ns1 or ns2 are not valid nameservers" +msgstr "" + +msgid "of" +msgstr "" + +msgid "old_package or new_package are not valid package names" +msgstr "" + +msgid "older than" +msgstr "" + +#, c-format +msgid "older than %s days." +msgstr "" + +msgid "or" +msgstr "" + +msgid "or IPv6 (1:2:3:4:5:6:7:8) or IPv6 range (1:2:3:4:5:6:7:8-9)" +msgstr "" + +msgid "or select from" +msgstr "" + +msgid "php.ini override added" +msgstr "" + +#, c-format +msgid "php1_select and php2_select must be 0-%d" +msgstr "" + +msgid "" +"phpMyAdmin is missing direct_login option. Please re-install phpMyAdmin." +msgstr "" + +msgid "pop_disk_usage_cache is not enabled" +msgstr "" + +msgid "port" +msgstr "" + +msgid "redirect_url contains invalid characters" +msgstr "" + +msgid "removing" +msgstr "" + +msgid "reseller_can_set_email_limit=0 is set, thus you cannot set a limit" +msgstr "" + +msgid "retry" +msgstr "" + +msgid "routes must start with a [ character." +msgstr "" + +#, c-format +msgid "search length out of bounds: 2 <= '%zd' <= 128" +msgstr "" + +msgid "second" +msgid_plural "seconds" +msgstr[0] "" +msgstr[1] "" + +msgid "selected" +msgstr "" + +msgid "selected overrides removed from php.ini" +msgstr "" + +msgid "selected skipped rules removed" +msgstr "" + +msgid "selecting none includes all domains" +msgstr "" + +msgid "sent" +msgstr "" + +msgid "set Permission" +msgstr "" + +msgid "show_blocked_ips.sh output:" +msgstr "" + +msgid "starts with" +msgstr "" + +msgid "subject contains invalid characters." +msgstr "" + +#, c-format +msgid "subject_select != %d, but subject is not set. This shouldn't happen." +msgstr "" + +msgid "that is the server's hostname and you cannot use it" +msgstr "" + +msgid "the new domain name already exists on your system" +msgstr "" + +msgid "too many iterations" +msgstr "" + +msgid "too many tables" +msgstr "" + +msgid "unlimited" +msgstr "" + +msgid "user, passwd, passwd2 and type are required" +msgstr "" + +msgid "user.conf override" +msgstr "" + +msgid "user_brutecount disabled" +msgstr "" + +msgid "user_modify_pre.sh error" +msgstr "" + +msgid "value is required" +msgstr "" + +msgid "where=spamfolder has been disabled via show_main_spambox=0" +msgstr "" + +msgid "with the incorrect answer of" +msgstr "" + +msgid "your new password is" +msgstr "" + +msgid "your new quota is" +msgstr "" + +#, c-format +msgid "your new send limit is: %s" +msgstr "" + +msgid "" +"~/domains was missing, but we ran into an error while trying to re-create it" +msgstr "" + +msgid "Maximum allowed time range is %d day" +msgid_plural "Maximum allowed time range is %d days" +msgstr[0] "" +msgstr[1] "" + +msgid "Unable to parse %s, is it in %s format?" +msgstr "" + +msgid "Unable to read log files" +msgstr "" + +msgid "Your IP is blacklisted" +msgstr "" + +msgid "Unable to access script" +msgstr "" + +msgid "Unable to execute script" +msgstr "" diff --git a/update/data/lang/nl/LC_MESSAGES/internal.po b/update/data/lang/nl/LC_MESSAGES/internal.po new file mode 100644 index 0000000..87431e8 --- /dev/null +++ b/update/data/lang/nl/LC_MESSAGES/internal.po @@ -0,0 +1,8671 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: DirectAdmin 1.61.5\n" +"Report-Msgid-Bugs-To: support@directadmin.com\n" +"POT-Creation-Date: 2021-05-25 17:49-0600\n" +"PO-Revision-Date: 2021-05-17 13:07+0000\n" +"Last-Translator: Active8 \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6\n" + +#, c-format +msgid " - %d New Message Inside" +msgid_plural " - %d New Messages Inside" +msgstr[0] " - %d Nieuw bericht binnen" +msgstr[1] " - %d Nieuwe berichten binnen" + +msgid " / Day" +msgstr " / Dag" + +#, c-format +msgid " and %d User" +msgid_plural " and %d Users" +msgstr[0] " en %d Gebruiker" +msgstr[1] " en %d Gebruikers" + +msgid "# of Domains" +msgstr "# van Domeinen" + +msgid "# of IPs" +msgstr "# van IP adressen" + +msgid "# of MySQL DBs" +msgstr "# van MySQL databases" + +msgid "# of Resellers" +msgstr "# van Resellers" + +msgid "# of SubDomains" +msgstr "# van SubDomeinen" + +msgid "# of Users" +msgstr "# van Gebruikers" + +msgid "# of free IPs" +msgstr "# van beschikbare IP adressen" + +#, c-format +msgid "%d Days, %d Hours and %d Minutes" +msgstr "%d Dagen, %d Uren en %d Minuten" + +#, c-format +msgid "%d of %d Admin/Reseller accounts currently exist." +msgstr "%d van %d Admin/Reseller accounts bestaan al." + +#, c-format +msgid "%d of %d accounts currently exist." +msgstr "%d van %d accounts bestaan al." + +#, c-format +msgid "%d of %d domains currently exist." +msgstr "%d van %d domeinen bestaan al." + +#, c-format +msgid "%s %s %s did not exist" +msgstr "%s %s %s bestaat niet" + +#, c-format +msgid "" +"%s '%s' cannot be restored under '%s'. Restoring under the file's default: " +"'%s'" +msgstr "" +"%s '%s' kan niet worden hersteld onder '%s'. Herstellen onder de standaard " +"van het bestand: '%s'" + +#. /# %1$s - IP address +#. /# %2$s - Username +#, c-format +msgid "%s - user's '%s' current IP" +msgstr "%s - gebruiker's '%s' huidige IP" + +#, c-format +msgid "%s Day(s)" +msgstr "%s Dag(en)" + +#, c-format +msgid "" +"%s Edit the User Welcome Message to ensure the subject and message are set." +msgstr "" +"%s Bewerk het welkomstbericht van de gebruiker om ervoor te zorgen dat het " +"onderwerp en het bericht zijn ingesteld." + +#, c-format +msgid "%s License" +msgstr "%s Licentie" + +#, c-format +msgid "%s Month(s)" +msgstr "%s Maand(en)" + +#, c-format +msgid "%s Removed" +msgstr "%s Verwijderd" + +#, c-format +msgid "%s Week(s)" +msgstr "%s We(e)k(en)" + +#, c-format +msgid "%s account %s has just been created" +msgstr "%s account %s is nu aangemaakt" + +#, c-format +msgid "%s already exists" +msgstr "%s bestaat al" + +#, c-format +msgid "%s already exists on a remote server." +msgstr "%s bestaat al op een externe server." + +#, c-format +msgid "%s already exists on the server." +msgstr "%s bestaat al op de server." + +#, c-format +msgid "%s already exists. Pass overwrite=yes to force" +msgstr "%s bestaat al. Voer overschrijven=ja in om te forceren" + +#, c-format +msgid "%s appears to be a link. Aborting." +msgstr "%s lijkt een link te zijn. Afbreken." + +#, c-format +msgid "%s can now be shared." +msgstr "%s kan nu worden gedeeld." + +#, c-format +msgid "%s contains dangerous characters" +msgstr "%s bevat gevaarlijke karakters" + +#, c-format +msgid "%s could not be assigned, it must first be free and unassigned." +msgstr "" +"%s kon niet worden toegewezen, het moet eerst vrij en niet toegewezen zijn." + +#, c-format +msgid "" +"%s could not be freed, it must first have zero domain if it is shared, or " +"must be reserved." +msgstr "" +"%s kan niet worden vrijgemaakt, het moet eerst nul domeinen hebben als het " +"wordt gedeeld, of het moet gereserveerd zijn." + +#, c-format +msgid "%s could not be removed, you must free it first." +msgstr "%s kon niet verwijderd worden, je moet het eerst vrij maken." + +#, c-format +msgid "%s could not be shared, it must first be free" +msgstr "%s kon niet gedeeld worden, het moet eerst vrij zijn" + +#, c-format +msgid "%s deleted successfully." +msgstr "%s successvol verwijderd." + +#, c-format +msgid "%s does not exist" +msgstr "%s bestaat niet" + +#, c-format +msgid "%s does not have same ownership as %s" +msgstr "%s heeft niet dezelfde eigenaar als %s" + +#, c-format +msgid "%s has been blocked in %s to prevent further attempts on the account." +msgstr "" +"%s werd geblokeerd in %s dit om toekomstige aanvallen op dit acount te " +"voorkomen." + +#, c-format +msgid "%s has been copied to %s." +msgstr "%s is gekopieerd naar %s." + +#, c-format +msgid "%s has been removed from the list" +msgstr "%s is verwijderd uit de lijst" + +#, c-format +msgid "%s has been renamed to %s." +msgstr "%s is hernoemd naar %s." + +#, c-format +msgid "%s has been saved as %s." +msgstr "%s is opgeslagen als %s." + +#, c-format +msgid "%s is a directory, will not delete" +msgstr "%s is een map, wordt niet verwijderd" + +#, c-format +msgid "%s is a link" +msgstr "%s is een link" + +#, c-format +msgid "%s is hard or symbolic link" +msgstr "%s is een harde of symbolische link" + +#, fuzzy, c-format +#| msgid "%s is a link" +msgid "%s is missing" +msgstr "%s is een link" + +#, c-format +msgid "%s is not a directory" +msgstr "%s is geen map" + +#, c-format +msgid "%s is not a socket" +msgstr "%s is geen socket" + +#, c-format +msgid "%s is not a symlink" +msgstr "%s is geen symlink" + +#, c-format +msgid "%s is not a valid IP or range" +msgstr "%s is geen geldig IP adres of bereik" + +#, c-format +msgid "%s is not a valid access host" +msgstr "%s is geen geldige toegangs host" + +#, c-format +msgid "%s is not a valid database name" +msgstr "%s is geen geldige database naam" + +#, c-format +msgid "%s is not a valid file" +msgstr "%s is geen geldig bestand" + +#, c-format +msgid "%s is not a valid ip range. Use: 1.2.3.4-10" +msgstr "%s is geen geldige ip range. Gebruik: 1.2.3.4-10" + +#, c-format +msgid "%s is not a valid key, skipping" +msgstr "%s is geen geldige sleutel, wordt overgeslagen" + +#, c-format +msgid "%s is not chowned to %s which is a likely cause for extraction failure" +msgstr "" +"%s is niet chowned naar %s wat (waarschijnlijk) een fout heeft veroorzaakt " +"bij het uitpakken" + +#, c-format +msgid "%s is not enabled" +msgstr "%s is niet ingeschakeld" + +#, c-format +msgid "%s is not in your commands list" +msgstr "%s is niet in jouw commando's lijst" + +#, c-format +msgid "%s is not on your domain's IP list" +msgstr "%s staat niet in de IP lijst van jouw domein" + +#, c-format +msgid "%s is not one of the listed redirect types" +msgstr "%s is niet een van de vermelde omleid typen" + +#, c-format +msgid "%s is not owned by %s" +msgstr "%s is geen eigendom van %s" + +#, c-format +msgid "%s is not set to 'free' or is still assigned to a reseller" +msgstr "%s staat niet op 'vrij' of het is nog toegewezen aan een reseller" + +#, c-format +msgid "%s is now controlled by %s" +msgstr "%s wordt nu beheerd door %s" + +#, c-format +msgid "%s is now free" +msgstr "%s is nu beschikbaar" + +#, c-format +msgid "%s is now unassigned." +msgstr "%s is nu niet meer toegewezen." + +#, c-format +msgid "%s is now your default domain." +msgstr "%s is nu uw standaard domein." + +#, c-format +msgid "%s is out of range" +msgstr "%s is buiten bereik" + +#, c-format +msgid "" +"%s is reporting that IP %s has issued a password change request for user " +"'%s' without approval." +msgstr "" +"%s meldt dat IP %s zonder goedkeuring een verzoek om wachtwoordwijziging " +"heeft gedaan voor de gebruiker '%s'." + +#, c-format +msgid "%s is required for %s" +msgstr "%s is verplicht voor %s" + +#, c-format +msgid "%s must not be a symlink" +msgstr "%s mag geen symlink zijn" + +#, c-format +msgid "%s no longer has a Name Server Label." +msgstr "%s heeft niet langer een Naam Server label." + +#, c-format +msgid "%s not implemented" +msgstr "%s niet geïmplementeerd" + +#, c-format +msgid "%s records disabled at this level" +msgstr "%s records uitgeschakeld op dit niveau" + +#, c-format +msgid "%s value of '%s' is not in the home_override_list" +msgstr "%s waarde van '%s' is niet in de home_override_list" + +#, c-format +msgid "%s will now point to %s" +msgstr "%s zal nu doorverwijzen naar %s" + +#, c-format +msgid "%s's config files have been removed" +msgstr "De configuratiebestanden van %s zijn verwijderd" + +#, c-format +msgid "%s: lstat error on linnk value '%s': %s" +msgstr "%s: lstat fout op linnk waarde '%s':%s" + +#, c-format +msgid "%s: readlinke error: %s" +msgstr "%s: readlinke fout: %s" + +#, c-format +msgid "%s=%s requires nginx_proxy=1 and the %s Pro-Pack" +msgstr "%s=%s vereist nginx_proxy=1 en de %s Pro-Pack" + +#. /# %1$s - CPUQuota +#. /# %1$s - 200% +#. /# %1$s - percent +#, c-format +msgid "%s='%s' is not a valid %s type" +msgstr "%s='%s' is geen geldig %s type" + +#, c-format +msgid "%sClick Here%s to learn how to enable it" +msgstr "%sKlik Hier%s om te leren hoe je het inschakeld" + +#, c-format +msgid "%sClick Here%s to view the local raw zone data" +msgstr "%sKlik hier%s om de lokale ruwe zone gegevens te bekijken" + +#, c-format +msgid "%sSave Increase%s" +msgstr "%sVerhoging Opslaan%s" + +#, c-format +msgid "%sTemporary Bandwidth Increase" +msgstr "%sTijdelijke Bandbreedte Verhoging" + +#, c-format +msgid "%sYour IP will be blacklisted" +msgstr "%s Uw IP wordt op de zwarte lijst gezet" + +#, c-format +msgid "'%s' does not exist" +msgstr "'%s' bestaat niet" + +#, c-format +msgid "'%s' does not exist\n" +msgstr "'%s' bestaat niet\n" + +#, c-format +msgid "'%s' does not start with '%s'\n" +msgstr "'%s' start niet met '%s'\n" + +#, c-format +msgid "'%s' has been set to '%s'" +msgstr "'%s' is ingesteld op '%s'" + +#, c-format +msgid "'%s' is a forbidden package name." +msgstr "'%s' is een verboden pakket naam." + +#, c-format +msgid "'%s' is not a valid css hex color" +msgstr "'%s' is geen geldige CSS hex kleur" + +#, c-format +msgid "'%s' is not assigned to your Reseller account." +msgstr "'%s' is niet toegewezen aan uw Reseller account." + +#, c-format +msgid "'%s' is not enabled in your license" +msgstr "'%s' is niet ingeschakeld in jouw licentie" + +#, c-format +msgid "'%s' is not on your list" +msgstr "'%s' is niet in jouw lijst" + +#, c-format +msgid "'%s' is required" +msgstr "'%s' is vereist" + +#, c-format +msgid "'%s' must be '%s' or '%s'" +msgstr "'%s' moet '%s' of '%s' zijn" + +msgid "'import' does not appear to be base 64 encoded" +msgstr "'import' lijkt niet base64 gecodeerd te zijn" + +msgid "'when' should be all, newer or older" +msgstr "'wanneer' moet alle, nieuwer of ouder zijn" + +#, c-format +msgid "(%d) The following hard links have been found under User %s:" +msgstr "(%d) De volgende harde links zijn gevonden onder Gebruiker %s:" + +msgid "* irretrievable *" +msgstr "* onherstelbaar *" + +msgid "*** Stopped ***" +msgstr "*** Gestopt ***" + +msgid "-- None Available --" +msgstr "-- Niet beschikbaar --" + +msgid "-- Reason:" +msgstr "-- Reden:" + +msgid "-- Select IP" +msgstr "-- Selecteer IP" + +msgid "-- Select Package" +msgstr "-- Selecteer Pakket" + +msgid "-- any time --" +msgstr "-- elk moment --" + +msgid "-- anything --" +msgstr "-- alles--" + +msgid "1k-blocks" +msgstr "1k-blokken" + +#, c-format +msgid "A %s record already exists with that name" +msgstr "Er bestaat al een %s record met die naam" + +msgid "A 'free' IP can only be assigned to 1 User" +msgstr "Een 'beschikbaar' IP kan slechts aan 1 gebruiker worden toegewezen" + +msgid "A Record Type is required: A, NS, MX, CNAME, PTR, or TXT" +msgstr "Een Record Type is vereist: A, NS, MX, CNAME, PTR of TXT" + +msgid "A Reseller can only control level=user" +msgstr "Een Reseller kan alleen niveau=gebruikers beheren" + +msgid "A Reseller cannot control other equal or higher account levels" +msgstr "" +"Een Reseller heeft geen controle over andere gelijke of hogere account " +"niveaus" + +msgid "A file is required" +msgstr "Een bestand is vereist" + +msgid "A forwarder already exists with that name" +msgstr "Er bestaat al een forwarder met die naam" + +msgid "A full domain/zone with this name already exists." +msgstr "Er bestaat al een volledig domein/zone met deze naam." + +msgid "A key with that name already exists" +msgstr "Een sleutel met die naam bestaat al" + +msgid "A list alias already exists with that name" +msgstr "Er bestaat al een alias lijst met die naam" + +msgid "A message for that user already exists" +msgstr "Er bestaat al een bericht voor die gebruiker" + +msgid "A pop account already exists with that name" +msgstr "Een pop account bestaat al met deze naam" + +msgid "A skin name is required" +msgstr "Een thema naam is vereist" + +msgid "" +"A subdomain with the same name already exists on the system under another " +"domain." +msgstr "" +"Een subdomein met dezelfde naam bestaat al op het systeem onder een ander " +"domein." + +msgid "Abuse" +msgstr "Misbruik" + +msgid "Access Hosts" +msgstr "Toegangs Hosts" + +msgid "Access host has been added" +msgstr "Toegangs host is toegevoegd" + +msgid "Access hosts have been removed" +msgstr "Toegangs host is verwijderd" + +msgid "Account" +msgstr "Account" + +#, c-format +msgid "Account %s has just created %s %s from IP %s" +msgstr "Account %s is aangemaakt %s %s van IP %s" + +#, c-format +msgid "Account %s skipped due to suspension" +msgstr "Account %s is overgeslagen wegens opschorting" + +#, c-format +msgid "Account %s was suspended by an Admin and you only have Reseller access." +msgstr "" +"Account %s is opgeschort door een Admin en u heeft alleen toegang als " +"Reseller." + +#, c-format +msgid "Account %s with domain %s has an empty caroot cert" +msgstr "Account %s met domein %s heeft een leeg caroot certificaat" + +msgid "Account created" +msgstr "Account is aangemaakt" + +#, c-format +msgid "Account created in directory '%s'" +msgstr "Account is aangemaakt in map '%s'" + +msgid "Account has been unblocked from BlockCracking" +msgstr "Account is gedeblokkeerd voor BlockCracking" + +msgid "Account is not a Reseller" +msgstr "Account is geen Reseller" + +msgid "Account is suspended" +msgstr "Account is opgeschort" + +msgid "Account password changed" +msgstr "Account wachtwoord gewijzigd" + +#, c-format +msgid "Accounts restored to %s partition." +msgstr "Accounts hersteld naar %s partitie." + +msgid "Action" +msgstr "Actie" + +msgid "Activate" +msgstr "Activeren" + +msgid "Active" +msgstr "Actief" + +msgid "Add" +msgstr "Toevoegen" + +#, c-format +msgid "Add %s" +msgstr "Voeg %s toe" + +msgid "Add Codes" +msgstr "Code Toevoegen" + +msgid "Add Host" +msgstr "Host toevoegen" + +msgid "Add Override" +msgstr "Overschrijving Toevoegen" + +msgid "Add new Security Question" +msgstr "Nieuwe beveiligingsvraag toevoegen" + +msgid "Add the new NS records first." +msgstr "Voeg eerst de nieuwe NS records toe." + +msgid "Add to Apache" +msgstr "Toevoegen aan Apache" + +msgid "Add to Clipboard" +msgstr "Toevoegen aan Klembord" + +msgid "Add to DNS" +msgstr "Toevoegen aan de DNS" + +#, c-format +msgid "Added ns1 as %s and ns2 as %s" +msgstr "ns1 als %s en ns2 als %s toegevoegd" + +msgid "Additional" +msgstr "Extra" + +msgid "Admin" +msgstr "Admin" + +msgid "Admin Backup/Transfer" +msgstr "Admin Backup/Overdracht" + +msgid "Admin Certificate Management" +msgstr "Admin Certificaat Beheer" + +msgid "Admin DNS Administration" +msgstr "Admin DNS Administratie" + +msgid "Admin File Editor" +msgstr "Admin Bestands Editor" + +msgid "Admin History" +msgstr "Admin Geschiedenis" + +msgid "Admin IP Management" +msgstr "Admin IP Beheer" + +msgid "Admin Plugins" +msgstr "Admin Plugins" + +msgid "Admin Resource Limits" +msgstr "Admin Bronnen Limieten" + +msgid "Admin SSL" +msgstr "Admin SSL" + +msgid "Admin SSL is not enabled" +msgstr "Admin SSH is niet ingeschakeld" + +msgid "Admin Settings" +msgstr "Admin Instellingen" + +msgid "Admin Statistics" +msgstr "Admin Statistieken" + +msgid "Advanced Search" +msgstr "Geavanceerd Zoeken" + +msgid "" +"After many tries, we were unable to create a unique login name. This is " +"improbable." +msgstr "" +"Na vele pogingen konden we geen unieke aanmeldings naam maken. Dit is hoogst " +"onwaarschijnlijk." + +msgid "Afternoon" +msgstr "Namiddag" + +#, c-format +msgid "Alias %s@%s -> %s has been created" +msgstr "Alias %s@%s -> %s is aangemaakt" + +msgid "All" +msgstr "Alle" + +msgid "All Data" +msgstr "Alle Data" + +msgid "All E-Mail" +msgstr "Alle E-Mail" + +msgid "All Months (cgi)" +msgstr "Alle Maanden (cgi)" + +msgid "All Resellers" +msgstr "Alle Resellers" + +msgid "All User Cron Jobs" +msgstr "Alle Cron Taken van Gebruiker" + +msgid "All Users" +msgstr "Alle Gebruikers" + +msgid "All Users Except Selected Users" +msgstr "Alle Gebruikers behalve geselecteerd gebruikers" + +msgid "All Users Except:" +msgstr "Alle Gebruikers behalve:" + +msgid "All Users deleted successfully" +msgstr "Alle Gebruikers zijn verwijderd" + +msgid "All databases removed succesfully" +msgstr "Alle databasen zijn succesvol verwijderd" + +msgid "All of Your Users" +msgstr "Al uw gebruikers" + +msgid "All privileges have been set" +msgstr "Alle rechten zijn ingesteld" + +msgid "All route steps except the last are required to have a 'match'" +msgstr "" +"Alle route stappen behalve de laatste zijn vereist om een 'match' te hebben" + +msgid "All selected Users have been suspended" +msgstr "Alle geselecteerde gebruikers zijn geschorst" + +msgid "All selected Users have been unsuspended" +msgstr "Alle geselecteerde gebruikers zijn vrijgegeven" + +msgid "All specified forwarders removed" +msgstr "Alle opgegeven forwarders zijn verwijderd" + +msgid "Allocated" +msgstr "Toegewezen" + +msgid "Allow" +msgstr "Toestaan" + +msgid "Allow Overselling" +msgstr "Oververkoop toestaan" + +#, c-format +msgid "Allowance threshold is 0%%" +msgstr "Toeslag drempel is 0%%" + +#, c-format +msgid "Allowing that much %s would put you over your limit of %s" +msgstr "Als je zoveel %s toestaat, zul je de limiet van %s overschrijden" + +msgid "Already Exists" +msgstr "Bestaat Al" + +msgid "" +"Although a backup error has occurred, the upload of valid backups would have " +"still been attempted to" +msgstr "" +"Hoewel er een backup fout is opgetreden, is er toch geprobeerd om de rest " +"van de (volledige) backups te uploaden naar" + +msgid "An Error Occurred" +msgstr "Een fout is opgetreden" + +msgid "An Error has occurred" +msgstr "Er is een fout opgetreden" + +msgid "An auto responder already exists with that name" +msgstr "Er bestaat al een auto responder met die naam" + +msgid "An autoresponder with that name already exists" +msgstr "Er bestaat al een autoresponder met die naam" + +msgid "An error has occurred" +msgstr "Er is een fout opgetreden" + +msgid "An error has occurred while rewriting the Nginx Unit config" +msgstr "" +"Er is een fout opgetreden tijdens het herschrijven van de configuratie van " +"de Nginx Unit" + +msgid "An error occured during extraction" +msgstr "Er is een fout opgetreden tijdens het uitpakken" + +msgid "An error occured while creating the compressed file" +msgstr "Er is een fout opgetreden bij het maken van het gecomprimeerde bestand" + +msgid "An error occured while resetting the file ownership" +msgstr "Er is een fout opgetreden bij het resetten van het bestands eigendom" + +msgid "An error occurred during the backup" +msgstr "Er is een fout opgetreden tijdens de back-up" + +msgid "An error occurred listing the databases:" +msgstr "Er is een fout opgetreden bij het weergeven van de databases:" + +msgid "An error occurred when unblocking the account" +msgstr "Er is een fout opgetreden bij het deblokkeren van het account" + +msgid "An error occurred while applying settings to your Users" +msgstr "" +"Er is een fout opgetreden bij het toepassen van instellingen op uw Gebruikers" + +msgid "An error occurred while attempting to copy the file" +msgstr "Er is een fout opgetreden bij het kopiëren van het bestand" + +msgid "An error occurred while attempting to create the directory" +msgstr "Er is een fout opgetreden bij het maken van het map" + +msgid "An error occurred while attempting to protect the directory" +msgstr "Er is een fout opgetreden bij het beveiligen van het map" + +msgid "An error occurred while attempting to rename the file" +msgstr "Er is een fout opgetreden bij het hernoemen van het bestand" + +msgid "An error occurred while attempting to restore the file" +msgstr "Er is een fout opgetreden bij het herstellen van het bestand" + +msgid "Anonymous Ftp" +msgstr "Anonieme Ftp" + +msgid "Answer" +msgstr "Antwoord" + +msgid "Apache" +msgstr "Apache" + +msgid "Apache Handlers" +msgstr "Apache Handlers" + +msgid "Apache config file re-written with new ip" +msgstr "Apache configuratie bestand is herschreven met nieuw ip" + +msgid "Apparent Size" +msgstr "Schijnbare Grootte" + +msgid "Appears as the first item within the section." +msgstr "Verschijnt als de eerste item in de -sectie." + +msgid "Appears at the very top of the template, before setting the variables." +msgstr "" +"Wordt boven in het sjabloon weergegeven, voordat de variabelen worden " +"ingesteld." + +msgid "" +"Appears in ALL context{} sections, used for password protected directories." +msgstr "" +"Verschijnt in ALLE context {} secties, wordt gebruikt voor met een " +"wachtwoord beveiligde mappen." + +msgid "Appears in phpIniOverride{} section." +msgstr "Verschijnt in phpIniOverride {} sectie." + +msgid "Appears in rewrite{} section." +msgstr "Verschijnt in de sectie herschrijven{}." + +msgid "Appears in scripthandler{} section." +msgstr "Verschijnt in de sectie scripthandler{}." + +msgid "Appears in vhssl{} section." +msgstr "Verschijnt in de sectie vhssl{}." + +msgid "Appears just before the section." +msgstr "Wordt weergegeven vlak voor de sectie." + +msgid "Apply to All Users" +msgstr "Toepassen op alle Gebruikers" + +msgid "Apply to Me" +msgstr "Toepassen op Mij" + +msgid "Apply to existing Domains" +msgstr "Toepassen op bestaande domeinen" + +msgid "Apr" +msgstr "Apr" + +msgid "Archive Size" +msgstr "Archief Grootte" + +msgid "Archives purged" +msgstr "Archieven opgeschoond" + +msgid "Are you sure you want to Delete the selected accounts?" +msgstr "Weet u zeker dat u de geselecteerde accounts wilt verwijderen?" + +msgid "Are you sure you want to Delete the selected databases?" +msgstr "Weet u zeker dat u de geselecteerde databases wilt verwijderen?" + +msgid "Are you sure you want to Delete the selected keys?" +msgstr "Weet u zeker dat u de geselecteerde sleutels wilt verwijderen?" + +msgid "Are you sure you want to delete the selected zones?" +msgstr "Weet u zeker dat u de geselecteerde zones wilt verwijderen?" + +msgid "Are you sure you want to delete these files?" +msgstr "Weet u zeker dat u deze bestanden wilt verwijderen?" + +msgid "Are you sure you want to kill these processes?" +msgstr "Weet u zeker dat u deze processen wilt beëindigen?" + +msgid "Ascending" +msgstr "Oplopend" + +msgid "Assign to" +msgstr "Toewijzen aan" + +msgid "Assigned" +msgstr "Toegewezen" + +msgid "At least one crediential is required." +msgstr "Er is minimaal één identificatie vereist." + +#, c-format +msgid "Attempting to copy %s onto itself, file skipped." +msgstr "Poging om %s naar zichzelf te kopiëren, bestand wordt overgeslagen." + +#, c-format +msgid "Attempting to move %s onto itself, file skipped." +msgstr "Poging om %s naar zichzelf te verplaatsen, bestand wordt overgeslagen." + +msgid "Attempts" +msgstr "Pogingen" + +msgid "Aug" +msgstr "Aug" + +msgid "Auth::logoutCreator error" +msgstr "Auth::logoutCreator fout" + +#, c-format +msgid "" +"Authenication::get_unique_login_hash: could not generate a unique login has " +"after %s attempts" +msgstr "" +"Authenication::get_unique_login_hash: kon geen unieke aanmelding genereren " +"na %s pogingen" + +msgid "Authentication" +msgstr "Authenticatie" + +msgid "Authorize" +msgstr "Geef Toestemming" + +msgid "Auto" +msgstr "Automatisch" + +msgid "Auto media selection active." +msgstr "Automatische mediaselectie actief." + +msgid "Auto+Confirm" +msgstr "Auto + Bevestigen" + +msgid "AutoResponders" +msgstr "AutoResponders" + +#, c-format +msgid "Automated certificate renewal for %s has succeeded" +msgstr "Geautomatiseerde certificaat vernieuwing voor %s is geslaagd" + +msgid "Autoreply" +msgstr "Automatisch antwoorden" + +msgid "Autoresponder" +msgstr "Autoresponder" + +msgid "Autoresponder updated" +msgstr "Autoresponder bijgewerkt" + +msgid "Autoresponders" +msgstr "Autoresponders" + +msgid "Available" +msgstr "Beschikbaar" + +msgid "Avoid use of trailers." +msgstr "Gebruik geen trailers." + +msgid "Awstats" +msgstr "Awstats" + +msgid "Awstats ..." +msgstr "Awstats ..." + +msgid "Awstats setting changed" +msgstr "Awstats instelling gewijzigd" + +msgctxt "readable size" +msgid "B" +msgstr "B" + +msgid "Back" +msgstr "Terug" + +msgid "Backing up Databases" +msgstr "Een backup maken van databases" + +msgid "Backing up E-Mail Data" +msgstr "Een backup maken van e-mail gegevens" + +msgid "Backing up E-Mail Settings" +msgstr "Een backup maken van e-mail instellingen" + +msgid "Backing up FTP" +msgstr "Een backup van FTP maken" + +msgid "Backing up User Configs" +msgstr "Backup maken van Gebruikers Configuraties" + +msgid "Backing up User Data" +msgstr "Backup maken van gebruikers gegevens" + +msgid "Backing up extra E-Mail items" +msgstr "Backup maken van extra e-mail items" + +msgid "Backup" +msgstr "Backup" + +#, c-format +msgid "Backup %d is not currently running." +msgstr "Backup %d is momenteel niet actief." + +#, c-format +msgid "Backup Abort (%d): A hard link was found under User %s's path" +msgstr "" +"Backup Afbreken (%d): er is een harde koppeling gevonden in het pad van de " +"Gebruiker %s" + +#, c-format +msgid "Backup Error with Nginx Unit: %s" +msgstr "Backup Fout met Nginx Unit:%s" + +msgid "Backup Halted" +msgstr "Backup Gestopt" + +msgid "Backup ID" +msgstr "Backup ID" + +msgid "Backup creation added to queue" +msgstr "Backup maken is toegevoegd aan de wachtrij" + +#, c-format +msgid "Backup path %s has been created." +msgstr "Backup pad %s is gemaakt." + +msgid "Backups added to Queue" +msgstr "Backups zijn toegevoegd aan de wachtrij" + +msgid "Bad User usertype" +msgstr "Ongewenste Gebruiker gebruikerstype" + +msgid "Bandwidth" +msgstr "Bandbreedte" + +msgid "Bandwidth (MB)" +msgstr "Bandbreedte (MB)" + +msgid "Bandwidth Breakdown" +msgstr "Bandbreedte Analyse" + +msgid "Bandwidth Usage" +msgstr "Bandbreedte Gebruik" + +msgid "Be sure to re-scan the QR code, as all old codes become invalid." +msgstr "" +"Zorg ervoor dat u de QR code opnieuw scant, omdat alle oude codes ongeldig " +"worden." + +msgid "" +"Because the script meets the required criteria, it has been disabled via " +"chmod to 0." +msgstr "" +"Omdat het script aan de vereiste criteria voldoet, is het uitgeschakeld via " +"chmod naar 0." + +msgid "" +"Before Unblocking, ensure that any compromised scripts have been removed or " +"fixed." +msgstr "" +"Voordat u de blokkering opheft, moet u ervoor zorgen dat gecompromitteerde " +"scripts zijn verwijderd of hersteld." + +msgid "Billing Issue" +msgstr "Facturering Probleem" + +#, c-format +msgid "Blank value: default, global limit of %d" +msgstr "Blanco waarde: standaard, globale limiet van %d" + +msgid "Block Usage" +msgstr "Blokkeer Gebruik" + +msgid "BlockCracker Blocked Paths" +msgstr "BlockCracker Geblokkeerde Paden" + +msgid "Blocked" +msgstr "Geblokkeerd" + +msgid "Both DNS Control and ttl override must be enabled" +msgstr "Zowel DNS-beheer als ttl overschrijven moeten zijn ingeschakeld" + +msgid "Brute Force Monitor" +msgstr "Brute Force Monitor" + +msgid "Brute-Force Attack detected in service log" +msgstr "Brute-Force Aanval is gedetecteerd in het service logboek" + +msgid "CA Certificate is Invalid" +msgstr "CA Certificaat is ongeldig" + +msgid "CA Certificate is ok. Your site should be secure within a few minutes." +msgstr "" +"CA Certificaat is ok. Uw site zou binnen een paar minuten beveiligd moeten " +"zijn." + +msgid "CC Address" +msgstr "Kopie e-mail adres" + +msgid "CGI-Bin" +msgstr "CGI-Bin" + +msgid "CPU Quota" +msgstr "CPU Quotum" + +msgid "Can use Server IP" +msgstr "Kan gebruik maken van het server IP" + +msgid "Can't get file lock on" +msgstr "Kan bestandsvergrendeling niet inschakelen" + +#, c-format +msgid "Can't open file %s for reading" +msgstr "Kan bestand %s niet openen om te lezen" + +#, c-format +msgid "Can't reopen file %s for appending" +msgstr "Kan bestand %s niet opnieuw openen om toe te voegen" + +msgid "Cancel" +msgstr "Annuleren" + +msgid "Cannot Add A Record" +msgstr "Kan geen A vermelding toevoegen" + +msgid "Cannot Add CNAME Record" +msgstr "Kan geen CNAME vermelding toevoegen" + +msgid "Cannot Add Record" +msgstr "Kan geen vermelding toevoegen" + +msgid "Cannot Create Account" +msgstr "Kan geen account aanmaken" + +msgid "Cannot Create Another Autoresponder" +msgstr "Kan geen andere autoresponder aanmaken" + +msgid "Cannot Create Another Database" +msgstr "Kan geen andere database aanmaken" + +msgid "Cannot Create Another Domain" +msgstr "Kan geen ander domein aanmaken" + +msgid "Cannot Create Another Domain Pointer" +msgstr "Kan geen andere Domein Pointer aanmaken" + +msgid "Cannot Create Another FTP Account" +msgstr "Kan geen ander FTP-account aanmaken" + +msgid "Cannot Create Another Forwarder" +msgstr "Kan geen nieuwe Forwarder maken" + +msgid "Cannot Create Another Mailing List" +msgstr "Kan geen nieuwe mailing lijst aanmaken" + +msgid "Cannot Create Another POP Account" +msgstr "Kan geen ander POP account aanmaken" + +msgid "Cannot Create Another Subdomain" +msgstr "Kan geen ander subdomein aanmaken" + +msgid "Cannot Create Autoresponder" +msgstr "Kan geen Autoresponder aanmaken" + +msgid "Cannot Create Domain" +msgstr "Kan geen domein aanmaken" + +msgid "Cannot Create Vacation Message" +msgstr "Kan geen vakantiebericht maken" + +msgid "Cannot Create a Message" +msgstr "Kan geen bericht maken" + +msgid "Cannot Execute Command" +msgstr "Kan opdracht niet uitvoeren" + +msgid "Cannot Execute Your Request" +msgstr "Uw verzoek kan niet worden uitgevoerd" + +msgid "Cannot Modify Key" +msgstr "Kan sleutel niet wijzigen" + +msgid "Cannot Modify User" +msgstr "Kan gebruiker niet wijzigen" + +msgid "Cannot View Domain Settings" +msgstr "Kan domeininstellingen niet bekijken" + +#, c-format +msgid "Cannot add pointer %s, you have reached your limit of %s" +msgstr "Kan pointer %s niet toevoegen, u heeft uw limiet van %s bereikt" + +#, fuzzy +#| msgid "Cannot manage zone" +msgid "Cannot be an object" +msgstr "Kan zone niet beheren" + +msgid "Cannot change the ip" +msgstr "Kan het ip niet wijzigen" + +msgid "" +"Cannot change the password for a system account. Login to the control panel " +"to do that." +msgstr "" +"Kan het wachtwoord voor een systeemaccount niet wijzigen. Meld u aan op het " +"controle paneel om dit te doen." + +msgid "" +"Cannot change the password for this email account. The account is currently " +"on a suspended domain." +msgstr "" +"Kan het wachtwoord voor dit e-mailaccount niet wijzigen. Het account bevindt " +"zich momenteel op een opgeschort domein." + +msgid "Cannot change your email" +msgstr "Je e-mailadres kan niet worden gewijzigd" + +msgid "Cannot change your name" +msgstr "Je naam kan niet worden gewijzigd" + +msgid "Cannot change your password" +msgstr "Je wachtwoord kan niet worden gewijzigd" + +msgid "Cannot create User Backup" +msgstr "Kan geen Gebruikers Backup maken" + +msgid "Cannot create domain" +msgstr "Kan domein niet maken" + +msgid "Cannot create that domain" +msgstr "Kan dat domein niet maken" + +msgid "Cannot create user using those settings" +msgstr "Kan geen gebruiker maken met deze instellingen" + +msgid "Cannot delete records" +msgstr "Kan geen records verwijderen" + +msgid "Cannot delete the skin you're currently using." +msgstr "Kan het thema dat je momenteel gebruikt niet verwijderen." + +#, fuzzy, c-format +#| msgid "Cannot Create Another Subdomain" +msgid "Cannot determine owner of subdomain '%s'" +msgstr "Kan geen ander subdomein aanmaken" + +msgid "Cannot execute your request" +msgstr "Uw verzoek kan niet worden uitgevoerd" + +#, c-format +msgid "Cannot find %s" +msgstr "Kan %s niet vinden" + +#, c-format +msgid "Cannot find %s in list" +msgstr "Kan %s niet vinden in de lijst" + +#, c-format +msgid "Cannot find %s in name" +msgstr "Kan %s niet vinden in naam" + +#, c-format +msgid "Cannot find %s to convert %s" +msgstr "Kan %s niet vinden om naar %s te converteren" + +#, c-format +msgid "Cannot find %s, skipping." +msgstr "Kan %s niet vinden, wordt overgeslagen." + +#, c-format +msgid "Cannot find %s. Ensure the domain exists and is not suspended" +msgstr "" +"Kan %s niet vinden. Zorg ervoor dat het domein bestaat en niet is opgeschort" + +#, c-format +msgid "Cannot find '%s'" +msgstr "Kan '%s' niet vinden" + +#, c-format +msgid "Cannot find '%s' in the list of allowed values for %s" +msgstr "Kan '%s' niet vinden in de lijst met toegestane waarden voor %s" + +#, c-format +msgid "Cannot find '%s' in the template" +msgstr "Kan '%s' niet vinden in het sjabloon" + +msgid "Cannot find IP" +msgstr "Kan IP niet vinden" + +#, c-format +msgid "Cannot find Security Question ID %d in the User list" +msgstr "Kan beveiligingsvraag ID %d niet vinden in de gebruikerslijst" + +#, c-format +msgid "Cannot find User '%s'" +msgstr "Kan de gebruiker '%s' niet vinden" + +msgid "Cannot find a valid system username in the domainowners file." +msgstr "" +"Kan geen geldige systeem gebruikersnaam vinden in het bestand met domein " +"eigenaren." + +msgid "Cannot find any SAN values in the certificate." +msgstr "Kan geen SAN waarden vinden in het certificaat." + +msgid "Cannot find any message subjects from clear_message_system_list" +msgstr "Kan geen berichtonderwerpen vinden van clear_message_system_list" + +msgid "Cannot find any security questions from security_questions.txt" +msgstr "Kan geen beveiligingsvragen vinden in security_questions.txt" + +#, c-format +msgid "Cannot find any tar.gz after converting from %s" +msgstr "Kan geen enkele tar.gz vinden na het converteren van %s" + +msgid "Cannot find domain in domain owners file" +msgstr "Kan domein niet vinden in bestand met domein eigenaren" + +msgid "Cannot find domain in the certificate." +msgstr "Kan domein niet vinden in het certificaat." + +#, c-format +msgid "Cannot find key value in %s" +msgstr "Kan sleutelwaarde niet vinden in %s" + +#, c-format +msgid "Cannot find logo file for token %s in skin %s" +msgstr "Kan logobestand voor token %s niet vinden in thema %s" + +#, c-format +msgid "Cannot find logo file for token %s=%s in skin %s" +msgstr "Kan logobestand voor token %s =%s niet vinden in thema %s" + +#, c-format +msgid "Cannot find plugin %s" +msgstr "Kan plug-in %s niet vinden" + +msgid "Cannot find show_blocked_ips.sh" +msgstr "Kan show_blocked_ips.sh niet vinden" + +msgid "Cannot find template_php_ini or domain_php_ini in json" +msgstr "Kan template_php_ini of domain_php_ini niet vinden in json" + +msgid "Cannot find that code. It's likely expired." +msgstr "Kan die code niet vinden. Hij is waarschijnlijk verlopen." + +msgid "Cannot find that domain in the domainowners file" +msgstr "Kan dat domein niet vinden in het bestand met de domeineigenaren" + +msgid "Cannot find that key id" +msgstr "Kan die sleutel ID niet vinden" + +msgid "Cannot find the account nor the forwarder" +msgstr "Kan het account of de forwarder niet vinden" + +msgid "Cannot find the letsencrypt.sh script" +msgstr "Kan het letsencrypt.sh script niet vinden" + +msgid "Cannot find the sql file after backup was run:" +msgstr "Kan het sql-bestand niet vinden nadat de backup is uitgevoerd:" + +#, c-format +msgid "Cannot find the user %s which should already exist" +msgstr "Kan gebruiker %s niet vinden die al zou moeten bestaan" + +#, c-format +msgid "Cannot get '%s' index from skin.conf" +msgstr "Kan de '%s' index niet ophalen van skin.conf" + +#, c-format +msgid "Cannot get mime-type for %s" +msgstr "Kan mime-type niet vinden voor %s" + +#, c-format +msgid "Cannot get the user list for database %s" +msgstr "Kan de gebruikerslijst voor database %s niet ophalen" + +msgid "Cannot have newline characters in subject" +msgstr "Het onderwerp mag geen tekens voor nieuwe regels bevatten" + +msgid "Cannot have unlimited E-Mail quotas" +msgstr "Kan geen onbeperkte e-mail quota hebben" + +msgid "Cannot load lang po" +msgstr "Kan taal po niet laden" + +msgid "Cannot load lang request" +msgstr "Kan taal verzoek niet laden" + +msgid "Cannot manage zone" +msgstr "Kan zone niet beheren" + +#, c-format +msgid "Cannot move a directory (%s) onto an existing file or directory (%s)" +msgstr "" +"Kan een map (%s) niet verplaatsen naar een bestaand bestand of map (%s)" + +msgid "Cannot open the password file to add the user" +msgstr "Kan het wachtwoordbestand niet openen om de gebruiker toe te voegen" + +msgid "Cannot open the password file to change the password" +msgstr "Kan het wachtwoordbestand niet openen om het wachtwoord te wijzigen" + +msgid "Cannot open the user password file for reading" +msgstr "Kan het gebruikers wachtwoord bestand niet openen om te lezen" + +msgid "Cannot read the numerical 'limit' (original -1 is still set)" +msgstr "" +"Kan de numerieke 'limiet' niet lezen (origineel -1 is nog steeds ingesteld)" + +msgid "Cannot rename a directory onto an existing file or directory" +msgstr "Kan een map niet hernoemen naar een bestaand bestand of map" + +msgid "Cannot resend welcome email" +msgstr "Kan welkomst e-mail niet opnieuw verzenden" + +msgid "Cannot resolve host value for license check" +msgstr "Kan host waarde voor licentie controle niet vinden" + +#, c-format +msgid "" +"Cannot restore the ftp account for %s. You have reached your limit (%s)." +msgstr "" +"Kan het ftp account voor %s niet herstellen. U heeft uw limiet bereikt.(%s)." + +msgid "Cannot set TTL" +msgstr "Kan TTL niet instellen" + +msgid "Cannot set default domain" +msgstr "Kan standaard domein niet instellen" + +msgid "Cannot stat the source file" +msgstr "Kan het bronbestand niet vastleggen" + +msgid "Cannot use the main account username" +msgstr "Kan de gebruikersnaam van het hoofdaccount niet gebruiken" + +msgid "Case Sensitive" +msgstr "Hoofdletter Gevoelig" + +#, c-format +msgid "Catch all is now set to %s" +msgstr "Catch all is nu ingesteld op %s" + +msgid "Catch-All E-Mail" +msgstr "Catch-All E-Mailadres" + +msgid "Catch-All Email" +msgstr "Catch-All E-mailadres" + +msgid "Catch-All Email has been disabled on this account" +msgstr "Catch-All Email is uitgeschakeld voor dit account" + +msgid "Catch-All email updated successfully" +msgstr "Catch-All e-mail is bijgewerkt" + +msgid "Catch-All is now set to fail" +msgstr "Catch-All is nu ingesteld om te verwerpen" + +msgid "Catch-All is now set to ignore wrong addresses" +msgstr "Catch-All is nu ingesteld om verkeerde adressen te negeren" + +msgid "Certificate" +msgstr "Certificaat" + +msgid "Certificate and Key Saved." +msgstr "Certificaat en sleutel is opgeslagen." + +msgid "Certificate is Invalid" +msgstr "Certificaat is ongeldig" + +msgid "Certificate is Self-Signed" +msgstr "Certificaat is zelf-ondertekend" + +msgid "Change Password" +msgstr "Wachtwoord wijzigen" + +msgid "Change the password to unblock it." +msgstr "Wijzig het wachtwoord om de blokkering op te heffen." + +#, c-format +msgid "Changed by IP: %s" +msgstr "Gewijzigd door IP: %s" + +msgid "Changes saved" +msgstr "Wijzigingen opgeslagen" + +msgid "Check" +msgstr "Controleer" + +msgid "Check has already been done recently. Try later." +msgstr "De controle is onlangs al gedaan. Probeer later." + +msgid "Check the error log for more information." +msgstr "Raadpleeg het logboek voor meer informatie." + +msgid "Check the time on both your server and your phone." +msgstr "Controleer de tijd van zowel uw server als uw telefoon." + +msgid "Check to see if the current software is valid" +msgstr "Controleer of de huidige software geldig is" + +#, c-format +msgid "Child user %s deleted" +msgstr "Child gebruiker %s is verwijderd" + +msgid "" +"Choose from: blacklist_usernames, blacklist_smtp_usernames, " +"blacklist_script_usernames" +msgstr "" +"Kies uit: blacklist_usernames, blacklist_smtp_usernames, " +"blacklist_script_usernames" + +msgid "City must only contain letters, spaces and/or periods" +msgstr "Plaats mag alleen letters, spaties en/of punten bevatten" + +msgid "Clean Forwarders" +msgstr "Wis Forwarders" + +#, c-format +msgid "Cleaning %s" +msgstr "Opschonen %s" + +msgid "Clear Customization" +msgstr "Aanpassingen Wissen" + +msgid "Clear Messages System" +msgstr "Berichten Systeem Opschonen" + +msgid "Clear NS" +msgstr "Wis NS" + +msgid "Clear Search Filter" +msgstr "Wis Zoek Filter" + +#, c-format +msgid "Click %sHERE%s to go back" +msgstr "Klik %sHIER%s om terug te gaan" + +#, c-format +msgid "Click %sHERE%s to return" +msgstr "Klik %sHIER%s om terug te keren" + +#, c-format +msgid "Click %sHERE%s to return to main page" +msgstr "Klik %sHIER%s om terug te keren naar de hoofdpagina" + +msgid "Click Here to Download the Latest Backup" +msgstr "Klik hier om de laatste backup versie te downloaden" + +msgid "Click here to close this window" +msgstr "Klik hier om dit venster te sluiten" + +msgid "Click here to enable SSL on the domain" +msgstr "Klik hier om SSL op het domein in te schakelen" + +msgid "Clipboard" +msgstr "Klembord" + +msgid "Close" +msgstr "Sluiten" + +msgid "Closed" +msgstr "Gesloten" + +msgid "Closed+Confirm" +msgstr "Gesloten + Bevestigen" + +msgid "Code" +msgstr "Code" + +msgid "Code does not match" +msgstr "Code komt niet overeen" + +#, c-format +msgid "Color %s (%s) is not from the list: %s" +msgstr "Kleur %s (%s) komt niet van de lijst: %s" + +msgid "Color has been customized" +msgstr "Kleur is aangepast" + +msgid "Column in" +msgstr "Kolom in" + +msgid "Command" +msgstr "Opdracht" + +msgid "Command Returned" +msgstr "Antwoord van de opdracht" + +msgid "Comment" +msgstr "Opmerking" + +msgid "Comments" +msgstr "Opmerkingen" + +msgid "Company must only contain letters, numbers, spaces, and/or periods" +msgstr "Bedrijf mag alleen letters, cijfers, spaties en / of punten bevatten" + +msgid "Compressed File Created" +msgstr "Gecomprimeerd bestand gemaakt" + +#, c-format +msgid "Compressing %s" +msgstr "%s Comprimeren" + +msgid "Confirm" +msgstr "Bevestig" + +#, c-format +msgid "Confirm results on the %sDirectAdmin Website%s" +msgstr "Bevestig de resultaten op de %sDirectAdmin Website%s" + +#, c-format +msgid "Connection error: %s" +msgstr "Verbindingsfout: %s" + +msgid "Continuing with the other files." +msgstr "Doorgaan met de andere bestanden." + +msgid "" +"Controlling widgets for accounts under your control requires an Admin or " +"Reseller login" +msgstr "" +"Voor het beheren van widgets voor accounts die u beheert, moet u zich " +"aanmelden als Admin of Reseller" + +msgid "Copy" +msgstr "Kopiëren" + +msgid "Copy Clipboard Files here" +msgstr "Kopieer hier de klembordbestanden" + +msgid "Copy the packages export data" +msgstr "Kopieer de exportgegevens van de pakketten" + +msgid "Copying Admin Data" +msgstr "Admin Gegevens Kopiëren" + +msgid "Copying Reseller Data" +msgstr "Reseller gegevens kopiëren" + +msgid "" +"Copying files has been disabled with the filemanager_disable_features option" +msgstr "" +"Het kopiëren van bestanden is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Copying unreadable data" +msgstr "Onleesbare gegevens kopiëren" + +msgid "Could not excute your request" +msgstr "Uw verzoek kan niet worden uitgevoerd" + +msgid "Could not execute your request" +msgstr "Uw verzoek kan niet worden uitgevoerd" + +#, c-format +msgid "Could not generate a random hash name after %d tries." +msgstr "Kan geen willekeurige hashnaam genereren na %d pogingen." + +#, c-format +msgid "Could not get rDNS for IP '%s'" +msgstr "Kan geen rDNS ophalen voor IP '%s'" + +msgid "Could not read tickets" +msgstr "Kan tickets niet lezen" + +msgid "Could not write tickets" +msgstr "Kan geen tickets schrijven" + +#, c-format +msgid "Couldn't find any IPs of any type to give User (requested ip=%s)." +msgstr "" +"Kon geen IP adressen van welk type dan ook vinden om aan de Gebruiker te " +"geven (aangevraagd ip =%s)." + +msgid "Couldn't find the 2nd part of the MX value, after the number" +msgstr "Kan het 2e deel van de MX-waarde niet vinden na het nummer" + +#, c-format +msgid "Couldn't read db file for %s. Unable to add ns1 and ns2 to it." +msgstr "" +"Kon het database bestand voor %s niet lezen. Kan ns1 en ns2 er niet aan " +"toevoegen." + +msgid "Count" +msgstr "Aantal" + +msgid "Counted" +msgstr "Geteld" + +msgid "Country code must be 2 letters" +msgstr "De landcode moet uit 2 letters bestaan" + +msgid "Create/Restore Backups" +msgstr "Backups Maken/Terugzetten" + +msgid "Created" +msgstr "Aangemaakt" + +msgid "" +"Creating directories has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Het aanmaken van mappen is uitgeschakeld met de optie " +"filemanager_disable_features" + +#, c-format +msgid "Creating that many %s would put you over your limit of %s" +msgstr "Door zoveel %s aan te maken, zou u uw limiet van %s overschrijden" + +msgid "Creating zip files is disabled" +msgstr "Het maken van zip bestanden is uitgeschakeld" + +msgid "Creator" +msgstr "Maker" + +msgid "Creator Duplicate" +msgstr "Maker Kopie" + +msgid "Cron Created" +msgstr "Cron Gemaakt" + +msgid "Cron E-Mail set" +msgstr "Cron E-mail ingesteld" + +msgid "Cron Job(s) Deleted" +msgstr "Cron Ta(a)k(en) verwijderd" + +msgid "Cron Jobs" +msgstr "Cron Taken" + +msgid "Cron Jobs Deleted" +msgstr "Cron Taken verwijderd" + +msgid "Cron Jobs Duplicated" +msgstr "Cron Taken Gedupliceerd" + +msgid "Cron Jobs will run in the background" +msgstr "Cron Taken worden op de achtergrond uitgevoerd" + +msgid "Cron Modified" +msgstr "Cron Gewijzigd" + +msgid "Cron job has been created" +msgstr "Cron taak is gemaakt" + +msgid "Current IPs" +msgstr "Huidige IP adressen" + +#, c-format +msgid "Current IPs Assigned to %s" +msgstr "Huidige IP's toegewezen aan %s" + +msgid "Current Protected Directories" +msgstr "Huidige Beveiligde Mappen" + +msgid "Current Usage" +msgstr "Huidige Verbruik" + +msgid "Custom" +msgstr "Aangepast" + +msgid "Custom Color" +msgstr "Aangepaste kleur" + +msgid "Custom HTTPD Configurations" +msgstr "Aangepaste HTTPD configuraties" + +msgid "Custom Question" +msgstr "Aangepaste Vraag" + +msgid "Custom Skin Logo uploaded" +msgstr "Aangepast thema logo geüpload" + +msgid "Custom Skin Logos are not enabled" +msgstr "Aangepaste thema logo's zijn niet ingeschakeld" + +msgid "Custom logo deleted" +msgstr "Aangepast logo verwijderd" + +msgid "Custom threshold must be a valid number. A decimal is allowed." +msgstr "" +"Aangepaste drempel moet een geldig getal zijn. Een decimaal is toegestaan." + +msgid "Customization Disabled" +msgstr "Aanpassing uitgeschakeld" + +msgid "Customization written" +msgstr "Aanpassingen doorgevoerd" + +msgid "Customize the skin" +msgstr "Pas het thema aan" + +msgid "DKIM disabled" +msgstr "DKIM uitgeschakeld" + +msgid "DKIM enabled" +msgstr "DKIM ingeschakeld" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Control" +msgstr "DNS Controle" + +msgid "DNS Management" +msgstr "DNS Beheer" + +msgid "DNSSEC Keys generated" +msgstr "DNSSEC sleutels gegenereerd" + +msgid "DNSSEC is not enabled" +msgstr "DNSSEC is niet ingeschakeld" + +msgid "DNSSSEC - DNS Security" +msgstr "DNSSEC - DNS Beveiliging" + +msgid "Database" +msgstr "Database" + +#, c-format +msgid "Database %s was removed successfully" +msgstr "Database %s is succesvol verwijderd" + +msgid "Database Created" +msgstr "Database aangemaakt" + +msgid "Database Disk Usage" +msgstr "Database Schijf Gebruik" + +msgid "Database has been successfully Restored" +msgstr "Database is succesvol hersteld" + +msgid "Database:" +msgstr "Database:" + +msgid "Databases" +msgstr "Databasen" + +msgid "Date" +msgstr "Datum" + +msgid "Date Added" +msgstr "Datum Toegevoegd" + +msgid "Date Blocked" +msgstr "Datum Geblokkeerd" + +msgid "Date Created" +msgstr "Datum Aangemaakt" + +msgid "Date Suspended" +msgstr "Datum Opgeschort" + +msgid "Day of Month" +msgstr "Dag van de Maand" + +msgid "Day of Week" +msgstr "Dag van de Week" + +msgid "Days must be a valid number." +msgstr "Dagen moeten een geldig getal zijn." + +msgid "Debug Guide" +msgstr "Foutopsporings Gids" + +msgid "Dec" +msgstr "Dec" + +msgid "Decending" +msgstr "Aflopend" + +#, c-format +msgid "Decryption of %s has failed" +msgstr "Decodering van %s is mislukt" + +msgid "Default" +msgstr "Standaard" + +msgid "Delete" +msgstr "Verwijderen" + +msgid "Delete Extension" +msgstr "Verwijder Extensie" + +msgid "Delete Handler" +msgstr "Verwijder Handler" + +msgid "Delete MimeType" +msgstr "Verwijder MimeType" + +msgid "Delete Selected" +msgstr "Verwijder Geselecteerde" + +msgid "Delete the DNSSEC keys and use a non-signed zone" +msgstr "Verwijder de DNSSEC sleutels en gebruik een niet-ondertekende zone" + +msgid "Delete the following domains:" +msgstr "Verwijder de volgende domeinen:" + +msgid "Delete the following users" +msgstr "Verwijder de volgende gebruikers" + +msgid "Delete web data" +msgstr "Web gegevens verwijderen" + +msgid "Deleted" +msgstr "Verwijderd" + +msgid "Deleted User Bandwidth" +msgstr "Verwijderde Bandbreedte van Gebruiker" + +#, c-format +msgid "Deleting %s ..." +msgstr "%s verwijderen ..." + +msgid "" +"Deleting files/directories has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Het verwijderen van bestanden/mappen is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Deleting these NS records will leave you with 0." +msgstr "Als u deze NS records verwijdert, blijft u achter met 0." + +msgid "Deny" +msgstr "Afwijzen" + +msgid "Destination" +msgstr "Bestemming" + +#, c-format +msgid "Destination URL error: %s" +msgstr "Bestemmings URL fout:%s" + +msgid "Detail" +msgstr "Detail" + +msgid "Details" +msgstr "Details" + +msgid "Digest Subscriber" +msgstr "Verslag Abonnee" + +msgid "Digest Subscribers" +msgstr "Verslag Abonnees" + +msgid "DirectAdmin will be restarted in 1 minute" +msgstr "DirectAdmin wordt over 1 minuut herstart" + +msgid "Directory Protection Settings have been saved." +msgstr "Beveiligings Instellingen de map zijn opgeslagen." + +msgid "Directory created" +msgstr "Map gemaakt" + +msgid "Disable" +msgstr "Uitschakelen" + +msgid "Disable Auto-Renew" +msgstr "Schakel Automatisch Verlengen uit" + +msgid "Disabled" +msgstr "Uitgeschakeld" + +msgid "" +"Disabled Reseller settings will be applied to Users and Packages in the " +"background." +msgstr "" +"Uitgeschakelde Reseller instellingen worden op de achtergrond toegepast op " +"gebruikers en pakketten." + +msgid "Disk Space" +msgstr "Schijf Ruimte" + +msgid "Disk Space (MB)" +msgstr "Schijf Ruimte (MB)" + +msgid "Disk Usage" +msgstr "Schijf Gebruik" + +msgid "Disk Usage Details" +msgstr "Details van schijfgebruik" + +msgid "Division must only contain letters, numbers, spaces, and/or periods" +msgstr "Divisie mag alleen letters, cijfers, spaties en / of punten bevatten" + +msgid "Dns Provider reset." +msgstr "DNS Provider gereset." + +msgid "Dns Provider saved." +msgstr "DNS Provider opgeslagen." + +msgid "Do not use CAPS in the domain name." +msgstr "Gebruik geen HOOFDLETTERS in de domeinnaam." + +msgid "Do not use any spaces between the email names." +msgstr "Gebruik geen spaties tussen de e-mail namen." + +#, c-format +msgid "Do not use spaces in the %s value" +msgstr "Gebruik geen spaties in de %s waarde" + +msgid "Do you want to overwrite any existing files?" +msgstr "Wilt u bestaande bestanden overschrijven?" + +msgid "DocumentRoot" +msgstr "DocumentRoot" + +#, c-format +msgid "Does not match setting: %s" +msgstr "Komt niet overeen met instelling: %s" + +msgid "Domain" +msgstr "Domein" + +#, c-format +msgid "Domain %s Created" +msgstr "Domein %s Aangemaakt" + +#, c-format +msgid "Domain %s may not use a %s override path of %s" +msgstr "Domein %s mag geen %s overschrijvingspad van %s gebruiken" + +#, c-format +msgid "" +"Domain %s was suspended by an Admin and you not have this access. You cannot " +"unsuspend this domain." +msgstr "" +"Domein %s is opgeschort door een Admin en u heeft deze toegang niet. U kunt " +"de opschorting van dit domein niet ongedaan maken." + +msgid "Domain AWstats" +msgstr "Domein AWstats" + +msgid "Domain AWstats + Webalizer" +msgstr "Domein AWstats + Webalizer" + +msgid "Domain Bandwidth" +msgstr "Domein Bandbreedte" + +msgid "Domain Created" +msgstr "Domein gemaakt" + +msgid "Domain Created Successfully" +msgstr "Domein succesvol aangemaakt" + +msgid "Domain Deletion Results" +msgstr "Resultaten van de domein verwijdering" + +msgid "Domain Pointer" +msgid_plural "Domain Pointers" +msgstr[0] "Domein Pointer" +msgstr[1] "Domein Pointers" + +msgid "Domain Pointer Added" +msgstr "Domein Pointer Toegevoegd" + +msgid "Domain Pointer on" +msgstr "Domein Pointer op" + +msgid "Domain Pointers" +msgstr "Domein Pointers" + +msgid "Domain Quota" +msgstr "Domein Quota" + +msgid "Domain Renaming is not enabled" +msgstr "Domein hernoemen is niet ingeschakeld" + +msgid "Domain Setup" +msgstr "Domein instellingen" + +msgid "Domain Webalizer Stats" +msgstr "Domein Webalizer Statstieken" + +msgid "Domain and password are required" +msgstr "Domein en wachtwoord zijn vereist" + +msgid "Domain does not belong to you" +msgstr "Het domein is niet van jou" + +#, c-format +msgid "Domain exists on %s" +msgstr "Domein bestaat op %s" + +msgid "Domain has already been deleted. It wasn't in the named.conf file" +msgstr "Domein is al verwijderd. Het stond niet in het named.conf-bestand" + +msgid "" +"Domain is already processing an SSL request. Please allow it to finish " +"before making other changes." +msgstr "" +"Het domein verwerkt al een SSL-verzoek. Wacht op voltooien voordat u andere " +"wijzigingen aanbrengt." + +msgid "Domain is forbidden" +msgstr "Domein is verboden" + +msgid "Domain is not in your list" +msgstr "Domein staat niet in uw lijst" + +msgid "Domain name has been successfully changed" +msgstr "De domeinnaam is succesvol gewijzigd" + +msgid "Domain php.ini overrides" +msgstr "Domein php.ini overschrijvingen" + +#, c-format +msgid "Domain pointer %s for domain %s for user %s already exists" +msgstr "Domein pointer %s voor domein %s voor gebruiker %s bestaat al" + +msgid "Domain(s)" +msgstr "Domein(en)" + +msgid "Domain(s) modified" +msgstr "Domein(en) gewijzigd" + +msgid "Domains" +msgstr "Domeinen" + +msgid "Domains directory created successfully" +msgstr "De map met domeinen is gemaakt" + +msgid "Domains directory created successfully in user's home" +msgstr "Domeinen map succesvol aangemaakt in de gebruiker's home folder" + +msgid "Double click for main domain page" +msgstr "Dubbelklik voor de domein hoofd pagina" + +#, c-format +msgid "Dovecot file '%s' is missing data. Run './build dovecot_conf'" +msgstr "" +"In Dovecot-bestand '%s' ontbreken gegevens. Voer './build dovecot_conf' uit" + +msgid "Download" +msgstr "Downloaden" + +msgid "Download Backup" +msgstr "Download Backup" + +#, c-format +msgid "Downloaded: %s" +msgstr "Gedownload: %s" + +msgid "Downloading a new webalizer binary" +msgstr "Een nieuwe binair voor webalizer downloaden" + +msgid "" +"Downloading compress folders has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Het downloaden van gecomprimeerde mappen is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "" +"Downloading files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Het downloaden van bestanden is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Driver signals L1 up." +msgstr "Driver signaleert L1 op." + +msgid "Driver signals dormant." +msgstr "Driver slapend signaal." + +msgid "Duplicate" +msgstr "Duplicaat" + +msgid "E-Mail" +msgstr "E-Mail" + +msgid "E-Mail Accounts" +msgstr "E-Mail Accounten" + +msgid "E-Mail Accounts Deleted" +msgstr "E-mail accounts zijn verwijderd" + +msgid "E-Mail Address has been successfully changed" +msgstr "E-mail adres is succesvol gewijzigd" + +msgid "E-Mail Limit has been set" +msgstr "E-mail limiet is ingesteld" + +msgid "E-Mail Updated" +msgstr "E-mail is bijgewerkt" + +msgid "E-Mail Usage" +msgstr "E-mail Gebruik" + +msgid "E-Mail account already exists" +msgstr "E-mail account bestaat al" + +msgid "E-Mail has been changed" +msgstr "E-mail is gewijzigd" + +#, c-format +msgid "E-Mail has been changed to %s" +msgstr "E-mail is gewijzigd naar %s" + +#, c-format +msgid "E-Mail quota must not exceed %s" +msgstr "E-mail quotum mag %s niet overschrijden" + +msgid "EC-256" +msgstr "EC-256" + +msgid "EC-384" +msgstr "EC-384" + +msgid "EC-521" +msgstr "EC-521" + +msgid "Echo sent packets." +msgstr "Echo verzonden pakketten." + +msgid "Edit" +msgstr "Bewerken" + +msgid "Edit Admin Welcome Message" +msgstr "Bewerk het welkomst bericht van de Admin" + +msgid "Edit Reseller Welcome Message" +msgstr "Bewerk het welkomstbericht van de Reseller" + +msgid "Edit Suspension Message" +msgstr "Bewerk Opschortings bericht" + +msgid "Edit User Welcome Message" +msgstr "Bewerk het welkomstbericht van de Gebruiker" + +msgid "Edit the zone on the master server." +msgstr "Bewerk de zone op de master server." + +msgid "" +"Either have your account creator change your password to unblock it, or use " +"the Lost Password feature on the login page (if enabled)." +msgstr "" +"Laat de maker van uw account uw wachtwoord wijzigen om de blokkering op te " +"heffen, of gebruik de functie Wachtwoord Vergeten op de aanmeld pagina " +"(indien ingeschakeld)." + +msgid "Email" +msgstr "Email" + +#, c-format +msgid "Email '%s' does not exist" +msgstr "Email '%s' bestaat niet" + +msgid "Email Deliveries (Sent)" +msgstr "E-mail Bezorging (Verzonden)" + +msgid "Email Disk Usage" +msgstr "E-mail Schijf Gebruik" + +msgid "Email Forwarders" +msgstr "Email Forwarders" + +msgid "Email Only" +msgstr "Alleen e-mail" + +msgid "Email Sent" +msgstr "Email Verzonden" + +msgid "Email created but" +msgstr "E-mail is gemaakt maar" + +msgid "Empty Clipboard" +msgstr "Klembord Legen" + +msgid "Empty:" +msgstr "Leeg:" + +msgid "Enable" +msgstr "Inschakelen" + +msgid "Enabled" +msgstr "Ingeschakeld" + +#, c-format +msgid "Encryption of %s has failed" +msgstr "Versleuteling van %s is mislukt" + +msgid "End Time" +msgstr "Eind Tijd" + +#, c-format +msgid "" +"End of file reached while trying reading in %lld bytes from %s. filled=%lld" +msgstr "" +"Tijdens het inlezen van %lld bytes van %s. ingevuld =%lld is het einde van " +"de bestand bereikt" + +#, c-format +msgid "Ensure %s exists and is chmod to 1777." +msgstr "Zorg ervoor dat %s bestaat en is chmod naar 1777." + +msgid "Ensure the 2nd key matches the first" +msgstr "Zorg ervoor dat de 2e sleutel overeenkomt met de eerste" + +msgid "Ensure the Reseller's ip.list has some usable IPs." +msgstr "" +"Zorg ervoor dat de ip.list van de Reseller enkele bruikbare IP's heeft." + +msgid "Ensuring stored domains are present" +msgstr "Zorg ervoor dat opgeslagen domeinen aanwezig zijn" + +msgid "Enter your Two-Step Authentication Code" +msgstr "Voer uw Twee-Staps Authenticatie code in" + +#, c-format +msgid "Error %s widgets from accounts: %s" +msgstr "Fout %s widgets van accounts:%s" + +msgid "Error Adding Main Username to database:" +msgstr "Fout bij het toevoegen van de hoofdgebruikersnaam aan de database:" + +msgid "Error Compressing the backup file" +msgstr "Fout bij het comprimeren van het back-up bestand" + +msgid "Error Creating Cron Job" +msgstr "Fout bij het maken van een Cron Taak" + +msgid "Error Creating Domain" +msgstr "Fout bij maken van domein" + +msgid "Error Creating Key" +msgstr "Fout bij maken van de sleutel" + +msgid "Error Creating User" +msgstr "Fout bij het aanmaken van de gebruiker" + +#, c-format +msgid "Error Deleting %s" +msgstr "Fout bij het verwijderen van %s" + +msgid "Error Executing Perl" +msgstr "Fout bij het uitvoeren van Perl" + +msgid "Error Flushing Privileges" +msgstr "Fout bij het opschonen van rechten" + +msgid "Error Flushing Privileges:" +msgstr "Fout bij het opschonen van rechten:" + +msgid "Error Log" +msgstr "Fouten Logboek" + +msgid "Error Reading Message File" +msgstr "Fout bij het lezen van berichten bestand" + +msgid "Error Reading db file" +msgstr "Fout bij lezen van db bestand" + +#, c-format +msgid "Error Removing User %s" +msgstr "Fout bij het verwijderen van gebruiker %s" + +msgid "Error Resetting Key Uses" +msgstr "Fout bij het resetten van sleutel gebruik" + +msgid "Error Resetting Zone" +msgstr "Fout bij resetten van Zone" + +msgid "Error Restoring database" +msgstr "Fout bij herstellen van database" + +#, c-format +msgid "Error Saving Password: %s" +msgstr "Fout bij het opslaan van wachtwoord: %s" + +msgid "Error Unblocking paths" +msgstr "Fout bij deblokkeren van paden" + +msgid "Error Updating User" +msgstr "Fout bij updaten van Gebruiker" + +#, c-format +msgid "Error Writing %s" +msgstr "Fout bij het schrijven van %s" + +#, c-format +msgid "Error activating %s's user %s: %s" +msgstr "Fout bij het activeren %s van de gebruiker%s: %s" + +#, c-format +msgid "Error activating cronjobs: %s" +msgstr "Fout bij het activeren van crontaken: %s" + +#, c-format +msgid "Error activating data for %s: %s" +msgstr "Fout bij het activeren van data voor %s: %s" + +#, c-format +msgid "Error adding DS records for %s to remote parent zone: %s" +msgstr "" +"Fout bij het toevoegen van DS records voor %s aan externe bovenliggende zone:" +"%s" + +msgid "Error authorizing SSH Key" +msgstr "Fout bij autoriseren van SSH sleutel" + +msgid "Error changing password" +msgstr "Fout bij wijzigen van de wachtwoord" + +msgid "Error changing password. Contact your webhost." +msgstr "Fout bij wijzigen van wachtwoord. Neem contact op met uw webhoster." + +msgid "Error clearing LetsEncrypt files" +msgstr "Fout bij het wissen van LetsEncrypt bestanden" + +msgid "Error converting file: " +msgstr "Fout bij het converteren van bestand: " + +#, c-format +msgid "Error copying %s to %s : %s" +msgstr "Fout bij het kopieren %s naar %s : %s" + +#, c-format +msgid "Error copying %s to %s: %s" +msgstr "Fout bij het kopieren %s naar %s : %s" + +#, c-format +msgid "Error copying logo file: %s" +msgstr "Fout bij kopiëren van logobestand: %s" + +#, c-format +msgid "Error creating %s" +msgstr "Fout bij het maken van %s" + +#, c-format +msgid "Error creating %s: %s" +msgstr "Fout bij het maken van %s: %s" + +msgid "Error creating Autoresponder" +msgstr "Fout bij maken van Autoresponder" + +#, c-format +msgid "Error creating NginxUnit application '%s': %s" +msgstr "Fout bij het maken van de NginxUnit applicatie '%s':%s" + +#, c-format +msgid "Error creating NginxUnit route '%s': %s" +msgstr "Fout bij het aanmaken NginxUnit route '%s':%s" + +msgid "Error creating SSH Key" +msgstr "Fout bij het aanmaken van SSH sleutel" + +msgid "Error creating User" +msgstr "Fout bij het aanmaken van gebruiker" + +msgid "Error creating Vacation Message" +msgstr "Fout bij aanmaken van vakantiebericht" + +msgid "Error creating account" +msgstr "Fout bij het aanmaken account" + +#, c-format +msgid "" +"Error creating default directories in %s. See error.log for more " +"information." +msgstr "" +"Fout bij het maken van standaardmappen in %s. Zie error.log voor meer " +"informatie." + +msgid "Error creating forwarder" +msgstr "Fout bij het maken van forwarder" + +msgid "Error creating the database" +msgstr "Fout bij het maken van de database" + +msgid "Error decoding the base 64 data" +msgstr "Fout bij het decoderen van de base64 gegevens" + +#, c-format +msgid "Error deleting %s: %s" +msgstr "Fout bij het verwijderen van %s: %s" + +msgid "Error deleting SSH Key" +msgstr "Fout bij het verwijderen van SSH Sleutel" + +msgid "Error deleting Security Questions" +msgstr "Fout bij het verwijderen van de beveiligings vragen" + +msgid "Error deleting account(s)" +msgstr "Fout bij het verwijderen van de account(s)" + +msgid "Error deleting autoresponder(s)" +msgstr "Fout bij het verwijderen van de autoresponder(s)" + +msgid "Error deleting filter(s)" +msgstr "Fout bij het verwijderen van filter(s)" + +msgid "Error deleting key(s)" +msgstr "Fout bij verwijderen van sleutel(s)" + +msgid "Error deleting records" +msgstr "Fout bij verwijderen van records" + +msgid "Error determining username from " +msgstr "Fout bij het bepalen van de gebruikersnaam van " + +#, c-format +msgid "Error during automated certificate renewal for %s" +msgstr "Fout tijdens automatische certificaat vernieuwing voor %s" + +#, c-format +msgid "Error during deletion of child user %s" +msgstr "Fout tijdens het verwijderen van onderliggende gebruiker %s" + +msgid "Error during extraction" +msgstr "Fout tijdens extractie" + +msgid "Error executing your request" +msgstr "Fout bij het uitvoeren van uw verzoek" + +msgid "Error generating scratch codes" +msgstr "Fout bij het genereren van eenmalige codes" + +msgid "Error generating zone keys" +msgstr "Fout bij het genereren van zone sleutels" + +msgid "Error importing base 64 encoded packages" +msgstr "Fout bij het importeren van met 64 gecodeerde pakketten" + +msgid "Error in post. Requires domain, type and value." +msgstr "Fout in bericht. Vereist domein, type en waarde." + +msgid "Error modifying SSH key" +msgstr "Fout bij het wijzigen van SSH sleutel" + +msgid "Error parsing 'routes'." +msgstr "Fout bij het parseren van 'routes'." + +msgid "Error parsing json output" +msgstr "Fout bij het parseren van json uitvoer" + +msgid "Error purging archives" +msgstr "Fout bij het opschonen van archieven" + +#, c-format +msgid "Error reading %s: %s" +msgstr "Fout bij het lezen van %s: %s" + +msgid "Error reading admin list file." +msgstr "Fout bij het lezen van het admin lijst bestand." + +msgid "Error reading domain config file" +msgstr "Fout bij het lezen van domein configuratie bestand" + +msgid "Error reading domain config files" +msgstr "Fout bij het lezen van domein configuratie bestanden" + +msgid "Error reading domainowners" +msgstr "Fout bij het lezen van domein eigenaren" + +msgid "Error reading domainowners file" +msgstr "Fout bij het lezen van bestand met domein eigenaren" + +msgid "Error reading named db file" +msgstr "Fout bij het lezen van het genoemde db bestand" + +#, c-format +msgid "Error reading new license: %s" +msgstr "Fout bij het lezen van nieuwe licentie:%s" + +msgid "Error reading the db file after writing to it, before DNSSEC signing" +msgstr "" +"Fout bij het lezen van het db bestand na het schrijven ervan, vóór DNSSEC-" +"ondertekening" + +msgid "Error reading the license file for restore." +msgstr "Fout bij het lezen van het licentiebestand voor het herstellen." + +#, c-format +msgid "Error reading user files for %s, continuing anyway." +msgstr "" +"Fout bij het lezen van gebruikersbestanden voor %s, negeren en doorgaan." + +msgid "Error reading user_ip.list file" +msgstr "Fout bij het lezen van user_ip.list-bestand" + +#, c-format +msgid "Error removing %s: %s" +msgstr "Fout bij het verwijderen van%s: %s" + +#, c-format +msgid "Error removing IP(s) from %s" +msgstr "Fout bij het verwijderen van IP(s) van %s" + +msgid "Error removing file: " +msgstr "Fout bij het verwijderen van bestand: " + +#, c-format +msgid "Error removing path %s: %s" +msgstr "Fout bij het verwijderen van pad %s: %s" + +msgid "Error removing subdomain(s)" +msgstr "Fout bij verwijderen van subdomein(en)" + +#, c-format +msgid "Error removing user %s" +msgstr "Fout bij het verwijderen van gebruiker %s" + +#, c-format +msgid "Error renaming %s to %s: %s" +msgstr "Fout bij het hernoemen van %s naar %s: %s" + +#, c-format +msgid "Error restoring %s: %s" +msgstr "Fout bij het herstellen van %s: %s" + +#, c-format +msgid "Error restoring php settings for '%s': %s" +msgstr "Fout bij het herstellen van php instellingen voor '%s': %s" + +#, c-format +msgid "Error rewriting %s" +msgstr "Fout bij het overschrijven van %s" + +#, c-format +msgid "Error running %s auto: %s" +msgstr "Fout bij het uitvoeren van %s auto: %s" + +#, c-format +msgid "Error running %s: %s" +msgstr "Fout bij het uitvoeren van %s: %s" + +msgid "Error running rndc addzone." +msgstr "Fout bij het uitvoeren van rndc addzone." + +msgid "Error running rndc delzone." +msgstr "Fout bij het uitvoeren van rndc delzone." + +msgid "Error saving Cron E-Mail" +msgstr "Fout bij het opslaan van Cron E-mail" + +msgid "Error saving Nameservers" +msgstr "Fout bij het opslaan van de Naamservers" + +#, c-format +msgid "Error selecting database %s: %s" +msgstr "Fout bij het selecteren van database %s: %s" + +#, c-format +msgid "Error sending signal to %d: %s" +msgstr "Fout bij het verzenden van signaal naar %d: %s" + +msgid "Error setting MX Template" +msgstr "Fout bij het instellen van MX Sjabloon" + +msgid "Error setting MX template for pointer" +msgstr "Fout bij het instellen van MX Sjabloon voor de pointer" + +msgid "Error setting PHP versions" +msgstr "Fout bij het instellen van PHP versies" + +msgid "Error setting Security Question" +msgstr "Fout bij het instellen van de Beveiligings Vraag" + +#, c-format +msgid "Error setting cgroup limits for %s: %s" +msgstr "Fout bij instellen van cgroup limiten voor %s: %s" + +msgid "Error setting clipboard files" +msgstr "Fout bij het instellen van klembord bestanden" + +msgid "Error setting global key" +msgstr "Fout bij het instellen van de algemene sleutel" + +#, c-format +msgid "Error setting permission on %s: %s" +msgstr "Fout bij het instellen van rechten op %s: %s" + +msgid "Error setting the filter" +msgstr "Fout bij het instellen van het filter" + +msgid "Error setting the spam filter" +msgstr "Fout bij het instellen van de spamfilter" + +msgid "Error setting timezone" +msgstr "Fout bij het instellen van de tijdzone" + +msgid "Error showing Email Acounts" +msgstr "Fout bij het weergeven van E-mail Accounts" + +msgid "Error showing message ID info" +msgstr "Fout bij het weergeven van bericht ID informatie" + +msgid "Error showing smtp log info" +msgstr "Fout bij het weergeven van smtp log gegevens" + +msgid "Error signing zone" +msgstr "Fout bij ondertekenings zone" + +#, c-format +msgid "Error suspending %s's user %s: %s" +msgstr "Fout bij het opschorten van de gebruiker %s van %s: %s" + +#, c-format +msgid "Error suspending cronjobs: %s" +msgstr "Fout bij het opschorten van cron taken: %s" + +msgid "Error updating Autoresponder" +msgstr "Fout bij het updaten van Autoresponder" + +msgid "Error updating Catch-All value" +msgstr "Fout bij het bijwerken van de Catch-All waarde" + +msgid "Error updating Vacation Message" +msgstr "Fout bij het bijwerken van de Vakantie Bericht" + +msgid "Error updating forwarder" +msgstr "Fout bij het bijwerken van de forwarder" + +#, c-format +msgid "Error while backing up database %s" +msgstr "Fout bij het maken van een backup van de database %s" + +msgid "Error while compressing file" +msgstr "Fout tijdens het comprimeren van bestand" + +msgid "Error while creating User" +msgstr "Fout tijdens het maken van Gebruiker" + +msgid "Error while creating the backup" +msgstr "Fout tijdens het maken van de back-up" + +msgid "Error while deleting Users" +msgstr "Fout tijdens het verwijderen van Gebruikers" + +msgid "Error while saving changes" +msgstr "Fout tijdens het opslaan van wijzigingen" + +msgid "Error while saving password" +msgstr "Fout tijdens het opslaan van wachtwoord" + +msgid "Error while sending email" +msgstr "Fout tijdens het verzenden van e-mail" + +#, c-format +msgid "Error while writing %s" +msgstr "Fout tijdens het schrijven van %s" + +#, c-format +msgid "Error with Command::master_login:search:gettimeofday: %s" +msgstr "Fout bij Command::master_login:search:gettimeofday: %s" + +msgid "Error with LetsEncrypt request" +msgstr "Fout met het LetsEncrypt verzoek" + +msgid "Error with Security Questions" +msgstr "Fout met de Beveiligings Vragen" + +msgid "Error with Two-Step Authentication" +msgstr "Fout bij het Twee-Stappen Verificatie" + +msgid "Error with command:" +msgstr "Fout met commando:" + +msgid "Error with curl request" +msgstr "Fout met curl verzoek" + +msgid "Error with exigrep" +msgstr "Fout met exigrep" + +msgid "Error with fchownat" +msgstr "Fout met fchownat" + +#, c-format +msgid "Error with request: '%s' More info in debug output." +msgstr "Fout met verzoek: '%s' Meer informatie in debug uitvoer." + +msgid "Error with system Quotas" +msgstr "Fout met systeem Quota" + +#, c-format +msgid "" +"Error with the backup plan (rename failed): the copy of %s to %s has also " +"failed: %s" +msgstr "" +"Fout met het back-up schema (hernoemen mislukt): het kopiëren van %s naar %s " +"is ook mislukt:%s" + +#, c-format +msgid "Error writing %s" +msgstr "Fout bij het schrijven van %s" + +#, c-format +msgid "Error writing %s: %s" +msgstr "Fout bij het schrijven van %s: %s" + +msgid "Error writing domain config file" +msgstr "Fout bij schrijven van domein configuratie bestand" + +msgid "Error writing password request file." +msgstr "Fout bij schrijven van wachtwoord verzoek bestand." + +msgid "Error writing pop cache" +msgstr "Fout bij het schrijven van pop cache" + +#, c-format +msgid "Error writing settings file for %s" +msgstr "Fout bij schrijven van instellingen bestand voor %s" + +msgid "Error writing the directadmin.conf" +msgstr "Fout bij het schrijven van het directadmin.conf" + +#, c-format +msgid "Error writing to %s: %s" +msgstr "Fout bij schrijven naar %s: %s" + +msgid "Errors" +msgstr "Fouten" + +msgid "Evening" +msgstr "Avond" + +msgid "Expecting 0 or 1" +msgstr "Verwacht 0 of 1" + +msgid "Expecting any integer" +msgstr "Verwachting elk geheel getal" + +msgid "Expecting any long long integer" +msgstr "Verwacht een lang geheel getal" + +msgid "Expired" +msgstr "Verlopen" + +msgid "Expires" +msgstr "Verloopt" + +msgid "Expiry" +msgstr "Vervalt" + +msgid "Export Selected" +msgstr "Geselecteerde Exporteren" + +msgid "Extension" +msgstr "Extensie" + +msgid "Extensions" +msgstr "Extensies" + +msgid "Extract" +msgstr "Uitpakken" + +msgid "Extract selected to directory" +msgstr "Extract geselecteerde naar map" + +msgid "Extracting User Data" +msgstr "Gebruikers Gegevens Extraheren" + +msgid "" +"Extracting files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Het uitpakken van bestanden is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Extracting non-readable files" +msgstr "Uitpakken van niet leesbare bestanden" + +msgid "Extracting ~/domains directory" +msgstr "Uitpakken van de ~/domein map" + +msgid "Extracting ~/imap directory" +msgstr "Uitpakken ~/imap map" + +msgid "FTP" +msgstr "FTP" + +msgid "FTP account already exists" +msgstr "FTP account bestaat al" + +msgid "FTP information invalid." +msgstr "FTP informatie is ongeldig." + +msgid "FTP: default creation error" +msgstr "FTP: standaard aanmaak fout" + +msgid "Failed Referer Check" +msgstr "Mislukte Referer controle" + +msgid "Failed to verify" +msgstr "Verificatie mislukt" + +msgid "Feature Disabled" +msgstr "Functie uitgeschakeld" + +msgid "Feb" +msgstr "Feb" + +msgid "File" +msgstr "Bestand" + +#, c-format +msgid "File %s already exists, file skipped." +msgstr "Bestand %s bestaat al, bestand is overgeslagen." + +msgid "File Extracted" +msgstr "Bestand uitgepakt" + +msgid "File Manager" +msgstr "Bestands Beheer" + +#, c-format +msgid "File being read as '%s'" +msgstr "Bestand wordt gelezen als '%s'" + +msgid "File copied successfully" +msgstr "Bestand succesvol gekopieerd" + +msgid "File does not exist" +msgstr "Bestand bestaat niet" + +msgid "File does not exist or you don't have access to file" +msgstr "Bestand bestaat niet of u heeft geen toegang tot het bestand" + +msgid "File ownership reset" +msgstr "Bestands eigendom gereset" + +msgid "File restored successfully" +msgstr "Bestand succesvol hersteld" + +msgid "Filename" +msgstr "Bestandsnaam" + +msgid "Files added to clipboard" +msgstr "Bestanden toegevoegd aan het klembord" + +msgid "Filesystem" +msgstr "Bestandssysteem" + +msgid "Filter" +msgstr "Filter" + +msgid "Fingerprint" +msgstr "Vingerafdruk" + +msgid "First" +msgstr "Eerste" + +msgid "First PHP" +msgstr "Eerste PHP" + +msgid "First Page" +msgstr "Eerste Pagina" + +#, c-format +msgid "Flag value for '%s' is blank" +msgstr "Markeer waarde '%s' is blank" + +msgid "Flush from DNS" +msgstr "Legen van DNS" + +msgid "Follow the link above to find a directory and protect it" +msgstr "Volg de bovenstaande link om een map te zoeken en deze te beveiligen" + +msgid "For backwards compatibility" +msgstr "Voor achterwaartse compatibiliteit" + +msgid "" +"For cases where the large number of domains to process may cause a timeout" +msgstr "" +"Bij gevallen waar groot aantal domeinen wordt verwerkt kan dit een time-out " +"veroorzaken" + +#, c-format +msgid "For debugging purposes, this file came from: %s" +msgstr "Voor fout opsporings doeleinden, dit bestand is afkomstig van: %s" + +msgid "Forgot your Password?" +msgstr "Je wachtwoord vergeten?" + +msgid "Forwarder" +msgstr "Forwarder" + +#, c-format +msgid "Forwarder %s cannot point to itself" +msgstr "Forwarder %s kan niet naar zichzelf verwijzen" + +#, c-format +msgid "Forwarder %s@%s deleted as it had zero recipients remaining." +msgstr "Forwarder %s @%s is verwijderd omdat er geen ontvangers meer zijn." + +#, c-format +msgid "Forwarder '%s' already exists." +msgstr "Forwarder '%s' bestaat al." + +msgid "Forwarder already exists" +msgstr "Forwarder bestaat al" + +#, c-format +msgid "" +"Forwarder contains a local_part_suffix character: '%s' meaning everything " +"after it will be ignored and the forwarder will never match." +msgstr "" +"Forwarder bevat een local_part_suffix teken: '%s' wat betekent dat alles " +"erna genegeerd zal worden en de forwarder nooit zal matchen." + +msgid "Forwarder created" +msgstr "Forwarder aangemaakt" + +#, c-format +msgid "Forwarder loop found: %s" +msgstr "Forwarder lus gevonden: %s" + +msgid "Forwarder updated" +msgstr "Forwarder bijgewerkt" + +msgid "Forwarders" +msgstr "Forwarders" + +msgid "Free - randomly selected" +msgstr "Vrij - willekeurig geselecteerd" + +msgid "Free Memory" +msgstr "Beschikbaar geheugen" + +msgid "Free Selected" +msgstr "Geselecteerde vrij maken" + +msgid "Free Swap Memory" +msgstr "Vrije Wissel geheugen" + +msgid "From" +msgstr "Van" + +msgid "Frontpage Not Installed" +msgstr "Frontpage Niet Geinstalleerd" + +msgid "Frontpage changes successful." +msgstr "Frontpage is succesvol gewijzigd." + +msgid "Frontpage is not active on this server" +msgstr "Frontpage is niet actief op deze server" + +msgid "Ftp" +msgstr "Ftp" + +msgid "Ftp Accounts" +msgstr "Ftp Accounts" + +msgid "Ftp IPs successfully swapped" +msgstr "Ftp IP's zijn succesvol verwisseld" + +msgid "Ftp Management" +msgstr "Ftp Beheer" + +msgid "Ftp account changed" +msgstr "Ftp account gewijzigd" + +msgid "Ftp settings saved" +msgstr "Ftp instellingen opgeslagen" + +msgid "Full Date" +msgstr "Volledige datum" + +msgid "Full Name has been successfully changed" +msgstr "Volledige naam is succesvol gewijzigd" + +#, c-format +msgid "Full format name '%s' does not end with zone name" +msgstr "De volledige formaat naam '%s' eindigt niet met een zone naam" + +msgid "GB" +msgstr "GB" + +msgid "GID" +msgstr "GID" + +msgid "Generate Keys" +msgstr "Genereer Sleutels" + +msgid "Get the code from your phone's app, or use a backup scratch code." +msgstr "" +"Gebruik de code uit de app van je telefoon of gebruik een eenmalige back-up " +"code." + +msgid "Global" +msgstr "Globaal" + +msgid "Global - randomly selected" +msgstr "Globaal - willekeurig geselecteerd" + +msgid "Global Key" +msgstr "Globale Sleutel" + +msgid "Global Key set" +msgstr "Globale sleutel set" + +msgid "Global ssh keys not available to Users" +msgstr "Globale SSH-sleutels zijn niet beschikbaar voor gebruikers" + +#, c-format +msgid "Go to %s" +msgstr "Ga naar %s" + +#, c-format +msgid "Group %s already exists. Please chose a different username." +msgstr "Groep %s bestaat al. Kies een andere gebruikersnaam." + +msgid "Handler" +msgstr "Afhandelaar" + +msgid "" +"Hello,\n" +"\n" +"This message is to notify you that your account '|USERNAME|' has been " +"suspended.\n" +"Reason: |REASON|\n" +"\n" +"If you feel this has been done in error, please contact your hosting " +"provider for more information\n" +"\n" +"|MSG_FOOTER|\n" +msgstr "" +"Hallo,\n" +"\n" +"Dit bericht is om u te laten weten dat uw account '|USERNAME|' is " +"geschorst.\n" +"Reden: |REASON|\n" +"\n" +"Als u denkt dat dit ten onrechte is gedaan, neem dan contact op met uw " +"hostingprovider voor meer informatie\n" +"\n" +"|MSG_FOOTER|\n" + +msgid "Hello, this is my autoresponder" +msgstr "Hallo, dit is mijn Autoresponder" + +msgid "Here are the results" +msgstr "Hier zijn de resultaten" + +msgid "Here are the results:" +msgstr "Hier zijn de resultaten:" + +#. /# %c here denotes newline character +#, c-format +msgid "" +"Hi,%c I am currently on vacation. I will view your message when I get back." +msgstr "" +"Hallo,%c Ik ben momenteel op vakantie. Ik zal uw bericht bekijken als ik " +"terug ben." + +msgid "High" +msgstr "Hoog" + +msgid "Highest" +msgstr "Hoogste" + +msgid "Hit end-of-file while searching for @ or domain header line in" +msgstr "" +"Tijdens het zoeken naar @ of domein header regel eind van het bestand bereikt" + +msgid "Home Directory" +msgstr "Basis Map" + +#, c-format +msgid "Home path '%s' is not in the allowed home_override_list" +msgstr "Basis pad '%s' staat niet in de toegestane home_override_list" + +msgid "Host:" +msgstr "Host:" + +msgid "Hosts" +msgstr "Hosts" + +msgid "Hotlink Protection" +msgstr "Hotlink Bescherming" + +msgid "Hour" +msgstr "Uur" + +msgid "How to process the request" +msgstr "Hoe het process verwerkt dient te worden" + +#, c-format +msgid "" +"However, after %s attempts, they were not able to provide a valid Two-Step " +"Authentication code, so no access was granted." +msgstr "" +"Na %s pogingen werd er geen geldige tweestapsverificatiecode opgeven, er is " +"geen toegang verleend." + +#, c-format +msgid "" +"However, after %s attempts, they were not able to provide a valid answer for " +"the security questions, so no access was granted." +msgstr "" +"Na %s pogingen werd niet de juiste antwoorden geven op de " +"beveiligingsvragen, er wordt geen toegang verleend." + +msgid "However, subdomains have been found instead. Proceeding with them." +msgstr "In plaats daarvan zijn echter subdomeinen gevonden. Doorgaan met deze." + +msgid "ID" +msgstr "ID" + +msgid "ID does not belong to you" +msgstr "ID is niet van jou" + +msgid "ID: 1234 or \"1234-1239\"" +msgstr "ID: 1234 of \"1234-1239\"" + +msgid "IO Read Bandwidth Max" +msgstr "Max. IO Lees Bandbreedte" + +msgid "IO Write Bandwidth Max" +msgstr "Max. IO Schrijf Bandbreedte" + +msgid "IOPS Read Max" +msgstr "Max. IOPS Lezen" + +msgid "IOPS Write Max" +msgstr "Max. IOPS Schrijven" + +msgid "IP" +msgstr "IP" + +msgid "IP Added" +msgstr "IP Toegevoegd" + +msgid "IP Info" +msgstr "IP Informatie" + +msgid "IP Link Added" +msgstr "IP Koppeling Toegevoegd" + +msgid "IP Link(s) Removed" +msgstr "IP Koppel(ingen) Verwijderd" + +msgid "IP List is empty" +msgstr "IP List is leeg" + +msgid "IP Netmask Set" +msgstr "IP Netmask Ingesteld" + +msgid "IP Type" +msgstr "IP Type" + +#, c-format +msgid "IP in domain config file (%s) is not valid." +msgstr "IP in domein configuratie bestand (%s) is niet geldig." + +msgid "IP must be shared or free" +msgstr "IP moet gedeeld of vrij zijn" + +msgid "IP will be linked in the background" +msgstr "IP wordt op de achtergrond gekoppeld" + +msgid "IP(s)" +msgstr "IP Adres(sen)" + +msgid "IP(s) removed" +msgstr "IP(s) verwijderd" + +msgid "IP/User" +msgstr "IP/Gebruiker" + +msgid "IPs" +msgstr "IP Adressen" + +msgid "" +"If the username entered is correct, you will receive a confirmation email " +"shortly." +msgstr "" +"Als de ingevoerde gebruikersnaam correct is, ontvang je binnenkort een " +"bevestigingsmail." + +#, c-format +msgid "If this continues, consider putting %s in the ip_blacklist file." +msgstr "" +"Als dit vaker voorkomt, overweeg dan om %s in het ip_blacklist-bestand te " +"plaatsen." + +msgid "If this is not your IP, change your password." +msgstr "Wijzig uw wachtwoord als dit niet uw IP adres is." + +msgid "" +"If you aren't expecting a new license the same license file will be " +"generated." +msgstr "" +"Als u geen nieuwe licentie verwacht, wordt hetzelfde licentie bestand " +"gegenereerd." + +msgid "" +"If you do not wish to overwrite the current certificate, please disable the " +"auto-renewal" +msgstr "" +"Als u het huidige certificaat niet wilt overschrijven, schakel dan de " +"automatische verlenging uit" + +msgid "" +"If you proceed, these User accounts, along with ALL the associated website " +"and email contents, which are not listed here, will also be removed." +msgstr "" +"Als u doorgaat, worden deze gebruikersaccounts, samen met ALLE bijbehorende " +"website- en e-mailinhoud, die hier niet worden vermeld, ook verwijderd." + +msgid "" +"If you set it to 0, no basic httpd request will work. You wont even be able " +"to login." +msgstr "" +"Als u het instelt op 0, zal de standaard httpd verzoeken niet werken. U kunt " +"dan ook niet aanmelden." + +msgid "Image filenames only have 1 dot" +msgstr "Bestandsnamen van afbeeldingen hebben slechts 1 punt" + +msgid "Imap" +msgstr "Imap" + +msgid "Imap Folders" +msgstr "Imap Folders" + +msgid "In what city did you meet your spouse/significant other?" +msgstr "In welke stad heeft u uw echtgenoot/partner ontmoet?" + +msgid "In what city does your nearest sibling live?" +msgstr "In welke stad woont je dichtstbijzijnde broer of zus?" + +msgid "In what city or town did your mother and father meet?" +msgstr "In welke stad of dorp hebben je moeder en vader elkaar ontmoet?" + +msgid "In what city or town was your first job?" +msgstr "In welke stad of gemeente was je eerste baan?" + +msgid "Inactive" +msgstr "Inactief" + +msgid "Inbox" +msgstr "Inbox" + +msgid "Include Domains" +msgstr "Inclusief Domeinen" + +msgid "Include your license information" +msgstr "Voeg uw licentie informatie toe" + +msgid "Info" +msgstr "Informatie" + +msgid "Info for admins" +msgstr "Informatie voor de admin" + +msgid "Inherit" +msgstr "Erft" + +msgid "Inodes" +msgstr "Inodes" + +msgid "Install Serverwide" +msgstr "Installeer op de Server" + +msgid "Installed" +msgstr "Geïnstalleerd" + +msgid "Installed Perl Modules" +msgstr "Geïnstalleerde Perl modules" + +msgid "Interface is a loopback interface." +msgstr "Interface is een loopback interface." + +msgid "Interface is a point-to-point link." +msgstr "Interface is een point to point link." + +msgid "Interface is in promiscuous mode." +msgstr "Interface is in promiscue modus." + +msgid "Interface is running." +msgstr "Interface draait." + +msgid "Internal debugging flag." +msgstr "Interne foutopsporing vlag." + +msgid "Invalid " +msgstr "Ongeldig " + +#, c-format +msgid "Invalid '%s'" +msgstr "Ongeldig '%s'" + +msgid "Invalid CC email address" +msgstr "Ongeldig CC email addres" + +msgid "" +"Invalid Characters in the skin name. Only use a-zA-Z0-9._-[] Must not start " +"with '.'" +msgstr "" +"Ongeldige tekens in de thema naam. Gebruik alleen a-zA-Z0-9 ._- [] Mag niet " +"beginnen met '.'" + +msgid "Invalid Cron ID" +msgstr "Ongeldige Cron ID" + +msgid "Invalid DNS name" +msgstr "Ongeldige DNS naam" + +msgid "Invalid DNS value" +msgstr "Ongeldige DNS waarde" + +msgid "Invalid Domain" +msgstr "Ongeldige Domein" + +msgid "Invalid Domain Name" +msgstr "Ongeldige Domein Naam" + +msgid "Invalid E-Mail" +msgstr "Ongeldige E-Mail" + +msgid "Invalid E-Mail User" +msgstr "Ongeldige E-Mail Gebruiker" + +msgid "" +"Invalid E-Mail address. Multiple and DirectAdmin login username, or blank " +"also allowed" +msgstr "" +"Ongeldig e-mailadres. Meerdere en DirectAdmin aanmeldings gebruikersnaam of " +"blanco is ook toegestaan" + +msgid "Invalid Email" +msgstr "Ongeldig E-mail" + +msgid "Invalid Email Name" +msgstr "Ongeldige E-mail Naam" + +msgid "Invalid Email limit" +msgstr "Ongeldige E-mail limiet" + +msgid "Invalid FTP account" +msgstr "Ongeldig FTP account" + +msgid "Invalid IP (1.2.3.4) or IP range (1.2.3.4-5)" +msgstr "Ongeldig IP (1.2.3.4) of IP bereik (1.2.3.4-5)" + +msgid "Invalid IP/Domain for the ftp connection" +msgstr "Ongeldige IP/domein voor deze ftp verbinding" + +#, c-format +msgid "Invalid Log Rotate Value: %d" +msgstr "Ongeldige Logboek Rotatie Waarde:%d" + +msgid "Invalid MX value" +msgstr "Ongeldige MX waarde" + +msgid "Invalid Name" +msgstr "Ongeldige Naam" + +msgid "Invalid Netmask" +msgstr "Ongeldige Netmask" + +msgid "Invalid Password" +msgstr "Ongeldig Wachtwoord" + +msgid "Invalid RSA comment" +msgstr "Ongeldige RSA opmerking" + +msgid "Invalid RSA id. Use simple characters: a-zA-Z0-9" +msgstr "Ongeldige RSA ID. Gebruik eenvoudige tekens: a-zA-Z0-9" + +msgid "Invalid RSA key" +msgstr "Ongeldige RSA sleutel" + +msgid "Invalid SecRuleRemoveById value" +msgstr "Ongeldige SecRuleRemoveById waarde" + +#, c-format +msgid "Invalid Session Minutes value: %lld" +msgstr "Ongeldige waarde voor sessie minuten:%lld" + +msgid "Invalid Subdomain" +msgstr "Ongeldig Subdomein" + +msgid "Invalid Two-Step Auth code" +msgstr "Ongeldige twee-stappen verificatie authenticatie code" + +msgid "Invalid URL" +msgstr "Ongeldige URL" + +msgid "Invalid User" +msgstr "Ongeldige gebruiker" + +msgid "Invalid User type" +msgstr "Ongeldig gebruikerstype" + +msgid "Invalid Username" +msgstr "Ongeldige gebruikersnaam" + +msgid "Invalid Username or Password" +msgstr "Ongeldige Gebruikersnaam of Wachtwoord" + +msgid "Invalid action" +msgstr "Ongeldige actie" + +#, c-format +msgid "Invalid characters in description. Allowed %s" +msgstr "Ongeldige karakters in de omschrijving. Toegestaan zijn %s" + +msgid "Invalid characters in password" +msgstr "Ongeldige karakters in wachtwoord" + +msgid "Invalid characters in search" +msgstr "Ongeldige karakters in zoekopdracht" + +msgid "Invalid characters in security answer" +msgstr "Ongeldige karakters in beveiligingsantwoord" + +msgid "Invalid characters in security question" +msgstr "Ongeldige karakters in beveiligingsvraag" + +msgid "Invalid characters in word" +msgstr "Ongeldige karakters in woord" + +msgid "Invalid code" +msgstr "Ongeldige code" + +msgid "Invalid crypted passwd" +msgstr "Ongeldige versleuteld wachtwoord" + +msgid "Invalid database name:" +msgstr "Ongeldige database naam:" + +msgid "Invalid delete_messages_days or delete_tickets_days. Too big. Max = " +msgstr "" +"Ongeldige delete_messages_days of delete_tickets_days. Te groot. Max = " + +msgid "" +"Invalid delete_messages_days or delete_tickets_days. Should be 0 or a " +"positive integer." +msgstr "" +"Ongeldige delete_messages_days of delete_tickets_days. Moet 0 of een " +"positief geheel getal zijn." + +msgid "Invalid dnsprovider" +msgstr "Ongeldige dnsprovider" + +msgid "Invalid domain" +msgstr "Ongeldig domein" + +msgid "Invalid email address" +msgstr "Ongeldig emailadres" + +msgid "Invalid email address on file. Contact your webhost." +msgstr "Ongeldig emailadres in bestand. Neem contact op met uw webhost." + +msgid "Invalid email user" +msgstr "Ongeldig emailadres gebruiker" + +msgid "Invalid email username" +msgstr "Ongeldige gebruikersnaam voor e-mail" + +msgid "Invalid encryption password" +msgstr "Ongeldige versleuteling wachtwoord" + +msgid "Invalid file extension list" +msgstr "Ongeldige bestandsextentie-lijst" + +msgid "Invalid filename:" +msgstr "Ongeldige bestandsnaam:" + +msgid "Invalid filter type" +msgstr "Ongeldig filter type" + +msgid "Invalid fingerprint" +msgstr "Ongeldige vingerafdruk" + +msgid "Invalid ftp password" +msgstr "Ongeldig FTP wachtwoord" + +msgid "Invalid ftp path" +msgstr "Ongeldig FTP pad" + +msgid "Invalid ftp port" +msgstr "Ongeldige FTP poort" + +msgid "Invalid ftp username" +msgstr "Ongeldige FTP gebruikersnaam" + +#, c-format +msgid "Invalid key bit length: '%s'" +msgstr "Ongeldige sleutel bitlengte: '%s'" + +#, c-format +msgid "Invalid key option name or value: %s=%s" +msgstr "Ongeldige sleutel optie van naam of waarde : %s=%s" + +#, c-format +msgid "Invalid key type: '%s'" +msgstr "Ongeldig sleuteltype: '%s'" + +#, c-format +msgid "Invalid keysize. Valid values: %s" +msgstr "Ongeldige sleutel grootte. Geldige waarden:%s" + +msgid "Invalid language" +msgstr "Ongeldige taal" + +msgid "Invalid list of allowed domains" +msgstr "Ongeldige lijst van toegestane domeinen" + +msgid "Invalid local path" +msgstr "Ongeldige lokaal pad" + +msgid "Invalid login. Please verify your Username and Password" +msgstr "Ongeldige aanmelding. Verifieer uw gebruikersnaam en wachtwoord" + +#, c-format +msgid "Invalid master type: %d for '%s'" +msgstr "Ongeldige master type: %d voor '%s'" + +msgid "Invalid message days. Should be a positive integer." +msgstr "Ongeldige bericht dagen. Moet een positief geheel getal zijn." + +msgid "Invalid message id" +msgstr "Ongeldige bericht id" + +msgid "Invalid message type. Only request, reply and message are allowed" +msgstr "" +"Ongeldige bericht type. Alleen verzoek, antwoord en bericht zijn toegestaan" + +#, c-format +msgid "Invalid method: '%s'" +msgstr "Ongeldige methode: '%s'" + +msgid "Invalid name or extension" +msgstr "Ongeldige naam of extensie" + +msgid "Invalid netmask type for IP type" +msgstr "Ongeldige netmasker voor het type IP" + +msgid "Invalid new user value" +msgstr "Ongeldige waarde nieuwe gebruiker" + +msgid "Invalid number" +msgstr "Ongeldig aantal" + +msgid "Invalid package name" +msgstr "Ongeldige pakket naam" + +msgid "Invalid password (empty)" +msgstr "Ongeldige wachtwoord (leeg)" + +msgid "Invalid path" +msgstr "Ongeldig pad" + +msgid "Invalid path append value" +msgstr "Ongeldige waarde voor het toevoegen van pad" + +msgid "Invalid path. Must start with /" +msgstr "Ongeldig pad. Moet starten met /" + +msgid "Invalid plugin name" +msgstr "Ongeldige pluginnaam" + +msgid "Invalid redirect URL" +msgstr "Ongeldige omleid URL" + +#, c-format +msgid "Invalid request: '%s'" +msgstr "Ongeldige aanvraag '%s'" + +msgid "Invalid session timeout or max filesize values" +msgstr "Ongeldige sessie timeout of waarden max bestandgrootte" + +msgid "Invalid subdomain name" +msgstr "Ongeldige naam subdomein" + +msgid "Invalid ticket days. Should be a positive integer." +msgstr "Ongeldige ticket dagen. Moet een positief geheel getal zijn." + +#, c-format +msgid "Invalid ticket days. Too big. Max = %s" +msgstr "Ongeldige ticket dagen. Te veel. Max = %s" + +#, c-format +msgid "Invalid type for '%s': '%s'" +msgstr "Ongeldig type voor '%s': '%s'" + +msgid "Invalid user" +msgstr "Ongeldige gebruiker" + +msgid "Invalid username" +msgstr "Ongeldige gebruikersnaam" + +msgid "Invalid values" +msgstr "Ongeldige waarden" + +msgid "Invalid widget name" +msgstr "Ongeldige widget naam" + +msgid "Is able to select media type via ifmap." +msgstr "Kan mediatype selecteren via ifmap." + +msgid "Issue verifying license" +msgstr "Verifieer de licentie" + +msgid "Issuer" +msgstr "Uitgever" + +msgid "It already exists on the following system(s)" +msgstr "Het bestaat al op de volgende systeem(en)" + +msgid "It has been disabled" +msgstr "Het is uitgeschakeld" + +msgid "It must be a positive integer." +msgstr "Het moet een positief heel getal zijn." + +msgid "It must not be an IP" +msgstr "Het moet geen IP zijn" + +#, c-format +msgid "It's already associated with %s" +msgstr "Het is reeds geassocieerd met %s" + +msgid "Items per page" +msgstr "Items per pagina" + +msgid "Jailed Home" +msgstr "Jailed Home" + +msgid "Jan" +msgstr "Jan" + +msgid "Jul" +msgstr "Jul" + +msgid "Jun" +msgstr "Jun" + +msgctxt "readable size" +msgid "KB" +msgstr "KB" + +msgid "Keep it for future reference." +msgstr "Behoudt het voor toekomstige referentie." + +msgid "Keep the numbers to a realistic value please." +msgstr "Houd de cijfers alstublieft op een realistische waarde." + +msgid "Key" +msgstr "Sleutel" + +msgid "Key Created. Take note of it's value and keep it safe." +msgstr "" +"Sleutel aangemaakt. Noteer de waarde en bewaar het op een veilige plaats." + +msgid "Key ID" +msgstr "Sleutel ID" + +msgid "" +"Key Modified. If you've modified its value, take note of it and keep it safe." +msgstr "" +"Sleutel aangepast. Als u de waarde heeft aangepast, noteer het en bewaar het " +"op een veilige plaats." + +msgid "Key Name" +msgstr "Sleutel Naam" + +msgid "Key Name must be simple: a-zA-Z0-9" +msgstr "Sleutelnaam dient simpel te zijn: az-A-Z0-9" + +msgid "Key Uses Reset" +msgstr "Sleutel Gebruik Reset" + +msgid "Key already exists via fingerprint matching" +msgstr "Sleutel bestaat reeds via vingerafdruk vergelijking" + +msgid "Key contains invalid characters" +msgstr "Sleutel bevat ongeldige karakters" + +msgid "Key is Invalid" +msgstr "Sleutel is ongeldig" + +msgid "Key value must differ from your DirectAdmin password" +msgstr "Sleutelwaarde moet anders zijn dan uw DirectAdmin wachtwoord" + +msgid "Key(s) deleted" +msgstr "Sleutel(s) verwijderd" + +msgid "Keys" +msgstr "Sleutels" + +msgid "Keys listed below" +msgstr "Sleutels hieronder weergegeven" + +msgid "Kill" +msgstr "Stop" + +msgid "Language" +msgstr "Taal" + +#, c-format +msgid "Language has been changed to %s" +msgstr "Taal gewijzigd naar %s" + +msgid "Language has been successfully changed" +msgstr "Taal is succesvol gewijzigd" + +msgid "Last" +msgstr "Laatste" + +msgid "Last Accessed" +msgstr "Laatst Geopend" + +msgid "Last Changed" +msgstr "Laatst gewijzigd" + +#, c-format +msgid "Last Login IP: %s" +msgstr "Laatste Aanmeld IP: %s" + +#, c-format +msgid "Last Login: %s" +msgstr "Laatste Aanmelding: %s" + +msgid "Last Message" +msgstr "Laatste Bericht" + +msgid "Last Modified" +msgstr "Laatst Aangepast" + +msgid "Last Page" +msgstr "Laatste Pagina" + +msgid "Last Tally Completion" +msgstr "Laatste voltooiing van de Telling" + +msgid "Leave DNS" +msgstr "DNS verlaten" + +#, c-format +msgid "Left user on %s's list" +msgstr "Achtergelaten gebruiker op de lijst van %s" + +msgid "Let's Encrypt Certificate Entries" +msgstr "Let's Encrypt Certificaat Vermeldingen" + +msgid "Let's Encrypt is not enabled. You cannot use this option." +msgstr "Let's Encrypt is niet ingeschakeld. U kunt deze optie niet gebruiken." + +msgid "LetsEncrypt files have been cleared" +msgstr "Bestanden van Let's Encrypt zijn geleegd" + +msgid "LetsEncrypt request successful" +msgstr "Aanvraag LetsEncrypt succesvol" + +msgid "LetsEncrypt request successful for" +msgstr "LetsEncrypt verzoek succesvol voor" + +#, c-format +msgid "License is limited to %d Admins/Resellers, and you currently have %d" +msgstr "Licentie is beperkt tot %d Admins/Resellers, je hebt momenteel %d" + +#, c-format +msgid "License is limited to %d accounts, and you currently have %d" +msgstr "Licentie is beperkt tot %d accounts, je hebt momenteel %d" + +#, c-format +msgid "License is limited to %d domains, and you currently have %d" +msgstr "Licentie is beperkt tot %d domeinen, je hebt momenteel %d" + +msgid "License is not valid" +msgstr "Licentie is niet geldig" + +msgid "License limits exceeded" +msgstr "Licentie limieten overschreden" + +msgid "" +"License requires a newer version of DirectAdmin, but auto_update is " +"disabled. Please update your DirectAdmin version." +msgstr "" +"Licentie vereist een nieuwere versie van DirectAdmin maar auto_update is " +"uitgeschakeld. Update uw DirectAdmin-versie." + +msgid "" +"License requires a newer version of DirectAdmin, but your OS is end-of-life. " +"Please install a newer OS to continue." +msgstr "" +"Licentie vereist een nieuwere versie van DirectAdmin, maar uw " +"besturingssysteem wordt niet meer ondersteund. Installeer een nieuwer " +"besturingssysteem om door te gaan." + +msgid "License verified" +msgstr "Licentie geverifieerd" + +msgid "Licensing / Updates" +msgstr "Licenties / Updates" + +msgid "Limit Notice" +msgstr "Beperk Notificatie" + +msgid "Limit is not a number" +msgstr "Limiet is geen getal" + +msgid "Link" +msgstr "Link" + +msgid "Link in Background" +msgstr "Link op achtergrond" + +msgid "Linked IPs" +msgstr "Gekoppelde IP's" + +msgid "List" +msgstr "Lijst" + +msgid "List Admins" +msgstr "Lijst van Admins" + +msgid "List Configurations Saved" +msgstr "Lijst configuraties opgeslagen" + +msgid "List Resellers" +msgstr "Toon Resellers" + +msgid "List Users" +msgstr "Toon Gebruikers" + +msgid "List of Users is too long" +msgstr "Lijst met gebruikers is te lang" + +#, c-format +msgid "Listname must be %d characters or less" +msgstr "Lijst naam moet %d tekens of minder zijn" + +msgid "Listname must be all lower case letters" +msgstr "Lijstnaam moet allemaal kleine letters zijn" + +msgid "Load Average" +msgstr "Gemiddelde Belasting" + +msgid "Local Data" +msgstr "Lokale Gegevens" + +msgid "Local Default" +msgstr "Lokale Standaard" + +msgid "Local Mail" +msgstr "Lokale Mail" + +msgid "Local URL Path" +msgstr "Lokaal URL pad" + +msgid "Log" +msgstr "Log" + +msgid "Log Entry" +msgstr "Logboek Invoer" + +msgid "Log Usage" +msgstr "Logboek Gebruik" + +msgid "Log Viewer" +msgstr "Bekijk Logboek" + +msgid "Login" +msgstr "Aanmelden" + +msgid "Login Failures" +msgstr "Aanmeldings Fouten" + +msgid "Login History" +msgstr "Aanmelding Geschiedenis" + +msgid "Login Keys" +msgstr "Aanmeldings Sleutels" + +msgid "Login Keys are disabled" +msgstr "Login Keys zijn uitgeschakeld" + +msgid "Login Page" +msgstr "Aanmeld Pagina" + +#, c-format +msgid "Login as %s" +msgstr "Aanmelden als %s" + +msgid "Logout" +msgstr "Afmelden" + +msgid "Low" +msgstr "Laag" + +msgctxt "readable size" +msgid "MB" +msgstr "MB" + +msgid "MX Records" +msgstr "MX Records" + +msgid "MX Template set" +msgstr "MX Sjabloon instelling" + +msgid "MX Templates are disabled" +msgstr "MX Sjablonen zijn uitgeschakeld" + +msgid "MX priority should be an positive number" +msgstr "MX prioriteit moet een positief getal zijn" + +msgid "Mail Queue Administration" +msgstr "Beheer van e-mail wachtrij" + +msgid "Mailing List" +msgstr "Mailing Lijst" + +msgid "Mailing Lists" +msgstr "Mailing Lijsten" + +msgid "Main" +msgstr "Hoofd" + +msgid "Main Domain ..." +msgstr "Hoofd Domein ..." + +#, c-format +msgid "Major Error: Error finding home for %s" +msgstr "Grote fout: fout bij het vinden van home voor %s" + +msgid "Make sure 'unit' is running" +msgstr "Zorg ervoor dat 'unit' draait" + +msgid "Make sure that the values passed are valid for their type" +msgstr "Zorg ervoor dat de doorgegeven waarden geldig zijn voor hun type" + +msgid "Manage Reseller Packages" +msgstr "Beheer Reseller Pakketten" + +msgid "Manage Tickets" +msgstr "Beheer Tickets" + +msgid "Manage User Backups" +msgstr "Beheer Gebruikers Backups" + +msgid "Manage User Packages" +msgstr "Beheer gebruikers pakketten" + +#, c-format +msgid "Manually by %s" +msgstr "Handmatig door %s" + +msgid "Mar" +msgstr "Mar" + +msgid "Mark as read" +msgstr "Markeer als gelezen" + +msgid "Master of a load balancing bundle." +msgstr "Master van een load balancing bundel." + +msgid "Max Tasks that may be created in the unit" +msgstr "Max. Taken die in de unit kunnen worden gemaakt" + +msgid "Max Usage (Meg)" +msgstr "Max Gebruik (Meg)" + +msgid "Max disk read operations per second." +msgstr "Max. Schijf leesbewerkingen per seconde." + +msgid "Max disk write operations per second." +msgstr "Max. Schijf schrijfbewerkingen per seconde." + +msgid "Max limit User can set per E-Mail" +msgstr "Maximale limiet die gebruiker per e-mail kan instellen" + +msgid "Max number of uses must be a valid number (no decimals)" +msgstr "" +"Max. aantal keren van gebruik, moet een geldig getal zijn (geen decimalen)" + +msgid "Max rate data can be read from a disk." +msgstr "Gegevens die met maximale snelheid kunnen worden gelezen van schijf." + +msgid "Max rate data can be written to a disk." +msgstr "" +"Gegevens die met maximale snelheid naar een schijf kunnen worden geschreven." + +msgid "Maximum Usage" +msgstr "Maximaal Gebruik" + +#, c-format +msgid "Maximum number of files listed (%d). Suppressing further output." +msgstr "" +"Maximum aantal vermelde bestanden (%d). Verdere output wordt niet " +"weergegeven." + +#, fuzzy, c-format +#| msgid "The maximum value is %d" +msgid "Maximum value: %s=%s" +msgstr "De maximale waarde is %d" + +msgid "May" +msgstr "Mei" + +msgid "Medium" +msgstr "Medium" + +msgid "Meg" +msgstr "Meg" + +msgid "Memory High" +msgstr "Geheugen Hoog" + +msgid "Memory Usage" +msgstr "Geheugen Gebruik" + +msgid "Message #" +msgstr "Bericht #" + +msgid "Message Reset" +msgstr "Bericht Reset" + +msgid "Message System" +msgstr "Bericht Systeem" + +msgid "Message Type" +msgstr "Bericht Type" + +msgid "Message is being sent" +msgstr "Bericht wordt verzonden" + +msgid "Message(s) removed" +msgstr "Bericht(en) verwijderd" + +msgid "Messages Updated" +msgstr "Berichten Bijgewerkt" + +msgid "Mime Types" +msgstr "Mime Typen" + +msgid "MimeType" +msgstr "MimeType" + +msgid "Minute" +msgstr "Minuut" + +msgid "Missing closing bracket in zone line." +msgstr "Sluitingshaakje ontbreekt in zone regel." + +msgid "Missing open bracket in zone line." +msgstr "Ontbrekende openhaak in zone regel." + +msgid "Missing template" +msgstr "Ontbrekende sjabloon" + +msgid "ModSecurity Flags" +msgstr "ModSecurity Flags" + +msgid "ModSecurity Rules" +msgstr "ModSecurity Regels" + +msgid "ModSecurity Rules Saved" +msgstr "ModSecurity Regels opgeslagen" + +msgid "ModSecurity Skipped Rules" +msgstr "ModSecurity overgeslagen regels" + +msgid "ModSecurity is not enabled" +msgstr "ModSecurity is niet ingeschakeld" + +msgid "Modify" +msgstr "Bewerken" + +msgid "Modify Password" +msgstr "Wachtwoord wijzigen" + +msgid "Month" +msgstr "Maand" + +msgid "More Info" +msgstr "Meer Info" + +msgid "Morning" +msgstr "Morgen" + +msgid "Mounted on" +msgstr "Gekoppeld aan" + +msgid "Move Clipboard Files here" +msgstr "Verplaats klembord bestanden hierheen" + +msgid "Move Users between Resellers" +msgstr "Verplaats Gebruikers tussen Resellers" + +msgid "Move any existing files to trash?" +msgstr "Bestaande bestanden naar de prullenbak verplaatsen?" + +msgid "Move to Trash" +msgstr "Verplaats naar de prullenbak" + +msgid "Multi-Server Setup" +msgstr "Multi-Server installatie" + +msgid "" +"Must provide a mime type or handler name and a single extention. eg: \"text/" +"html\" or \"cgi-script\" and \"html\"" +msgstr "" +"U moet een mime-type of handler naam en een (enkele) extensie opgeven. bijv: " +"\"text / html\" of \"cgi-script\" en \"html\"" + +msgid "Must select more than zero LetsEncrypt entries." +msgstr "U moet minimaal 1 LetsEncrypt vermelding selecteren." + +#, c-format +msgid "Must use letsencrypt=1 for options. letsencrypt=%d is currently set." +msgstr "" +"U moet letsencrypt =1 gebruiken voor opties. letsencrypt =%d is momenteel " +"ingesteld." + +msgid "MySQL is not enabled on this server" +msgstr "MySQL is niet ingeschakeld op deze server" + +msgid "NGINX Unit" +msgstr "NGINX Unit" + +msgid "" +"NOTE: You are using the server IP, so your CA Root Certificate has been " +"saved to" +msgstr "" +"OPMERKING: U gebruikt het IP adres van de server, dus uw CA-basiscertificaat " +"is opgeslagen in" + +msgid "" +"NOTE: You are using the server IP, so your certificate and key have been " +"saved to" +msgstr "" +"OPMERKING: U gebruikt het server IP, dus uw certificaat en sleutel zijn " +"opgeslagen in" + +msgid "Name" +msgstr "Naam" + +msgid "Name Server 1" +msgstr "Naam Server 1" + +msgid "Name Server 2" +msgstr "Naam Server 2" + +msgid "Name Servers" +msgstr "Naam Servers" + +msgid "Name must only contain letters, spaces and/or periods" +msgstr "Naam mag alleen letters, spaties en/of punten bevatten" + +msgid "Nameserver" +msgstr "Naamserver" + +msgid "Nameservers deleted" +msgstr "Nameservers verwijderd" + +msgid "Nameservers have been changed" +msgstr "Naamservers zijn gewijzigd" + +msgid "Namesevers have been changed." +msgstr "Naamservers zijn gewijzigd." + +msgid "Netmask" +msgstr "Netmask" + +msgid "Never" +msgstr "Nooit" + +#, c-format +msgid "New License is invalid: %s" +msgstr "Nieuwe licentie is ongeldig:%s" + +#, c-format +msgid "New Secret Set: %s" +msgstr "Nieuwe Geheime Set:%s" + +msgid "New password isn't different" +msgstr "Nieuw wachtwoord is niet anders dan de huidige" + +#, c-format +msgid "Newly installed key is %s-bit" +msgstr "De nieuw geïnstalleerde sleutel is %s-bit" + +msgid "Next Retry" +msgstr "Volgende Poging" + +msgid "Nginx Template" +msgstr "Nginx Sjabloon" + +msgid "Nginx is not enabled" +msgstr "Nginx is niet ingeschakeld" + +msgid "NginxUnit is not enabled or not running" +msgstr "NginxUnit is niet ingeschakeld of werkt niet" + +msgid "No" +msgstr "Nee" + +msgid "No Awstats" +msgstr "Geen Awstats" + +msgid "No Data to Show" +msgstr "Geen gegevens om weer te geven" + +msgid "No IPs selected" +msgstr "Geen IP adressen geselecteerd" + +#, c-format +msgid "No ListFile in container at route position %lld" +msgstr "Geen ListFile in container op route positie %lld" + +msgid "No Send class set" +msgstr "Geen Verzend klasse ingesteld" + +msgid "No User Data" +msgstr "Geen gebruiker gegevens" + +msgid "No arp protocol, L2 destination address not set." +msgstr "Geen ARP-protocol, L2-bestemmingsadres is niet ingesteld." + +msgid "No changes have been made" +msgstr "Er zijn geen wijzigingen aangebracht" + +msgid "No changes were needed. Skipping write." +msgstr "Wijzigingen waren niet nodig. Schrijven wordt overgeslagen." + +msgid "No colors have been selected" +msgstr "Er zijn geen kleuren geselecteerd" + +#, c-format +msgid "No container at route position %lld" +msgstr "Geen container op route positie %lld" + +msgid "No events for this period." +msgstr "Geen gebeurtenissen voor deze periode." + +msgid "No files have been selected for upload." +msgstr "Er zijn geen bestanden geselecteerd om te uploaden." + +msgid "No free IPs found" +msgstr "Geen vrije IP adressen gevonden" + +msgid "No global IPs found" +msgstr "Geen globale IP adressen gevonden" + +msgid "No keys have been selected" +msgstr "Er zijn geen sleutels geselecteerd" + +msgid "No keys selected" +msgstr "Geen sleutels geselecteerd" + +msgid "No options were selected" +msgstr "Er zijn geen opties geselecteerd" + +msgid "No passwd entries provided." +msgstr "Geen wachtwoordinvoer opgegeven." + +msgid "No paths were provided." +msgstr "Er zijn geen paden opgegeven." + +msgid "No shared IPs found" +msgstr "Geen gedeelde IP adressen gevonden" + +msgid "No such username in the request list. Your request may have expired." +msgstr "" +"Geen dergelijke gebruikersnaam in de lijst met verzoeken. Uw aanvraag is " +"mogelijk verlopen." + +msgid "No such username in the request list. Your request may have expired." +msgstr "" +"Geen dergelijke gebruikersnaam in de lijst met verzoeken. Uw aanvraag is " +"mogelijk verlopen." + +msgid "No text provided" +msgstr "Geen tekst opgegeven" + +msgid "No vacation message set" +msgstr "Geen vakantie bericht ingesteld" + +msgid "Not a valid IP Address" +msgstr "Geen geldig IP adres" + +#, c-format +msgid "" +"Not enough IP's to create nameservers. It requires at least %d free, un-" +"assigned ips." +msgstr "" +"Niet genoeg IP's om naamservers aan te maken. Vereist is minimaal %d vrije, " +"niet-toegewezen ips." + +msgid "Not setting up Mail SNI." +msgstr "Mail SNI niet instellen." + +msgid "Not yet generated" +msgstr "Nog niet gegenereerd" + +msgid "Not yet signed" +msgstr "Nog niet ondertekend" + +#, c-format +msgid "" +"Note: the previous Let's Encrypt config is still set to renew in %d days." +msgstr "" +"Opmerking: de vorige Let's Encrypt configuratie is nog steeds ingesteld om " +"over %d dagen te vernieuwen." + +msgid "Nothing" +msgstr "Niets" + +#, c-format +msgid "Notification that Login Key %s has been successfully created by %s" +msgstr "Melding dat Login Key %s met succes is aangemaakt door %s" + +msgid "Notified" +msgstr "Op de hoogte gesteld" + +msgid "Nov" +msgstr "Nov" + +msgid "Null values" +msgstr "Null waarden" + +#, c-format +msgid "Number %s=%s is out of range (required: %d-%d)" +msgstr "Nummer %s =%s valt buiten bereik (vereist:%d-%d)" + +msgid "Number of Users" +msgstr "Aantal gebruikers" + +msgid "OK" +msgstr "OK" + +msgid "Oct" +msgstr "Okt" + +msgid "Off" +msgstr "Uit" + +#, c-format +msgid "Old %s-bit key has been backed up to %s" +msgstr "Er is een back-up gemaakt van de oude %s-bit-sleutel naar %s" + +msgid "Old password incorrect" +msgstr "Oud wachtwoord is onjuist" + +msgid "Older than" +msgstr "Ouder dan" + +msgid "On" +msgstr "Aan" + +msgid "One (or more) of the selected IPs are not currently in your list" +msgstr "" +"Een (of meer) van de geselecteerde IP adressen staan momenteel niet in uw " +"lijst" + +#, c-format +msgid "" +"One-Click login requires does not support webmail_link=%s. Try " +"webmail_link=roundcube." +msgstr "" +"webmail_link =%s ondersteund geen één klik aanmelden. Probeer webmail_link = " +"roundcube." + +msgid "One-Time Login URL Created" +msgstr "Eenmalige Aanmeld URL Aangemaakt" + +#, c-format +msgid "Only %d of the requested %d global IPs were assigned." +msgstr "Slechts %d van de aangevraagde %d globale IP's zijn toegewezen." + +msgid "Only 'Additional' IPs can be removed from a User using this method" +msgstr "" +"Met deze methode kunnen alleen de 'extra' IP's van een gebruiker worden " +"verwijderd" + +msgid "Only Admin accounts can save settings" +msgstr "Alleen Admins kunnen instellingen opslaan" + +msgid "Only Admins can reset the usage count" +msgstr "Alleen Admins kunnen de verbruiks telling opnieuw instellen" + +msgid "Only Admins may run this request" +msgstr "Alleen Admins mogen dit verzoek uitvoeren" + +msgid "" +"Only provide one extension at a time. eg: \"jpg\" and NOT \"jpg jpeg jpe\"" +msgstr "" +"Geef slechts één extensie tegelijk op. bijv: \"jpg\" en NIET \"jpg jpeg jpe\"" + +msgid "Only the location of the route can be renamed" +msgstr "Alleen de locatie van de route kan worden hernoemd" + +msgid "Only use wildcard on domains who currently have functional local DNS" +msgstr "" +"Gebruik joker (wildcard) tekens alleen voor domeinen die momenteel een " +"functionele lokale DNS hebben" + +msgid "Open" +msgstr "Open" + +msgid "Open Basedir disabled on selected domains" +msgstr "Open Basedir uitgeschakeld op geselecteerde domeinen" + +msgid "Open Basedir enabled on selected domains" +msgstr "Open Basedir ingeschakeld op geselecteerde domeinen" + +msgid "Open+Confirm" +msgstr "Open+Bevestigen" + +msgid "Operation" +msgstr "Operatie" + +msgid "Optimize" +msgstr "Optimaliseren" + +#, c-format +msgid "Option '%s' has already been set" +msgstr "Optie '%s' is al ingesteld" + +msgid "Options" +msgstr "Opties" + +msgid "Options changed successfully" +msgstr "Opties zijn succesvol gewijzigd" + +msgid "Order" +msgstr "Volgorde" + +msgid "Order (when the first sort values are equal)" +msgstr "Volgorde (als de eerste sorteerwaarden gelijk zijn)" + +msgid "Original Package" +msgstr "Origineel Pakket" + +msgid "Other" +msgstr "Andere" + +msgid "Other Disk Usage" +msgstr "Ander schijfgebruik" + +msgid "Other Usage" +msgstr "Ander Gebruik" + +msgid "Outlook Settings" +msgstr "Outlook Instellingen" + +msgid "Overview" +msgstr "Overzicht" + +msgid "Owner" +msgstr "Eigenaar" + +#, c-format +msgid "Owner of global IP swapped to Admin %s" +msgstr "Eigenaar van de Globaal IP adres is overgezet naar de Admin %s" + +msgid "PHP" +msgstr "PHP" + +msgid "PHP Configuration" +msgstr "PHP Configuratie" + +msgid "PHP Script Name" +msgstr "PHP Script Naam" + +msgid "PHP Version Selector" +msgstr "PHP Versie Kiezer" + +msgid "PHP versions saved" +msgstr "PHP versies opgeslagen" + +msgid "PID" +msgstr "PID" + +#, c-format +msgid "PID '%s' is not a number" +msgstr "PID '%s' is geen nummer" + +msgid "POP Email Accounts" +msgstr "POP Email Accounts" + +msgid "POP/IMAP Server" +msgstr "POP/IMAP Server" + +msgid "Package" +msgstr "Pakket" + +#, c-format +msgid "Package '%s' already exists" +msgstr "Pakket '%s' bestaat al" + +#, c-format +msgid "Package '%s' does not exist" +msgstr "Pakket '%s' bestaat niet" + +#, c-format +msgid "Package '%s' is not in your list" +msgstr "Pakket '%s' staat niet in uw lijst" + +msgid "Package not found" +msgstr "Pakket niet gevonden" + +msgid "Page" +msgstr "Pagina" + +#, c-format +msgid "Parent directory %s was created." +msgstr "Bovenliggend map %s is gemaakt." + +msgid "Parsing Error. Check logs" +msgstr "Parseerfout. Controleer de logboeken" + +msgid "Password" +msgstr "Wachtwoord" + +msgid "Password Changed" +msgstr "Wachtwoord Veranderd" + +#, c-format +msgid "Password Changed: %s" +msgstr "Wachtwoord gewijzigd: %s" + +msgid "Password Not Changed" +msgstr "Wachtwoord niet gewijzigd" + +msgid "Password Protected Directories" +msgstr "Met een wachtwoord beveiligde mappen" + +msgid "Password Saved!" +msgstr "Wachtwoord opgeslagen!" + +msgid "Password cannot contain single quotes" +msgstr "Wachtwoord mag geen enkele aanhalingstekens bevatten" + +msgid "Password is not valid" +msgstr "Wachtwoord is niet geldig" + +msgid "Password is too long" +msgstr "Wachtwoord is te lang" + +msgid "Password is too long for the database" +msgstr "Wachtwoord is te lang voor de database" + +msgid "Password is too short" +msgstr "Wachtwoord is te kort" + +#, c-format +msgid "Password is too short (%d). Use at least %d characters" +msgstr "Wachtwoord is te kort (%d). Gebruik minimaal %d tekens" + +#, c-format +msgid "Password must be more than %d characters" +msgstr "Wachtwoord moet meer dan %d tekens bevatten" + +msgid "Password/Quota" +msgstr "Wachtwoord/Quotum" + +msgid "Password:" +msgstr "Wachtwoord:" + +msgid "Passwords do not match" +msgstr "Wachtwoorden komen niet overeen" + +msgid "Passwords do not match or are invalid" +msgstr "Wachtwoorden komen niet overeen of zijn ongeldig" + +msgid "Path" +msgstr "Pad" + +#, c-format +msgid "Path %s does not exist or is not accessible by the %s user." +msgstr "Pad %s bestaat niet of is niet toegankelijk voor de %s gebruiker." + +#, c-format +msgid "" +"Path '%s' already exists before User creation. Please remove/rename this " +"path first." +msgstr "" +"Pad '%s' bestond al voordat de gebruiker werd aangemaakt. Verwijder/hernoem " +"dit pad eerst." + +msgid "Path does not exist" +msgstr "Pad bestaat niet" + +#, c-format +msgid "Path must start with '%s'" +msgstr "Pad moet beginnen met '%s'" + +msgid "Path must start with a forward slash (/)" +msgstr "Pad moet beginnen met een schuine streep (/)" + +msgid "Paths Unblocked" +msgstr "Paden deblokkeerd" + +msgid "Paths must be within your home directory" +msgstr "Paden moeten in uw home folder staan" + +msgid "Percent" +msgstr "Procent" + +#, no-c-format +msgid "Percent must end with a % character" +msgstr "Het percentage moet eindigen met een % c teken" + +#, c-format +msgid "Percent of CPU Core. >100% for more cores." +msgstr "Percentage CPU kern. >100% f of meer kernen." + +#, c-format +msgid "Percentage must be between %d and %d, inclusive" +msgstr "Het percentage moet tussen %d en %d liggen, inclusief" + +msgid "Perl Modules" +msgstr "Perl Modules" + +msgid "Perm." +msgstr "Perm." + +msgid "Permissions set" +msgstr "Machtigingen ingesteld" + +msgid "Php Settings" +msgstr "Php Instellingen" + +msgid "Php is not enabled" +msgstr "Php is niet ingeschakeld" + +msgid "Please answer this Security Question" +msgstr "Beantwoord deze beveiligings vraag" + +#, c-format +msgid "" +"Please check the zone for %s to ensure the nameserver A records are correct." +msgstr "" +"Controleer de zone voor %s om er zeker van te zijn dat de naamserver A " +"records correct zijn." + +msgid "Please confirm you wish to delete your DNSSEC data" +msgstr "Bevestig dat u uw DNSSEC gegevens wilt verwijderen" + +#, c-format +msgid "Please contact %s for more info." +msgstr "Neem contact op met %s voor meer info." + +msgid "Please enter your Username and Password" +msgstr "Voer uw gebruikersnaam en wachtwoord in" + +msgid "Please generate a secret before adding the scratch codes" +msgstr "Genereer een geheim woord voordat u de krascodes toevoegt" + +msgid "Please pick only one skin to apply" +msgstr "Kies slechts één thema om toe te passen" + +#, c-format +msgid "Please provide an '%s'" +msgstr "Geef een '%s' op" + +msgid "Please redirect accordingly" +msgstr "Gelieve overeenkomstig om te leiden" + +#, c-format +msgid "Please see this URL and check for curl exit code '(%d)': %s" +msgstr "Raadpleeg deze URL en controleer op curl exit code '(%d)':%s" + +msgid "Please select 1 Security Question" +msgstr "Kies 1 beveiligings vraag svp" + +msgid "Please select 1 domain to be your default domain" +msgstr "Selecteer 1 domein als uw standaard domein" + +msgid "Please select at least one User" +msgstr "Selecteer ten minste één gebruiker" + +msgid "Please select at least one domains" +msgstr "Selecteer ten minste één domein" + +msgid "Please select at least one file" +msgstr "Selecteer minimaal één bestand" + +msgid "Please select at least one item" +msgstr "Selecteer minimaal één item" + +msgid "Please select at least one package" +msgstr "Selecteer ten minste één pakket" + +msgid "Please select at least one widget" +msgstr "Selecteer ten minste één widget" + +msgid "Please select more than zero files to extract from the archive" +msgstr "Selecteer minimaal een bestand om uit het archief te halen" + +msgid "Please select one or more Databases" +msgstr "Selecteer een of meer databases" + +msgid "Please select only 1 cronjob to edit" +msgstr "Selecteer slechts 1 cronjob om te bewerken" + +#, c-format +msgid "Please set a limit between 1 and %d" +msgstr "Stel een limiet in tussen 1 en %d" + +msgid "Please specify 'who' to get" +msgstr "Geef aan 'wie' u wilt hebben" + +msgid "Please specify add or delete" +msgstr "Specificeer toevoegen of verwijderen" + +#, c-format +msgid "Please unlink all IPs from '%s' prior to deleting it." +msgstr "Ontkoppel alle IP adressen van '%s' voordat u deze verwijdert." + +msgid "Please use all lower case characters in the username" +msgstr "Gebruik alleen kleine letters in de gebruikersnaam" + +msgid "Plugin Manager" +msgstr "Plugin Beheer" + +msgid "Plugin Uploaded" +msgstr "Plugin Geüpload" + +msgid "Plugin(s) Installed" +msgstr "Plugin(s) Geïnstalleerd" + +msgid "Plugin(s) Un-Installed" +msgstr "Plugin(s) Verwijderd" + +msgid "Plugin(s) Updated" +msgstr "Plugin(s) Bijgewerkt" + +msgid "Plugins" +msgstr "Plugins" + +#, c-format +msgid "Pointer '%s' does not belong to you." +msgstr "Pointer '%s' is niet van jou." + +msgid "Pop" +msgstr "Pop" + +msgid "Post Scripts" +msgstr "Post Scripts" + +msgid "Post scripts" +msgstr "Post scripts" + +msgid "Pre-backup hard-link check" +msgstr "Controle van directe koppelingen vóór de backup" + +msgid "Preparing 'domains' data" +msgstr "Voorbereiden van 'domeinen' gegevens" + +msgid "Preparing data (no 'domains')" +msgstr "Gegevens voorbereiden (geen 'domeinen')" + +msgid "Present" +msgstr "Vandaag" + +msgid "" +"Preserving the web data only applies to /domains/domain.com. Other areas " +"like E-Mail data will not be preserved." +msgstr "" +"Het bewaren van de webgegevens is alleen van toepassing op /domein/domein." +"com. Andere gebieden, zoals e-mailgegevens, worden niet bewaard." + +msgid "Print" +msgstr "Druk af" + +msgid "Priority" +msgstr "Prioriteit" + +msgid "Private Directory" +msgstr "Privé Map" + +msgid "Privileges" +msgstr "Privileges" + +#, c-format +msgid "Process ID %d is not 'dataskq'. It's '%s'" +msgstr "Proces-ID %d is geen 'dataskq'. Het is '%s'" + +msgid "Process Monitor" +msgstr "Proces Monitor" + +msgid "Process is running" +msgstr "Proces loopt" + +msgid "Process is stopped" +msgstr "Proces is gestopt" + +msgid "Processor Name" +msgstr "Processor Naam" + +msgid "Processor Speed (MHz)" +msgstr "Processor Snelheid (MHz)" + +msgid "Progress" +msgstr "Voortgang" + +msgid "Protect" +msgstr "Beveiligen" + +msgid "Protected directory name contains invalid characters. Keep it simple" +msgstr "Beschermde map naam bevat ongeldige tekens. Hou het simpel" + +msgid "" +"Protecting directories has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Het beveiligen van mappen is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Provide either an IP, an IP range, domain, or wildcard domain." +msgstr "Geef een IP-, IP bereik, domein of wildcard domein op." + +msgid "Provided password is not correct." +msgstr "Het opgegeven wachtwoord is niet correct." + +msgid "Provided value is not a Username or Email address" +msgstr "De opgegeven waarde is geen gebruikers naam of e-mail adres" + +msgid "Provided value is not valid." +msgstr "De opgegeven waarde is niet geldig." + +msgid "Proxy socket address" +msgstr "Proxy socket adres" + +msgid "Publish" +msgstr "Publiceren" + +msgid "Purge" +msgstr "Opschonen" + +msgid "Purge Archives" +msgstr "Archieven Opschonen" + +msgid "Purge From" +msgstr "Opschonen Van" + +#, c-format +msgid "Purge in %s" +msgstr "Opschonen in %s" + +msgid "Ranges must be put in \"quotes\"" +msgstr "Bereiken moeten tussen \"aanhalingstekens\" worden geplaatst" + +msgid "Re-sign your zone." +msgstr "Teken uw zone opnieuw." + +#, c-format +msgid "Read error with %s: %s" +msgstr "Leesfout met %s: %s" + +msgid "Reason:" +msgstr "Reden:" + +msgid "Reboot" +msgstr "Herstart" + +msgid "Receive all multicast packets." +msgstr "Ontvang alle multicast pakketten." + +msgid "Received" +msgstr "Ontvangen" + +msgid "Received Emails" +msgstr "Ontvangen e-mails" + +msgid "Reconfiguration Error" +msgstr "Herconfiguratie Fout" + +msgid "Record Added" +msgstr "Record toegevoegd" + +msgid "Record Edited" +msgstr "Record Gewijzigd" + +msgid "Records Deleted" +msgstr "Records verwijderd" + +msgid "Recursive" +msgstr "Recursief" + +#, c-format +msgid "Recursive search at max depth on %s" +msgstr "Recursief zoeken op maximale diepte op %s" + +msgid "Recursively" +msgstr "Recursief" + +msgid "" +"Recursively resetting ownership has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Het recursief resetten van de eigenaar is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Redirect Added" +msgstr "Omleiding Toegevoegd" + +msgid "Redirect URL" +msgstr "Omleiding URL" + +msgid "Redirect(s) deleted" +msgstr "Omleiding(en) verwijderd" + +msgid "Refresh" +msgstr "Vernieuwen" + +msgid "Related" +msgstr "Verwant" + +msgid "Reload" +msgstr "Ververs" + +msgid "Reload requested" +msgstr "Herladen aangevraagd" + +msgid "Remote Mail" +msgstr "Externe e-mail" + +msgid "Remove" +msgstr "Verwijderen" + +msgid "Remove DNS records for IP(s)" +msgstr "DNS records voor IP(s) verwijderen" + +msgid "Remove DNSSEC" +msgstr "Verwijder DNSSEC" + +msgid "Remove Directory Contents" +msgstr "Verwijder de inhoud van de map" + +msgid "Remove From Skip List" +msgstr "Verwijderen uit Overspring Lijst" + +msgid "Remove from reseller" +msgstr "Verwijder van reseller" + +#, c-format +msgid "Removed user from %s's list" +msgstr "Gebruiker verwijderd uit de lijst van %s" + +msgid "Rename" +msgstr "Hernoem" + +msgid "Rename Domain" +msgstr "Domeinnaam Hernoemen" + +msgid "" +"Renaming files has been disabled with the filemanager_disable_features option" +msgstr "" +"Het hernoemen van bestanden zijn uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Repair" +msgstr "Herstel" + +msgid "Replies" +msgstr "Reacties" + +msgid "Reply" +msgstr "Antwoord" + +msgid "Reply Sent" +msgstr "Antwoord verzonden" + +msgid "Report of false password reset request" +msgstr "Rapport van valse verzoeken om een wachtwoorden opnieuw in te stellen" + +msgid "Report sent to the server admins" +msgstr "Rapport verzonden naar de server admins" + +msgid "Request added to task.queue" +msgstr "Verzoek toegevoegd aan task.queue" + +#, c-format +msgid "Request: %s" +msgstr "Verzoek: %s" + +#, c-format +msgid "Requested LetsEncrypt value of '%s' is not an allowed value." +msgstr "Aangevraagde LetsEncrypt waarde van '%s' is geen toegestane waarde." + +#, c-format +msgid "Requested filesize (%lld) exceeds the maxfilesize value (%lld)" +msgstr "" +"Gevraagde bestandsgrootte (%lld) overschrijdt de maxfilesize-waarde (%lld)" + +#, c-format +msgid "Required: '%s' or '%s'" +msgstr "Verplicht: '%s' of '%s'" + +msgid "Reseller" +msgstr "Reseller" + +msgid "Reseller Bandwidth" +msgstr "Bandbreedte van Reseller" + +msgid "Reseller History" +msgstr "Reseller Geschiedenis" + +msgid "Reseller IP Management" +msgstr "IP beheer van Reseller" + +msgid "Reseller Plugins" +msgstr "Reseller Plugins" + +msgid "Reseller Quota" +msgstr "Reseller Quota" + +msgid "Reseller Resource Limits" +msgstr "Beperkingen van Reseller bronnen" + +msgid "Reseller Statistics" +msgstr "Reseller Statistieken" + +msgid "Reseller created" +msgstr "Reseller aangemaakt" + +msgid "Reseller deleted" +msgstr "Reseller verwijderd" + +msgid "Reseller is assigned zero IP's. Cannot create a domain without an ip." +msgstr "Reseller heeft 0 IP's toegewezen. Kan geen domein maken zonder een ip." + +#, c-format +msgid "Reseller only got %s of their %s ip." +msgid_plural "Reseller only got %s of their %s ips." +msgstr[0] "Reseller heeft slechts %s van zijn %s ip." +msgstr[1] "Reseller heeft slechts %s van zijn %s ips." + +msgid "Reseller's IP" +msgstr "Reseller's IP" + +msgid "Reseller::add_widgets_to_acccounts: Invalid widget level" +msgstr "Reseller :: add_widgets_to_acccounts: ongeldig widget niveau" + +msgid "Reseller::delete_widgets_from_accounts: Invalid widget level" +msgstr "Reseller :: delete_widgets_from_accounts: ongeldige widget niveau" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset Owner" +msgstr "Reset Eigenaar" + +msgid "Reset Ownership" +msgstr "Eigenaar Opnieuw Instellen" + +msgid "Reset Today" +msgstr "Reset Vandaag" + +msgid "Reset Uses" +msgstr "Reset Gebruik" + +msgid "" +"Resetting file ownership has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Het resetten van bestandseigendom is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Resources allocated." +msgstr "Toegewezen bronnen." + +msgid "Restart" +msgstr "Herstart" + +msgid "Restore" +msgstr "Herstellen" + +msgid "Restore Complete!" +msgstr "Herstel voltooid!" + +#, c-format +msgid "Restore Error with Nginx Unit: %s" +msgstr "Herstel fout met NGINX Unit: %s" + +#, c-format +msgid "" +"Restore of account '%s' to creator '%s' has been denied, as this account " +"already exists under the control of creator '%s'" +msgstr "" +"Herstel van account '%s' naar eigenaar '%s' is geweigerd, aangezien dit " +"account al bestaat onder controle van eigenaar '%s'" + +msgid "Restore will run in the background" +msgstr "Herstel wordt op de achtergrond uitgevoerd" + +msgid "Restores added to Queue" +msgstr "Herstel toegevoegd aan wachtrij" + +msgid "Restoring Databases" +msgstr "Databasen Herstellen" + +msgid "Restoring Domains Data" +msgstr "Domeingegevens herstellen" + +msgid "Restoring E-Mail Data" +msgstr "E-mailgegevens herstellen" + +msgid "Restoring E-Mail Settings" +msgstr "E-mail instellingen herstellen" + +msgid "Restoring Extra Admin Data" +msgstr "Herstellen Extra Gegevens van de Admin" + +msgid "Restoring Extra Reseller Data" +msgstr "Herstellen Extra Gegevens van de Reseller" + +msgid "Restoring Extra User Data" +msgstr "Herstellen Extra Gegevens van de Gebruiker" + +msgid "Restoring FTP" +msgstr "FTP Herstellen" + +msgid "Restoring extra E-Mail items" +msgstr "Extra e-mail items herstellen" + +msgid "" +"Restoring files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Het herstellen van bestanden is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Result" +msgstr "Resultaat" + +msgid "Result of file copy" +msgstr "Resultaat van het kopiëren van bestanden" + +msgid "Result of file move" +msgstr "Resultaat van de bestand verplaatsing" + +msgid "Results" +msgstr "Resultaat" + +msgid "Retries" +msgstr "Nieuwe pogingen" + +msgid "Retry" +msgstr "Probeer het opnieuw" + +#, c-format +msgid "Return code 3XX(%d) requires a location" +msgstr "Retour code 3XX(%d) vereist een locatie" + +#, c-format +msgid "Return code: %s" +msgstr "Retour code:%s" + +msgid "Return with httpd code" +msgstr "Retour met http code" + +msgid "" +"Revoking all privileges would delete the User from the mysql.db. Please " +"grant at least 1 privilege." +msgstr "" +"Door alle rechten in te trekken, wordt de gebruiker verwijderd uit mysql.db. " +"Geef ten minste één privilege." + +msgid "Rewrite Apache" +msgstr "Herschrijf Apache" + +msgid "RoundCube missing direct_login option. Please re-install RoundCube." +msgstr "RoundCube mist de direct_login optie. Installeer RoundCube opnieuw." + +#, c-format +msgid "Route '%s' does not end with '%s'" +msgstr "Route '%s' eindigt niet met '%s'" + +msgid "Rules Reset" +msgstr "Regels resetten" + +msgid "Run Now" +msgstr "Nu uitvoeren" + +msgid "Running" +msgstr "Draait" + +msgid "SMTP Log" +msgstr "SMTP Log" + +msgid "SMTP Server" +msgstr "SMTP Server" + +msgid "SNI Host" +msgstr "SNI Host" + +msgid "SNI is disabled for this domain" +msgstr "SNI is uitgeschakeld voor dit domein" + +msgid "SSH Key Modified" +msgstr "SSH Sleutel is gewijzigd" + +msgid "SSH Key authorized" +msgstr "SSH Sleutel geautoriseerd" + +msgid "SSH Key created" +msgstr "SSH Sleutel aangemaakt" + +msgid "SSH Key deleted" +msgstr "SSH Sleutel is verwijderd" + +msgid "SSH Keys" +msgstr "SSH Sleutels" + +msgid "SSH is not enabled" +msgstr "SSH is niet ingeschakeld" + +msgid "SSL Certificates" +msgstr "SSL Certificaten" + +msgid "SSL is not enabled for this domain" +msgstr "SSL is niet ingeschakeld voor dit domein" + +msgid "Safe Mode Disabled on selected domains" +msgstr "Safe Mode uitgeschakeld op geselecteerde domeinen" + +msgid "Safe Mode Enabled on selected domains" +msgstr "Safe Mode ingeschakeld op geselecteerde domeinen" + +msgid "Save" +msgstr "Opslaan" + +msgid "Save Awstats" +msgstr "Bewaar Awstats" + +msgid "Save Comments" +msgstr "Commentaar opslaan" + +msgid "Save E-Mail" +msgstr "E-mail opslaan" + +msgid "Save Increase" +msgstr "Verhoging Opslaan" + +msgid "Save Language" +msgstr "Taal Opslaan" + +msgid "Save Limit" +msgstr "Limiet Opslaan" + +msgid "Save Limit Notice" +msgstr "Melding Limiet Opslaan" + +msgid "Save Name" +msgstr "Naam Opslaan" + +msgid "Save Nameservers" +msgstr "Naamservers Opslaan" + +msgid "Save Skin" +msgstr "Thema Opslaan" + +msgid "" +"Saving/Editing files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Het opslaan/bewerken van bestanden zijn uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Scratch Codes" +msgstr "Eenmalige Toegangscodes" + +msgid "Scratch codes" +msgstr "Eenmalige toegangscodes" + +msgid "Script output" +msgstr "Script resultaat" + +msgid "Search" +msgstr "Zoeken" + +msgid "SecRuleRemoveById id is blank" +msgstr "SecRuleRemoveById id is leeg" + +msgid "Second PHP" +msgstr "2de PHP" + +msgid "Secure Socket Layer (ssl)" +msgstr "Secure Socket Layer (ssl)" + +#, c-format +msgid "Secured Home of %s" +msgstr "Beveiligd Home van%s" + +#, c-format +msgid "Security Answer is too long max=%d" +msgstr "Beveiligings antwoord is te lang, max =%d" + +msgid "Security Question" +msgstr "Beveiligings Vraag" + +msgid "Security Question set" +msgstr "Beveiligings Vraag ingesteld" + +msgid "Security Questions" +msgstr "Beveiliging Vragen" + +msgid "Security Questions are disabled" +msgstr "Beveiligings Vragen zijn uitgeschakeld" + +msgid "Security Questions deleted" +msgstr "Beveiligings Vragen verwijderd" + +#, c-format +msgid "See %sthis guide%s to fix it." +msgstr "Zie %s deze gids %s om het te repareren." + +msgid "Select" +msgstr "Selecteer" + +msgid "Select MX Template" +msgstr "Kies MX Sjabloon" + +#, c-format +msgid "Select an IP to Link to %s" +msgstr "Selecteer een IP om te linken naar %s" + +msgid "Selected Content-Type is not valid." +msgstr "Het geselecteerde Inhoud-Type is niet geldig." + +msgid "Selected Data" +msgstr "Geselecteerde Gegevens" + +msgid "Selected Plugins Activated" +msgstr "Geselecteerde Plugins Geactiveerd" + +msgid "Selected Plugins De-Activated" +msgstr "Geselecteerde Plugins Gedeactiveerd" + +msgid "Selected Plugins Deleted" +msgstr "Geselecteerde Plugins Verwijderd" + +msgid "Selected Users" +msgstr "Geselecteerde gebruikers" + +msgid "Selected character-set encoding is not valid." +msgstr "De geselecteerde tekenset codering is niet geldig." + +msgid "Send Count" +msgstr "Aantal verzenden" + +msgid "Send Signal" +msgstr "Signaal verzenden" + +msgid "Send a Message" +msgstr "Stuur een Bericht" + +msgid "Send limit must be a valid number, or blank." +msgstr "Verzend limiet moet een geldig getal zijn, of blanco." + +msgid "Sender" +msgstr "Afzender" + +msgid "Sender Host" +msgstr "Host Afzender" + +#, c-format +msgid "Sender domain must match the list domain '%s', or use '%s'" +msgstr "" +"Het domein van de afzender moet overeenkomen met het domeinlijst '%s', of " +"gebruik '%s'" + +msgid "Sent" +msgstr "Verzonden" + +msgid "Sent E-mails" +msgstr "Verzonden E-mails" + +msgid "Sent Emails" +msgstr "Verzonden Emails" + +msgid "Sep" +msgstr "Sep" + +msgid "Server" +msgstr "Server" + +msgid "Server History" +msgstr "Server Geschiedenis" + +msgid "Server Path" +msgstr "Server Pad" + +msgid "Service" +msgstr "Service" + +msgid "Service Monitor" +msgstr "Service Monitor" + +msgid "Set" +msgstr "Instellen" + +msgid "Set 0 for unlimited. Set a blank value to reset to default." +msgstr "" +"Stel 0 in voor onbeperkt. Stel een lege waarde in om de standaardwaarde te " +"herstellen." + +msgid "Set Global" +msgstr "Stel Globaal in" + +msgid "Set Global Shared" +msgstr "Stel Globaal Gedeeld in" + +msgid "Set as Default" +msgstr "Instellen als standaard" + +msgid "Set selected domains to be publicly viewable from" +msgstr "Stel geselecteerde domeinen zo in dat ze openbaar zichtbaar zijn" + +msgid "Set selected to" +msgstr "Stel geselecteerd in op" + +msgid "Set to" +msgstr "Stel in op" + +msgid "Setting" +msgstr "Instelling" + +msgid "Setting changed" +msgstr "Instelling gewijzigd" + +msgid "" +"Setting file/directory permissions has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Het instellen van bestands/map machtigingen is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Settings" +msgstr "Instellingen" + +msgid "Settings Saved" +msgstr "Instellingen opgeslagen" + +msgid "Share Selected" +msgstr "Geselecteerd delen" + +msgid "Share a static path" +msgstr "Deel een statisch pad" + +msgid "Shared" +msgstr "Gedeeld" + +msgid "Shared - randomly selected" +msgstr "Gedeeld - willekeurig geselecteerd" + +msgid "Shell Access (ssh)" +msgstr "Shell Access (ssh)" + +msgid "Shell for Resellers's Users" +msgstr "Shell voor Gebruikers van Resellers" + +msgid "Show" +msgstr "Toon" + +msgid "Show All Users" +msgstr "Toon Alle Gebruikers" + +msgid "Show Domain" +msgstr "Toon domein" + +msgid "Sign" +msgstr "Teken" + +msgid "Signed" +msgstr "Ondertekend" + +msgid "Site Redirection" +msgstr "Website Omleiding" + +msgid "Site Summary / Statistics / Logs" +msgstr "Siteoverzicht / Statistieken / Logs" + +msgid "Size" +msgstr "Grootte" + +msgid "Size is not a number" +msgstr "Grootte is geen getal" + +msgid "Skin" +msgstr "Thema" + +#, c-format +msgid "Skin '%s' does not have any custom color variables to set" +msgstr "Thema '%s' heeft geen aangepaste kleurvariabelen om in te stellen" + +msgid "Skin Installed" +msgstr "Thema geïnstalleerd" + +msgid "Skin Name" +msgstr "Thema Naam" + +msgid "Skin Owner" +msgstr "Thema Eigenaar" + +msgid "Skin Set" +msgstr "Thema Instellen" + +msgid "Skin applied to all users" +msgstr "Thema toegepast op alle gebruikers" + +msgid "Skin has been customized" +msgstr "De thema is aangepast" + +msgid "Skin has been successfully changed" +msgstr "De thema is met succes gewijzigd" + +msgid "Skins" +msgstr "Thema’s" + +msgid "Skins Deleted" +msgstr "Thema's Verwijderd" + +msgid "Skip Suspended" +msgstr "Overslaan Opgeschort" + +msgid "Skipped rule added" +msgstr "Sla-over regel toegevoegd" + +msgid "Skipping system E-Mail account" +msgstr "Systeem e-mailaccount overslaan" + +msgid "Slave of a load balancing bundle." +msgstr "Is een Slave van een load balancing bundel." + +msgid "Sorry, this function does not support domain pointers at this time" +msgstr "Sorry, deze functie ondersteunt op dit moment geen domein pointer" + +msgid "Sort" +msgstr "Sorteer" + +msgid "Sort Selected Column in" +msgstr "Sorteer geselecteerde kolom in" + +msgid "Source Domain" +msgstr "Bron Domein" + +msgid "Spam" +msgstr "Spam" + +msgid "Spam Filters" +msgstr "Spam Filters" + +msgid "SpamAassassin is disabled on your account" +msgstr "SpamAssassin is uitgeschakeld op uw account" + +msgid "SpamAssassin" +msgstr "SpamAssassin" + +msgid "Spamassassin disabled" +msgstr "Spamassassin is uitgeschakeld" + +msgid "Spambox" +msgstr "Spambox" + +msgid "Spamd is not running on your system." +msgstr "Spamd draait niet op uw systeem." + +msgid "Splitting error for unix socket" +msgstr "Splitsings fout voor Unix socket" + +msgid "Ssl" +msgstr "Ssl" + +msgid "Start" +msgstr "Start" + +msgid "Start Time" +msgstr "Start Tijd" + +msgid "Start Time must be before End Time." +msgstr "De starttijd moet vóór de eindtijd liggen." + +msgid "State/Province must only contain letters, spaces and/or periods" +msgstr "Staat/provincie mag alleen letters, spaties en/of punten bevatten" + +msgid "Stats links created" +msgstr "Statistieken links zijn gemaakt" + +msgid "Stats links removed" +msgstr "Statistieken links zijn verwijderd" + +msgid "Status" +msgstr "Status" + +msgid "Sticky bit's not allowed: 777 is the max allowed permission" +msgstr "" +"Sticky bit is niet toegestaan: 777 is de maximaal toegestane toestemming" + +msgid "Stop" +msgstr "Stop" + +msgid "Stopped" +msgstr "Gestopt" + +msgid "String contains an invalid email address" +msgstr "String bevat een ongeldig e-mail adres" + +msgid "Sub Domains" +msgstr "Sub Domeins" + +msgid "Sub Sort" +msgstr "Sub Sorteer" + +msgid "Sub Sort Selected Column in" +msgstr "Sub Sorteer geselecteerde kolom in" + +msgid "Sub-domain is forbidden" +msgstr "Subdomein is verboden" + +msgid "SubDomain Name" +msgstr "Subdomein Naam" + +msgid "Subdomain Created" +msgstr "Subdomein Aangemaakt" + +msgid "Subdomain Stats" +msgstr "Subdomein Statstieken" + +msgid "Subdomain already exists" +msgstr "Subdomein bestaat al" + +msgid "Subdomain created" +msgstr "Subdomein aangemaakt" + +msgid "Subdomain does not exist" +msgstr "Subdomein bestaat niet" + +#, c-format +msgid "Subdomain name too long. Maximum %d characters." +msgstr "Subdomein naam is te lang. Maximaal %d tekens toegestaan." + +msgid "Subdomains" +msgstr "Subdomeinen" + +msgid "Subdomains Removed" +msgstr "Subdomeinen Verwijderd" + +msgid "Subdomains deleted" +msgstr "Subdomeinen verwijderd" + +msgid "Subject" +msgstr "Onderwerp" + +msgid "Subject Contains" +msgstr "Onderwerp Bevat" + +#, c-format +msgid "Subject prefix contains invalid characters. Use %s" +msgstr "Het voorvoegsel van het onderwerp bevat ongeldige tekens. Gebruik %s" + +msgid "Submit" +msgstr "Verzenden" + +msgid "Subscriber" +msgstr "Abonnee" + +msgid "Subscribers" +msgstr "Abonnees" + +msgid "Success" +msgstr "Succes" + +#, c-format +msgid "Success with %s of selected widgets" +msgstr "Succes met %s van de geselecteerde widgets" + +#, c-format +msgid "Success with '%s'" +msgstr "Succes met '%s'" + +msgid "Supports multicast" +msgstr "Ondersteunt multicast" + +msgid "Suspend" +msgstr "Geschorst" + +msgid "Suspend / Unsuspend" +msgstr "Geschorst / Opgeschort" + +msgid "Suspend Reason" +msgstr "Reden Opschorten" + +msgid "Suspend at Limit" +msgstr "Opschorten bij overschrijden van Limiet" + +msgid "Suspended" +msgstr "Geschorst" + +msgid "Syntax check has been disabled" +msgstr "Syntaxis controle is uitgeschakeld" + +msgid "System Backup" +msgstr "Systeem Backup" + +msgid "System Info" +msgstr "Systeem Info" + +msgid "System Information" +msgstr "Systeem informatie" + +msgid "System Rebooting Now!" +msgstr "Het systeem wordt nu opnieuw opgestart!" + +msgid "System Uptime" +msgstr "Aktief Systeem Tijd" + +#, c-format +msgid "" +"System account exists, but unable to read the User data files for user %s" +msgstr "" +"Systeem account bestaat, maar kan de gegevens bestand van de gebruiker %s " +"niet lezen" + +msgid "Systems Quotas are size 0." +msgstr "Systeem Quotas zijn 0 groot." + +msgid "TB" +msgstr "TB" + +msgid "TTL has been saved" +msgstr "TTL is opgeslagen" + +msgid "Table" +msgstr "Tabel" + +msgid "Tail" +msgstr "Tail" + +msgid "Tasks Max" +msgstr "Max Taken" + +#, c-format +msgid "Temp file %s is 0 bytes after writing to disk. Will not rename it." +msgstr "" +"Tijdelijk bestand %s is 0 bytes na het schrijven naar schijf. Zal het niet " +"hernoemen." + +msgid "Template does not exist" +msgstr "Sjabloon bestaat niet" + +msgid "Temporary Bandwidth Increase" +msgstr "Bandbreedte Tijdelijk Verhogen" + +#, c-format +msgid "" +"Temporary account action lock in place. There might be some other process " +"working on the account. This should last no more than %d minutes" +msgstr "" +"Tijdelijke vergrendeling van de account actie. Mogelijk werkt er een ander " +"proces aan het account. Dit duurt normaal niet langer dan %d minuten" + +msgid "Temporary bandwidth increase has been set" +msgstr "Er is een tijdelijke verhoging van de bandbreedte ingesteld" + +msgid "Text" +msgstr "Tekst" + +msgid "Text contains invalid characters" +msgstr "Tekst bevat ongeldige tekens" + +msgid "That ID is not of type 'admin'" +msgstr "Dat ID is niet van het type 'admin'" + +msgid "That IP already exists on the domain" +msgstr "Dat IP adres bestaat al op het domein" + +msgid "That IP does not exist" +msgstr "Dat IP bestaat niet" + +msgid "That IP does not exist in your User's IP list" +msgstr "Dat IP adres komt niet voor in de IP lijst van uw gebruiker" + +msgid "That IP does not exist in your list" +msgstr "Dat IP komt niet voor in uw lijst" + +msgid "That IP is already in your list of Additional IPs" +msgstr "Dat IP adres staat al in uw lijst met Extra IP adressen" + +msgid "That IP is already owned" +msgstr "Dat IP is al in bezit" + +msgid "That IP is not available for linking" +msgstr "Dat IP adres is niet beschikbaar om te koppelen" + +msgid "That User already exists on another server" +msgstr "Die gebruiker bestaat al op de andere server" + +msgid "That database already exists" +msgstr "Die database bestaat al" + +msgid "That database does not belong to you" +msgstr "Die database is niet van jou" + +msgid "That database does not exist" +msgstr "Die database bestaat niet" + +msgid "That domain already exists" +msgstr "Dat domein bestaat al" + +msgid "That domain already exists on another server" +msgstr "Dat domein bestaat al op de andere server" + +msgid "That domain does not belong to you" +msgstr "Dat domein is niet van jou" + +msgid "That domain does not exist" +msgstr "Dat domein bestaat niet" + +msgid "That domain is on the forbidden domains list" +msgstr "Dat domein staat op de lijst met verboden domeinen" + +msgid "That domain is suspended. Unsuspend it before changing it's name" +msgstr "" +"Dat domein is opgeschort. Maak de opschorting ongedaan voordat u de naam " +"wijzigt" + +msgid "That email user does not exist" +msgstr "Die e-mail gebruiker bestaat niet" + +msgid "That file was empty" +msgstr "Dat bestand was leeg" + +msgid "That filter already exists" +msgstr "Dat filter bestaat al" + +msgid "That ftp_password file does not exist" +msgstr "Dat ftp_password bestand bestaat niet" + +msgid "That is an invalid email address / email list" +msgstr "Dat is een ongeldig e-mailadres / e-maillijst" + +msgid "That is an invalid filename" +msgstr "Dat is een ongeldige bestandsnaam" + +msgid "That is not a valid access host" +msgstr "Dat is geen geldige toegangs host" + +msgid "" +"That is not a valid path. Either it is not in your home directory, it " +"contains symbolic links, or it contains invalid characters" +msgstr "" +"Dat is geen geldige pad. Het bevindt zich niet in uw home map, het bevat " +"symbolische koppelingen of het bevat ongeldige tekens" + +msgid "" +"That is not a valid path. Either it is not in your home directory, it " +"doesn't exist, it contains symbolic links, or it contains invalid characters" +msgstr "" +"Dat is geen geldige pad. Het staat niet in uw home map, het bestaat niet, " +"het bevat symbolische koppelingen of het bevat ongeldige tekens" + +msgid "That is not a valid quota" +msgstr "Dat is geen geldige quotum" + +msgid "That is not a valid username" +msgstr "Dat is geen geldige gebruikersnaam" + +msgid "That is not your domain" +msgstr "Dat is niet uw domein" + +msgid "That is not your system password" +msgstr "Dat is niet uw systeem wachtwoord" + +msgid "" +"That is the hostname which is reserved. Either change the hostname, or use a " +"different domain" +msgstr "" +"Dat is een gereserveerd hostnaam. Wijzig de hostnaam of gebruik een ander " +"domein" + +msgid "That isn't a gzip file" +msgstr "Dat is geen gzip bestand" + +msgid "That key does not exist" +msgstr "Die sleutel bestaat niet" + +msgid "That password is incorrect" +msgstr "Dat wachtwoord is onjuist" + +msgid "That path isn't protectable" +msgstr "Dat pad kan niet beveiligd worden" + +msgid "That pop account doesn't exist" +msgstr "Dat pop account bestaat niet" + +#, c-format +msgid "That skin cannot be customized. It's skin.conf requires %s" +msgstr "Die thema kan niet worden aangepast. Thema's skin.conf vereist %s" + +msgid "That skin does not exist" +msgstr "Die thema bestaat niet" + +msgid "That skin is not in your list" +msgstr "Die thema staat niet in jouw lijst" + +msgid "That skin name already exists in your Reseller skin list" +msgstr "Die thema naam bestaat al in uw Reseller thema lijst" + +msgid "That user already Exists" +msgstr "Die gebruiker bestaat al" + +msgid "That user already exists" +msgstr "Die gebruiker bestaat al" + +#, c-format +msgid "" +"That user contains the ftp separator (%c) which cannot be in the username." +msgstr "" +"Die gebruikers naam bevat het ftp scheidingsteken (%c) dat niet in de " +"gebruikersnaam mag voorkomen." + +msgid "That user does not belong to you" +msgstr "Die gebruiker is niet van jou" + +msgid "That user does not exist" +msgstr "Die gebruiker bestaat niet" + +msgid "" +"That user does not exist, please create the user before changing their " +"privileges" +msgstr "" +"Die gebruiker bestaat niet, maak de gebruiker aan voordat u zijn rechten " +"wijzigt" + +msgid "That user doesn't exist" +msgstr "Die gebruiker bestaat niet" + +msgid "That user is reserved for the anonymous account" +msgstr "Die gebruiker is gereserveerd voor de anonieme account" + +msgid "That username already exists on the system" +msgstr "Die gebruikersnaam bestaat al in het systeem" + +msgid "That username is a reserved system name" +msgstr "Die gebruikersnaam is een gereserveerde systeem naam" + +msgid "That zone already exists" +msgstr "Die zone bestaat al" + +msgid "Thats a reserved skin name." +msgstr "Dat is een gereserveerde thema naam." + +#, c-format +msgid "The %s backups have been created in %s" +msgstr "De %s backups zijn gemaakt in %s" + +msgid "The 'ttl' value passed is not a number or is too large" +msgstr "De gegeven 'ttl' waarde is geen getal of is te groot" + +msgid "The Administrator has disabled the User Backup Function" +msgstr "De Administrator heeft de Gebruikers Backup functie uitgeschakeld" + +msgid "" +"The CA Certificate will not be used. The file will remain, but will not be " +"included." +msgstr "" +"Het CA certificaat wordt niet gebruikt. Het bestand blijft wel bestaan, maar " +"wordt niet opgenomen." + +msgid "" +"The CC value entered will create an infinite loop. Please use a different " +"CC value." +msgstr "" +"De ingevoerde CC waarde zal een oneindige lus creëren. Gebruik een andere CC " +"waarde." + +#, c-format +msgid "The E-Mail '%s' contains invalid characters" +msgstr "De E-mail '%s' bevat ongeldige tekens" + +#, c-format +msgid "The IP %s does not exist. User %s will not be created" +msgstr "Het IP %s bestaat niet. Gebruiker %s wordt niet aangemaakt" + +#, c-format +msgid "The IP %s has provided the correct password for the %s account." +msgstr "De IP %s heeft het juiste wachtwoord voor de %s account verstrekt." + +#, c-format +msgid "The OS being updated %s has expired. No further updates can be done" +msgstr "" +"Het besturingssysteem %s dat wordt bijgewerkt is verlopen. Er kunnen verder " +"geen updates meer uitgevoerd worden" + +msgid "The Ticket System is not enabled." +msgstr "Het ticket systeem is niet ingeschakeld." + +msgid "The User backups have been uploaded to" +msgstr "De Gebruiker backups zijn geüpload naar" + +#, c-format +msgid "The User files have been restored from %s" +msgstr "De Gebruiker bestanden zijn hersteld van %s" + +msgid "The Users display cache will be updated momentarily." +msgstr "De gebruikers weergave cache wordt momenteel bijgewerkt." + +msgid "The addresses are lost when the interface goes down." +msgstr "De adressen gaan verloren als de interface uitvalt." + +msgid "" +"The cache is being updated, the current values may not be correct. Please " +"refresh the page in 1 minute." +msgstr "" +"De cache wordt bijgewerkt, de huidige waarden zijn mogelijk niet correct. " +"Vernieuw de pagina over 1 minuut." + +msgid "" +"The certificate and key do not match. Please ensure you are using the " +"correct key with this certificate" +msgstr "" +"Het certificaat en de sleutel komen niet overeen. Zorg ervoor dat u de " +"juiste sleutel gebruikt met dit certificaat" + +msgid "" +"The clipboard has been disabled with the filemanager_disable_features option" +msgstr "" +"Het klembord is uitgeschakeld met de optie filemanager_disable_features" + +msgid "The code is valid, but for a different time." +msgstr "De code is geldig, maar voor een andere tijd." + +msgid "The command cannot contain any newline characters" +msgstr "De opdracht mag geen tekens voor een nieuwe regel bevatten" + +#, c-format +msgid "The database '%s' does not belong to you" +msgstr "De database '%s' is niet van jou" + +msgid "The day of month is not a valid cron value (1-31)" +msgstr "De dag van de maand is geen geldige cron waarde (1-31)" + +msgid "The day of week is not a valid cron value (0-7)" +msgstr "De dag van de week is geen geldige cron waarde (0-7)" + +msgid "The default has been set" +msgstr "De standaard waarde is ingesteld" + +#, c-format +msgid "" +"The directory %s seems to be owned by 'apache'. Try using the 'Reset Owner' " +"option, then try again." +msgstr "" +"De map %s blijkt eigendom te zijn van 'apache'. Gebruik de optie 'Reset " +"Eigenaar' en probeer het opnieuw." + +#, c-format +msgid "" +"The disk usage for the selected Users totals more than %d MB, thus will be " +"removed in the background." +msgstr "" +"Het schijfgebruik voor de geselecteerde gebruikers bedraagt totaal meer dan " +"%d MB en wordt op de achtergrond verwijderd." + +#, c-format +msgid "The domain %s does not belong to you." +msgstr "Het domein %s is niet van jou." + +#, c-format +msgid "" +"The domain %s does not belong to you. The subdomain will not be created." +msgstr "Het domein %s is niet van jou. Het subdomein wordt niet aangemaakt." + +msgid "" +"The domain entered is invalid. It must be of the form 'sourcedomain.com'" +msgstr "" +"Het opgegeven domein is ongeldig. Het moet de vorm 'sourcedomain.com' hebben" + +msgid "The domain must not match your hostname." +msgstr "Het domein mag niet overeenkomen met uw hostnaam." + +#, c-format +msgid "" +"The download of %s has failed the md5sum check. Please check the file and " +"retry the update again. Not extracted." +msgstr "" +"De download van %s is mislukt tijdens de md5sum controle. Controleer het " +"bestand en probeer de update opnieuw. Niet uitgepakt." + +msgid "The e-mail containing your new password has been sent." +msgstr "De e-mail met uw nieuwe wachtwoord is verzonden." + +msgid "The email address provided is not a valid email address" +msgstr "Het opgegeven e-mail adres is geen geldige e-mail adres" + +msgid "The entered path must be a-zA-Z0-9" +msgstr "Het ingevoerde pad moet a-zA-Z0-9 formaat zijn" + +msgid "The expiry entered is too far in the future" +msgstr "De opgegeven vervaldatum ligt te ver in de toekomst" + +#, c-format +msgid "The file %s has more than 1 hard link" +msgstr "Het bestand %s heeft meer dan 1 harde link" + +msgid "The file is generated when the account is reset." +msgstr "Het bestand wordt gegenereerd zodra het account wordt gereset." + +msgid "The file must be of the form: type.creator.username.tar.gz" +msgstr "" +"Het bestand moet de volgende vorm hebben: type.maker.gebruikersnaam.tar.gz" + +msgid "The file must be of the form: username.tar.gz" +msgstr "Het bestand moet de volgende vorm hebben: gebruikersnaam.tar.gz" + +#, c-format +msgid "The file: '%s' is not in the form username.tar.gz" +msgstr "Het bestand: '%s' heeft niet de vorm gebruikersnaam.tar.gz" + +msgid "The following file could not be found. No reset required" +msgstr "Het volgende bestand is niet gevonden. Geen reset vereist" + +#, c-format +msgid "The following hard links have been found under User %s:" +msgstr "De volgende harde links zijn gevonden onder Gebruiker%s:" + +msgid "The following test database tables have been found:" +msgstr "De volgende testdatabase tabellen zijn gevonden:" + +#, c-format +msgid "The ftp user %s does not exist in passwd file %s" +msgstr "De ftp gebruiker %s bestaat niet in het passwd bestand %s" + +msgid "The full format name entered does not end with the name of the zone" +msgstr "" +"De volledige naam die wordt ingevoerd, eindigt niet met de naam van de zone" + +msgid "The local url path or the destination url is invalid." +msgstr "Het lokale url pad of de bestemmings url is ongeldig." + +msgid "The location has not changed" +msgstr "De locatie is niet veranderd" + +msgid "The lost password feature is disabled" +msgstr "" +"De functie voor het herstellen van vergeten wachtwoord is uitgeschakeld" + +msgid "The max upload size cannot be 0" +msgstr "De maximale uploadgrootte mag niet 0 zijn" + +#, fuzzy, c-format +#| msgid "The minimum for %s is %s" +msgid "The maximum for %s is %s" +msgstr "Het minimum voor %s is %s" + +#, c-format +msgid "The maximum value is %d" +msgstr "De maximale waarde is %d" + +#, c-format +msgid "The minimum for %s is %s" +msgstr "Het minimum voor %s is %s" + +msgid "The month is not a valid cron value (1-12)" +msgstr "De maand is geen geldige cron waarde (1-12)" + +msgid "The name you've entered contains invalid characters" +msgstr "De naam die u heeft ingevoerd, bevat ongeldige tekens" + +msgid "The new key was created, but there was an issue during authorization" +msgstr "" +"De nieuwe sleutel is gemaakt, maar er is een probleem opgetreden tijdens de " +"autorisatie" + +msgid "The new passwords do not match" +msgstr "De nieuwe wachtwoorden komen niet overeen" + +msgid "The number and type of ticket is required" +msgstr "Het nummer en het type ticket is vereist" + +#, c-format +msgid "The owner of %s is not %s" +msgstr "De eigenaar van %s is niet %s" + +msgid "The password changing feature has been disabled" +msgstr "De functie voor het wijzigen van het wachtwoord is uitgeschakeld" + +#, c-format +msgid "The path %s already exists" +msgstr "Het pad %s bestaat al" + +msgid "The path already exists, but is not a directory" +msgstr "Het pad bestaat al, maar is geen map" + +msgid "" +"The process is currently being used to execute this request so it will be " +"executed shortly by the Task Queue." +msgstr "" +"Het proces wordt momenteel gebruikt om dit verzoek uit te voeren, het zal " +"binnenkort worden uitgevoerd door de Taak Wachtrij." + +msgid "The provided IP is not valid" +msgstr "Het opgegeven IP adres is niet geldig" + +msgid "The provided domain name matches your hostname." +msgstr "De opgegeven domeinnaam komt overeen met uw hostnaam." + +msgid "The question was" +msgstr "De vraag was" + +#, c-format +msgid "The referer request set (%s) is not in the allowed list: %s" +msgstr "" +"De set verwijzings verzoeken (%s) staat niet in de toegestane lijst: %s" + +#, c-format +msgid "The referer used is not safe as it can be controlled by a User: %s" +msgstr "" +"De gebruikte verwijzer is niet veilig omdat deze kan worden beheerd door een " +"Gebruiker: %s" + +msgid "" +"The request you've made cannot be executed because it does not exist in your " +"authority level" +msgstr "" +"Het verzoek dat u heeft gedaan, kan niet worden uitgevoerd omdat het niet " +"toegestaan is in uw bevoegdheids niveau" + +msgid "The requested command requires POST but GET was used" +msgstr "De gevraagde opdracht vereist POST, maar GET is gebruikt" + +msgid "" +"The skin package did not install properly. Either there were files missing, " +"or their permissions were incorrectly set" +msgstr "" +"Het thema pakket is niet correct geïnstalleerd. Of er ontbreken bestanden, " +"of de rechten zijn verkeerd ingesteld" + +msgid "The sql file is 0 bytes in size:" +msgstr "Het sql bestand is 0 bytes groot:" + +#, c-format +msgid "The subdomain '%s' already exists under the %s domain" +msgstr "Het subdomein '%s' bestaat al onder het %s domein" + +msgid "" +"The times must formatted like one of the following (eg. hour, no spaces)" +msgstr "" +"De tijden moeten op een van de volgende manieren worden opgemaakt (bijv. " +"uur, geen spaties)" + +msgid "The update is not allowed to be downloaded." +msgstr "De update mag niet worden gedownload." + +#, c-format +msgid "The user %s does not belong to you" +msgstr "De gebruiker %s is niet van jou" + +#, c-format +msgid "The user %s does not exist" +msgstr "De gebruiker %s bestaat niet" + +#, c-format +msgid "" +"The username is invalid. Usernames must start with a-z, contain >= 3 " +"characters and <= %d." +msgstr "" +"De gebruikersnaam is ongeldig. Gebruikersnamen moeten beginnen met a-z, moet " +">= 3 tekens bevatten en <=%d." + +msgid "The username is invalid. Usernames must use a-z0-9" +msgstr "" +"De gebruikersnaam is ongeldig. Gebruikersnamen moeten a-z0-9 format gebruiken" + +msgid "The value must be an IP address" +msgstr "De waarde moet een IP adres zijn" + +msgid "The very last entry." +msgstr "De allerlaatste vermelding." + +msgid "The welcome email(s) has successfully been resent." +msgstr "De welkomstmail(s) is succesvol opnieuw verzonden." + +msgid "There are no messages for that ticket" +msgstr "Er zijn geen berichten voor dat ticket" + +#, c-format +msgid "" +"There are still Users on %s. Remove them from the IP first and set it to " +"'free'." +msgstr "" +"Er zijn nog steeds gebruikers op %s. Verwijder ze eerst van de IP adres en " +"zet het op 'beschikbaar'." + +#, c-format +msgid "" +"There have been %d renew failures, thus no more attempts will be made.%s" +msgstr "" +"Er zijn %d vernieuwings fouten geweest, er wordt geen nieuwe pogingen meer " +"ondernomen.%s" + +msgid "There is already a CNAME record with that name" +msgstr "Er is al een CNAME record met die naam" + +msgid "There is already a mailing list alias with that name" +msgstr "Er is al een mailinglijst alias met die naam" + +msgid "There is already an A record with that name" +msgstr "Er is al een A record met die naam" + +msgid "There is already an account with that name" +msgstr "Er is al een account met die naam" + +msgid "There is already an autoresponder with that name" +msgstr "Er is al een Autoresponder met die naam" + +#, c-format +msgid "There is not sufficient space on %s to upload %lld bytes of data" +msgstr "" +"Er is niet voldoende ruimte op %s om %lld bytes aan gegevens te uploaden" + +#, c-format +msgid "There is only 1 %s record for %s=%s, not removing it" +msgstr "Er is slechts 1 %s record voor %s=%s, het wordt niet verwijderd" + +msgid "" +"There were md5 errors from all servers, above. Please send report to " +"DirectAdmin Support." +msgstr "" +"Er waren md5 fouten van alle servers hierboven. Stuur een rapport naar " +"DirectAdmin Support." + +msgid "These are dynamic values. They change with the date." +msgstr "Dit zijn dynamische waarden. Ze veranderen met de datum." + +msgid "They should not exist. To delete them, run:" +msgstr "Ze zouden niet mogen bestaan. Om ze te verwijderen, voer dit uit:" + +#, c-format +msgid "" +"This OS is now End-Of-Life and no further updates are availble. The " +"automated updater will no longer accept request after %s (manual attempts " +"can be done with https://help.directadmin.com/item.php?id=29) but may not do " +"anything." +msgstr "" +"Dit besturingssysteem is nu End-Of-Life en er zijn geen verdere updates " +"beschikbaar. De automatische updater accepteert geen verzoek meer na %s " +"(handmatige pogingen kunnen worden gedaan met https://help.directadmin.com/" +"item.php?id=29) maar zonder enig garantie." + +msgid "This OS is now end-of-life. Future automated updates may fail." +msgstr "" +"Dit besturingssysteem is nu aan het einde van zijn levensduur. Toekomstige " +"automatische updates kunnen problemen geven." + +#, c-format +msgid "" +"This Reseller account is unable to allocate unlimited %s, yet that amount " +"has alredy been allocated." +msgstr "" +"Dit Reseller account kan geen onbeperkt %s toewijzen, dat aantal is al " +"toegewezen." + +msgid "" +"This account already exists on the system. If you restore, it will overwrite " +"and/or merge the data." +msgstr "" +"Dit account bestaat al op het systeem. Als u herstelt, worden de gegevens " +"overschreven en/of samengevoegd." + +msgid "This account is blocked via BlockCracking." +msgstr "Dit account is geblokkeerd via BlockCracking." + +msgid "This account is blocked via BlockCracking. Unblocking is disabled." +msgstr "" +"Dit account is geblokkeerd via BlockCracking. Deblokkeren is uitgeschakeld." + +msgid "" +"This domain will now temporarily use the Shared Server Certificate, unless " +"you restore the backup key (but backup the new key first or it will become " +"lost)" +msgstr "" +"Dit domein zal nu tijdelijk het Shared Server Certificaat gebruiken, tenzij " +"u de backupsleutel herstelt (maak eerst een backup van de nieuwe sleutel, " +"anders gaat deze verloren)" + +msgid "This hash has already been converted to a key." +msgstr "Deze hash is al geconverteerd naar een sleutel." + +msgid "This is a Hash URL login. You can delete it, but you cannot modify it." +msgstr "" +"Dit is een Hash URL aanmelding. U kunt het verwijderen, maar u kunt het niet " +"wijzigen." + +msgid "This is a placeholder for the subdomain" +msgstr "Dit is een tijdelijke aanduiding voor het subdomein" + +msgid "This is information about my mailing list" +msgstr "Dit is informatie over mijn mailinglijst" + +msgid "This may give unexpected results" +msgstr "Dit kan onverwachte resultaten opleveren" + +msgid "This may give unexpected results." +msgstr "Dit kan onverwachte resultaten opleveren." + +msgid "This plugin has been disabled for your account" +msgstr "Deze plugin is uitgeschakeld voor uw account" + +msgid "" +"This will only happen *after* logs exist (domain must resolve and be used)." +msgstr "" +"Dit gebeurt alleen *nadat* de logs bestaan (domein moet oplossen en worden " +"gebruikt)." + +msgid "This will skip the removal of the dns zone, leaving it in place." +msgstr "" +"Hierdoor wordt het verwijderen van de dns zone overgeslagen en blijft deze " +"bestaan." + +msgid "Thread Count" +msgstr "Thread Dichtheid" + +msgid "Throttle Memory above this limit." +msgstr "Begrens Geheugen boven deze limiet." + +msgid "Ticket #" +msgstr "Ticket #" + +msgid "Tickets Updated" +msgstr "Tickets bijgewerkt" + +msgid "Time" +msgstr "Tijd" + +#, c-format +msgid "Time slice discrepancy = %d" +msgstr "Verschil in tijd = %d" + +msgid "Timeout during read" +msgstr "Timeout tijdens lezen" + +#, c-format +msgid "Timeout while trying to connect to %s" +msgstr "Timeout tijdens het verbinden met %s" + +#, c-format +msgid "Timezone '%s' does not exist on the system" +msgstr "Tijdzone '%s' bestaat niet op het systeem" + +msgid "Timezone does not exist" +msgstr "Tijdzone bestaat niet" + +msgid "" +"To add a cron job, you require all of the following: minute, hour, " +"dayofmonth, month, dayofweek and command" +msgstr "" +"Om een cron taak toe te voegen, hebt u al het volgende nodig: minuut, uur, " +"dag van de maand, de maand, dag van de week en de opdracht" + +msgid "" +"To change this page, upload a new index.html to your private_html folder" +msgstr "" +"Om deze pagina te wijzigen, uploadt u een nieuwe index.html naar uw " +"private_html map" + +msgid "Today" +msgstr "Vandaag" + +msgid "Today at" +msgstr "Vandaag bij" + +#, c-format +msgid "Today's E-Mail count has been reset for User %s" +msgstr "" +"Het aantal e-mail berichten van vandaag is gereset voor de gebruiker %s" + +msgid "Too long" +msgstr "Te lang" + +msgid "Too short" +msgstr "Te kort" + +msgid "Total" +msgstr "Totaal" + +msgid "Total Disk Usage (MB)" +msgstr "Totaal Schijf Gebruik (MB)" + +msgid "Total Memory" +msgstr "Totaal Geheugen" + +msgid "Total Size:" +msgstr "Totale Grootte:" + +msgid "Total Swap Memory" +msgstr "Totale Wissel Geheugen" + +msgid "Total Usage" +msgstr "Totaal Gebruik" + +msgid "Trial License" +msgstr "Proef Licentie" + +#, c-format +msgid "Tried to restore '%s' to '%s', but this path is not in the %s" +msgstr "" +"Er is geprobeerd '%s' te herstellen naar '%s', maar die pad bevindt zich " +"niet in de %s" + +msgid "Trust cookie has been cleared" +msgstr "Vertrouwde cookie is gewist" + +#, c-format +msgid "Trust this device for %d day" +msgid_plural "Trust this device for %d days" +msgstr[0] "Vertrouw dit apparaat %d dag" +msgstr[1] "Vertrouw dit apparaat %d dagen" + +#, c-format +msgid "Try updating manually: %s" +msgstr "Probeer handmatig bij te werken: %s" + +msgid "Trying another random redirection URL from the same control server" +msgstr "" +"Probeer een andere willekeurige omleid URL van dezelfde controle server" + +msgid "Two-Step Auth secret is not set." +msgstr "Twee-Staps Authenticatie geheim is niet ingesteld." + +msgid "Two-Step Authentication" +msgstr "Twee-stappen Authenticatie" + +msgid "Two-Step Authentication is disabled" +msgstr "Twee stappen authenticatie is uitgeschakeld" + +msgid "Type" +msgstr "Type" + +#, c-format +msgid "Type '%s' is disabled" +msgstr "Type '%s' is uitgeschakeld" + +msgid "Type must be either 'paste' or 'id'" +msgstr "Type moet 'plakken' of 'id' zijn" + +msgid "UID" +msgstr "UID" + +msgid "URL" +msgstr "URL" + +msgid "Un-Link" +msgstr "Ontkoppelen" + +msgid "Un-Set" +msgstr "Niet ingesteld" + +msgid "Unable To Execute Your Request" +msgstr "Kan uw verzoek niet uitvoeren" + +msgid "Unable to Execute Your Command" +msgstr "Kan uw opdracht niet uitvoeren" + +msgid "Unable to Locate that domain" +msgstr "Kan dat domein niet vinden" + +msgid "Unable to Logout" +msgstr "Kan niet Afmelden" + +msgid "Unable to add IP" +msgstr "Kan geen IP toevoegen" + +msgid "Unable to add access host:" +msgstr "Kan toegangs host niet toevoegen:" + +msgid "Unable to add domain pointer" +msgstr "Kan domein pointer niet toevoegen" + +#, c-format +msgid "Unable to add user %s." +msgstr "Kan gebruiker %s niet toevoegen." + +msgid "Unable to add user to ssh config file" +msgstr "Kan gebruiker niet toevoegen aan het ssh configuratie bestand" + +#, c-format +msgid "" +"Unable to allocate unlimited %s. This account is not allowed to create that " +"amount." +msgstr "" +"Kan niet onbeperkt %s toewijzen. Deze account mag dat aantal niet aanmaken." + +msgid "" +"Unable to assign the Reseller ANY ips. Make sure to have free, un-assigned " +"ips." +msgstr "" +"Kan aan de Reseller GEEN ENKELE ip's toewijzen. Zorg ervoor dat u " +"beschikbaar en niet toegewezen IP's heeft." + +msgid "Unable to authenitcate: Check your password for syntax" +msgstr "Kan niet verifiëren: controleer uw wachtwoord op syntax fouten" + +msgid "Unable to authenticate: Invalid password" +msgstr "Kan niet verifiëren: ongeldige wachtwoord" + +#, c-format +msgid "Unable to change %s" +msgstr "Kan %s niet wijzigen" + +msgid "Unable to change password" +msgstr "Kan wachtwoord niet wijzigen" + +msgid "Unable to change the E-Mail Address" +msgstr "Kan het e-mail adres niet wijzigen" + +msgid "Unable to change the Message System E-Mail Address" +msgstr "Kan het e-mailadres voor het berichten systeem niet wijzigen" + +msgid "Unable to change the Name" +msgstr "Kan de Naam niet wijzigen" + +msgid "Unable to change the limit" +msgstr "Kan de limiet niet wijzigen" + +msgid "Unable to change the temporary bandwidth increase" +msgstr "Kan de tijdelijke verhoging van de bandbreedte niet wijzigen" + +msgid "Unable to connect to any site for the update" +msgstr "Kan geen enkele verbinding maken met een site voor de update" + +msgid "Unable to connect to secure socket" +msgstr "Kan geen verbinding maken met beveiligd socket" + +msgid "Unable to connect to the database" +msgstr "Kan geen verbinding maken met de database" + +#, c-format +msgid "Unable to copy %s to %s: %s" +msgstr "Kan %s niet kopiëren naar %s: %s" + +#, c-format +msgid "Unable to copy directory %s to %s: %s" +msgstr "Kan de map %s niet kopiëren naar %s: %s" + +#, c-format +msgid "Unable to create %s: %s" +msgstr "Kan %s: %s niet maken" + +msgid "Unable to create a Reseller" +msgstr "Kan geen Reseller maken" + +msgid "Unable to create a User" +msgstr "Kan geen Gebruiker maken" + +#, c-format +msgid "Unable to create backup directory (uid=%s)" +msgstr "Kan geen backup map maken (uid =%s)" + +msgid "Unable to create database" +msgstr "Kan database niet maken" + +#, c-format +msgid "Unable to create directory %s" +msgstr "Kan de map %s niet maken" + +msgid "Unable to create new file" +msgstr "Kan geen nieuw bestand maken" + +msgid "Unable to create reverse IP lookup" +msgstr "Kan geen omgekeerde IP-lookup maken" + +msgid "Unable to create subdomain" +msgstr "Kan subdomein niet maken" + +msgid "Unable to create user's data directory" +msgstr "Kan de gegevens map voor de gebruiker niet maken" + +msgid "Unable to create zone" +msgstr "Kan de zone niet maken" + +msgid "Unable to create zone." +msgstr "Kan de zone niet maken." + +#, c-format +msgid "Unable to delete %s: %s" +msgstr "Kan %s: %s niet verwijderen" + +#, c-format +msgid "Unable to delete directory %s: %s" +msgstr "Kan de map %s: %s niet verwijderen" + +msgid "Unable to delete files" +msgstr "Kan de bestanden niet verwijderen" + +msgid "Unable to delete the main email account" +msgstr "Kan het hoofd e-mail account niet verwijderen" + +msgid "Unable to delete the reseller's ip.list file." +msgstr "Kan het ip.list bestand van de Reseller niet verwijderen." + +msgid "Unable to delete users's domains directory" +msgstr "Kan de domein map van gebruikers niet verwijderen" + +msgid "Unable to download backup" +msgstr "Kan backup niet downloaden" + +msgid "Unable to edit file" +msgstr "Kan het bestand niet bewerken" + +msgid "Unable to execute your command" +msgstr "Kan uw opdracht niet uitvoeren" + +msgid "Unable to execute your request" +msgstr "Uw verzoek kan niet worden uitgevoerd" + +msgid "Unable to export packages" +msgstr "Kan de pakketten niet exporteren" + +#, c-format +msgid "Unable to extract %s from" +msgstr "Kan %s niet extraheren uit" + +msgid "Unable to extract user.conf, reseller.conf or ip.list from" +msgstr "Kan user.conf, reseller.conf of ip.list niet extraheren uit" + +#, c-format +msgid "Unable to find %s" +msgstr "Kan %s niet vinden" + +#, c-format +msgid "Unable to find %s to create mysql backup" +msgstr "Kan %s niet vinden om mysql back-up te maken" + +#, c-format +msgid "Unable to find %s to extract mysql backup" +msgstr "Kan %s niet vinden om de mysql back-up uit te pakken" + +msgid "Unable to find CA certificate" +msgstr "Kan CA certificaat niet vinden" + +msgid "Unable to find certificate" +msgstr "Kan certificaat niet vinden" + +msgid "Unable to find key" +msgstr "Kan sleutel niet vinden" + +msgid "Unable to generate a random username for login" +msgstr "Kan geen willekeurige gebruikersnaam genereren om aan te melden" + +#, c-format +msgid "Unable to get file stats on %s" +msgstr "Kan statistieken bestands niet ophalen van %s" + +#, c-format +msgid "Unable to get lock on %s" +msgstr "Kan geen vergrendeling krijgen op %s" + +#, c-format +msgid "Unable to get privileges for %s: %s" +msgstr "Kan geen rechten krijgen voor %s: %s" + +msgid "Unable to get the user's crypted password for the ftp passwd file" +msgstr "" +"Kan het versleutelde wachtwoord van de gebruiker voor het ftp passwd bestand " +"niet verkrijgen" + +#, c-format +msgid "Unable to lock %s area" +msgstr "Kan %s gebied niet vergrendelen" + +#, c-format +msgid "Unable to lock %s: %s" +msgstr "Kan %s :%s niet vergrendelen" + +#, c-format +msgid "Unable to lock the '%s' account actions" +msgstr "Kan de account acties van '%s' niet vergrendelen" + +#, c-format +msgid "Unable to lock user %s: %s" +msgstr "Kan gebruiker %s: %s niet vergrendelen" + +msgid "Unable to modify that domain" +msgstr "Kan dat domein niet wijzigen" + +#, c-format +msgid "Unable to open %s for appending" +msgstr "Kan %s niet openen om toe te voegen" + +#, c-format +msgid "Unable to open %s for appending: %s" +msgstr "Kan %s niet openen om: %s toe te voegen" + +#, c-format +msgid "Unable to open %s for reading" +msgstr "Kan %s niet openen om te lezen" + +#, c-format +msgid "Unable to open %s for writing: %s" +msgstr "Kan %s niet openen om te schrijven:%s" + +#, c-format +msgid "Unable to open %s to restore the databases" +msgstr "Kan %s niet openen om de databases te herstellen" + +#, c-format +msgid "Unable to open %s: %s" +msgstr "Kan %s: %s niet openen" + +msgid "Unable to open a socket" +msgstr "Kan geen socket openen" + +#, c-format +msgid "Unable to open ca certificate file (%s) to write to: %s" +msgstr "Kan CA certificaat bestand (%s) niet openen om naar: %s te schrijven" + +#, c-format +msgid "Unable to open certificate file (%s) to write to: %s" +msgstr "Kan certificaatbestand (%s) niet openen om te schrijven naar: %s" + +#, c-format +msgid "Unable to open directory %s: %s" +msgstr "Kan de map %s: %s niet openen" + +#, c-format +msgid "Unable to parse %s from script '%s '(%s) output:" +msgstr "Kan %s van script '%s' (%s) niet parseren, uitvoer:" + +#, c-format +msgid "Unable to read %s as account %s" +msgstr "Kan %s niet lezen als account %s" + +#, c-format +msgid "Unable to read %s's user files" +msgstr "Kan de gebruikers bestanden van %s niet lezen" + +#, c-format +msgid "Unable to read %s. This file is only created after a tally is run." +msgstr "" +"Kan %s niet lezen. Dit bestand wordt pas gemaakt nadat een tally is " +"uitgevoerd." + +#, c-format +msgid "" +"Unable to read %s. This file is only created when emails are delivered." +msgstr "" +"Kan %s niet lezen. Dit bestand wordt alleen aangemaakt als e-mails worden " +"bezorgd." + +#, c-format +msgid "Unable to read %s: %s" +msgstr "Kan %s: %s niet lezen" + +#, c-format +msgid "Unable to read DS file %s" +msgstr "Kan DS bestand %s niet lezen" + +msgid "Unable to read History File." +msgstr "Kan geschiedenis bestand niet lezen." + +#, c-format +msgid "Unable to read RoundCube backup script: %s" +msgstr "Kan RoundCube backup script niet lezen: %s" + +#, c-format +msgid "Unable to read RoundCube restore script: %s" +msgstr "Kan het RoundCube herstel script niet lezen: %s" + +#, c-format +msgid "Unable to read data from %s" +msgstr "Kan de gegevens van %s niet lezen" + +msgid "Unable to read directatdmin.conf" +msgstr "Kan directadmin.conf niet lezen" + +msgid "Unable to read domain configuration files" +msgstr "Kan de domein configuratie bestanden niet lezen" + +msgid "Unable to read package" +msgstr "Kan het pakket niet lezen" + +msgid "Unable to read system uptime" +msgstr "Kan de uptime van het systeem niet lezen" + +#, c-format +msgid "Unable to read the %s file. Make sure it exists." +msgstr "Kan het %s bestand niet lezen. Zorg ervoor dat het bestaat." + +msgid "Unable to read the cliboard file" +msgstr "Kan het klembord bestand niet lezen" + +msgid "Unable to read the system ftp passwd file to add the user to it." +msgstr "" +"Kan het ftp passwd bestand van het systeem niet lezen om de gebruiker toe te " +"voegen." + +msgid "Unable to read the system ftp passwd file to remove the system ftp user" +msgstr "" +"Kan het ftp passwd bestand van het systeem niet lezen om de ftp gebruiker " +"van het systeem te verwijderen" + +msgid "Unable to read the user's files" +msgstr "Kan de bestanden van de gebruiker niet lezen" + +msgid "Unable to read ticket config file" +msgstr "Kan ticket configuratie bestand niet lezen" + +msgid "Unable to read zone file to increase serial" +msgstr "Kan zone bestand niet lezen om de serieel te verhogen" + +#, c-format +msgid "Unable to read zonefile for %s" +msgstr "Kan zone bestand voor %s niet lezen" + +msgid "Unable to reboot" +msgstr "Kan niet opnieuw opstarten" + +msgid "Unable to remove IP(s)" +msgstr "Kan IP(s) niet verwijderen" + +msgid "Unable to remove Unix User." +msgstr "Unix gebruiker kan niet worden verwijderd." + +msgid "Unable to remove all the of the reseller's users" +msgstr "Kan niet alle gebruikers van de Reseller verwijderen" + +#, c-format +msgid "Unable to rename %s to %s: %s" +msgstr "Kan %s niet hernoemen naar %s: %s" + +#, c-format +msgid "Unable to restore %s to %s: %s" +msgstr "Kan %s niet herstellen naar %s: %s" + +#, c-format +msgid "" +"Unable to restore '%s' because the Reseller or Admin '%s' cannot be found. " +"Rename the file if needed." +msgstr "" +"Kan '%s' niet herstellen omdat de Reseller of Admin '%s' niet kan worden " +"gevonden. Hernoem het bestand indien nodig." + +msgid "Unable to restore database" +msgstr "Kan database niet herstellen" + +msgid "Unable to satisfy difficult password check." +msgstr "Kan niet voldoen aan moeilijke wachtwoord controle." + +msgid "Unable to save dns zone: named-checkzone returned:" +msgstr "Kan DNS zone niet opslaan: named-checkzone retourneerd:" + +msgid "Unable to save your changes" +msgstr "Uw wijzigingen kunnen niet worden opgeslagen" + +msgid "Unable to set bandwidth" +msgstr "Kan de bandbreedte niet instellen" + +msgid "Unable to set file permissions" +msgstr "Kan bestands rechten niet instellen" + +#, c-format +msgid "Unable to set ip %s to be nameserver. Continuing anyway." +msgstr "Kan ip %s niet instellen als naamserver. Toch doorgaan." + +msgid "Unable to set password" +msgstr "Wachtwoord kan niet worden ingesteld" + +msgid "Unable to set quota" +msgstr "Kan quota niet instellen" + +msgid "Unable to set stats link" +msgstr "Kan statistieken link niet instellen" + +msgid "Unable to set the E-Mail Limit" +msgstr "Kan de e-mail limiet niet instellen" + +msgid "Unable to set the shell" +msgstr "Kan de shell niet instellen" + +msgid "Unable to show Admin History" +msgstr "Kan de geschiedenis van de Admin niet weergeven" + +msgid "Unable to show Reseller History" +msgstr "Kan geschiedenis van de Reseller niet weergeven" + +msgid "Unable to show User History" +msgstr "Kan de geschiedenis van de Gebruiker niet weergeven" + +msgid "Unable to show current E-Mail usage" +msgstr "Kan het huidige e-mailgebruik niet weergeven" + +msgid "Unable to show the system information" +msgstr "Kan de systeem informatie niet weergeven" + +#, c-format +msgid "Unable to trash %s to %s: %s" +msgstr "Kan %s niet weggooien naar %s:%s" + +#, c-format +msgid "Unable to unlock user %s: %s" +msgstr "Kan de gebruiker %s: %s niet ontgrendelen" + +msgid "Unable to update your Disk Usage" +msgstr "Kan uw Schijf Gebruik niet bijwerken" + +msgid "Unable to use that new domain name" +msgstr "Kan die nieuwe domeinnaam niet gebruiken" + +#, c-format +msgid "Unable to write %s's user files" +msgstr "Kan de gebruikersbestanden van %s niet schrijven" + +#, c-format +msgid "Unable to write %s: %s" +msgstr "Kan %s: %s niet schrijven" + +msgid "Unable to write User's httpd.conf" +msgstr "Kan httpd.conf van de gebruiker niet schrijven" + +msgid "Unable to write reseller's IP list" +msgstr "Kan niet naar de IP lijst van de Reseller schrijven" + +msgid "Unable to write the domain config file" +msgstr "Kan het domein configuratie bestand niet schrijven" + +msgid "" +"Unable to write the main ftp password file. Your changes will not take " +"effect." +msgstr "" +"Kan het ftp wachtwoord bestand niet schrijven. Uw wijzigingen worden niet " +"doorgevoerd." + +#, c-format +msgid "" +"Unable to write the quota file. Let your administartor know that %s is " +"unwriteable." +msgstr "" +"Kan het quota bestand niet schrijven. Laat uw administrator weten dat %s " +"niet beschrijfbaar is." + +msgid "" +"Unable to write the system ftp passwd file to remove the system ftp user" +msgstr "" +"Kan het ftp passwd bestand van het systeem niet schrijven om de ftp " +"gebruiker van het systeem te verwijderen" + +#, c-format +msgid "" +"Unable to write the usage.cache file. Let your administartor know that %s is " +"unwriteable." +msgstr "" +"Kan het bestand use.cache niet schrijven. Laat uw administrator weten dat %s " +"niet beschrijfbaar is." + +msgid "Unable to write ticket config" +msgstr "Kan ticket configuratie niet schrijven" + +#, c-format +msgid "" +"Unable to write to the password file. Let your administrator know that %s is " +"unwritable." +msgstr "" +"Kan niet schrijven naar het wachtwoord bestand. Laat uw administrator weten " +"dat %s niet schrijfbaar is." + +msgid "Unable to write to the system ftp passwd file to add the user to it." +msgstr "" +"Kan niet schrijven naar het ftp passwd bestand van het systeem om de " +"gebruiker toe te voegen." + +msgid "Unable to write zone file to increase serial" +msgstr "Kan het zone bestand niet schrijven om serieel te verhogen" + +#, c-format +msgid "Unable to write zonefile for %s" +msgstr "Kan zonebestand voor %s niet schrijven" + +msgid "Unblock" +msgstr "Deblokkeren" + +msgid "Unblocking is disabled." +msgstr "Deblokkeren is uitgeschakeld." + +msgid "" +"Unchecking will immediately delete the file from disk and cannot be recovered" +msgstr "" +"Als u deze optie uitschakelt, wordt het bestand onmiddellijk van de schijf " +"verwijderd en kan het niet worden hersteld" + +msgid "Unhandled exception name" +msgstr "Onverwerkte uitzondering naam" + +#, c-format +msgid "Unhandled route %s value '%s'" +msgstr "Onverwerkte route %s waarde '%s'" + +msgid "Unix User created successfully" +msgstr "Unix gebruiker is aangemaakt" + +msgid "Unix User removed from the server" +msgstr "Unix gebruiker is verwijderd van de server" + +msgid "Unix proxy IP/port should not have any of path, query or hash" +msgstr "Unix proxy IP/poort mag geen pad, query of hash hebben" + +#, fuzzy, c-format +#| msgid "Unknown option '%s'" +msgid "Unknown '%s'" +msgstr "Onbekende actie '%s'" + +msgid "Unknown action" +msgstr "Onbekende actie" + +msgid "Unknown backup destination" +msgstr "Onbekende backup bestemming" + +msgid "Unknown certificate type. Only server, create and paste are allowed" +msgstr "" +"Onbekend certificaat type. Alleen server, creer en plak zijn toegestaan" + +msgid "Unknown ftp type" +msgstr "Onbekend ftp type" + +#, c-format +msgid "Unknown option '%s'" +msgstr "Onbekende actie '%s'" + +#, c-format +msgid "Unknown value for %s" +msgstr "Onbekende waarde voor %s" + +msgid "Unlimited" +msgstr "Onbeperkt" + +msgid "Unsuspend" +msgstr "Opschorten" + +msgid "" +"Until the cache is created, the values may not be correct. Refresh the page " +"in 1 minute." +msgstr "" +"Totdat de cache is gemaakt zijn de waarden mogelijk niet correct. Vernieuw " +"de pagina over 1 minuut." + +msgid "Up a Level" +msgstr "Een niveau omhoog" + +msgid "Update" +msgstr "Bijwerken" + +msgid "Update Successful" +msgstr "Update Succesvol" + +msgid "Update queued" +msgstr "Update in de wachtrij geplaatst" + +msgid "Upload successful" +msgstr "Succesvol geupload" + +#, c-format +msgid "Uploaded %s value is not valid json" +msgstr "De geüploade waarde van %s is geen geldige json" + +msgid "Uploaded file is not valid for copy" +msgstr "Het geüploade bestand is niet geldig om te kopiëren" + +#, c-format +msgid "Uploaded: %s" +msgstr "Geüpload: %s" + +msgid "" +"Uploading files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Het uploaden van bestanden is uitgeschakeld met de optie " +"filemanager_disable_features" + +msgid "Usage (Meg)" +msgstr "Gebruik (Meg)" + +msgid "Usage Log" +msgstr "Gebruiks Logboek" + +msgid "Usage statistics have not yet been collected for this account" +msgstr "Er zijn nog geen gebruiks statistieken verzameld voor deze account" + +#, c-format +msgid "Use%%" +msgstr "Gebruik%%" + +msgid "Used" +msgstr "Gebruikt" + +msgid "User" +msgstr "Gebruiker" + +#, c-format +msgid "User %s Removed" +msgstr "Gebruiker %s Verwijderd" + +#, c-format +msgid "User %s already exists. Please chose a different username." +msgstr "Gebruiker %s bestaat al. Kies een andere gebruikersnaam." + +#, c-format +msgid "User %s created" +msgstr "Gebruiker %s aangemaakt" + +#, c-format +msgid "User %s did not exist on the server. Removing it from your list." +msgstr "" +"Gebruiker %s bestond niet op de server. Wordt verwijderd uit uw lijst." + +#, c-format +msgid "User %s does not exist on the system." +msgstr "Gebruiker %s bestaat niet op het systeem." + +#, c-format +msgid "User %s exists on the system but is not in your User list" +msgstr "" +"Gebruiker %s bestaat op het systeem maar staat niet in uw Gebruikers Lijst" + +#, c-format +msgid "User %s has been added to your database. Use the following values:" +msgstr "" +"Gebruiker %s is toegevoegd aan uw database. Gebruik de volgende waarden:" + +#, c-format +msgid "User %s has been backed up." +msgstr "Er is een backup van gebruiker %s gemaakt." + +#, c-format +msgid "User %s has been restored" +msgstr "Gebruiker %s is hersteld" + +#, c-format +msgid "User %s has been updated. Use the following values:" +msgstr "Gebruiker %s is bijgewerkt. Gebruik de volgende waarden:" + +#, c-format +msgid "User %s has one or more hard links in their path:" +msgstr "Gebruiker %s heeft een of meer vaste links in zijn pad:" + +#, c-format +msgid "User %s is already suspended" +msgstr "Gebruiker %s is al opgeschort" + +#, c-format +msgid "User %s is already unsuspended" +msgstr "Gebruiker %s is niet meer opgeschort" + +#, c-format +msgid "User %s is not on your list. You cannot make a backup for him." +msgstr "" +"Gebruiker %s staat niet op uw lijst. U kunt geen backup voor hem maken." + +#, c-format +msgid "User %s is not on your list. You cannot make a backup for them." +msgstr "" +"Gebruiker %s staat niet op uw lijst. U kunt geen backup voor hen maken." + +#, c-format +msgid "User %s not deleted. Unable to delete all of their users." +msgstr "" +"Gebruiker %s is niet verwijderd. Kan niet alle gebruikers van hun " +"verwijderen." + +#, c-format +msgid "User %s was not created by you-> Not Deleted." +msgstr "Gebruiker %s is niet door u aangemaakt-> Wordt Niet verwijderd." + +#, c-format +msgid "User %s was suspended in the backup. Account suspended." +msgstr "Gebruiker %s is opgeschort in de backup. Account is opgeschort." + +#, c-format +msgid "User %s was suspended in the backup. Error suspending the account:" +msgstr "" +"Gebruiker %s is opgeschort in de backup. Fout bij het opschorten van het " +"account:" + +#, c-format +msgid "User '%s' does not exist" +msgstr "Gebruiker '%s' bestaat niet" + +msgid "User Acconts" +msgstr "Gebruiker Account" + +msgid "User Accounts" +msgstr "Gebruiker Account" + +msgid "User Bandwidth" +msgstr "Gebruiker Bandbreedte" + +msgid "User Comment Box" +msgstr "Gebruikers Commentaar Vak" + +msgid "User DNSSEC Control is disabled" +msgstr "DNSSEC Controle voor Gebruiker is uitgeschakeld" + +msgid "User Disk Quota" +msgstr "Systeemquota van de Gebruiker" + +msgid "User History" +msgstr "Gebruiker Geschiedenis" + +msgid "User Modified" +msgstr "Gebruiker Gewijzigd" + +msgid "User Resource Limits" +msgstr "Limieten voor Gebruikers Bronnen" + +msgid "User SMTP Logs are are not enabled" +msgstr "SMTP Logboek van Gebruikers zijn niet ingeschakeld" + +msgid "User Updated" +msgstr "Gebruiker bijgewerkt" + +msgid "User added to SSH config file successfully" +msgstr "Gebruiker succesvol toegevoegd aan het SSH configuratie bestand" + +msgid "User added to database" +msgstr "Gebruiker toegevoegd aan het database" + +msgid "User added to named.conf file successfully" +msgstr "De gebruiker is succesvol toegevoegd aan het named.conf bestand" + +msgid "User added to ssh config file." +msgstr "Gebruiker toegevoegd aan het ssh configuratie bestand." + +msgid "User backups have been disabled." +msgstr "Gebruikers backups zijn uitgeschakeld." + +msgid "User config file updated." +msgstr "Gebruikers configuratie bestand bijgewerkt." + +msgid "User does not exist" +msgstr "Gebruiker bestaat niet" + +msgid "User password changed, however the account is still suspended" +msgstr "" +"Gebruikers wachtwoord is gewijzigd maar het account is nog steeds opgeschort" + +msgid "User removed from SSH" +msgstr "Gebruiker verwijderd uit SSH" + +msgid "User's System Quotas set" +msgstr "Systeemquota van de Gebruiker is ingesteld" + +msgid "User's config files deleted" +msgstr "De configuratie bestanden van de Gebruiker is verwijderd" + +msgid "User's data directory created successfully" +msgstr "De data map van de gebruiker is met succes aangemaakt" + +msgid "User's data directory removed." +msgstr "De gegevens map van de Gebruiker is verwijderd." + +msgid "User(s)" +msgstr "Gebruiker(s)" + +msgid "User::get_all_widgets: Invalid level" +msgstr "User::get_all_widgets: Ongeldige niveau" + +#, c-format +msgid "UserDir: %s" +msgstr "UserDir: %s" + +msgid "Username" +msgstr "Gebruikersnaam" + +#, c-format +msgid "Username '%s' is too long. Length %d > max_username_length=%d" +msgstr "Gebruikersnaam '%s' is te lang. Lengte %d> max_username_length =%d" + +msgid "Username is too short. It must be at least 2 characters long." +msgstr "Gebruikersnaam is te kort. Het moet minimaal 2 karakters lang zijn." + +msgid "" +"Username must be Alphanumeric (a-z, A-Z, 0-9), with the first character " +"being a letter" +msgstr "" +"De gebruikers naam moet alfanumeriek zijn (a-z, A-Z, 0-9), waarbij het " +"eerste teken een letter is" + +msgid "Username:" +msgstr "Gebruikersnaam:" + +msgid "Users" +msgstr "Gebruikers" + +msgid "Users deleted" +msgstr "Gebruikers verwijderd" + +msgid "Users will be deleted in the background." +msgstr "Gebruikers worden op de achtergrond verwijderd." + +msgid "Users's domains directory removed." +msgstr "De map met domeinen van de Gebruiker is verwijderd." + +msgid "Usertype" +msgstr "Gebruikerstype" + +msgid "Uses" +msgstr "Gebruikt" + +#, c-format +msgid "Using path %s is not allowed." +msgstr "Het gebruik van pad %s is niet toegestaan." + +msgid "Vacation Account" +msgstr "Vakantie account" + +msgid "Vacation Message Deleted" +msgstr "Vakantie Bericht is Verwijderd" + +msgid "Vacation Message set" +msgstr "Vakantie Bericht is ingesteld" + +msgid "Vacation Message updated" +msgstr "Vakantie Bericht is bijgewerkt" + +msgid "Vacation Messages" +msgstr "Vakantie Berichten" + +msgid "Valid" +msgstr "Geldig" + +msgid "Valid broadcast address set." +msgstr "Geldig broadcast adres ingesteld." + +msgid "Value" +msgstr "Waarde" + +#, c-format +msgid "Value is too long. Max=%d" +msgstr "Waarde is te lang. Max =%d" + +msgid "Variable 'ip' is missing from the submission" +msgstr "Variabele 'ip' ontbreekt in de inzending" + +msgid "Vendor ID" +msgstr "Verkopers ID" + +msgid "Verify" +msgstr "Verifieer" + +msgid "View" +msgstr "Bekijk" + +msgid "View Clipboard" +msgstr "Toon klembord" + +msgid "View previous sort" +msgstr "Bekijk vorige sortering" + +msgid "Warning from named-checkzone:" +msgstr "Waarschuwing van named-checkzone:" + +#, c-format +msgid "" +"Warning: %s has a valid password for %s but failed the Two-Step " +"Authentication code %s times." +msgstr "" +"Waarschuwing: %s heeft een geldig wachtwoord voor %s maar slaagde %s keer " +"niet voor de tweestapsverificatiecode." + +#, c-format +msgid "" +"Warning: %s has a valid password for %s but failed the security questions %s " +"times." +msgstr "" +"Waarschuwing: %s heeft een geldig wachtwoord voor %s, maar de " +"beveiligingsvraag is %s keer mislukt." + +msgid "Warning: Quota limit reached. File(s) may be empty." +msgstr "Waarschuwing: Quotum limiet bereikt. Bestand(en) zijn mogelijk leeg." + +msgid "Warning: Saved filesize is less than uploaded filesize. Check quotas." +msgstr "" +"Waarschuwing: De opgeslagen bestandsgrootte is kleiner dan de geüploade " +"bestandsgrootte. Controleer quota." + +msgid "Warning: The system load average is" +msgstr "Waarschuwing: De gemiddelde systeembelasting is" + +#, c-format +msgid "We've only read %lld of the %lld byte file from %s" +msgstr "We hebben alleen %lld van de %lld byte van het bestand %s gelezen" + +msgid "Webalizer" +msgstr "Webalizer" + +msgid "Webmail" +msgstr "Webmail" + +msgid "Webmail Attachments" +msgstr "Webmail Bijlagen" + +msgid "Webmail SSO" +msgstr "Webmail SSO" + +msgid "Week of Month" +msgstr "Week van de Maand" + +#, c-format +msgid "Weekly Rate limit of %d for '%s' has been reached" +msgstr "" + +#, c-format +msgid "Welcome to %s" +msgstr "Welkom bij %s" + +msgid "What" +msgstr "Wat" + +msgid "What is the first name of the boy or girl that you first kissed?" +msgstr "" +"Wat is de voornaam van de jongen of het meisje dat je voor het eerst kuste?" + +msgid "What is the middle name of your oldest child?" +msgstr "Wat is de middelste naam van uw oudste kind?" + +msgid "What is the name of a college you applied to but didn't attend?" +msgstr "" +"Wat is de naam van een college waarop je hebt gesolliciteerd maar niet hebt " +"deelgenomen?" + +msgid "What is the name of the place your wedding reception was held?" +msgstr "Wat is de naam van de plaats waar uw huwelijks receptie plaatsvond?" + +msgid "What is the name of your favorite childhood friend?" +msgstr "Hoe heet je favoriete jeugdvriend?" + +msgid "What is your maternal grandmother's maiden name" +msgstr "Wat is de meisjesnaam van uw oma van moederskant" + +msgid "" +"What is your oldest brother's birthday month and year? (e.g: January 1970)" +msgstr "" +"Wat is de verjaardagsmaand en het jaar van uw oudste broer? (bijvoorbeeld: " +"januari 1970)" + +msgid "What is your oldest cousin's first and last name?" +msgstr "Wat is de voor- en achternaam van uw oudste neef?" + +msgid "" +"What is your oldest sibling's birthday month and year? (e.g: January 1970)" +msgstr "" +"Wat is de verjaardagsmaand en het jaar van uw oudste broer of zus? " +"(bijvoorbeeld: januari 1970)" + +msgid "What is your oldest sibling's middle name?" +msgstr "Wat is de tweede naam van je oudste broer of zus?" + +msgid "What school did you attend for sixth grade?" +msgstr "Op welke school zat je voor het zesde leerjaar?" + +msgid "What street did you live on in third grade?" +msgstr "In welke straat woonde je in de derde klas?" + +msgid "What was the last name of your third grade teacher?" +msgstr "Wat was de achternaam van je leraar uit de derde klas?" + +msgid "What was the name of your first stuffed animal?" +msgstr "Wat was de naam van je eerste knuffeldier?" + +msgid "What was your childhood nickname?" +msgstr "Wat was je bijnaam uit je kindertijd?" + +msgid "" +"What was your childhood phone number including area code? (e.g: 000-000-0000)" +msgstr "" +"Wat was het telefoonnummer van je jeugd inclusief het netnummer? " +"(bijvoorbeeld: 000-000-0000)" + +msgid "When" +msgstr "Wanneer" + +msgid "Where" +msgstr "Waar" + +msgid "Where were you when you had your first kiss?" +msgstr "Waar was je toen je de eerste kus kreeg?" + +msgid "Who" +msgstr "Wie" + +#, c-format +msgid "Widget '%s' is not available" +msgstr "Widget '%s' is niet beschikbaar" + +msgid "Widgets are not enabled in this account level" +msgstr "Widgets zijn niet ingeschakeld op dit account niveau" + +msgid "Wildcard" +msgstr "Wildcard" + +msgid "With Selected" +msgstr "Met Geselecteerde" + +msgid "With selected" +msgstr "Met geselecteerde" + +#, c-format +msgid "Won't activate %s's account because its off" +msgstr "Activeert het account van %s niet omdat het is uitgeschakeld" + +#, c-format +msgid "Write error with %s: %s" +msgstr "Schrijffout met %s: %s" + +msgid "Wrong Answer." +msgstr "Verkeerde Antwoord." + +#, c-format +msgid "Wrong Answer. You have %d more attempt.%s" +msgid_plural "Wrong Answer. You have %d more attempts.%s" +msgstr[0] "Verkeerd antwoord. Je hebt %d meer poging.%s" +msgstr[1] "Verkeerd antwoord. Je hebt %d meer pogingen.%s" + +#, c-format +msgid "Wrong Answer. You have %d more attempts.%s" +msgstr "Verkeerd antwoord. Je hebt %d meer pogingen.%s" + +#, c-format +msgid "Wrong number of '%s' elements. Allowed: 1, or 2 with '%s')" +msgstr "Verkeerd aantal '%s' elementen. Toegestaan: 1 of 2 met '%s')" + +#, c-format +msgid "Wrong number of 'pass' values: %d in '%s' (slash separated)" +msgstr "Verkeerd aantal 'pass' waarden: %d in'%s '(schuine streep gescheiden)" + +msgid "Yes" +msgstr "Ja" + +#, c-format +msgid "" +"You are deleting Admin or Reseller accounts that have %d User under their " +"control." +msgid_plural "" +"You are deleting Admin or Reseller accounts that have %d Users under their " +"control." +msgstr[0] "" +"U verwijdert Admin of Reseller accounts die %d Gebruiker onder zijn controle " +"heeft." +msgstr[1] "" +"U verwijdert Admin of Reseller accounts die %d Gebruikers onder zijn " +"controle heeft." + +msgid "You are not allowed to enable anonymous ftp" +msgstr "Het is niet toegestaan om anonieme ftp in te schakelen" + +msgid "You are not allowed to modify your ssl settings" +msgstr "U mag uw ssl instellingen niet wijzigen" + +msgid "You are not logged in from a master account" +msgstr "U bent niet ingelogd vanaf een master account" + +msgid "You aren't allowed to modify that ticket" +msgstr "U mag dat ticket niet wijzigen" + +#, c-format +msgid "" +"You can click the E-Mail below to be immediately logged into %s as this " +"User, without knowing their password." +msgstr "" +"U kunt op de onderstaande e-mail klikken om onmiddellijk als deze gebruiker " +"bij %s in te loggen zonder het wachtwoord te weten." + +msgid "You can only add a certificate if you own the ip you are using" +msgstr "" +"U kunt alleen een certificaat toevoegen als u de eigenaar bent van het ip " +"dat u gebruikt" + +msgid "You can only add a certificate to your main domain" +msgstr "U kunt alleen een certificaat toevoegen aan uw hoofd domein" + +msgid "You can't make a list named majordomo as its a reserved alias" +msgstr "" +"U kunt geen lijst maken met de naam in majordomo omdat dit een gereserveerde " +"alias is" + +msgid "You can't suspend root. That would be BAD" +msgstr "U kunt root niet opschorten. Dat zou FOUT zijn" + +msgid "You cannot add that extension" +msgstr "U kunt die extensie niet toevoegen" + +msgid "You cannot assign the domain more bandwidth than your account" +msgstr "U kunt het domein niet meer bandbreedte toewijzen dan uw account" + +msgid "You cannot assign the domain more quota than your account" +msgstr "U kunt het domein niet meer quota toewijzen dan uw account" + +msgid "You cannot create more Users than you are allowed domains." +msgstr "" +"U kunt niet meer gebruikers aanmaken dan de aan u toegestaan aantal domeinen." + +msgid "You cannot delete all of your IPs" +msgstr "U kunt niet al uw IP adressen verwijderen" + +#, c-format +msgid "" +"You cannot delete the account %s because it is linked to your system account" +msgstr "" +"U kunt de account %s niet verwijderen omdat deze is gekoppeld aan uw " +"systeemaccount" + +#, c-format +msgid "You cannot delete yourself (%s)" +msgstr "U kunt uzelf (%s) niet verwijderen" + +msgid "You cannot execute that command" +msgstr "U kunt die opdracht niet uitvoeren" + +msgid "You cannot login as yourself" +msgstr "U kunt niet aanmelden als uzelf" + +msgid "You cannot modify yourself" +msgstr "U kunt uzelf niet wijzigen" + +msgid "" +"You cannot restore multiple Users on one free IP. The IP must first be " +"shared." +msgstr "" +"U kunt niet meerdere gebruikers op één beschikbare IP adres herstellen. Het " +"IP adres moet eerst worden gedeeld." + +msgid "You cannot set an unlimited send limit." +msgstr "U kunt geen onbeperkte verzendlimiet instellen." + +msgid "You cannot suspend yourself" +msgstr "U kunt uzelf niet schorsen" + +msgid "You cannot suspend/unsuspend yourself" +msgstr "U kunt uzelf niet opschorten of een opschorting opheffen" + +msgid "You cannot unsuspend this account." +msgstr "U kunt deze account niet deblokkeren." + +msgid "" +"You cannot use that domain as a pointer. It already exists on the server" +msgstr "" +"U kunt dat domein niet als pointer gebruiken. Het bestaat al op de server" + +#, c-format +msgid "You currently have %s Users and a maximum of %s domains." +msgstr "U heeft momenteel %s Gebruikers en een maximum van %s domeinen." + +msgid "You did not select any domains to modify" +msgstr "U heeft geen domeinen geselecteerd om te wijzigen" + +msgid "You didn't chose a different ip, no changes have been made" +msgstr "U heeft geen ander ip gekozen, er zijn geen wijzigingen aangebracht" + +msgid "You didn't select anyone to send it to" +msgstr "U heeft niemand geselecteerd om het naar toe te verzenden" + +msgid "You do not have control over user" +msgstr "U heeft geen controle over de gebruiker" + +msgid "You do not own any IPs" +msgstr "U heeft geen beschikbare IP adressen" + +msgid "You do not own that IP" +msgstr "U bent niet de eigenaar van dat IP" + +msgid "You do not own that domain" +msgstr "U bent niet de eigenaar van dat domein" + +msgid "You do not own that ip" +msgstr "Je bent niet de eigenaar van dat ip" + +msgid "You do not own that that cron ID" +msgstr "U bent niet de eigenaar van die cron ID" + +#, c-format +msgid "You do not own the IP %s. User %s will not be created" +msgstr "" +"U bent niet de eigenaar van de IP %s. Gebruiker %s wordt niet aangemaakt" + +msgid "You do not yet have any protected directories." +msgstr "U heeft nog geen beveiligde mappen." + +msgid "You don't have authority over that User" +msgstr "U heeft geen autoriteit over die Gebruiker" + +msgid "You don't have authority over that user" +msgstr "U heeft geen autoriteit over die gebruiker" + +msgid "You don't have permission to respond to that ticket" +msgstr "U heeft geen toestemming om op dat ticket te reageren" + +msgid "You don't have permission to restore user" +msgstr "U bent niet gemachtigd om de gebruiker te herstellen" + +msgid "You don't have permission to view that ticket" +msgstr "U heeft geen toestemming om dat ticket te bekijken" + +msgid "You forgot to include a filename" +msgstr "U bent vergeten een bestandsnaam op te nemen" + +#, c-format +msgid "You have %d more attempt." +msgid_plural "You have %d more attempts." +msgstr[0] "Je hebt nog %d meer poging." +msgstr[1] "Je hebt nog %d meer pogingen." + +#, c-format +msgid "You have %d:%.2d left." +msgstr "Je hebt %d:%.2d over." + +msgid "You have already reached your assigned limit" +msgstr "U heeft uw toegewezen limiet al bereikt" + +msgid "You have not added any files to the clipboard." +msgstr "U heeft geen bestanden aan het klembord toegevoegd." + +msgid "" +"You have not given the reseller any IP's. Unable to create an assigned IP " +"domain or any nameservers without any" +msgstr "" +"U heeft de Reseller geen enkele IP adres(sen) toegewezen. Kan geen " +"toegewezen IP, domein of nameserver aanmaken zonder dat" + +msgid "" +"You have not selected any Files. Please go back and select some before " +"restoring the backup." +msgstr "" +"U heeft geen bestanden geselecteerd. Ga terug en selecteer er enkele voordat " +"u de backup herstelt." + +msgid "" +"You have not selected any Users. Please go back and select some before " +"creating the backup." +msgstr "" +"U heeft geen Gebruikers geselecteerd. Ga terug en selecteer er enkele " +"voordat u de backup maakt." + +msgid "You have not selected any domains" +msgstr "U heeft geen domeinen geselecteerd" + +msgid "" +"You have successfully issued a server reboot command. It may take a few " +"minutes for the system boot up and become live again." +msgstr "" +"U hebt met succes een opdracht voor het opnieuw opstarten van de server " +"gegeven. Het kan enkele minuten duren voordat het systeem is opgestart en " +"weer live wordt." + +#, c-format +msgid "" +"You have used %d%% of your disk usage, which is more than the allowed " +"threshold of %d%%." +msgstr "" +"U heeft %d%% van uw schijf gebruikt, dat is meer dan de toegestane drempel " +"van %d%%." + +msgid "You may need to press F5 to reload the logo" +msgstr "Mogelijk moet u op F5 drukken om het logo opnieuw te laden" + +msgid "You may not use an IP for a domain name" +msgstr "U mag geen IP gebruiken voor een domeinnaam" + +msgid "You must enter a chmod value. eg: 755" +msgstr "U moet een chmod waarde invoeren. bijvoorbeeld: 755" + +msgid "You must enter a folder 'name'. eg: images" +msgstr "U moet een mapnaam invoeren. bijvoorbeeld: afbeeldingen" + +msgid "You must enter both password" +msgstr "U moet beide wachtwoorden invoeren" + +msgid "You must enter number, user, subject, priority, status and message" +msgstr "" +"U moet nummer, gebruiker, onderwerp, prioriteit, status en bericht invoeren" + +msgid "You must enter the password in both fields" +msgstr "U moet het wachtwoord in beide velden invoeren" + +msgid "You must enter user, subject, priority and message" +msgstr "U moet gebruiker, onderwerp, prioriteit en bericht invoeren" + +msgid "You must first create some packages" +msgstr "U moet eerst enkele pakketten aanmaken" + +msgid "You must first own an IP" +msgstr "U moet eerst een IP bezitten" + +msgid "You must have at least one database to login to phpMyAdmin" +msgstr "" +"U moet ten minste één database hebben voordat u kan aanmelden op phpMyAdmin" + +msgid "You must have more than 0 NS records or named may not start." +msgstr "" +"U moet meer dan 0 NS records hebben anders kan de service named niet starten." + +msgid "" +"You must provide 'required_hits' and 'required_hits_custom' if " +"'required_hits' is 'custom'" +msgstr "" +"Je moet 'required_hits' en 'required_hits_custom' opgeven als " +"'required_hits' 'custom' is" + +msgid "You must provide a list name" +msgstr "U moet een lijst naam opgeven" + +msgid "" +"You must provide a protected directory password prompt. eg: Member's Area" +msgstr "" +"U moet een wachtwoord prompt voor de beschermde map opgeven. bijvoorbeeld: " +"Ledengedeelte" + +msgid "You must provide a valid domain, ip, ns1 and ns2" +msgstr "U moet een geldige domein,ip, ns1 en ns2 opgeven" + +msgid "" +"You must provide a valid email address, oldpassword, password1 and password2" +msgstr "" +"U moet een geldig e-mailadres, oud wachtwoord, wachtwoord1 en wachtwoord2 " +"opgeven" + +msgid "" +"You must provide a valid ftp address, oldpassword, password1 and password2" +msgstr "" +"U moet een geldig ftp adres, oud wachtwoord, wachtwoord1 en wachtwoord2 " +"opgeven" + +msgid "You must provide a valid ip" +msgstr "U moet een geldig ip adres opgeven" + +msgid "You must provide a valid name and it must exist." +msgstr "U moet een geldige naam opgeven en dat moet een bestaande naam zijn." + +msgid "You must provide a valid name and value" +msgstr "U moet een geldige naam en waarde opgeven" + +msgid "You must provide the passwd variable" +msgstr "U moet de passwd variabele opgeven" + +msgid "" +"You must select a nameserver ip pair (ns1.domain.com and ns2.domain.com)" +msgstr "" +"U moet een naamserver ip paar selecteren (ns1.domain.com en ns2.domain.com)" + +msgid "You must select at least one mailing list to delete" +msgstr "U moet ten minste één mailinglijst selecteren om te verwijderen" + +msgid "You must select at least one mailing list to purge" +msgstr "U moet ten minste één mailinglijst selecteren om te legen" + +msgid "You must select exactly one key" +msgstr "U moet precies één sleutel selecteren" + +msgid "You must select something" +msgstr "U moet iets selecteren" + +msgid "" +"You must use a number for the hour (0-23). You can only have a cron run once " +"per day. (You can make more than one cron)" +msgstr "" +"U moet een nummer voor het uur gebruiken (0-23). Je kunt maar één keer per " +"dag een cron uitvoeren. (U kunt meer dan één cron maken)" + +msgid "" +"You must use a number for the minute (0-59). You can only have a cron run " +"once per day. (You can make more than one cron)" +msgstr "" +"U moet een nummer voor de minuut gebruiken (0-59). Je kunt maar één keer per " +"dag een cron uitvoeren. (U kunt meer dan één cron maken)" + +msgid "You must use a valid path" +msgstr "U moet een geldig pad gebruiken" + +#, c-format +msgid "You must wait at least %d minute between updates." +msgid_plural "You must wait at least %d minutes between updates." +msgstr[0] "U moet minstens %d minuut wachten tussen de updates." +msgstr[1] "U moet minstens %d minuten wachten tussen de updates." + +msgid "You must wait for the stats to be computed." +msgstr "U moet wachten tot de statistieken zijn berekend." + +msgid "You need to specify a domain" +msgstr "U moet een domein specificeren" + +msgid "You require a database name" +msgstr "U heeft een databasenaam nodig" + +msgid "You require a domain, anon, anonup and a message" +msgstr "U heeft een domein, anon, anonup en een bericht nodig" + +msgid "You require domain and passwd list to sync the accounts" +msgstr "" +"U hebt een domein en een passwd lijst nodig om de accounts te synchroniseren" + +msgid "You require either the passwd or quota" +msgstr "U hebt het passwd of het quotum nodig" + +msgid "You require name, user, passwd and passwd2" +msgstr "U heeft naam, gebruiker, passwd en passwd2 nodig" + +msgid "You require the name and user" +msgstr "U heeft de naam en de gebruiker nodig" + +msgid "You require the name, user, passwd and passwd2" +msgstr "U heeft de naam, gebruiker, passwd en passwd2 nodig" + +msgid "" +"You require the source url path (eg: /redirect) and the destination url (eg: " +"www.redirect.com)" +msgstr "" +"U hebt het url bron pad (bijv .: /omleid) en de bestemmings url (bijv .: www." +"omleid.com) nodig" + +msgid "You require user and domain to change a pop account" +msgstr "U heeft een gebruiker en domein nodig om een pop account te wijzigen" + +msgid "You require user, domain and passwd to add a pop account" +msgstr "Je hebt user, domain en passwd nodig om een pop account toe te voegen" + +msgid "You required a password" +msgstr "U heeft een wachtwoord nodig" + +msgid "You should be notified via the Message system when it is complete." +msgstr "" +"U wordt via het berichtensysteem op de hoogte worden gebracht wanneer het " +"voltooid is." + +msgid "You will be notified via the Message System upon completion." +msgstr "Na voltooiing wordt u via het berichtensysteem op de hoogte gesteld." + +msgid "" +"You will be notified via the Message System when the process is complete" +msgstr "" +"U wordt via het berichtensysteem op de hoogte gebracht wanneer het proces is " +"voltooid" + +msgid "You will receive a message when it's complete." +msgstr "U ontvangt een bericht wanneer het voltooid is." + +msgid "" +"You're using the login-as option, so use your own password. Not the User's " +"password." +msgstr "" +"U gebruikt de aanmelden-als optie, gebruik uw eigen wachtwoord. Niet het " +"wachtwoord van de gebruiker." + +#, c-format +msgid "Your Hash URL Login '%s' has been created" +msgstr "Uw Hash URL aanmelding '%s' is aangemaakt" + +msgid "Your IP will be blacklisted" +msgstr "Uw IP wordt op de zwarte lijst geplaatst" + +#, c-format +msgid "Your Login Key '%s' has been created" +msgstr "Uw Login Key '%s' is aangemaakt" + +#, c-format +msgid "Your Name has been changed to %s" +msgstr "Uw Naam is gewijzigd naar %s" + +msgid "Your account" +msgstr "Uw account" + +#, c-format +msgid "Your account %s@%s has been setup. In your e-mail program, use" +msgstr "Uw account%s@%s is ingesteld. In uw e-mailprogramma gebruik" + +msgid "Your account '|USERNAME|' has been suspended. Reason: '|REASON|'" +msgstr "Uw account '|USERNAME|' is geschorst. Reden: '|REASON|'" + +msgid "Your account for |domain| is now ready for use." +msgstr "Uw account voor |domain| is nu klaar voor gebruik." + +msgid "Your backups are now ready" +msgstr "Uw backups zijn nu klaar" + +msgid "Your database has been setup. Use the following values:" +msgstr "Uw database is opgezet. Gebruik de volgende waarden:" + +#, c-format +msgid "Your database name (%s) contains invalid characters (%s)." +msgstr "Uw databasenaam (%s) bevat ongeldige tekens (%s)." + +#, c-format +msgid "" +"Your database username (%s) contains invalid characters (%s). MySQL account " +"will not be created on %s." +msgstr "" +"De gebruikersnaam (%s) van uw database bevat ongeldige tekens (%s). MySQL " +"account wordt niet aangemaakt op %s." + +msgid "Your default domain has been set" +msgstr "Uw standaarddomein is ingesteld" + +msgid "Your disk usage has been updated" +msgstr "Uw schijfgebruik is bijgewerkt" + +msgid "Your message has been saved" +msgstr "Uw bericht is opgeslagen" + +msgid "Your message has been sent" +msgstr "Uw bericht is verzonden" + +msgid "Your message is being sent in the background" +msgstr "Uw bericht wordt op de achtergrond verzonden" + +msgid "" +"Your message is empty. Users might appreciate knowing what they're getting." +msgstr "" +"Uw bericht is leeg. Gebruikers waarderen het misschien om te weten wat ze " +"krijgen." + +msgid "Your password" +msgstr "Uw wachtwoord" + +msgid "Your password is invalid" +msgstr "Uw wachtwoord is ongeldig" + +msgid "" +"Your request for an update will begin in under a minute. You should be " +"notified via the Message system when it is complete" +msgstr "" +"Uw verzoek om een update begint binnen een minuut. U wordt via het " +"berichtensysteem op de hoogte worden gebracht wanneer het voltooid is" + +msgid "Your request for an updated license file will begin in under a minute." +msgstr "" +"Uw aanvraag voor een bijgewerkt licentiebestand begint binnen een minuut." + +msgid "Your request has expired." +msgstr "Uw verzoek is verlopen." + +msgid "Your request will be executed within 1 minute" +msgstr "Uw verzoek wordt binnen 1 minuut uitgevoerd" + +msgid "" +"Your request will run in the background. Once completed, you'll be notified " +"in the Message System." +msgstr "" +"Uw verzoek wordt op de achtergrond uitgevoerd. Na voltooiing wordt u hiervan " +"op de hoogte gesteld via Berichten Systeem." + +msgid "Your reseller account has reached its assigned limit" +msgstr "Uw reseller account heeft de toegewezen limiet bereikt" + +msgid "Your reseller has reached their assigned limit" +msgstr "Uw reseller heeft de toegewezen limiet bereikt" + +msgid "Your subject contains invalid characters." +msgstr "Uw onderwerp bevat ongeldige tekens." + +#, c-format +msgid "Your ticket number is %s." +msgstr "Uw ticket nummer is %s." + +msgid "Your usertype is too low to request these widgets" +msgstr "Uw gebruikers niveau is te laag om deze widgets aan te vragen" + +msgid "Zone Keys are newer than the Zone Signinging." +msgstr "Zone Sleutels zijn nieuwer dan de Zone Ondertekening." + +msgid "Zone Reset" +msgstr "Zone Resetten" + +msgid "Zone Signing has expired." +msgstr "Zone Ondertekening is verlopen." + +msgid "" +"Zone has not yet been signed. Ensure you first generate the keys and sign " +"it one before using this automated sign tool" +msgstr "" +"Zone is nog niet ondertekend. Zorg ervoor dat u eerst de sleutels genereert " +"en deze ondertekent voordat u deze automatische ondertekentool gebruikt" + +msgid "Zone is of type DNSSEC." +msgstr "Zone is van het type DNSSEC." + +msgid "Zone keys generated" +msgstr "Zone sleutels gegenereerd" + +msgid "Zone signed" +msgstr "Zone ondertekend" + +msgid "access hosts cannot be domains because skip_name_resolve=ON" +msgstr "toegangs hosts kunnen geen domeinen zijn omdat skip_name_resolve = ON" + +msgid "account ..." +msgstr "account ..." + +msgid "adding" +msgstr "toevoegen" + +msgid "allow_subdomain_docroot_override is disabled" +msgstr "allow_subdomain_docroot_override is uitgeschakeld" + +msgid "at least" +msgstr "ten minste" + +msgid "at most" +msgstr "hoogstens" + +msgid "can_dnssec is not enabled. Cannot sign the zone." +msgstr "can_dnssec is niet ingeschakeld. Kan de zone niet ondertekenen." + +#, c-format +msgid "cannot fstatat %s: %s" +msgstr "kan fstatat niet %s: %s" + +#, c-format +msgid "cannot unlinkat %s: %s" +msgstr "kan unlinkat niet %s: %s" + +msgid "catch is required" +msgstr "catch is verplicht" + +#, c-format +msgid "cgroup error: %s" +msgstr "cgroup fout: %s" + +msgid "cgroup is not enabled in your license" +msgstr "cgroup is niet ingeschakeld in jouw licentie" + +msgid "cgroup is turned off in the directadmin.conf" +msgstr "cgroup is uitgeschakeld in het bestand directadmin.conf" + +msgid "change" +msgstr "verander" + +msgid "contains" +msgstr "bevat" + +msgid "day" +msgid_plural "days" +msgstr[0] "dag" +msgstr[1] "dagen" + +msgid "day(s)" +msgstr "dag(en)" + +msgid "days" +msgstr "dagen" + +msgid "default user" +msgstr "standaard gebruiker" + +#, c-format +msgid "dnsprovider option '%s' contains invalid characters" +msgstr "dnsprovider optie '%s' bevat ongeldige tekens" + +msgid "does not belong to you" +msgstr "is niet van jou" + +msgid "emails have just been sent by" +msgstr "e-mails zijn zojuist verzonden door" + +msgid "equals" +msgstr "gelijk aan" + +msgid "has been changed." +msgstr "is gewijzigd." + +msgid "has been updated with the new ip" +msgstr "is bijgewerkt met het nieuwe ip" + +msgid "hidden" +msgstr "verborgen" + +msgid "high_score must be in the range 1 to 99" +msgstr "high_score moet tussen 1 en 99 liggen" + +msgid "hour" +msgid_plural "hours" +msgstr[0] "uur" +msgstr[1] "uren" + +msgid "hours" +msgstr "uren" + +#, c-format +msgid "is an invalid email address. User %s will not be created" +msgstr "is een ongeldig e-mailadres. Gebruiker %s wordt niet aangemaakt" + +msgid "is currently down" +msgstr "is momenteel uitgeschakeld" + +msgid "is not a valid database name" +msgstr "is geen geldige database naam" + +msgid "is not a valid username" +msgstr "is geen geldige gebruikersnaam" + +#, c-format +msgid "is_ip_in_mask_range:%s:%s: range '%s' must be a positive integer" +msgstr "" +"is_ip_in_mask_range: %s:%s: bereik '%s' moet een positief geheel getal zijn" + +#, c-format +msgid "" +"is_ip_in_mask_range:%s:%s: range '%s' must be between 1 and 128, inclusive" +msgstr "" +"is_ip_in_mask_range:%s:%s: bereik '%s' moet tussen 1 en 128 zijn, inclusief" + +#, c-format +msgid "is_ip_in_mask_range:%s:%s: range does not have /" +msgstr "is_ip_in_mask_range:%s:%s: bereik heeft geen /" + +msgid "json string" +msgstr "json reeks" + +msgid "license nresellers issue" +msgstr "licentie nresellers probleem" + +msgid "license nusers issue" +msgstr "licentie nusers probleem" + +msgid "license vdomains issue" +msgstr "licentie vdomains probleem" + +#, c-format +msgid "lstat error: %s" +msgstr "lstat fout: %s" + +msgid "mail() line number" +msgstr "mail() regel nummer" + +msgid "message is empty. Please enter some text." +msgstr "bericht is leeg. Voer wat tekst in." + +#, c-format +msgid "mime type (%s) for '%s' is not of type 'image/'" +msgstr "mime-type (%s) voor '%s' is niet van het type 'image/'" + +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minuut" +msgstr[1] "minuten" + +msgid "minutes" +msgstr "minuten" + +#, c-format +msgid "mkdir(%s) error: %s" +msgstr "mkdir(%s) fout: %s" + +msgid "modify password" +msgstr "wachtwoord wijzigen" + +msgid "modify privileges" +msgstr "rechten wijzigen" + +msgid "month" +msgid_plural "months" +msgstr[0] "maand" +msgstr[1] "maanden" + +msgid "mysqldump error output:" +msgstr "mysqldump fout uitvoer:" + +msgid "new_domain is not a valid domain" +msgstr "new_domain is geen geldig domein" + +msgid "newer than" +msgstr "nieuwer dan" + +msgid "ns1 or ns2 are not valid nameservers" +msgstr "ns1 of ns2 zijn geen geldige naamservers" + +msgid "of" +msgstr "van" + +msgid "old_package or new_package are not valid package names" +msgstr "old_package of new_package zijn geen geldige pakketnamen" + +msgid "older than" +msgstr "ouder dan" + +#, c-format +msgid "older than %s days." +msgstr "ouder dan %s dagen." + +msgid "or" +msgstr "of" + +msgid "or IPv6 (1:2:3:4:5:6:7:8) or IPv6 range (1:2:3:4:5:6:7:8-9)" +msgstr "of IPv6 (1:2:3:4:5:6:7:8) of IPv6 bereik (1:2:3:4:5:6:7:8-9)" + +msgid "or select from" +msgstr "of maak een keuze uit" + +msgid "php.ini override added" +msgstr "php.ini overschrijving toegevoegd" + +#, c-format +msgid "php1_select and php2_select must be 0-%d" +msgstr "php1_select en php2_select moeten 0-%d zijn" + +msgid "" +"phpMyAdmin is missing direct_login option. Please re-install phpMyAdmin." +msgstr "phpMyAdmin mist de optie direct_login. Installeer phpMyAdmin opnieuw." + +msgid "pop_disk_usage_cache is not enabled" +msgstr "pop_disk_usage_cache is niet ingeschakeld" + +msgid "port" +msgstr "poort" + +msgid "redirect_url contains invalid characters" +msgstr "omleid_url bevat ongeldige tekens" + +msgid "removing" +msgstr "verwijderen" + +msgid "reseller_can_set_email_limit=0 is set, thus you cannot set a limit" +msgstr "" +"reseller_can_set_email_limit =0 is ingesteld, u kunt geen limiet instellen" + +msgid "retry" +msgstr "opnieuw proberen" + +msgid "routes must start with a [ character." +msgstr "routes moeten beginnen met een [ teken." + +#, c-format +msgid "search length out of bounds: 2 <= '%zd' <= 128" +msgstr "zoeklengte buiten de grenzen: 2 <= '%zd' <= 128" + +msgid "second" +msgid_plural "seconds" +msgstr[0] "seconde" +msgstr[1] "seconden" + +msgid "selected" +msgstr "geselecteerd" + +msgid "selected overrides removed from php.ini" +msgstr "geselecteerde overschrijvingen zijn verwijderd uit php.ini" + +msgid "selected skipped rules removed" +msgstr "geselecteerde sla-over regels zijn verwijderd" + +msgid "selecting none includes all domains" +msgstr "Als u geen selecteert, worden alle domeinen opgenomen" + +msgid "sent" +msgstr "verzonden" + +msgid "set Permission" +msgstr "Toestemming instellen" + +msgid "show_blocked_ips.sh output:" +msgstr "show_blocked_ips.sh uitvoer:" + +msgid "starts with" +msgstr "begint met" + +msgid "subject contains invalid characters." +msgstr "onderwerp bevat ongeldige tekens." + +#, c-format +msgid "subject_select != %d, but subject is not set. This shouldn't happen." +msgstr "" +"subject_select! =%d, maar het onderwerp is niet ingesteld. Dit zou niet " +"mogen." + +msgid "that is the server's hostname and you cannot use it" +msgstr "dat is de hostnaam van de server, u kunt deze niet gebruiken" + +msgid "the new domain name already exists on your system" +msgstr "de nieuwe domeinnaam bestaat al op uw systeem" + +msgid "too many iterations" +msgstr "te veel iteraties" + +msgid "too many tables" +msgstr "te veel tabels" + +msgid "unlimited" +msgstr "onbeperkt" + +msgid "user, passwd, passwd2 and type are required" +msgstr "user, passwd, passwd2 en type zijn vereist" + +msgid "user.conf override" +msgstr "user.conf overschrijven" + +msgid "user_brutecount disabled" +msgstr "user_brutecount uitgeschakeld" + +msgid "user_modify_pre.sh error" +msgstr "user_modify_pre.sh fout" + +msgid "value is required" +msgstr "waarde is vereist" + +msgid "where=spamfolder has been disabled via show_main_spambox=0" +msgstr "where=spamfolder is uitgeschakeld via show_main_spambox =0" + +msgid "with the incorrect answer of" +msgstr "met het foute antwoord van" + +msgid "your new password is" +msgstr "uw nieuwe wachtwoord is" + +msgid "your new quota is" +msgstr "uw nieuwe quotum is" + +#, c-format +msgid "your new send limit is: %s" +msgstr "je nieuwe verzendlimiet is: %s" + +msgid "" +"~/domains was missing, but we ran into an error while trying to re-create it" +msgstr "" +"~/domein ontbreekt , er is een fout opgetreden bij het opnieuw aanmaken" + +#~ msgid "'%s' does not exist in the certificate" +#~ msgstr "'%s' bestaat niet in het certificaat" + +#~ msgid "Cannot find the %s account" +#~ msgstr "Kan account %s niet vinden" + +#~ msgid "Error reading %s to get 'email': %s" +#~ msgstr "Fout bij het lezen van %s om 'e-mail' %s te krijgen" + +#~ msgid "Invalid command" +#~ msgstr "Ongeldige commando" + +#~ msgid "Netdata Server Metrics" +#~ msgstr "Netdata Server Gegevens" + +#~ msgid "Please select at least one Mail SNI Host" +#~ msgstr "Selecteer ten minste één Mail SNI Host" + +#~ msgid "Rspamd WebUI" +#~ msgstr "Rspamd WebUI" + +#~ msgid "SNI Host '%s' does not belong to you" +#~ msgstr "SNI Host '%s' is niet van jou" + +#~ msgid "Cannot Delete those NS records" +#~ msgstr "Kan die NS records niet verwijderen" + +#~ msgid "Deleting them will leave you with 0." +#~ msgstr "Als u ze verwijdert, blijft er 0 achter." + +#~ msgid "Error writing %s : %s" +#~ msgstr "Fout bij het schrijven van %s: %s" + +#~ msgid "Memory Max" +#~ msgstr "Maximale Geheugen Gebruik" + +#~ msgid "Unable to read backups directory" +#~ msgstr "Kan het map met backups niet lezen" + +#~ msgid "cgroup limits will not be set" +#~ msgstr "cgroup limieten worden niet ingesteld" diff --git a/update/data/lang/tr/LC_MESSAGES/internal.po b/update/data/lang/tr/LC_MESSAGES/internal.po new file mode 100644 index 0000000..d6c4218 --- /dev/null +++ b/update/data/lang/tr/LC_MESSAGES/internal.po @@ -0,0 +1,8634 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: DirectAdmin 1.61.5\n" +"Report-Msgid-Bugs-To: support@directadmin.com\n" +"POT-Creation-Date: 2021-05-25 17:49-0600\n" +"PO-Revision-Date: 2021-05-17 13:07+0000\n" +"Last-Translator: Active8 \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6\n" + +#, c-format +msgid " - %d New Message Inside" +msgid_plural " - %d New Messages Inside" +msgstr[0] " - %d Yeni Bildiriminiz Var" +msgstr[1] " - %d Yeni Bildiriminiz Var" + +msgid " / Day" +msgstr " / Gün" + +#, c-format +msgid " and %d User" +msgid_plural " and %d Users" +msgstr[0] " ve %d Kullanıcı" +msgstr[1] " ve %d Kullanıcı" + +msgid "# of Domains" +msgstr "Etki Alanları" + +msgid "# of IPs" +msgstr "IP Adresleri" + +msgid "# of MySQL DBs" +msgstr "MySQL Veritabanları" + +msgid "# of Resellers" +msgstr "Bayiler" + +msgid "# of SubDomains" +msgstr "Alt Etki Alanları" + +msgid "# of Users" +msgstr "Kullanıcılar" + +msgid "# of free IPs" +msgstr "Kullanılabilecek IP Adresleri" + +#, c-format +msgid "%d Days, %d Hours and %d Minutes" +msgstr "%d Gün, %d Saat ve %d Dakika" + +#, c-format +msgid "%d of %d Admin/Reseller accounts currently exist." +msgstr "%d / %d Yönetici/Bayi hesabı zaten var." + +#, c-format +msgid "%d of %d accounts currently exist." +msgstr "%d / %d hesap zaten var." + +#, c-format +msgid "%d of %d domains currently exist." +msgstr "%d / %d etki alanı zaten var." + +#, c-format +msgid "%s %s %s did not exist" +msgstr "%s %s %s bulunamadı" + +#, c-format +msgid "" +"%s '%s' cannot be restored under '%s'. Restoring under the file's default: " +"'%s'" +msgstr "" +"%s '%s', '%s' altına geri yüklenemez. Dosyanın varsayılan konumu altına geri " +"yükleniyor: '%s'" + +#. /# %1$s - IP address +#. /# %2$s - Username +#, c-format +msgid "%s - user's '%s' current IP" +msgstr "%s - kullanıcının '%s' geçerli IP adresi" + +#, c-format +msgid "%s Day(s)" +msgstr "%s Gün" + +#, c-format +msgid "" +"%s Edit the User Welcome Message to ensure the subject and message are set." +msgstr "" +"%s konu ve içeriÄŸin ayarlanmış olduÄŸundan emin olumak için kullanıcı " +"karşılama iletisini düzenleyin." + +#, c-format +msgid "%s License" +msgstr "%s Lisansı" + +#, c-format +msgid "%s Month(s)" +msgstr "%s Ay" + +#, c-format +msgid "%s Removed" +msgstr "%s Silindi" + +#, c-format +msgid "%s Week(s)" +msgstr "%s Hafta" + +#, c-format +msgid "%s account %s has just been created" +msgstr "%s hesap %s eklendi" + +#, c-format +msgid "%s already exists" +msgstr "%s zaten var" + +#, c-format +msgid "%s already exists on a remote server." +msgstr "%s zaten uzak sunucu üzerinde var." + +#, c-format +msgid "%s already exists on the server." +msgstr "%s zaten sunucu üzerinde var." + +#, c-format +msgid "%s already exists. Pass overwrite=yes to force" +msgstr "%s zaten var. Dayatmak için overwrite=yes argümanını verin" + +#, c-format +msgid "%s appears to be a link. Aborting." +msgstr "%s bir baÄŸlantı gibi görünüyor. Vazgeçiliyor." + +#, c-format +msgid "%s can now be shared." +msgstr "%s paylaşılabilir." + +#, c-format +msgid "%s contains dangerous characters" +msgstr "%s Anahtarda geçersiz karakterler var" + +#, c-format +msgid "%s could not be assigned, it must first be free and unassigned." +msgstr "%s atanamadı. Önce serbest ve atanmamış olmalıdır." + +#, c-format +msgid "" +"%s could not be freed, it must first have zero domain if it is shared, or " +"must be reserved." +msgstr "" +"%s serbest bırakılamadı. Paylaşılmış ise herhangi bir etki alanına atanmış " +"olmamalı ya da ayrılmış olmalıdır." + +#, c-format +msgid "%s could not be removed, you must free it first." +msgstr "%s silinemedi. Önce serbest bırakmalısınız." + +#, c-format +msgid "%s could not be shared, it must first be free" +msgstr "%s paylaşılamaz. Önce serbest olmalıdır" + +#, c-format +msgid "%s deleted successfully." +msgstr "%s silindi." + +#, c-format +msgid "%s does not exist" +msgstr "%s bulunamadı" + +#, c-format +msgid "%s does not have same ownership as %s" +msgstr "%s ile %s sahipliÄŸi aynı deÄŸil" + +#, c-format +msgid "%s has been blocked in %s to prevent further attempts on the account." +msgstr "" +"%s, hesap üzerinde baÅŸka istekte bulunamaması için %s süreyle engellendi." + +#, c-format +msgid "%s has been copied to %s." +msgstr "%s ÅŸuraya kopyalandı %s." + +#, c-format +msgid "%s has been removed from the list" +msgstr "%s listeden silindi" + +#, c-format +msgid "%s has been renamed to %s." +msgstr "%s ÅŸu ÅŸekilde adlandırıldı %s." + +#, c-format +msgid "%s has been saved as %s." +msgstr "%s ÅŸu olarak kaydedildi %s." + +#, c-format +msgid "%s is a directory, will not delete" +msgstr "%s bir klasör olduÄŸundan silinmeyecek" + +#, c-format +msgid "%s is a link" +msgstr "%s bir baÄŸlantı" + +#, c-format +msgid "%s is hard or symbolic link" +msgstr "%s hard ya da sembolik bir baÄŸlantı" + +#, fuzzy, c-format +#| msgid "%s is a link" +msgid "%s is missing" +msgstr "%s bir baÄŸlantı" + +#, c-format +msgid "%s is not a directory" +msgstr "%s bir klasör deÄŸil" + +#, c-format +msgid "%s is not a socket" +msgstr "%s bir soket deÄŸil" + +#, c-format +msgid "%s is not a symlink" +msgstr "%s bir sembolik baÄŸlantı deÄŸil" + +#, c-format +msgid "%s is not a valid IP or range" +msgstr "%s geçerli bir IP adresi ya da IP aralığı deÄŸil" + +#, c-format +msgid "%s is not a valid access host" +msgstr "%s eriÅŸebilecek sunucusu geçersiz" + +#, c-format +msgid "%s is not a valid database name" +msgstr "%s veritabanı adı geçersiz" + +#, c-format +msgid "%s is not a valid file" +msgstr "%s dosyası geçersiz" + +#, c-format +msgid "%s is not a valid ip range. Use: 1.2.3.4-10" +msgstr "%s IP adresi aralığı geçersiz. Kullanım: 1.2.3.4-10" + +#, c-format +msgid "%s is not a valid key, skipping" +msgstr "%s anahtarı geçersiz olduÄŸundan atlanıyor" + +#, c-format +msgid "%s is not chowned to %s which is a likely cause for extraction failure" +msgstr "" +"Ayıklama sorunu %s sahipliÄŸi %s olarak ayarlanamadığından çıkmış olabilir" + +#, c-format +msgid "%s is not enabled" +msgstr "%s etkinleÅŸtirilmemiÅŸ" + +#, c-format +msgid "%s is not in your commands list" +msgstr "%s komut listenizde yok" + +#, c-format +msgid "%s is not on your domain's IP list" +msgstr "%s etki alanınızın IP adresi listesinde deÄŸil" + +#, c-format +msgid "%s is not one of the listed redirect types" +msgstr "%s listelenen yönlendirme türlerinden biri deÄŸil" + +#, c-format +msgid "%s is not owned by %s" +msgstr "%s sahibi %s deÄŸil" + +#, c-format +msgid "%s is not set to 'free' or is still assigned to a reseller" +msgstr "" +"%s adresi 'Serbest' olarak ayarlanmamış ya da hala bir bayiye atanmış durumda" + +#, c-format +msgid "%s is now controlled by %s" +msgstr "%s hesabı %s altına taşındı" + +#, c-format +msgid "%s is now free" +msgstr "%s serbest bırakıldı" + +#, c-format +msgid "%s is now unassigned." +msgstr "%s ataması kaldırıldı." + +#, c-format +msgid "%s is now your default domain." +msgstr "%s varsayılan etki alanınız olarak ayarlandı." + +#, c-format +msgid "%s is out of range" +msgstr "%s aralık dışında" + +#, c-format +msgid "" +"%s is reporting that IP %s has issued a password change request for user " +"'%s' without approval." +msgstr "" +"%s üzerinde %s IP adresi üzerinden '%s' kullanıcısı için onaylanmayan bir " +"parola deÄŸiÅŸtirme isteÄŸi yapıldı." + +#, c-format +msgid "%s is required for %s" +msgstr "%s, %s için gerekli" + +#, c-format +msgid "%s must not be a symlink" +msgstr "%s bir sembolik baÄŸlantı olmamalı" + +#, c-format +msgid "%s no longer has a Name Server Label." +msgstr "%s artık bir ad sunucusu etiketine sahip deÄŸil." + +#, c-format +msgid "%s not implemented" +msgstr "%s uygulanmamış" + +#, c-format +msgid "%s records disabled at this level" +msgstr "Bu düzeyde %s kayıtları devre dışı bırakılmış" + +#, c-format +msgid "%s value of '%s' is not in the home_override_list" +msgstr "%s, '%s' deÄŸeri izin verilen home_override_list içinde yok" + +#, c-format +msgid "%s will now point to %s" +msgstr "%s, %s üzerine yönlendirilecek" + +#, c-format +msgid "%s's config files have been removed" +msgstr "%s kullanıcısının yapılandırma dosyaları silindi" + +#, c-format +msgid "%s: lstat error on linnk value '%s': %s" +msgstr "%s: '%s' baÄŸlantı deÄŸerinde lstat hatası: %s" + +#, c-format +msgid "%s: readlinke error: %s" +msgstr "%s: readlinke hatası: %s" + +#, c-format +msgid "%s=%s requires nginx_proxy=1 and the %s Pro-Pack" +msgstr "%s =%s, nginx_proxy = 1 ve %s Pro-Pack gerektirir" + +#. /# %1$s - CPUQuota +#. /# %1$s - 200% +#. /# %1$s - percent +#, c-format +msgid "%s='%s' is not a valid %s type" +msgstr "%s='%s', geçerli bir %s türü deÄŸil" + +#, c-format +msgid "%sClick Here%s to learn how to enable it" +msgstr "%sBuraya tıklayarak%s nasıl etkinleÅŸtireceÄŸinizi öğrenin" + +#, c-format +msgid "%sClick Here%s to view the local raw zone data" +msgstr "Yerel ham bölge verilerini görüntülemek için %sburaya tıklayın%s" + +#, c-format +msgid "%sSave Increase%s" +msgstr "%sArtırımı Kaydet%s" + +#, c-format +msgid "%sTemporary Bandwidth Increase" +msgstr "%sGeçici Bant GeniÅŸliÄŸi Artışı" + +#, c-format +msgid "%sYour IP will be blacklisted" +msgstr "%sIP adresiniz kara listeye alındı" + +#, c-format +msgid "'%s' does not exist" +msgstr "'%s' bulunamadı" + +#, c-format +msgid "'%s' does not exist\n" +msgstr "'%s' bulunamadı\n" + +#, c-format +msgid "'%s' does not start with '%s'\n" +msgstr "'%s', '%s' ile baÅŸlamıyor\n" + +#, c-format +msgid "'%s' has been set to '%s'" +msgstr "'%s', '%s' olarak ayarlanmış" + +#, c-format +msgid "'%s' is a forbidden package name." +msgstr "'%s' paket adı engellenmiÅŸ." + +#, c-format +msgid "'%s' is not a valid css hex color" +msgstr "'%s' geçerli bir onaltılık CSS rengi deÄŸil" + +#, c-format +msgid "'%s' is not assigned to your Reseller account." +msgstr "Bayi hesabınıza '%s' atanmamış." + +#, c-format +msgid "'%s' is not enabled in your license" +msgstr "Lisansınızda '%s' etkin deÄŸil" + +#, c-format +msgid "'%s' is not on your list" +msgstr "'%s' listenizde yok" + +#, c-format +msgid "'%s' is required" +msgstr "'%s' zorunludur" + +#, c-format +msgid "'%s' must be '%s' or '%s'" +msgstr "'%s', '%s' ya da '%s' olmalıdır" + +msgid "'import' does not appear to be base 64 encoded" +msgstr "'import' base 64 ile kodlanmış gibi görünmüyor" + +msgid "'when' should be all, newer or older" +msgstr "" +"'ne zaman' deÄŸeri yalnız tüm zamanlar, ÅŸundan yeni ya da ÅŸundan eski olabilir" + +#, c-format +msgid "(%d) The following hard links have been found under User %s:" +msgstr "(%d) %s kullanıcısının verilerinde ÅŸu hard linkler bulundu:" + +msgid "* irretrievable *" +msgstr "* geri alınamaz *" + +msgid "*** Stopped ***" +msgstr "*** DurmuÅŸ ***" + +msgid "-- None Available --" +msgstr "-- Kullanılabilecek Yok --" + +msgid "-- Reason:" +msgstr "-- Nedeni:" + +msgid "-- Select IP" +msgstr "-- IP Adresini Seçin" + +msgid "-- Select Package" +msgstr "-- Paketi Seçin" + +msgid "-- any time --" +msgstr "-- tüm zamanlar --" + +msgid "-- anything --" +msgstr "-- yok --" + +msgid "1k-blocks" +msgstr "1k-bloklar" + +#, c-format +msgid "A %s record already exists with that name" +msgstr "Aynı adlı bir %s kaydı zaten var" + +msgid "A 'free' IP can only be assigned to 1 User" +msgstr "Bir 'serbest' IP adresi yalnız 1 kullanıcıya atanabilir" + +msgid "A Record Type is required: A, NS, MX, CNAME, PTR, or TXT" +msgstr "Kayıt türü ÅŸunlardan biri olabilir: A, NS, MX, CNAME, PTR ya da TXT" + +msgid "A Reseller can only control level=user" +msgstr "Bir bayi hesabı yalnız kullanıcı düzeyini denetleyebilir" + +msgid "A Reseller cannot control other equal or higher account levels" +msgstr "Bir bayi hesabı eÅŸit ya da daha yüksek hesap düzeylerini denetleyemez" + +msgid "A file is required" +msgstr "Bir dosya gereklidir" + +msgid "A forwarder already exists with that name" +msgstr "Aynı adlı bir iletici zaten var" + +msgid "A full domain/zone with this name already exists." +msgstr "Aynı adlı bir tam etki alanı ya da bölge zaten var." + +msgid "A key with that name already exists" +msgstr "Aynı adlı bir anahtar zaten var" + +msgid "A list alias already exists with that name" +msgstr "Aynı adlı bir liste takma adı zaten var" + +msgid "A message for that user already exists" +msgstr "Bu kullanıcı için bir ileti zaten var" + +msgid "A pop account already exists with that name" +msgstr "Aynı adlı bir POP hesabı zaten var" + +msgid "A skin name is required" +msgstr "Bir tema adı yazmalısınız" + +msgid "" +"A subdomain with the same name already exists on the system under another " +"domain." +msgstr "" +"Aynı adlı bir alt etki alanı sistemdeki baÅŸka bir etki alanı altında zaten " +"var." + +msgid "Abuse" +msgstr "Istismar" + +msgid "Access Hosts" +msgstr "EriÅŸebilecek Sunucular" + +msgid "Access host has been added" +msgstr "EriÅŸebilecek sunucu eklendi" + +msgid "Access hosts have been removed" +msgstr "EriÅŸebilecek sunucular silindi" + +msgid "Account" +msgstr "Hesap" + +#, c-format +msgid "Account %s has just created %s %s from IP %s" +msgstr "%s hesabı %s ekledi %s IP adresi kullanıldı %s" + +#, c-format +msgid "Account %s skipped due to suspension" +msgstr "Askıya alınmış olduÄŸundan %s hesabı atlandı ve yedeklenmedi" + +#, c-format +msgid "Account %s was suspended by an Admin and you only have Reseller access." +msgstr "" +"%s hesabı bir Yönetici tarafından askıya alınmış ama sizin hesabınız Bayi " +"düzeyinde." + +#, c-format +msgid "Account %s with domain %s has an empty caroot cert" +msgstr "" +"%s etki alanına sahip %s hesabında boÅŸ bir kayıt (caroot)sertifikası var" + +msgid "Account created" +msgstr "Hesap eklendi" + +#, c-format +msgid "Account created in directory '%s'" +msgstr "Hesap '%s' klasöründe oluÅŸturuldu" + +msgid "Account has been unblocked from BlockCracking" +msgstr "Hesabın BlockCracking üzerindeki engellemesi kaldırıldı" + +msgid "Account is not a Reseller" +msgstr "Hesap bir bayi hesabı deÄŸil" + +msgid "Account is suspended" +msgstr "Hesap askıya alınmış" + +msgid "Account password changed" +msgstr "Hesap parolası güncellendi" + +#, c-format +msgid "Accounts restored to %s partition." +msgstr "Hesap %s bölümüne geri yüklendi." + +msgid "Action" +msgstr "İşlem" + +msgid "Activate" +msgstr "EtkinleÅŸtir" + +msgid "Active" +msgstr "Etkin" + +msgid "Add" +msgstr "Ekle" + +#, c-format +msgid "Add %s" +msgstr "%s ekle" + +msgid "Add Codes" +msgstr "Kodları Ekle" + +msgid "Add Host" +msgstr "Sunucu Ekle" + +msgid "Add Override" +msgstr "DeÄŸiÅŸiklik ekle" + +msgid "Add new Security Question" +msgstr "Güvenlik Sorusu Ekle" + +msgid "Add the new NS records first." +msgstr "Önce yeni ad sunucu kayıtları ekleyin." + +msgid "Add to Apache" +msgstr "Apache Üzerine Ekle" + +msgid "Add to Clipboard" +msgstr "Panoya Kopyala" + +msgid "Add to DNS" +msgstr "DNS Üzerine Ekle" + +#, c-format +msgid "Added ns1 as %s and ns2 as %s" +msgstr "1. ad sunucusu %s, 2. ad sunucusu %s olarak eklendi" + +msgid "Additional" +msgstr "Ek" + +msgid "Admin" +msgstr "Yönetici" + +msgid "Admin Backup/Transfer" +msgstr "Yönetici Yedekleme ve Taşıma" + +msgid "Admin Certificate Management" +msgstr "Yönetici Sertifika Yönetimi" + +msgid "Admin DNS Administration" +msgstr "Yönetici DNS Yönetimi" + +msgid "Admin File Editor" +msgstr "Yönetici Dosya Düzenleyici" + +msgid "Admin History" +msgstr "Yönetici GeçmiÅŸi" + +msgid "Admin IP Management" +msgstr "Yönetici IP Adresleri" + +msgid "Admin Plugins" +msgstr "Yönetici Eklentileri" + +msgid "Admin Resource Limits" +msgstr "Yönetici Kaynak Sınırları" + +msgid "Admin SSL" +msgstr "Yönetici SSL" + +msgid "Admin SSL is not enabled" +msgstr "Yönetici SSH etkinleÅŸtirilmemiÅŸ" + +msgid "Admin Settings" +msgstr "Yönetici Ayarları" + +msgid "Admin Statistics" +msgstr "Yönetici İstatistikleri" + +msgid "Advanced Search" +msgstr "GeliÅŸmiÅŸ Arama" + +msgid "" +"After many tries, we were unable to create a unique login name. This is " +"improbable." +msgstr "" +"Pek çok denemeden sonra eÅŸsiz bir oturum açma adı oluÅŸturulamadı. Bu " +"olanaksız." + +msgid "Afternoon" +msgstr "Öğleden Sonra" + +#, c-format +msgid "Alias %s@%s -> %s has been created" +msgstr "%s@%s -> %s takma adı oluÅŸturuldu" + +msgid "All" +msgstr "Tümü" + +msgid "All Data" +msgstr "Tüm Veriler" + +msgid "All E-Mail" +msgstr "Tüm E-postalar" + +msgid "All Months (cgi)" +msgstr "Tüm Aylar (cgi)" + +msgid "All Resellers" +msgstr "Tüm Bayiler" + +msgid "All User Cron Jobs" +msgstr "Tüm Zamanlanmış Görevler" + +msgid "All Users" +msgstr "Tüm Kullanıcılar" + +msgid "All Users Except Selected Users" +msgstr "SeçilmiÅŸ Kullanıcılar Dışındaki Tüm Kullanıcılar" + +msgid "All Users Except:" +msgstr "Åžunun Dışındaki Tüm Kullanıcılar:" + +msgid "All Users deleted successfully" +msgstr "Tüm kullanıcılar silindi" + +msgid "All databases removed succesfully" +msgstr "Tüm veritabanları silindi" + +msgid "All of Your Users" +msgstr "Tüm Kullanıcılarınız" + +msgid "All privileges have been set" +msgstr "Tüm izinler ayarlandı" + +msgid "All route steps except the last are required to have a 'match'" +msgstr "" +"Sonuncusu dışında tüm yöneltme adımları için bir 'eÅŸleÅŸme' bulunmalıdır" + +msgid "All selected Users have been suspended" +msgstr "SeçilmiÅŸ tüm kullanıcılar askıya alındı" + +msgid "All selected Users have been unsuspended" +msgstr "SeçilmiÅŸ tüm kullanıcılar askıdan indirildi" + +msgid "All specified forwarders removed" +msgstr "Belirilen tüm ileticiler silindi" + +msgid "Allocated" +msgstr "Kullanılabilecek" + +msgid "Allow" +msgstr "İzin Ver" + +msgid "Allow Overselling" +msgstr "Paket Sınırlarını AÅŸabilsin" + +#, c-format +msgid "Allowance threshold is 0%%" +msgstr "İzin verilme eÅŸiÄŸi 0%%" + +#, c-format +msgid "Allowing that much %s would put you over your limit of %s" +msgstr "Bu sayıda %s eklenmesine izin vermeniz %s sınırınızı aÅŸabilir" + +msgid "Already Exists" +msgstr "Zaten Var" + +msgid "" +"Although a backup error has occurred, the upload of valid backups would have " +"still been attempted to" +msgstr "" +"Bir yedekleme sorunu çıkmış olsa da, geçerli yedekler ÅŸuraya yüklenmeye " +"çalışılacak" + +msgid "An Error Occurred" +msgstr "Bir Sorun Çıktı" + +msgid "An Error has occurred" +msgstr "Bir sorun çıktı" + +msgid "An auto responder already exists with that name" +msgstr "Aynı adlı bir otomatik yanıtlayıcı zaten var" + +msgid "An autoresponder with that name already exists" +msgstr "Aynı adlı bir otomatik yanıtlayıcı zaten var" + +msgid "An error has occurred" +msgstr "Bir sorun çıktı" + +msgid "An error has occurred while rewriting the Nginx Unit config" +msgstr "Nginx Unit yapılandırması yazılırken bir sorun çıktı" + +msgid "An error occured during extraction" +msgstr "Dosya ayıklanırken bir sorun çıktı" + +msgid "An error occured while creating the compressed file" +msgstr "Sıkıştırılmış dosya oluÅŸturulurken bir sorun çıktı" + +msgid "An error occured while resetting the file ownership" +msgstr "Dosya sahipliÄŸi sıfırlanırken bir sorun çıktı" + +msgid "An error occurred during the backup" +msgstr "Yedekleme sırasında bir sorun çıktı" + +msgid "An error occurred listing the databases:" +msgstr "Veritabanları listesi görüntülenirken bir sorun çıktı:" + +msgid "An error occurred when unblocking the account" +msgstr "Hesabın BlockCracking üzerindeki engellemesi kaldırılırken sorun çıktı" + +msgid "An error occurred while applying settings to your Users" +msgstr "Ayarlar kullanıcılarınıza uygulanırken bir sorun çıktı" + +msgid "An error occurred while attempting to copy the file" +msgstr "Dosya kopyalanırken bir sorun çıktı" + +msgid "An error occurred while attempting to create the directory" +msgstr "Klasör oluÅŸturulurken bir sorun çıktı" + +msgid "An error occurred while attempting to protect the directory" +msgstr "Klasör korumaya alınırken bir sorun çıktı" + +msgid "An error occurred while attempting to rename the file" +msgstr "Dosya yeniden adlandırılırken bir sorun çıktı" + +msgid "An error occurred while attempting to restore the file" +msgstr "Dosya geri yüklenirken bir sorun çıktı" + +msgid "Anonymous Ftp" +msgstr "Anonim FTP" + +msgid "Answer" +msgstr "Yanıt" + +msgid "Apache" +msgstr "Apache" + +msgid "Apache Handlers" +msgstr "Apache İşleyicileri" + +msgid "Apache config file re-written with new ip" +msgstr "" +"Apache yapılandırma dosyası yeni IP adresi kullanılarak yeniden yazıldı" + +msgid "Apparent Size" +msgstr "Görünen Kullanım" + +msgid "Appears as the first item within the section." +msgstr " bölümündeki ilk öge olarak görüntülenir." + +msgid "Appears at the very top of the template, before setting the variables." +msgstr "Kalıbın en üstünde deÄŸiÅŸkenler ayarlanmadan önce görüntülenir." + +msgid "" +"Appears in ALL context{} sections, used for password protected directories." +msgstr "" +"Tüm context{} bölümlerinde görüntülenir, parola korumalı klasörler için " +"kullanılır." + +msgid "Appears in phpIniOverride{} section." +msgstr "PhpIniOverride{} bölümünde görüntülenir." + +msgid "Appears in rewrite{} section." +msgstr "Rewrite{} bölümünde görüntülenir." + +msgid "Appears in scripthandler{} section." +msgstr "Scripthandler{} bölümünde görüntülenir." + +msgid "Appears in vhssl{} section." +msgstr "Vhssl{} bölümünde görüntülenir." + +msgid "Appears just before the section." +msgstr " bölümünden hemen önce görüntülenir." + +msgid "Apply to All Users" +msgstr "Tüm Kullanıcılara Uygulansın" + +msgid "Apply to Me" +msgstr "Bana Uygulansın" + +msgid "Apply to existing Domains" +msgstr "Var olan etki alanlarına uygula" + +msgid "Apr" +msgstr "Nis" + +msgid "Archive Size" +msgstr "ArÅŸiv Boyutu" + +msgid "Archives purged" +msgstr "ArÅŸivler boÅŸaltıldı" + +msgid "Are you sure you want to Delete the selected accounts?" +msgstr "SeçilmiÅŸ hesapları silmek istediÄŸinize emin misiniz?" + +msgid "Are you sure you want to Delete the selected databases?" +msgstr "SeçilmiÅŸ veritabanlarını silmek istediÄŸinize emin misiniz?" + +msgid "Are you sure you want to Delete the selected keys?" +msgstr "SeçilmiÅŸ anahtarları silmek istediÄŸinize emin misiniz?" + +msgid "Are you sure you want to delete the selected zones?" +msgstr "SeçilmiÅŸ bölgeleri silmek istediÄŸinize emin misiniz?" + +msgid "Are you sure you want to delete these files?" +msgstr "Bu dosyaları silmek istediÄŸinize emin misiniz?" + +msgid "Are you sure you want to kill these processes?" +msgstr "İşlemleri sonlandırmak istediÄŸinize emin misiniz?" + +msgid "Ascending" +msgstr "Artan" + +msgid "Assign to" +msgstr "Åžuna ata" + +msgid "Assigned" +msgstr "Atanmış" + +msgid "At least one crediential is required." +msgstr "En az bir kimlik doÄŸrulama bilgisi zorunludur." + +#, c-format +msgid "Attempting to copy %s onto itself, file skipped." +msgstr "%s kendi üzerine kopyalanmaya çalışıldığından dosya atlandı." + +#, c-format +msgid "Attempting to move %s onto itself, file skipped." +msgstr "%s kendi üzerine taşınmaya çalışıldığından dosya atlandı." + +msgid "Attempts" +msgstr "GiriÅŸim Sayısı" + +msgid "Aug" +msgstr "AÄŸu" + +msgid "Auth::logoutCreator error" +msgstr "Kimlik doÄŸrulama::logoutCreator hatası" + +#, c-format +msgid "" +"Authenication::get_unique_login_hash: could not generate a unique login has " +"after %s attempts" +msgstr "" +"Kimlik doÄŸrulama::get_unique_login_hash: %s denemeden sonra eÅŸsiz bir oturum " +"oluÅŸturamadı" + +msgid "Authentication" +msgstr "Kimlik DoÄŸrulaması" + +msgid "Authorize" +msgstr "İzin Ver" + +msgid "Auto" +msgstr "Otomatik" + +msgid "Auto media selection active." +msgstr "Otomatik medya seçimi etkin." + +msgid "Auto+Confirm" +msgstr "Otomatik ve Onay" + +msgid "AutoResponders" +msgstr "Otomatik Yanıtlayıcılar" + +#, c-format +msgid "Automated certificate renewal for %s has succeeded" +msgstr "%s için otomatik sertifika yenilemesi yapıldı" + +msgid "Autoreply" +msgstr "Otomatik yanıt" + +msgid "Autoresponder" +msgstr "Otomatik Yanıtlayıcı" + +msgid "Autoresponder updated" +msgstr "Otomatik Yanıtlayıcı güncellendi" + +msgid "Autoresponders" +msgstr "Otomatik Yanıtlayıcılar" + +msgid "Available" +msgstr "Kullanılabilir" + +msgid "Avoid use of trailers." +msgstr "Treyler kullanmaktan kaçının." + +msgid "Awstats" +msgstr "Awstats" + +msgid "Awstats ..." +msgstr "Awstats ..." + +msgid "Awstats setting changed" +msgstr "Awstats ayarları güncellendi" + +msgctxt "readable size" +msgid "B" +msgstr "B" + +msgid "Back" +msgstr "Geri Dön" + +msgid "Backing up Databases" +msgstr "Veritabanları yedekleniyor" + +msgid "Backing up E-Mail Data" +msgstr "E-posta verileri yedekleniyor" + +msgid "Backing up E-Mail Settings" +msgstr "E-posta ayarları yedekleniyor" + +msgid "Backing up FTP" +msgstr "FTP yedekleniyor" + +msgid "Backing up User Configs" +msgstr "Kullanıcı yapılandırma ayarları yedekleniyor" + +msgid "Backing up User Data" +msgstr "Kullanıcı verileri yedekleniyor" + +msgid "Backing up extra E-Mail items" +msgstr "Ek e-posta ögeleri yedekleniyor" + +msgid "Backup" +msgstr "Yedeklenecek Veriler" + +#, c-format +msgid "Backup %d is not currently running." +msgstr "Åžu anda %d yedeklemesi yapılmıyor." + +#, c-format +msgid "Backup Abort (%d): A hard link was found under User %s's path" +msgstr "" +"Yedeklemeden vazgeçildi (%d): %s kullanıcısının klasör yolu altında bir hard " +"link var" + +#, c-format +msgid "Backup Error with Nginx Unit: %s" +msgstr "Nginx Unit yedekleme sorunu: %s" + +msgid "Backup Halted" +msgstr "Yedekleme DurmuÅŸ" + +msgid "Backup ID" +msgstr "Yedek Kodu" + +msgid "Backup creation added to queue" +msgstr "Yedekleme iÅŸlemi sıraya alındı" + +#, c-format +msgid "Backup path %s has been created." +msgstr "%s yedek yolu oluÅŸturuldu." + +msgid "Backups added to Queue" +msgstr "Yedekleme iÅŸlemi sıraya alındı" + +msgid "Bad User usertype" +msgstr "Hatalı kullanıcı türü" + +msgid "Bandwidth" +msgstr "Bant GeniÅŸliÄŸi" + +msgid "Bandwidth (MB)" +msgstr "Bant GeniÅŸliÄŸi (MB)" + +msgid "Bandwidth Breakdown" +msgstr "Bant GeniÅŸliÄŸi Kırılımı" + +msgid "Bandwidth Usage" +msgstr "Bant GeniÅŸliÄŸi Kullanımı" + +msgid "Be sure to re-scan the QR code, as all old codes become invalid." +msgstr "" +"Tüm eski kodlar geçersiz olacağından QR kodunu yeniden tarattığınızdan emin " +"olun." + +msgid "" +"Because the script meets the required criteria, it has been disabled via " +"chmod to 0." +msgstr "" +"Betik istenilen ölçütleri karşıladığından chmod 0 kullanılarak devre dışı " +"bırakıldı." + +msgid "" +"Before Unblocking, ensure that any compromised scripts have been removed or " +"fixed." +msgstr "" +"Engellemeyi kaldırmadan önce deÄŸiÅŸtirilmiÅŸ tüm betiklerin silindiÄŸinden ya " +"da düzeltildiÄŸinden emin olun." + +msgid "Billing Issue" +msgstr "Faturalandırma Sorunu" + +#, c-format +msgid "Blank value: default, global limit of %d" +msgstr "BoÅŸ deÄŸer: Varsayılan, genel %d sınırı" + +msgid "Block Usage" +msgstr "Engelleme Kullanımı" + +msgid "BlockCracker Blocked Paths" +msgstr "BlockCracker EngellenmiÅŸ Yollar" + +msgid "Blocked" +msgstr "EngellenmiÅŸ" + +msgid "Both DNS Control and ttl override must be enabled" +msgstr "" +"DNS Yönetimi ve TTL DeÄŸerini DeÄŸiÅŸtir seçeneklerinin ikisi de " +"etkinleÅŸtirilmiÅŸ olmalıdır" + +msgid "Brute Force Monitor" +msgstr "Brute Force İzleyici" + +msgid "Brute-Force Attack detected in service log" +msgstr "Hizmet günlüğünde Brute-Force saldırısı algılandı" + +msgid "CA Certificate is Invalid" +msgstr "Sertifika saÄŸlayıcı sertifikası geçersiz" + +msgid "CA Certificate is ok. Your site should be secure within a few minutes." +msgstr "" +"Sertifika saÄŸlayıcının sertifikası tamam. Siteniz bir kaç dakika içinde " +"güvenli baÄŸlantı kullanıyor olacak." + +msgid "CC Address" +msgstr "Kopya Adresi" + +msgid "CGI-Bin" +msgstr "CGI-Bin" + +msgid "CPU Quota" +msgstr "İşlemci Sınırı" + +msgid "Can use Server IP" +msgstr "Sunucu IP Adresini Kullanabilsin" + +msgid "Can't get file lock on" +msgstr "Dosya kilidi açılamadı" + +#, c-format +msgid "Can't open file %s for reading" +msgstr "%s dosyası okunmak üzere açılamadı" + +#, c-format +msgid "Can't reopen file %s for appending" +msgstr "%s dosyası yazılmak üzere açılamadı" + +msgid "Cancel" +msgstr "İptal" + +msgid "Cannot Add A Record" +msgstr "A Kaydı Eklenemedi" + +msgid "Cannot Add CNAME Record" +msgstr "CNAME Kaydı Eklenemedi" + +msgid "Cannot Add Record" +msgstr "Kayıt Eklenemiyor" + +msgid "Cannot Create Account" +msgstr "Hesap Eklenemedi" + +msgid "Cannot Create Another Autoresponder" +msgstr "Daha Fazla Otomatik Yanıtlayıcı Eklenemiyor" + +msgid "Cannot Create Another Database" +msgstr "Daha Fazla Veritabanı Eklenemiyor" + +msgid "Cannot Create Another Domain" +msgstr "Daha Fazla Etki Alanı Eklenemiyor" + +msgid "Cannot Create Another Domain Pointer" +msgstr "Daha Fazla Etki Alanı Yönlendirmesi Eklenemiyor" + +msgid "Cannot Create Another FTP Account" +msgstr "Daha Fazla FTP Hesabı Eklenemiyor" + +msgid "Cannot Create Another Forwarder" +msgstr "Daha Fazla İletici Eklenemiyor" + +msgid "Cannot Create Another Mailing List" +msgstr "Daha Fazla E-posta Listesi Eklenemiyor" + +msgid "Cannot Create Another POP Account" +msgstr "Daha Fazla POP Hesabı Eklenemiyor" + +msgid "Cannot Create Another Subdomain" +msgstr "Daha Fazla Alt Etki Alanı Eklenemiyor" + +msgid "Cannot Create Autoresponder" +msgstr "Otomatik Yanıtlayıcı Eklenemiyor" + +msgid "Cannot Create Domain" +msgstr "Etki Alanı Eklenemedi" + +msgid "Cannot Create Vacation Message" +msgstr "Tatil Bildirimi Eklenemedi" + +msgid "Cannot Create a Message" +msgstr "Bildirim OluÅŸturulamadı" + +msgid "Cannot Execute Command" +msgstr "Komut Yürütülemedi" + +msgid "Cannot Execute Your Request" +msgstr "İsteÄŸiniz Yerine Getirilemedi" + +msgid "Cannot Modify Key" +msgstr "Anahtar Güncellenemedi" + +msgid "Cannot Modify User" +msgstr "Kullanıcı bilgileri güncellenemedi" + +msgid "Cannot View Domain Settings" +msgstr "Etki Alanı Ayarları Görüntülenemiyor" + +#, c-format +msgid "Cannot add pointer %s, you have reached your limit of %s" +msgstr "%s yönlendiricisi eklenemedi. %s sınırınıza ulaÅŸtınız" + +#, fuzzy +#| msgid "Cannot manage zone" +msgid "Cannot be an object" +msgstr "Bölge düzenlenemedi" + +msgid "Cannot change the ip" +msgstr "IP adresi deÄŸiÅŸtirilemedi" + +msgid "" +"Cannot change the password for a system account. Login to the control panel " +"to do that." +msgstr "" +"Bir sistem hesabının parolası deÄŸiÅŸtirilemez. Bu hesabın parolasını " +"deiÅŸtirmek için yönetim panosunda oturum açın." + +msgid "" +"Cannot change the password for this email account. The account is currently " +"on a suspended domain." +msgstr "" +"Bu hesap askıya alınmış olduÄŸundan bu e-posta adresinin parolası " +"deÄŸiÅŸtirilemez." + +msgid "Cannot change your email" +msgstr "E-posta adresiniz deÄŸiÅŸtirilemedi" + +msgid "Cannot change your name" +msgstr "Adınız deÄŸiÅŸtirilemedi" + +msgid "Cannot change your password" +msgstr "Parolanız deÄŸiÅŸtirilemedi" + +msgid "Cannot create User Backup" +msgstr "Kullanıcı yedeÄŸi oluÅŸturulamadı" + +msgid "Cannot create domain" +msgstr "Etki alanı eklenemedi" + +msgid "Cannot create that domain" +msgstr "Bu etki alanı eklenemedi" + +msgid "Cannot create user using those settings" +msgstr "Bu ayarları kullanan bir kullanıcı eklenemedi" + +msgid "Cannot delete records" +msgstr "Kayıtlar silinemedi" + +msgid "Cannot delete the skin you're currently using." +msgstr "Åžu anda kullanılan tema silinemez." + +#, fuzzy, c-format +#| msgid "Cannot Create Another Subdomain" +msgid "Cannot determine owner of subdomain '%s'" +msgstr "Daha Fazla Alt Etki Alanı Eklenemiyor" + +msgid "Cannot execute your request" +msgstr "İsteÄŸiniz yerine getirilemedi" + +#, c-format +msgid "Cannot find %s" +msgstr "%s bulunamadı" + +#, c-format +msgid "Cannot find %s in list" +msgstr "Listede %s bulunamadı" + +#, c-format +msgid "Cannot find %s in name" +msgstr "Ad içinde %s bulunamadı" + +#, c-format +msgid "Cannot find %s to convert %s" +msgstr "%s bulunamadığından %s dönüştürülemedi" + +#, c-format +msgid "Cannot find %s, skipping." +msgstr "%s bulunamadığından atlanıyor." + +#, c-format +msgid "Cannot find %s. Ensure the domain exists and is not suspended" +msgstr "" +"%s bulunamadı. Etki alanının var ve askıya alınmamış olduÄŸundan emin olun" + +#, c-format +msgid "Cannot find '%s'" +msgstr "'%s' bulunamadı" + +#, c-format +msgid "Cannot find '%s' in the list of allowed values for %s" +msgstr "İzin verilen deÄŸerler listesinde '%s' bulunamadı, %s için" + +#, c-format +msgid "Cannot find '%s' in the template" +msgstr "Kalıpta '%s' bulunamadı" + +msgid "Cannot find IP" +msgstr "IP adresi bulunamadı" + +#, c-format +msgid "Cannot find Security Question ID %d in the User list" +msgstr "Kullanıcı listesinde %d kodlu güvenlik sorusu bulunamadı" + +#, c-format +msgid "Cannot find User '%s'" +msgstr "'%s' kullanıcısı bulunamadı" + +msgid "Cannot find a valid system username in the domainowners file." +msgstr "domainowners dosyasında geçerli bir sistem kullanıcı adı bulunamadı." + +msgid "Cannot find any SAN values in the certificate." +msgstr "Sertifikada herhangi bir SAN deÄŸeri bulunamadı." + +msgid "Cannot find any message subjects from clear_message_system_list" +msgstr "" +"clear_message_system_list içinde herhangi bir bildirim konusu bulunamadı" + +msgid "Cannot find any security questions from security_questions.txt" +msgstr "" +"security_questions.txt dosyasında herhangi bir güvenlik sorusu bulunamadı" + +#, c-format +msgid "Cannot find any tar.gz after converting from %s" +msgstr "%s dönüştürüldükten sonra herhangi bir tar.gz bulunamadı" + +msgid "Cannot find domain in domain owners file" +msgstr "Etki alanı domain owners dosyasında bulunamadı" + +msgid "Cannot find domain in the certificate." +msgstr "Sertifikada etki alanı bulunamadı." + +#, c-format +msgid "Cannot find key value in %s" +msgstr "%s içinde anahtar deÄŸeri bulunamadı" + +#, c-format +msgid "Cannot find logo file for token %s in skin %s" +msgstr "%s kodu ve %s teması için logo dosyası bulunamadı" + +#, c-format +msgid "Cannot find logo file for token %s=%s in skin %s" +msgstr "Logo dosyası bulunamadı. Kod: %s=%s, tema: %s" + +#, c-format +msgid "Cannot find plugin %s" +msgstr "%s eklentisi bulunamadı" + +msgid "Cannot find show_blocked_ips.sh" +msgstr "show_blocked_ips.sh bulunamadı" + +msgid "Cannot find template_php_ini or domain_php_ini in json" +msgstr "JSON içinde template_php_ini ya da domain_php_ini bulunamadı" + +msgid "Cannot find that code. It's likely expired." +msgstr "Bu kod bulunamadı. Süresi geçmiÅŸ olabilir." + +msgid "Cannot find that domain in the domainowners file" +msgstr "domainowners dosyasında bu etki alanı bulunamadı" + +msgid "Cannot find that key id" +msgstr "Bu anahtar kodu bulunamadı" + +msgid "Cannot find the account nor the forwarder" +msgstr "E-posta hesabı ya da ileticisi bulunamadı" + +msgid "Cannot find the letsencrypt.sh script" +msgstr "letsencrypt.sh betiÄŸi bulunamadı" + +msgid "Cannot find the sql file after backup was run:" +msgstr "Yedekleme yapıldıktan sonra sql dosyası bulunamadı:" + +#, c-format +msgid "Cannot find the user %s which should already exist" +msgstr "Var olması gereken %s kullanıcısı bulunamadı" + +#, c-format +msgid "Cannot get '%s' index from skin.conf" +msgstr "'%s' dizini skin.conf dosyasından alınamadı" + +#, c-format +msgid "Cannot get mime-type for %s" +msgstr "%s için MIME türü alınamadı" + +#, c-format +msgid "Cannot get the user list for database %s" +msgstr "%s veritabanının kullanıcı listesi alınamadı" + +msgid "Cannot have newline characters in subject" +msgstr "Konu bölümünde satır sonu karakteri bulunamaz" + +msgid "Cannot have unlimited E-Mail quotas" +msgstr "E-posta kotaları sınırsız olamaz" + +msgid "Cannot load lang po" +msgstr "Dil po dosyası yüklenemedi" + +msgid "Cannot load lang request" +msgstr "Dil isteÄŸi yüklenemedi" + +msgid "Cannot manage zone" +msgstr "Bölge düzenlenemedi" + +#, c-format +msgid "Cannot move a directory (%s) onto an existing file or directory (%s)" +msgstr "" +"Bir klasör (%s) var olan bir dosya ya da klasörün (%s) üzerine taşınamadı" + +msgid "Cannot open the password file to add the user" +msgstr "Parola dosyası kullanıcıyı eklemek için açılamadı" + +msgid "Cannot open the password file to change the password" +msgstr "Parolayı deÄŸiÅŸtirmek için parola dosyası açılamadı" + +msgid "Cannot open the user password file for reading" +msgstr "Kullanıcı parolası dosyası okunmak üzere açılamadı" + +msgid "Cannot read the numerical 'limit' (original -1 is still set)" +msgstr "Sayısal 'limit' okunamadı (hala özgün -1 olarak ayarlı)" + +msgid "Cannot rename a directory onto an existing file or directory" +msgstr "" +"Bir klasör yeniden adlandırılırken var olan bir dosya ya da klasörün adı " +"verilemez" + +msgid "Cannot resend welcome email" +msgstr "Karşılama e-postası gönderilemedi" + +msgid "Cannot resolve host value for license check" +msgstr "Lisans denetimi için sunucu deÄŸeri çözümlenemedi" + +#, c-format +msgid "" +"Cannot restore the ftp account for %s. You have reached your limit (%s)." +msgstr "" +"%s için FTP hesabı geri yüklenemedi. Hesabınızın sınırına ulaÅŸtınız (%s)." + +msgid "Cannot set TTL" +msgstr "TTL deÄŸeri ayarlanamadı" + +msgid "Cannot set default domain" +msgstr "Varsayılan etki alanı ayarlanamadı" + +msgid "Cannot stat the source file" +msgstr "Kaynak dosya baÅŸlatılamadı" + +msgid "Cannot use the main account username" +msgstr "Ana hesabın kullanıcı adı kullanılamaz" + +msgid "Case Sensitive" +msgstr "Büyük Küçük Harfe Duyarlı" + +#, c-format +msgid "Catch all is now set to %s" +msgstr "Tümünü toplayan %s olarak ayarlandı" + +msgid "Catch-All E-Mail" +msgstr "Tümünü Topla E-postası" + +msgid "Catch-All Email" +msgstr "Tümünü Toplayan E-posta" + +msgid "Catch-All Email has been disabled on this account" +msgstr "Tümünü Topla E-postası özelliÄŸi bu hesap için devre dışı bırakılmış" + +msgid "Catch-All email updated successfully" +msgstr "Tümünü Topla E-postası güncellendi" + +msgid "Catch-All is now set to fail" +msgstr "Tümünü toplayan olmayan adresleri toplayacak" + +msgid "Catch-All is now set to ignore wrong addresses" +msgstr "Tümünü toplayan olmayan adresleri yok sayacak" + +msgid "Certificate" +msgstr "Sertifika" + +msgid "Certificate and Key Saved." +msgstr "Sertifika ve Anahtar Kaydedildi." + +msgid "Certificate is Invalid" +msgstr "Sertifika geçersiz" + +msgid "Certificate is Self-Signed" +msgstr "Sertifika Kendinden İmzalı" + +msgid "Change Password" +msgstr "Parolayı DeÄŸiÅŸtir" + +msgid "Change the password to unblock it." +msgstr "Engellemeyi kaldırmak için parolasını deÄŸiÅŸtirin." + +#, c-format +msgid "Changed by IP: %s" +msgstr "Güncellenen IP: %s" + +msgid "Changes saved" +msgstr "DeÄŸiÅŸiklikler kaydedildi" + +msgid "Check" +msgstr "Denetle" + +msgid "Check has already been done recently. Try later." +msgstr "Yakın zamanda denetlenmiÅŸ. Daha sonra yeniden deneyin." + +msgid "Check the error log for more information." +msgstr "Ayrıntılı bilgi almak için hata günlüğüne bakabilirsiniz." + +msgid "Check the time on both your server and your phone." +msgstr "Sunucu ve telefonun tarih ve saat ayarlarını gözden geçirin." + +msgid "Check to see if the current software is valid" +msgstr "Geçerli yazılımı doÄŸrulayın" + +#, c-format +msgid "Child user %s deleted" +msgstr "%s alt kullanıcısı silindi" + +msgid "" +"Choose from: blacklist_usernames, blacklist_smtp_usernames, " +"blacklist_script_usernames" +msgstr "" +"Åžunlardan seçin: blacklist_usernames, blacklist_smtp_usernames, " +"blacklist_script_usernames" + +msgid "City must only contain letters, spaces and/or periods" +msgstr "İl için yalnız harf, boÅŸluk ve nokta karakterleri kullanılabilir" + +msgid "Clean Forwarders" +msgstr "E-posta iletici deÄŸerleri temizlensin" + +#, c-format +msgid "Cleaning %s" +msgstr "Temizleniyor %s" + +msgid "Clear Customization" +msgstr "ÖzelleÅŸtirmeyi Kaldır" + +msgid "Clear Messages System" +msgstr "Bildirimleri Temizle" + +msgid "Clear NS" +msgstr "Ad Sunucuyu Temizle" + +msgid "Clear Search Filter" +msgstr "Arama Süzgecini Sıfırla" + +#, c-format +msgid "Click %sHERE%s to go back" +msgstr "Geri gitmek için %sBURAYA%s tıklayın" + +#, c-format +msgid "Click %sHERE%s to return" +msgstr "Geri dönmek için %sBURAYA TIKLAYIN%s" + +#, c-format +msgid "Click %sHERE%s to return to main page" +msgstr "GiriÅŸe geri dönmek için %sBURAYA TIKLAYIN%s" + +msgid "Click Here to Download the Latest Backup" +msgstr "Son YedeÄŸi İndirmek için Buraya Tıklayın" + +msgid "Click here to close this window" +msgstr "Bu pencereyi kapatmak için buraya tıklayın" + +msgid "Click here to enable SSL on the domain" +msgstr "Etki alanında SSL etkinleÅŸtirmek için buraya tıklayın" + +msgid "Clipboard" +msgstr "Panoya Kopyala" + +msgid "Close" +msgstr "Kapat" + +msgid "Closed" +msgstr "Kapatıldı" + +msgid "Closed+Confirm" +msgstr "Kapalı ve Onay" + +msgid "Code" +msgstr "Kod" + +msgid "Code does not match" +msgstr "Kod eÅŸleÅŸmiyor" + +#, c-format +msgid "Color %s (%s) is not from the list: %s" +msgstr "%s (%s) rengi listede yok: %s" + +msgid "Color has been customized" +msgstr "Renk özelleÅŸtirilmiÅŸ" + +msgid "Column in" +msgstr "Sutunu Åžuna Göre" + +msgid "Command" +msgstr "Komut" + +msgid "Command Returned" +msgstr "Komut Sonucu" + +msgid "Comment" +msgstr "Not" + +msgid "Comments" +msgstr "Notlar" + +msgid "Company must only contain letters, numbers, spaces, and/or periods" +msgstr "" +"KuruluÅŸ için yalnız harf, rakam, boÅŸluk ve nokta karakterleri kullanılabilir" + +msgid "Compressed File Created" +msgstr "Sıkıştırılmış Dosya OluÅŸturuldu" + +#, c-format +msgid "Compressing %s" +msgstr "Sıkıştırılıyor %s" + +msgid "Confirm" +msgstr "Onayla" + +#, c-format +msgid "Confirm results on the %sDirectAdmin Website%s" +msgstr "Sonuçları %sDirectAdmin Web Sitesinden%s doÄŸrulayın" + +#, c-format +msgid "Connection error: %s" +msgstr "BaÄŸlantı sorunu: %s" + +msgid "Continuing with the other files." +msgstr "DiÄŸer dosyalar ile devam ediliyor." + +msgid "" +"Controlling widgets for accounts under your control requires an Admin or " +"Reseller login" +msgstr "" +"Denetiminiz altındaki hesapların gereçlerini yönetmek için yönetici ya da " +"bayi olarak oturum açmalısınız" + +msgid "Copy" +msgstr "Kopyala" + +msgid "Copy Clipboard Files here" +msgstr "Panodakileri Buraya Kopyala" + +msgid "Copy the packages export data" +msgstr "Paketin dışa aktarılan verilerini kopyala" + +msgid "Copying Admin Data" +msgstr "Yönetici Verileri Kopyalanıyor" + +msgid "Copying Reseller Data" +msgstr "Bayi Verileri Kopyalanıyor" + +msgid "" +"Copying files has been disabled with the filemanager_disable_features option" +msgstr "" +"Dosyaları kopyalama özelliÄŸi filemanager_disable_features seçeneÄŸi ile devre " +"dışı bırakılmış" + +msgid "Copying unreadable data" +msgstr "Okunamayan veriler kopyalanıyor" + +msgid "Could not excute your request" +msgstr "İsteÄŸiniz yerine getirilemedi" + +msgid "Could not execute your request" +msgstr "İsteÄŸiniz yerine getirilemedi" + +#, c-format +msgid "Could not generate a random hash name after %d tries." +msgstr "%d deneme sonrasında rastgele bir karma adı üretilemedi." + +#, c-format +msgid "Could not get rDNS for IP '%s'" +msgstr "'%s' IP adresi için rDNS alınamadı" + +msgid "Could not read tickets" +msgstr "Destek kaydı okunamadı" + +msgid "Could not write tickets" +msgstr "Destek kaydı yazılamadı" + +#, c-format +msgid "Couldn't find any IPs of any type to give User (requested ip=%s)." +msgstr "" +"Kullanıcıya verilebilecek herhangi bir türde bir IP adresi bulunamadı " +"(istenilen ip=%s)." + +msgid "Couldn't find the 2nd part of the MX value, after the number" +msgstr "MX deÄŸerinin rakamdan sonraki ikinci bölümü bulunamadı" + +#, c-format +msgid "Couldn't read db file for %s. Unable to add ns1 and ns2 to it." +msgstr "" +"%s için veritabanı dosyası okunamadı. 1. ve 2. ad sunucuları dosyaya " +"eklenemedi." + +msgid "Count" +msgstr "Sayı" + +msgid "Counted" +msgstr "Sayılan" + +msgid "Country code must be 2 letters" +msgstr "Ülke kodu 2 harfli olmalıdır" + +msgid "Create/Restore Backups" +msgstr "Yedekleme ve Geri Yükleme" + +msgid "Created" +msgstr "Eklendi" + +msgid "" +"Creating directories has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Klasörleri ekleme özelliÄŸi filemanager_disable_features seçeneÄŸi ile devre " +"dışı bırakılmış" + +#, c-format +msgid "Creating that many %s would put you over your limit of %s" +msgstr "Bu sayıda %s eklenmesi %s sınırınızı aşıyor" + +msgid "Creating zip files is disabled" +msgstr "zip dosyası oluÅŸturma özelliÄŸi devre dışı bırakılmış" + +msgid "Creator" +msgstr "Ekleyen" + +msgid "Creator Duplicate" +msgstr "Ekleyeni Kopyala" + +msgid "Cron Created" +msgstr "Zamanlanmış Görev OluÅŸturuldu" + +msgid "Cron E-Mail set" +msgstr "Zamanlanmış görevin e-posta adresi kaydedildi" + +msgid "Cron Job(s) Deleted" +msgstr "Zamanlanmış Görev(ler) Silindi" + +msgid "Cron Jobs" +msgstr "Zamanlanmış Görevler" + +msgid "Cron Jobs Deleted" +msgstr "Zamanlanmış Görevler Silindi" + +msgid "Cron Jobs Duplicated" +msgstr "Zamanlanmış Görevler Kopyalandı" + +msgid "Cron Jobs will run in the background" +msgstr "Zamanlanmış görevler arka planda yapılacak" + +msgid "Cron Modified" +msgstr "Zamanlanmış Görev Güncellendi" + +msgid "Cron job has been created" +msgstr "Zamanlanmış görev oluÅŸturuldu" + +msgid "Current IPs" +msgstr "Kullanılan IP Adresleri" + +#, c-format +msgid "Current IPs Assigned to %s" +msgstr "%s üzerine atanmış IP Adresleri" + +msgid "Current Protected Directories" +msgstr "Åžu Anda Korunan Klasörler" + +msgid "Current Usage" +msgstr "Güncel Kullanım" + +msgid "Custom" +msgstr "Özel" + +msgid "Custom Color" +msgstr "Özel Renk" + +msgid "Custom HTTPD Configurations" +msgstr "Özel HTTPD Yapılandırmaları" + +msgid "Custom Question" +msgstr "Özel Soru" + +msgid "Custom Skin Logo uploaded" +msgstr "Özel tema logosu yüklendi" + +msgid "Custom Skin Logos are not enabled" +msgstr "Tema logosunu deÄŸiÅŸtirme özelliÄŸi etkinleÅŸtirilmemiÅŸ" + +msgid "Custom logo deleted" +msgstr "Özel logo silindi" + +msgid "Custom threshold must be a valid number. A decimal is allowed." +msgstr "Özel eÅŸik geçerli bir sayı olmalıdır. Ondalık hane kullanılabilir." + +msgid "Customization Disabled" +msgstr "ÖzelleÅŸtirme Devre Dışı Bırakılmış" + +msgid "Customization written" +msgstr "ÖzelleÅŸtirilen bilgiler yazıldı" + +msgid "Customize the skin" +msgstr "Temayı özelleÅŸtir" + +msgid "DKIM disabled" +msgstr "DKIM devre dışı bırakıldı" + +msgid "DKIM enabled" +msgstr "DKIM etkinleÅŸtirildi" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Control" +msgstr "DNS Yönetimi Yapabilsin" + +msgid "DNS Management" +msgstr "DNS Yönetimi" + +msgid "DNSSEC Keys generated" +msgstr "DNSSEC anahtarları üretildi" + +msgid "DNSSEC is not enabled" +msgstr "DNSSEC etkinleÅŸtirilmemiÅŸ" + +msgid "DNSSSEC - DNS Security" +msgstr "DNSSSEC - DNS GüvenliÄŸi" + +msgid "Database" +msgstr "Veritabanı" + +#, c-format +msgid "Database %s was removed successfully" +msgstr "%s veritabanı silindi" + +msgid "Database Created" +msgstr "Veritabanı Eklendi" + +msgid "Database Disk Usage" +msgstr "Veritabanı Disk Kullanımı" + +msgid "Database has been successfully Restored" +msgstr "Veritabanı geri yüklendi" + +msgid "Database:" +msgstr "Veritabanı:" + +msgid "Databases" +msgstr "Veritabanları" + +msgid "Date" +msgstr "Tarih" + +msgid "Date Added" +msgstr "EklendiÄŸi Tarih" + +msgid "Date Blocked" +msgstr "Engellenme Tarihi" + +msgid "Date Created" +msgstr "Eklenme Tarihi" + +msgid "Date Suspended" +msgstr "Askıya Alınma Tarihi" + +msgid "Day of Month" +msgstr "Ayın Günü" + +msgid "Day of Week" +msgstr "Ayın Haftası" + +msgid "Days must be a valid number." +msgstr "Gün deÄŸeri geçerli bir sayı olmalıdır." + +msgid "Debug Guide" +msgstr "Hata Ayıklama Rehberi" + +msgid "Dec" +msgstr "Ara" + +msgid "Decending" +msgstr "Azalan" + +#, c-format +msgid "Decryption of %s has failed" +msgstr "%s ÅŸifresi çözülemedi" + +msgid "Default" +msgstr "Varsayılan" + +msgid "Delete" +msgstr "Sil" + +msgid "Delete Extension" +msgstr "Uzantıyı Sil" + +msgid "Delete Handler" +msgstr "İşleyiciyi Sil" + +msgid "Delete MimeType" +msgstr "MIME Türünü Sil" + +msgid "Delete Selected" +msgstr "SeçilmiÅŸleri Sil" + +msgid "Delete the DNSSEC keys and use a non-signed zone" +msgstr "DNSSEC anahtarlarını ve imzalanmamış bölgeyi sil" + +msgid "Delete the following domains:" +msgstr "Åžu etki alanlarını sil:" + +msgid "Delete the following users" +msgstr "Åžu kullanıcıları sil" + +msgid "Delete web data" +msgstr "Web verilerini sil" + +msgid "Deleted" +msgstr "Silindi" + +msgid "Deleted User Bandwidth" +msgstr "SilinmiÅŸ Kullanıcı Bant GeniÅŸliÄŸi" + +#, c-format +msgid "Deleting %s ..." +msgstr "%s siliniyor ..." + +msgid "" +"Deleting files/directories has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Dosyaları ve klasörleri silme özelliÄŸi filemanager_disable_features seçeneÄŸi " +"ile devre dışı bırakılmış" + +msgid "Deleting these NS records will leave you with 0." +msgstr "Bu NS kayıtları silinirse 0 kayıt kalacak." + +msgid "Deny" +msgstr "Reddet" + +msgid "Destination" +msgstr "Hedef" + +#, c-format +msgid "Destination URL error: %s" +msgstr "Hedef adres sorunu: %s" + +msgid "Detail" +msgstr "Ayrıntılar" + +msgid "Details" +msgstr "Ayrıntılar" + +msgid "Digest Subscriber" +msgstr "Derleme Abonesi" + +msgid "Digest Subscribers" +msgstr "Derleme Aboneleri" + +msgid "DirectAdmin will be restarted in 1 minute" +msgstr "DirectAdmin 1 dakika içinde yeniden baÅŸlatılacak" + +msgid "Directory Protection Settings have been saved." +msgstr "Klasör koruması ayarları kaydedildi." + +msgid "Directory created" +msgstr "Klasör eklendi" + +msgid "Disable" +msgstr "Devre Dışı Bırak" + +msgid "Disable Auto-Renew" +msgstr "Otomatik Yenilemeyi Devre Dışı Bırak" + +msgid "Disabled" +msgstr "Devre Dışı Bırakılmış" + +msgid "" +"Disabled Reseller settings will be applied to Users and Packages in the " +"background." +msgstr "" +"Devre dışı bırakılmış Bayi ayarları arka planda Kullanıcılara ve Paketlere " +"uygulanacak." + +msgid "Disk Space" +msgstr "Disk Alanı" + +msgid "Disk Space (MB)" +msgstr "Disk Alanı (MB)" + +msgid "Disk Usage" +msgstr "Disk Kullanımı" + +msgid "Disk Usage Details" +msgstr "Disk Kullanımı Ayrıntıları" + +msgid "Division must only contain letters, numbers, spaces, and/or periods" +msgstr "" +"Bölüm için yalnız harf, rakam, boÅŸluk ve nokta karakterleri kullanılabilir" + +msgid "Dns Provider reset." +msgstr "DNS hizmeti saÄŸlayıcısı sıfırlandı." + +msgid "Dns Provider saved." +msgstr "DNS hizmeti saÄŸlayıcısı kaydedildi." + +msgid "Do not use CAPS in the domain name." +msgstr "Etki alanı adında büyük harfler kullanılmamalıdır." + +msgid "Do not use any spaces between the email names." +msgstr "E-posta adları arasında boÅŸluk bırakmayın." + +#, c-format +msgid "Do not use spaces in the %s value" +msgstr "%s deÄŸerinde boÅŸluk kullanmayın" + +msgid "Do you want to overwrite any existing files?" +msgstr "Var olan dosyaların üzerine yazılsın mı?" + +msgid "DocumentRoot" +msgstr "Belge Kök Klasörü" + +#, c-format +msgid "Does not match setting: %s" +msgstr "Ayara uygun deÄŸil: %s" + +msgid "Domain" +msgstr "Etki Alanı" + +#, c-format +msgid "Domain %s Created" +msgstr "%s Etki Alanı Eklendi" + +#, c-format +msgid "Domain %s may not use a %s override path of %s" +msgstr "%s etki alanı bir %s yol deÄŸiÅŸikliÄŸini %s için kullanmayabilir" + +#, c-format +msgid "" +"Domain %s was suspended by an Admin and you not have this access. You cannot " +"unsuspend this domain." +msgstr "" +"%s etki alanı bir Yönetici tarafından askıya alınmış. Sizin Yönetici " +"düzeyinde olmadığından bu hesabı askıdan indiremezsiniz." + +msgid "Domain AWstats" +msgstr "Etki Alanı AWstats" + +msgid "Domain AWstats + Webalizer" +msgstr "Etki Alanı AWstats + Webalizer" + +msgid "Domain Bandwidth" +msgstr "Etki Alanı Bant GeniÅŸliÄŸi" + +msgid "Domain Created" +msgstr "Etki Alanı Geçersiz" + +msgid "Domain Created Successfully" +msgstr "Etki Alanı Eklendi" + +msgid "Domain Deletion Results" +msgstr "Etki Alanı Silme Sonuçları" + +msgid "Domain Pointer" +msgid_plural "Domain Pointers" +msgstr[0] "Etki Alanı Yönlendirmesi" +msgstr[1] "Etki Alanı Yönlendirmesi" + +msgid "Domain Pointer Added" +msgstr "Etki Alanı Yönlendirmesi Eklendi" + +msgid "Domain Pointer on" +msgstr "Etki Alanı Yönlendirmesi" + +msgid "Domain Pointers" +msgstr "Yönlendirmeler" + +msgid "Domain Quota" +msgstr "Etki Alanı Kotası" + +msgid "Domain Renaming is not enabled" +msgstr "Etki alanını yeniden adlandırma özelliÄŸi etkinleÅŸtirilmemiÅŸ" + +msgid "Domain Setup" +msgstr "Etki Alanı Yönetimi" + +msgid "Domain Webalizer Stats" +msgstr "Etki Alanı Webalizer İstatistikleri" + +msgid "Domain and password are required" +msgstr "Etki alanı ve parola gereklidir" + +msgid "Domain does not belong to you" +msgstr "Etki alanı hesabınıza ait deÄŸil" + +#, c-format +msgid "Domain exists on %s" +msgstr "Etki alanı %s üzerinde var" + +msgid "Domain has already been deleted. It wasn't in the named.conf file" +msgstr "Etki alanı zaten silinmiÅŸ. named.conf dosyasında yok" + +msgid "" +"Domain is already processing an SSL request. Please allow it to finish " +"before making other changes." +msgstr "" +"Etki alanı için zaten iÅŸlenmekte olan bir SSL isteÄŸi var. Lütfen baÅŸka bir " +"deÄŸiÅŸiklik yapmadan önce iÅŸlemin bitmesini bekleyin." + +msgid "Domain is forbidden" +msgstr "Etki alanına izin verilmiyor" + +msgid "Domain is not in your list" +msgstr "Etki alanı sizin listenizde yok" + +msgid "Domain name has been successfully changed" +msgstr "Etki alanı adı güncellendi" + +msgid "Domain php.ini overrides" +msgstr "Etki alanı php.ini deÄŸiÅŸiklikleri" + +#, c-format +msgid "Domain pointer %s for domain %s for user %s already exists" +msgstr "" +"%s etki alanı yönlendiricisi %s etki alanı ve %s kullanıcısı için zaten var" + +msgid "Domain(s)" +msgstr "Etki Alanları" + +msgid "Domain(s) modified" +msgstr "Etki alan(lar)ı düzenlendi" + +msgid "Domains" +msgstr "Etki Alanı" + +msgid "Domains directory created successfully" +msgstr "Etki alanı klasörü oluÅŸturuldu" + +msgid "Domains directory created successfully in user's home" +msgstr "Kullanıcının ana klasöründe domains klasörü oluÅŸturuldu" + +msgid "Double click for main domain page" +msgstr "Ana etki alanı bölümüne gitmek için çift tıklayın" + +#, c-format +msgid "Dovecot file '%s' is missing data. Run './build dovecot_conf'" +msgstr "" +"'%s' Dovecot dosyasında veriler eksik. './build dovecot_conf' komutunu " +"yürütün" + +msgid "Download" +msgstr "İndir" + +msgid "Download Backup" +msgstr "YedeÄŸi İndir" + +#, c-format +msgid "Downloaded: %s" +msgstr "İndirilen: %s" + +msgid "Downloading a new webalizer binary" +msgstr "Yeni webalizer sürümünü indirmek" + +msgid "" +"Downloading compress folders has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Sıkıştırılmış klasörleri indirme özelliÄŸi filemanager_disable_features " +"seçeneÄŸi ile devre dışı bırakılmış" + +msgid "" +"Downloading files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Dosyaları indirme özelliÄŸi filemanager_disable_features seçeneÄŸi ile devre " +"dışı bırakılmış" + +msgid "Driver signals L1 up." +msgstr "Sürücü L1 yukarı sinyalleri." + +msgid "Driver signals dormant." +msgstr "Sürücü uykuda sinyal veriyor." + +msgid "Duplicate" +msgstr "Kopyala" + +msgid "E-Mail" +msgstr "E-posta" + +msgid "E-Mail Accounts" +msgstr "E-posta Hesapları" + +msgid "E-Mail Accounts Deleted" +msgstr "E-posta Hesaplaru Silindi" + +msgid "E-Mail Address has been successfully changed" +msgstr "E-posta adresi güncellendi" + +msgid "E-Mail Limit has been set" +msgstr "E-posta sınırı kaydedildi" + +msgid "E-Mail Updated" +msgstr "E-posta Güncellendi" + +msgid "E-Mail Usage" +msgstr "E-posta Kullanımı" + +msgid "E-Mail account already exists" +msgstr "E-posta hesabı zaten var" + +msgid "E-Mail has been changed" +msgstr "E-posta adresi güncellendi" + +#, c-format +msgid "E-Mail has been changed to %s" +msgstr "E-posta adresi %s olarak güncellendi" + +#, c-format +msgid "E-Mail quota must not exceed %s" +msgstr "E-posta sınırı %s deÄŸerinden büyük olamaz" + +msgid "EC-256" +msgstr "EC-256" + +msgid "EC-384" +msgstr "EC-384" + +msgid "EC-521" +msgstr "EC-521" + +msgid "Echo sent packets." +msgstr "Echo paketleri gönderdi." + +msgid "Edit" +msgstr "Düzenle" + +msgid "Edit Admin Welcome Message" +msgstr "Yönetici Karşılama İletisini Düzenle" + +msgid "Edit Reseller Welcome Message" +msgstr "Bayi Karşılama İletisini Düzenle" + +msgid "Edit Suspension Message" +msgstr "Askıya Alma İletisini Düzenle" + +msgid "Edit User Welcome Message" +msgstr "Kullanıcı Karşılama İletisini Düzenle" + +msgid "Edit the zone on the master server." +msgstr "Bölgeyi ana sunucu üzerinden düzenleyin." + +msgid "" +"Either have your account creator change your password to unblock it, or use " +"the Lost Password feature on the login page (if enabled)." +msgstr "" +"Engellemeyi kaldırmak için hesabı oluÅŸturan kiÅŸinin parolayı deÄŸiÅŸtirmesi ya " +"da oturum açma sayfasından (etkinleÅŸtirilmiÅŸ ise) Parolamı Unuttum " +"seçeneÄŸinin kullanılması gerekir." + +msgid "Email" +msgstr "E-posta adresi" + +#, c-format +msgid "Email '%s' does not exist" +msgstr "'%s' e-posta adresi bulunamadı" + +msgid "Email Deliveries (Sent)" +msgstr "Gönderilen E-posta" + +msgid "Email Disk Usage" +msgstr "E-posta Disk Kullanımı" + +msgid "Email Forwarders" +msgstr "E-posta İleticiler" + +msgid "Email Only" +msgstr "Yalnız E-posta" + +msgid "Email Sent" +msgstr "E-posta Gönderildi" + +msgid "Email created but" +msgstr "E-posta oluÅŸturuldu ancak" + +msgid "Empty Clipboard" +msgstr "Panoyu BoÅŸalt" + +msgid "Empty:" +msgstr "BoÅŸ:" + +msgid "Enable" +msgstr "EtkinleÅŸtir" + +msgid "Enabled" +msgstr "Etkin" + +#, c-format +msgid "Encryption of %s has failed" +msgstr "%s ÅŸifrelenemedi" + +msgid "End Time" +msgstr "BitiÅŸ Zamanı" + +#, c-format +msgid "" +"End of file reached while trying reading in %lld bytes from %s. filled=%lld" +msgstr "" +"%lld bayt %s üzerinden okunmaya çalışılırken dosyanın sonuna ulaşıldı. " +"filled=%lld" + +#, c-format +msgid "Ensure %s exists and is chmod to 1777." +msgstr "" +"%s ögesinin var olduÄŸundan ve chmod deÄŸerinin 1777 olduÄŸundan emin olun." + +msgid "Ensure the 2nd key matches the first" +msgstr "2. anahtarın birinci ile eÅŸleÅŸtiÄŸinden emin olun" + +msgid "Ensure the Reseller's ip.list has some usable IPs." +msgstr "" +"Bayinin ip.list dosyasında kullanılabilecek IP adresleri bulunduÄŸundan emin " +"olun." + +msgid "Ensuring stored domains are present" +msgstr "Kaydedilen etki alanlarının var olduÄŸundan emin olunuyor" + +msgid "Enter your Two-Step Authentication Code" +msgstr "İki AÅŸamalı Kimlik DoÄŸrulaması Kodunuzu Yazın" + +#, c-format +msgid "Error %s widgets from accounts: %s" +msgstr "Hesaplardan %s pano bileÅŸeni sorunu: %s" + +msgid "Error Adding Main Username to database:" +msgstr "Veritabanına ana kullanıcı adı eklenirken sorun çıktı:" + +msgid "Error Compressing the backup file" +msgstr "Yedek dosyası sıkıştırılırken sorun çıktı" + +msgid "Error Creating Cron Job" +msgstr "Zamanlanmış Görev OluÅŸturulurken Sorun Çıktı" + +msgid "Error Creating Domain" +msgstr "Etki Alanı Eklenirken Sorun Çıktı" + +msgid "Error Creating Key" +msgstr "Anahtar eklenirken sorun çıktı" + +msgid "Error Creating User" +msgstr "Kullanıcı eklenirken sorun çıktı" + +#, c-format +msgid "Error Deleting %s" +msgstr "%s silinirken sorun çıktı" + +msgid "Error Executing Perl" +msgstr "Perl Yürütülürken Sorun Çıktı" + +msgid "Error Flushing Privileges" +msgstr "İzinler Kaldırılırken Sorun Çıktı" + +msgid "Error Flushing Privileges:" +msgstr "İzinler Temizlenirken Sorun Çıktı:" + +msgid "Error Log" +msgstr "Hata Günlüğü" + +msgid "Error Reading Message File" +msgstr "İleri Dosyası Okunurken Sorun Çıktı" + +msgid "Error Reading db file" +msgstr "Veritabanı dosyası okunurken sorun çıktı" + +#, c-format +msgid "Error Removing User %s" +msgstr "%s Kullanıcısı Silinirken Sorun Çıktı" + +msgid "Error Resetting Key Uses" +msgstr "Anahtar Kullanımı Sayısı Sıfırlanırken Sorun Çıktı" + +msgid "Error Resetting Zone" +msgstr "Bölge Sıfırlanırken Sorun Çıktı" + +msgid "Error Restoring database" +msgstr "Veritabanı Geri Yüklenirken Sorun Çıktı" + +#, c-format +msgid "Error Saving Password: %s" +msgstr "Parola Kaydedilirken Sorun Çıktı: %s" + +msgid "Error Unblocking paths" +msgstr "Yolların engellemesi kaldırılırken sorun çıktı" + +msgid "Error Updating User" +msgstr "Kullanıcı Güncellenirken Sorun Çıktı" + +#, c-format +msgid "Error Writing %s" +msgstr "%s yazılırken sorun çıktı" + +#, c-format +msgid "Error activating %s's user %s: %s" +msgstr "%s kullanıcısı %s etkinleÅŸtirilirken sorun çıktı: %s" + +#, c-format +msgid "Error activating cronjobs: %s" +msgstr "Zamanlanmış görevler etkinleÅŸtirilirken sorun çıktı: %s" + +#, c-format +msgid "Error activating data for %s: %s" +msgstr "%s verileri etkinleÅŸtirilirken sorun çıktı: %s" + +#, c-format +msgid "Error adding DS records for %s to remote parent zone: %s" +msgstr "%s için DS kayıtları uzak üst bölgeye eklenirken sorun çıktı: %s" + +msgid "Error authorizing SSH Key" +msgstr "SSH anahtarının kimliÄŸi doÄŸrulanırken sorun çıktı" + +msgid "Error changing password" +msgstr "Parola güncellenirken sorun çıktı" + +msgid "Error changing password. Contact your webhost." +msgstr "Parola güncellenirken sorun çıktı. Barındırma yöneticiniz ile görüşün." + +msgid "Error clearing LetsEncrypt files" +msgstr "LetsEncrypt dosyaları temizlenirken sorun çıktı" + +msgid "Error converting file: " +msgstr "Dosya dönüştürülürken sorun çıktı " + +#, c-format +msgid "Error copying %s to %s : %s" +msgstr "%s, %s üzerine kopyalanırken sorun çıktı: %s" + +#, c-format +msgid "Error copying %s to %s: %s" +msgstr "%s, %s üzerine kopyalanırken sorun çıktı: %s" + +#, c-format +msgid "Error copying logo file: %s" +msgstr "Logo dosyası kopyalanırken sorun çıktı: %s" + +#, c-format +msgid "Error creating %s" +msgstr "%s eklenirken sorun çıktı" + +#, c-format +msgid "Error creating %s: %s" +msgstr "%s eklenirken sorun çıktı: %s" + +msgid "Error creating Autoresponder" +msgstr "Otomatik Yanıtlayıcı Eklenirken Sorun Çıktı" + +#, c-format +msgid "Error creating NginxUnit application '%s': %s" +msgstr "'%s' NginxUnit uygulaması eklenirken sorun çıktı: %s" + +#, c-format +msgid "Error creating NginxUnit route '%s': %s" +msgstr "'%s' NginxUnit yöneltmesi eklenirken sorun çıktı: %s" + +msgid "Error creating SSH Key" +msgstr "SSH anahtarı eklenirken sorun çıktı" + +msgid "Error creating User" +msgstr "Kullanıcı eklenirken sorun çıktı" + +msgid "Error creating Vacation Message" +msgstr "Tatil Bildirimi eklenirken sorun çıktı" + +msgid "Error creating account" +msgstr "Hesap eklenirken sorun çıktı" + +#, c-format +msgid "" +"Error creating default directories in %s. See error.log for more " +"information." +msgstr "" +"%s içinde varsayılan klasörler oluÅŸturulurken sorun çıktı. Ayrıntılı bilgi " +"almak için error.log dosyasına bakabilirsiniz." + +msgid "Error creating forwarder" +msgstr "İletici eklenirken sorun çıktı" + +msgid "Error creating the database" +msgstr "Veritabanı eklenirken sorun çıktı" + +msgid "Error decoding the base 64 data" +msgstr "Base 64 verilerinin kodu çözülürken sorun çıktı" + +#, c-format +msgid "Error deleting %s: %s" +msgstr "%s silinirken sorun çıktı: %s" + +msgid "Error deleting SSH Key" +msgstr "SSH anahtarı silinirken sorun çıktı" + +msgid "Error deleting Security Questions" +msgstr "Güvenlik soruları silinirken sorun çıktı" + +msgid "Error deleting account(s)" +msgstr "Hesap(lar) silinirken sorun çıktı" + +msgid "Error deleting autoresponder(s)" +msgstr "Otomatik yanıtlayıcı(lar) silinirken sorun çıktı" + +msgid "Error deleting filter(s)" +msgstr "Süzgeç(ler) silinirken sorun çıktı" + +msgid "Error deleting key(s)" +msgstr "Anahtar(lar) silinirken sorun çıktı" + +msgid "Error deleting records" +msgstr "Kayıtlar silinirken sorun çıktı" + +msgid "Error determining username from " +msgstr "Kullanıcı adı ÅŸuradan belirlenirken sorun çıktı " + +#, c-format +msgid "Error during automated certificate renewal for %s" +msgstr "%s için otomatik sertifika yenilemesi yapılırken sorun çıktı" + +#, c-format +msgid "Error during deletion of child user %s" +msgstr "%s alt kullanıcısı silinirken sorun çıktı" + +msgid "Error during extraction" +msgstr "Ayıklama sırasında sorun çıktı" + +msgid "Error executing your request" +msgstr "İsteÄŸiniz yerine getirilirken sorun çıktı" + +msgid "Error generating scratch codes" +msgstr "Yedek kodlar üretilirken sorun çıktı" + +msgid "Error generating zone keys" +msgstr "Bölge anahtarları üretilirken sorun çıktı" + +msgid "Error importing base 64 encoded packages" +msgstr "Base 64 ile kodlanmış paketler içe aktarılırken sorun çıktı" + +msgid "Error in post. Requires domain, type and value." +msgstr "İletide sorun çıktı. Etki alanı, tür ve deÄŸer yazmalısınız." + +msgid "Error modifying SSH key" +msgstr "SSH anahtarı güncellenirken sorun çıktı" + +msgid "Error parsing 'routes'." +msgstr "'routes' dosyası iÅŸlenirken sorun çıktı." + +msgid "Error parsing json output" +msgstr "JSON çıktısı iÅŸlenirken sorun çıktı" + +msgid "Error purging archives" +msgstr "ArÅŸivler boÅŸaltılırken sorun çıktı" + +#, c-format +msgid "Error reading %s: %s" +msgstr "%s okunurken sorun çıktı: %s" + +msgid "Error reading admin list file." +msgstr "Yönetici listesi dosyası okunurken sorun çıktı." + +msgid "Error reading domain config file" +msgstr "Etki alanı yapılandırma dosyası okunurken sorun çıktı" + +msgid "Error reading domain config files" +msgstr "Etki alanı yapılandırma dosyaları okunurken sorun çıktı" + +msgid "Error reading domainowners" +msgstr "domainowners dosyası okunurken sorun çıktı" + +msgid "Error reading domainowners file" +msgstr "domainowners dosyası okunurken sorun çıktı" + +msgid "Error reading named db file" +msgstr "named veritabanı dosyası okunurken sorun çıktı" + +#, c-format +msgid "Error reading new license: %s" +msgstr "Yeni lisans okunurken sorun çıktı: %s" + +msgid "Error reading the db file after writing to it, before DNSSEC signing" +msgstr "" +"DNSSEC imzalamasından önce veritabanı dosyasına yazıldıktan sonra okunurken " +"sorun çıktı" + +msgid "Error reading the license file for restore." +msgstr "Geri yükleme için lisans okunurken sorun çıktı." + +#, c-format +msgid "Error reading user files for %s, continuing anyway." +msgstr "" +"%s kullanıcısının dosyaları okunurken sorun çıktı. Gene de devam ediliyor." + +msgid "Error reading user_ip.list file" +msgstr "user_ip.list dosyası okunurken sorun çıktı" + +#, c-format +msgid "Error removing %s: %s" +msgstr "%s silinirken sorun çıktı: %s" + +#, c-format +msgid "Error removing IP(s) from %s" +msgstr "IP adresleri %s üzerinden silinirken sorun çıktı" + +msgid "Error removing file: " +msgstr "Dosya silinirken sorun çıktı: " + +#, c-format +msgid "Error removing path %s: %s" +msgstr "%s yolu silinirken sorun çıktı: %s" + +msgid "Error removing subdomain(s)" +msgstr "Alt etki alanları silinirken sorun çıktı" + +#, c-format +msgid "Error removing user %s" +msgstr "%s kullanıcısı silinirken sorun çıktı" + +#, c-format +msgid "Error renaming %s to %s: %s" +msgstr "%s, %s olarak yeniden adlandırılırken sorun çıktı: %s" + +#, c-format +msgid "Error restoring %s: %s" +msgstr "%s geri yüklenirken sorun çıktı: %s" + +#, c-format +msgid "Error restoring php settings for '%s': %s" +msgstr "'%s' için PHP ayarları geri yüklenirken sorun çıktı: %s" + +#, c-format +msgid "Error rewriting %s" +msgstr "%s yeniden yazılırken sorun çıktı" + +#, c-format +msgid "Error running %s auto: %s" +msgstr "%s otomatik yürütülürken sorun çıktı: %s" + +#, c-format +msgid "Error running %s: %s" +msgstr "%s yürütülürken sorun çıktı: %s" + +msgid "Error running rndc addzone." +msgstr "rndc addzone yürütülürken sorun çıktı." + +msgid "Error running rndc delzone." +msgstr "rndc delzone yürütülürken sorun çıktı." + +msgid "Error saving Cron E-Mail" +msgstr "Zamanlanmış görevin e-posta adresi kaydedilirken sorun çıktı" + +msgid "Error saving Nameservers" +msgstr "Ad sunucuları kaydedilirken sorun çıktı" + +#, c-format +msgid "Error selecting database %s: %s" +msgstr "%s veritabanı seçilirken sorun çıktı: %s" + +#, c-format +msgid "Error sending signal to %d: %s" +msgstr "%d üzerine iÅŸaret gönderilirken sorun çıktı: %s" + +msgid "Error setting MX Template" +msgstr "MX kalıbı ayarlanırken sorun çıktı" + +msgid "Error setting MX template for pointer" +msgstr "Yönlendirme için MX kalıbı ayarlanırken sorun çıktı" + +msgid "Error setting PHP versions" +msgstr "PHP sürümleri kaydedilirken sorun çıktı" + +msgid "Error setting Security Question" +msgstr "Güvenlik sorusu ayarlanırken sorun çıktı" + +#, c-format +msgid "Error setting cgroup limits for %s: %s" +msgstr "%s için cgroup sınırları ayarlanırken sorun çıktı: %s" + +msgid "Error setting clipboard files" +msgstr "Pano dosyaları ayarlanırken sorun çıktı" + +msgid "Error setting global key" +msgstr "Genel anahtar ayarlanırken sorun çıktı" + +#, c-format +msgid "Error setting permission on %s: %s" +msgstr "%s üzerinde izinler ayarlanırken sorun çıktı: %s" + +msgid "Error setting the filter" +msgstr "Süzgeç ayarlanırken sorun çıktı" + +msgid "Error setting the spam filter" +msgstr "Spam süzgeci ayarlanırken sorun çıktı" + +msgid "Error setting timezone" +msgstr "Saat dilimi ayarlanırken sorun çıktı" + +msgid "Error showing Email Acounts" +msgstr "E-posta hesapları görüntülenirken sorun çıktı" + +msgid "Error showing message ID info" +msgstr "İleti kodu bilgileri görüntülenirken sorun çıktı" + +msgid "Error showing smtp log info" +msgstr "SMTP günlüğü bilgileri görüntülenirken sorun çıktı" + +msgid "Error signing zone" +msgstr "Bölge imzalanırken sorun çıktı" + +#, c-format +msgid "Error suspending %s's user %s: %s" +msgstr "%s kullanıcısı %s askıya alınırken sorun çıktı: %s" + +#, c-format +msgid "Error suspending cronjobs: %s" +msgstr "Zamanlanmış görevler askıya alınırken sorun çıktı: %s" + +msgid "Error updating Autoresponder" +msgstr "Otomatik Yanıtlayıcı güncellenirken sorun çıktı" + +msgid "Error updating Catch-All value" +msgstr "Tümünü Topla deÄŸeri güncellenirken sorun çıktı" + +msgid "Error updating Vacation Message" +msgstr "Tatil Bildirimi güncellenirken sorun çıktı" + +msgid "Error updating forwarder" +msgstr "İletici güncellenirken sorun çıktı" + +#, c-format +msgid "Error while backing up database %s" +msgstr "%s veritabanı yedeklenirken sorun çıktı" + +msgid "Error while compressing file" +msgstr "Dosya sıkıştırılırken sorun çıktı" + +msgid "Error while creating User" +msgstr "Kullanıcı oluÅŸturulurken sorun çıktı" + +msgid "Error while creating the backup" +msgstr "Yedek oluÅŸturulurken sorun çıktı" + +msgid "Error while deleting Users" +msgstr "Kullanıcılar silinirken sorun çıktı" + +msgid "Error while saving changes" +msgstr "DeÄŸiÅŸiklikler kaydedilirken sorun çıktı" + +msgid "Error while saving password" +msgstr "Parola kaydedilirken sorun çıktı" + +msgid "Error while sending email" +msgstr "E-posta gönderilirken sorun çıktı" + +#, c-format +msgid "Error while writing %s" +msgstr "%s yazılırken sorun çıktı" + +#, c-format +msgid "Error with Command::master_login:search:gettimeofday: %s" +msgstr "Åžu komutta sorun çıktı::master_login:search:gettimeofday: %s" + +msgid "Error with LetsEncrypt request" +msgstr "LetsEncrypt isteÄŸi yapılırken sorun çıktı" + +msgid "Error with Security Questions" +msgstr "Güvenlik soruları ile ilgili sorun çıktı" + +msgid "Error with Two-Step Authentication" +msgstr "İki AÅŸamalı Kimlik DoÄŸrulama Sorunu" + +msgid "Error with command:" +msgstr "Åžu komutta sorun çıktı:" + +msgid "Error with curl request" +msgstr "curl isteÄŸi yapılırken sorun çıktı" + +msgid "Error with exigrep" +msgstr "exigrep iÅŸleminde sorun çıktı" + +msgid "Error with fchownat" +msgstr "fchownat iÅŸleminde sorun çıktı" + +#, c-format +msgid "Error with request: '%s' More info in debug output." +msgstr "" +"'%s' isteÄŸi yapılırken sorun çıktı. Ayrıntılı bilgi almak için hata ayıklama " +"çıktısına bakabilirsiniz." + +msgid "Error with system Quotas" +msgstr "Sistem kotaları ile ilgili sorun çıktı" + +#, c-format +msgid "" +"Error with the backup plan (rename failed): the copy of %s to %s has also " +"failed: %s" +msgstr "" +"Yedekleme planında sorun çıktı (yeniden adlandırılamadı): Ayrıca %s kopyası " +"%s üzerine alınamadı: %s" + +#, c-format +msgid "Error writing %s" +msgstr "%s yazılırken sorun çıktı" + +#, c-format +msgid "Error writing %s: %s" +msgstr "%s yazılırken sorun çıktı: %s" + +msgid "Error writing domain config file" +msgstr "Etki alanı yapılandırma dosyasına yazılırken sorun çıktı" + +msgid "Error writing password request file." +msgstr "Parola isteÄŸi dosyasına yazılırken sorun çıktı." + +msgid "Error writing pop cache" +msgstr "Pop ön belleÄŸine yazılırken sorun çıktı" + +#, c-format +msgid "Error writing settings file for %s" +msgstr "%s ayar dosyası yazılırken sorun çıktı" + +msgid "Error writing the directadmin.conf" +msgstr "directadmin.conf dosyasına yazılırken sorun çıktı" + +#, c-format +msgid "Error writing to %s: %s" +msgstr "%s dosyasına yazılırken sorun çıktı: %s" + +msgid "Errors" +msgstr "Hatalar" + +msgid "Evening" +msgstr "AkÅŸam" + +msgid "Expecting 0 or 1" +msgstr "0 ya da 1 olmalı" + +msgid "Expecting any integer" +msgstr "Bir tamsayı olmalı" + +msgid "Expecting any long long integer" +msgstr "Herhangi bir uzun uzun tamsayı bekleniyor (iÅŸaretli 64 bit tamsayı)" + +msgid "Expired" +msgstr "Süresi GeçmiÅŸ" + +msgid "Expires" +msgstr "Geçerlilik Sonu" + +msgid "Expiry" +msgstr "Geçerlilik Sonu" + +msgid "Export Selected" +msgstr "SeçilmiÅŸleri Dışa Aktar" + +msgid "Extension" +msgstr "Uzantı" + +msgid "Extensions" +msgstr "Uzantılar" + +msgid "Extract" +msgstr "Ayıkla" + +msgid "Extract selected to directory" +msgstr "SeçilmiÅŸleri ÅŸu klasöre dışa aktar" + +msgid "Extracting User Data" +msgstr "Kullanıcı Verileri Ayıklanıyor" + +msgid "" +"Extracting files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Sıkıştırılmış dosyaları ayıklama özelliÄŸi filemanager_disable_features " +"seçeneÄŸi ile devre dışı bırakılmış" + +msgid "Extracting non-readable files" +msgstr "Okunamayan dosyalar ayıklanıyor" + +msgid "Extracting ~/domains directory" +msgstr "~/domains klasörü ayıklanıyor" + +msgid "Extracting ~/imap directory" +msgstr "~/imap klasörü ayıklanıyor" + +msgid "FTP" +msgstr "FTP" + +msgid "FTP account already exists" +msgstr "FTP hesabı zaten var" + +msgid "FTP information invalid." +msgstr "FTP bilgileri geçersiz." + +msgid "FTP: default creation error" +msgstr "FTP: varsayılan oluÅŸturma sorunu" + +msgid "Failed Referer Check" +msgstr "Yönlendiren Denetimi Yapılamadı" + +msgid "Failed to verify" +msgstr "DoÄŸrulanamadı" + +msgid "Feature Disabled" +msgstr "Özellik Devre Dışı Bırakılmış" + +msgid "Feb" +msgstr "Åžub" + +msgid "File" +msgstr "Dosya" + +#, c-format +msgid "File %s already exists, file skipped." +msgstr "%s dosyası zaten var olduÄŸundan dosya atlandı." + +msgid "File Extracted" +msgstr "Dosya Ayıklandı" + +msgid "File Manager" +msgstr "Dosya Yöneticisi" + +#, c-format +msgid "File being read as '%s'" +msgstr "Dosya '%s' olarak okundu" + +msgid "File copied successfully" +msgstr "Dosya kopyalandı" + +msgid "File does not exist" +msgstr "Dosya bulunamadı" + +msgid "File does not exist or you don't have access to file" +msgstr "Dosya bulunamadı ya da bu dosyaya eriÅŸme izniniz yok" + +msgid "File ownership reset" +msgstr "Dosya sahipliÄŸini sıfırla" + +msgid "File restored successfully" +msgstr "Dosya geri yüklendi" + +msgid "Filename" +msgstr "Dosya Adı" + +msgid "Files added to clipboard" +msgstr "Dosya panoya eklendi" + +msgid "Filesystem" +msgstr "Dosya Sistemi" + +msgid "Filter" +msgstr "Süzgeç" + +msgid "Fingerprint" +msgstr "Parmak izi" + +msgid "First" +msgstr "İlk" + +msgid "First PHP" +msgstr "Birinci PHP Sürümü" + +msgid "First Page" +msgstr "İlk Sayfa" + +#, c-format +msgid "Flag value for '%s' is blank" +msgstr "'%s' için iÅŸaret deÄŸeri boÅŸ" + +msgid "Flush from DNS" +msgstr "DNS Üzerinden Kaldır" + +msgid "Follow the link above to find a directory and protect it" +msgstr "Bir klasör seçip korumak için yukarıdaki baÄŸlantıyı izleyin" + +msgid "For backwards compatibility" +msgstr "Geriye dönük uyumluluk için" + +msgid "" +"For cases where the large number of domains to process may cause a timeout" +msgstr "Çok sayıda etki alanının iÅŸlenmesi zaman aşımına yol açabilir" + +#, c-format +msgid "For debugging purposes, this file came from: %s" +msgstr "Hata ayıklama için dosyanın konumu: %s" + +msgid "Forgot your Password?" +msgstr "Parolamı Unuttum" + +msgid "Forwarder" +msgstr "E-posta İleticiler" + +#, c-format +msgid "Forwarder %s cannot point to itself" +msgstr "%s ileticisi kendisini gösteremez" + +#, c-format +msgid "Forwarder %s@%s deleted as it had zero recipients remaining." +msgstr "Sıfır alıcısı kaldığından %s@%s ileticisi silindi." + +#, c-format +msgid "Forwarder '%s' already exists." +msgstr "'%s' ileticisi zaten var." + +msgid "Forwarder already exists" +msgstr "İletici zaten var" + +#, c-format +msgid "" +"Forwarder contains a local_part_suffix character: '%s' meaning everything " +"after it will be ignored and the forwarder will never match." +msgstr "" +"İleticide local_part_suffix karakteri bulunuyor: '%s' sonrasındaki her ÅŸeyin " +"yok sayılacağını belirtir ve iletici asla eÅŸleÅŸmez." + +msgid "Forwarder created" +msgstr "İletici eklendi" + +#, c-format +msgid "Forwarder loop found: %s" +msgstr "İletici çevrimi bulundu: %s" + +msgid "Forwarder updated" +msgstr "İletici güncellendi" + +msgid "Forwarders" +msgstr "E-posta İleticiler" + +msgid "Free - randomly selected" +msgstr "Serbest - rastgele seçilmiÅŸ" + +msgid "Free Memory" +msgstr "BoÅŸ Bellek" + +msgid "Free Selected" +msgstr "SeçilmiÅŸleri Serbest Bırak" + +msgid "Free Swap Memory" +msgstr "BoÅŸ Takas BelleÄŸi" + +msgid "From" +msgstr "Kimden" + +msgid "Frontpage Not Installed" +msgstr "FrontPage Kurulmamış" + +msgid "Frontpage changes successful." +msgstr "FrontPage deÄŸiÅŸiklikleri yapıldı." + +msgid "Frontpage is not active on this server" +msgstr "FrontPage bu sunucu üzerinde etkinleÅŸtirilmemiÅŸ" + +msgid "Ftp" +msgstr "FTP" + +msgid "Ftp Accounts" +msgstr "FTP Hesapları" + +msgid "Ftp IPs successfully swapped" +msgstr "FTP IP adresleri güncellendi" + +msgid "Ftp Management" +msgstr "FTP Yönetimi" + +msgid "Ftp account changed" +msgstr "FTP hesabı güncellendi" + +msgid "Ftp settings saved" +msgstr "FTP ayarları kaydedildi" + +msgid "Full Date" +msgstr "Tam Tarih" + +msgid "Full Name has been successfully changed" +msgstr "Tam ad güncellendi" + +#, c-format +msgid "Full format name '%s' does not end with zone name" +msgstr "'%s' tam biçim adı bölge adı ile bitmiyor" + +msgid "GB" +msgstr "GB" + +msgid "GID" +msgstr "GID" + +msgid "Generate Keys" +msgstr "Anahtarları Üret" + +msgid "Get the code from your phone's app, or use a backup scratch code." +msgstr "" +"Telefonunuzdaki uygulamadan kodu alın ya da yedek kodlardan birini kullanın." + +msgid "Global" +msgstr "Genel" + +msgid "Global - randomly selected" +msgstr "Genel - Rastgele seçilmiÅŸ" + +msgid "Global Key" +msgstr "Genel Anahtar" + +msgid "Global Key set" +msgstr "Genel anahtar ayarlandı" + +msgid "Global ssh keys not available to Users" +msgstr "Kullanıcılar genel SSH anahtarlarını kullanamaz" + +#, c-format +msgid "Go to %s" +msgstr "Git: %s" + +#, c-format +msgid "Group %s already exists. Please chose a different username." +msgstr "%s grubu zaten var. BaÅŸka bir kullanıcı adı seçin." + +msgid "Handler" +msgstr "İşleyici" + +msgid "" +"Hello,\n" +"\n" +"This message is to notify you that your account '|USERNAME|' has been " +"suspended.\n" +"Reason: |REASON|\n" +"\n" +"If you feel this has been done in error, please contact your hosting " +"provider for more information\n" +"\n" +"|MSG_FOOTER|\n" +msgstr "" +"Merhaba,\n" +"\n" +"Bu ileti '|USERNAME|' hesabınızın askıya alındığını bildirmek için " +"gönderilmiÅŸtir.\n" +"Askıya alınma nedeni: |REASON|\n" +"\n" +"Bu iÅŸlemin bir hata sonucu yapıldığını düşünüyorsanız, ayrıntılı bilgi almak " +"için web hizmeti saÄŸlayıcınız ile görüşün\n" +"\n" +"|MSG_FOOTER|\n" + +msgid "Hello, this is my autoresponder" +msgstr "Merhaba, bu benim otomatik yanıtlayıcım" + +msgid "Here are the results" +msgstr "Sonuçlar" + +msgid "Here are the results:" +msgstr "Sonuçlar:" + +#. /# %c here denotes newline character +#, c-format +msgid "" +"Hi,%c I am currently on vacation. I will view your message when I get back." +msgstr "Merhaba,%c İş yerimde deÄŸilim ve e-postanıza döndüğümde bakabileceÄŸim." + +msgid "High" +msgstr "Yüksek" + +msgid "Highest" +msgstr "En Yüksek" + +msgid "Hit end-of-file while searching for @ or domain header line in" +msgstr "" +"@ ya da etki alanı üst bilgisi satırı aranırken ÅŸu dosyanın sonuna ulaşıldı" + +msgid "Home Directory" +msgstr "Kök Klasör" + +#, c-format +msgid "Home path '%s' is not in the allowed home_override_list" +msgstr "" +"Kullanıcı giriÅŸ klasörü '%s' izin verilen home_override_list içinde yok" + +msgid "Host:" +msgstr "Sunucu:" + +msgid "Hosts" +msgstr "Sunucu" + +msgid "Hotlink Protection" +msgstr "Sıcak BaÄŸlantı Koruması" + +msgid "Hour" +msgstr "Saat" + +msgid "How to process the request" +msgstr "İstek nasıl iÅŸlenir" + +#, c-format +msgid "" +"However, after %s attempts, they were not able to provide a valid Two-Step " +"Authentication code, so no access was granted." +msgstr "" +"Bununla birlikte, %s giriÅŸimden sonra geçerli bir İki AÅŸamalı Kimlik " +"DoÄŸrulama kodu yazılamadığından eriÅŸim izni verilmedi." + +#, c-format +msgid "" +"However, after %s attempts, they were not able to provide a valid answer for " +"the security questions, so no access was granted." +msgstr "" +"Ancak %s denemeden sonra güvenlik sorularına doÄŸru yanıt verilemediÄŸinden " +"eriÅŸim izni verilmedi." + +msgid "However, subdomains have been found instead. Proceeding with them." +msgstr "" +"Bununla birlikte alt etki alanları bulundu. Alt etki alanları iÅŸleniyor." + +msgid "ID" +msgstr "Kod" + +msgid "ID does not belong to you" +msgstr "Kod hesabınıza ait deÄŸil" + +msgid "ID: 1234 or \"1234-1239\"" +msgstr "Kod: 1234 ya da \"1234-1239\"" + +msgid "IO Read Bandwidth Max" +msgstr "En Fazla GiriÅŸ Çıkış Bant GeniÅŸliÄŸi" + +msgid "IO Write Bandwidth Max" +msgstr "En Fazla Yazma Bant GeniÅŸliÄŸi" + +msgid "IOPS Read Max" +msgstr "En Fazla IOPS Okuma" + +msgid "IOPS Write Max" +msgstr "En Fazla IOPS Yazma" + +msgid "IP" +msgstr "IP Adresi" + +msgid "IP Added" +msgstr "IP adresi eklendi" + +msgid "IP Info" +msgstr "IP Adresi Bilgileri" + +msgid "IP Link Added" +msgstr "IP Adresi BaÄŸlantısı Eklendi" + +msgid "IP Link(s) Removed" +msgstr "IP Adresi BaÄŸlantıları Silindi" + +msgid "IP List is empty" +msgstr "IP adresi listesi boÅŸ" + +msgid "IP Netmask Set" +msgstr "IP AÄŸ Maskesi Ayarlandı" + +msgid "IP Type" +msgstr "IP Adresi Türü" + +#, c-format +msgid "IP in domain config file (%s) is not valid." +msgstr "Etki alanı yapılandırma dosyasındaki (%s) IP adresi geçersiz." + +msgid "IP must be shared or free" +msgstr "IP paylaşılmış ya da serbest olmalıdır" + +msgid "IP will be linked in the background" +msgstr "IP adresi arka planda iliÅŸkilendirilecek" + +msgid "IP(s)" +msgstr "IP Adres(ler)i" + +msgid "IP(s) removed" +msgstr "IP adres(ler)i silindi" + +msgid "IP/User" +msgstr "IP/Kullanıcı" + +msgid "IPs" +msgstr "IP Adres(ler)i" + +msgid "" +"If the username entered is correct, you will receive a confirmation email " +"shortly." +msgstr "" +"Yazdığınız kullanıcı adı doÄŸru ise kısa bir süre sonra bir e-posta " +"alacaksınız." + +#, c-format +msgid "If this continues, consider putting %s in the ip_blacklist file." +msgstr "Bu durum sürerse %s adresini ip_blacklist dosyasına eklemeyi düşünün." + +msgid "If this is not your IP, change your password." +msgstr "Bu adres sizin IP adresiniz deÄŸilse parolanızı deÄŸiÅŸtirin." + +msgid "" +"If you aren't expecting a new license the same license file will be " +"generated." +msgstr "" +"Yeni bir lisans dosyasına gerek olmadığı görülürse kullandığınız lisans " +"dosyasının aynısı üretilecek." + +msgid "" +"If you do not wish to overwrite the current certificate, please disable the " +"auto-renewal" +msgstr "" +"Geçerli sertifikanın üzerine yazılmasını istemiyorsanız, otomatik yenilemeyi " +"devre dışı bırakın" + +msgid "" +"If you proceed, these User accounts, along with ALL the associated website " +"and email contents, which are not listed here, will also be removed." +msgstr "" +"Devam ederseniz bu kullanıcı hesapları ve iliÅŸkili olup da burada " +"görüntülenmeyen TÜM web sitesi ve e-posta içerikleri de silinir." + +msgid "" +"If you set it to 0, no basic httpd request will work. You wont even be able " +"to login." +msgstr "" +"0 olarak ayarlarsanız temel httpd istekleri karşılanmaz. Oturum açamazsınız." + +msgid "Image filenames only have 1 dot" +msgstr "Görsel dosya adlarında yalnız 1 nokta bulunabilir" + +msgid "Imap" +msgstr "IMAP" + +msgid "Imap Folders" +msgstr "IMAP Klasörleri" + +msgid "In what city did you meet your spouse/significant other?" +msgstr "EÅŸiniz ya da kıymetliniz ile hangi ÅŸehirde tanıştınız?" + +msgid "In what city does your nearest sibling live?" +msgstr "En yakın kardeÅŸiniz hangi ÅŸehirde yaşıyor?" + +msgid "In what city or town did your mother and father meet?" +msgstr "Anne ve babanız hangi ÅŸehirde tanışmış?" + +msgid "In what city or town was your first job?" +msgstr "İlk iÅŸe baÅŸladığınız il ya da ilçe hangisiydi?" + +msgid "Inactive" +msgstr "Etkin deÄŸil" + +msgid "Inbox" +msgstr "Gelen Kutusu" + +msgid "Include Domains" +msgstr "Katılacak Etki Alanları" + +msgid "Include your license information" +msgstr "Lisans bilgilerinizi ekleyin" + +msgid "Info" +msgstr "Bilgiler" + +msgid "Info for admins" +msgstr "Yöneticiler için bilgiler" + +msgid "Inherit" +msgstr "Devral" + +msgid "Inodes" +msgstr "Inode Sayısı" + +msgid "Install Serverwide" +msgstr "Tüm Sunucu İçin Kur" + +msgid "Installed" +msgstr "KurulmuÅŸ" + +msgid "Installed Perl Modules" +msgstr "Kurulu Perl Modülleri" + +msgid "Interface is a loopback interface." +msgstr "Arayüz bir loopback arayüzüdür." + +msgid "Interface is a point-to-point link." +msgstr "Arayüz, noktadan noktaya bir baÄŸlantıdır." + +msgid "Interface is in promiscuous mode." +msgstr "Arayüz rastgele modda." + +msgid "Interface is running." +msgstr "Arayüz çalışıyor." + +msgid "Internal debugging flag." +msgstr "Dahili hata ayıklama bayrağı." + +msgid "Invalid " +msgstr "Geçersiz " + +#, c-format +msgid "Invalid '%s'" +msgstr "'%s' geçersiz" + +msgid "Invalid CC email address" +msgstr "Kopya adresi geçersiz" + +msgid "" +"Invalid Characters in the skin name. Only use a-zA-Z0-9._-[] Must not start " +"with '.'" +msgstr "" +"Tema adında geçersiz karakterler var. Yalnız a-zA-Z0-9._-[] karakterlerini " +"kullanın. Ad bir '.' ile baÅŸlayamaz" + +msgid "Invalid Cron ID" +msgstr "Zamanlanmış Görev Kodu Geçersiz" + +msgid "Invalid DNS name" +msgstr "DNS adı geçersiz" + +msgid "Invalid DNS value" +msgstr "DNS deÄŸeri geçersiz" + +msgid "Invalid Domain" +msgstr "Etki Alanı Geçersiz" + +msgid "Invalid Domain Name" +msgstr "Etki Alanı Adı Geçersiz" + +msgid "Invalid E-Mail" +msgstr "E-posta Adresi Geçersiz" + +msgid "Invalid E-Mail User" +msgstr "E-posta Kullanıcısı Geçersiz" + +msgid "" +"Invalid E-Mail address. Multiple and DirectAdmin login username, or blank " +"also allowed" +msgstr "" +"E-posta adresi geçersiz. Multiple ve DirectAdmin kullanıcı adı ya da boÅŸ " +"olabilir" + +msgid "Invalid Email" +msgstr "E-posta Adresi Geçersiz" + +msgid "Invalid Email Name" +msgstr "E-posta Adı Geçersiz" + +msgid "Invalid Email limit" +msgstr "E-posta sınırı geçersiz" + +msgid "Invalid FTP account" +msgstr "FTP hesabı geçersiz" + +msgid "Invalid IP (1.2.3.4) or IP range (1.2.3.4-5)" +msgstr "IP adresi (1.2.3.4) ya da IP adresi aralığı (1.2.3.4-5) geçersiz" + +msgid "Invalid IP/Domain for the ftp connection" +msgstr "FTP baÄŸlantısı için IP ya da Etki Alanı geçersiz" + +#, c-format +msgid "Invalid Log Rotate Value: %d" +msgstr "Günlük DeÄŸiÅŸtirme DeÄŸeri Geçersiz: %d" + +msgid "Invalid MX value" +msgstr "MX deÄŸeri geçersiz" + +msgid "Invalid Name" +msgstr "Ad Geçersiz" + +msgid "Invalid Netmask" +msgstr "AÄŸ Maskesi Geçersiz" + +msgid "Invalid Password" +msgstr "Parola geçersiz" + +msgid "Invalid RSA comment" +msgstr "RSA açıklaması geçersiz" + +msgid "Invalid RSA id. Use simple characters: a-zA-Z0-9" +msgstr "RSA kodu geçersiz. Temel karakterleri kullanın: a-zA-Z0-9" + +msgid "Invalid RSA key" +msgstr "RSA anahtarı geçersiz" + +msgid "Invalid SecRuleRemoveById value" +msgstr "SecRuleRemoveById deÄŸeri geçersiz" + +#, c-format +msgid "Invalid Session Minutes value: %lld" +msgstr "Oturum süresi dakika deÄŸeri geçersiz: %lld" + +msgid "Invalid Subdomain" +msgstr "Alt Etki Alanı Geçersiz" + +msgid "Invalid Two-Step Auth code" +msgstr "İki AÅŸamalı Kimlik DoÄŸrulaması kodu geçersiz" + +msgid "Invalid URL" +msgstr "Adres geçersiz" + +msgid "Invalid User" +msgstr "Kullanıcı Adı Geçersiz" + +msgid "Invalid User type" +msgstr "Kullanıcı türü geçersiz" + +msgid "Invalid Username" +msgstr "Kullanıcı adı geçersiz" + +msgid "Invalid Username or Password" +msgstr "Kullanıcı Adı ya da Parola geçersiz" + +msgid "Invalid action" +msgstr "İşlem geçersiz" + +#, c-format +msgid "Invalid characters in description. Allowed %s" +msgstr "Açıklamada geçersiz karakterler var. %s karakterleri kullanılabilir" + +msgid "Invalid characters in password" +msgstr "Parolada geçersiz karakterler var" + +msgid "Invalid characters in search" +msgstr "Aramada geçersiz karakterler var" + +msgid "Invalid characters in security answer" +msgstr "Güvenlik sorusu yanıtında geçersiz karakterler var" + +msgid "Invalid characters in security question" +msgstr "Güvenlik sorusunda geçersiz karakterler var" + +msgid "Invalid characters in word" +msgstr "Sözcükte geçersiz karakterler var" + +msgid "Invalid code" +msgstr "Kod geçersiz" + +msgid "Invalid crypted passwd" +msgstr "ÅžifrelenmiÅŸ parola geçersiz" + +msgid "Invalid database name:" +msgstr "Veritabanı adı geçersiz:" + +msgid "Invalid delete_messages_days or delete_tickets_days. Too big. Max = " +msgstr "" +"delete_messages_days ya da delete_tickets_days gün deÄŸeri geçersiz. Çok " +"büyük. En fazla = " + +msgid "" +"Invalid delete_messages_days or delete_tickets_days. Should be 0 or a " +"positive integer." +msgstr "" +"delete_messages_days ya da delete_tickets_days deÄŸeri geçersiz. 0 ya da " +"pozitif bir tamsayı olmalıdır." + +msgid "Invalid dnsprovider" +msgstr "DNS hizmeti saÄŸlayıcısı geçersiz" + +msgid "Invalid domain" +msgstr "Etki alanı geçersiz" + +msgid "Invalid email address" +msgstr "E-posta adresi geçersiz" + +msgid "Invalid email address on file. Contact your webhost." +msgstr "" +"Dosyadaki e-posta adresi geçersiz. Web hizmeti saÄŸlayıcınız ile görüşün." + +msgid "Invalid email user" +msgstr "E-posta kullanıcısı geçersiz" + +msgid "Invalid email username" +msgstr "E-posta kullanıcıa adı geçersiz" + +msgid "Invalid encryption password" +msgstr "Åžifreleme parolası geçersiz" + +msgid "Invalid file extension list" +msgstr "Dosya uzantısı listesi geçersiz" + +msgid "Invalid filename:" +msgstr "Dosya adı geçersiz:" + +msgid "Invalid filter type" +msgstr "Süzgeç türü geçersiz" + +msgid "Invalid fingerprint" +msgstr "Parmak izi geçersiz" + +msgid "Invalid ftp password" +msgstr "FTP parolası geçersiz" + +msgid "Invalid ftp path" +msgstr "FTP klasör yolu geçersiz" + +msgid "Invalid ftp port" +msgstr "FTP kapı numarası geçersiz" + +msgid "Invalid ftp username" +msgstr "FTP kullanıcı adı geçersiz" + +#, c-format +msgid "Invalid key bit length: '%s'" +msgstr "Anahtar bit uzunluÄŸu geçersiz: '%s'" + +#, c-format +msgid "Invalid key option name or value: %s=%s" +msgstr "Anahtar seçeneÄŸi adı ya da deÄŸeri geçersiz: %s=%s" + +#, c-format +msgid "Invalid key type: '%s'" +msgstr "Anahtar türü geçersiz: '%s'" + +#, c-format +msgid "Invalid keysize. Valid values: %s" +msgstr "Anahtar boyutu geçersiz. Geçerli deÄŸerler: %s" + +msgid "Invalid language" +msgstr "Dil geçersiz" + +msgid "Invalid list of allowed domains" +msgstr "İzin verilen etki alanlarının listesi geçersiz" + +msgid "Invalid local path" +msgstr "Yerel klasör geçersiz" + +msgid "Invalid login. Please verify your Username and Password" +msgstr "Oturum açılamadı. Lütfen kullanıcı adı ve parolanızı denetleyin" + +#, c-format +msgid "Invalid master type: %d for '%s'" +msgstr "Ana tür geçersiz: %d, '%s' için" + +msgid "Invalid message days. Should be a positive integer." +msgstr "Bildirim gün deÄŸeri geçersiz. Pozitif bir tamsayı olmalıdır." + +msgid "Invalid message id" +msgstr "İleti kodu geçersiz" + +msgid "Invalid message type. Only request, reply and message are allowed" +msgstr "" +"Destek kaydı türü geçersiz. Yalnız istek, yanıt ve bildirim türleri " +"kullanılabilir" + +#, c-format +msgid "Invalid method: '%s'" +msgstr "Yöntem geçersiz: '%s'" + +msgid "Invalid name or extension" +msgstr "Ad ya da uzantı geçersiz" + +msgid "Invalid netmask type for IP type" +msgstr "IP türü için aÄŸ maskesi türü geçersiz" + +msgid "Invalid new user value" +msgstr "Yeni kullanıcı deÄŸeri geçersiz" + +msgid "Invalid number" +msgstr "Sayı geçersiz" + +msgid "Invalid package name" +msgstr "Paket adı geçersiz" + +msgid "Invalid password (empty)" +msgstr "Parola geçersiz (boÅŸ)" + +msgid "Invalid path" +msgstr "Yol geçersiz" + +msgid "Invalid path append value" +msgstr "Yola eklenecek deÄŸer geçersiz" + +msgid "Invalid path. Must start with /" +msgstr "Yol geçersiz. / ile baÅŸlamalı" + +msgid "Invalid plugin name" +msgstr "Eklenti adı geçersiz" + +msgid "Invalid redirect URL" +msgstr "Yönlendirme adresi geçersiz" + +#, c-format +msgid "Invalid request: '%s'" +msgstr "İstek geçersiz: '%s'" + +msgid "Invalid session timeout or max filesize values" +msgstr "Oturum zaman aşımı süresi ya da en büyük dosya boyutu deÄŸeri geçersiz" + +msgid "Invalid subdomain name" +msgstr "Alt etki alanı adı geçersiz" + +msgid "Invalid ticket days. Should be a positive integer." +msgstr "Destek kaydı gün deÄŸeri geçersiz. Pozitif bir tamsayı olmalıdır." + +#, c-format +msgid "Invalid ticket days. Too big. Max = %s" +msgstr "Destek kaydı gün deÄŸeri geçersiz. Çok büyük. En fazla = %s" + +#, c-format +msgid "Invalid type for '%s': '%s'" +msgstr "'%s' için tür geçersiz: '%s'" + +msgid "Invalid user" +msgstr "Kullanıcı adı geçersiz" + +msgid "Invalid username" +msgstr "Kullanıcı adı geçersiz" + +msgid "Invalid values" +msgstr "DeÄŸerler geçersiz" + +msgid "Invalid widget name" +msgstr "Pano bileÅŸeni adı geçersiz" + +msgid "Is able to select media type via ifmap." +msgstr "İfmap aracılığıyla ortam türünü seçebilir." + +msgid "Issue verifying license" +msgstr "Lisans doÄŸrulanırken sorun çıktı" + +msgid "Issuer" +msgstr "Yayınlayan" + +msgid "It already exists on the following system(s)" +msgstr "Bu bölge ÅŸu sistemler üzerinde zaten var" + +msgid "It has been disabled" +msgstr "Devre dışı bırakılmış" + +msgid "It must be a positive integer." +msgstr "Pozitif bir tamsayı olmalıdır." + +msgid "It must not be an IP" +msgstr "Bir IP adresi olmamalıdır" + +#, c-format +msgid "It's already associated with %s" +msgstr "Zaten %s ile iliÅŸkilendirilmiÅŸ" + +msgid "Items per page" +msgstr "Sayfadaki öge sayısı" + +msgid "Jailed Home" +msgstr "Jailed Klasörü" + +msgid "Jan" +msgstr "Oca" + +msgid "Jul" +msgstr "Tem" + +msgid "Jun" +msgstr "Haz" + +msgctxt "readable size" +msgid "KB" +msgstr "KB" + +msgid "Keep it for future reference." +msgstr "İleride gerekebileceÄŸinden kaydedin." + +msgid "Keep the numbers to a realistic value please." +msgstr "Lütfen mantıklı deÄŸerler yazın." + +msgid "Key" +msgstr "Anahtar" + +msgid "Key Created. Take note of it's value and keep it safe." +msgstr "Anahtar oluÅŸturuldu. Not edip güvenli bir yerde saklayın." + +msgid "Key ID" +msgstr "Anahtar Kodu" + +msgid "" +"Key Modified. If you've modified its value, take note of it and keep it safe." +msgstr "" +"Anahtar güncellendi. DeÄŸerini deÄŸiÅŸtirdiyseniz not edip güvenli bir yerde " +"saklayın." + +msgid "Key Name" +msgstr "Anahtar Adı" + +msgid "Key Name must be simple: a-zA-Z0-9" +msgstr "Anahtar adında basit karakterler bulunmalıdır: a-zA-Z0-9" + +msgid "Key Uses Reset" +msgstr "Anahtar Kullanımları Sıfırlandı" + +msgid "Key already exists via fingerprint matching" +msgstr "Anahtar, parmak izi eÅŸleÅŸmesi ile zaten var" + +msgid "Key contains invalid characters" +msgstr "Anahtarda geçersiz karakterler var" + +msgid "Key is Invalid" +msgstr "Anahtar geçersiz" + +msgid "Key value must differ from your DirectAdmin password" +msgstr "Anahtar deÄŸeri DirectAdmin parolanızdan farklı olmalıdır" + +msgid "Key(s) deleted" +msgstr "Anahtar(lar) silindi" + +msgid "Keys" +msgstr "Anahtarlar" + +msgid "Keys listed below" +msgstr "Anahtarlar aÅŸağıda görülebilir" + +msgid "Kill" +msgstr "Sonlandır" + +msgid "Language" +msgstr "Dil" + +#, c-format +msgid "Language has been changed to %s" +msgstr "Dil %s olarak güncellendi" + +msgid "Language has been successfully changed" +msgstr "Dil güncellendi" + +msgid "Last" +msgstr "Son" + +msgid "Last Accessed" +msgstr "Son EriÅŸilme" + +msgid "Last Changed" +msgstr "Son DeÄŸiÅŸiklik" + +#, c-format +msgid "Last Login IP: %s" +msgstr "Son Oturum Açılan IP Adresi: %s" + +#, c-format +msgid "Last Login: %s" +msgstr "Son Oturum Açma: %s" + +msgid "Last Message" +msgstr "Son Bildirim" + +msgid "Last Modified" +msgstr "Son Düzenlenme" + +msgid "Last Page" +msgstr "Son Sayfa" + +msgid "Last Tally Completion" +msgstr "Son Hesaplama" + +msgid "Leave DNS" +msgstr "DNS Üzerinden Ayrıl" + +#, c-format +msgid "Left user on %s's list" +msgstr "Kullanıcı %s listesinde bırakıldı" + +msgid "Let's Encrypt Certificate Entries" +msgstr "Let's Encrypt Sertifika Kayıtları" + +msgid "Let's Encrypt is not enabled. You cannot use this option." +msgstr "Let's Encrypt etkinleÅŸtirilmemiÅŸ olduÄŸundan bu seçenek kullanılamaz." + +msgid "LetsEncrypt files have been cleared" +msgstr "LetsEncrypt dosyaları temizlendi" + +msgid "LetsEncrypt request successful" +msgstr "LetsEncrypt isteÄŸi tamamlandı" + +msgid "LetsEncrypt request successful for" +msgstr "Åžunun için LetsEncrypt isteÄŸi tamamlandı" + +#, c-format +msgid "License is limited to %d Admins/Resellers, and you currently have %d" +msgstr "Lisans %d Yönetici ya da Bayi ile sınırlı. Åžu anda %d tane var" + +#, c-format +msgid "License is limited to %d accounts, and you currently have %d" +msgstr "Lisans %d hesap ile sınırlı. Åžu anda %d tane var" + +#, c-format +msgid "License is limited to %d domains, and you currently have %d" +msgstr "Lisans %d etki alanı ile sınırlı. Åžu anda %d tane var" + +msgid "License is not valid" +msgstr "Lisans geçersiz" + +msgid "License limits exceeded" +msgstr "Lisans sınırına ulaşıldı" + +msgid "" +"License requires a newer version of DirectAdmin, but auto_update is " +"disabled. Please update your DirectAdmin version." +msgstr "" +"Lisans için daha yeni bir DirectAdmin sürümü gerekli. Ancak auto_update " +"seçeneÄŸi devre dışı bırakılmış. Lütfen DirectAdmin sürümünüzü güncelleyin." + +msgid "" +"License requires a newer version of DirectAdmin, but your OS is end-of-life. " +"Please install a newer OS to continue." +msgstr "" +"Lisans için daha yeni bir DirectAdmin sürümü gerekli. Ancak iÅŸletim " +"sisteminizin kullanım süresi dolmuÅŸ. Lütfen devam etmek için daha yeni bir " +"iÅŸletim sistemi yükleyin." + +msgid "License verified" +msgstr "Lisans doÄŸrulandı" + +msgid "Licensing / Updates" +msgstr "Lisans ve Güncelleme" + +msgid "Limit Notice" +msgstr "Sınır Uyarısı" + +msgid "Limit is not a number" +msgstr "Sınır deÄŸeri bir sayı deÄŸil" + +msgid "Link" +msgstr "BaÄŸlantı" + +msgid "Link in Background" +msgstr "Arka Planda BaÄŸla" + +msgid "Linked IPs" +msgstr "BaÄŸlı IP Adresleri" + +msgid "List" +msgstr "Liste" + +msgid "List Admins" +msgstr "Yönetici Hesapları" + +msgid "List Configurations Saved" +msgstr "E-posta Listesi Yapılandırması Kaydedildi" + +msgid "List Resellers" +msgstr "Bayi Hesapları" + +msgid "List Users" +msgstr "Kullanıcı Hesapları" + +msgid "List of Users is too long" +msgstr "Kullanıcı listesi çok uzun" + +#, c-format +msgid "Listname must be %d characters or less" +msgstr "Liste adında en fazla %d karakter bulunmalıdır" + +msgid "Listname must be all lower case letters" +msgstr "Liste adında yalnız küçük harfler bulunmalıdır" + +msgid "Load Average" +msgstr "Ortalama Yük" + +msgid "Local Data" +msgstr "Yerel Veriler" + +msgid "Local Default" +msgstr "Yerel Varsayılan" + +msgid "Local Mail" +msgstr "Yerel E-posta" + +msgid "Local URL Path" +msgstr "Yerel Adres Yolu" + +msgid "Log" +msgstr "Günlük" + +msgid "Log Entry" +msgstr "Günlük Kaydı" + +msgid "Log Usage" +msgstr "Günlük Kullanımı" + +msgid "Log Viewer" +msgstr "Günlük Görüntüleyici" + +msgid "Login" +msgstr "Oturum Aç" + +msgid "Login Failures" +msgstr "Açılamayan Oturumlar" + +msgid "Login History" +msgstr "Oturum Açma GeçmiÅŸi" + +msgid "Login Keys" +msgstr "Oturum Açma Anahtarları" + +msgid "Login Keys are disabled" +msgstr "Oturum açma anahtarları kullanılmıyor" + +msgid "Login Page" +msgstr "Oturum Açma Sayfası" + +#, c-format +msgid "Login as %s" +msgstr "%s olarak oturum aç" + +msgid "Logout" +msgstr "Oturumu Kapat" + +msgid "Low" +msgstr "Düşük" + +msgctxt "readable size" +msgid "MB" +msgstr "MB" + +msgid "MX Records" +msgstr "MX Kayıtları" + +msgid "MX Template set" +msgstr "MX kalıbı ayarlandı" + +msgid "MX Templates are disabled" +msgstr "MX kalıpları devre dışı bırakıldı" + +msgid "MX priority should be an positive number" +msgstr "MX önceliÄŸi bir pozitif tamsayı olmalıdır" + +msgid "Mail Queue Administration" +msgstr "E-posta Sırası Yönetimi" + +msgid "Mailing List" +msgstr "E-posta Listesi" + +msgid "Mailing Lists" +msgstr "E-posta Listeleri" + +msgid "Main" +msgstr "Ana" + +msgid "Main Domain ..." +msgstr "Ana Etki Alanı ..." + +#, c-format +msgid "Major Error: Error finding home for %s" +msgstr "Büyük Sorun: %s ana klasörü bulunamadı" + +msgid "Make sure 'unit' is running" +msgstr "'unit' iÅŸleminin çalıştığından emin olun" + +msgid "Make sure that the values passed are valid for their type" +msgstr "Aktarılan deÄŸerlerin türlerine uygun olduÄŸundan emin olun" + +msgid "Manage Reseller Packages" +msgstr "Bayi Paketleri" + +msgid "Manage Tickets" +msgstr "Destek Kayıtları Yönetimi" + +msgid "Manage User Backups" +msgstr "Kullanıcı Yedekleme" + +msgid "Manage User Packages" +msgstr "Kullanıcı Paketleri" + +#, c-format +msgid "Manually by %s" +msgstr "%s tarafından el ile" + +msgid "Mar" +msgstr "Mar" + +msgid "Mark as read" +msgstr "OkunmuÅŸ olarak iÅŸaretle" + +msgid "Master of a load balancing bundle." +msgstr "Yük dengeleme Master paket ." + +msgid "Max Tasks that may be created in the unit" +msgstr "Ünitede oluÅŸturulabilecek Maksimum Görevler" + +msgid "Max Usage (Meg)" +msgstr "Sınır (MB)" + +msgid "Max disk read operations per second." +msgstr "Saniyede maksimum disk okuma iÅŸlemi." + +msgid "Max disk write operations per second." +msgstr "Saniyede maksimum disk yazma iÅŸlemi." + +msgid "Max limit User can set per E-Mail" +msgstr "Kullanıcının her e-posta adresi için ayarlayabileceÄŸi en fazla sınır" + +msgid "Max number of uses must be a valid number (no decimals)" +msgstr "En fazla kullanım sayısı geçerli bir sayı olmalıdır (ondalık olamaz)" + +msgid "Max rate data can be read from a disk." +msgstr "Maksimum hız verileri bir diskten okunabilir." + +msgid "Max rate data can be written to a disk." +msgstr "Maksimum oran verileri bir diske yazılabilir." + +msgid "Maximum Usage" +msgstr "En Fazla Kullanım" + +#, c-format +msgid "Maximum number of files listed (%d). Suppressing further output." +msgstr "" +"En fazla sayıda dosya listelendi (%d(. Çıktının devamı görüntülenmiyor." + +#, fuzzy, c-format +#| msgid "The maximum value is %d" +msgid "Maximum value: %s=%s" +msgstr "En büyük deÄŸer %d" + +msgid "May" +msgstr "Mayıs" + +msgid "Medium" +msgstr "Orta" + +msgid "Meg" +msgstr "MB" + +msgid "Memory High" +msgstr "Bellek Yüksek" + +msgid "Memory Usage" +msgstr "Bellek Kullanımı" + +msgid "Message #" +msgstr "Bildirim Kodu" + +msgid "Message Reset" +msgstr "Bildirimleri Sıfırla" + +msgid "Message System" +msgstr "Bildirim Sistemi" + +msgid "Message Type" +msgstr "Bildirim Türü" + +msgid "Message is being sent" +msgstr "Bildirim gönderildi" + +msgid "Message(s) removed" +msgstr "İleti(ler) silindi" + +msgid "Messages Updated" +msgstr "Bildirimler Güncellendi" + +msgid "Mime Types" +msgstr "MIME Türleri" + +msgid "MimeType" +msgstr "MIMETürü" + +msgid "Minute" +msgstr "Dakika" + +msgid "Missing closing bracket in zone line." +msgstr "Bölge satırında köşeli parantez kapatma eksik." + +msgid "Missing open bracket in zone line." +msgstr "Bölge satırında köşeli parantez açma eksik." + +msgid "Missing template" +msgstr "Kalıp eksik" + +msgid "ModSecurity Flags" +msgstr "ModSecurity İşaretleri" + +msgid "ModSecurity Rules" +msgstr "ModSecurity Kuralları" + +msgid "ModSecurity Rules Saved" +msgstr "ModSecurity Kuralları Kaydedildi" + +msgid "ModSecurity Skipped Rules" +msgstr "ModSecurity Atlama Kuralları" + +msgid "ModSecurity is not enabled" +msgstr "ModSecurity etkinleÅŸtirilmemiÅŸ" + +msgid "Modify" +msgstr "Düzenle" + +msgid "Modify Password" +msgstr "Parolayı DeÄŸiÅŸtir" + +msgid "Month" +msgstr "Ay" + +msgid "More Info" +msgstr "DiÄŸer Bilgiler" + +msgid "Morning" +msgstr "Sabah" + +msgid "Mounted on" +msgstr "BaÄŸlantı noktası" + +msgid "Move Clipboard Files here" +msgstr "Panodakileri Buraya Taşı" + +msgid "Move Users between Resellers" +msgstr "Bayiler Arası Kullanıcı Taşıma" + +msgid "Move any existing files to trash?" +msgstr "Var olan dosyalar çöpe atılsın mı?" + +msgid "Move to Trash" +msgstr "Çöpe At" + +msgid "Multi-Server Setup" +msgstr "Çoklu Sunucu Ayarları" + +msgid "" +"Must provide a mime type or handler name and a single extention. eg: \"text/" +"html\" or \"cgi-script\" and \"html\"" +msgstr "" +"Bir MIME türü ya da iÅŸleyici adı ile tek bir uzantı belirtilmelidir. Örnek: " +"\"text/html\" ya da \"cgi-script\" ve \"html\"" + +msgid "Must select more than zero LetsEncrypt entries." +msgstr "En az bir LetsEncrypt kaydı seçmelisiniz." + +#, c-format +msgid "Must use letsencrypt=1 for options. letsencrypt=%d is currently set." +msgstr "" +"Seçenekler için yapılandırma ayarı letsencrypt=1 ÅŸeklinde yapılmalıdır. Åžu " +"anda letsencrypt=%d." + +msgid "MySQL is not enabled on this server" +msgstr "Bu sunucu üzerinde MySQL etkinleÅŸtirilmemiÅŸ" + +msgid "NGINX Unit" +msgstr "NGINX Unit" + +msgid "" +"NOTE: You are using the server IP, so your CA Root Certificate has been " +"saved to" +msgstr "" +"Not: Sunucu IP adresini kullanıyorsunuz. Bu nedenle sertifika ve anahtarınız " +"ÅŸuraya kaydedildi" + +msgid "" +"NOTE: You are using the server IP, so your certificate and key have been " +"saved to" +msgstr "" +"Not: Sunucu IP adresini kullanıyorsunuz. Bu nedenle sertifika ve anahtarınız " +"ÅŸuraya kaydedildi" + +msgid "Name" +msgstr "Ad" + +msgid "Name Server 1" +msgstr "1. Ad Sunucusu" + +msgid "Name Server 2" +msgstr "2. Ad Sunucusu" + +msgid "Name Servers" +msgstr "Ad Sunucuları" + +msgid "Name must only contain letters, spaces and/or periods" +msgstr "Ad için yalnız harf, boÅŸluk ve nokta karakterleri kullanılabilir" + +msgid "Nameserver" +msgstr "Ad Sunucusu" + +msgid "Nameservers deleted" +msgstr "Ad sunucuları silindi" + +msgid "Nameservers have been changed" +msgstr "Ad sunucuları deÄŸiÅŸtirildi" + +msgid "Namesevers have been changed." +msgstr "Ad sunucuları güncellendi." + +msgid "Netmask" +msgstr "AÄŸ Maskesi" + +msgid "Never" +msgstr "Hiçbir Zaman" + +#, c-format +msgid "New License is invalid: %s" +msgstr "Yeni lians geçersiz: %s" + +#, c-format +msgid "New Secret Set: %s" +msgstr "Yeni Güvenlik Takımı: %s" + +msgid "New password isn't different" +msgstr "Yeni parola eskisi ile aynı" + +#, c-format +msgid "Newly installed key is %s-bit" +msgstr "Yeni yüklenen anahtar %s bit" + +msgid "Next Retry" +msgstr "Sonraki Yeniden Deneme" + +msgid "Nginx Template" +msgstr "Nginx Kalıbı" + +msgid "Nginx is not enabled" +msgstr "Nginx etkinleÅŸtirilmemiÅŸ" + +msgid "NginxUnit is not enabled or not running" +msgstr "NginxUnit etkinleÅŸtirilmemiÅŸ ya da çalışmıyor" + +msgid "No" +msgstr "Hayır" + +msgid "No Awstats" +msgstr "Awstats yok" + +msgid "No Data to Show" +msgstr "Görüntülenecek Bir Veri Yok" + +msgid "No IPs selected" +msgstr "Herhangi bir IP adresi seçilmemiÅŸ" + +#, c-format +msgid "No ListFile in container at route position %lld" +msgstr "%lld yöneltme konumundaki kapsayıcıda ListFile yok" + +msgid "No Send class set" +msgstr "Gönderim sınıfı ayarlanmamış" + +msgid "No User Data" +msgstr "Kullanıcı Verileri Yedeklenmesin" + +msgid "No arp protocol, L2 destination address not set." +msgstr "Arp protokolü yok, L2 hedef adresi ayarlanmadı." + +msgid "No changes have been made" +msgstr "Herhangi bir deÄŸiÅŸiklik yapılmadı" + +msgid "No changes were needed. Skipping write." +msgstr "Herhangi bir deÄŸiÅŸiklik yapılmadı. Yazma iÅŸlemi atlanıyor." + +msgid "No colors have been selected" +msgstr "Herhangi bir renk seçilmemiÅŸ" + +#, c-format +msgid "No container at route position %lld" +msgstr "%lld yöneltme konumunda bir kapsayıcı yok" + +msgid "No events for this period." +msgstr "Bu dönem için etkinlik yok." + +msgid "No files have been selected for upload." +msgstr "Yüklenecek bir dosya seçilmemiÅŸ." + +msgid "No free IPs found" +msgstr "Serbest bir IP adresi bulunamadı" + +msgid "No global IPs found" +msgstr "Genel IP adresleri bulunamadı" + +msgid "No keys have been selected" +msgstr "Önce bir anahtar seçmelisiniz" + +msgid "No keys selected" +msgstr "Herhangi bir anahtar seçilmemiÅŸ" + +msgid "No options were selected" +msgstr "Herhangi bir seçim yapılmamış" + +msgid "No passwd entries provided." +msgstr "Herhangi bir passwd giriÅŸi belirtilmemiÅŸ." + +msgid "No paths were provided." +msgstr "Herhangi bir yol belirtilmemiÅŸ." + +msgid "No shared IPs found" +msgstr "Paylaşılmış bir IP adresi bulunamadı" + +msgid "No such username in the request list. Your request may have expired." +msgstr "" +"İstek listesinde böyle bir kullanıcı adı yok. İsteÄŸinizin süresi geçmiÅŸ " +"olabilir." + +msgid "No such username in the request list. Your request may have expired." +msgstr "" +"İstek listesinde böyle bir kullanıcı adı yok. İsteÄŸinizin süresi geçmiÅŸ " +"olabilir." + +msgid "No text provided" +msgstr "Herhangi bir metin yazılmamış" + +msgid "No vacation message set" +msgstr "Henüz bir tatil bildirimi ayarlanmamış" + +msgid "Not a valid IP Address" +msgstr "IP Adresi Geçersiz" + +#, c-format +msgid "" +"Not enough IP's to create nameservers. It requires at least %d free, un-" +"assigned ips." +msgstr "" +"Ad sunucuları oluÅŸturmak için yeterli IP adresi yok. Serbest ve atanmamış en " +"az %d IP adresi bulunmalıdır." + +msgid "Not setting up Mail SNI." +msgstr "Mail SNI kurulamadı." + +msgid "Not yet generated" +msgstr "Henüz üretilmemiÅŸ" + +msgid "Not yet signed" +msgstr "Henüz imzalanmamış" + +#, c-format +msgid "" +"Note: the previous Let's Encrypt config is still set to renew in %d days." +msgstr "" +"Not: Önceki Let's Encrypt yapılandırması hala %d gün sonra yenilenecek " +"ÅŸekilde ayarlı." + +msgid "Nothing" +msgstr "Hiçbir ÅŸey" + +#, c-format +msgid "Notification that Login Key %s has been successfully created by %s" +msgstr "%s oturum anahtarının %s tarafından oluÅŸturulduÄŸu ile ilgili bildirim" + +msgid "Notified" +msgstr "Bildirildi" + +msgid "Nov" +msgstr "Kas" + +msgid "Null values" +msgstr "Null deÄŸerleri" + +#, c-format +msgid "Number %s=%s is out of range (required: %d-%d)" +msgstr "%s sayısı=%s aralık dışında (Olması gereken: %d-%d)" + +msgid "Number of Users" +msgstr "Kullanıcı Sayısı" + +msgid "OK" +msgstr "Tamam" + +msgid "Oct" +msgstr "Eki" + +msgid "Off" +msgstr "Kapalı" + +#, c-format +msgid "Old %s-bit key has been backed up to %s" +msgstr "Eski %s bit anahtarı %s üzerine yedeklendi" + +msgid "Old password incorrect" +msgstr "Eski parola geçersiz" + +msgid "Older than" +msgstr "Åžundan Eski" + +msgid "On" +msgstr "Açık" + +msgid "One (or more) of the selected IPs are not currently in your list" +msgstr "SeçilmiÅŸ IP adreslerinden biri (ya da birkaçı) ÅŸu anda listenizde yok" + +#, c-format +msgid "" +"One-Click login requires does not support webmail_link=%s. Try " +"webmail_link=roundcube." +msgstr "" +"Tek tıklama ile oturum açma özelliÄŸi webmail_link=%s için desteklenmez. " +"webmail_link=roundcube olarak deneyin." + +msgid "One-Time Login URL Created" +msgstr "Tek Kullanımlık Oturum Açma Adresi OluÅŸturuldu" + +#, c-format +msgid "Only %d of the requested %d global IPs were assigned." +msgstr "İstenilen genel IP adreslerinin yalnız %d / %d kadarı atandı." + +msgid "Only 'Additional' IPs can be removed from a User using this method" +msgstr "" +"Bu yöntem kullanılarak bir kullanıcıdan yalnız 'Ek' IP adresleri " +"kaldırılabilir" + +msgid "Only Admin accounts can save settings" +msgstr "Ayarları yalnız yönetici hesapları kaydedebilir" + +msgid "Only Admins can reset the usage count" +msgstr "Kullanım sayısını yalnız Yöneticiler sıfırlayabilir" + +msgid "Only Admins may run this request" +msgstr "Bu isteÄŸi yalnız yönetici hesapları yapabilir" + +msgid "" +"Only provide one extension at a time. eg: \"jpg\" and NOT \"jpg jpeg jpe\"" +msgstr "" +"Bir kerede yalnız bir uzantı belirtin. Örnek: \"jpg\", \"jpg jpeg jpe\" DEĞİL" + +msgid "Only the location of the route can be renamed" +msgstr "Yalnız yöneltmenin konumu yeniden adlandırılabilir" + +msgid "Only use wildcard on domains who currently have functional local DNS" +msgstr "" +"Yalnızca ÅŸu anda iÅŸlevsel yerel DNS'ye sahip olan alanlarda joker (wildcard) " +"karakter kullanın" + +msgid "Open" +msgstr "Aç" + +msgid "Open Basedir disabled on selected domains" +msgstr "SeçilmiÅŸ etki alanları için Open Basedir özelliÄŸi devre dışı bırakıldı" + +msgid "Open Basedir enabled on selected domains" +msgstr "SeçilmiÅŸ etki alanları için Open Basedir özelliÄŸi etkinleÅŸtirildi" + +msgid "Open+Confirm" +msgstr "Açık ve Onay" + +msgid "Operation" +msgstr "İşlem" + +msgid "Optimize" +msgstr "İyileÅŸtir" + +#, c-format +msgid "Option '%s' has already been set" +msgstr "'%s' seçeneÄŸi zaten ayarlanmış" + +msgid "Options" +msgstr "Ayarlar" + +msgid "Options changed successfully" +msgstr "Ayarlar güncellendi" + +msgid "Order" +msgstr "Sıralama" + +msgid "Order (when the first sort values are equal)" +msgstr "Sıralama (ilk sıralama deÄŸerleri eÅŸit olduÄŸunda)" + +msgid "Original Package" +msgstr "Özgün Paket" + +msgid "Other" +msgstr "DiÄŸer" + +msgid "Other Disk Usage" +msgstr "DiÄŸer Disk Kullanımı" + +msgid "Other Usage" +msgstr "DiÄŸer Kullanım" + +msgid "Outlook Settings" +msgstr "Outlook Ayarları" + +msgid "Overview" +msgstr "Özet" + +msgid "Owner" +msgstr "Sahibi" + +#, c-format +msgid "Owner of global IP swapped to Admin %s" +msgstr "Genel IP adresinin sahibi %s yönetici hesabı olarak güncellendi" + +msgid "PHP" +msgstr "PHP" + +msgid "PHP Configuration" +msgstr "PHP Yapılandırması" + +msgid "PHP Script Name" +msgstr "PHP BetiÄŸi Adı" + +msgid "PHP Version Selector" +msgstr "PHP Sürümü Seçici" + +msgid "PHP versions saved" +msgstr "PHP sürümleri kaydedildi" + +msgid "PID" +msgstr "Hizmet Kodu (PID)" + +#, c-format +msgid "PID '%s' is not a number" +msgstr "'%s' hizmet kodu bir sayı deÄŸil" + +msgid "POP Email Accounts" +msgstr "POP E-posta Hesapları" + +msgid "POP/IMAP Server" +msgstr "POP/IMAP Sunucu" + +msgid "Package" +msgstr "Paket" + +#, c-format +msgid "Package '%s' already exists" +msgstr "'%s' paketi zaten var" + +#, c-format +msgid "Package '%s' does not exist" +msgstr "'%s' paketi bulunamadı" + +#, c-format +msgid "Package '%s' is not in your list" +msgstr "'%s' paketi listenizde yok" + +msgid "Package not found" +msgstr "Paket bulunamadı" + +msgid "Page" +msgstr "Sayfa" + +#, c-format +msgid "Parent directory %s was created." +msgstr "%s üst klasörü eklendi." + +msgid "Parsing Error. Check logs" +msgstr "İşlem sırasında sorun çıktı. Günlük kayıtlarına bakın" + +msgid "Password" +msgstr "Parola" + +msgid "Password Changed" +msgstr "Parola güncellendi" + +#, c-format +msgid "Password Changed: %s" +msgstr "Parola Güncellendi: %s" + +msgid "Password Not Changed" +msgstr "Parola Güncellenmedi" + +msgid "Password Protected Directories" +msgstr "Parola Korumalı Klasörler" + +msgid "Password Saved!" +msgstr "Parola Kaydedildi!" + +msgid "Password cannot contain single quotes" +msgstr "Parolada tek tırnak karakteri bulunamaz" + +msgid "Password is not valid" +msgstr "Parola geçersiz" + +msgid "Password is too long" +msgstr "Parola çok uzun" + +msgid "Password is too long for the database" +msgstr "Veritabanı parolası çok uzun" + +msgid "Password is too short" +msgstr "Parola çok kısa" + +#, c-format +msgid "Password is too short (%d). Use at least %d characters" +msgstr "Parola çok kısa (%d). En az %d karakter uzunluÄŸunda olmalıdır" + +#, c-format +msgid "Password must be more than %d characters" +msgstr "Parola en az %d karakter uzunluÄŸunda olmalıdır" + +msgid "Password/Quota" +msgstr "Parola/Kota" + +msgid "Password:" +msgstr "Parola:" + +msgid "Passwords do not match" +msgstr "Parola ile onayı aynı deÄŸil" + +msgid "Passwords do not match or are invalid" +msgstr "Parola ve onayı aynı deÄŸil ya da geçersiz" + +msgid "Path" +msgstr "Klasör" + +#, c-format +msgid "Path %s does not exist or is not accessible by the %s user." +msgstr "%s yolu bulunamadı ya da %s kullanıcısı tarafından eriÅŸilemiyor." + +#, c-format +msgid "" +"Path '%s' already exists before User creation. Please remove/rename this " +"path first." +msgstr "" +"Kullanıcı eklenmeden önce '%s' yolu zaten vardı. Lütfen önce bu yolu silin " +"ya da yeniden adlandırın." + +msgid "Path does not exist" +msgstr "Yol bulunamadı" + +#, c-format +msgid "Path must start with '%s'" +msgstr "Yol '%s' ile baÅŸlamalı" + +msgid "Path must start with a forward slash (/)" +msgstr "Yol bir bölü (/) karakteri ile baÅŸlamalıdır" + +msgid "Paths Unblocked" +msgstr "Yolların engellemesi kaldırıldı" + +msgid "Paths must be within your home directory" +msgstr "Yollar kök klasörünüzün içinde olmalıdır" + +msgid "Percent" +msgstr "Yüzde" + +#, no-c-format +msgid "Percent must end with a % character" +msgstr "Yüzde deÄŸerler, % c karakteri ile bitmelidir" + +#, c-format +msgid "Percent of CPU Core. >100% for more cores." +msgstr "CPU ÇekirdeÄŸi Yüzdesi. >100% f veya daha fazla çekirdek." + +#, c-format +msgid "Percentage must be between %d and %d, inclusive" +msgstr "Yüzde deÄŸeri %d ile %d arasında olmalıdır, dahil olarak" + +msgid "Perl Modules" +msgstr "Perl Modülleri" + +msgid "Perm." +msgstr "İzinler" + +msgid "Permissions set" +msgstr "İzinler ayarlandı" + +msgid "Php Settings" +msgstr "PHP Ayarları" + +msgid "Php is not enabled" +msgstr "PHP etkinleÅŸtirilmemiÅŸ" + +msgid "Please answer this Security Question" +msgstr "Lütfen ÅŸu güvenlik sorusunu yanıtlayın" + +#, c-format +msgid "" +"Please check the zone for %s to ensure the nameserver A records are correct." +msgstr "" +"Lütfen ad sunucu A kayıtlarının doÄŸru olduÄŸundan emin olmak için %s " +"bölgesini denetleyin." + +msgid "Please confirm you wish to delete your DNSSEC data" +msgstr "Lütfen DNSSEC verilerini silmek istediÄŸinizi onaylayın" + +#, c-format +msgid "Please contact %s for more info." +msgstr "Ayrıntılı bilgi almak için %s ile görüşün." + +msgid "Please enter your Username and Password" +msgstr "Lütfen Kullanıcı Adı ve Parolanızı yazın" + +msgid "Please generate a secret before adding the scratch codes" +msgstr "Lütfen yedek kodları eklemeden önce bir parola üretin" + +msgid "Please pick only one skin to apply" +msgstr "Lütfen uygulanması için yalnız bir tema seçin" + +#, c-format +msgid "Please provide an '%s'" +msgstr "Lütfen bir '%s' belirtin" + +msgid "Please redirect accordingly" +msgstr "Lütfen buna uygun olarak yönlendirin" + +#, c-format +msgid "Please see this URL and check for curl exit code '(%d)': %s" +msgstr "Lütfen bu adrese bakın ve curl çıkış kodunu denetleyin '(%d)': %s" + +msgid "Please select 1 Security Question" +msgstr "Lütfen bir güvenlik sorusu seçin" + +msgid "Please select 1 domain to be your default domain" +msgstr "" +"Lütfen varsayılan etki alanı olarak ayarlanması için yalnız 1 etki alanı " +"seçin" + +msgid "Please select at least one User" +msgstr "Lütfen en az bir kullanıcı seçin" + +msgid "Please select at least one domains" +msgstr "Lütfen en az bir etki alanı seçin" + +msgid "Please select at least one file" +msgstr "Lütfen en az bir dosya seçin" + +msgid "Please select at least one item" +msgstr "Lütfen en az bir öge seçin" + +msgid "Please select at least one package" +msgstr "Lütfen en az bir paket seçin" + +msgid "Please select at least one widget" +msgstr "Lütfen en az bir pano bileÅŸeni seçin" + +msgid "Please select more than zero files to extract from the archive" +msgstr "Lütfen arÅŸivden ayıklanması için sıfırdan fazla dosya seçin" + +msgid "Please select one or more Databases" +msgstr "Lütfen bir ya da birkaç veritabanı seçin" + +msgid "Please select only 1 cronjob to edit" +msgstr "Lütfen düzenlemek için yalnız 1 zamanlanmış görev seçin" + +#, c-format +msgid "Please set a limit between 1 and %d" +msgstr "Lütfen 1 ile %d arasında bir deÄŸer yazın" + +msgid "Please specify 'who' to get" +msgstr "Lütfen 'kimin' alınacağını belirtin" + +msgid "Please specify add or delete" +msgstr "Lütfen ekleme ya da silme iÅŸlemini seçin" + +#, c-format +msgid "Please unlink all IPs from '%s' prior to deleting it." +msgstr "" +"Lütfen silmeden önce '%s' üzerindeki tüm IP adreslerini serbest bırakın." + +msgid "Please use all lower case characters in the username" +msgstr "Lütfen kullanıcı adında yalnız küçük harfler kullanın" + +msgid "Plugin Manager" +msgstr "Eklentiler" + +msgid "Plugin Uploaded" +msgstr "Eklenti Yüklendi" + +msgid "Plugin(s) Installed" +msgstr "Eklenti(ler) Kuruldu" + +msgid "Plugin(s) Un-Installed" +msgstr "Eklenti(ler) Kaldırıldı" + +msgid "Plugin(s) Updated" +msgstr "Eklenti(ler) Güncellendi" + +msgid "Plugins" +msgstr "Eklentiler" + +#, c-format +msgid "Pointer '%s' does not belong to you." +msgstr "'%s' yönlendiricisi hesabınıza ait deÄŸil." + +msgid "Pop" +msgstr "POP" + +msgid "Post Scripts" +msgstr "Art İşleme Betikleri" + +msgid "Post scripts" +msgstr "Yedekleme sonrası iÅŸlemleri yapılıyor" + +msgid "Pre-backup hard-link check" +msgstr "Yedekleme öncesi hard linkler denetleniyor" + +msgid "Preparing 'domains' data" +msgstr "'domains' klasöründeki veriler hazırlanıyor" + +msgid "Preparing data (no 'domains')" +msgstr "Veriler hazırlanıyor ('domains' klasörü dışındakiler)" + +msgid "Present" +msgstr "Var Olan" + +msgid "" +"Preserving the web data only applies to /domains/domain.com. Other areas " +"like E-Mail data will not be preserved." +msgstr "" +"Web verileri korunduÄŸunda yalnız /domains/etkialani.com klasörü korunur. E-" +"posta verileri gibi diÄŸer alanlar korunmaz." + +msgid "Print" +msgstr "Yazdır" + +msgid "Priority" +msgstr "Öncelik" + +msgid "Private Directory" +msgstr "Özel Klasör" + +msgid "Privileges" +msgstr "İzinler" + +#, c-format +msgid "Process ID %d is not 'dataskq'. It's '%s'" +msgstr "%d hizmet kodu Process 'dataskq' deÄŸil, '%s'" + +msgid "Process Monitor" +msgstr "İşlem İzleyici" + +msgid "Process is running" +msgstr "İşlem çalışıyor" + +msgid "Process is stopped" +msgstr "İşlem durmuÅŸ" + +msgid "Processor Name" +msgstr "İşlemci Adı" + +msgid "Processor Speed (MHz)" +msgstr "İşlemci Hızı (MHz)" + +msgid "Progress" +msgstr "İşlem" + +msgid "Protect" +msgstr "Koru" + +msgid "Protected directory name contains invalid characters. Keep it simple" +msgstr "" +"Korunan klasörün adında geçersiz karakterler var. Basit bir ad kullanın" + +msgid "" +"Protecting directories has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Klasörleri koruma özelliÄŸi filemanager_disable_features seçeneÄŸi ile devre " +"dışı bırakılmış" + +msgid "Provide either an IP, an IP range, domain, or wildcard domain." +msgstr "" +"Bir IP adresi, bir IP adresi aralığı, etki alanı ya da etki alanı maskesi " +"belirtin." + +msgid "Provided password is not correct." +msgstr "Belirtilen parola hatalı." + +msgid "Provided value is not a Username or Email address" +msgstr "Belirtilen deÄŸer bir Kullanıcı Adı ya da E-posta Adresi deÄŸil" + +msgid "Provided value is not valid." +msgstr "Belirtilen deÄŸer geçersiz." + +msgid "Proxy socket address" +msgstr "Vekil sunucu soketi adresi" + +msgid "Publish" +msgstr "Yayınla" + +msgid "Purge" +msgstr "BoÅŸalt" + +msgid "Purge Archives" +msgstr "ArÅŸivleri Sil" + +msgid "Purge From" +msgstr "Åžurayı BoÅŸalt" + +#, c-format +msgid "Purge in %s" +msgstr "%s içinde boÅŸalt" + +msgid "Ranges must be put in \"quotes\"" +msgstr "Aralıklar \"tırnak\" içinde yazılmalıdır" + +msgid "Re-sign your zone." +msgstr "Bölgenizi yeniden imzalayın." + +#, c-format +msgid "Read error with %s: %s" +msgstr "%s okunurken sorun çıktı: %s" + +msgid "Reason:" +msgstr "Nedeni:" + +msgid "Reboot" +msgstr "Yeniden BaÅŸlat" + +msgid "Receive all multicast packets." +msgstr "Tüm multicast yayın paketlerini alın." + +msgid "Received" +msgstr "Alınan" + +msgid "Received Emails" +msgstr "Alınan E-posta" + +msgid "Reconfiguration Error" +msgstr "Yeniden Yapılandırma Sorunu" + +msgid "Record Added" +msgstr "Kayıt Eklendi" + +msgid "Record Edited" +msgstr "Kayıt Düzenlendi" + +msgid "Records Deleted" +msgstr "Kayıtlar Silindi" + +msgid "Recursive" +msgstr "Alt Ögelere Uygulansın" + +#, c-format +msgid "Recursive search at max depth on %s" +msgstr "En fazla alt öge araması düzeyi %s" + +msgid "Recursively" +msgstr "Alt Ögelere Uygulansın" + +msgid "" +"Recursively resetting ownership has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"SahipliÄŸi aÅŸağıya doÄŸru sıfırlama özelliÄŸi filemanager_disable_features " +"seçeneÄŸi ile devre dışı bırakılmış" + +msgid "Redirect Added" +msgstr "Yönlendirme Eklendi" + +msgid "Redirect URL" +msgstr "Yönlendirilecek Adres" + +msgid "Redirect(s) deleted" +msgstr "Yönlendirme(ler) silindi" + +msgid "Refresh" +msgstr "Yenile" + +msgid "Related" +msgstr "İlgili" + +msgid "Reload" +msgstr "Yenile" + +msgid "Reload requested" +msgstr "Yenileme isteÄŸi yapıldı" + +msgid "Remote Mail" +msgstr "Uzak E-posta" + +msgid "Remove" +msgstr "Sil" + +msgid "Remove DNS records for IP(s)" +msgstr "IP adres(ler)inin DNS kayıtlarını sil" + +msgid "Remove DNSSEC" +msgstr "DNSSEC Sil" + +msgid "Remove Directory Contents" +msgstr "Klasör İçeriÄŸi Silinsin" + +msgid "Remove From Skip List" +msgstr "Engellenmeyecekler Listesinden Çıkar" + +msgid "Remove from reseller" +msgstr "Bayiden kaldır" + +#, c-format +msgid "Removed user from %s's list" +msgstr "Kullanıcı %s listesinden kaldırıldı" + +msgid "Rename" +msgstr "Yeniden Adlandır" + +msgid "Rename Domain" +msgstr "Etki Alanını Yeniden Adlandır" + +msgid "" +"Renaming files has been disabled with the filemanager_disable_features option" +msgstr "" +"Dosyaları yeniden adlandırma özelliÄŸi filemanager_disable_features seçeneÄŸi " +"ile devre dışı bırakılmış" + +msgid "Repair" +msgstr "Onar" + +msgid "Replies" +msgstr "Yanıt" + +msgid "Reply" +msgstr "Yanıtla" + +msgid "Reply Sent" +msgstr "Yanıt Gönderildi" + +msgid "Report of false password reset request" +msgstr "Hatalı parola sıfırlama isteÄŸi bildirimi" + +msgid "Report sent to the server admins" +msgstr "Sunucu yöneticilerine bildirim gönderildi" + +msgid "Request added to task.queue" +msgstr "İstek task.queue dosyasına eklendi" + +#, c-format +msgid "Request: %s" +msgstr "İstek: %s" + +#, c-format +msgid "Requested LetsEncrypt value of '%s' is not an allowed value." +msgstr "'%s' için istenilen LetsEncrypt deÄŸerine izin verilmiyor." + +#, c-format +msgid "Requested filesize (%lld) exceeds the maxfilesize value (%lld)" +msgstr "" +"İstenilen dosya boyutu (%lld) en büyük dosya boyutu deÄŸerinden büyük (%lld)" + +#, c-format +msgid "Required: '%s' or '%s'" +msgstr "Gerekli: '%s' veya '%s'" + +msgid "Reseller" +msgstr "Bayi" + +msgid "Reseller Bandwidth" +msgstr "Bayi Bant GeniÅŸliÄŸi" + +msgid "Reseller History" +msgstr "Bayi GeçmiÅŸi" + +msgid "Reseller IP Management" +msgstr "Bayi IP Adresleri" + +msgid "Reseller Plugins" +msgstr "Bayi Eklentileri" + +msgid "Reseller Quota" +msgstr "Bayi Kotası" + +msgid "Reseller Resource Limits" +msgstr "Bayi Kaynak Sınırları" + +msgid "Reseller Statistics" +msgstr "Bayi İstatistikleri" + +msgid "Reseller created" +msgstr "Bayi eklendi" + +msgid "Reseller deleted" +msgstr "Bayi silindi" + +msgid "Reseller is assigned zero IP's. Cannot create a domain without an ip." +msgstr "" +"Bayiye bir IP adresi atanmamış. Bir IP adresi olmadan bir etki alanı " +"eklenemez." + +#, c-format +msgid "Reseller only got %s of their %s ip." +msgid_plural "Reseller only got %s of their %s ips." +msgstr[0] "Bayinin yalnız %s/%s IP adresi var." +msgstr[1] "Bayinin yalnız %s/%s IP adresi var." + +msgid "Reseller's IP" +msgstr "Bayinin IP'si" + +msgid "Reseller::add_widgets_to_acccounts: Invalid widget level" +msgstr "Bayi::add_widgets_to_acccounts: Pano bileÅŸeni düzeyi geçersiz" + +msgid "Reseller::delete_widgets_from_accounts: Invalid widget level" +msgstr "Bayi::delete_widgets_from_accounts: Pano bileÅŸeni düzeyi geçersiz" + +msgid "Reset" +msgstr "Sıfırla" + +msgid "Reset Owner" +msgstr "Sahibini Sıfırla" + +msgid "Reset Ownership" +msgstr "SahipliÄŸi Sıfırla" + +msgid "Reset Today" +msgstr "Bugünü Sıfırla" + +msgid "Reset Uses" +msgstr "Kullanımları Sıfırla" + +msgid "" +"Resetting file ownership has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Dosya sahipliÄŸini sıfırlama özelliÄŸi filemanager_disable_features seçeneÄŸi " +"ile devre dışı bırakılmış" + +msgid "Resources allocated." +msgstr "Ayrılan kaynaklar." + +msgid "Restart" +msgstr "Yeniden BaÅŸlat" + +msgid "Restore" +msgstr "Geri Yükle" + +msgid "Restore Complete!" +msgstr "Geri Yükleme Tamamlandı!" + +#, c-format +msgid "Restore Error with Nginx Unit: %s" +msgstr "Nginx Unit geri yükleme sorunu: %s" + +#, c-format +msgid "" +"Restore of account '%s' to creator '%s' has been denied, as this account " +"already exists under the control of creator '%s'" +msgstr "" +"'%s' hesabı zaten '%s' oluÅŸturucusu altında bulunduÄŸundan, '%s' " +"oluÅŸturucusuna geri yüklenemedi" + +msgid "Restore will run in the background" +msgstr "Geri yükleme iÅŸlemi arka planda yapılacak" + +msgid "Restores added to Queue" +msgstr "Geri yükleme iÅŸlemi sıraya alındı" + +msgid "Restoring Databases" +msgstr "Veritabanları geri yükleniyor" + +msgid "Restoring Domains Data" +msgstr "Etki alanı verileri geri yükleniyor" + +msgid "Restoring E-Mail Data" +msgstr "E-posta verileri geri yükleniyor" + +msgid "Restoring E-Mail Settings" +msgstr "E-posta ayarları geri yükleniyor" + +msgid "Restoring Extra Admin Data" +msgstr "Ek yönetici verileri geri yükleniyor" + +msgid "Restoring Extra Reseller Data" +msgstr "Ek bayi verileri geri yükleniyor" + +msgid "Restoring Extra User Data" +msgstr "Ek kullanıcı verileri geri yükleniyor" + +msgid "Restoring FTP" +msgstr "FTP geri yükleniyor" + +msgid "Restoring extra E-Mail items" +msgstr "Ek e-posta ögeleri geri yükleniyor" + +msgid "" +"Restoring files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Dosyaları geri yükleme özelliÄŸi filemanager_disable_features seçeneÄŸi ile " +"devre dışı bırakılmış" + +msgid "Result" +msgstr "Sonuç" + +msgid "Result of file copy" +msgstr "Dosya kopyalama sonucu" + +msgid "Result of file move" +msgstr "Dosya taşıma sonucu" + +msgid "Results" +msgstr "Sonuçlar" + +msgid "Retries" +msgstr "Denemeler" + +msgid "Retry" +msgstr "Yeniden dene" + +#, c-format +msgid "Return code 3XX(%d) requires a location" +msgstr "3XX geri dönüş kodu (%d) için bir konum gereklidir" + +#, c-format +msgid "Return code: %s" +msgstr "Geri dönen kod: %s" + +msgid "Return with httpd code" +msgstr "httpd kodu ile geri dönüş" + +msgid "" +"Revoking all privileges would delete the User from the mysql.db. Please " +"grant at least 1 privilege." +msgstr "" +"Tüm izinlerin geri alınması Kullanıcıyı mysql.db üzerinden silecek. Lütfen " +"en az bir izin verin." + +msgid "Rewrite Apache" +msgstr "Apache Yeniden Yazılsın" + +msgid "RoundCube missing direct_login option. Please re-install RoundCube." +msgstr "" +"RoundCube direct_login seçeneÄŸi eksik. Lütfen RoundCube uygulamasını yeniden " +"kurun." + +#, c-format +msgid "Route '%s' does not end with '%s'" +msgstr "'%s' yöneltmesi '%s' ile bitmiyor" + +msgid "Rules Reset" +msgstr "Kuralları Sıfırla" + +msgid "Run Now" +msgstr "Çalıştır" + +msgid "Running" +msgstr "Çalışıyor" + +msgid "SMTP Log" +msgstr "SMTP Günlüğü" + +msgid "SMTP Server" +msgstr "SMTP Sunucu" + +msgid "SNI Host" +msgstr "SNI Sunucu" + +msgid "SNI is disabled for this domain" +msgstr "Bu etki alanı için SNI devre dışı bırakılmış" + +msgid "SSH Key Modified" +msgstr "SSH Anahtarı Güncellendi" + +msgid "SSH Key authorized" +msgstr "SSH anahtarının kimliÄŸi doÄŸrulandı" + +msgid "SSH Key created" +msgstr "SSH anahtarı eklendi" + +msgid "SSH Key deleted" +msgstr "SSH anahtarı silindi" + +msgid "SSH Keys" +msgstr "SSH Anahtarları" + +msgid "SSH is not enabled" +msgstr "SSH etkinleÅŸtirilmemiÅŸ" + +msgid "SSL Certificates" +msgstr "SSL Sertifika Yönetimi" + +msgid "SSL is not enabled for this domain" +msgstr "Bu etki alanı için SSL etkinleÅŸtirilmemiÅŸ" + +msgid "Safe Mode Disabled on selected domains" +msgstr "SeçilmiÅŸ etki alanları için Safe Mode özelliÄŸi devre dışı bırakıldı" + +msgid "Safe Mode Enabled on selected domains" +msgstr "SeçilmiÅŸ etki alanları için Safe Mode özelliÄŸi etkinleÅŸtirildi" + +msgid "Save" +msgstr "Kaydet" + +msgid "Save Awstats" +msgstr "Awstats Kaydet" + +msgid "Save Comments" +msgstr "Notları Kaydet" + +msgid "Save E-Mail" +msgstr "E-postayı Kaydet" + +msgid "Save Increase" +msgstr "Artımı Kaydet" + +msgid "Save Language" +msgstr "Dili Kaydet" + +msgid "Save Limit" +msgstr "Sınırı Kaydet" + +msgid "Save Limit Notice" +msgstr "Sınır Uyarısını Kaydet" + +msgid "Save Name" +msgstr "Adı Kaydet" + +msgid "Save Nameservers" +msgstr "Ad Sunucularını Kaydet" + +msgid "Save Skin" +msgstr "Temayı Kaydet" + +msgid "" +"Saving/Editing files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Dosyaları kaydetme ve düzenleme özelliÄŸi filemanager_disable_features " +"seçeneÄŸi ile devre dışı bırakılmış" + +msgid "Scratch Codes" +msgstr "Yedek Kodlar" + +msgid "Scratch codes" +msgstr "Yedek Kodlar" + +msgid "Script output" +msgstr "Betik Çıktısı" + +msgid "Search" +msgstr "Arama" + +msgid "SecRuleRemoveById id is blank" +msgstr "SecRuleRemoveById kodu boÅŸ" + +msgid "Second PHP" +msgstr "İkinci PHP Sürümü" + +msgid "Secure Socket Layer (ssl)" +msgstr "Güvenli Aktarım Katmanı (SSL)" + +#, c-format +msgid "Secured Home of %s" +msgstr "%s ana klasörü korundu" + +#, c-format +msgid "Security Answer is too long max=%d" +msgstr "Güvenlik sorusunun yanıtı çok uzun. En çok %d olabilir" + +msgid "Security Question" +msgstr "Güvenlik Sorusu" + +msgid "Security Question set" +msgstr "Güvenlik sorusu ayarlandı" + +msgid "Security Questions" +msgstr "Güvenlik Soruları" + +msgid "Security Questions are disabled" +msgstr "Güvenlik soruları özelliÄŸi devre dışı bırakılmış" + +msgid "Security Questions deleted" +msgstr "Güvenlik soruları silindi" + +#, c-format +msgid "See %sthis guide%s to fix it." +msgstr "Bu durumu düzeltmek için %sbu rehbere%s bakabilirsiniz." + +msgid "Select" +msgstr "Seçiniz" + +msgid "Select MX Template" +msgstr "MX Kalıbını Seçin" + +#, c-format +msgid "Select an IP to Link to %s" +msgstr "%s üzerine baÄŸlanacak bir IP adresi seçin" + +msgid "Selected Content-Type is not valid." +msgstr "SeçilmiÅŸ içerik türü geçersiz." + +msgid "Selected Data" +msgstr "SeçilmiÅŸ Veriler" + +msgid "Selected Plugins Activated" +msgstr "SeçilmiÅŸ Eklentiler EtkinleÅŸtirildi" + +msgid "Selected Plugins De-Activated" +msgstr "SeçilmiÅŸ Eklentiler Devre Dışı Bırakıldı" + +msgid "Selected Plugins Deleted" +msgstr "SeçilmiÅŸ Eklentiler Silindi" + +msgid "Selected Users" +msgstr "SeçilmiÅŸ Kullanıcılar" + +msgid "Selected character-set encoding is not valid." +msgstr "SeçilmiÅŸ karakter kümesi kodlaması geçersiz." + +msgid "Send Count" +msgstr "Sayı Gönderilsin" + +msgid "Send Signal" +msgstr "İşareti Gönder" + +msgid "Send a Message" +msgstr "Bir Bildirim Gönder" + +msgid "Send limit must be a valid number, or blank." +msgstr "Gönderim sınırı deÄŸeri bir sayı olmalı ya da boÅŸ bırakılmalıdır." + +msgid "Sender" +msgstr "Gönderen" + +msgid "Sender Host" +msgstr "Gönderen Sunucu" + +#, c-format +msgid "Sender domain must match the list domain '%s', or use '%s'" +msgstr "" +"Gönderen etki alanı '%s' liste etki alanı ile eÅŸleÅŸmeli ya da '%s' " +"kullanılmalıdır" + +msgid "Sent" +msgstr "Gönderilen" + +msgid "Sent E-mails" +msgstr "Gönderilen E-posta" + +msgid "Sent Emails" +msgstr "Gönderilen E-posta" + +msgid "Sep" +msgstr "Eyl" + +msgid "Server" +msgstr "Sunucu" + +msgid "Server History" +msgstr "Sunucu GeçmiÅŸi" + +msgid "Server Path" +msgstr "Sunucu Yolu" + +msgid "Service" +msgstr "Hizmet Adı" + +msgid "Service Monitor" +msgstr "Hizmetler" + +msgid "Set" +msgstr "Ayarla" + +msgid "Set 0 for unlimited. Set a blank value to reset to default." +msgstr "" +"Sınırsız olması için 0 yazın. Varsayılan deÄŸerin kullanılması için boÅŸ " +"bırakın." + +msgid "Set Global" +msgstr "Genel Olarak Ayarla" + +msgid "Set Global Shared" +msgstr "Genel Paylaşılmış Olarak Ayarla" + +msgid "Set as Default" +msgstr "Varsayılan Olarak Ayarla" + +msgid "Set selected domains to be publicly viewable from" +msgstr "SeçilmiÅŸ etki alanları herkese açık olarak görülebilsin" + +msgid "Set selected to" +msgstr "SeçilmiÅŸleri" + +msgid "Set to" +msgstr "Åžuna ayarla" + +msgid "Setting" +msgstr "Öge" + +msgid "Setting changed" +msgstr "Ayar güncellendi" + +msgid "" +"Setting file/directory permissions has been disabled with the " +"filemanager_disable_features option" +msgstr "" +"Dosya ve klasör izinlerini ayarlama özelliÄŸi filemanager_disable_features " +"seçeneÄŸi ile devre dışı bırakılmış" + +msgid "Settings" +msgstr "Ayarlar" + +msgid "Settings Saved" +msgstr "Ayarlar Kaydedildi" + +msgid "Share Selected" +msgstr "SeçilmiÅŸleri PaylaÅŸ" + +msgid "Share a static path" +msgstr "DuraÄŸan bir yol paylaÅŸ" + +msgid "Shared" +msgstr "Paylaşılmış" + +msgid "Shared - randomly selected" +msgstr "Paylaşılmış - rastgele seçilmiÅŸ" + +msgid "Shell Access (ssh)" +msgstr "Kabuk EriÅŸimi (SSH)" + +msgid "Shell for Resellers's Users" +msgstr "Bayi Kullanıcılarına Kabuk EriÅŸimi" + +msgid "Show" +msgstr "Görüntüle" + +msgid "Show All Users" +msgstr "Kullanıcı Hesapları" + +msgid "Show Domain" +msgstr "Etki Alanını Görüntüle" + +msgid "Sign" +msgstr "İmzala" + +msgid "Signed" +msgstr "İmzalanmış" + +msgid "Site Redirection" +msgstr "Site Yönlendirmeleri" + +msgid "Site Summary / Statistics / Logs" +msgstr "Özet / İstatistikler / Günlükler" + +msgid "Size" +msgstr "Boyut" + +msgid "Size is not a number" +msgstr "Boyut bir sayı deÄŸil" + +msgid "Skin" +msgstr "Tema" + +#, c-format +msgid "Skin '%s' does not have any custom color variables to set" +msgstr "'%s' temasında ayarlanabilecek bir özel renk deÄŸiÅŸkeni yok" + +msgid "Skin Installed" +msgstr "Tema Kuruldu" + +msgid "Skin Name" +msgstr "Tema Adı" + +msgid "Skin Owner" +msgstr "Tema Sahibi" + +msgid "Skin Set" +msgstr "Tema Ayarı" + +msgid "Skin applied to all users" +msgstr "Tema tüm kullanıcılara uygulandı" + +msgid "Skin has been customized" +msgstr "Tema özelleÅŸtirilmiÅŸ" + +msgid "Skin has been successfully changed" +msgstr "Tema güncellendi" + +msgid "Skins" +msgstr "Temalar" + +msgid "Skins Deleted" +msgstr "Tema Kaldırıldı" + +msgid "Skip Suspended" +msgstr "Askıya Alınmış Kullanıcılar Atlansın" + +msgid "Skipped rule added" +msgstr "Atlama kuralı eklendi" + +msgid "Skipping system E-Mail account" +msgstr "Sistem e-posta hesabı atlanıyor" + +msgid "Slave of a load balancing bundle." +msgstr "Yük dengeleme paketinin kölesi." + +msgid "Sorry, this function does not support domain pointers at this time" +msgstr "" +"Maalesef, bu özellik ÅŸu anda etki alanı yönlendiricilerini desteklemiyor" + +msgid "Sort" +msgstr "Sırala" + +msgid "Sort Selected Column in" +msgstr "SeçilmiÅŸ Sütunu Åžuna Göre Sırala" + +msgid "Source Domain" +msgstr "Kaynak Etki Alanı" + +msgid "Spam" +msgstr "Spam" + +msgid "Spam Filters" +msgstr "Spam Süzgeçleri" + +msgid "SpamAassassin is disabled on your account" +msgstr "Hesabınızda SpamAssassin kullanılmıyor" + +msgid "SpamAssassin" +msgstr "SpamAssassin" + +msgid "Spamassassin disabled" +msgstr "SpamAssassin kullanılmıyor" + +msgid "Spambox" +msgstr "Spam Kutusu" + +msgid "Spamd is not running on your system." +msgstr "Sisteminizde spamd çalışmıyor." + +msgid "Splitting error for unix socket" +msgstr "Unix soketi bölünme sorunu" + +msgid "Ssl" +msgstr "SSL" + +msgid "Start" +msgstr "BaÅŸlat" + +msgid "Start Time" +msgstr "BaÅŸlangıç Zamanı" + +msgid "Start Time must be before End Time." +msgstr "BaÅŸlangıç zamanı bitiÅŸ zamanından önce olmalıdır." + +msgid "State/Province must only contain letters, spaces and/or periods" +msgstr "Bölge için yalnız harf, boÅŸluk ve nokta karakterleri kullanılabilir" + +msgid "Stats links created" +msgstr "İstatistikler baÄŸlantısı oluÅŸturuldu" + +msgid "Stats links removed" +msgstr "İstatistikler baÄŸlantısı kaldırıldı" + +msgid "Status" +msgstr "Durum" + +msgid "Sticky bit's not allowed: 777 is the max allowed permission" +msgstr "Yapışkan bitler kullanılamaz: En çok 777 kullanılabilir" + +msgid "Stop" +msgstr "Durdur" + +msgid "Stopped" +msgstr "DurmuÅŸ" + +msgid "String contains an invalid email address" +msgstr "Dizgedeki e-posta adresi geçersiz" + +msgid "Sub Domains" +msgstr "Alt Etki Alanları" + +msgid "Sub Sort" +msgstr "Alt Sıralama" + +msgid "Sub Sort Selected Column in" +msgstr "SeçilmiÅŸ Sütunu Åžuna Göre Alt Sırala" + +msgid "Sub-domain is forbidden" +msgstr "Alt etki alanına izin verilmiyor" + +msgid "SubDomain Name" +msgstr "Alt Etki Alanı Adı" + +msgid "Subdomain Created" +msgstr "Alt etki alanı eklendi" + +msgid "Subdomain Stats" +msgstr "Alt Etki Alanı İstatistikleri" + +msgid "Subdomain already exists" +msgstr "Alt etki alanı zaten var" + +msgid "Subdomain created" +msgstr "Alt etki alanı eklendi" + +msgid "Subdomain does not exist" +msgstr "Alt etki alanı bulunamadı" + +#, c-format +msgid "Subdomain name too long. Maximum %d characters." +msgstr "Alt etki alanı adı çok uzun. En fazla %d karakter olmalıdır." + +msgid "Subdomains" +msgstr "Alt Etki Alanları" + +msgid "Subdomains Removed" +msgstr "Alt Etki Alanları Silindi" + +msgid "Subdomains deleted" +msgstr "Alt etki alanları silindi" + +msgid "Subject" +msgstr "Konu" + +msgid "Subject Contains" +msgstr "Konusunda Åžu Bulunan" + +#, c-format +msgid "Subject prefix contains invalid characters. Use %s" +msgstr "Konu ön ekinde geçersiz karakterler var. %s kullanın" + +msgid "Submit" +msgstr "Kaydet" + +msgid "Subscriber" +msgstr "Abone" + +msgid "Subscribers" +msgstr "Aboneler" + +msgid "Success" +msgstr "BaÅŸarılı" + +#, c-format +msgid "Success with %s of selected widgets" +msgstr "SeçilmiÅŸ pano bileÅŸenleri için %s baÅŸarılı" + +#, c-format +msgid "Success with '%s'" +msgstr "'%s' ile baÅŸarılı" + +msgid "Supports multicast" +msgstr "Multicast destekler" + +msgid "Suspend" +msgstr "Askıya Al" + +msgid "Suspend / Unsuspend" +msgstr "Askıya Al / Askıdan İndir" + +msgid "Suspend Reason" +msgstr "Askıya Alma Nedeni" + +msgid "Suspend at Limit" +msgstr "Kota Dolunca Askıya Alınsın" + +msgid "Suspended" +msgstr "Askıya Alınmış" + +msgid "Syntax check has been disabled" +msgstr "Yazım denetimi devre dışı bırakıldı" + +msgid "System Backup" +msgstr "Sistem Yedekleme" + +msgid "System Info" +msgstr "Sistem Bilgileri" + +msgid "System Information" +msgstr "Sistem Bilgileri" + +msgid "System Rebooting Now!" +msgstr "Sistem Yeniden BaÅŸlatılıyor!" + +msgid "System Uptime" +msgstr "Sistem Çalışma Süresi" + +#, c-format +msgid "" +"System account exists, but unable to read the User data files for user %s" +msgstr "Sistem hesabı var ancak %s kullanıcısının veri dosyaları okunamadı" + +msgid "Systems Quotas are size 0." +msgstr "Sistem kotalarının boyutu 0." + +msgid "TB" +msgstr "TB" + +msgid "TTL has been saved" +msgstr "TTL deÄŸeri kaydedildi" + +msgid "Table" +msgstr "Tablo" + +msgid "Tail" +msgstr "Tail" + +msgid "Tasks Max" +msgstr "En Fazla Görev" + +#, c-format +msgid "Temp file %s is 0 bytes after writing to disk. Will not rename it." +msgstr "" +"%s geçici dosyasının boyutu diske yazıldıktan sonra 0 bayt. Yeniden " +"adlandırılmayacak." + +msgid "Template does not exist" +msgstr "Kalıp bulunamadı" + +msgid "Temporary Bandwidth Increase" +msgstr "Geçici Bant GeniÅŸliÄŸi Artımı" + +#, c-format +msgid "" +"Temporary account action lock in place. There might be some other process " +"working on the account. This should last no more than %d minutes" +msgstr "" +"Geçici iÅŸlem kilidi uygulandı. Hesap üzerinde çalışan baÅŸka bir iÅŸlem " +"olabilir. Bu iÅŸlem %d dakikadan uzun sürmemeli" + +msgid "Temporary bandwidth increase has been set" +msgstr "Geçici bant geniÅŸliÄŸi artırımı kaydedildi" + +msgid "Text" +msgstr "Metin" + +msgid "Text contains invalid characters" +msgstr "Metinde geçersiz karakterler var" + +msgid "That ID is not of type 'admin'" +msgstr "Bu hesap kodu 'Yönetici' türünde deÄŸil" + +msgid "That IP already exists on the domain" +msgstr "Bu IP adresi etki alanında zaten var" + +msgid "That IP does not exist" +msgstr "Bu IP adresi bulunamadı" + +msgid "That IP does not exist in your User's IP list" +msgstr "Bu IP adresi hesabınızın IP adresi listesinde bulunmuyor" + +msgid "That IP does not exist in your list" +msgstr "IP adresi listenizde yok" + +msgid "That IP is already in your list of Additional IPs" +msgstr "Bu IP adresi zaten Ek IP Adresleri listesinde var" + +msgid "That IP is already owned" +msgstr "Bu IP adresinin zaten bir sahibi var" + +msgid "That IP is not available for linking" +msgstr "Bu IP adresi baÄŸlanmak için uygun deÄŸil" + +msgid "That User already exists on another server" +msgstr "Bu kullanıcı baÅŸka bir sunucu üzerinde zaten var" + +msgid "That database already exists" +msgstr "Bu veritabanı zaten var" + +msgid "That database does not belong to you" +msgstr "Bu veritabanı hesabınıza ait deÄŸil" + +msgid "That database does not exist" +msgstr "Bu veritabanı bulunamadı" + +msgid "That domain already exists" +msgstr "Bu etki alanı zaten var" + +msgid "That domain already exists on another server" +msgstr "Bu etki alanı baÅŸka bir sunucu üzerinde zaten var" + +msgid "That domain does not belong to you" +msgstr "Bu etki alanı hesabınıza ait deÄŸil" + +msgid "That domain does not exist" +msgstr "Bu etki alanı bulunamadı" + +msgid "That domain is on the forbidden domains list" +msgstr "Bu etki alanı engellenmiÅŸ etki alanları listesinde" + +msgid "That domain is suspended. Unsuspend it before changing it's name" +msgstr "" +"Bu etki alanı askıya alınmış. Adını deÄŸiÅŸtirmek için önce askıdan indirin" + +msgid "That email user does not exist" +msgstr "Bu e-posta kullanıcısı bulunamadı" + +msgid "That file was empty" +msgstr "Bu dosya boÅŸtu" + +msgid "That filter already exists" +msgstr "Bu süzgeç zaten var" + +msgid "That ftp_password file does not exist" +msgstr "Bu ftp_password dosyası bulunamadı" + +msgid "That is an invalid email address / email list" +msgstr "Bu e-posta adresi ya da e-posta listesi geçersiz" + +msgid "That is an invalid filename" +msgstr "Bu dosya adı geçersiz" + +msgid "That is not a valid access host" +msgstr "Bu eriÅŸebilecek sunucu geçersiz" + +msgid "" +"That is not a valid path. Either it is not in your home directory, it " +"contains symbolic links, or it contains invalid characters" +msgstr "" +"Bu yol geçersiz. Yol sizin kök klasörünüz içinde deÄŸil, klasörde sembolik " +"baÄŸlantılar var ya da klasör adında geçersiz karakterler bulunuyor" + +msgid "" +"That is not a valid path. Either it is not in your home directory, it " +"doesn't exist, it contains symbolic links, or it contains invalid characters" +msgstr "" +"Bu yol geçersiz. Yol sizin kök klasörünüz içinde deÄŸil, klasör yok, klasörde " +"sembolik baÄŸlantılar var ya da klasör adında geçersiz karakterler bulunuyor" + +msgid "That is not a valid quota" +msgstr "Kota deÄŸeri geçersiz" + +msgid "That is not a valid username" +msgstr "Bu kullanıcı adı geçersiz" + +msgid "That is not your domain" +msgstr "Bu etki alanı size ait deÄŸil" + +msgid "That is not your system password" +msgstr "Bu sizin sistem parolanız deÄŸil" + +msgid "" +"That is the hostname which is reserved. Either change the hostname, or use a " +"different domain" +msgstr "" +"Bu sunucu adı sistem kullanımına ayrılmış. Sunucu adını deÄŸiÅŸtirin ya da " +"farklı bir etki alanı kullanın" + +msgid "That isn't a gzip file" +msgstr "Bu bir gzip dosyası deÄŸil" + +msgid "That key does not exist" +msgstr "Bu anahtar bulunamadı" + +msgid "That password is incorrect" +msgstr "Bu parola yanlış" + +msgid "That path isn't protectable" +msgstr "Bu yol korunamaz" + +msgid "That pop account doesn't exist" +msgstr "Bu POP hesabı bulunamadı" + +#, c-format +msgid "That skin cannot be customized. It's skin.conf requires %s" +msgstr "Bu tema özelleÅŸtirilemez. skin.conf dosyası için %s gerekli" + +msgid "That skin does not exist" +msgstr "Bu tema bulunamadı" + +msgid "That skin is not in your list" +msgstr "Bu tema sizin listenizde yok" + +msgid "That skin name already exists in your Reseller skin list" +msgstr "Bu adı taşıyan bir tema Bayi tema listenizde zaten var" + +msgid "That user already Exists" +msgstr "Bu kullanıcı zaten var" + +msgid "That user already exists" +msgstr "Bu kullanıcı zaten var" + +#, c-format +msgid "" +"That user contains the ftp separator (%c) which cannot be in the username." +msgstr "Bu kullanıcıda kullanıcı adında bulunamayacak FTP ayıracı (%c) var." + +msgid "That user does not belong to you" +msgstr "Bu kullanıcı hesabınıza ait deÄŸil" + +msgid "That user does not exist" +msgstr "Bu kullanıcı bulunamadı" + +msgid "" +"That user does not exist, please create the user before changing their " +"privileges" +msgstr "" +"Bu kullanıcı bulunamadı. Lütfen izinlerini ayarlamadan önce kullanıcıyı " +"ekleyin" + +msgid "That user doesn't exist" +msgstr "Bu kullanıcı bulunamadı" + +msgid "That user is reserved for the anonymous account" +msgstr "Bu kullanıcı anonim hesap için ayrılmış" + +msgid "That username already exists on the system" +msgstr "Bu kullanıcı adı sistem üzerinde zaten var" + +msgid "That username is a reserved system name" +msgstr "Bu kullanıcı adı sistem kullanımı için ayrılmış" + +msgid "That zone already exists" +msgstr "Bu bölge zaten var" + +msgid "Thats a reserved skin name." +msgstr "Bu tema adı sistem kullanımına ayrılmış." + +#, c-format +msgid "The %s backups have been created in %s" +msgstr "%s yedek %s içinde oluÅŸturuldu" + +msgid "The 'ttl' value passed is not a number or is too large" +msgstr "Belirtilen 'TTL' deÄŸeri bir sayı deÄŸil ya da çok büyük" + +msgid "The Administrator has disabled the User Backup Function" +msgstr "Kullanıcı Yedekleme özelliÄŸi yönetici tarafından devre dışı bırakılmış" + +msgid "" +"The CA Certificate will not be used. The file will remain, but will not be " +"included." +msgstr "" +"Sertifika saÄŸlayıcının sertifikası kullanılmayacak. Dosya duracak ancak " +"katılmayacak." + +msgid "" +"The CC value entered will create an infinite loop. Please use a different " +"CC value." +msgstr "" +"Yazılan kopya adresi sonsuz bir döngüye yol açacak. Lütfen baÅŸka bir adres " +"yazın." + +#, c-format +msgid "The E-Mail '%s' contains invalid characters" +msgstr "'%s' e-posta adresinde geçersiz karakterler var" + +#, c-format +msgid "The IP %s does not exist. User %s will not be created" +msgstr "%s IP adresi bulunamadı. %s kullanıcısı eklenmeyecek" + +#, c-format +msgid "The IP %s has provided the correct password for the %s account." +msgstr "%s IP adresinden %s hesabı için doÄŸru parola yazıldı." + +#, c-format +msgid "The OS being updated %s has expired. No further updates can be done" +msgstr "" +"Güncellenen %s iÅŸletim sisteminin kullanım süresi dolmuÅŸ. Artık güncellenemez" + +msgid "The Ticket System is not enabled." +msgstr "Destek Kaydı sistemi etkinleÅŸtirilmemiÅŸ." + +msgid "The User backups have been uploaded to" +msgstr "Kullanıcı yedeklerinin yükleneceÄŸi konum" + +#, c-format +msgid "The User files have been restored from %s" +msgstr "Kullanıcı dosyaları %s üzerinden geri yüklendi" + +msgid "The Users display cache will be updated momentarily." +msgstr "Kullanıcı bilgileri ön belleÄŸi kısa süre sonra güncellenecek." + +msgid "The addresses are lost when the interface goes down." +msgstr "Arayüz düştüğünde adresler kaybolur." + +msgid "" +"The cache is being updated, the current values may not be correct. Please " +"refresh the page in 1 minute." +msgstr "" +"Ön bellek güncellendi. Geçerli deÄŸerler doÄŸru olmayabilir. Lütfen 1 dakika " +"sonra sayfayı yenileyin." + +msgid "" +"The certificate and key do not match. Please ensure you are using the " +"correct key with this certificate" +msgstr "" +"Sertifika ve anahtar eÅŸleÅŸmiyor. Lütfen bu sertifikaya ait anahtarı " +"kullandığınızdan emin olun" + +msgid "" +"The clipboard has been disabled with the filemanager_disable_features option" +msgstr "" +"Pano özelliÄŸi filemanager_disable_features seçeneÄŸi ile devre dışı bırakılmış" + +msgid "The code is valid, but for a different time." +msgstr "Kod geçerli ancak baÅŸka bir zaman için üretilmiÅŸ." + +msgid "The command cannot contain any newline characters" +msgstr "Komut içinde satır sonu karakteri bulunmamalıdır" + +#, c-format +msgid "The database '%s' does not belong to you" +msgstr "'%s' veritabanı hesabınıza ait deÄŸil" + +msgid "The day of month is not a valid cron value (1-31)" +msgstr "Ayın günü deÄŸeri zamanlanmış görev için geçersiz (1-31)" + +msgid "The day of week is not a valid cron value (0-7)" +msgstr "Haftanın günü deÄŸeri zamanlanmış görev için geçersiz (0-7)" + +msgid "The default has been set" +msgstr "Varsayılan deÄŸer kaydedildi" + +#, c-format +msgid "" +"The directory %s seems to be owned by 'apache'. Try using the 'Reset Owner' " +"option, then try again." +msgstr "" +"%s klasörünün sahibi 'apache' gibi görünüyor. 'Sahibini Sıfırla' seçeneÄŸine " +"tıklayıp yeniden deneyin." + +#, c-format +msgid "" +"The disk usage for the selected Users totals more than %d MB, thus will be " +"removed in the background." +msgstr "" +"SeçilmiÅŸ kullanıcıların toplam disk kullanımı %d MB deÄŸerinden büyük. Bu " +"kullanıcılar arka planda silinecek." + +#, c-format +msgid "The domain %s does not belong to you." +msgstr "%s etki alanı hesabınıza ait deÄŸil." + +#, c-format +msgid "" +"The domain %s does not belong to you. The subdomain will not be created." +msgstr "%s etki alanı hesabınıza ait deÄŸil. Alt etki alanı eklenmeyecek." + +msgid "" +"The domain entered is invalid. It must be of the form 'sourcedomain.com'" +msgstr "Yazılan etki alanı geçersiz. 'kaynaketkialani.com' biçiminde olmalıdır" + +msgid "The domain must not match your hostname." +msgstr "Etki alanı adı sunucu adınızdan farklı olmalı." + +#, c-format +msgid "" +"The download of %s has failed the md5sum check. Please check the file and " +"retry the update again. Not extracted." +msgstr "" +"%s indirmesi MD5 saÄŸlamasından geçemedi. Lütfen dosyayı denetleyin ve " +"yeniden güncellemeyi deneyin. Dosya ayıklanmadı." + +msgid "The e-mail containing your new password has been sent." +msgstr "Yeni parolanızın bulunduÄŸu bir e-posta gönderildi." + +msgid "The email address provided is not a valid email address" +msgstr "Belirtilen e-posta adresi geçerli bir e-posta adresi deÄŸil" + +msgid "The entered path must be a-zA-Z0-9" +msgstr "Klasör yolunda yalnız a-zA-Z0-9 karakterleri bulunmalıdır" + +msgid "The expiry entered is too far in the future" +msgstr "Belirtilen sona erme zamanı çok uzak bir gelecekte" + +#, c-format +msgid "The file %s has more than 1 hard link" +msgstr "%s dosyasında 1 taneden fazla hard link var" + +msgid "The file is generated when the account is reset." +msgstr "Hesap sıfırlandığında dosya üretildi." + +msgid "The file must be of the form: type.creator.username.tar.gz" +msgstr "Dosya adı ÅŸu biçimde olmalı: tür.oluÅŸturan.kullanıcıadı.tar.gz" + +msgid "The file must be of the form: username.tar.gz" +msgstr "Dosya adı ÅŸu biçimde olmalı: kullanıcıadı.tar.gz" + +#, c-format +msgid "The file: '%s' is not in the form username.tar.gz" +msgstr "'%s' dosyasının adı kullanıcıadı.tar.gz biçiminde deÄŸil" + +msgid "The following file could not be found. No reset required" +msgstr "Åžu dosya bulunamadı. Sıfırlama gerekmiyor" + +#, c-format +msgid "The following hard links have been found under User %s:" +msgstr "%s kullanıcısının klasör yolu altında ÅŸu hard linkler bulundu:" + +msgid "The following test database tables have been found:" +msgstr "Åžu deneme veritabanı dosyaları bulundu:" + +#, c-format +msgid "The ftp user %s does not exist in passwd file %s" +msgstr "%s FTP kullanıcısı %s parola dosyasında bulunamadı" + +msgid "The full format name entered does not end with the name of the zone" +msgstr "Yazılan tam biçimli ad bölge adı ile bitmiyor" + +msgid "The local url path or the destination url is invalid." +msgstr "Yerel adres yolu ya da hedef adresi geçersiz." + +msgid "The location has not changed" +msgstr "Konum güncellenmedi" + +msgid "The lost password feature is disabled" +msgstr "Parolamı unuttum özelliÄŸi devre dışı" + +msgid "The max upload size cannot be 0" +msgstr "En büyük yükleme boyutu 0 olamaz" + +#, fuzzy, c-format +#| msgid "The minimum for %s is %s" +msgid "The maximum for %s is %s" +msgstr "%s için minimum %s" + +#, c-format +msgid "The maximum value is %d" +msgstr "En büyük deÄŸer %d" + +#, c-format +msgid "The minimum for %s is %s" +msgstr "%s için minimum %s" + +msgid "The month is not a valid cron value (1-12)" +msgstr "Ay deÄŸeri zamanlanmış görev için geçersiz (1-12)" + +msgid "The name you've entered contains invalid characters" +msgstr "Yazdığınız ad içinde geçersiz karakterler var" + +msgid "The new key was created, but there was an issue during authorization" +msgstr "" +"Yeni anahtar oluÅŸturuldu andak kimlik doÄŸrulaması sırasında bir sorun çıktı" + +msgid "The new passwords do not match" +msgstr "Yeni parola ile onayı aynı deÄŸil" + +msgid "The number and type of ticket is required" +msgstr "Destek kaydının numarası ve türü gereklidir" + +#, c-format +msgid "The owner of %s is not %s" +msgstr "%s, %s hesabına ait deÄŸil" + +msgid "The password changing feature has been disabled" +msgstr "Parola deÄŸiÅŸtirme özelliÄŸi devre dışı bırakılmış" + +#, c-format +msgid "The path %s already exists" +msgstr "%s yolu zaten var" + +msgid "The path already exists, but is not a directory" +msgstr "Yol zaten var ancak bir klasör deÄŸil" + +msgid "" +"The process is currently being used to execute this request so it will be " +"executed shortly by the Task Queue." +msgstr "" +"İşlem ÅŸu anda bu isteÄŸi yerine getirmek üzere kullanılıyor. Görev " +"sırasındaki yerine göre kısa bir süre içinde yerine getirilecek." + +msgid "The provided IP is not valid" +msgstr "Belirtilen IP adresi geçersiz" + +msgid "The provided domain name matches your hostname." +msgstr "Yazdığınız etki alanı adı, sunucu adınız ile aynı." + +msgid "The question was" +msgstr "Soru ÅŸuydu" + +#, c-format +msgid "The referer request set (%s) is not in the allowed list: %s" +msgstr "" +"Ayarlanan yönlendiren isteÄŸi (%s), izin verilenler listesinde deÄŸil: %s" + +#, c-format +msgid "The referer used is not safe as it can be controlled by a User: %s" +msgstr "" +"Kullanılan yönlendiren, bir kullanıcı tarafından yönetilebileceÄŸinden " +"güvenli deÄŸil: %s" + +msgid "" +"The request you've made cannot be executed because it does not exist in your " +"authority level" +msgstr "Yetki düzeyinizde olmadığından isteÄŸiniz yerine getirilemiyor" + +msgid "The requested command requires POST but GET was used" +msgstr "" +"İstenilen komut için POST yöntemi gerekiyor ancak GET yöntemi kullanılmış" + +msgid "" +"The skin package did not install properly. Either there were files missing, " +"or their permissions were incorrectly set" +msgstr "" +"Tema paketi doÄŸru ÅŸekilde kurulmamış. Bazı dosyalar eksik ya da izinleri " +"hatalı ayarlanmış" + +msgid "The sql file is 0 bytes in size:" +msgstr "Sql dosyasının boyutu 0 bayt:" + +#, c-format +msgid "The subdomain '%s' already exists under the %s domain" +msgstr "'%s' alt etki alanı %s etki alanı altında zaten var" + +msgid "" +"The times must formatted like one of the following (eg. hour, no spaces)" +msgstr "" +"Zamanların biçimi ÅŸunlardan biri gibi olmalıdır (Örnek saat, boÅŸluksuz)" + +msgid "The update is not allowed to be downloaded." +msgstr "Güncellemenin indirilmesine izin verilmiyor." + +#, c-format +msgid "The user %s does not belong to you" +msgstr "%s kullanıcısı hesabınıza ait deÄŸil" + +#, c-format +msgid "The user %s does not exist" +msgstr "%s kullanıcısı bulunamadı" + +#, c-format +msgid "" +"The username is invalid. Usernames must start with a-z, contain >= 3 " +"characters and <= %d." +msgstr "" +"Kullanıcı adı geçersiz. Kullanıcı adları a-z ile baÅŸlamalı, 3 ile %d " +"karakter arasında olmalıdır." + +msgid "The username is invalid. Usernames must use a-z0-9" +msgstr "" +"Kullanıcı adı geçersiz. Kullanıcı adlarında yalnız a-z0-9 karakterleri " +"kullanılabilir" + +msgid "The value must be an IP address" +msgstr "DeÄŸer bir IP adresi olmalıdır" + +msgid "The very last entry." +msgstr "Son kayıt." + +msgid "The welcome email(s) has successfully been resent." +msgstr "Karşılama e-postası yeniden gönderildi." + +msgid "There are no messages for that ticket" +msgstr "Bu destek kaydı için bir bildirim yok" + +#, c-format +msgid "" +"There are still Users on %s. Remove them from the IP first and set it to " +"'free'." +msgstr "" +"%s adresine atanmış kullanıcılar var. Önce bu kullanıcıları bu IP adresinden " +"taşıdıktan sonra adresi 'Serbest' olarak ayarlayın." + +#, c-format +msgid "" +"There have been %d renew failures, thus no more attempts will be made.%s" +msgstr "" +"%d kez yenileme denendi ancak yapılamadı. Bu nedenle artık yeniden " +"denenmeyecek.%s" + +msgid "There is already a CNAME record with that name" +msgstr "Aynı adlı bir CNAME kaydı zaten var" + +msgid "There is already a mailing list alias with that name" +msgstr "Aynı adlı bir e-posta listesi takma adı zaten var" + +msgid "There is already an A record with that name" +msgstr "Aynı adlı bir A kaydı zaten var" + +msgid "There is already an account with that name" +msgstr "Aynı adlı bir hesap zaten var" + +msgid "There is already an autoresponder with that name" +msgstr "Aynı adlı bir otomatik yanıtlayıcı zaten var" + +#, c-format +msgid "There is not sufficient space on %s to upload %lld bytes of data" +msgstr "%s üzerinde %lld bayt veri yüklemek için yeterli boÅŸ alan yok" + +#, c-format +msgid "There is only 1 %s record for %s=%s, not removing it" +msgstr "Yalnız 1 %s kaydı (%s=%s için) var, kaldırılmadı" + +msgid "" +"There were md5 errors from all servers, above. Please send report to " +"DirectAdmin Support." +msgstr "" +"Yukarıdaki tüm sunucularda MD5 hataları var. Lütfen raporu DirectAdmin " +"destek ekibine gönderin." + +msgid "These are dynamic values. They change with the date." +msgstr "Bu deÄŸerler devingendir ve tarihe göre deÄŸiÅŸir." + +msgid "They should not exist. To delete them, run:" +msgstr "Bunlar var olmamalı. Silmek için ÅŸunu çalıştırın:" + +#, c-format +msgid "" +"This OS is now End-Of-Life and no further updates are availble. The " +"automated updater will no longer accept request after %s (manual attempts " +"can be done with https://help.directadmin.com/item.php?id=29) but may not do " +"anything." +msgstr "" +"Bu iÅŸletim sisteminin kullanım ömrü bitmiÅŸ olduÄŸundan artık " +"güncellenmeyecek. Otomatik güncelleyici %s sonrasında yeni istekleri kabul " +"etmeyecek (el ile güncelleme isteÄŸinde bulunabilirsiniz https://help." +"directadmin.com/item.php?id=29) ancak hiç bir ÅŸey yapmayabilir." + +msgid "This OS is now end-of-life. Future automated updates may fail." +msgstr "" +"Bu iÅŸletim sisteminin kullanım ömrü bitmiÅŸ olduÄŸundan sonraki güncelleme " +"iÅŸlemleri baÅŸarısız olabilir." + +#, c-format +msgid "" +"This Reseller account is unable to allocate unlimited %s, yet that amount " +"has alredy been allocated." +msgstr "" +"Bu bayi hesabına sınırsız %s verilemez. Ancak ÅŸu anda bu miktar verilmiÅŸ." + +msgid "" +"This account already exists on the system. If you restore, it will overwrite " +"and/or merge the data." +msgstr "" +"Bu hesap sistemde zaten var. Geri yüklerseniz, yedek verileri var olan " +"bilgilerin üzerine yazılır ya da birleÅŸtirilir." + +msgid "This account is blocked via BlockCracking." +msgstr "Bu hesap BlockCracking tarafından engellenmiÅŸ." + +msgid "This account is blocked via BlockCracking. Unblocking is disabled." +msgstr "" +"Bu hesap BlockCracking tarafından engellenmiÅŸ. Engellemeyi kaldırma özelliÄŸi " +"devre dışı bırakılmış." + +msgid "" +"This domain will now temporarily use the Shared Server Certificate, unless " +"you restore the backup key (but backup the new key first or it will become " +"lost)" +msgstr "" +"Yedeklenen anahtarı geri yüklemediÄŸiniz sürece bu etki alanı için geçici " +"olarak Paylaşılmış Sunucu Sertifikası kullanılacak" + +msgid "This hash has already been converted to a key." +msgstr "Bu karma zaten bir anahtara dönüştürülmüş." + +msgid "This is a Hash URL login. You can delete it, but you cannot modify it." +msgstr "Bu bir karma adres oturumudur. Silinebilir ancak güncellenemez." + +msgid "This is a placeholder for the subdomain" +msgstr "Alt etki alanı yer belirteci" + +msgid "This is information about my mailing list" +msgstr "E-posta listesi ile ilgili bilgiler" + +msgid "This may give unexpected results" +msgstr "Bu durum beklenmeyen sonuçlara yol açabilir" + +msgid "This may give unexpected results." +msgstr "Bu durum beklenmeyen sonuçlara yol açabilir." + +msgid "This plugin has been disabled for your account" +msgstr "Bu eklenti hesabınız için devre dışı bırakılmış" + +msgid "" +"This will only happen *after* logs exist (domain must resolve and be used)." +msgstr "" +"Hesaplama yalnız günlük kayıtlarının oluÅŸmasından *sonra* yapılabilir (etki " +"alanı adresi çözümlenip kullanılabilmelidir)." + +msgid "This will skip the removal of the dns zone, leaving it in place." +msgstr "" +"Bu seçenek DNS bölgesinin kaldırılmasını atlayarak yerinde kalmasını saÄŸlar." + +msgid "Thread Count" +msgstr "İşlem Sayısı" + +msgid "Throttle Memory above this limit." +msgstr "BelleÄŸi bu sınırın üzerinde kisitla." + +msgid "Ticket #" +msgstr "Destek Kaydı No" + +msgid "Tickets Updated" +msgstr "Kayıtlar Güncellendi" + +msgid "Time" +msgstr "Zaman" + +#, c-format +msgid "Time slice discrepancy = %d" +msgstr "Saat dilimi farkı = %d" + +msgid "Timeout during read" +msgstr "Okuma iÅŸlemi zaman aşımına uÄŸradı" + +#, c-format +msgid "Timeout while trying to connect to %s" +msgstr "%s baÄŸlantısı kurma iÅŸlemi zaman aşımına uÄŸradı" + +#, c-format +msgid "Timezone '%s' does not exist on the system" +msgstr "Sistem üzerinde '%s' saat dilimi bulunamadı" + +msgid "Timezone does not exist" +msgstr "Saat dilimi bulunamadı" + +msgid "" +"To add a cron job, you require all of the following: minute, hour, " +"dayofmonth, month, dayofweek and command" +msgstr "" +"Bir zamanlanmış görev eklemek için ÅŸunları belirtmelisiniz: dakika, saat, " +"ayın günü, haftanın günü ve komut" + +msgid "" +"To change this page, upload a new index.html to your private_html folder" +msgstr "" +"Bu sayfayı deÄŸiÅŸtirmek için private_html klasörüne yeni bir index.html " +"dosyası yükleyin" + +msgid "Today" +msgstr "Bugün" + +msgid "Today at" +msgstr "Bugün" + +#, c-format +msgid "Today's E-Mail count has been reset for User %s" +msgstr "%s kullanıcısının bugün gönderilen e-posta sayısı sıfırlandı" + +msgid "Too long" +msgstr "Çok uzun" + +msgid "Too short" +msgstr "Çok kısa" + +msgid "Total" +msgstr "Toplam" + +msgid "Total Disk Usage (MB)" +msgstr "Toplam Disk Kullanımı (MB)" + +msgid "Total Memory" +msgstr "Toplam Bellek" + +msgid "Total Size:" +msgstr "Toplam Boyut:" + +msgid "Total Swap Memory" +msgstr "Toplam Takas BelleÄŸi" + +msgid "Total Usage" +msgstr "Toplam Kullanım" + +msgid "Trial License" +msgstr "Deneme Lisansı" + +#, c-format +msgid "Tried to restore '%s' to '%s', but this path is not in the %s" +msgstr "" +"'%s', '%s' üzerine geri yüklenmeye çalışıldı ancak bu klasör yolu %s içinde " +"deÄŸil" + +msgid "Trust cookie has been cleared" +msgstr "Güvenirlik çerezi silindi" + +#, c-format +msgid "Trust this device for %d day" +msgid_plural "Trust this device for %d days" +msgstr[0] "Bu aygıta %d gün süreyle güvenilsin" +msgstr[1] "Bu aygıta %d gün süreyle güvenilsin" + +#, c-format +msgid "Try updating manually: %s" +msgstr "El ile güncellemeyi deneyin: %s" + +msgid "Trying another random redirection URL from the same control server" +msgstr "" +"Aynı denetim sunucusundan baÅŸka bir rastgele yönlendirme adresi deneniyor" + +msgid "Two-Step Auth secret is not set." +msgstr "İki AÅŸamalı Kimlik DoÄŸrulaması parolası ayarlanmamış." + +msgid "Two-Step Authentication" +msgstr "İki AÅŸamalı Kimlik DoÄŸrulama" + +msgid "Two-Step Authentication is disabled" +msgstr "İki aÅŸamalı kimlik doÄŸrulama devre dışı bırakılmış" + +msgid "Type" +msgstr "Tür" + +#, c-format +msgid "Type '%s' is disabled" +msgstr "'%s' türü devre dışı bırakılmış" + +msgid "Type must be either 'paste' or 'id'" +msgstr "Tür 'paste' ya da 'id' olmalıdır" + +msgid "UID" +msgstr "UID" + +msgid "URL" +msgstr "Adres" + +msgid "Un-Link" +msgstr "BaÄŸlantıyı Kaldır" + +msgid "Un-Set" +msgstr "Ayarı Kaldır" + +msgid "Unable To Execute Your Request" +msgstr "İsteÄŸiniz Yerine Getirilemedi" + +msgid "Unable to Execute Your Command" +msgstr "Komutunuz Yürütülemedi" + +msgid "Unable to Locate that domain" +msgstr "Bu etki alanı bulunamadı" + +msgid "Unable to Logout" +msgstr "Oturum Kapatılamadı" + +msgid "Unable to add IP" +msgstr "IP adresi eklenemedi" + +msgid "Unable to add access host:" +msgstr "EriÅŸebilecek sunucu eklenemedi:" + +msgid "Unable to add domain pointer" +msgstr "Etki alanı yönlendirmesi eklenemedi" + +#, c-format +msgid "Unable to add user %s." +msgstr "%s kullanıcısı eklenemedi." + +msgid "Unable to add user to ssh config file" +msgstr "Kullanıcı SSH yapılandırma dosyasına eklenemedi" + +#, c-format +msgid "" +"Unable to allocate unlimited %s. This account is not allowed to create that " +"amount." +msgstr "" +"Sınırsız %s verilemedi. Bu hesabın bu miktarı eklemesine izin verilmiyor." + +msgid "" +"Unable to assign the Reseller ANY ips. Make sure to have free, un-assigned " +"ips." +msgstr "" +"Bayiye bir IP adresi atanamadı. Serbest ve atanmamış IP adresleri " +"bulunduÄŸundan emin olun." + +msgid "Unable to authenitcate: Check your password for syntax" +msgstr "Kimlik doÄŸrulanamadı: Parolanın doÄŸru yazıldığından emin olun" + +msgid "Unable to authenticate: Invalid password" +msgstr "Kimlik doÄŸrulanamadı: Parola geçersiz" + +#, c-format +msgid "Unable to change %s" +msgstr "%s güncellenemedi" + +msgid "Unable to change password" +msgstr "Parola güncellenemedi" + +msgid "Unable to change the E-Mail Address" +msgstr "E-posta adresi güncellenemedi" + +msgid "Unable to change the Message System E-Mail Address" +msgstr "Bildirim sistemi e-posta adresi güncellenemedi" + +msgid "Unable to change the Name" +msgstr "Ad güncellenemedi" + +msgid "Unable to change the limit" +msgstr "Sınır güncellenemedi" + +msgid "Unable to change the temporary bandwidth increase" +msgstr "Geçici bant geniÅŸliÄŸi artırımı deÄŸeri güncellenemedi" + +msgid "Unable to connect to any site for the update" +msgstr "Güncelleme için hiç bir site ile baÄŸlantı kurulamıyor" + +msgid "Unable to connect to secure socket" +msgstr "Güvenli soket ile baÄŸlantı kurulamadı" + +msgid "Unable to connect to the database" +msgstr "Veritabanı baÄŸlantısı kurulamadı" + +#, c-format +msgid "Unable to copy %s to %s: %s" +msgstr "%s, %s üzerine kopyalanamadı: %s" + +#, c-format +msgid "Unable to copy directory %s to %s: %s" +msgstr "%s klasörü %s üzerine kopyalanamadı: %s" + +#, c-format +msgid "Unable to create %s: %s" +msgstr "%s oluÅŸturulamadı: %s" + +msgid "Unable to create a Reseller" +msgstr "Bayi Eklenemedi" + +msgid "Unable to create a User" +msgstr "Kullanıcı Eklenemedi" + +#, c-format +msgid "Unable to create backup directory (uid=%s)" +msgstr "Yedek klasörü oluÅŸturulamadı (uid=%s)" + +msgid "Unable to create database" +msgstr "Veritabanı eklenemedi" + +#, c-format +msgid "Unable to create directory %s" +msgstr "%s klasörü oluÅŸturulamadı" + +msgid "Unable to create new file" +msgstr "Yeni dosya oluÅŸturulamadı" + +msgid "Unable to create reverse IP lookup" +msgstr "Ters IP adresi bakma kaydı eklenemedi" + +msgid "Unable to create subdomain" +msgstr "Alt eki alanı eklenemedi" + +msgid "Unable to create user's data directory" +msgstr "Kullanıcının veri klasörü oluÅŸturulamadı" + +msgid "Unable to create zone" +msgstr "Bölge eklenemedi" + +msgid "Unable to create zone." +msgstr "Bölge eklenemedi." + +#, c-format +msgid "Unable to delete %s: %s" +msgstr "%s silinemedi: %s" + +#, c-format +msgid "Unable to delete directory %s: %s" +msgstr "%s klasörü silinemedi: %s" + +msgid "Unable to delete files" +msgstr "Dosyalar silinemedi" + +msgid "Unable to delete the main email account" +msgstr "Ana e-posta hesabı silinemez" + +msgid "Unable to delete the reseller's ip.list file." +msgstr "Bayinin ip.list dosyası silinemedi." + +msgid "Unable to delete users's domains directory" +msgstr "Kullanıcının domains klasörü silinemedi" + +msgid "Unable to download backup" +msgstr "Yedek dosyası indirilemedi" + +msgid "Unable to edit file" +msgstr "Dosya düzenlenemiyor" + +msgid "Unable to execute your command" +msgstr "Komutunuz yürütülemedi" + +msgid "Unable to execute your request" +msgstr "İsteÄŸiniz yerine getirilemedi" + +msgid "Unable to export packages" +msgstr "Paketler dışa aktarılamadı" + +#, c-format +msgid "Unable to extract %s from" +msgstr "Åžuradan %s dosyası ayıklanamadı" + +msgid "Unable to extract user.conf, reseller.conf or ip.list from" +msgstr "Åžuradan user.conf, reseller.conf ya da ip.list dosyası ayıklanamadı" + +#, c-format +msgid "Unable to find %s" +msgstr "%s bulunamadı" + +#, c-format +msgid "Unable to find %s to create mysql backup" +msgstr "Mysql yedeÄŸi oluÅŸturulacak %s bulunamadı" + +#, c-format +msgid "Unable to find %s to extract mysql backup" +msgstr "Mysql yedeÄŸinin ayıklanacağı %s bulunamadı" + +msgid "Unable to find CA certificate" +msgstr "Sertifika saÄŸlayıcı sertifikası bulunamadı" + +msgid "Unable to find certificate" +msgstr "Sertifika bulunamadı" + +msgid "Unable to find key" +msgstr "Anahtar bulunamadı" + +msgid "Unable to generate a random username for login" +msgstr "Oturum açmak için rastgele bir kullanıcı adı üretilemedi" + +#, c-format +msgid "Unable to get file stats on %s" +msgstr "%s dosyasının istatistikleri alınamadı" + +#, c-format +msgid "Unable to get lock on %s" +msgstr "%s kilit durumu alınamadı" + +#, c-format +msgid "Unable to get privileges for %s: %s" +msgstr "%s için izinler alınamadı: %s" + +msgid "Unable to get the user's crypted password for the ftp passwd file" +msgstr "FTP parola dosyası için kullanıcının ÅŸifrelenmiÅŸ parolası alınamadı" + +#, c-format +msgid "Unable to lock %s area" +msgstr "%s alanı kilitlenemedi" + +#, c-format +msgid "Unable to lock %s: %s" +msgstr "%s kilitlenemedi: %s" + +#, c-format +msgid "Unable to lock the '%s' account actions" +msgstr "'%s' hesabının iÅŸlemleri kilitlenemedi" + +#, c-format +msgid "Unable to lock user %s: %s" +msgstr "%s kullanıcısı kilitlenemedi: %s" + +msgid "Unable to modify that domain" +msgstr "Bu etki alanı deÄŸiÅŸtirilemiyor" + +#, c-format +msgid "Unable to open %s for appending" +msgstr "%s eklenmek üzere açılamadı" + +#, c-format +msgid "Unable to open %s for appending: %s" +msgstr "%s eklenmek üzere açılamadı: %s" + +#, c-format +msgid "Unable to open %s for reading" +msgstr "%s okunmak üzere açılamadı" + +#, c-format +msgid "Unable to open %s for writing: %s" +msgstr "%s yazılmak üzere açılamadı: %s" + +#, c-format +msgid "Unable to open %s to restore the databases" +msgstr "%s veritabanlarını geri yüklemek için açılamadı" + +#, c-format +msgid "Unable to open %s: %s" +msgstr "%s açılamadı: %s" + +msgid "Unable to open a socket" +msgstr "Bir soket açılamadı" + +#, c-format +msgid "Unable to open ca certificate file (%s) to write to: %s" +msgstr "" +"Sertifika saÄŸlayıcı sertifika dosyası (%s) yazılmak üzere açılamadı: %s" + +#, c-format +msgid "Unable to open certificate file (%s) to write to: %s" +msgstr "Sertifika dosyası (%s) yazılmak üzere açılamadı: %s" + +#, c-format +msgid "Unable to open directory %s: %s" +msgstr "%s klasörü açılamadı: %s" + +#, c-format +msgid "Unable to parse %s from script '%s '(%s) output:" +msgstr "%s iÅŸlenemedi %s '(%s) betiÄŸinin çıktısında:" + +#, c-format +msgid "Unable to read %s as account %s" +msgstr "%s hesabı %s olarak okunaması" + +#, c-format +msgid "Unable to read %s's user files" +msgstr "%s kullanıcısının dosyaları okunamadı" + +#, c-format +msgid "Unable to read %s. This file is only created after a tally is run." +msgstr "%s okunamadı. Bu dosya yalnız hesaplama yapıldıktan sonra oluÅŸturulur." + +#, c-format +msgid "" +"Unable to read %s. This file is only created when emails are delivered." +msgstr "%s okunamadı. Bu dosya yalnız e-postalar gönderilirken oluÅŸturulur." + +#, c-format +msgid "Unable to read %s: %s" +msgstr "%s okunamadı: %s" + +#, c-format +msgid "Unable to read DS file %s" +msgstr "%s DS dosyası okunamadı" + +msgid "Unable to read History File." +msgstr "GeçmiÅŸ kayıtları dosyası okunamadı." + +#, c-format +msgid "Unable to read RoundCube backup script: %s" +msgstr "RoundCube yedekleme betiÄŸi okunamadı: %s" + +#, c-format +msgid "Unable to read RoundCube restore script: %s" +msgstr "RoundCube geri yükleme betiÄŸi okunamadı: %s" + +#, c-format +msgid "Unable to read data from %s" +msgstr "%s üzerinden veriler okunamadı" + +msgid "Unable to read directatdmin.conf" +msgstr "directatdmin.conf dosyası okunamadı" + +msgid "Unable to read domain configuration files" +msgstr "Etki alanı yapılandırma dosyaları okunamadı" + +msgid "Unable to read package" +msgstr "Paket okunamadı" + +msgid "Unable to read system uptime" +msgstr "Sistemin çalışma süresi alınamadı" + +#, c-format +msgid "Unable to read the %s file. Make sure it exists." +msgstr "%s dosyası okunamadı. Dosyanın var olduÄŸundan emin olun." + +msgid "Unable to read the cliboard file" +msgstr "Pano dosyası okunamadı" + +msgid "Unable to read the system ftp passwd file to add the user to it." +msgstr "Kullanıcı eklemek için sistem FTP parola dosyası okunamadı." + +msgid "Unable to read the system ftp passwd file to remove the system ftp user" +msgstr "" +"Sistem FTP kullanıcısını silmek için sistem FTP parola dosyası okunamadı" + +msgid "Unable to read the user's files" +msgstr "Kullanıcının dosyaları okunamadı" + +msgid "Unable to read ticket config file" +msgstr "Destek kaydı yapılandırma dosyası okunamadı" + +msgid "Unable to read zone file to increase serial" +msgstr "Seri numarasını arttırmak için bölge dosyası okunamadı" + +#, c-format +msgid "Unable to read zonefile for %s" +msgstr "%s bölge dosyası okunamadı" + +msgid "Unable to reboot" +msgstr "Yeniden baÅŸlatılamadı" + +msgid "Unable to remove IP(s)" +msgstr "IP adres(ler)i silinemedi" + +msgid "Unable to remove Unix User." +msgstr "Unix kullanıcısı silinemedi." + +msgid "Unable to remove all the of the reseller's users" +msgstr "Bayinin tüm kullanıcıları silinemedi" + +#, c-format +msgid "Unable to rename %s to %s: %s" +msgstr "%s, %s olarak yeniden adlandırılamadı: %s" + +#, c-format +msgid "Unable to restore %s to %s: %s" +msgstr "%s, %s üzerine geri yüklenemedi: %s" + +#, c-format +msgid "" +"Unable to restore '%s' because the Reseller or Admin '%s' cannot be found. " +"Rename the file if needed." +msgstr "" +"'%s' hesabı '%s' bayi ya da yönetici hesabı bulunamadığından geri " +"yüklenemedi. Gerekiyorsa dosyayı yeniden adlandırın." + +msgid "Unable to restore database" +msgstr "Veritabanı geri yüklenemedi" + +msgid "Unable to satisfy difficult password check." +msgstr "Parola zorluk derecesi koÅŸulu saÄŸlanamadı." + +msgid "Unable to save dns zone: named-checkzone returned:" +msgstr "DNS bölgesi kaydedilemedi: named-checkzone sonucu:" + +msgid "Unable to save your changes" +msgstr "DeÄŸiÅŸiklikler kaydedilemedi" + +msgid "Unable to set bandwidth" +msgstr "Bant geniÅŸliÄŸi ayarlanamadı" + +msgid "Unable to set file permissions" +msgstr "Dosya izinleri ayarlanamadı" + +#, c-format +msgid "Unable to set ip %s to be nameserver. Continuing anyway." +msgstr "%s ip adresi ad sunucusu olarak ayarlanamadı. Gene de devam ediliyor." + +msgid "Unable to set password" +msgstr "Parola ayarlanamadı" + +msgid "Unable to set quota" +msgstr "Kota ayarlanamadı" + +msgid "Unable to set stats link" +msgstr "İstatistikler baÄŸlantısı ayarlanamadı" + +msgid "Unable to set the E-Mail Limit" +msgstr "E-posta sınırı kaydedilemedi" + +msgid "Unable to set the shell" +msgstr "Kabuk ayarlanamadı" + +msgid "Unable to show Admin History" +msgstr "Yönetici geçmiÅŸi görüntülenemiyor" + +msgid "Unable to show Reseller History" +msgstr "Bayi geçmiÅŸi görüntülenemiyor" + +msgid "Unable to show User History" +msgstr "Kullanıcı geçmiÅŸi görüntülenemiyor" + +msgid "Unable to show current E-Mail usage" +msgstr "Güncel e-posta kullanımı görüntülenemiyor" + +msgid "Unable to show the system information" +msgstr "Sistem bilgileri görüntülenemiyor" + +#, c-format +msgid "Unable to trash %s to %s: %s" +msgstr "%s, %s üzerine çöpe atılamadı: %s" + +#, c-format +msgid "Unable to unlock user %s: %s" +msgstr "%s kullanıcısının kilidi açılamadı: %s" + +msgid "Unable to update your Disk Usage" +msgstr "Disk kullanımınız güncellenemedi" + +msgid "Unable to use that new domain name" +msgstr "Bu yeni etki alanı adı kullanılamaz" + +#, c-format +msgid "Unable to write %s's user files" +msgstr "%s kullanıcı dosyalarına yazılamadı" + +#, c-format +msgid "Unable to write %s: %s" +msgstr "%s yazılamadı: %s" + +msgid "Unable to write User's httpd.conf" +msgstr "Kullanıcının httpd.conf dosyasına yazılamadı" + +msgid "Unable to write reseller's IP list" +msgstr "Bayinin IP adresi listesine yazılamadı" + +msgid "Unable to write the domain config file" +msgstr "Etki alanı yapılandırma dosyasına yazılamadı" + +msgid "" +"Unable to write the main ftp password file. Your changes will not take " +"effect." +msgstr "" +"Ana FTP parola dosyasına yazılamadı. DeÄŸiÅŸiklikleriniz etkili olmayacak." + +#, c-format +msgid "" +"Unable to write the quota file. Let your administartor know that %s is " +"unwriteable." +msgstr "" +"Kota dosyasına yazılamadı. Yöneticinize %s dosyasına yazılamadığını bildirin." + +msgid "" +"Unable to write the system ftp passwd file to remove the system ftp user" +msgstr "" +"Sistem FTP kullanıcısını silmek için sistem FTP parola dosyasına yazılamadı" + +#, c-format +msgid "" +"Unable to write the usage.cache file. Let your administartor know that %s is " +"unwriteable." +msgstr "" +"usage.cache dosyasına yazılamadı. Yöneticinize %s dosyasına yazılamadığını " +"bildirin." + +msgid "Unable to write ticket config" +msgstr "Destek kaydı yapılandırma dosyasına yazılamadı" + +#, c-format +msgid "" +"Unable to write to the password file. Let your administrator know that %s is " +"unwritable." +msgstr "" +"Parola dosyasına yazılamadı. Yöneticinize %s dosyasına yazılamadığını " +"bildirin." + +msgid "Unable to write to the system ftp passwd file to add the user to it." +msgstr "Kullanıcıyı eklemek için sistem FTP parola dosyasına yazılamadı." + +msgid "Unable to write zone file to increase serial" +msgstr "Seri numarasını arttırmak için bölge dosyasına yazılamadı" + +#, c-format +msgid "Unable to write zonefile for %s" +msgstr "%s bölge dosyasına yazılamadı" + +msgid "Unblock" +msgstr "Engellemeyi Kaldır" + +msgid "Unblocking is disabled." +msgstr "Engellemeyi kaldırma özelliÄŸi devre dışı bırakılmış." + +msgid "" +"Unchecking will immediately delete the file from disk and cannot be recovered" +msgstr "" +"Bu iÅŸaret kaldırıldığında dosya diskten tamamen silinir ve geri alınamaz" + +msgid "Unhandled exception name" +msgstr "İşlenmemiÅŸ istisna adı" + +#, c-format +msgid "Unhandled route %s value '%s'" +msgstr "%s yöneltmesi '%s' deÄŸeriyle iÅŸlenemedi" + +msgid "Unix User created successfully" +msgstr "Unix kullanıcısı sunucuya eklendi" + +msgid "Unix User removed from the server" +msgstr "Unix kullanıcısı sunucudan silindi" + +msgid "Unix proxy IP/port should not have any of path, query or hash" +msgstr "" +"Unix vekil sunucu IP adresi ve kapı numarasının herhangi bir yolu, sırası ya " +"da karması olmamalıdır" + +#, fuzzy, c-format +#| msgid "Unknown option '%s'" +msgid "Unknown '%s'" +msgstr "İşlem '%s' bilinmiyor" + +msgid "Unknown action" +msgstr "İşlem bilinmiyor" + +msgid "Unknown backup destination" +msgstr "Yedekleme hedefi bilinmiyor" + +msgid "Unknown certificate type. Only server, create and paste are allowed" +msgstr "" +"Sertifika türü bilinmiyor. Yalnız sunucu, oluÅŸturma ve yapıştırma " +"seçeneklerine izin veriliyor" + +msgid "Unknown ftp type" +msgstr "FTP türü bilinmiyor" + +#, c-format +msgid "Unknown option '%s'" +msgstr "İşlem '%s' bilinmiyor" + +#, c-format +msgid "Unknown value for %s" +msgstr "%s deÄŸeri bilinmiyor" + +msgid "Unlimited" +msgstr "Sınırsız" + +msgid "Unsuspend" +msgstr "Askıdan İndir" + +msgid "" +"Until the cache is created, the values may not be correct. Refresh the page " +"in 1 minute." +msgstr "" +"Ön bellek oluÅŸturulana kadar deÄŸerler doÄŸru olmayabilir. 1 dakika sonra " +"sayfayı yenileyin." + +msgid "Up a Level" +msgstr "Üste Çık" + +msgid "Update" +msgstr "Update" + +msgid "Update Successful" +msgstr "Güncellendi" + +msgid "Update queued" +msgstr "Güncelleme iÅŸlemi sıraya alındı" + +msgid "Upload successful" +msgstr "Yüklendi" + +#, c-format +msgid "Uploaded %s value is not valid json" +msgstr "Yüklenen %s deÄŸeri geçerli bir Json deÄŸil" + +msgid "Uploaded file is not valid for copy" +msgstr "Yüklenen dosyalar kopyalanmaya uygun deÄŸil" + +#, c-format +msgid "Uploaded: %s" +msgstr "Yüklenen: %s" + +msgid "" +"Uploading files has been disabled with the filemanager_disable_features " +"option" +msgstr "" +"Dosyaları yükleme özelliÄŸi filemanager_disable_features seçeneÄŸi ile devre " +"dışı bırakılmış" + +msgid "Usage (Meg)" +msgstr "Kullanım (MB)" + +msgid "Usage Log" +msgstr "Kullanım Günlüğü" + +msgid "Usage statistics have not yet been collected for this account" +msgstr "Bu hesap için kullanım istatistikleri henüz derlenmemiÅŸ" + +#, c-format +msgid "Use%%" +msgstr "Kullanım Yüzdesi" + +msgid "Used" +msgstr "Kullanılan" + +msgid "User" +msgstr "Kullanıcı" + +#, c-format +msgid "User %s Removed" +msgstr "%s Kullanıcısı Silindi" + +#, c-format +msgid "User %s already exists. Please chose a different username." +msgstr "%s kullanıcısı zaten var. Lütfen farklı bir kullanıcı adı seçin." + +#, c-format +msgid "User %s created" +msgstr "%s kullanıcısı eklendi" + +#, c-format +msgid "User %s did not exist on the server. Removing it from your list." +msgstr "%s kullanıcısı sunucu üzerinde bulunamadı. Listenizden kaldırılıyor." + +#, c-format +msgid "User %s does not exist on the system." +msgstr "%s kullanıcısı sistem üzerinde bulunamadı." + +#, c-format +msgid "User %s exists on the system but is not in your User list" +msgstr "" +"%s kullanıcısı sistem üzerinde var ancak sizin kullanıcı listenizde yok" + +#, c-format +msgid "User %s has been added to your database. Use the following values:" +msgstr "" +"%s kullanıcısı veritabanınıza eklendi. Åžu bilgiler ile kullanabilirsiniz:" + +#, c-format +msgid "User %s has been backed up." +msgstr "%s kullanıcısı yedeklendi." + +#, c-format +msgid "User %s has been restored" +msgstr "%s kullanıcısı geri yüklendi" + +#, c-format +msgid "User %s has been updated. Use the following values:" +msgstr "%s kullanıcısı güncellendi. Åžu bilgiler ile kullanabilirsiniz:" + +#, c-format +msgid "User %s has one or more hard links in their path:" +msgstr "%s kullanıcısının klasör yolunda bir ya da bir kaç hard link var:" + +#, c-format +msgid "User %s is already suspended" +msgstr "%s kullanıcısı zaten askıya alınmış" + +#, c-format +msgid "User %s is already unsuspended" +msgstr "%s kullanıcısı zaten askıdan indirilmiÅŸ" + +#, c-format +msgid "User %s is not on your list. You cannot make a backup for him." +msgstr "%s kullanıcısı listenizde yok. Bu kullanıcıyı yedekleyemezsiniz." + +#, c-format +msgid "User %s is not on your list. You cannot make a backup for them." +msgstr "%s kullanıcısı listenizde yok. Bu kullanıcıları yedekleyemezsiniz." + +#, c-format +msgid "User %s not deleted. Unable to delete all of their users." +msgstr "%s kullanıcısı silinemedi. Tüm kullanıcıları da silinemedi." + +#, c-format +msgid "User %s was not created by you-> Not Deleted." +msgstr "%s kullanıcısı sizin tarafınızdan eklenmemiÅŸ olduÄŸundan silinmedi." + +#, c-format +msgid "User %s was suspended in the backup. Account suspended." +msgstr "Yedekteki %s kullanıcısı askıya alınmış. Hesap askıya alındı." + +#, c-format +msgid "User %s was suspended in the backup. Error suspending the account:" +msgstr "" +"Yedekteki %s kullanıcısı askıya alınmış. Hesap askıya alınırken sorun çıktı:" + +#, c-format +msgid "User '%s' does not exist" +msgstr "'%s' kullanıcısı bulunamadı" + +msgid "User Acconts" +msgstr "Kullanıcı Hesapları" + +msgid "User Accounts" +msgstr "Kullanıcı Hesapları" + +msgid "User Bandwidth" +msgstr "Kullanıcı Bant GeniÅŸliÄŸi" + +msgid "User Comment Box" +msgstr "Kullanıcı Açıklaması Alanı" + +msgid "User DNSSEC Control is disabled" +msgstr "Kullanıcı DNSSEC Yönetimi devre dışı bırakılmış" + +msgid "User Disk Quota" +msgstr "Kullanıcı Disk Kotası" + +msgid "User History" +msgstr "Kullanıcı GeçmiÅŸi" + +msgid "User Modified" +msgstr "Kullanıcı bilgileri güncellendi" + +msgid "User Resource Limits" +msgstr "Kullanıcı Kaynak Sınırları" + +msgid "User SMTP Logs are are not enabled" +msgstr "Kullanıcı SMTP günlüğü etkinleÅŸtirilmemiÅŸ" + +msgid "User Updated" +msgstr "Kullanıcı Güncellendi" + +msgid "User added to SSH config file successfully" +msgstr "Kullanıcı SSH yapılandırma dosyasına eklendi" + +msgid "User added to database" +msgstr "Kullanıcı veritabanına eklendi" + +msgid "User added to named.conf file successfully" +msgstr "Kullanıcı named.conf dosyasına eklendi" + +msgid "User added to ssh config file." +msgstr "Kullanıcı SSH yapılandırma dosyasına eklendi." + +msgid "User backups have been disabled." +msgstr "Kullanıcı yedekleme özelliÄŸi devre dışı bırakılmış." + +msgid "User config file updated." +msgstr "Kullanıcının yapılandırma dosyası güncellendi." + +msgid "User does not exist" +msgstr "Kullanıcı bulunamadı" + +msgid "User password changed, however the account is still suspended" +msgstr "Kullanıcı parolası güncellendi ancak hesap hala askıda" + +msgid "User removed from SSH" +msgstr "Kullanıcının SSH eriÅŸimi kaldırıldı" + +msgid "User's System Quotas set" +msgstr "Kullanıcının sistem kotaları ayarlandı" + +msgid "User's config files deleted" +msgstr "Kullanıcının yapılandırma dosyaları silindi" + +msgid "User's data directory created successfully" +msgstr "Kullanıcının veri klasörü oluÅŸturuldu" + +msgid "User's data directory removed." +msgstr "Kullanıcının veri klasörü silindi." + +msgid "User(s)" +msgstr "Kullanıcılar" + +msgid "User::get_all_widgets: Invalid level" +msgstr "Kullanıcı::get_all_widgets: Düzey geçersiz" + +#, c-format +msgid "UserDir: %s" +msgstr "Kullanıcı Klasörü: %s" + +msgid "Username" +msgstr "Kullanıcı Adı" + +#, c-format +msgid "Username '%s' is too long. Length %d > max_username_length=%d" +msgstr "'%s' kullanıcı adı çok uzun. Uzunluk %d > max_username_length=%d" + +msgid "Username is too short. It must be at least 2 characters long." +msgstr "Kullanıcı adı çok kısa. En az 2 karakter uzunluÄŸunda olmalıdır." + +msgid "" +"Username must be Alphanumeric (a-z, A-Z, 0-9), with the first character " +"being a letter" +msgstr "" +"Kullanıcı adı alfasayısal (a-z, A-Z, 0-9) olmalı ve ilk karakteri bir harf " +"olmalıdır" + +msgid "Username:" +msgstr "Kullanıcı Adı:" + +msgid "Users" +msgstr "Kullanıcılar" + +msgid "Users deleted" +msgstr "Kullanıcılar silindi" + +msgid "Users will be deleted in the background." +msgstr "Kullanıcılar arka planda silinecek." + +msgid "Users's domains directory removed." +msgstr "Kullanıcının domains klasörü silindi." + +msgid "Usertype" +msgstr "Kullanıcı Türü" + +msgid "Uses" +msgstr "Kullanım" + +#, c-format +msgid "Using path %s is not allowed." +msgstr "%s yolunun kullanılmasına izin verilmiyor." + +msgid "Vacation Account" +msgstr "Tatildeki Hesap" + +msgid "Vacation Message Deleted" +msgstr "Tatil bildirimi silindi" + +msgid "Vacation Message set" +msgstr "Tatil bildirimi ayarlandı" + +msgid "Vacation Message updated" +msgstr "Tatil bildirimi güncellendi" + +msgid "Vacation Messages" +msgstr "Tatil Bildirimleri" + +msgid "Valid" +msgstr "Geçerli" + +msgid "Valid broadcast address set." +msgstr "Geçerli broadcast adresi ayarlanmış." + +msgid "Value" +msgstr "DeÄŸer" + +#, c-format +msgid "Value is too long. Max=%d" +msgstr "DeÄŸer çok uzun. En fazla=%d" + +msgid "Variable 'ip' is missing from the submission" +msgstr "Gönderilen bilgide 'ip' deÄŸiÅŸkeni eksik" + +msgid "Vendor ID" +msgstr "Üretici Kodu" + +msgid "Verify" +msgstr "DoÄŸrula" + +msgid "View" +msgstr "Görüntüle" + +msgid "View Clipboard" +msgstr "Panoyu Görüntüle" + +msgid "View previous sort" +msgstr "Önceki sıralamayı görüntüle" + +msgid "Warning from named-checkzone:" +msgstr "named-checkzone uyarısı:" + +#, c-format +msgid "" +"Warning: %s has a valid password for %s but failed the Two-Step " +"Authentication code %s times." +msgstr "" +"Uyarı: %s, %s için geçerli bir parola yazdı ancak İki AÅŸamalı Kimlik " +"DoÄŸrulaması kodunu %s kez yanlış yazdı." + +#, c-format +msgid "" +"Warning: %s has a valid password for %s but failed the security questions %s " +"times." +msgstr "" +"Uyarı: %s parolası %s için geçerli ancak güvenlik sorusu %s kez yanlış " +"yanıtlandı." + +msgid "Warning: Quota limit reached. File(s) may be empty." +msgstr "Uyarı: Kota sınırına ulaşıldı. Dosya(lar) boÅŸ olabilir." + +msgid "Warning: Saved filesize is less than uploaded filesize. Check quotas." +msgstr "" +"Uyarı: Kaydedilen dosyanın boyutu yüklenen dosyanın boyutundan küçük. Kota " +"sınırlarını denetleyin." + +msgid "Warning: The system load average is" +msgstr "Uyarı: Sistem yükü ortalaması" + +#, c-format +msgid "We've only read %lld of the %lld byte file from %s" +msgstr "Dosyanın yalnız %lld / %lld baytı okundu. Dosya: %s" + +msgid "Webalizer" +msgstr "Webalizer" + +msgid "Webmail" +msgstr "Web Posta" + +msgid "Webmail Attachments" +msgstr "Web Posta Ek Dosyaları" + +msgid "Webmail SSO" +msgstr "Web Posta Tek Oturum Açma" + +msgid "Week of Month" +msgstr "Ayın Haftası" + +#, c-format +msgid "Weekly Rate limit of %d for '%s' has been reached" +msgstr "" + +#, c-format +msgid "Welcome to %s" +msgstr "%s hoÅŸ geldiniz" + +msgid "What" +msgstr "Neyi" + +msgid "What is the first name of the boy or girl that you first kissed?" +msgstr "İlk evinizin sokağı hangisiydi?" + +msgid "What is the middle name of your oldest child?" +msgstr "En büyük çocuÄŸunuzun ikinci adı nedir?" + +msgid "What is the name of a college you applied to but didn't attend?" +msgstr "Gitmek isteyip gidemediÄŸiniz etkinlik hangisiydi?" + +msgid "What is the name of the place your wedding reception was held?" +msgstr "Düğününüzün yapıldığı yerin adı neydi?" + +msgid "What is the name of your favorite childhood friend?" +msgstr "En iyi çocukluk arkadaşınızın adı nedir?" + +msgid "What is your maternal grandmother's maiden name" +msgstr "Anneannenizin kızlık soyadı nedir?" + +msgid "" +"What is your oldest brother's birthday month and year? (e.g: January 1970)" +msgstr "En büyük kardeÅŸinizin doÄŸum ayı ve yılı nedir? (Örnek: Ocak 1990)" + +msgid "What is your oldest cousin's first and last name?" +msgstr "En büyük kuzeninizin adı ve soyadı nedir?" + +msgid "" +"What is your oldest sibling's birthday month and year? (e.g: January 1970)" +msgstr "En büyük kardeÅŸinizin doÄŸum ayı ve yılı nedir? (Örnek: Ocak 1990)" + +msgid "What is your oldest sibling's middle name?" +msgstr "En büyük kardeÅŸinizin ikinci adı nedir?" + +msgid "What school did you attend for sixth grade?" +msgstr "6. sınıfta hangi okula gidiyordunuz?" + +msgid "What street did you live on in third grade?" +msgstr "3. sınıftayken hangi sokakta oturuyordunuz?" + +msgid "What was the last name of your third grade teacher?" +msgstr "3. sınıftaki öğretmeninizin adı neydi?" + +msgid "What was the name of your first stuffed animal?" +msgstr "İlk evcil hayvanınızın adı neydi?" + +msgid "What was your childhood nickname?" +msgstr "Çocukluktaki takma adınız neydi?" + +msgid "" +"What was your childhood phone number including area code? (e.g: 000-000-0000)" +msgstr "" +"ÇocukluÄŸunuzdaki telefon numaranız bölge koduyla birlikte neydi? (Örnek: " +"000-000-0000)" + +msgid "When" +msgstr "Ne Zaman" + +msgid "Where" +msgstr "Nereye" + +msgid "Where were you when you had your first kiss?" +msgstr "Satın aldığınız ilk müzik hangisiydi?" + +msgid "Who" +msgstr "Kimi" + +#, c-format +msgid "Widget '%s' is not available" +msgstr "'%s' pano bileÅŸeni kullanılamıyor" + +msgid "Widgets are not enabled in this account level" +msgstr "Bu hesap düzeyi için pano bileÅŸenleri etkinleÅŸtirilmemiÅŸ" + +msgid "Wildcard" +msgstr "Genel Arama" + +msgid "With Selected" +msgstr "SeçilmiÅŸi" + +msgid "With selected" +msgstr "SeçilmiÅŸleri" + +#, c-format +msgid "Won't activate %s's account because its off" +msgstr "Kapalı olduÄŸundan %s kullanıcısının hesabı etkinleÅŸtirilemedi" + +#, c-format +msgid "Write error with %s: %s" +msgstr "%s yazılırken sorun çıktı: %s" + +msgid "Wrong Answer." +msgstr "Yanıt hatalı." + +#, c-format +msgid "Wrong Answer. You have %d more attempt.%s" +msgid_plural "Wrong Answer. You have %d more attempts.%s" +msgstr[0] "Yanıt Hatalı. %d deneme hakkınız kaldı.%s" +msgstr[1] "Yanıt Hatalı. %d deneme hakkınız kaldı.%s" + +#, c-format +msgid "Wrong Answer. You have %d more attempts.%s" +msgstr "Yanıt hatalı. %d deneme hakkınız kaldı. %s" + +#, c-format +msgid "Wrong number of '%s' elements. Allowed: 1, or 2 with '%s')" +msgstr "'%s' bileÅŸenlerinin sayısı yanlış. İzin verilen: 1 ya da '%s' ile 2)" + +#, c-format +msgid "Wrong number of 'pass' values: %d in '%s' (slash separated)" +msgstr "'pass' deÄŸerlerinin sayısı yanlış: %d '%s' içinde (/ ile ayrılmış)" + +msgid "Yes" +msgstr "Evet" + +#, c-format +msgid "" +"You are deleting Admin or Reseller accounts that have %d User under their " +"control." +msgid_plural "" +"You are deleting Admin or Reseller accounts that have %d Users under their " +"control." +msgstr[0] "" +"Altında %d kullanıcı olan bir Yönetici ya da Bayi hesabını silmek " +"istiyorsunuz." +msgstr[1] "" +"Altında %d kullanıcı olan bir Yönetici ya da Bayi hesabını silmek " +"istiyorsunuz." + +msgid "You are not allowed to enable anonymous ftp" +msgstr "Anonim FTP özelliÄŸini etkinleÅŸtirme izniniz yok" + +msgid "You are not allowed to modify your ssl settings" +msgstr "SSL ayarlarınızı düzenleme izniniz yok" + +msgid "You are not logged in from a master account" +msgstr "Bir ana hesap ile oturum açmamışsınız" + +msgid "You aren't allowed to modify that ticket" +msgstr "Bu destek kaydını düzenleme izniniz yok" + +#, c-format +msgid "" +"You can click the E-Mail below to be immediately logged into %s as this " +"User, without knowing their password." +msgstr "" +"Parolasını öğrenmeye gerek kalmadan, bu Kullanıcı olarak %s oturumu açmak " +"için aÅŸağıdaki e-posta üzerine tıklayabilirsiniz." + +msgid "You can only add a certificate if you own the ip you are using" +msgstr "" +"Yalnız kullandığınız IP adresinin sahibi iseniz bir sertifika " +"ekleyebilirsiniz" + +msgid "You can only add a certificate to your main domain" +msgstr "Yalnız ana etki alanı için bir sertifika ekleyebilirsiniz" + +msgid "You can't make a list named majordomo as its a reserved alias" +msgstr "" +"majordomo takma adı sistem tarafından ayrılmış olduÄŸundan liste adı olarak " +"kullanılamaz" + +msgid "You can't suspend root. That would be BAD" +msgstr "root kullanıcısı askıya alınamaz. Bu KÖTÜ bir fikir" + +msgid "You cannot add that extension" +msgstr "Bu uzantıyı ekleyemezsiniz" + +msgid "You cannot assign the domain more bandwidth than your account" +msgstr "Etki alanının bant geniÅŸliÄŸi hesabınızın sınırından fazla olamaz" + +msgid "You cannot assign the domain more quota than your account" +msgstr "Etki alanının kotası hesabınızın sınırından fazla olamaz" + +msgid "You cannot create more Users than you are allowed domains." +msgstr "" +"İzin verilen etki alanı sayısından daha fazla kullanıcı ekleyemezsiniz." + +msgid "You cannot delete all of your IPs" +msgstr "Tüm IP adreslerinizi silemezsiniz" + +#, c-format +msgid "" +"You cannot delete the account %s because it is linked to your system account" +msgstr "%s hesabı sistem hesabınız ile baÄŸlantılı olduÄŸundan silinemez" + +#, c-format +msgid "You cannot delete yourself (%s)" +msgstr "Kendinizi silemezsiniz (%s)" + +msgid "You cannot execute that command" +msgstr "Bu komutu yürütemezsiniz" + +msgid "You cannot login as yourself" +msgstr "Kendiniz olarak oturum açamazsınız" + +msgid "You cannot modify yourself" +msgstr "Kendi hesabınızı deÄŸiÅŸtiremezsiniz" + +msgid "" +"You cannot restore multiple Users on one free IP. The IP must first be " +"shared." +msgstr "" +"Bir serbest IP adresi üzerine birden çok kullanıcıyı geri yükleyemezsiniz. " +"Önce IP adresi paylaşılmalıdır." + +msgid "You cannot set an unlimited send limit." +msgstr "Gönderim sınırını sınırsız olarak ayarlayamazsınız." + +msgid "You cannot suspend yourself" +msgstr "Kendi kendinizi askıya alamazsınız" + +msgid "You cannot suspend/unsuspend yourself" +msgstr "Kendinizi askıya alıp askıdan indiremezsiniz" + +msgid "You cannot unsuspend this account." +msgstr "Bu hesabı askıdan indiremezsiniz." + +msgid "" +"You cannot use that domain as a pointer. It already exists on the server" +msgstr "" +"Zaten sunucu üzerinde bulunduÄŸundan bu etki alanı yönlendirme için " +"kullanılamaz" + +#, c-format +msgid "You currently have %s Users and a maximum of %s domains." +msgstr "Åžu anda %s kullanıcınız ve %s etki alanınız var." + +msgid "You did not select any domains to modify" +msgstr "Düzenlenecek bir etki alanı seçilmemiÅŸ" + +msgid "You didn't chose a different ip, no changes have been made" +msgstr "" +"Farklı bir IP adresi belirtmediÄŸinizden herhangi bir deÄŸiÅŸiklik yapılmadı" + +msgid "You didn't select anyone to send it to" +msgstr "Bildirimin gönderileceÄŸi bir kiÅŸi seçilmemiÅŸ" + +msgid "You do not have control over user" +msgstr "Bu kullanıcıyı yönetme izniniz yok" + +msgid "You do not own any IPs" +msgstr "Atanmış bir IP adresiniz yok" + +msgid "You do not own that IP" +msgstr "Bu IP adresi size ait deÄŸil" + +msgid "You do not own that domain" +msgstr "Bu etki alanı sizin hesabınız altında deÄŸil" + +msgid "You do not own that ip" +msgstr "Bu IP adresi size ait deÄŸil" + +msgid "You do not own that that cron ID" +msgstr "Bu zamanlanmış görev kodu size ait deÄŸil" + +#, c-format +msgid "You do not own the IP %s. User %s will not be created" +msgstr "%s IP adresi size ait deÄŸil. %s kullanıcısı eklenmeyecek" + +msgid "You do not yet have any protected directories." +msgstr "Henüz korunmuÅŸ bir klasörünüz yok." + +msgid "You don't have authority over that User" +msgstr "Bu kullanıcı üzerinde bir yetkiniz yok" + +msgid "You don't have authority over that user" +msgstr "Bu kullanıcı üzerinde bir yetkiniz yok" + +msgid "You don't have permission to respond to that ticket" +msgstr "Bu destek kaydını yanıtlama izniniz yok" + +msgid "You don't have permission to restore user" +msgstr "Kullanıcıyı geri yükleme izniniz yok" + +msgid "You don't have permission to view that ticket" +msgstr "Bu destek kaydını görüntüleme izniniz yok" + +msgid "You forgot to include a filename" +msgstr "Bir dosya adı belirtmediniz" + +#, c-format +msgid "You have %d more attempt." +msgid_plural "You have %d more attempts." +msgstr[0] "%d deneme hakkınız kaldı." +msgstr[1] "%d deneme hakkınız kaldı." + +#, c-format +msgid "You have %d:%.2d left." +msgstr "%d:%.2d kaldı." + +msgid "You have already reached your assigned limit" +msgstr "Zaten hesabınıza atanmış sınırlara ulaÅŸtınız" + +msgid "You have not added any files to the clipboard." +msgstr "Panoya herhangi bir dosya ya da klasör eklememiÅŸsiniz." + +msgid "" +"You have not given the reseller any IP's. Unable to create an assigned IP " +"domain or any nameservers without any" +msgstr "" +"Bayiye bir IP adresi atanmamış. Bir IP adresi atanmadan, atanmış bir IP etki " +"alanı ya da ad sunucusu oluÅŸturulamaz" + +msgid "" +"You have not selected any Files. Please go back and select some before " +"restoring the backup." +msgstr "" +"Herhangi bir dosya seçilmemiÅŸ. Lütfen yedeÄŸi geri yüklemeden önce geri dönüp " +"geri yüklenecek dosyaları seçin." + +msgid "" +"You have not selected any Users. Please go back and select some before " +"creating the backup." +msgstr "" +"Henüz bir kullanıcı seçmemiÅŸsiniz. Lütfen yedeklemeye baÅŸlamadan önce geri " +"dönüp bazı kullanıcıları seçin." + +msgid "You have not selected any domains" +msgstr "Herhangi bir etki alanı seçilmemiÅŸ" + +msgid "" +"You have successfully issued a server reboot command. It may take a few " +"minutes for the system boot up and become live again." +msgstr "" +"Sunucuyu yeniden baÅŸlatma komutu verdiniz. Sistemin açılıp çalışmaya " +"baÅŸlaması bir kaç dakika sürebilir." + +#, c-format +msgid "" +"You have used %d%% of your disk usage, which is more than the allowed " +"threshold of %d%%." +msgstr "" +"Disk alanınızı %d%% bölümünü kullanıyorsunuz. Bu izin verilen %d%% " +"deÄŸerinden fazla." + +msgid "You may need to press F5 to reload the logo" +msgstr "Logoyu yeniden yüklemek için F5 tuÅŸuna basmanız gerekebilir" + +msgid "You may not use an IP for a domain name" +msgstr "Etki alanı adı olarak bir IP adresi kullanamazsınız" + +msgid "You must enter a chmod value. eg: 755" +msgstr "755 gibi bir chmod deÄŸeri yazmalısınız" + +msgid "You must enter a folder 'name'. eg: images" +msgstr "images gibi bir klasör 'adı' yazmalısınız" + +msgid "You must enter both password" +msgstr "Parolayı ve onayını yazmalısınız" + +msgid "You must enter number, user, subject, priority, status and message" +msgstr "Sayı, kullanıcı adı, konu, öncelik, durum ve içeriÄŸi yazmalısınız" + +msgid "You must enter the password in both fields" +msgstr "Parolayı iki alana da yazmalısınız" + +msgid "You must enter user, subject, priority and message" +msgstr "Kullanıcı adı, konu, öncelik ve içeriÄŸi yazmalısınız" + +msgid "You must first create some packages" +msgstr "Önce bazı paketler eklemelisiniz" + +msgid "You must first own an IP" +msgstr "Önce bir IP adresiniz olmalı" + +msgid "You must have at least one database to login to phpMyAdmin" +msgstr "phpMyAdmin oturumu açmak için en az bir veritabanınız olmalı" + +msgid "You must have more than 0 NS records or named may not start." +msgstr "" +"0 deÄŸerinden fazla ad sunucu kaydı olması gerekir yoksa named hizmeti " +"baÅŸlatılamaz." + +msgid "" +"You must provide 'required_hits' and 'required_hits_custom' if " +"'required_hits' is 'custom'" +msgstr "" +"'required_hits' seçeneÄŸi 'custom' ise 'required_hits' ve " +"'required_hits_custom' seçeneklerini belirtmelisiniz" + +msgid "You must provide a list name" +msgstr "Bir liste adı yazmalısınız" + +msgid "" +"You must provide a protected directory password prompt. eg: Member's Area" +msgstr "" +"Korunan klasör için 'Üyelere Özel' gibi bir parola uyarısı belirtmelisiniz" + +msgid "You must provide a valid domain, ip, ns1 and ns2" +msgstr "" +"Geçerli bir etki alanı, ip adresi, 1. ve 2. ad sunucusu deÄŸeri yazmalısınız" + +msgid "" +"You must provide a valid email address, oldpassword, password1 and password2" +msgstr "" +"Geçerli bir e-posta adresi, eski parola, yeni parola ve yeni parola onayını " +"yazmalısınız" + +msgid "" +"You must provide a valid ftp address, oldpassword, password1 and password2" +msgstr "" +"Geçerli bir FTP adresi, eski parola, yeni parola ve yeni parola onayını " +"yazmalısınız" + +msgid "You must provide a valid ip" +msgstr "Geçerli bir IP adresi yazmalısınız" + +msgid "You must provide a valid name and it must exist." +msgstr "Geçerli ve var olan bir ad yazmalısınız." + +msgid "You must provide a valid name and value" +msgstr "Geçerli bir ad ve deÄŸer yazmalısınız" + +msgid "You must provide the passwd variable" +msgstr "passwd deÄŸiÅŸkenini yazmalısınız" + +msgid "" +"You must select a nameserver ip pair (ns1.domain.com and ns2.domain.com)" +msgstr "" +"Bir ad sunucusu IP adresi çifti seçmelisiniz. (ns1.etkialani.com ve ns2." +"etkialani.com)" + +msgid "You must select at least one mailing list to delete" +msgstr "Silinecek bir e-posta listesi seçmelisiniz" + +msgid "You must select at least one mailing list to purge" +msgstr "BoÅŸaltılacak en az bir e-posta listesi seçmelisiniz" + +msgid "You must select exactly one key" +msgstr "Tam olarak bir anahtar seçmelisiniz" + +msgid "You must select something" +msgstr "Bir seçim yapmalısınız" + +msgid "" +"You must use a number for the hour (0-23). You can only have a cron run once " +"per day. (You can make more than one cron)" +msgstr "" +"Saat için bir sayı yazmalısınız (0-23). Zamanlanmış görevler günde yalnız " +"bir kez çalıştırılabilir. (Birden çok zamanlanmış görev kullanabilirsiniz)" + +msgid "" +"You must use a number for the minute (0-59). You can only have a cron run " +"once per day. (You can make more than one cron)" +msgstr "" +"Dakika için bir sayı yazmalısınız (0-59). Zamanlanmış görevler günde yalnız " +"bir kez çalıştırılabilir. (Birden çok zamanlanmış görev kullanabilirsiniz)" + +msgid "You must use a valid path" +msgstr "Geçerli bir yol kullanmalısınız" + +#, c-format +msgid "You must wait at least %d minute between updates." +msgid_plural "You must wait at least %d minutes between updates." +msgstr[0] "İki güncelleme arasında en az %d dakika beklemelisiniz." +msgstr[1] "İki güncelleme arasında en az %d dakika beklemelisiniz." + +msgid "You must wait for the stats to be computed." +msgstr "İstatistiklerin hesaplanması için beklemeniz gerekir." + +msgid "You need to specify a domain" +msgstr "Bir etki alanı belirtmelisiniz" + +msgid "You require a database name" +msgstr "Bir vertiabanı adı yazmalısınız" + +msgid "You require a domain, anon, anonup and a message" +msgstr "Bir etki alanı, anon, anonup ve bir ileti yazmalısınız" + +msgid "You require domain and passwd list to sync the accounts" +msgstr "Hesapları eÅŸitlemek için domain ve passwd listeleriniz gerekli" + +msgid "You require either the passwd or quota" +msgstr "Parola ya da kota deÄŸerini yazmalısınız" + +msgid "You require name, user, passwd and passwd2" +msgstr "Ad, kullanıcı adı, parola ve parola onayını yazmalısınız" + +msgid "You require the name and user" +msgstr "Ad ve kullanıcı adını yazmalısınız" + +msgid "You require the name, user, passwd and passwd2" +msgstr "name, user, passwd ve passwd2 bilgileri gerekli" + +msgid "" +"You require the source url path (eg: /redirect) and the destination url (eg: " +"www.redirect.com)" +msgstr "" +"Kaynak adresin yolunu (Örnek: /yol) ve hedef adresini (Örnek: www.yonlendir." +"com) yazmalısınız" + +msgid "You require user and domain to change a pop account" +msgstr "" +"Bir e-posta hesabını deÄŸiÅŸtirmek için kullanıcı adı ve etki alanını " +"belirtmelisiniz" + +msgid "You require user, domain and passwd to add a pop account" +msgstr "" +"Bir pop e-posta hesabı eklemek için kullanıcı adı, etki alanı ve parola " +"belirtmelisiniz" + +msgid "You required a password" +msgstr "Parolanızı yazın" + +msgid "You should be notified via the Message system when it is complete." +msgstr "İşlem tamamlandığında size bir bldirim gönderilecek." + +msgid "You will be notified via the Message System upon completion." +msgstr "İşlem tamamlandığında size bir bildirim gönderilecek." + +msgid "" +"You will be notified via the Message System when the process is complete" +msgstr "İşlem tamamlandığında size bir bildirim gönderilecek" + +msgid "You will receive a message when it's complete." +msgstr "İşlem tamamlandığında size bir bildirim gönderilecek." + +msgid "" +"You're using the login-as option, so use your own password. Not the User's " +"password." +msgstr "" +"Kullanıcı olarak oturum aç seçeneÄŸini kullanıyorsunuz. Bu nedenle " +"kullanıcının parolasını deÄŸil kendi parolanızı kullanın." + +#, c-format +msgid "Your Hash URL Login '%s' has been created" +msgstr "'%s' karma adres oturumunuz eklendi" + +msgid "Your IP will be blacklisted" +msgstr "IP adresiniz kara listeye alındı" + +#, c-format +msgid "Your Login Key '%s' has been created" +msgstr "'%s' oturum açma anahtarınız oluÅŸturuldu" + +#, c-format +msgid "Your Name has been changed to %s" +msgstr "Adınız %s olarak güncellendi" + +msgid "Your account" +msgstr "Hesabınız" + +#, c-format +msgid "Your account %s@%s has been setup. In your e-mail program, use" +msgstr "%s@%s adresiniz kuruldu. E-posta uygulamanızda ÅŸunu kullanın" + +msgid "Your account '|USERNAME|' has been suspended. Reason: '|REASON|'" +msgstr "'|USERNAME|' hesabınız askıya alındı. Nedeni: '|REASON|'" + +msgid "Your account for |domain| is now ready for use." +msgstr "|domain| hesabı kullanılmaya hazır." + +msgid "Your backups are now ready" +msgstr "Yedekleriniz hazır" + +msgid "Your database has been setup. Use the following values:" +msgstr "Veritabanınız hazırlandı. Åžu bilgiler ile kullanabilirsiniz:" + +#, c-format +msgid "Your database name (%s) contains invalid characters (%s)." +msgstr "Veritabanı adınızda (%s) geçersiz karakterler var (%s)." + +#, c-format +msgid "" +"Your database username (%s) contains invalid characters (%s). MySQL account " +"will not be created on %s." +msgstr "" +"Veritabanı kullanıcı adınızda (%s) geçersiz karakterler var (%s). %s üzerine " +"MySQL hesabı eklenmeyecek." + +msgid "Your default domain has been set" +msgstr "Varsayılan etki alanınız ayarlandı" + +msgid "Your disk usage has been updated" +msgstr "Disk kullanımınız güncellendi" + +msgid "Your message has been saved" +msgstr "Bildirim kaydedildi" + +msgid "Your message has been sent" +msgstr "Bildiriminiz gönderildi" + +msgid "Your message is being sent in the background" +msgstr "Bildiriminiz arka planda gönderildi" + +msgid "" +"Your message is empty. Users might appreciate knowing what they're getting." +msgstr "İletiniz boÅŸ. Kullanıcılarınız ne aldıklarını bilmek ister." + +msgid "Your password" +msgstr "Parolanız" + +msgid "Your password is invalid" +msgstr "Parolanız geçersiz" + +msgid "" +"Your request for an update will begin in under a minute. You should be " +"notified via the Message system when it is complete" +msgstr "" +"Lisans dosyasını güncelleme isteÄŸiniz bir dakika içinde baÅŸlatılacak. İşlem " +"tamamlandığında size bir bildirim gönderilecek" + +msgid "Your request for an updated license file will begin in under a minute." +msgstr "Lisans dosyasını güncelleme isteÄŸiniz bir dakika içinde baÅŸlatılacak." + +msgid "Your request has expired." +msgstr "İsteÄŸinizin süresi geçmiÅŸ." + +msgid "Your request will be executed within 1 minute" +msgstr "İsteÄŸiniz 1 dakika içinde yerine getirilecek" + +msgid "" +"Your request will run in the background. Once completed, you'll be notified " +"in the Message System." +msgstr "" +"İsteÄŸiniz arka planda yapılacak. İşlem tamamlandığında Bildirim Sistemi " +"üzerinden bilgilendirileceksiniz." + +msgid "Your reseller account has reached its assigned limit" +msgstr "Bayi hesabınıza atanmış sınırlara ulaÅŸtınız" + +msgid "Your reseller has reached their assigned limit" +msgstr "Bayi hesabınıza atanmış sınırlara ulaÅŸtınız" + +msgid "Your subject contains invalid characters." +msgstr "Konu alanında geçersiz karakterler var." + +#, c-format +msgid "Your ticket number is %s." +msgstr "Destek kaydı numaranız %s." + +msgid "Your usertype is too low to request these widgets" +msgstr "Kullanıcı türünüz bu pano bileÅŸenlerini kullanabilmeniz için çok düşük" + +msgid "Zone Keys are newer than the Zone Signinging." +msgstr "Bölge Anahtarları Bölge İmzasından daha yeni." + +msgid "Zone Reset" +msgstr "Bölgeyi Sıfırla" + +msgid "Zone Signing has expired." +msgstr "Bölge imzasının süresi geçmiÅŸ." + +msgid "" +"Zone has not yet been signed. Ensure you first generate the keys and sign " +"it one before using this automated sign tool" +msgstr "" +"Bölge henüz imzalanmamış. Bu otomatik imzalama aracını kullanmadan önce " +"anahtarları üretin ve imzalayın" + +msgid "Zone is of type DNSSEC." +msgstr "Bölge DNSSEC türünde." + +msgid "Zone keys generated" +msgstr "Bölge anahtarları üretildi" + +msgid "Zone signed" +msgstr "Bölge imzalandı" + +msgid "access hosts cannot be domains because skip_name_resolve=ON" +msgstr "" +"skip_name_resolve=ON ayarı nedeniyle eriÅŸebilecek sunucular etki alanı olamaz" + +msgid "account ..." +msgstr "hesap ..." + +msgid "adding" +msgstr "ekleniyor" + +msgid "allow_subdomain_docroot_override is disabled" +msgstr "allow_subdomain_docroot_override devre dışı bırakılmış" + +msgid "at least" +msgstr "en az ÅŸu olan" + +msgid "at most" +msgstr "en çok ÅŸu olan" + +msgid "can_dnssec is not enabled. Cannot sign the zone." +msgstr "can_dnssec etkinleÅŸtirilmemiÅŸ. Bölge imzalanamadı." + +#, c-format +msgid "cannot fstatat %s: %s" +msgstr "%s fstatat yapılamadı: %s" + +#, c-format +msgid "cannot unlinkat %s: %s" +msgstr "%s unlinkat yapılamadı: %s" + +msgid "catch is required" +msgstr "toplama adresinin yazılması zorunludur" + +#, c-format +msgid "cgroup error: %s" +msgstr "cgroup sorunu: %s" + +msgid "cgroup is not enabled in your license" +msgstr "lisansınızda cgroup etkin deÄŸil" + +msgid "cgroup is turned off in the directadmin.conf" +msgstr "directadmin.conf dosyasında cgroup kapalı" + +msgid "change" +msgstr "güncelle" + +msgid "contains" +msgstr "ÅŸunu içeren" + +msgid "day" +msgid_plural "days" +msgstr[0] "gün" +msgstr[1] "gün" + +msgid "day(s)" +msgstr "gün(ler)" + +msgid "days" +msgstr "gün" + +msgid "default user" +msgstr "varsayılan kullanıcı" + +#, c-format +msgid "dnsprovider option '%s' contains invalid characters" +msgstr "'%s' dnsprovider seçeneÄŸinde geçersiz karakterler var" + +msgid "does not belong to you" +msgstr "hesabınıza ait deÄŸil" + +msgid "emails have just been sent by" +msgstr "e-posta ÅŸu kullanıcı tarafından gönderildi" + +msgid "equals" +msgstr "ÅŸuna eÅŸit olan" + +msgid "has been changed." +msgstr "güncellendi." + +msgid "has been updated with the new ip" +msgstr "yeni IP adresi ile güncellendi" + +msgid "hidden" +msgstr "gizli" + +msgid "high_score must be in the range 1 to 99" +msgstr "yüksek skor deÄŸeri 1 ile 99 arasında olmalıdır" + +msgid "hour" +msgid_plural "hours" +msgstr[0] "saat" +msgstr[1] "saat" + +msgid "hours" +msgstr "saat" + +#, c-format +msgid "is an invalid email address. User %s will not be created" +msgstr "e-posta adresi geçersiz. %s kullanıcısı eklenmeyecek" + +msgid "is currently down" +msgstr "ÅŸu anda çalışmıyor" + +msgid "is not a valid database name" +msgstr "geçerli bir veritabanı adı deÄŸil" + +msgid "is not a valid username" +msgstr "geçerli bir kullanıcı adı deÄŸil" + +#, c-format +msgid "is_ip_in_mask_range:%s:%s: range '%s' must be a positive integer" +msgstr "is_ip_in_mask_range:%s:%s: aralık '%s' bir pozitif tamsayı olmalıdır" + +#, c-format +msgid "" +"is_ip_in_mask_range:%s:%s: range '%s' must be between 1 and 128, inclusive" +msgstr "" +"is_ip_in_mask_range:%s:%s: aralık '%s' 1 ile 128 arasında olmalıdır, dahil " +"olarak" + +#, c-format +msgid "is_ip_in_mask_range:%s:%s: range does not have /" +msgstr "is_ip_in_mask_range:%s:%s: aralıkta / yok" + +msgid "json string" +msgstr "json dizgesi" + +msgid "license nresellers issue" +msgstr "lisans nresellers sorunu" + +msgid "license nusers issue" +msgstr "lisans nusers sorunu" + +msgid "license vdomains issue" +msgstr "lisans vdomains sorunu" + +#, c-format +msgid "lstat error: %s" +msgstr "lstat sorunu: %s" + +msgid "mail() line number" +msgstr "mail() Satır Numarası" + +msgid "message is empty. Please enter some text." +msgstr "ileti boÅŸ. Lütfen bir metin yazın." + +#, c-format +msgid "mime type (%s) for '%s' is not of type 'image/'" +msgstr "'%s' için MIME Türü (%s) 'image/' deÄŸil" + +msgid "minute" +msgid_plural "minutes" +msgstr[0] "dakika" +msgstr[1] "dakika" + +msgid "minutes" +msgstr "dakika sonra çıkarılsın" + +#, c-format +msgid "mkdir(%s) error: %s" +msgstr "mkdir(%s) sorunu: %s" + +msgid "modify password" +msgstr "parolayı deÄŸiÅŸtir" + +msgid "modify privileges" +msgstr "izinleri deÄŸiÅŸtir" + +msgid "month" +msgid_plural "months" +msgstr[0] "ay" +msgstr[1] "ay" + +msgid "mysqldump error output:" +msgstr "mysqldump hata çıktısı:" + +msgid "new_domain is not a valid domain" +msgstr "new_domain etki alanı geçersiz" + +msgid "newer than" +msgstr "ÅŸundan yeni olan" + +msgid "ns1 or ns2 are not valid nameservers" +msgstr "ns1 ya da ns2 ad sunucuları geçersiz" + +msgid "of" +msgstr "/" + +msgid "old_package or new_package are not valid package names" +msgstr "old_package ya da new_package paket adı geçersiz" + +msgid "older than" +msgstr "ÅŸundan eski olan" + +#, c-format +msgid "older than %s days." +msgstr "%s günden eski olanlar." + +msgid "or" +msgstr "ya da" + +msgid "or IPv6 (1:2:3:4:5:6:7:8) or IPv6 range (1:2:3:4:5:6:7:8-9)" +msgstr "ya da IPv6 (1:2:3:4:5:6:7:8) ya da IPv6 aralığı (1:2:3:4:5:6:7:8-9)" + +msgid "or select from" +msgstr "ya da ÅŸuradan seçin" + +msgid "php.ini override added" +msgstr "php.ini deÄŸiÅŸikliÄŸi eklendi" + +#, c-format +msgid "php1_select and php2_select must be 0-%d" +msgstr "php1_select ve php2_select 0-%d olmalı" + +msgid "" +"phpMyAdmin is missing direct_login option. Please re-install phpMyAdmin." +msgstr "" +"phpMyAdmin için direct_login seçeneÄŸi eksik. Lütfen phpMyAdmin uygulamasını " +"yeniden kurun." + +msgid "pop_disk_usage_cache is not enabled" +msgstr "pop_disk_usage_cache etkinleÅŸtirilmemiÅŸ" + +msgid "port" +msgstr "kapı numarası" + +msgid "redirect_url contains invalid characters" +msgstr "redirect_url içinde geçersiz karakterler var" + +msgid "removing" +msgstr "siliniyor" + +msgid "reseller_can_set_email_limit=0 is set, thus you cannot set a limit" +msgstr "" +"Bayilerin e-posta sınırını ayarlayabilmesini saÄŸlayan " +"reseller_can_set_email_limit seçeneÄŸi 0 olarak ayarlanmış olduÄŸundan sınır " +"ayarlanamaz" + +msgid "retry" +msgstr "yeniden dene" + +msgid "routes must start with a [ character." +msgstr "yöneltmeler [ karakteri ile baÅŸlamalıdır." + +#, c-format +msgid "search length out of bounds: 2 <= '%zd' <= 128" +msgstr "arama erimi sınır dışında: 2 <= '%zd' <= 128" + +msgid "second" +msgid_plural "seconds" +msgstr[0] "saniye" +msgstr[1] "saniye" + +msgid "selected" +msgstr "seçilmiÅŸ" + +msgid "selected overrides removed from php.ini" +msgstr "seçilmiÅŸ deÄŸiÅŸiklikler php.ini dosyasından silindi" + +msgid "selected skipped rules removed" +msgstr "seçilmiÅŸ atlama kuralları silindi" + +msgid "selecting none includes all domains" +msgstr "yok seçildiÄŸinde tüm etki alanları katılır" + +msgid "sent" +msgstr "gönderilen" + +msgid "set Permission" +msgstr "İzinleri Ayarla" + +msgid "show_blocked_ips.sh output:" +msgstr "show_blocked_ips.sh çıktısı:" + +msgid "starts with" +msgstr "ÅŸununla baÅŸlayan" + +msgid "subject contains invalid characters." +msgstr "konu alanında geçersiz karakterler var." + +#, c-format +msgid "subject_select != %d, but subject is not set. This shouldn't happen." +msgstr "subject_select != %d, ancak konu ayarlanmamış. Bu durum oluÅŸmamalıydı." + +msgid "that is the server's hostname and you cannot use it" +msgstr "bu sunucunun adı olduÄŸundan kullanılamaz" + +msgid "the new domain name already exists on your system" +msgstr "yeni etki alanı adı zaten sistem üzerinde var" + +msgid "too many iterations" +msgstr "çok fazla yönlendirme yapıldı" + +msgid "too many tables" +msgstr "çok fazla tablo var" + +msgid "unlimited" +msgstr "sınırsız" + +msgid "user, passwd, passwd2 and type are required" +msgstr "kullanıcı adı, parola, parola onayı ve tür yazılmalıdır" + +msgid "user.conf override" +msgstr "user.conf deÄŸiÅŸikliÄŸi" + +msgid "user_brutecount disabled" +msgstr "user_brutecount devre dışı" + +msgid "user_modify_pre.sh error" +msgstr "user_modify_pre.sh sorunu" + +msgid "value is required" +msgstr "deÄŸerin yazılması zorunludur" + +msgid "where=spamfolder has been disabled via show_main_spambox=0" +msgstr "" +"where=spamfolder seçeneÄŸi show_main_spambox=0 ayarı ile devre dışı bırakılmış" + +msgid "with the incorrect answer of" +msgstr "ÅŸunun yanlış yanıtıyla" + +msgid "your new password is" +msgstr "yeni parolanız" + +msgid "your new quota is" +msgstr "yeni kotanız" + +#, c-format +msgid "your new send limit is: %s" +msgstr "yeni gönderim sınırı: %s" + +msgid "" +"~/domains was missing, but we ran into an error while trying to re-create it" +msgstr "~/domains eksikti ve yeniden oluÅŸturulurken bir sorun çıktı" + +#~ msgid "'%s' does not exist in the certificate" +#~ msgstr "Sertifikada '%s' bulunamadı" + +#~ msgid "Cannot find the %s account" +#~ msgstr "%s hesabı bulunamadı" + +#~ msgid "Error reading %s to get 'email': %s" +#~ msgstr "'email' almak için %s okunurken sorun çıktı: %s" + +#~ msgid "Invalid command" +#~ msgstr "Komut geçersiz" + +#~ msgid "Netdata Server Metrics" +#~ msgstr "Netdata Sunucu İstatistikleri" + +#~ msgid "Please select at least one Mail SNI Host" +#~ msgstr "Lütfen en az bir Mail SNI sunucusu seçin" + +#~ msgid "Rspamd WebUI" +#~ msgstr "Rspamd WebUI" + +#~ msgid "SNI Host '%s' does not belong to you" +#~ msgstr "'%s' SNI sunucusu hesabınıza ait deÄŸil" + +#~ msgid "Cannot Delete those NS records" +#~ msgstr "Belirtilen NS kayıtları silinemedi" + +#~ msgid "Deleting them will leave you with 0." +#~ msgstr "Bu kayıtlar silindiÄŸinde kayıt sayısı 0 olacak." + +#~ msgid "Error writing %s : %s" +#~ msgstr "%s yazılırken sorun çıktı : %s" + +#~ msgid "Memory Max" +#~ msgstr "En Fazla Bellek" + +#~ msgid "Unable to read backups directory" +#~ msgstr "Yedekler klasörü okunamadı" + +#~ msgid "cgroup limits will not be set" +#~ msgstr "cgroup sınırları ayarlanmayacak" + +#~ msgid "That username is and invalid email username." +#~ msgstr "Kullanıcı adı ve e-posta adresi geçersiz." + +#~ msgid "Unable To Execure Your Request" +#~ msgstr "İsteÄŸiniz Yerine Getirilemedi" diff --git a/update/data/skins/enhanced/CHANGELOG b/update/data/skins/enhanced/CHANGELOG new file mode 100644 index 0000000..356b487 --- /dev/null +++ b/update/data/skins/enhanced/CHANGELOG @@ -0,0 +1,2 @@ +See: +http://www.directadmin.com/search_versions.php?query=%28SKINS%29 diff --git a/update/data/skins/enhanced/admin/admin_backup.html b/update/data/skins/enhanced/admin/admin_backup.html new file mode 100644 index 0000000..a3ae9fa --- /dev/null +++ b/update/data/skins/enhanced/admin/admin_backup.html @@ -0,0 +1,570 @@ +|LF_STANDARD| +|LF_BACKUPS| +|LF_SITE_BACKUP| +|?TREE=» Admin Backup/Transfer| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + + + + + +|*if CURRENT_BACKUPS| + +Active Backups +|CURRENT_BACKUPS| + +|*endif| + + + + + +|LANG_CREATE_BACKUP| + + + + + + |LANG_STEP_1|: |LANG_WHO| + + + + + + + + + + + + - |LANG_ALL_USERS| + + + + + + + + - |LANG_ALL_USERS| |LANG_EXCEPT_USERS| + + + + + + + + - |LANG_SELECTED_USERS| + + + + + - |LANG_BKP_ADD| |CREATOR_SELECT| & |LANG_BKP_USERS| + + + + + + + |USERS| + + + + + + - |LANG_SKIP_SUSPENDED| + + + + + + |LANG_STEP_2|: |LANG_WHEN| + + + + + + + + + + + - |LANG_NOW| + + + + + + + + - |LANG_CRON_SCHED| + + + + + + + |LANG_MINUTE|: 0-59 + |LANG_HOUR|: 0-23 + |LANG_DAY_OF_MONTH|: 1-31 + |LANG_MONTH|: 1-12 + |LANG_DAY_OF_WEEK|: 0-7 + + + + + + + + + |LANG_STEP_3|: |LANG_WHERE| + + + + + + + + - |LANG_LOCAL|: + + + + + + + - |LANG_FTP| + + + + + + |LANG_IP|: + |LANG_USERNAME|: + |LANG_PASSWORD|: + |LANG_REMOTE_PATH|: + |LANG_REMOTE_PORT|: + |LANG_SECURE_FTP|:|FTP_SECURE_SELECT| + + + + + + - |LANG_APPEND_TO_PATH| |PATH_APPEND| + + + + + + |LANG_APPEND|: / + (?) + + + + |*if ALLOW_BACKUP_ENCRYPTION="1"| + + + + |LANG_BACKUP_ENCRYPTION| + + + + + + + + |LANG_PASSWORD|: + + + + + + + + + |*endif| + + + + + + + |LANG_STEP_4|: |LANG_WHAT| + + + + + + + + - |LANG_ALL_DATA| + + + + + - |LANG_SELECTED_DATA| |LANG_SELECT|: |LANG_NONE| or |LANG_ALL| + + + + + |LANG_OPT_DOMAINS_DIR| + |LANG_OPT_EMAIL_ACCOUNTS| + + |LANG_OPT_SUB_LISTS| + |LANG_OPT_EMAIL_DATA| + + |LANG_OPT_FTP_ACCOUNTS| + |LANG_OPT_EMAIL_SETTINGS| + + |LANG_OPT_FTP_SETTINGS| + |LANG_OPT_VACATION_MESSAGES| + + |LANG_OPT_DATABASES| + |LANG_OPT_AUTORESPONDERS| + + + |LANG_OPT_DATABASE_DATA| + |LANG_OPT_MAILING_LISTS| + + |LANG_TRASH_DATA| + |LANG_OPT_FORWARDERS| + + + + + + + + + +|LANG_STEP_5|: + + + + + + + + + + + + + + + + + + + + + + + +|LANG_RESTORE_BACKUP| + + + + + |LANG_STEP_1|: |LANG_FROM_WHERE| + + + + + + + + - |LANG_LOCAL|: + + + + + + + - |LANG_FTP| + + + + + + |LANG_IP|: + |LANG_USERNAME|: + |LANG_PASSWORD|: + |LANG_REMOTE_PATH|: + |LANG_REMOTE_PORT|: + |LANG_SECURE_FTP|:|FTP_SECURE_SELECT| + + + + + + + + + + + + + + + + + + + + |LANG_STEP_2|: |LANG_SELECT_IP| + + + + + + + + + - |LANG_USE_STORED_IP| + + + + - |LANG_USE_IP_FROM_LIST|: + + + + |IPLIST| + + + |*if CREATE_USER_HOME_OVERRIDE| + + + + - |LANG_RESTORE_TO_PARTITION|: + |CREATE_USER_HOME_OVERRIDE| + + + |*endif| + + + + |LANG_NOTE| + |LANG_NOTE2| + + + + |LANG_STEP_3|: |LANG_SELECT_FILES| + + + + + + |LANG_LOCATION|: |FILES_LOCATION| + + + |FILES| + + + |*if ALLOW_BACKUP_ENCRYPTION="1"| + + + + |LANG_BACKUP_DECRYPTION| + + + + + + + |LANG_PASSWORD|: + + + + + + + + + |*endif| + + + + + +|LANG_STEP_4|: + + + + + + + + + + + + + + + + + + + + + + +|LANG_CURRENT_BACKUP_CRONS| +|CRONS| + + + + + + + + + + + + + + + +|LANG_BACKUP_SETTINGS| + + + + + + + + + + + + + |LANG_SEND_MESSAGE| + + + + + + + + |LANG_LOCAL_NS| + + + + + + + + |LANG_RESTORE_SPF| + + +|*if CLUSTER_ENABLED="1"| + + + + + + |LANG_CONFIRM_WITH_DOMAINOWNERS| + + +|*endif| + + + + + + + + + +|HTM_FOOTER_FULL| + diff --git a/update/data/skins/enhanced/admin/admin_backup_modify.html b/update/data/skins/enhanced/admin/admin_backup_modify.html new file mode 100644 index 0000000..3b303ff --- /dev/null +++ b/update/data/skins/enhanced/admin/admin_backup_modify.html @@ -0,0 +1,298 @@ +|LF_STANDARD| +|LF_BACKUPS| +|LF_SITE_BACKUP| +|?TREE=» Admin Backup/Transfer » `LANG_MODIFY_BACKUP`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + + + + + +|LANG_MODIFY_BACKUP| + + + + + + + |LANG_STEP_1|: |LANG_WHO| + + + + + + + + + + + + - |LANG_ALL_USERS| + + + + + + + + - |LANG_ALL_USERS| |LANG_EXCEPT_USERS| + + + + + + + + - |LANG_SELECTED_USERS| + + + + + - Add |CREATOR_SELECT| & Users + + + + + + |USERS| + + + + + + - |LANG_SKIP_SUSPENDED| + + + + + + |LANG_STEP_2|: |LANG_WHEN| + + + + + + + + + + + - |LANG_CRON_SCHED| + + + + + + + |LANG_MINUTE|: 0-59 + |LANG_HOUR|: 0-23 + |LANG_DAY_OF_MONTH|: 1-31 + |LANG_MONTH|: 1-12 + |LANG_DAY_OF_WEEK|: 0-7 + + + + + + + + + |LANG_STEP_3|: |LANG_WHERE| + + + + + + + + - |LANG_LOCAL|: + + + + + + + - |LANG_FTP| + + + + + + |LANG_IP|: + |LANG_USERNAME|: + |LANG_PASSWORD|: + |LANG_REMOTE_PATH|: + |LANG_REMOTE_PORT|: + |LANG_SECURE_FTP|:|FTP_SECURE_SELECT| + + + + + + - |LANG_APPEND_TO_PATH| |PATH_APPEND| + + + + + + |LANG_APPEND|: / + (?) + + + + |*if ALLOW_BACKUP_ENCRYPTION="1"| + + + + |LANG_BACKUP_ENCRYPTION| + + + + + + + + |LANG_PASSWORD|: + + + + + + + + + |*endif| + + + + + + + + |LANG_STEP_4|: |LANG_WHAT| + + + + + + + + - |LANG_ALL_DATA| + + + + + - |LANG_SELECTED_DATA| |LANG_SELECT|: |LANG_NONE| or |LANG_ALL| + + + + + |LANG_OPT_DOMAINS_DIR| + |LANG_OPT_EMAIL_ACCOUNTS| + + |LANG_OPT_SUB_LISTS| + |LANG_OPT_EMAIL_DATA| + + |LANG_OPT_FTP_ACCOUNTS| + |LANG_OPT_EMAIL_SETTINGS| + + |LANG_OPT_FTP_SETTINGS| + |LANG_OPT_VACATION_MESSAGES| + + |LANG_OPT_DATABASES| + |LANG_OPT_AUTORESPONDERS| + + |LANG_OPT_DATABASE_DATA| + |LANG_OPT_MAILING_LISTS| + + |LANG_TRASH_DATA| + |LANG_OPT_FORWARDERS| + + + + + + + + + + +|LANG_STEP_5|: + + + + + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/admin_backup_monitor.html b/update/data/skins/enhanced/admin/admin_backup_monitor.html new file mode 100644 index 0000000..21fe913 --- /dev/null +++ b/update/data/skins/enhanced/admin/admin_backup_monitor.html @@ -0,0 +1,182 @@ +|LF_STANDARD| +|LF_BACKUPS| +|LF_SITE_BACKUP| +|?TREE=» Admin Backup/Transfer » Backup Monitor| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + + + + + + +Backup Monitor + + + |BACKUP_INFO| + + + + + + |DYNAMIC_TABLE| + + + + + + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/admin_cron_jobs.html b/update/data/skins/enhanced/admin/admin_cron_jobs.html new file mode 100644 index 0000000..94e86d0 --- /dev/null +++ b/update/data/skins/enhanced/admin/admin_cron_jobs.html @@ -0,0 +1,9 @@ +|?TREE=» `LANG_ADMIN_CRON_JOBS`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + +|LANG_ADMIN_CRON_JOBS| + +|CRONJOBS| + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/admin_settings.html b/update/data/skins/enhanced/admin/admin_settings.html new file mode 100644 index 0000000..fb78eaf --- /dev/null +++ b/update/data/skins/enhanced/admin/admin_settings.html @@ -0,0 +1,405 @@ +|LF_STANDARD| +|?TREE=» `LANG_ADMIN_SETTINGS`| +|?HELP_SECTION=`ADMIN_HELPER`/settings.html| +|HTM_ADMIN_TOP| + + +|LANG_ADMIN_SETTINGS| + + + + + + + + |LANG_ADMIN_NOTIFY| + + + + + + + + |LANG_OVERSELL| + + + + + + + + |LANG_SUSPEND_RES| + + + + + + + + |LANG_RESELLER_BACKUP| + + + + + + + + + + |LANG_USE_UPDATER| + + + + + + + + + + |LANG_DEMO_USER|: demo_user |LANG_PASSWORD| : demo + + + + + + + + + |LANG_DEMO_RESELLER|: demo_reseller |LANG_PASSWORD| : demo + + + + + + + + + |LANG_DEMO_ADMIN|: demo_admin |LANG_PASSWORD| : demo + + + + + + + + |LANG_USERS_LESS_THAN| |LANG_TO_CREATE_BACKUPS| + + + + + + + + + + + + +|LANG_SERVER_SETTINGS| + + + + + |LANG_SERVER_HOSTNAME| (?) + + + + + + + + |LANG_NS1| + + + + + + + + |LANG_NS2| + + + + + + + + |LANG_TIMEOUT| + + + + + + + + |LANG_SESSION_TIME| + + + + + + + + |LANG_MAX_UPLOAD| + + + (?) + + + + + |LANG_KEEP_LOGS| + + + + + + + + |LANG_MAX_USERNAME_LENGTH| + + + + + + + + |LANG_SKIN_DOC_ROOT| + + + + + + + + |LANG_WARN_ADMINS_AT| |LANG_PERC_PARTITION_USAGE| + + + |LANG_CHECK_EVERY|: |LANG_MINUTE| |LANG_DAY| |LANG_NEVER| + + + + + |LANG_TIMEZONE| + + + |TIMEZONE_SELECT| + + + + + + + |LANG_SECURITY| + + + + + |LANG_LOST_PASSWORD_RECOVERY| + + + |LANG_YES| |LANG_NO| + + + + + |LANG_BLACKLIST_IP| + + + + + + |LANG_BLACKLIST_AFTER| |LANG_LOGIN_ATTEMPTS| (?) + + + |LANG_BRUTE_OR| + |LANG_BLACKLIST_AFTER| |LANG_UNAUTH_CONN| (?) + + + + + + + |LANG_PREVENT_LOCAL_BLACKLIST| + + + + + + + + |LANG_TIME_BEFORE_RESET| + + + |LANG_SECONDS_AFTER_LAST| (?) + + + + + |LANG_REMOVE_IP_AFTER| + + + |LANG_REMOVE_MINUTES| + + + + + + + + |LANG_PARSE_FOR_BFA| + + + |LANG_YES| |LANG_NO| + (?) + View Log + + + + + |LANG_NOTIFY_AFTER_IP| + + + login failures on any account. + + + + + |LANG_NOTIFY_ADMIN_USER| + + + login failures from any IP. + + +|*if HAVE_BF_UNBLOCK_AFTER_TIME="1"| + + + |LANG_BF_REMOVE_IP_AFTER| + + + |LANG_BF_REMOTE_IP_MINUTE| + + +|*endif| + + + |LANG_RESET_COUNT_AFTER| + + + hours after last attempt. + + + + + |LANG_CLEAR_BF_FROM_LOG| + + + days after entry was made. + + + + + |LANG_SCAN_APACHE_LOGS| + + + |LANG_ALL_LOGS| + |LANG_MANUAL| + |LANG_NO| + (?) + + + + + + + + + |LANG_DIFF_PASS_ENF| + + + |LANG_YES| |LANG_NO| (?) + + + + + + |LANG_CHECK_SUB_CREATION| + + + |LANG_YES| |LANG_NO| (?) + + + + + + + + + |LANG_EMAIL| + + + + + |LANG_EMAIL_LIMIT| + + + (?) + + + + + |LANG_PER_EMAIL_LIMIT| + + + (?) + + + + + |LANG_USER_CAN_SET_PER_EMAIL_LIMIT| + + + |LANG_YES| |LANG_NO| (?) + + + + + |LANG_MAX_PER_EMAIL| + + + -1=|PER_EMAIL_LIMIT|, 0=|LANG_UNLIMITED| (?) + + + + + + |LANG_RBL_BLOCKING| + + + |LANG_YES| |LANG_NO| (?) + + + +|*if USE_DOVECOT="yes"| + + + |LANG_PURGE_SPAMBOX| + + + |LANG_PURGE_AFTER| |LANG_PURGE_DAYS| + + +|*endif| + + + + + + + + + + + + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/admin_ssl.html b/update/data/skins/enhanced/admin/admin_ssl.html new file mode 100644 index 0000000..6add2a9 --- /dev/null +++ b/update/data/skins/enhanced/admin/admin_ssl.html @@ -0,0 +1,7 @@ +|?TREE=» Admin SSL| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + +|SSL_DOMAINS| + +|HTM_FOOTER_FULL| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/admin_stats.html b/update/data/skins/enhanced/admin/admin_stats.html new file mode 100644 index 0000000..66659c7 --- /dev/null +++ b/update/data/skins/enhanced/admin/admin_stats.html @@ -0,0 +1,20 @@ +|?TREE=» `LANG_SERVER_STATS`| +|?HELP_SECTION=`ADMIN_HELPER`/ausage.html| +|HTM_ADMIN_TOP| +|LANG_SERVER_STATS| +|STATS| + + +|LANG_STATS_FOR| |DEVICE| +|LANG_REC||RX| +|LANG_TX||TX| +|*if HAVE_NETDATA_SOCK="yes"| + + + +|*endif| + + +|DF| + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/brute_force_ip_info.html b/update/data/skins/enhanced/admin/brute_force_ip_info.html new file mode 100644 index 0000000..4d0c2cc --- /dev/null +++ b/update/data/skins/enhanced/admin/brute_force_ip_info.html @@ -0,0 +1,29 @@ +|LF_STANDARD| +|?TREE=» `LANG_BRUTE_FORCE_MONITOR`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + +|LANG_IP_INFO| |LANG_ON| |BLOCK_IP| + +|IPINFO| + + +|*if HAVE_BLOCK_SH="1"| + + + + + +|LANG_SCRIPT_FOUND| + + + + + +|*else| +|LANG_NO_SCRIPT_FOUND| +http://www.directadmin.com/features.php?id=1229 +|*endif| + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/brute_force_monitor.html b/update/data/skins/enhanced/admin/brute_force_monitor.html new file mode 100644 index 0000000..25136a4 --- /dev/null +++ b/update/data/skins/enhanced/admin/brute_force_monitor.html @@ -0,0 +1,143 @@ +|*if HAVE_SHOW_BLOCKED_IPS_SH="1"| +|?BODY=onLoad="sizeTheDiv();"| +|*endif| +|LF_STANDARD| +|?TREE=» `LANG_BRUTE_FORCE_MONITOR`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + +|*if LOG_SCANNING!="ON"| +|LANG_LOG_SCANNING_OFF| + +|*endif| + +|LANG_FAILED_LOGINS| - |LANG_CLICK_IP_TO_FILTER| + + + + + +|?HEIGHT=150px| +|*if NUM_IPS>"4"| +|?HEIGHT=250px| +|*endif| + + + + + + |IPLOGINFAILURES| + + + + |USERLOGINFAILURES| + + + + + + +|*if HAVE_BLOCK_SH="1"| + + | +|*endif| +? + |LANG_COMMENTS|: + + + +|*if sort1dir| +|LANG_CLEAR_SEARCH_FILTER| +|*endif| + + + +|LOGINFAILURES| + + + + +|LANG_BLE_IS| |BRUTE_LOG_SIZE|. +|LANG_ONLY_READ| |LANG_BYTES_FROM_THE_END| + + + + +|LANG_SKIP_LIST| +|SKIPLIST| + + +|*if HAVE_SHOW_BLOCKED_IPS_SH="1"| + + + +|LANG_BLOCKED_IPS| + +|BLOCKED_IPS| + +|*endif| +|*if HAVE_UNBLOCK_SH="1"| + + + + +|*endif| +|*if HAVE_SHOW_BLOCKED_IPS_SH="1"| + +|*endif| + + + +|CLEAR_MESSAGES_TABLE| + + + + + + +|*if IP_LIMIT="0"| +|LANG_IP_ZERO| +|*else| +|LANG_IP_VALUE| +|*endif| + +|*if USER_LIMIT="0"| +|LANG_USER_ZERO| +|*else| +|LANG_USER_VALUE| +|*endif| + + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/content_main.html b/update/data/skins/enhanced/admin/content_main.html new file mode 100644 index 0000000..4ec53eb --- /dev/null +++ b/update/data/skins/enhanced/admin/content_main.html @@ -0,0 +1,192 @@ +|LF_STANDARD| + +|*if AJAX="1"| + +|*endif| + + + + + + + + + + +|LANG_SEARCH|: + + + + + + + + + + + + + |LANG_CREATE_ADMIN| + |LANG_LIST_ADMINS| + |LANG_CHANGE_PASS| + |LANG_MANAGE_TICKETS||*if NEWTICKETS!="0"||NEWTICKETS||*endif| + + + |LANG_CREATE_RESELLER| + |LANG_LIST_RESELLERS| + |LANG_RESELLER_PACKAGES| + |LANG_SHOW_ALL_USERS| + + + + + + + + + |LANG_IP_MANAGEMENT| + |LANG_DNS_ADMIN| + |LANG_ADMIN_BACKUPS| + |LANG_MULTI_SERVER| + |LANG_MAIL_Q_ADMIN| + |LANG_MOVE_USERS| + + + |LANG_SYSTEM_INFO| + |LANG_SERVICE_MONITOR| + |LANG_SYS_BACKUP| + |LANG_LOG_VIEWER| + |LANG_FILE_EDITOR| +|?PMSORT=-9||*if OS_TYPE="FreeBSD"||?PMSORT=-10||*endif| + |LANG_PROCESS_MONITOR| + + + + + + + + + + + |LANG_COMPLETE_USAGE_STATS| + |LANG_CUSTOM_HTTPD| + |LANG_PHP_SAFEMODE| + |LANG_BRUTE_FORCE_MONITOR| +|$/usr/local/bin/php + 1) +{ +echo << +|PLUGIN_2_ADMIN_TXT| +|PLUGIN_4_ADMIN_TXT| +|PLUGIN_6_ADMIN_TXT| +|PLUGIN_8_ADMIN_TXT| +|PLUGIN_10_ADMIN_TXT| +|PLUGIN_12_ADMIN_TXT| +END; +} +?> +DONE| + + + |LANG_ADMIN_SETTINGS| + |LANG_LICENSE_UPDATES| + |LANG_PLUGIN_MANAGER| + |LANG_ADMIN_CRON_JOBS| +|$/usr/local/bin/php + 1) +{ +echo << +|PLUGIN_3_ADMIN_TXT| +|PLUGIN_5_ADMIN_TXT| +|PLUGIN_7_ADMIN_TXT| +|PLUGIN_9_ADMIN_TXT| +|PLUGIN_11_ADMIN_TXT| +|PLUGIN_13_ADMIN_TXT| +END; +} +?> +DONE| + + + + +|*if AJAX="1"| + +|*endif| + + + + + + + + + + + + diff --git a/update/data/skins/enhanced/admin/create_admin.html b/update/data/skins/enhanced/admin/create_admin.html new file mode 100644 index 0000000..2f85957 --- /dev/null +++ b/update/data/skins/enhanced/admin/create_admin.html @@ -0,0 +1,62 @@ +|LF_STANDARD| +|?TREE=» `LANG_SHOW_ADMINS` » `LANG_CREATE_ADMIN`| +|?HELP_SECTION=`ADMIN_HELPER`/createa.html| +|HTM_ADMIN_TOP| + +|?CHECK_NAME=checkName()| +|?CHECK_PASS=| +|?RANDOM_PASS=randomPass()| + +|*if AJAX="1"| + |?CHECK_NAME=ajax_checkName()| + |?CHECK_PASS=onChange="ajax_checkPass()"| + |?RANDOM_PASS=ajax_randomPass('')| + + +|*endif| + + + + + + |LANG_CREATE_ADMIN_ACCOUNT| + + +|HTM_PREVENT_AUTOFILL| + + + + |LANG_USERNAME|: + |LANG_EMAIL|: + |LANG_ENTER_PASS|: + |LANG_RE-ENTER_PASS|: + |LANG_EMAIL_NOTIFICATION|: |LANG_EDIT_ADMIN_MESSAGE| + + + + + + + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/create_customized_reseller.html b/update/data/skins/enhanced/admin/create_customized_reseller.html new file mode 100644 index 0000000..526f9fc --- /dev/null +++ b/update/data/skins/enhanced/admin/create_customized_reseller.html @@ -0,0 +1,126 @@ +|LF_CREATE| +|LF_STANDARD| +|?TREE=» `LANG_SHOW_RESELLER` » `LANG_CREATE_RES` » `LANG_CUSTOMIZE` `NEWUSERNAME`| +|?HELP_SECTION=`ADMIN_HELPER`/creater.html| +|HTM_ADMIN_TOP| + + + + + + + + |LANG_CREATE_RES| + + |LANG_USERNAME|: + |LANG_EMAIL|: + |LANG_ENTER_PASS| + |LANG_RE-ENTER_PASS|: + |LANG_DOMAIN|: + + |LANG_BANDWIDTH||LANG_UNLIMITED| + |LANG_DISK_SPACE||LANG_UNLIMITED| +|*if HAVE_INODE="yes"| + |LANG_INODES||LANG_UNLIMITED| +|*endif| + |LANG_DOMAINS||LANG_UNLIMITED| + |LANG_SUBDOMAINS||LANG_UNLIMITED| + |LANG_USER_ACCOUNTS||LANG_UNLIMITED| + |LANG_IPS| + + |LANG_EMAIL_ACCOUNTS||LANG_UNLIMITED| + |LANG_EMAIL_FORWARDERS||LANG_UNLIMITED| + |LANG_MAILING_LISTS||LANG_UNLIMITED| + |LANG_AUTO_RESPONDERS||LANG_UNLIMITED| + + |LANG_MYSQL_DBS||LANG_UNLIMITED| + + |LANG_DOMAIN_PTRS||LANG_UNLIMITED| + + |LANG_FTP_ACCOUNTS||LANG_UNLIMITED| + |LANG_ANON_FTP_ACCOUNTS| + + |LANG_CGI| |LANG_ACCESS| + |LANG_PHP| |LANG_ACCESS| + |LANG_SPAM| + |LANG_CATCHALL| + |LANG_SSL| |LANG_ACCESS| + |LANG_SSH| |LANG_ACCESS| + |LANG_SSH_FOR_USERS| + + |LANG_ALLOW_OVERSELLING| + |LANG_CRON_JOBS| + |LANG_SYSTEM_INFO| + |LANG_LOGIN_KEYS| +|*if HAVE_REDIS="yes"| + |LANG_REDIS| +|*endif| + |LANG_DNS_CONTROL| + + |LANG_PERSONAL_DNS||LANG_NONE| + |LANG_TWO_IPS| + |LANG_THREE_IPS| + + |LANG_SERVER_IP| + |LANG_DOMAIN| |LANG_IP|: + + |LANG_SHARED_SERVER| + |LANG_SHARED_RES| + |LANG_ASSIGNED| + + + |LANG_EMAIL_NOTIFY|: |LANG_EDIT_RES_MESS| + +|HTM_CGROUP| + +|*if CUSTOM_ITEM_1| + |CUSTOM_ITEM_1_STR||CUSTOM_ITEM_1||CUSTOM_ITEM_1_DESC| +|*endif| +|*if CUSTOM_ITEM_2| + |CUSTOM_ITEM_2_STR||CUSTOM_ITEM_2||CUSTOM_ITEM_2_DESC| +|*endif| +|*if CUSTOM_ITEM_3| + |CUSTOM_ITEM_3_STR||CUSTOM_ITEM_3||CUSTOM_ITEM_3_DESC| +|*endif| +|*if CUSTOM_ITEM_4| + |CUSTOM_ITEM_4_STR||CUSTOM_ITEM_4||CUSTOM_ITEM_4_DESC| +|*endif| +|*if CUSTOM_ITEM_5| + |CUSTOM_ITEM_5_STR||CUSTOM_ITEM_5||CUSTOM_ITEM_5_DESC| +|*endif| +|*if CUSTOM_ITEM_6| + |CUSTOM_ITEM_6_STR||CUSTOM_ITEM_6||CUSTOM_ITEM_6_DESC| +|*endif| +|*if CUSTOM_ITEM_7| + |CUSTOM_ITEM_7_STR||CUSTOM_ITEM_7||CUSTOM_ITEM_7_DESC| +|*endif| +|*if CUSTOM_ITEM_8| + |CUSTOM_ITEM_8_STR||CUSTOM_ITEM_8||CUSTOM_ITEM_8_DESC| +|*endif| + + + + + + + + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/create_reseller.html b/update/data/skins/enhanced/admin/create_reseller.html new file mode 100644 index 0000000..07d71ac --- /dev/null +++ b/update/data/skins/enhanced/admin/create_reseller.html @@ -0,0 +1,90 @@ +|LF_STANDARD| +|?TREE=» `LANG_SHOW_RESELLER` » `LANG_CREATE_RES`| +|?HELP_SECTION=`ADMIN_HELPER`/creater.html| +|HTM_ADMIN_TOP| + +|?CHECK_NAME=checkName()| +|?CHECK_PASS=| +|?RANDOM_PASS=randomPass()| +|?CHECK_DOMAIN=checkDomain()| + +|*if AJAX="1"| + |?CHECK_NAME=ajax_checkName()| + |?CHECK_PASS=onChange="ajax_checkPass()"| + |?RANDOM_PASS=ajax_randomPass('')| + |?CHECK_DOMAIN=ajax_checkDomain()| + + +|*endif| + + + + + + + +|HTM_PREVENT_AUTOFILL| + + + + |LANG_CREATE_RES| + + |LANG_USERNAME|: + |LANG_EMAIL|: + |LANG_ENTER_PASS| + |LANG_RE-ENTER_PASS|: + |LANG_DOMAIN|: + |LANG_USE_RES_PACK|:|PACKAGES| |FREEIPS| |LANG_FREE_IPS| + |LANG_ACCOUNT_IP|: + |IPSELECT| + + |LANG_EMAIL_NOTIFY|: |LANG_EDIT_RES_MESS| + + + + + + + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/custom_httpd.html b/update/data/skins/enhanced/admin/custom_httpd.html new file mode 100644 index 0000000..41c6a3c --- /dev/null +++ b/update/data/skins/enhanced/admin/custom_httpd.html @@ -0,0 +1,31 @@ +|LF_CUST_HTTPD| +|?TREE=» `LANG_CUSTOM_HTTPD`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_ADMIN_TOP| + +|LANG_CUSTOM_HTTPD| + + + + + +|LANG_SHOW_DOMAINS_THAT| + +-- +|LANG_EQUAL| +|LANG_CONTAIN| +|LANG_START_WITH| + + + + + + + + + + +|DOMAINS| + +|HTM_ADMIN_BOTTOM| + diff --git a/update/data/skins/enhanced/admin/custom_httpd_domain.html b/update/data/skins/enhanced/admin/custom_httpd_domain.html new file mode 100644 index 0000000..d50162c --- /dev/null +++ b/update/data/skins/enhanced/admin/custom_httpd_domain.html @@ -0,0 +1,337 @@ +|LF_STANDARD| +|?TREE=» `LANG_CUST_HTTPD_CONF` » `domain`| +|?HELP_SECTION=`ADMIN_HELPER`| + +|HTM_HEADER| +|HTM_HEADER_WIDE| + +|*if CONFIG_ERROR="1"| + +|LANG_CONFIG_ERROR| + +|*endif| + + + + + + + |*if HAVE_NGINX="yes"||LANG_NGINX_CUST_FOR||*else||LANG_CUST_FOR||*endif| |domain| + + + |*if HAVE_NGINX="yes"||LANG_NGINX_WARNING||*else||LANG_WARNING||*endif| + |*if CUSTOM_PRE| + |CUSTOM_PRE| + |*endif| + + |CONFIG| + + |*if CUSTOM_POST| + |CUSTOM_POST| + |*endif| + + + + + + + + |LANG_ADDITIONAL_CUSTOM_TOKENS| + + + + CUSTOM1 + + + + |LANG_TOP_OF_TEMPLATE| + |*if CUSTOM1_PRE| + |CUSTOM1_PRE| + |*endif| + + |CUSTOM1| + + |*if CUSTOM1_POST| + |CUSTOM1_POST| + |*endif| + + + + + CUSTOM2 + + + + |*if HAVE_NGINX="yes"||LANG_ALL_LOCATIONS||*else||LANG_BEFORE_DIRECTORY||*endif| + |*if CUSTOM2_PRE| + |CUSTOM2_PRE| + |*endif| + + |CUSTOM2| + + |*if CUSTOM2_POST| + |CUSTOM2_POST| + |*endif| + + + + + CUSTOM3 + + + + |*if HAVE_NGINX="yes"||LANG_BEFORE_WEBAPPS||*else||LANG_FIRST_DIRECTORY||*endif| + |*if CUSTOM3_PRE| + |CUSTOM3_PRE| + |*endif| + + |CUSTOM3| + + |*if CUSTOM3_POST| + |CUSTOM3_POST| + |*endif| + + + + + CUSTOM4 + + + + |LANG_LAST_ENTRY| + |*if CUSTOM4_PRE| + |CUSTOM4_PRE| + |*endif| + + |CUSTOM4| + + |*if CUSTOM4_POST| + |CUSTOM4_POST| + |*endif| + + + + + CUSTOM5 + + + + |LANG_LAST_ENTRY| + |*if CUSTOM5_PRE| + |CUSTOM5_PRE| + |*endif| + + |CUSTOM5| + + |*if CUSTOM5_POST| + |CUSTOM5_POST| + |*endif| + + + + + CUSTOM6 + + + + |LANG_LAST_ENTRY| + |*if CUSTOM6_PRE| + |CUSTOM6_PRE| + |*endif| + + |CUSTOM6| + + |*if CUSTOM6_POST| + |CUSTOM6_POST| + |*endif| + + + + + CUSTOM7 + + + + |LANG_LAST_ENTRY| + |*if CUSTOM7_PRE| + |CUSTOM7_PRE| + |*endif| + + |CUSTOM7| + + |*if CUSTOM7_POST| + |CUSTOM7_POST| + |*endif| + + + + + CUSTOM8 + + + + |LANG_LAST_ENTRY| + |*if CUSTOM8_PRE| + |CUSTOM8_PRE| + |*endif| + + |CUSTOM8| + + |*if CUSTOM8_POST| + |CUSTOM8_POST| + |*endif| + + + + + ++ |LANG_AVAIL_TOKENS| + + + |AVAILABLE_TOKENS| + + ++ |LANG_TEMPLATES| + + + +|?VH_COLS=118| + + + |VH1_NAME| |*if VH1_CUSTOM="1"||LANG_CUSTOM_TEMPLATE||*endif| + + + |VH1| + + + + + |VH2_NAME| |*if VH2_CUSTOM="1"||LANG_CUSTOM_TEMPLATE||*endif| + + + |VH2| + + + + + |VH3_NAME| |*if VH3_CUSTOM="1"||LANG_CUSTOM_TEMPLATE||*endif| + + + |VH3| + + + + + |VH4_NAME| |*if VH4_CUSTOM="1"||LANG_CUSTOM_TEMPLATE||*endif| + + + |VH4| + + + + + |VH5_NAME| |*if VH5_CUSTOM="1"||LANG_CUSTOM_TEMPLATE||*endif| + + + |VH5| + + + + + |VH6_NAME| |*if VH6_CUSTOM="1"||LANG_CUSTOM_TEMPLATE||*endif| + + + |VH6| + + + + + + + + + + + + + + + + + + + |*if HAVE_NGINX="yes"||LANG_NGINX_CONTENTS_FOR||*else||LANG_HTTPD_CONTENTS_FOR||*endif| |domain| + + + + + |HTTPD| + + + + + + + + |LANG_CONFIG_CHECK| + + + + + |CONFIG_TEST| + + + + +|HTM_FOOTER_WIDE| +|HTM_FOOTER| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/custom_httpd_fpm.html b/update/data/skins/enhanced/admin/custom_httpd_fpm.html new file mode 100644 index 0000000..62dc19d --- /dev/null +++ b/update/data/skins/enhanced/admin/custom_httpd_fpm.html @@ -0,0 +1,94 @@ +|LF_STANDARD| +|?TREE=» `LANG_CUST_HTTPD_CONF` » php-fpm `php-fpm`| +|?HELP_SECTION=`ADMIN_HELPER`| + +|HTM_HEADER| +|HTM_HEADER_WIDE| + +|*if CONFIG_ERROR="1"| + +|LANG_CONFIG_ERROR| + +|*endif| + + + + + + + |LANG_CUST_FOR| |user| php-fpm |php-fpm| + + + |LANG_INSTRUCTIONS| + php-fpm |LANG_GLOBAL| |CUSTOM1| + |GLOBAL_CUSTOM1| + + + + php-fpm |LANG_GLOBAL| |CUSTOM2| + |GLOBAL_CUSTOM2| + + + + php-fpm |php-fpm| |CUSTOM1| + |CUSTOM1| + + + + php-fpm |php-fpm| |CUSTOM2| + |CUSTOM2| + + + + + ++ |LANG_AVAIL_TOKENS| + + + |AVAILABLE_TOKENS| + + ++ |PHP_FPM_TEMPLATE_NAME| |*if PHP_FPM_IS_CUSTOM_TEMPLATE="1"||LANG_CUSTOM_TEMPLATE||*endif| + + + |PHP_FPM_TEMPLATE| + + + + + |LANG_SAVE_ALL_PHP_VERSIONS| + + + + + + + + + + |FPM_CONFIG_FILE| + + + + + |FPM_CONFIG| + + + + + + + + |LANG_PHP_FPM_CONFIG_CHECK| + + + + + |CONFIG_TEST| + + + + +|HTM_FOOTER_WIDE| +|HTM_FOOTER| diff --git a/update/data/skins/enhanced/admin/delete_admin.html b/update/data/skins/enhanced/admin/delete_admin.html new file mode 100644 index 0000000..840ff8f --- /dev/null +++ b/update/data/skins/enhanced/admin/delete_admin.html @@ -0,0 +1,17 @@ +|LF_STANDARD| +|?TREE=» `LANG_SHOW_ADMINS` » `LANG_DELETE_ADMIN`| +|?HELP_SECTION=`ADMIN_HELPER`/createa.html| +|HTM_ADMIN_TOP| + + + |LANG_DELETE_ADMIN| + + + |LANG_USERNAME|: + + + + + + +|HTM_ADMIN_BOTTOM| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/delete_reseller.html b/update/data/skins/enhanced/admin/delete_reseller.html new file mode 100644 index 0000000..b16d20f --- /dev/null +++ b/update/data/skins/enhanced/admin/delete_reseller.html @@ -0,0 +1,17 @@ +|LF_STANDARD| +|?TREE=» `LANG_SHOW_RES` » `LANG_DELETE_RES`| +|?HELP_SECTION=`ADMIN_HELPER`/listr.html| +|HTM_ADMIN_TOP| + + + |LANG_DELETE_RES| + + + |LANG_USERNAME|: + + + + + + +|HTM_ADMIN_BOTTOM| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/dns_admin.html b/update/data/skins/enhanced/admin/dns_admin.html new file mode 100644 index 0000000..3d9ad22 --- /dev/null +++ b/update/data/skins/enhanced/admin/dns_admin.html @@ -0,0 +1,44 @@ +|LF_STANDARD| +|?TREE=» `LANG_DNS_ADMIN`| +|?HELP_SECTION=`ADMIN_HELPER`/dnsadmin.html| +|HTM_ADMIN_TOP| + +|LANG_SELECT_DNS| + + + + + +|LANG_SHOW_DOMAINS_THAT| + +-- +|LANG_EQUAL| +|LANG_CONTAIN| +|LANG_START_WITH| + + + + + + + + + +|TABLE| + + + + +|LANG_ADD_ZONE| +|LANG_DOMAIN_NAME| +|LANG_IP_ADDRESS| +|LANG_NAME_SERVER_1| +|LANG_NAME_SERVER_2| +|*if DNS_PTR="yes"| + |LANG_REVERSE| |*endif| + + + + + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/dns_admin_control.html b/update/data/skins/enhanced/admin/dns_admin_control.html new file mode 100644 index 0000000..395d65e --- /dev/null +++ b/update/data/skins/enhanced/admin/dns_admin_control.html @@ -0,0 +1,265 @@ +|LF_STANDARD| +|?TREE=» `LANG_DNS_ADMIN` » `LANG_ENTRY_FOR` `domain`| +|?HELP_SECTION=`ADMIN_HELPER`/dnsadmin.html| +|HTM_HEADER_FULL| + + + + + + +|LANG_NAME| +|?TTL_INPUT=| +|?COLSPAN=4| +|?BLANK_TD=| + +|?SET_STATIC_TTL_INPUT=yes| + +|*if DNS_TTL="yes"| +|?COLSPAN=5| +|?TTL_INPUT=| +|?BLANK_TD=| +|LANG_TTL| +|*else| + |?SET_STATIC_TTL_INPUT=no| +|*endif| +|*if ALLOW_TTL_OVERRIDE!="yes"| + |?SET_STATIC_TTL_INPUT=no| +|*endif| +|*if TTL_CUSTOM_SELECTED!="checked"| + |?SET_STATIC_TTL_INPUT=no| +|*endif| +|*if SET_STATIC_TTL_INPUT="yes"| + |?TTL_INPUT=`TTL_VALUE`| +|*endif| + +|LANG_TYPE| +|LANG_VALUE| +|LANG_SELECT| + +|DNS_ROWS| + + + + + + + + + + + + +|LANG_ADD_DOMAIN_RECS| + + + + « |LANG_TRUE_VALUES| » + + + + + + + + + + |TTL_INPUT| + A + + + + + +|*if DNS_NS="yes"| + + + + + + + |TTL_INPUT| + NS + + + + +|*endif| + + + + + + + + |TTL_INPUT| + MX + + + 0 + 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 + + |*if HAVE_FULL_MX_RECORDS="1"| + + |*endif| + + + + + + + + + + + |TTL_INPUT| + CNAME + + + + + +|*if DNS_PTR="yes"| + + + + + + + |TTL_INPUT| + PTR + + + + +|*endif| + + + + + + + + |TTL_INPUT| + TXT + + + + + + + + + + + + |TTL_INPUT| + AAAA + + + + + + + + + + + + |TTL_INPUT| + SRV + + + + + +|*if DNS_SPF="yes"| + + + + + + + |TTL_INPUT| + SPF + + + + +|*endif| + +|*if DNS_TLSA="yes"| + + + + + + + |TTL_INPUT| + TLSA + + + + +|*endif| +|*if DNS_CAA="yes"| + + + + + + + |TTL_INPUT| + CAA + + + + +|*endif| + + + +|*if DNS_DS="yes"| + + + + + + + |TTL_INPUT| + DS + + + + +|*endif| + +|*if ALLOW_TTL_OVERRIDE="yes"| + + + + + + |LANG_OVERRIDE_TTL_VAL| + TTL + |LANG_USE_DEFAULT| + + |BLANK_TD| + + +|*endif| + + + +|DNSSEC_TABLE| + +|HTM_FOOTER_FULL| + diff --git a/update/data/skins/enhanced/admin/file_editor.html b/update/data/skins/enhanced/admin/file_editor.html new file mode 100644 index 0000000..44d9a9f --- /dev/null +++ b/update/data/skins/enhanced/admin/file_editor.html @@ -0,0 +1,45 @@ +|LF_STANDARD| +|?TREE=» `LANG_FILE_EDITOR`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + +|*if SAVED="yes"| + +|file| |LANG_FILE_SAVED| + +|*endif| + + +|LANG_FILE_EDITOR| + +|LANG_SELECT_FILE_TO_EDIT||FILES| + + + + + + +|FILEDATA| + + + +|*if REQUIRE_ROOT_AUTH="yes"| + +|LANG_FILE_IS_SECURE|: +|*endif| + +|*if file| +|file| +|*endif| + +|*if REQUIRE_ROOT_AUTH!="yes"| + +|*endif| + + + + + + +|HTM_FOOTER_FULL| + diff --git a/update/data/skins/enhanced/admin/index.html b/update/data/skins/enhanced/admin/index.html new file mode 100644 index 0000000..0b20d7e --- /dev/null +++ b/update/data/skins/enhanced/admin/index.html @@ -0,0 +1,7 @@ +|?TREE=»| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_ADMIN_TOP| + + |HTM_ADMIN_CONTENT| + +|HTM_ADMIN_BOTTOM| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/ip_manager.html b/update/data/skins/enhanced/admin/ip_manager.html new file mode 100644 index 0000000..c829c61 --- /dev/null +++ b/update/data/skins/enhanced/admin/ip_manager.html @@ -0,0 +1,19 @@ +|LF_STANDARD| +|?TREE=» `LANG_IP_MANAGER`| +|?HELP_SECTION=`ADMIN_HELPER`/ipman.html| +|HTM_HEADER_FULL| +|TEXT| + + + + + +|LANG_ADD_IP| +|LANG_IP| +|LANG_NETMASK||*if HAVE_IPV6="yes"| |LANG_IPV6_MASK||*endif| +|LANG_ADD_TO_DEVICE| + + + |TABLE| + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/ip_manager_details.html b/update/data/skins/enhanced/admin/ip_manager_details.html new file mode 100644 index 0000000..ccf49ed --- /dev/null +++ b/update/data/skins/enhanced/admin/ip_manager_details.html @@ -0,0 +1,61 @@ +|LF_STANDARD| +|LF_IP_MANAGER| +|?TREE=» `LANG_IP_MANAGER`| +|?HELP_SECTION=`ADMIN_HELPER`/ipman.html| +|HTM_HEADER_FULL| + + + + +|LANG_DETAILS_FOR| |ip| +|LANG_STATUS||status| +|?GLOBAL_CHECKED=| +|*if global="yes"| +|?GLOBAL_CHECKED=checked| +|*endif| +|?SHOW_GLBOAL=no| +|*if status="shared"| +|?SHOW_GLBOAL=yes| +|*endif| +|*if status="free"| +|?SHOW_GLBOAL=yes| +|*endif| +|*if SHOW_GLBOAL="yes"| +|LANG_GLOBAL| + + + + |LANG_GLOBAL_CHECKBOX_INFO| + + + + +|*endif| +|LANG_NETMASK||netmask| +|LANG_RESELLER||reseller| +|LANG_USER_VALUE||value| +|LANG_NAMESERVER||ns| + + +|IPS_TO_LINK| + +|LINKED_IPS| + + + +|LANG_IP_PURPOSE| + +|LANG_LAN_EXPLANATION| + +|LANG_IPV6_EXPLANATION| + +|LANG_LINK_OPTIONS_EXPLANATION| + +|LANG_MULTI_IP_RELATION| + +|LANG_LINK_NOT_RECURSIVE| + +|LANG_APPLY_TO_DOMAINS| + + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/license.html b/update/data/skins/enhanced/admin/license.html new file mode 100644 index 0000000..657338c --- /dev/null +++ b/update/data/skins/enhanced/admin/license.html @@ -0,0 +1,66 @@ +|?TREE=» `LANG_LICE_UP`| +|?HELP_SECTION=`ADMIN_HELPER`/license.html| +|HTM_ADMIN_TOP| + + +|LANG_LICE_VALS| +|LANG_LICE_IP||ip| +|LANG_LICE_NAME||name| +|LANG_LID||lid| +|LANG_CID||uid| +|*if nusers>"0"| +|LANG_ACCOUNT_LIMIT||CURRENT_ACCOUNTS| / |nusers| +|*endif| +|*if vdomains>"0"| +|LANG_DOMAIN_LIMIT||CURRENT_DOMAINS| / |vdomains| +|*endif| +|*if internal="Y"| +|LANG_LTYPE||LANG_INTERNAL| +|*endif| +|*if internal="N"| +|LANG_LTYPE||LANG_EXTERNAL| +|*endif| +|LANG_DA_LICENSE| |LANG_CHECK_IF_SOFTWARE_VALID| + +|LANG_VALID_AFTER||start_string| +|LANG_VALID_UNTIL||expiry_string| +|*if portioned="Y"| +|LANG_PORTIONED_LICENSE||LANG_PORTIONED_EXPLANATION| |true_expiry_string| +|*endif| + +|LANG_CURRENT_TIME||TIME| +|LANG_TIME_REM||remaining| +|LANG_LAST_UP||license_change| +|*if da_needs_restart="yes"| + *** |LANG_DA_NOT_RESTARTED| *** + + + + + +|*endif| + +Update License + + + + + + +|LANG_DA_VALS| +|LANG_COMPILED_FOR||OS_NAME| +|*if eol| +|LANG_END_OF_LIFE||eol| +|*endif| +|LANG_COMPILE_DATE||compile_time| +|LANG_SERVER_VER||version| +|LANG_CURRENT_VER||current_version| +|LANG_LAST_UP||software_change| +|LANG_LAST_RESTART||startup_time| + + + + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/log_viewer.html b/update/data/skins/enhanced/admin/log_viewer.html new file mode 100644 index 0000000..ac008bf --- /dev/null +++ b/update/data/skins/enhanced/admin/log_viewer.html @@ -0,0 +1,23 @@ +|LF_STANDARD| +|?TREE=» `LANG_LOG_VIEWER`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + +|LANG_SELECT_LOG| + +|LANG_LOG_FILE||FILES| +|LANG_NUM_LINES| |LANG_ZERO_FOR_ENTIRE| +|LANG_OUTPUT_TYPE||LANG_TEXT_AREA| + |LANG_RAW| +|LANG_GREP| |LANG_INVERT| |LANG_IGNORE_CASE| |LANG_USE_PIPE_FOR_MULTI| (?) + + + + + +|LOGDATA| + + +|HTM_FOOTER_FULL| + diff --git a/update/data/skins/enhanced/admin/mail_id_info.html b/update/data/skins/enhanced/admin/mail_id_info.html new file mode 100644 index 0000000..12c4102 --- /dev/null +++ b/update/data/skins/enhanced/admin/mail_id_info.html @@ -0,0 +1,26 @@ +|LF_STANDARD| +|LF_MAIL_QUEUE| +|?TREE=» `LANG_MAIL_QUEUE_ADMIN` » `LANG_VIEW` `id`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + + + + + + + + + + + +|LANG_EMAIL_HEADERS| +|HEADERS| +|LANG_EMAIL_BODY| +|EMAIL_BODY| +|LANG_LOG| +|LOGS| + + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/mail_queue.html b/update/data/skins/enhanced/admin/mail_queue.html new file mode 100644 index 0000000..c623ecb --- /dev/null +++ b/update/data/skins/enhanced/admin/mail_queue.html @@ -0,0 +1,16 @@ +|LF_STANDARD| +|?TREE=» `LANG_MAIL_QUEUE_ADMIN`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + +|*if HAVE_RPSAMD_CONTROLLER_SOCK="yes"| + +|*endif| + +|TABLE| + + +|LANG_REFRESH| + +|HTM_FOOTER_FULL| + diff --git a/update/data/skins/enhanced/admin/manage_packages_reseller.html b/update/data/skins/enhanced/admin/manage_packages_reseller.html new file mode 100644 index 0000000..0e6d24f --- /dev/null +++ b/update/data/skins/enhanced/admin/manage_packages_reseller.html @@ -0,0 +1,12 @@ +|?TREE=» `LANG_MANAGE_RES_PACK`| +|?HELP_SECTION=`ADMIN_HELPER`/rpackages.html| +|HTM_ADMIN_TOP| + + |LANG_MANAGE_RES_PACK| + + |LANG_ADD_PACK| + |PACKAGES| + + +|HTM_IMPORT_PACKAGES| +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/menu_admin.html b/update/data/skins/enhanced/admin/menu_admin.html new file mode 100644 index 0000000..93b938a --- /dev/null +++ b/update/data/skins/enhanced/admin/menu_admin.html @@ -0,0 +1,8 @@ +|LF_LEVEL| + + + » |LANG_ADMIN_LEVEL| + |LANG_RESELLER_LEVEL| + |LANG_USER_LEVEL| + + diff --git a/update/data/skins/enhanced/admin/menu_reseller.html b/update/data/skins/enhanced/admin/menu_reseller.html new file mode 100644 index 0000000..bc60c26 --- /dev/null +++ b/update/data/skins/enhanced/admin/menu_reseller.html @@ -0,0 +1,8 @@ +|LF_LEVEL| + + + |LANG_ADMIN_LEVEL| + » |LANG_RESELLER_LEVEL| + |LANG_USER_LEVEL| + + diff --git a/update/data/skins/enhanced/admin/menu_user.html b/update/data/skins/enhanced/admin/menu_user.html new file mode 100644 index 0000000..6d502cb --- /dev/null +++ b/update/data/skins/enhanced/admin/menu_user.html @@ -0,0 +1,8 @@ +|LF_LEVEL| + + + |LANG_ADMIN_LEVEL| + |LANG_RESELLER_LEVEL| + » |LANG_USER_LEVEL| + + diff --git a/update/data/skins/enhanced/admin/modify_reseller.html b/update/data/skins/enhanced/admin/modify_reseller.html new file mode 100644 index 0000000..25a8e22 --- /dev/null +++ b/update/data/skins/enhanced/admin/modify_reseller.html @@ -0,0 +1,106 @@ +|LF_STANDARD| +|LF_CREATE| +|?TREE=» `LANG_SHOW_RESELLER` » `LANG_RESELLER` `user` » `LANG_MODIFY` `user`| +|?HELP_SECTION=`ADMIN_HELPER`/listr.html| +|HTM_ADMIN_TOP| + +|LANG_MODIFY_RESELLER| |user| + + +|LANG_CHANGE_PACK| |user| + + + +|LANG_SET_PACK_TO||PACKAGES| + + + +|LANG_MANUALLY_CHANGE| + + + + + |LANG_BANDWIDTH| |LANG_MB||LANG_UNLIMITED| + |LANG_DISK_SPACE| |LANG_MB||LANG_UNLIMITED| +|*if HAVE_INODE="yes"| + |LANG_INODES||LANG_UNLIMITED| +|*endif| + |LANG_DOMAINS||LANG_UNLIMITED| + |LANG_SUBDOMAINS||LANG_UNLIMITED| + |LANG_USER_ACCOUNTS||LANG_UNLIMITED| + |LANG_EMAIL_ACCOUNTS||LANG_UNLIMITED| + |LANG_EMAIL_FORWARDERS||LANG_UNLIMITED| + |LANG_MAILING_LISTS||LANG_UNLIMITED| + |LANG_AUTO_RESPONDERS||LANG_UNLIMITED| + + |LANG_MYSQL_DBS||LANG_UNLIMITED| + + |LANG_DOMAIN_PTRS||LANG_UNLIMITED| + + |LANG_FTP_ACCOUNTS||LANG_UNLIMITED| + |LANG_ANON_FTP_ACCOUNTS| + + |LANG_CGI| |LANG_ACCESS| + |LANG_PHP| |LANG_ACCESS| + |LANG_SPAM| + |LANG_CATCHALL| + |LANG_SSL| |LANG_ACCESS| + |LANG_SSH| |LANG_ACCESS| + |LANG_SSH_FOR_USERS| + |LANG_ALLOW_OVERSELLING| + |LANG_CRON_JOBS| + |LANG_SYSTEM_INFO| + |LANG_LOGIN_KEYS| +|*if HAVE_REDIS="yes"| + |LANG_REDIS| +|*endif| + |LANG_DNS_CONTROL| + +|HTM_CGROUP| + +|*if CUSTOM_ITEM_1| + |CUSTOM_ITEM_1_STR||CUSTOM_ITEM_1||CUSTOM_ITEM_1_DESC| +|*endif| +|*if CUSTOM_ITEM_2| + |CUSTOM_ITEM_2_STR||CUSTOM_ITEM_2||CUSTOM_ITEM_2_DESC| +|*endif| +|*if CUSTOM_ITEM_3| + |CUSTOM_ITEM_3_STR||CUSTOM_ITEM_3||CUSTOM_ITEM_3_DESC| +|*endif| +|*if CUSTOM_ITEM_4| + |CUSTOM_ITEM_4_STR||CUSTOM_ITEM_4||CUSTOM_ITEM_4_DESC| +|*endif| +|*if CUSTOM_ITEM_5| + |CUSTOM_ITEM_5_STR||CUSTOM_ITEM_5||CUSTOM_ITEM_5_DESC| +|*endif| +|*if CUSTOM_ITEM_6| + |CUSTOM_ITEM_6_STR||CUSTOM_ITEM_6||CUSTOM_ITEM_6_DESC| +|*endif| +|*if CUSTOM_ITEM_7| + |CUSTOM_ITEM_7_STR||CUSTOM_ITEM_7||CUSTOM_ITEM_7_DESC| +|*endif| +|*if CUSTOM_ITEM_8| + |CUSTOM_ITEM_8_STR||CUSTOM_ITEM_8||CUSTOM_ITEM_8_DESC| +|*endif| + + + + + + + + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/multi_server.html b/update/data/skins/enhanced/admin/multi_server.html new file mode 100644 index 0000000..d9a0077 --- /dev/null +++ b/update/data/skins/enhanced/admin/multi_server.html @@ -0,0 +1,41 @@ +|LF_STANDARD| +|?TREE=» `LANG_MULTI_SERVER`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + + +|*if CLUSTER_ON="yes"| +|LANG_MULTI_IS_ON| +|*else| +|LANG_MULTI_IS_OFF| +|*endif| +|LANG_LIST_OF_SERVERS| +|TABLE| + + + + + + +|LANG_ADD_REMOTE_SERVER|/td> + + |LANG_IP|: + |LANG_PORT|: + |LANG_SSL|: + |LANG_USERNAME|: + |LANG_PASSWORD|: + + + + + + + +|LANG_SSL_DESCRIPTION| +|LANG_ZONE_TRANSFER_DESCRIPTION| +|LANG_DOMAIN_CHECK_DESCRIPTION| + + +|HTM_FOOTER_FULL| + diff --git a/update/data/skins/enhanced/admin/plugin_manager.html b/update/data/skins/enhanced/admin/plugin_manager.html new file mode 100644 index 0000000..0712939 --- /dev/null +++ b/update/data/skins/enhanced/admin/plugin_manager.html @@ -0,0 +1,28 @@ +|LF_STANDARD| +|?TREE=» `LANG_PLUGING_MANAGER`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER| +|HTM_HEADER_WIDE| + + + +|PLUGINS| + + + + + + +|LANG_ADD_PLUGIN| - |LANG_SELECT_UP_METH| + +|LANG_URL| |LANG_ENTER_URL| +|LANG_FILE| |LANG_UPLOAD_FROM_LOC| + +|LANG_PASSWORD|: |LANG_INSTALL_AFTER_UP| + + + + +|HTM_FOOTER_WIDE| +|HTM_FOOTER| + diff --git a/update/data/skins/enhanced/admin/process_monitor.html b/update/data/skins/enhanced/admin/process_monitor.html new file mode 100644 index 0000000..d6291c6 --- /dev/null +++ b/update/data/skins/enhanced/admin/process_monitor.html @@ -0,0 +1,169 @@ +|*if !timer| +|?timer=0| +|*endif| +|*if !scrollpos| +|?scrollpos=0| +|*endif| + +|*if timer>"0"| +|?BODY=onLoad='start_timer(1)'| +|*endif| + + +|LF_STANDARD| +|?TREE=» `LANG_PROCESS_MONITOR`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + + + +|LANG_PROCESS_MONITOR| +Reload Delay (Seconds) + +-- + + + + + + + + + + +|BOXINFO| + +|PROCESSES| + + + + + +|*if REQUIRE_ROOT_AUTH="yes"| +|LANG_AUTH_TO_SEND| + + |LANG_ROOT_PASS| + + + + + +|*else| + + +|*endif| + + + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/safe_mode.html b/update/data/skins/enhanced/admin/safe_mode.html new file mode 100644 index 0000000..d52bdc1 --- /dev/null +++ b/update/data/skins/enhanced/admin/safe_mode.html @@ -0,0 +1,51 @@ +|LF_STANDARD| +|?TREE=» `LANG_SAFE_MODE_SETTINGS`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_ADMIN_TOP| + + + +|LANG_SAFE_MODE_SETTINGS| + + + + + + +|LANG_DEFAULT|: + |LANG_ON| + |LANG_OFF| + +|LANG_OBD|: + |LANG_ON| + |LANG_OFF| + + + + + + + + +|LANG_SHOW_DOMAINS_THAT| + +-- +|LANG_EQUAL| +|LANG_CONTAIN| +|LANG_START_WITH| + + + + + + + + + +|DOMAINS| + +|HTM_ADMIN_BOTTOM| + diff --git a/update/data/skins/enhanced/admin/show_admins.html b/update/data/skins/enhanced/admin/show_admins.html new file mode 100644 index 0000000..8a3864a --- /dev/null +++ b/update/data/skins/enhanced/admin/show_admins.html @@ -0,0 +1,13 @@ +|?TREE=» `LANG_SHOW_ADMINS`| +|?HELP_SECTION=`ADMIN_HELPER`/createa.html| + +|HTM_HEADER| +|HTM_HEADER_WIDE| + +|LANG_CREATE_ADMIN| +|LANG_DELETE_ADMIN| + + |TABLE| + +|HTM_FOOTER_WIDE| +|HTM_FOOTER| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/show_all_users.html b/update/data/skins/enhanced/admin/show_all_users.html new file mode 100644 index 0000000..d1cdd8a --- /dev/null +++ b/update/data/skins/enhanced/admin/show_all_users.html @@ -0,0 +1,63 @@ +|?TREE=» `LANG_SHOW_ALL_USERS`| +|?HELP_SECTION=`ADMIN_HELPER`/showall.html| +|HTM_HEADER| +|HTM_HEADER_WIDE| +|LANG_DELETE_USER| + +|*if RESULT!=""| +|RESULT| +|*endif| + + + + + + + +|LANG_SHOW_DOMAINS_THAT_CONTAIN| + + + + + + + + + + + + + + + |TABLE| + +|HTM_FOOTER_WIDE| +|HTM_FOOTER| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/show_history.html b/update/data/skins/enhanced/admin/show_history.html new file mode 100644 index 0000000..f7f8b18 --- /dev/null +++ b/update/data/skins/enhanced/admin/show_history.html @@ -0,0 +1,9 @@ +|?TREE=» `LANG_ADMIN_STATS` » `LANG_ADMIN_HISTORY`| + +|?HELP_SECTION=`ADMIN_HELPER`/ausage.html#history| +|HTM_ADMIN_TOP| + +|LANG_ADMIN_HISTORY| + +|HISTORY| +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/show_reseller.html b/update/data/skins/enhanced/admin/show_reseller.html new file mode 100644 index 0000000..b67c01e --- /dev/null +++ b/update/data/skins/enhanced/admin/show_reseller.html @@ -0,0 +1,54 @@ +|LF_STANDARD| +|?TREE=» `LANG_SHOW_RESELLERS` » `LANG_RESELLER` `user`| +|?HELP_SECTION=`ADMIN_HELPER`/listr.html| +|HTM_HEADER_FULL| + +|?DISABLE_SELF=| +|*if user=USERNAME| +|?DISABLE_SELF=disabled| +|*endif| + +|LANG_DETAILS_FOR| |user| + + + + + + + + +|HTM_LOGIN_AS_WARNINGS| + + + + + + + + + + + + + + + + + + + + + +|USERS| +|STATS| + +|LANG_USER_COMMENT_BOX| + + + +|COMMENTS| + + + + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/show_reseller_package.html b/update/data/skins/enhanced/admin/show_reseller_package.html new file mode 100644 index 0000000..bae4403 --- /dev/null +++ b/update/data/skins/enhanced/admin/show_reseller_package.html @@ -0,0 +1,104 @@ +|LF_STANDARD| +|LF_CREATE| +|?TREE=» `LANG_MANAGE_RES_PACK` » `LANG_MANAGE` `PACKAGENAME`| +|?HELP_SECTION=`ADMIN_HELPER`/rpackages.html| +|HTM_ADMIN_TOP| + + + + + + |LANG_RES_PACK|: |PACKAGENAME| + + |LANG_BANDWIDTH| |LANG_MB||LANG_UNLIMITED| + |LANG_DISK_SPACE| |LANG_MB||LANG_UNLIMITED| +|*if HAVE_INODE="yes"| + |LANG_INODES||LANG_UNLIMITED| +|*endif| + |LANG_DOMAINS||LANG_UNLIMITED| + |LANG_SUBDOMAINS||LANG_UNLIMITED| + |LANG_USER_ACCOUNTS||LANG_UNLIMITED| + |LANG_IPS| + + |LANG_EMAIL_ACCOUNTS||LANG_UNLIMITED| + |LANG_EMAIL_FORWARDERS||LANG_UNLIMITED| + |LANG_MAILING_LISTS||LANG_UNLIMITED| + |LANG_AUTO_RESPONDERS||LANG_UNLIMITED| + + |LANG_MYSQL_DBS||LANG_UNLIMITED| + + |LANG_DOMAIN_PTRS||LANG_UNLIMITED| + + |LANG_FTP_ACCOUNTS||LANG_UNLIMITED| + |LANG_ANON_FTP_ACCOUNTS| + + |LANG_CGI| |LANG_ACCESS| + |LANG_PHP| |LANG_ACCESS| + |LANG_SPAM| + |LANG_CATCHALL| + |LANG_SSL| |LANG_ACCESS| + |LANG_SSH| |LANG_ACCESS| + |LANG_SSH_FOR_USERS| + |LANG_ALLOW_OVERSELLING| + |LANG_CRON_JOBS| + |LANG_SYSTEM_INFO| + |LANG_LOGIN_KEYS| +|*if HAVE_REDIS="yes"| + |LANG_REDIS| +|*endif| + |LANG_DNS_CONTROL| + + |LANG_PERSONAL_DNS||LANG_NONE| + |LANG_TWO_IPS| + |LANG_THREE_IPS| + + |LANG_SERVER_IP| |LANG_ALLOW_RES_SERVER| +|*if CREATE_USER_HOME_OVERRIDE| + |LANG_HOME_DIR| |CREATE_USER_HOME_OVERRIDE||LANG_LOCATION_FOR_THIS_ACCOUNT| +|*endif| + +|HTM_CGROUP| + +|*if CUSTOM_ITEM_1| + |CUSTOM_ITEM_1_STR||CUSTOM_ITEM_1||CUSTOM_ITEM_1_DESC| +|*endif| +|*if CUSTOM_ITEM_2| + |CUSTOM_ITEM_2_STR||CUSTOM_ITEM_2||CUSTOM_ITEM_2_DESC| +|*endif| +|*if CUSTOM_ITEM_3| + |CUSTOM_ITEM_3_STR||CUSTOM_ITEM_3||CUSTOM_ITEM_3_DESC| +|*endif| +|*if CUSTOM_ITEM_4| + |CUSTOM_ITEM_4_STR||CUSTOM_ITEM_4||CUSTOM_ITEM_4_DESC| +|*endif| +|*if CUSTOM_ITEM_5| + |CUSTOM_ITEM_5_STR||CUSTOM_ITEM_5||CUSTOM_ITEM_5_DESC| +|*endif| +|*if CUSTOM_ITEM_6| + |CUSTOM_ITEM_6_STR||CUSTOM_ITEM_6||CUSTOM_ITEM_6_DESC| +|*endif| +|*if CUSTOM_ITEM_7| + |CUSTOM_ITEM_7_STR||CUSTOM_ITEM_7||CUSTOM_ITEM_7_DESC| +|*endif| +|*if CUSTOM_ITEM_8| + |CUSTOM_ITEM_8_STR||CUSTOM_ITEM_8||CUSTOM_ITEM_8_DESC| +|*endif| + + |*if NEW_PACKAGE!="yes"||LANG_RENAME||*endif| |LANG_PACK_NAME|: + + + + +|HTM_ADMIN_BOTTOM| diff --git a/update/data/skins/enhanced/admin/show_resellers.html b/update/data/skins/enhanced/admin/show_resellers.html new file mode 100644 index 0000000..a574345 --- /dev/null +++ b/update/data/skins/enhanced/admin/show_resellers.html @@ -0,0 +1,15 @@ +|LF_CREATE| +|?TREE=» `LANG_SHOW_RESELLER`| +|?HELP_SECTION=`ADMIN_HELPER`/listr.html| + +|HTM_HEADER| +|HTM_HEADER_WIDE| + +|LANG_CREATE_RES| +|LANG_DELETE_RES| + + + |TABLE| + +|HTM_FOOTER_WIDE| +|HTM_FOOTER| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/show_services.html b/update/data/skins/enhanced/admin/show_services.html new file mode 100644 index 0000000..74ef952 --- /dev/null +++ b/update/data/skins/enhanced/admin/show_services.html @@ -0,0 +1,7 @@ +|?TREE=» `LANG_SHOW_SERVICES`| +|?HELP_SECTION=`ADMIN_HELPER`/sinfo.html| +|HTM_HEADER_FULL| + +|SERVICES_TABLE| + +|HTM_FOOTER_FULL| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/system_backup.html b/update/data/skins/enhanced/admin/system_backup.html new file mode 100644 index 0000000..669379d --- /dev/null +++ b/update/data/skins/enhanced/admin/system_backup.html @@ -0,0 +1,91 @@ +|LF_STANDARD| +|LF_BACKUPS| +|?TREE=» `LANG_SYSTEM_BACKUP`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER| +|HTM_HEADER_WIDE| + + + + +|LANG_RUN_SYS_BK| - |LANG_ON_PER_DAY| + +|LANG_VIEW_LOG||LOG_TIME| + + + + + +|LANG_CRON_SCHEDULE| +|LANG_MINUTE| + |LANG_HOUR| +|LANG_DAY_OF_MONTH| + |LANG_MONTH| + |LANG_DAY_OF_WEEK| + +|LANG_USE_CRON| + + + + + + +|LANG_CONFIGURE_FULL_SYSTEM_BACKUP| + +|LANG_BACKUP_PATH| +|LANG_MIN_DISK_SPACE| on partition |MOUNT_POINT| + + + |LANG_ADD_USERS| + + + + + |LANG_BACKUP_HTTP_CONFIG| + + |LANG_BACKUP_BIND_CONFIG| + + + + |LANG_BACKUP_MYSQL_CONFIG| + + |LANG_BACKUP_DIRS_FILES| + + +|LANG_USE_REMOTE_TRANSFER| +|LANG_REMOTE_TRANSFER_METHOD||RTRANS_SELECT| |LANG_DOWNLOAD_ID_DSA| +|LANG_DEL_AFTER_RTRANS| +|LANG_FILE_BY_FILE| |LANG_FILE_BY_FILE_COMMENT| +|LANG_REMOTE_HOST| +|LANG_REMOTE_USER| +|LANG_REMOTE_PASS| +|LANG_REMOTE_PATH| + + + + + + + + |BACKUP_DIRECTORIES| + + + + + + |BACKUP_FILES| + + + + + + + + + + + + +|HTM_FOOTER_WIDE| +|HTM_FOOTER| + diff --git a/update/data/skins/enhanced/admin/template_admin_bottom.html b/update/data/skins/enhanced/admin/template_admin_bottom.html new file mode 100644 index 0000000..bad4f20 --- /dev/null +++ b/update/data/skins/enhanced/admin/template_admin_bottom.html @@ -0,0 +1,36 @@ +|HTM_FOOTER_BAR_1| +|HTM_MENU_ADMIN| + + + + + + |LANG_USED| + + + + |LANG_DISK_SPACE| + |ADMINQUOTA| + + + |LANG_BANDWIDTH| + |ADMINBANDWIDTHGIG| + + + |LANG_DOMAINS| + |ADMINDOMAINS| + + + + |LANG_USERS| + |ADMINUSERS| + + + |LANG_RESELLERS| + |ADMINRESELLERS| + + + + +|HTM_FOOTER_BAR_2| +|HTM_FOOTER| \ No newline at end of file diff --git a/update/data/skins/enhanced/admin/template_admin_top.html b/update/data/skins/enhanced/admin/template_admin_top.html new file mode 100644 index 0000000..ca9299d --- /dev/null +++ b/update/data/skins/enhanced/admin/template_admin_top.html @@ -0,0 +1,2 @@ +|HTM_HEADER| +|HTM_HEADER_BAR| diff --git a/update/data/skins/enhanced/admin/template_diff.html b/update/data/skins/enhanced/admin/template_diff.html new file mode 100644 index 0000000..1633d21 --- /dev/null +++ b/update/data/skins/enhanced/admin/template_diff.html @@ -0,0 +1,10 @@ +|?TREE=» `LANG_TEMPLATE_DIFF`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + +|LANG_TEMPLATE_DIFF| + +|DIFF_TABLE| + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/admin/usermanagement.html b/update/data/skins/enhanced/admin/usermanagement.html new file mode 100644 index 0000000..3c99fae --- /dev/null +++ b/update/data/skins/enhanced/admin/usermanagement.html @@ -0,0 +1,77 @@ +|LF_STANDARD| +|?TREE=» `LANG_MOVE_USERS`| +|?HELP_SECTION=`ADMIN_HELPER`| +|HTM_HEADER_FULL| + + + + +|LANG_MOVE_USERS| + + + + + + |LANG_SELECT_USERS_OF| |CREATOR_SELECT| + +|LANG_MOVE_SELECTED|: + + + + |USERS| + + + + |CREATORS| + + + + + + + + + + +|HTM_FOOTER_FULL| + diff --git a/update/data/skins/enhanced/confirmation.html b/update/data/skins/enhanced/confirmation.html new file mode 100644 index 0000000..cd5775c --- /dev/null +++ b/update/data/skins/enhanced/confirmation.html @@ -0,0 +1,19 @@ +|?TREE=» `LANG_HOME`| +|HTM_HEADER_FULL| + + + + + |LANG_PLEASE_CONFIRM|: + + +|TEXT| + + + + + + + + +|HTM_FOOTER_FULL| diff --git a/update/data/skins/enhanced/creation_check.js b/update/data/skins/enhanced/creation_check.js new file mode 100644 index 0000000..068c1b1 --- /dev/null +++ b/update/data/skins/enhanced/creation_check.js @@ -0,0 +1,83 @@ +var xmlhttp_array = new Array(); + +function ajax_run_js(str) +{ + if (str == '') + return; + + console.log(str); + + eval(str); +} + +function ajax_state_changed(xh) +{ + if (xmlhttp_array[xh].readyState==4 && xmlhttp_array[xh].status==200) + { + ajax_run_js(xmlhttp_array[xh].responseText); + } +} + +function ajax_start(url, xh, post) +{ + if (window.XMLHttpRequest) + {// code for IE7+, Firefox, Chrome, Opera, Safari + xmlhttp_array[xh]=new XMLHttpRequest(); + } + else + {// code for IE6, IE5 + xmlhttp_array[xh]=new ActiveXObject("Microsoft.XMLHTTP"); + } + + var method = 'GET'; + if (post.length > 0) + method='POST' + + xmlhttp_array[xh].onreadystatechange=function() { ajax_state_changed(xh); }; + xmlhttp_array[xh].open(method,url,true); + xmlhttp_array[xh].send(post); + +} + +function ajax_checkName() +{ + var u=document.getElementById("username").value; + var url="CMD_AJAX_CHECK_USERNAME?rand="+Math.random(); + + ajax_start(url, 'user', 'username='+encodeURIComponent(u)); +} + +function ajax_checkPass() +{ + var p=document.getElementById("passwd").value; + var url="CMD_AJAX_CHECK_PASSWORD?rand="+Math.random(); + + ajax_start(url, 'pass', 'passwd='+encodeURIComponent(p)); +} +function ajax_randomPass(extra_set) +{ + var url="CMD_AJAX_CHECK_PASSWORD?action=get&rand="+Math.random(); + + if (extra_set != '') + { + url=url+"&extra_set="+extra_set; + } + + ajax_start(url, 'rand_pass',''); +} + +function ajax_checkDomain() +{ + var d=document.getElementById("domain").value; + var url="CMD_AJAX_CHECK_DOMAIN?rand="+Math.random(); + + ajax_start(url, 'domain', 'domain='+encodeURIComponent(d)); +} + +function set_admin_level_updates() +{ + var pu=document.getElementById("plugin_updates"); + var url="CMD_AJAX_GET_COUNTS?plugin_updates=yes&program=yes&rand="+Math.random(); + + ajax_start(url, 'plugin_updates', ''); +} diff --git a/update/data/skins/enhanced/files_admin.conf b/update/data/skins/enhanced/files_admin.conf new file mode 100644 index 0000000..04cb936 --- /dev/null +++ b/update/data/skins/enhanced/files_admin.conf @@ -0,0 +1,64 @@ +HTM_INDEX=admin/index.html +HTM_INDEX_RESELLER=reseller/index.html +HTM_INDEX_USER=user/index.html +HTM_ACCOUNT_ADMIN_CREATE=admin/create_admin.html +HTM_ACCOUNT_ADMIN_DELETE=admin/delete_admin.html +HTM_ACCOUNT_RESELLER_CREATE=admin/create_reseller.html +HTM_ACCOUNT_RESELLER_DELETE=admin/delete_reseller.html +HTM_HEADER=header.html +HTM_ADMIN_TOP=admin/template_admin_top.html +HTM_ADMIN_BOTTOM=admin/template_admin_bottom.html +HTM_MENU_ADMIN=admin/menu_admin.html +HTM_MENU_RESELLER=admin/menu_reseller.html +HTM_MENU_USER=admin/menu_user.html +HTM_ADMIN_MAIN=admin/main.html +HTM_ADMIN_CONTENT=admin/content_main.html +HTM_TAB_ADMIN=admin/tabs_admin.html +HTM_TAB_RESELLER=admin/tabs_reseller.html +HTM_TAB_USER=admin/tabs_user.html +CMD_ADMIN_SHOW=admin/show_admins.html +CMD_RESELLER_SHOW=admin/show_resellers.html +CMD_ALL_USER_SHOW=admin/show_all_users.html +CMD_SHOW_SERVICES=admin/show_services.html +CMD_ADMIN_SSL=admin/admin_ssl.html +CMD_MANAGE_RESELLER_PACKAGES=admin/manage_packages_reseller.html +CMD_SHOW_RESELLER_PACKAGE=admin/show_reseller_package.html +HTM_CUSTOMIZE_RESELLER=admin/create_customized_reseller.html +CMD_IP_MANAGER=admin/ip_manager.html +CMD_IP_MANAGER_DETAILS=admin/ip_manager_details.html +CMD_ADMIN_SETTINGS=admin/admin_settings.html +CMD_MODIFY_RESELLER=admin/modify_reseller.html +CMD_SHOW_RESELLER=admin/show_reseller.html +CMD_DNS_ADMIN=admin/dns_admin.html +CMD_DNS_ADMIN_CONTROL=admin/dns_admin_control.html +CMD_ADMIN_STATS=admin/admin_stats.html +CMD_LICENSE=admin/license.html +CMD_CUSTOM_HTTPD=admin/custom_httpd.html +CMD_ADMIN_CRON_JOBS=admin/admin_cron_jobs.html +CMD_CUSTOM_HTTPD_DOMAIN=admin/custom_httpd_domain.html +CMD_CUSTOM_HTTPD_FPM=admin/custom_httpd_fpm.html +CMD_PHP_SAFE_MODE=admin/safe_mode.html +CMD_PLUGIN_MANAGER=admin/plugin_manager.html +CMD_SYSTEM_BACKUP=admin/system_backup.html +CMD_LOG_VIEWER=admin/log_viewer.html +CMD_ADMIN_FILE_EDITOR=admin/file_editor.html +CMD_MULTI_SERVER=admin/multi_server.html +CMD_MAIL_QUEUE=admin/mail_queue.html +CMD_MAIL_ID=admin/mail_id_info.html +CMD_ADMIN_BACKUP=admin/admin_backup.html +CMD_ADMIN_BACKUP_MODIFY=admin/admin_backup_modify.html +CMD_ADMIN_BACKUP_MONITOR=admin/admin_backup_monitor.html +CMD_MOVE_USERS=admin/usermanagement.html +CMD_ADMIN_HISTORY=admin/show_history.html +CMD_PROCESS_MONITOR=admin/process_monitor.html +CMD_BRUTE_FORCE_MONITOR=admin/brute_force_monitor.html +CMD_BRUTE_FORCE_IP_INFO=admin/brute_force_ip_info.html +CMD_TEMPLATE_DIFF=admin/template_diff.html + +IMG_SKIN_CTRL_ASERVER=images/admin-server.gif +IMG_SKIN_CTRL_ATOOLS=images/admin-tools.gif +IMG_SKIN_CTRL_AFEATURES=images/admin-extra.gif + +LF_CUST_HTTPD=admin/custom_httpd_domain.html +LF_MAIL_QUEUE=admin/mail_queue.html +LF_IP_MANAGER=admin/ip_manager.html diff --git a/update/data/skins/enhanced/files_reseller.conf b/update/data/skins/enhanced/files_reseller.conf new file mode 100644 index 0000000..c76db51 --- /dev/null +++ b/update/data/skins/enhanced/files_reseller.conf @@ -0,0 +1,43 @@ +HTM_INDEX=reseller/index.html +HTM_INDEX_USER=user/index.html +HTM_RESELLER_TOP=reseller/template_reseller_top.html +HTM_RESELLER_BOTTOM=reseller/template_reseller_bottom.html +HTM_USER_CREATE=reseller/user_create.html +HTM_ACCOUNT_USER_CREATE=reseller/create_user.html +HTM_ACCOUNT_USER_DELETE=reseller/delete_user.html +HTM_RESELLER_CONTENT=reseller/content_main.html +HTM_MENU_RESELLER=reseller/menu_reseller.html +HTM_MENU_USER=reseller/menu_user.html +HTM_LOGIN_AS_WARNINGS=reseller/login_as_warnings.html +CMD_USER_SHOW=reseller/show_users.html +HTM_USER_PASSWD=reseller/change_user_passwd.html +CMD_SHOW_SUB_DOMAIN=reseller/show_sub_domain.html +CMD_MANAGE_USER_PACKAGES=reseller/manage_packages_user.html +CMD_SHOW_USER_PACKAGE=reseller/show_user_package.html +HTM_IMPORT_PACKAGES=reseller/import_packages.html +HTM_CUSTOMIZE_USER=reseller/create_customized_user.html +CMD_IP_CONFIG=reseller/ip_config.html +CMD_NAME_SERVER=reseller/nameserver.html +CMD_TICKET_MANAGE=reseller/manage_tickets.html +CMD_TICKET_MANAGE_CLOSED=reseller/manage_tickets_closed.html +CMD_TICKET_VIEW_TECH=reseller/ticket_view_tech.html +CMD_MODIFY_USER=reseller/modify_user.html +CMD_SHOW_USER=reseller/show_user.html +CMD_EDIT_MESSAGE=reseller/edit_message.html +CMD_SKINS=reseller/skins.html +CMD_SKINS_CUSTOMIZE=reseller/skins_customize.html +CMD_RESELLER_STATS=reseller/reseller_stats.html +CMD_USER_BACKUP=reseller/backups.html +CMD_USER_BACKUP_MODIFY=reseller/backup_modify.html +CMD_RESELLER_HISTORY=reseller/show_history.html +HTM_CGROUP=reseller/cgroup.html + +IMG_SKIN_CTRL_RACCOUNT=images/reseller-accounts.gif +IMG_SKIN_CTRL_RTOOLS=images/reseller-tools.gif +IMG_SKIN_CTRL_RFEATURES=images/reseller-extra.gif + +LF_LEVEL=lf_level.html +LF_BACKUPS=reseller/backup_modify.html +LF_CREATE=admin/create_reseller.html +LF_TICKETS=reseller/manage_tickets.html +LF_SKINS=reseller/skins.html diff --git a/update/data/skins/enhanced/files_user.conf b/update/data/skins/enhanced/files_user.conf new file mode 100644 index 0000000..9cbed0e --- /dev/null +++ b/update/data/skins/enhanced/files_user.conf @@ -0,0 +1,236 @@ +CSS_STYLE=style.css +HTM_ADD_DOMAIN=user/add_domain.html +HTM_CONFIRMATION=confirmation.html + +HTM_EMAIL_AUTORESPONDER_CREATE=user/email/autoresponder_create.html +CMD_EMAIL_AUTORESPONDER_CREATE=user/email/autoresponder_create.html +HTM_EMAIL_POP_CREATE=user/email/pop_create.html +HTM_EMAIL_POP_MODIFY=user/email/pop_modify.html +HTM_EMAIL_FORWARDER_CREATE=user/email/forwarder_create.html +HTM_EMAIL_LIST_CREATE=user/email/list_create.html +HTM_EMAIL_REPLY_HEADERS=user/email/email_reply_headers.html + +HTM_FOOTER=footer.html +HTM_FOOTER_BAR_1=footer_bar_1.html +HTM_FOOTER_BAR_2=footer_bar_2.html +HTM_FOOTER_FULL=footer_full.html +HTM_FOOTER_WIDE=footer_wide.html +HTM_FTP_CREATE=user/ftp/ftp_create.html +HTM_INDEX=user/index.html +HTM_INDEX_USER=user/index.html +HTM_HEADER=header.html +HTM_HEADER_BAR=header_bar.html +HTM_HEADER_WIDE=header_wide.html +HTM_HEADER_FULL=header_full.html +HTM_TEMPLATE=template.html +HTM_USER_BOTTOM=user/template_user_bottom.html +HTM_USER_CONTENT=user/content_main.html +HTM_USER_TOP=user/template_user_top.html + +HTM_PREVENT_AUTOFILL=user/prevent_autofill.html + +CMD_DB=user/db/db.html +CMD_DB_VIEW=user/db/db_view.html +CMD_DB_USER_PRIVS=user/db/user_priv.html +CMD_DB_CREATE=user/db/db_create.html +CMD_DB_USER_CREATE=user/db/db_user_create.html +HTM_DB_CREATE=user/db/db_create.html +HTM_DB_USER_CREATE=user/db/db_user_create.html +HTM_DB_USER_MODIFY=user/db/db_user_modify.html + +CMD_UNIT_CREATE=user/app/app_create.html +CMD_ROUTE_EDIT=user/app/route_edit.html +CMD_UNIT=user/app/apps.html + +CMD_FRONTPAGE=user/frontpage.html +CMD_FTP=user/ftp/ftp.html +CMD_FTP_SETTINGS=user/ftp/anon_settings.html +CMD_FTP_SHOW=user/ftp/ftp_show.html + +CMD_SSL=user/ssl.html +CMD_SSL_CA=user/ssl_ca.html +CMD_SSL_REQUEST=user/ssl_request.html + +CMD_EMAIL_POP=user/email/pop.html +CMD_EMAIL_CATCH_ALL=user/email/catch_all.html +CMD_EMAIL_FORWARDER=user/email/forwarder.html +CMD_EMAIL_FORWARDER_MODIFY=user/email/forwarder_modify.html +CMD_EMAIL_AUTORESPONDER=user/email/autoresponder.html +CMD_EMAIL_USAGE=user/email/usage.html + +CMD_EMAIL_AUTORESPONDER_MODIFY=user/email/autoresponder_modify.html +CMD_EMAIL_VACATION=user/email/vacation.html +CMD_EMAIL_VACATION_CREATE=user/email/vacation_create.html +CMD_EMAIL_VACATION_MODIFY=user/email/vacation_modify.html +CMD_EMAIL_LIST=user/email/list.html +CMD_EMAIL_LIST_MODIFY=user/email/list_modify.html +CMD_EMAIL_LIST_VIEW=user/email/list_view.html + +CMD_EMAIL_FILTER=user/email/filter.html +CMD_SHOW_DOMAIN=user/show_domain.html +CMD_SUBDOMAIN=user/subdomains.html +CMD_SUBDOMAIN_OVERRIDE=user/subdomain_override.html +CMD_DNS_CONTROL=user/dns_control.html +JS_DNS=user/dns.js +CMD_DNS_MX=user/dns_mx_control.html +CMD_SHOW_SUB_DOMAIN=user/show_sub_domain.html +CMD_TICKET=user/ticket/main.html +CMD_TICKET_CLOSED=user/ticket/main_closed.html +CMD_TICKET_CREATE=user/ticket/create.html +CMD_TICKET_CREATE_MULTIPLE=user/ticket/create_multiple.html +CMD_TICKET_VIEW=user/ticket/view.html +HTM_TICKET_REPLY=user/ticket/reply.html +CMD_FILE_MANAGER=user/filemanager/main.html +CMD_FILE_MANAGER_EDIT=user/filemanager/edit.html +CMD_FILE_MANAGER_RENAME=user/filemanager/rename.html +CMD_FILE_MANAGER_COPY=user/filemanager/copy.html +CMD_FILE_MANAGER_PROTECT=user/filemanager/protect.html +CMD_FILE_MANAGER_EXTRACT=user/filemanager/extract.html +CMD_PROTECTED_DIRECTORIES=user/filemanager/protected.html +CMD_MIME_TYPES=user/mime_types.html +CMD_MIME_TYPES_SYS=user/mime_types_sys.html +CMD_HANDLERS=user/apache_handlers.html +CMD_HANDLERS_SYS=user/apache_handlers_sys.html +CMD_LOGIN_HISTORY=user/login_history.html +CMD_CRON_JOBS=user/cronjobs.html +CMD_REDIRECT=user/redirects.html +CMD_HOTLINK=user/hotlink.html +CMD_DOMAIN_POINTER=user/domain_pointers.html +CMD_SITE_BACKUP=user/site_backup.html +CMD_SITE_RESTORE=user/site_restore.html +CMD_SYSTEM_INFO=user/server_info.html +CMD_PERL_MODULES=user/perl_modules.html +CMD_USER_STATS=user/user_stats.html +CMD_SHOW_LOG=user/show_log.html +HTM_ERROR_PAGES=user/error_pages.html +HTM_FILE_UPLOAD=user/filemanager/upload.html +HTM_MENU_USER=user/menu_user.html +IMG_BG_ALL=images/bg_all.gif +IMG_FOLDER=images/folder.png +IMG_FOLDER_LINK=images/folder_link.png +IMG_FILE=images/file.png +IMG_FILE_LINK=images/file_link.png +IMG_TRASH=images/trash.png +HTM_PASSWD=passwd.html +CMD_LOGOUT=loggedout.html +HTM_JAVASCRIPT=javascript.html +JS_JAVASCRIPT=javascript.html +HTM_LIVESEARCH=livesearch.js +JS_LIVESEARCH=livesearch.js +JS_CREATION_CHECK=creation_check.js +JS_VISIBILITY=visibility.js +CMD_CHANGE_DOMAIN=user/change_domain.html +CMD_ADDITIONAL_DOMAINS=user/additional_domains.html +CMD_ADDITIONAL_DOMAINS_VIEW=user/modify_domain.html +CMD_PLUGINS=user/plugin.html +CMD_USER_HISTORY=user/show_history.html +CMD_SPAMASSASSIN=user/email/spamassassin.html + +CMD_BANDWIDTH_BREAKDOWN=user/bandwidth_breakdown.html +CMD_DU_BREAKDOWN=user/du_breakdown.html + +CMD_LOGIN_KEYS=user/login_keys.html +CMD_LOGIN_KEY_CREATE=user/create_login_key.html +CMD_LOGIN_KEY_MODIFY=user/modify_login_key.html + +CMD_SSH_KEYS=user/ssh_keys.html +CMD_SSH_KEYS_EDIT=user/ssh_keys_edit.html + +CMD_SECURITY_QUESTIONS=user/security_questions.html +CMD_ASK_SECURITY_QUESTION=user/ask_security_question.html + +CMD_TWOSTEP_AUTH=user/twostep_auth.html +CMD_ASK_TWOSTEP_AUTH=user/ask_security_question.html + +CMD_PHP_SETTINGS=user/php_settings.html +CMD_MODSECURITY=user/mod_security.html + +IMG_SKIN_LEFT_SHADOW=images/left-shadow.gif +IMG_SKIN_RIGHT_SHADOW=images/right-shadow.gif +IMG_FOOTER_NEW=images/footer3.gif +IMG_FOOTER_FULL=images/footer4.gif +IMG_INNER_BG=images/inner-bg.gif + +IMG_SKIN_NAV_LOGOUT2=images/nav-logout2.gif +IMG_SKIN_NAV_LOGOUT2_OVER=images/nav-logout2-over.gif + +IMG_SKIN_HEADER=images/header.gif +IMG_SKIN_HEADER_NONAME=images/header-noname.gif +IMG_FOOTER_BAR=images/footer.gif +IMG_FOOTER_WIDE=images/footer_wide.gif + +IMG_SKIN_NAV_HOME=images/nav-home.gif +IMG_SKIN_NAV_HOME_OVER=images/nav-home-over.gif +IMG_SKIN_NAV_WEBMAIL=images/nav-webmail.gif +IMG_SKIN_NAV_WEBMAIL_OVER=images/nav-webmail-over.gif +IMG_SKIN_NAV_PASSWORD=images/nav-password.gif +IMG_SKIN_NAV_PASSWORD_OVER=images/nav-password-over.gif +IMG_SKIN_NAV_HELP=images/help.gif +IMG_SKIN_NAV_HELP_OVER=images/help-over.gif +IMG_SKIN_NAV_FILEMAN=images/nav-fileman.gif +IMG_SKIN_NAV_FILEMAN_OVER=images/nav-fileman-over.gif +IMG_SKIN_NAV_LOGOUT=images/nav-logout.gif +IMG_SKIN_NAV_LOGOUT_OVER=images/nav-logout-over.gif + +IMG_SKIN_CTRL_DOMAIN=images/left-currentdomain.gif +IMG_SKIN_CTRL_ACCOUNT=images/left-youraccount.gif +IMG_SKIN_CTRL_ACCESS=images/left-accesslevel.gif + +IMG_SKIN_BG=images/allbg.gif +IMG_SKIN_NAV_BG=images/nav-bg.gif + +IMG_SKIN_BODY_ACCOUNT=images/user-youraccount.gif +IMG_SKIN_BODY_EMAIL=images/user-email.gif +IMG_SKIN_BODY_ADVANCED=images/user-advanced.gif + +IMG_SKIN_GRADIENT=images/gradient.gif + + +IMG_SKIN_BAR_RIGHT_BLUE=images/right-blue2.gif +IMG_SKIN_BAR_LEFT_BLUE=images/left-blue.gif +IMG_SKIN_BAR_BG_BLUE=images/bg-blue2.gif + +IMG_SKIN_BAR_RIGHT_GREEN=images/right-green2.gif +IMG_SKIN_BAR_LEFT_GREEN=images/left-green.gif +IMG_SKIN_BAR_BG_GREEN=images/bg-green.gif + +IMG_SKIN_BAR_RIGHT_YELLOW=images/right-yellow2.gif +IMG_SKIN_BAR_LEFT_YELLOW=images/left-yellow.gif +IMG_SKIN_BAR_BG_YELLOW=images/bg-yellow.gif + +IMG_SKIN_BAR_RIGHT_ORANGE=images/right-orange2.gif +IMG_SKIN_BAR_LEFT_ORANGE=images/left-orange.gif +IMG_SKIN_BAR_BG_ORANGE=images/bg-orange.gif + +IMG_SKIN_BAR_RIGHT_RED=images/right-red2.gif +IMG_SKIN_BAR_LEFT_RED=images/left-red.gif +IMG_SKIN_BAR_BG_RED=images/bg-red.gif + +HTM_MENU=user/menu.html +LF_FOOTER=lf_footer.html +LF_STANDARD=lf_standard.html +LF_IMAGES=lf_images.html +LF_JS=javascript.html +LF_HANDLERS=user/apache_handlers.html +LF_DNS=admin/dns_admin_control.html +LF_MIME_TYPES=user/mime_types.html +LF_SITE_BACKUP=user/site_backup.html +LF_SSL=user/ssl.html +LF_DB=user/db/db.html +LF_AUTO_RESPONDER=user/email/autoresponder.html +LF_FORWARDER=user/email/forwarder.html +LF_LIST=user/email/list.html +LF_POP=user/email/pop.html +LF_VACATION=user/email/vacation.html +LF_FTP=user/ftp/ftp.html +LF_TICKET=user/ticket/main.html +LF_STATS=user/user_stats.html +LF_ADDITIONAL_DOMAINS=user/additional_domains.html +LF_LOGIN_KEYS=user/login_keys.html +LF_SSH_KEYS=user/ssh_keys.html + +IMG_CHECKBOX=images/checkbox.png +IMG_INCORRECT=images/incorrect.png + +IMG_EDIT_COG=images/cog.png +IMG_PENCIL=images/pencil.png diff --git a/update/data/skins/enhanced/footer.html b/update/data/skins/enhanced/footer.html new file mode 100644 index 0000000..74c2b6b --- /dev/null +++ b/update/data/skins/enhanced/footer.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + +|*if TABLE_HIGHLIGHTING="1"| + +|*endif| +
|LANG_PLEASE_CONFIRM|: + + +|TEXT| + + +