diff --git a/install/dist/conf/centos70.conf.php b/install/dist/conf/centos70.conf.php index ec59c754cb3c93ead89f61738982bd9f4ba5756f..0ea6524c1b119a626de661f841cfe7eb665dd218 100644 --- a/install/dist/conf/centos70.conf.php +++ b/install/dist/conf/centos70.conf.php @@ -186,7 +186,7 @@ $conf['bind']['init_script'] = 'named'; //* Jailkit $conf['jailkit']['installed'] = false; // will be detected automatically during installation $conf['jailkit']['config_dir'] = '/etc/jailkit'; -$conf['jailkit']['jk_init'] = 'jk_init.ini'; +$conf['jailkit']['jk_init'] = 'jk_init_el.ini'; $conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini'; $conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano'; $conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php'; diff --git a/install/dist/conf/centos72.conf.php b/install/dist/conf/centos72.conf.php index d83ac2300b8f284c565363180e26450f054d8edc..51cd5b3332992e6c79ad13927baa68bf56b71d11 100644 --- a/install/dist/conf/centos72.conf.php +++ b/install/dist/conf/centos72.conf.php @@ -189,7 +189,7 @@ $conf['bind']['init_script'] = 'named'; //* Jailkit $conf['jailkit']['installed'] = false; // will be detected automatically during installation $conf['jailkit']['config_dir'] = '/etc/jailkit'; -$conf['jailkit']['jk_init'] = 'jk_init.ini'; +$conf['jailkit']['jk_init'] = 'jk_init_el.ini'; $conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini'; $conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano'; $conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php'; diff --git a/install/dist/conf/centos80.conf.php b/install/dist/conf/centos80.conf.php index dd2abc668a21384b906f987f59da19a9ff24bf06..bdba560c4f10757d1c53a9f481a68e037da5a558 100644 --- a/install/dist/conf/centos80.conf.php +++ b/install/dist/conf/centos80.conf.php @@ -189,7 +189,7 @@ $conf['bind']['init_script'] = 'named'; //* Jailkit $conf['jailkit']['installed'] = false; // will be detected automatically during installation $conf['jailkit']['config_dir'] = '/etc/jailkit'; -$conf['jailkit']['jk_init'] = 'jk_init.ini'; +$conf['jailkit']['jk_init'] = 'jk_init_el.ini'; $conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini'; $conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano'; $conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php'; diff --git a/install/dist/conf/centos90.conf.php b/install/dist/conf/centos90.conf.php index 909418dc2ef9d2babed8f0f413c3cfa0a1d9e648..f513d6b080d1d9446025964b2115b65874f56ee8 100644 --- a/install/dist/conf/centos90.conf.php +++ b/install/dist/conf/centos90.conf.php @@ -189,7 +189,7 @@ $conf['bind']['init_script'] = 'named'; //* Jailkit $conf['jailkit']['installed'] = false; // will be detected automatically during installation $conf['jailkit']['config_dir'] = '/etc/jailkit'; -$conf['jailkit']['jk_init'] = 'jk_init.ini'; +$conf['jailkit']['jk_init'] = 'jk_init_el.ini'; $conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini'; $conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano'; $conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php'; diff --git a/install/dist/conf/fedora9.conf.php b/install/dist/conf/fedora9.conf.php index 49802db9d6e59beb1ba6527b2f8557e505e798a6..1928489e5c2c1e1191daf15940641c6724ac00fe 100644 --- a/install/dist/conf/fedora9.conf.php +++ b/install/dist/conf/fedora9.conf.php @@ -185,7 +185,7 @@ $conf['bind']['init_script'] = 'named'; //* Jailkit $conf['jailkit']['installed'] = false; // will be detected automatically during installation $conf['jailkit']['config_dir'] = '/etc/jailkit'; -$conf['jailkit']['jk_init'] = 'jk_init.ini'; +$conf['jailkit']['jk_init'] = 'jk_init_el.ini'; $conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini'; $conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano'; $conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php'; diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 6b72bbf834162cf52f12f1ef181e3219f6c96404..ae8f2ca7d1f894fdd62ca93f784d847b0beeaf3f 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -914,20 +914,22 @@ class installer_base extends stdClass { $config_dir = $cf['config_dir']; $jk_init = $cf['jk_init']; $jk_chrootsh = $cf['jk_chrootsh']; + $dest_jk_init = 'jk_init.ini'; + $dest_jk_chrootsh = 'jk_chrootsh.ini'; if (is_dir($config_dir)) { - if(is_file($config_dir.'/'.$jk_init)) copy($config_dir.'/'.$jk_init, $config_dir.'/'.$jk_init.'~'); - if(is_file($config_dir.'/'.$jk_chrootsh)) copy($config_dir.'/'.$jk_chrootsh, $config_dir.'/'.$jk_chrootsh.'~'); + if(is_file($config_dir.'/'.$jk_init)) copy($config_dir.'/'.$jk_init, $config_dir.'/'.$dest_jk_init.'~'); + if(is_file($config_dir.'/'.$jk_chrootsh)) copy($config_dir.'/'.$jk_chrootsh, $config_dir.'/'.$dest_jk_chrootsh.'~'); if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_init.'.master')) { - copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_init.'.master', $config_dir.'/'.$jk_init); + copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_init.'.master', $config_dir.'/'.$dest_jk_init); } else { - copy('tpl/'.$jk_init.'.master', $config_dir.'/'.$jk_init); + copy('tpl/'.$jk_init.'.master', $config_dir.'/'.$dest_jk_init); } if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_chrootsh.'.master')) { - copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh); + copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_chrootsh.'.master', $config_dir.'/'.$dest_jk_chrootsh); } else { - copy('tpl/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh); + copy('tpl/'.$jk_chrootsh.'.master', $config_dir.'/'.$dest_jk_chrootsh); } } diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 1a6f847d65e58e1e172a969d8871524a7932c46c..361b1d18269d8e44f3888e8c8da52a0f9036c379 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1 +1,3 @@ +ALTER TABLE `web_database_user` ADD `database_password_sha2` varchar(70) DEFAULT NULL AFTER `database_password`; ALTER TABLE `server_php` ADD `php_cli_binary` varchar(255) DEFAULT NULL AFTER `php_fpm_socket_dir`; +ALTER TABLE `server_php` ADD `php_jk_section` varchar(255) DEFAULT NULL AFTER `php_cli_binary`; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index c178f843d59854e54142ecced2a12f6fc30eeff1..afb076daa85ec04262498dc7f94c1fba7e779d0b 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -1463,6 +1463,7 @@ CREATE TABLE `server_php` ( `php_fpm_pool_dir` varchar(255) DEFAULT NULL, `php_fpm_socket_dir` varchar(255) DEFAULT NULL, `php_cli_binary` varchar(255) DEFAULT NULL, + `php_jk_section` varchar(255) DEFAULT NULL, `active` enum('n','y') NOT NULL DEFAULT 'y', `sortprio` int(20) NOT NULL DEFAULT 100, PRIMARY KEY (`server_php_id`) diff --git a/install/tpl/jk_init_el.ini.master b/install/tpl/jk_init_el.ini.master new file mode 100644 index 0000000000000000000000000000000000000000..2f4ae5afe2a59963ebaac988355fc4404919b37d --- /dev/null +++ b/install/tpl/jk_init_el.ini.master @@ -0,0 +1,272 @@ +# jk_init.ini: jailkit initialization config + +# Includes paths to handle Enterprise Linux systems like RHEL and its derivatives AlmaLinux, Rocky Linux et cetera +# if other paths are needed please create an issue with the details or a merge request at: +# https://git.ispconfig.org/ispconfig/ispconfig3 + +[uidbasics] +comment = common files for all jails that need user/group information +paths = /lib*/libnsl.so.*, /lib*/libnss*.so.*, /lib/*/libnsl.so.*, /lib/*/libnss*.so.*, /etc/nsswitch.conf, /etc/ld.so.conf + +[netbasics] +comment = common files for all jails that need any internet connectivity +paths = /lib*/libnss_dns.so.*, /lib*/libnss_mdns*.so.*, /lib/*/libnss_dns.so.*, /lib/*/libnss_mdns*.so.*, /etc/resolv.conf, /etc/host.conf, /etc/hosts, /etc/protocols, /etc/services, /etc/ssl/certs/, /usr/lib/ssl/certs + +[logbasics] +comment = timezone information and log sockets +paths = /etc/localtime +need_logsocket = 1 + +[enterpriselinuxbasics] +comment = Various Enterprise Linux specific directories and programs +paths = /usr/lib/locale, /usr/share/modulefiles, /usr/share/Modules, /usr/share/tcl*, /usr/bin/lesspipe.sh, /usr/libexec/grepconf.sh, /usr/bin/tclsh, /usr/bin/tty +includesections = enterpriselinux_etc_env + +[enterpriselinux_etc_env] +comment = Enterprise Linux /etc specific environment related files +paths = /etc/profile, /etc/modulefiles, /etc/alternatives/modulecmd, /etc/DIR_COLORS*, /etc/sysconfig/bash-prompt-default, /etc/profile.d/bash_completion.sh, /etc/profile.d/color*, /etc/profile.d/lang*, /etc/profile.d/less*, /etc/profile.d/sh.local, /etc/profile.d/vim*, /etc/profile.d/composer*, /etc/profile.d/conda*, /etc/profile.d/guestfish.sh, /etc/locale.conf, /etc/inputrc +emptydirs = /etc/ssl, /etc/pki + +[jk_lsh] +comment = Jailkit limited shell +paths = /usr/sbin/jk_lsh, /etc/jailkit/jk_lsh.ini +users = root +groups = root +includesections = uidbasics, logbasics + +[limitedshell] +comment = alias for jk_lsh +includesections = jk_lsh + +[cvs] +comment = Concurrent Versions System +paths = cvs +devices = /dev/null + +[git] +comment = Fast Version Control System +paths = /usr/bin/git*, /usr/lib/git-core, /usr/share/git-core, pager +includesections = editors, perl, netbasics, basicshell, coreutils + +[scp] +comment = ssh secure copy +paths = scp +includesections = netbasics, uidbasics +devices = /dev/urandom, /dev/null + +[sftp] +comment = ssh secure ftp +paths = /usr/lib/sftp-server, /usr/libexec/openssh/sftp-server, /usr/lib/misc/sftp-server, /usr/libexec/sftp-server, /usr/lib/openssh/sftp-server +includesections = netbasics, uidbasics +devices = /dev/urandom, /dev/null + +[ssh] +comment = ssh secure shell +paths = ssh +includesections = netbasics, uidbasics +devices = /dev/urandom, /dev/tty, /dev/null + +[rsync] +paths = rsync +includesections = netbasics, uidbasics + +[procmail] +comment = procmail mail delivery +paths = procmail, /bin/sh +devices = /dev/null + +[basicshell] +comment = bash based shell with several basic utilities +paths = /bin/sh, bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep, false, fgrep, grep, gunzip, gzip, ln, ls, mkdir, mktemp, more, mv, pwd, rm, rmdir, sed, sh, sleep, sync, tar, touch, true, uncompress, zcat, /etc/motd, /etc/issue, /etc/bash.bashrc, /etc/bashrc, /etc/profile, /usr/lib/locale/en_US.utf8, uname, expr, xargs +users = root +groups = root +includesections = uidbasics, enterpriselinuxbasics + +[interactiveshell] +comment = for ssh access to a full shell +includesections = uidbasics, basicshell, terminfo, editors, extendedshell + +[midnightcommander] +comment = Midnight Commander +paths = mc, mcedit, mcview, /usr/share/mc +includesections = basicshell, terminfo + +[extendedshell] +comment = bash shell including things like awk, bzip, tail, less +paths = awk, bzip2, bunzip2, ldd, less, clear, cut, du, find, head, less, md5sum, nice, sort, tac, tail, tr, sort, wc, watch, whoami +includesections = basicshell, midnightcommander, editors + +[terminfo] +comment = terminfo databases, required for example for ncurses or vim +paths = /etc/terminfo, /usr/share/terminfo, /lib/terminfo + +[editors] +comment = vim, joe and nano +includesections = terminfo +paths = joe, nano, vi, vim, /etc/vimrc, /etc/joe, /usr/share/vim + +[netutils] +comment = several internet utilities like curl, wget, ftp, rsync, scp, ssh +paths = curl, wget, lynx, ftp, host, rsync, smbclient +includesections = netbasics, ssh, sftp, scp + +[apacheutils] +comment = htpasswd utility +paths = htpasswd + +[extshellplusnet] +comment = alias for extendedshell + netutils + apacheutils +includesections = extendedshell, netutils, apacheutils + +[openvpn] +comment = jail for the openvpn daemon +paths = /usr/sbin/openvpn +users = root,nobody +groups = root,nogroup +devices = /dev/urandom, /dev/random, /dev/net/tun +includesections = netbasics, uidbasics +need_logsocket = 1 + +[apache] +comment = the apache webserver, very basic setup, probably too limited for you +paths = /usr/sbin/apache +users = root, www-data +groups = root, www-data +includesections = netbasics, uidbasics + +[perl] +comment = the perl interpreter and libraries +paths = perl, /usr/lib64/perl, /usr/lib64/perl5, /usr/share/perl, /usr/share/perl5 + +[xauth] +comment = getting X authentication to work +paths = /usr/bin/X11/xauth, /usr/X11R6/lib/X11/rgb.txt, /etc/ld.so.conf + +[xclients] +comment = minimal files for X clients +paths = /usr/X11R6/lib/X11/rgb.txt +includesections = xauth + +[vncserver] +comment = the VNC server program +paths = Xvnc, Xrealvnc, /usr/X11R6/lib/X11/fonts/ +includesections = xclients + +[ping] +comment = Ping program +paths_w_setuid = /bin/ping + +#[xterm] +#comment = xterm +#paths = /usr/bin/X11/xterm, /usr/share/terminfo, /etc/terminfo +#devices = /dev/pts/0, /dev/pts/1, /dev/pts/2, /dev/pts/3, /dev/pts/4, /dev/ptyb4, /dev/ptya4, /dev/tty, /dev/tty0, /dev/tty4 + +[coreutils] +comment = Progs from coreutils +paths = arch, b2sum, base32, base64, basename, cat, chcon, chgrp, chmod, chown, cksum, comm, cp, csplit, cut, date, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, id, install, join, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mktemp, mv, nice, nl, nohup, nproc, numfmt, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, realpath, rm, rmdir, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shred, shuf, sleep, sort, split, stat, stdbuf, stty, sum, tac, tail, tee, test, timeout, touch, tr, true, truncate, tsort, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami, yes + +[webutils] +comment = Collection of commonly used utils for webapps +paths = /usr/bin/gm, /usr/bin/convert, /usr/bin/identify, /usr/bin/composite, /usr/bin/combine, /usr/bin/cwebp, /usr/bin/pdf* + +[mysqlutils] +comment = MySQL client utils +paths = mysql, mysqldump, mysqlshow + +[composer] +comment = composer +paths = composer, /usr/local/bin/composer, /usr/share/doc/composer +includesections = php, uidbasics, netbasics + +[node] +comment = NodeJS +paths = npm, npx, node, nodejs, semver, /usr/lib/nodejs, /usr/share/nodejs, /usr/share/npm, /usr/share/node-mime, /usr/lib/node_modules, /usr/local/lib/nodejs, /usr/local/lib/node_modules, /etc/npmrc, /etc/npmignore, elmi-to-json, /usr/local/bin/elmi-to-json + +[env] +comment = /usr/bin/env for environment variables +paths = env + +[php] +comment = default php version and libraries +paths = /usr/bin/php +includesections = php_common + +[php_common] +comment = Common PHP directories and libraries +# notice: potential information leak +# do not add all of /etc/php/ or any of the fpm directories +# or the php config (which includes custom php snippets) from *all* +# sites which use fpm will be copied to *every* jailkit +paths = /usr/bin/php, /usr/bin/phar, /usr/lib64/php/, /usr/share/php/, /usr/share/zoneinfo/ +includesections = env, logbasics, netbasics, mysqlutils, webutils, imagemagick + +[php5_4] +comment = PHP 5.4 +paths = /opt/remi/php54/root/bin/php, /opt/remi/php54/root/bin/phar, /opt/remi/php54/root/usr/lib64/, /opt/remi/php54/root/usr/share/ +includesections = php_common + +[php5_5] +comment = PHP 5.5 +paths = /opt/remi/php55/root/bin/php, /opt/remi/php55/root/bin/phar, /opt/remi/php55/root/usr/lib64/, /opt/remi/php55/root/usr/share/ +includesections = php_common + +[php5_6] +comment = PHP 5.6 +paths = /opt/remi/php56/root/bin/php, /opt/remi/php56/root/bin/phar, /opt/remi/php56/root/usr/lib64/, /opt/remi/php56/root/usr/share/ +includesections = php_common + +[php7_0] +comment = PHP 7.0 +paths = /opt/remi/php70/root/bin/php, /opt/remi/php70/root/bin/phar, /opt/remi/php70/root/usr/lib64/, /opt/remi/php70/root/usr/share/ +includesections = php_common + +[php7_1] +comment = PHP 7.1 +paths = /opt/remi/php71/root/bin/php, /opt/remi/php71/root/bin/phar, /opt/remi/php71/root/usr/lib64/, /opt/remi/php71/root/usr/share/ +includesections = php_common + +[php7_2] +comment = PHP 7.2 +paths = /opt/remi/php72/root/bin/php, /opt/remi/php72/root/bin/phar, /opt/remi/php72/root/usr/lib64/, /opt/remi/php72/root/usr/share/ +includesections = php_common + +[php7_3] +comment = PHP 7.3 +paths = /opt/remi/php73/root/bin/php, /opt/remi/php73/root/bin/phar, /opt/remi/php73/root/usr/lib64/, /opt/remi/php73/root/usr/share/ +includesections = php_common + +[php7_4] +comment = PHP 7.4 +paths = /opt/remi/php74/root/bin/php, /opt/remi/php74/root/bin/phar, /opt/remi/php74/root/usr/lib64/, /opt/remi/php74/root/usr/share/ +includesections = php_common + +[php8_0] +comment = PHP 8.0 +paths = /opt/remi/php80/root/bin/php, /opt/remi/php80/root/bin/phar, /opt/remi/php80/root/usr/lib64/, /opt/remi/php80/root/usr/share/ +includesections = php_common + +[php8_1] +comment = PHP 8.1 +paths = /opt/remi/php81/root/bin/php, /opt/remi/php81/root/bin/phar, /opt/remi/php81/root/usr/lib64/, /opt/remi/php81/root/usr/share/ +includesections = php_common + +[php8_2] +comment = PHP 8.2 +paths = /opt/remi/php82/root/bin/php, /opt/remi/php82/root/bin/phar, /opt/remi/php82/root/usr/lib64/, /opt/remi/php82/root/usr/share/ +includesections = php_common + +[php8_3] +comment = PHP 8.3 +paths = /opt/remi/php83/root/bin/php, /opt/remi/php83/root/bin/phar, /opt/remi/php83/root/usr/lib64/, /opt/remi/php83/root/usr/share/ +includesections = php_common + +[php8_4] +comment = PHP 8.4 +paths = /opt/remi/php84/root/bin/php, /opt/remi/php84/root/bin/phar, /opt/remi/php84/root/usr/lib64/, /opt/remi/php84/root/usr/share/ +includesections = php_common + +[imagemagick] +comment = ImageMagick needed for php-imagemagick extension +paths = /usr/share/ImageMagick-*, /etc/ImageMagick-*, /usr/lib64/ImageMagick-* + + diff --git a/interface/web/admin/form/server_php.tform.php b/interface/web/admin/form/server_php.tform.php index f005e56f6415d81b1fa19b25fe165ffc240aa04f..1d1ba41c484bef07c96ffc8ddffb9f99ac8022fa 100644 --- a/interface/web/admin/form/server_php.tform.php +++ b/interface/web/admin/form/server_php.tform.php @@ -271,14 +271,29 @@ $form["tabs"]['php_cli'] = array ( 'width' => '40', 'maxlength' => '255' ), + 'php_jk_section' => array( + 'datatype' => 'TEXT', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array( + 0 => array ( + 'type' => 'REGEX', + 'regex' => '/^[a-zA-Z0-9\-\_\ ]*$/', + 'errmsg'=> 'php_cli_jk_section_error_regex' + ), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), ) ); $form["tabs"]['php_sort'] = array ( - 'title' => "PHP Sort Priority", + 'title' => "PHP Sort Priority", 'width' => 80, 'template' => "templates/server_php_sort_edit.htm", 'fields' => array( - 'sortprio' => array ( + 'sortprio' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', 'default' => '100', diff --git a/interface/web/admin/lib/lang/ar_server_php.lng b/interface/web/admin/lib/lang/ar_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/ar_server_php.lng +++ b/interface/web/admin/lib/lang/ar_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/bg_server_php.lng b/interface/web/admin/lib/lang/bg_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/bg_server_php.lng +++ b/interface/web/admin/lib/lang/bg_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/br_server_php.lng b/interface/web/admin/lib/lang/br_server_php.lng index cb1b93acc32442a1830e0e03a79b741f5953b9c4..178d70a3c935399973b0e8f63435a1ff7ce25995 100644 --- a/interface/web/admin/lib/lang/br_server_php.lng +++ b/interface/web/admin/lib/lang/br_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/ca_server_php.lng b/interface/web/admin/lib/lang/ca_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/ca_server_php.lng +++ b/interface/web/admin/lib/lang/ca_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/cn_server_php.lng b/interface/web/admin/lib/lang/cn_server_php.lng index 102bcc1fbf94070a94e14f2c7731845f4ec25be4..83178a50ab0581f44e2f1a67a5ce05f9686e416d 100644 --- a/interface/web/admin/lib/lang/cn_server_php.lng +++ b/interface/web/admin/lib/lang/cn_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/cz_server_php.lng b/interface/web/admin/lib/lang/cz_server_php.lng index eb16414a31dafcf8a7132808ea484700c6800261..be20bd3286b8931afd25417a2778b7a3133f73fb 100644 --- a/interface/web/admin/lib/lang/cz_server_php.lng +++ b/interface/web/admin/lib/lang/cz_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/de_server_php.lng b/interface/web/admin/lib/lang/de_server_php.lng index a63e90d80c6d650f500088c40224f48666c3ec87..c7ad0fe8a0210eaa53ade60e1cad419cc5b874e8 100644 --- a/interface/web/admin/lib/lang/de_server_php.lng +++ b/interface/web/admin/lib/lang/de_server_php.lng @@ -5,8 +5,8 @@ $wb['name_txt'] = 'PHP Name'; $wb['Name'] = 'Name'; $wb['FastCGI Settings'] = 'FastCGI Einstellungen'; $wb['PHP-FPM Settings'] = 'PHP-FPM Einstellungen'; -$wb['Additional PHP Versions'] = 'Zusätzliche PHP Versionen'; -$wb['Form to edit additional PHP versions'] = 'Formular, um zusätzliche PHP Versionen hinzuzufügen'; +$wb['Additional PHP Versions'] = 'Zusätzliche PHP-Versionen'; +$wb['Form to edit additional PHP versions'] = 'Formular, um zusätzliche PHP-Versionen hinzuzufügen'; $wb['server_php_name_error_empty'] = 'Das Name Feld darf nicht leer sein.'; $wb['php_fastcgi_binary_txt'] = 'Pfad zum PHP FastCGI Binary'; $wb['php_fastcgi_ini_dir_txt'] = 'Pfad zum php.ini Verzeichnis'; @@ -18,8 +18,12 @@ $wb['active_txt'] = 'Aktiv'; $wb['php_in_use_error'] = 'Diese PHP-Version wird noch benutzt.'; $wb['php_name_in_use_error'] = 'Der Name kann nicht geändert werden.'; $wb['PHP Sort Priority'] = 'Priorität'; -$wb['sortprio_txt'] = 'Sorting Priority'; -$wb['sortprio_long_txt'] = 'Priority of PHP Version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; +$wb['sortprio_txt'] = 'Sortieren Priorität'; +$wb['sortprio_long_txt'] = 'Priorität der PHP-Version im Auswahlfeld für die PHP-Version<br>Standardmäßig hat PHP die Priorität 0, wenn es aktiviert ist<br>Ein kleinerer Wert bedeutet eine höhere Priorität'; $wb['PHP-CLI settings'] = 'PHP-CLI-Einstellungen'; $wb['php_cli_binary_txt'] = 'Pfad zur PHP-CLI Binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Vollständiger Pfad zur PHP-CLI Binary (inkl. Dateinamen)'; +$wb['php_jk_section_txt'] = 'PHP Jailkit Sektion'; +$wb['tooltip_php_jk_section_txt'] = 'Bezeichner der PHP-Version in der jk_init.ini (Angabe ohne eckige Klammern)'; +$wb['php_cli_jk_section_error_regex'] = 'Ungültige Jaikit chroot-Sektion'; ?> diff --git a/interface/web/admin/lib/lang/en_server_php.lng b/interface/web/admin/lib/lang/en_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/en_server_php.lng +++ b/interface/web/admin/lib/lang/en_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/es_server_php.lng b/interface/web/admin/lib/lang/es_server_php.lng index ff81b3ae90fa99c6327f1ffd3a3fc651807c1789..74c3d593fb01fa9700942885d0fcf74c6c516236 100644 --- a/interface/web/admin/lib/lang/es_server_php.lng +++ b/interface/web/admin/lib/lang/es_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/fi_server_php.lng b/interface/web/admin/lib/lang/fi_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/fi_server_php.lng +++ b/interface/web/admin/lib/lang/fi_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/fr_server_php.lng b/interface/web/admin/lib/lang/fr_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/fr_server_php.lng +++ b/interface/web/admin/lib/lang/fr_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/hr_server_php.lng b/interface/web/admin/lib/lang/hr_server_php.lng index 57c44ae53cba58fc7f3df36dfc8e09e534103c33..625b2618a264ac7419089a3cb710669ef6e878bc 100644 --- a/interface/web/admin/lib/lang/hr_server_php.lng +++ b/interface/web/admin/lib/lang/hr_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/hu_server_php.lng b/interface/web/admin/lib/lang/hu_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/hu_server_php.lng +++ b/interface/web/admin/lib/lang/hu_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/id_server_php.lng b/interface/web/admin/lib/lang/id_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/id_server_php.lng +++ b/interface/web/admin/lib/lang/id_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/it_server_php.lng b/interface/web/admin/lib/lang/it_server_php.lng index 76c97e8adc09a1c471f5461077ff70e4161f0d0b..1752743a4359d4624bd486b3c4ad43edd80b5707 100644 --- a/interface/web/admin/lib/lang/it_server_php.lng +++ b/interface/web/admin/lib/lang/it_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/ja_server_php.lng b/interface/web/admin/lib/lang/ja_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/ja_server_php.lng +++ b/interface/web/admin/lib/lang/ja_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/nl_server_php.lng b/interface/web/admin/lib/lang/nl_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/nl_server_php.lng +++ b/interface/web/admin/lib/lang/nl_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/pl_server_php.lng b/interface/web/admin/lib/lang/pl_server_php.lng index c43dd727cb651640e342baac74dcac028baee45e..191171bb102ba0f87ea538a1b615a0749badbf12 100644 --- a/interface/web/admin/lib/lang/pl_server_php.lng +++ b/interface/web/admin/lib/lang/pl_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/pt_server_php.lng b/interface/web/admin/lib/lang/pt_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/pt_server_php.lng +++ b/interface/web/admin/lib/lang/pt_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/ro_server_php.lng b/interface/web/admin/lib/lang/ro_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/ro_server_php.lng +++ b/interface/web/admin/lib/lang/ro_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/ru_server_php.lng b/interface/web/admin/lib/lang/ru_server_php.lng index 6644018b3a531addcce8b23b470bc058f57d1f8a..9b2516472b65b383eace58308f611b0362034a4d 100644 --- a/interface/web/admin/lib/lang/ru_server_php.lng +++ b/interface/web/admin/lib/lang/ru_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/se_server_php.lng b/interface/web/admin/lib/lang/se_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/se_server_php.lng +++ b/interface/web/admin/lib/lang/se_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/sk_server_php.lng b/interface/web/admin/lib/lang/sk_server_php.lng index 89b357cdbccd594701c970bed0d520904e972ba1..ab471611dadb33580cf5ebc0fd6ea057e8cdd2dd 100644 --- a/interface/web/admin/lib/lang/sk_server_php.lng +++ b/interface/web/admin/lib/lang/sk_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/lib/lang/tr_server_php.lng b/interface/web/admin/lib/lang/tr_server_php.lng index 447b3ab20bd4f558d77bd10f5343e179f451f2a2..ccf806181e3d0b623a25835d3cfcc6e7977b671a 100644 --- a/interface/web/admin/lib/lang/tr_server_php.lng +++ b/interface/web/admin/lib/lang/tr_server_php.lng @@ -22,4 +22,8 @@ $wb['sortprio_txt'] = 'Priority'; $wb['sortprio_long_txt'] = 'Priority of PHP version in the PHP version select box<br>Default PHP has prio 0 if enabled<br>Lower value is higher priority'; $wb['PHP-CLI settings'] = 'PHP-CLI settings'; $wb['php_cli_binary_txt'] = 'Path to the PHP CLI binary'; +$wb['tooltip_php_cli_binary_txt'] = 'Path to the PHP CLI binary including the filename'; +$wb['php_jk_section_txt'] = 'PHP Jailkit section'; +$wb['tooltip_php_jk_section_txt'] = 'Identifier of the PHP version in your jk_init.ini (without square brackets).'; +$wb['php_cli_jk_section_error_regex'] = 'Invalid Jaikit chroot section'; ?> diff --git a/interface/web/admin/templates/server_php_cli_edit.htm b/interface/web/admin/templates/server_php_cli_edit.htm index 72e26bd4b8bf7cd2d56e64001cf03b9bb3b638f0..bc641ee82726e6107d8727a3b1ed2be68c2afee1 100644 --- a/interface/web/admin/templates/server_php_cli_edit.htm +++ b/interface/web/admin/templates/server_php_cli_edit.htm @@ -1,6 +1,9 @@ <div class="form-group"> <label for="php_cli_binary" class="col-sm-3 control-label">{tmpl_var name='php_cli_binary_txt'}</label> - <div class="col-sm-9"><input type="text" name="php_cli_binary" id="php_cli_binary" value="{tmpl_var name='php_cli_binary'}" class="form-control" /></div></div> + <div class="col-sm-9"><input type="text" name="php_cli_binary"data-toggle="tooltip" title="{tmpl_var name='tooltip_php_cli_binary_txt'}" id="php_cli_binary" value="{tmpl_var name='php_cli_binary'}" class="form-control" /></div></div> + <div class="form-group"> + <label for="php_jk_section" class="col-sm-3 control-label">{tmpl_var name='php_jk_section_txt'}</label> + <div class="col-sm-9"><input type="text" name="php_jk_section" data-toggle="tooltip" title="{tmpl_var name='tooltip_php_jk_section_txt'}" id="php_jk_section" value="{tmpl_var name='php_jk_section'}" class="form-control" /></div></div> <input type="hidden" name="id" value="{tmpl_var name='id'}"> @@ -8,3 +11,5 @@ <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_php_edit.php">{tmpl_var name='btn_save_txt'}</button> <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_php_list.php">{tmpl_var name='btn_cancel_txt'}</button> </div></div> + + diff --git a/interface/web/sites/ajax_get_json.php b/interface/web/sites/ajax_get_json.php index c90cd4bb403f79e1a38ea6798593b25c8359a9c7..1743d4c185596c48783a1097a0f5f4b046a58c7c 100644 --- a/interface/web/sites/ajax_get_json.php +++ b/interface/web/sites/ajax_get_json.php @@ -248,59 +248,55 @@ if($type == 'getclientssldata'){ $json = $app->functions->json_encode($client); } -if($type == 'getcronplaceholders') { - - if(is_array($web_id) && !empty($web_id)) { - - $web_docroot_client = ''; - - $web = $app->db->queryOneRecord("SELECT wd.sys_groupid, wd.domain, wd.document_root, sp.php_cli_binary - FROM web_domain wd - LEFT JOIN server_php sp ON wd.server_php_id = sp.server_php_id - WHERE wd.domain_id = ?", $web_id); - - if(empty($web['php_cli_binary'])) { - $php_cli_binary = "/usr/bin/php"; - } else { - $php_cli_binary = $web['php_cli_binary']; - } - - if(empty($web['domain'])) { - $domain = $app->tform->wordbook["domain_not_selected_placeholder_txt"]; - } else { - $domain = $web['domain']; - } - - - $domain_owner = $app->db->queryOneRecord("SELECT limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $web["sys_groupid"]); - - //* True if the site is assigned to a client - if(isset($domain_owner["limit_cron_type"])) { - if($domain_owner["limit_cron_type"] == 'full') { - $cron_type = 'full'; - } else { - $cron_type = 'chrooted'; - } - } else { - //* True if the site is assigned to the admin - $cron_type = 'full'; - } - - if($cron_type != 'chrooted') { - $web_docroot_client = $web['document_root']; - } - - $web_docroot_client .= '/web'; - - $json = json_encode(array( - 'php_cli_binary' => $php_cli_binary, - 'docroot_client' => $web_docroot_client, - //'cron_type' => $cron_type, - 'domain' => $domain - )); - } - - +if ($type == 'getcronplaceholders') { + + if (!empty($web_id)) { + $web_docroot_client = ''; + + $web = $app->db->queryOneRecord("SELECT wd.sys_groupid, wd.domain, wd.document_root, sp.php_cli_binary + FROM web_domain wd + LEFT JOIN server_php sp ON wd.server_php_id = sp.server_php_id + WHERE wd.domain_id = ?", $web_id); + + if (empty($web['php_cli_binary'])) { + $php_cli_binary = "/usr/bin/php"; + } else { + $php_cli_binary = $web['php_cli_binary']; + } + + if (empty($web['domain'])) { + $domain = $app->tform->wordbook["domain_not_selected_placeholder_txt"]; + } else { + $domain = $web['domain']; + } + + $domain_owner = $app->db->queryOneRecord("SELECT limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $web["sys_groupid"]); + + //* True if the site is assigned to a client + if (isset($domain_owner["limit_cron_type"])) { + if ($domain_owner["limit_cron_type"] == 'full') { + $cron_type = 'full'; + } else { + $cron_type = 'chrooted'; + } + } else { + //* True if the site is assigned to the admin + $cron_type = 'full'; + } + + if ($cron_type != 'chrooted') { + $web_docroot_client = $web['document_root']; + } + + $web_docroot_client .= '/web'; + + $json = json_encode(array( + 'php_cli_binary' => $php_cli_binary, + 'docroot_client' => $web_docroot_client, + 'cron_type' => $cron_type, + 'domain' => $domain + )); + } } header('Content-type: application/json'); diff --git a/interface/web/sites/lib/lang/ar_cron.lng b/interface/web/sites/lib/lang/ar_cron.lng index fb114d1a5b71f64f697de6acd18515e71f74f454..76b8952a7340ab08765342c7324c41bfcff2a511 100644 --- a/interface/web/sites/lib/lang/ar_cron.lng +++ b/interface/web/sites/lib/lang/ar_cron.lng @@ -24,4 +24,5 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; ?> diff --git a/interface/web/sites/lib/lang/bg_cron.lng b/interface/web/sites/lib/lang/bg_cron.lng index c4877f897254df2ce1da6ab81ba162cc7f206c45..f70b1e33225f7afd74ecde07873d074a1bec61a3 100644 --- a/interface/web/sites/lib/lang/bg_cron.lng +++ b/interface/web/sites/lib/lang/bg_cron.lng @@ -24,4 +24,5 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; ?> diff --git a/interface/web/sites/lib/lang/br_cron.lng b/interface/web/sites/lib/lang/br_cron.lng index bf26c58310f2385ed1f24ca6d30cdeb919a49d10..8c8d51c89379e5681e47126e69251be8f71535e1 100644 --- a/interface/web/sites/lib/lang/br_cron.lng +++ b/interface/web/sites/lib/lang/br_cron.lng @@ -25,3 +25,5 @@ $wb['limit_cron_url_txt'] = 'Somente URL no Cron. Por favor insira uma URL inici $wb['command_error_empty'] = 'Comando a executar está vazio.'; $wb['Cron Job'] = 'Tarefas no Cron'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; + diff --git a/interface/web/sites/lib/lang/ca_cron.lng b/interface/web/sites/lib/lang/ca_cron.lng index 8d04a71e03b191516277e365dee06e72ca0058e2..15e78569a751257207f01aec399c0094db2486e1 100644 --- a/interface/web/sites/lib/lang/ca_cron.lng +++ b/interface/web/sites/lib/lang/ca_cron.lng @@ -24,4 +24,5 @@ $wb['command_error_empty'] = 'Le champ Commande à exécuter est vide.'; $wb['command_hint_txt'] = 'par exemple /var/www/clients/clientX/webY/monscript.sh ou https://www.mondomaine.com/chemin/script.php, vous pouvez utiliser la constante [web_root] qui sera remplacée par /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Journaliser la sortie du cron'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; ?> diff --git a/interface/web/sites/lib/lang/cn_cron.lng b/interface/web/sites/lib/lang/cn_cron.lng index f689a930cfdb40db0fbf6636cda7b3f39b70de0f..7c753a523072633e83f57494cc68ec7343449f0e 100644 --- a/interface/web/sites/lib/lang/cn_cron.lng +++ b/interface/web/sites/lib/lang/cn_cron.lng @@ -24,4 +24,5 @@ $wb['log_output_txt'] = '记录输出'; $wb['limit_cron_url_txt'] = 'ä»…é™ URL 计划任务。请将以 https:// 开头的 URL 作为计划任务命令输入。'; $wb['command_error_empty'] = '命令为空。'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; ?> diff --git a/interface/web/sites/lib/lang/cz_cron.lng b/interface/web/sites/lib/lang/cz_cron.lng index 5144015d6f0d13bd1e7ffe182bb095da8034b5f0..637657ee87f431fffa950cf81c32cf82a39842ab 100644 --- a/interface/web/sites/lib/lang/cz_cron.lng +++ b/interface/web/sites/lib/lang/cz_cron.lng @@ -24,3 +24,5 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or http://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; + diff --git a/interface/web/sites/lib/lang/de_cron.lng b/interface/web/sites/lib/lang/de_cron.lng index 81f1f61e7d67f396f8a6bb979c9ef9ca78120f27..9e50a757d60800641545cc002e63bc663a211356 100644 --- a/interface/web/sites/lib/lang/de_cron.lng +++ b/interface/web/sites/lib/lang/de_cron.lng @@ -25,4 +25,5 @@ $wb['limit_cron_url_txt'] = 'Es sind nur URL cronjobs möglich. Der Cron-Befehl $wb['command_error_empty'] = 'Befehl ist leer.'; $wb['variables_txt'] = 'Variablen'; $wb['domain_not_selected_placeholder_txt'] = 'Bitte wähle eine Domain aus'; +$wb['is_jailed_txt'] = 'Jailkit gesicherter Cronjob'; diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng index 8441dfbdd9c7d431ac5fc64667af3b0bd0eeef3e..55f5f59051b325acaab9ccd2631e09e624ef0464 100644 --- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng @@ -191,16 +191,16 @@ $wb['error_ipv4_change_forbidden'] = 'Die IP kann nicht geändert werden. Bitte $wb['error_ipv6_change_forbidden'] = 'Die IP kann nicht geändert werden. Bitte wenden Sie sich an Ihren Administrator, wenn Sie die IPv6-Adresse ändern möchten.'; $wb['error_domain_change_forbidden'] = 'Der Domänenname kann nicht geändert werden. Wenden Sie sich bitte an Ihren Administrator, wenn Sie den Domänennamen ändern möchten.'; $wb['error_server_change_not_possible'] = 'Der Server kann nicht geändert werden.'; -$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit Chroot Anwendungsbereiche'; -$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit Chrooted Anwendungen'; -$wb['jailkit_chroot_app_sections_error_empty'] = 'Jailkit Chroot Anwendungsbereiche ist leer.'; -$wb['jailkit_chroot_app_programs_error_empty'] = 'Jailkit Chrooted Anwendungen ist leer.'; -$wb['jailkit_chroot_app_sections_error_regex'] = 'Ungültige Jaikit Chroot Anwendungsbereiche.'; +$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit Chroot Sektionen'; +$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit Chroot Anwendungen'; +$wb['jailkit_chroot_app_sections_error_empty'] = 'Jailkit Chroot Sektionen ist leer.'; +$wb['jailkit_chroot_app_programs_error_empty'] = 'Jailkit Chroot Anwendungen ist leer.'; +$wb['jailkit_chroot_app_sections_error_regex'] = 'Ungültige Jaikit Chroot Sektionen.'; $wb['jailkit_chroot_app_programs_error_regex'] = 'Ungültige Jaikit Chroot Anwendungen.'; -$wb['tooltip_jailkit_chroot_app_sections_txt'] = 'Wenn leer, verwende Jailkit Chroot Anwendungsbereiche aus der Serverkonfiguration'; -$wb['tooltip_jailkit_chroot_app_programs_txt'] = 'Wenn leer, verwende Jailkit Chroot Anwendungen aus der Serverkonfiguration'; +$wb['tooltip_jailkit_chroot_app_sections_txt'] = 'Wenn leer, übernehme die Jailkit Chroot Sektionen aus der Serverkonfiguration'; +$wb['tooltip_jailkit_chroot_app_programs_txt'] = 'Wenn leer, übernehme die Jailkit Chroot Anwendungen aus der Serverkonfiguration'; $wb['delete_unused_jailkit_txt'] = 'Lösche unbenutzten Jailkit Chroot'; $wb['tooltip_delete_unused_jailkit_txt'] = 'Lösche die Jailkit-Chroot-Umgebung, wenn es keine Shell-Benutzer oder Cronjobs gibt, die sie benötigen.'; $wb['ssl_options_not_for_le_txt'] = 'Sie haben Let\'s Encrypt-Zertifikate für diese Website aktiviert. Bitte beachten Sie, dass alle Optionen auf dieser Seite nur für Nicht-Let\'s Encrypt-Zertifikate gelten. Denken Sie daran, Let\'s Encrypt auf der Hauptregisterkarte zu deaktivieren, wenn Sie zu einem anderen Zertifikat wechseln möchten.'; $wb['disable_symlinknotowner_txt'] = 'Deaktiviere Symlinks-Restriktion des Webspace'; -$wb['tooltip_disable_symlinknotowner_txt'] = 'WARNUNG: Diese Funktion deaktiviert die Restriktion SymLinksIfOwnerMatch (Apache) und disable_symlinks if_not_owner (Nginx).'; +$wb['tooltip_disable_symlinknotowner_txt'] = 'WARNUNG: Diese Funktion deaktiviert die Restriktion SymLinksIfOwnerMatch (Apache) und disable_symlinks if_not_owner (Nginx)'; diff --git a/interface/web/sites/lib/lang/dk_cron.lng b/interface/web/sites/lib/lang/dk_cron.lng index 798cb4ea49d403e080c51e1642a3c291fddcaf56..c9559071c7fa135adef9a0547b79d2640746a7e8 100644 --- a/interface/web/sites/lib/lang/dk_cron.lng +++ b/interface/web/sites/lib/lang/dk_cron.lng @@ -24,3 +24,5 @@ $wb['command_error_empty'] = 'Command er tom.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; + diff --git a/interface/web/sites/lib/lang/el_cron.lng b/interface/web/sites/lib/lang/el_cron.lng index fe4985443050025fd4d0b6ece2a40a4ea10a3949..70ac780e2a866ae6cab90467796d1419d763bd9b 100644 --- a/interface/web/sites/lib/lang/el_cron.lng +++ b/interface/web/sites/lib/lang/el_cron.lng @@ -24,3 +24,4 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/en_cron.lng b/interface/web/sites/lib/lang/en_cron.lng index ecd146deea118dd1713a20bc7ff1d9bc6a44fe04..47cb15122fb2b1280a9a996abab35ce2bb84325c 100644 --- a/interface/web/sites/lib/lang/en_cron.lng +++ b/interface/web/sites/lib/lang/en_cron.lng @@ -25,3 +25,4 @@ $wb['limit_cron_url_txt'] = 'URL cron only. Please enter a URL starting with htt $wb['command_error_empty'] = 'Command is empty.'; $wb['variables_txt'] = 'Variables'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/es_cron.lng b/interface/web/sites/lib/lang/es_cron.lng index ccf7753b68c66ea3eadb221b28e38d2fbfce0c93..ae0157df97b8dd20c7c08c9cb8701e3f2cac58d9 100644 --- a/interface/web/sites/lib/lang/es_cron.lng +++ b/interface/web/sites/lib/lang/es_cron.lng @@ -24,3 +24,4 @@ $wb['server_id_error_empty'] = 'La ID del servidor está vacÃa.'; $wb['server_id_txt'] = 'Servidor'; $wb['unknown_fieldtype_error'] = 'Se ha usado un tipo de campo desconocido.'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/fi_cron.lng b/interface/web/sites/lib/lang/fi_cron.lng index b45f2e8849632f4637c9b19eb6549ae60ef93b8a..23fe57c3aaa273ea4070b2620f0eb4f4a54da048 100644 --- a/interface/web/sites/lib/lang/fi_cron.lng +++ b/interface/web/sites/lib/lang/fi_cron.lng @@ -24,4 +24,5 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/fr_cron.lng b/interface/web/sites/lib/lang/fr_cron.lng index 407b246a11458bcd8d8d6f1d54a8a4c56c0756b1..19f07fc93d53026786b7841ae458b029cffa8383 100644 --- a/interface/web/sites/lib/lang/fr_cron.lng +++ b/interface/web/sites/lib/lang/fr_cron.lng @@ -24,4 +24,4 @@ $wb['command_error_empty'] = 'Le champ Commande à exécuter est vide.'; $wb['command_hint_txt'] = 'par exemple /var/www/clients/clientX/webY/monscript.sh ou https://www.mondomaine.com/chemin/script.php, vous pouvez utiliser la constante [web_root] qui sera remplacée par /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Journaliser la sortie du cron'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; - +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/hr_cron.lng b/interface/web/sites/lib/lang/hr_cron.lng index a847d94087b46838a2238639a5fd372c61fda397..b6fa53491111325017e49697fb05514914757152 100644 --- a/interface/web/sites/lib/lang/hr_cron.lng +++ b/interface/web/sites/lib/lang/hr_cron.lng @@ -24,4 +24,5 @@ $wb['command_error_empty'] = 'Naredba je prazna.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/hu_cron.lng b/interface/web/sites/lib/lang/hu_cron.lng index fce63b11f03e4cdae57d11fd11b4df07491f808b..a1a7822c62a1b576a6c22a1846584b8bc7dea502 100644 --- a/interface/web/sites/lib/lang/hu_cron.lng +++ b/interface/web/sites/lib/lang/hu_cron.lng @@ -24,4 +24,4 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; - +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/id_cron.lng b/interface/web/sites/lib/lang/id_cron.lng index c001dfb28f7cc1bb4a89754e09eb5ec2d3e87ea0..aa6aeb7f5b97eedadcd54bc36f14642f8cfd1c6c 100644 --- a/interface/web/sites/lib/lang/id_cron.lng +++ b/interface/web/sites/lib/lang/id_cron.lng @@ -24,4 +24,5 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/it_cron.lng b/interface/web/sites/lib/lang/it_cron.lng index 7227cab4e669e648362735d9c21fe77dc836cfe7..225e08cea9130fa92c509954a3688dab00b72d81 100644 --- a/interface/web/sites/lib/lang/it_cron.lng +++ b/interface/web/sites/lib/lang/it_cron.lng @@ -24,4 +24,5 @@ $wb['command_error_empty'] = 'Command vuoto.'; $wb['command_hint_txt'] = 'esempio: /var/www/clients/clientX/webY/myscript.sh o https://www.mydomain.com/path/script.php, puoi usare [web_root] come sostitutivo che viene rimpiazzato da /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/ja_cron.lng b/interface/web/sites/lib/lang/ja_cron.lng index cb02ffe8c6050d18f982c2dbef1bae981f351031..0dd394a81b01124dcf13984210c5d4f36baf2ac0 100644 --- a/interface/web/sites/lib/lang/ja_cron.lng +++ b/interface/web/sites/lib/lang/ja_cron.lng @@ -24,4 +24,5 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/nl_cron.lng b/interface/web/sites/lib/lang/nl_cron.lng index 587cb4d5ce2e018db671311b0eb0f5dee31a3abe..156445c3e1ab1ff2f7ead7c94854ae7c57ce6ac7 100644 --- a/interface/web/sites/lib/lang/nl_cron.lng +++ b/interface/web/sites/lib/lang/nl_cron.lng @@ -24,3 +24,4 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'Geen domein geselecteerd'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/pl_cron.lng b/interface/web/sites/lib/lang/pl_cron.lng index 7212a3a2133d6544cbc4644eb49fdc1d30099aa8..77a30b34d47cba13595ec71b8a1e0135f56b6459 100644 --- a/interface/web/sites/lib/lang/pl_cron.lng +++ b/interface/web/sites/lib/lang/pl_cron.lng @@ -24,3 +24,4 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/pt_cron.lng b/interface/web/sites/lib/lang/pt_cron.lng index a6b06a5305529e32bcfc7aec4c0ef160afc2fd03..992d0097f78af880629112138d0dc49835c6edc1 100644 --- a/interface/web/sites/lib/lang/pt_cron.lng +++ b/interface/web/sites/lib/lang/pt_cron.lng @@ -24,3 +24,4 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/ro_cron.lng b/interface/web/sites/lib/lang/ro_cron.lng index 8a8d2aa79f1ab6474e0a4df29216d864fde903af..6a8bbbeedd118d29f181bc165e6951ac21cc0a1b 100644 --- a/interface/web/sites/lib/lang/ro_cron.lng +++ b/interface/web/sites/lib/lang/ro_cron.lng @@ -24,3 +24,4 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/ru_cron.lng b/interface/web/sites/lib/lang/ru_cron.lng index 1774ba5c646c82fa5e75dfd015cff75bce772567..fae60d73a2e7521caade3c8422d37815a059ec37 100644 --- a/interface/web/sites/lib/lang/ru_cron.lng +++ b/interface/web/sites/lib/lang/ru_cron.lng @@ -24,3 +24,4 @@ $wb['command_error_empty'] = 'Команда отÑутÑтвует.'; $wb['command_hint_txt'] = 'Ðапример, /var/www/clients/clientX/webY/myscript.sh или https://www.mydomain.com/path/script.php, Ð’Ñ‹ можете иÑпользовать заполнитель [web_root], который заменÑетÑÑ Ð½Ð° /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Журнал вывода'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/se_cron.lng b/interface/web/sites/lib/lang/se_cron.lng index 7ecf078210314d98c407f3a3072e501b8fc82e68..b56eb8764765c690ebdf135939e85c3ef250f30d 100644 --- a/interface/web/sites/lib/lang/se_cron.lng +++ b/interface/web/sites/lib/lang/se_cron.lng @@ -24,3 +24,4 @@ $wb['command_error_empty'] = 'Kommandofältet är tomt.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/sk_cron.lng b/interface/web/sites/lib/lang/sk_cron.lng index 7c9341d8138c3d844039fe7219dad7af6e37bd3a..68cf3846912bce1fac669ad698d2d3cd64b6534e 100644 --- a/interface/web/sites/lib/lang/sk_cron.lng +++ b/interface/web/sites/lib/lang/sk_cron.lng @@ -24,3 +24,4 @@ $wb['command_error_empty'] = 'Command is empty.'; $wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.'; $wb['log_output_txt'] = 'Log output'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/lib/lang/tr_cron.lng b/interface/web/sites/lib/lang/tr_cron.lng index c41267b9228b97f27152418ca91421bcd8e1f945..6e14e7f97d8f6d3b8aad40d2dac57442a67d6377 100644 --- a/interface/web/sites/lib/lang/tr_cron.lng +++ b/interface/web/sites/lib/lang/tr_cron.lng @@ -24,3 +24,4 @@ $wb['log_output_txt'] = 'Günlük çıktısı'; $wb['limit_cron_url_txt'] = 'Yalnız Ä°nternet adresli zamanlanmış görev kullanılabilir. Lütfen zamanlanmış görev komutu olarak https:// ile baÅŸlayan bir Ä°nternet adresi yazın.'; $wb['command_error_empty'] = 'Komut boÅŸ olamaz.'; $wb['domain_not_selected_placeholder_txt'] = 'No domain selected'; +$wb['is_jailed_txt'] = 'Jailkit secured cronjob'; diff --git a/interface/web/sites/templates/cron_edit.htm b/interface/web/sites/templates/cron_edit.htm index 68bc8669ca6a466918e249df84c296d210a4daa3..0d4cb2f08ace471a3c3750cb4d1fd2a793a99be8 100644 --- a/interface/web/sites/templates/cron_edit.htm +++ b/interface/web/sites/templates/cron_edit.htm @@ -1,18 +1,23 @@ - <div class="form-group"> - <tmpl_if name="edit_disabled"> - - <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label> - <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control" disabled="disabled"> - {tmpl_var name='parent_domain_id'} - </select></div> - <input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" /> - <tmpl_else> - <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label> - <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control"> - {tmpl_var name='parent_domain_id'} - </select></div> - </tmpl_if> +<div class="form-group"> + <tmpl_if name="edit_disabled"> + <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label> + <div class="col-sm-9 position-relative"> + <select name="parent_domain_id" id="parent_domain_id" class="form-control" disabled="disabled"> + {tmpl_var name='parent_domain_id'} + </select> + <span class="jail-symbol" title="{tmpl_var name='is_jailed_txt'}"><i class="fa fa-lock"></i></span> + </div> + <input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" /> + <tmpl_else> + <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label> + <div class="col-sm-9 position-relative"> + <select name="parent_domain_id" id="parent_domain_id" class="form-control"> + {tmpl_var name='parent_domain_id'} + </select> + <span class="jail-symbol" title="{tmpl_var name='is_jailed_txt'}"><i class="fa fa-lock"></i></span> </div> + </tmpl_if> +</div> <div class="form-group"> <label for="run_min" class="col-sm-3 control-label">{tmpl_var name='run_min_txt'}</label> @@ -80,28 +85,43 @@ </div></div> <script language="JavaScript" type="text/javascript"> - // Select first existing domain "onLoad" - jQuery(document).ready(function() { - jQuery('#parent_domain_id').trigger('change'); - }); - // Reload cron placeholders if a different domain was selected - jQuery('#parent_domain_id').change(function() { - reloadCronPlaceholders(); - }); + // Select first existing domain "onLoad" + jQuery(document).ready(function() { + jQuery('#parent_domain_id').trigger('change'); + }); + + // Reload cron placeholders if a different domain was selected + jQuery('#parent_domain_id').change(function() { + reloadCronPlaceholders(); + }); - function reloadCronPlaceholders() { - var parentDomainId = jQuery('#parent_domain_id').val() - jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {web_id: parentDomainId, 'type': 'getcronplaceholders'}, function(data) { + function reloadCronPlaceholders() { + var parentDomainId = jQuery('#parent_domain_id').val(); + jQuery.getJSON('sites/ajax_get_json.php' + '?' + Math.round(new Date().getTime()), {web_id: parentDomainId, 'type': 'getcronplaceholders'}, function(data) { //console.log(data); - $("#php_cli_binary").attr('data-original-title', data.php_cli_binary); - $('#docroot_client').attr('data-original-title', data.docroot_client); - // Update the data-original-title of the {DOMAIN} placeholder or load and display a hint to the user that no domain was selected yet. Should only happen if no web has been created or assigned by or to the user. - if(data.domain) { - $('#domain').attr('data-original-title', data.domain); + if (data) { + $("#php_cli_binary").attr('data-original-title', data.php_cli_binary); + $('#docroot_client').attr('data-original-title', data.docroot_client); + if (data.domain) { + $('#domain').attr('data-original-title', data.domain); + } else { + $('#domain').attr('data-original-title', "{tmpl_var name='domain_not_selected_placeholder_txt'}"); + } + // Show or hide the jail symbol based on cron_type + if (data.cron_type === 'chrooted') { + if (!$('.jail-symbol').length) { + $('#parent_domain_id').after('<span class="jail-symbol" title="{tmpl_var name='is_jailed_txt'}"><i class="fa fa-lock"></i></span>'); + } + } else { + $('.jail-symbol').remove(); + } } else { - $('#domain').attr('data-original-title', "{tmpl_var name='domain_not_selected_placeholder_txt'}"); + console.error("Empty response received from server."); } + }).fail(function(jqxhr, textStatus, error) { + console.error("Request Failed: " + textStatus + ", " + error); + console.log(jqxhr.responseText); // Log the response text }); - } + } </script> diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php index 1e2286112f2992fee6de6cbf0a922bba6ded6d5a..dd3a261b8328a79460449251619cb2685a3c2caf 100644 --- a/interface/web/sites/web_vhost_domain_edit.php +++ b/interface/web/sites/web_vhost_domain_edit.php @@ -266,6 +266,7 @@ class page_action extends tform_actions { $php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n"; } } + $app->tpl->setVar("server_php_id", $php_select); unset($php_records); @@ -409,6 +410,7 @@ class page_action extends tform_actions { $php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n"; } } + $app->tpl->setVar("server_php_id", $php_select); unset($php_records); @@ -587,6 +589,7 @@ class page_action extends tform_actions { $php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n"; } } + $app->tpl->setVar("server_php_id", $php_select); unset($php_records); @@ -680,10 +683,9 @@ class page_action extends tform_actions { $app->tpl->setVar("document_root", $tmp["document_root"], true); unset($tmp); } - } else { $app->tpl->setVar('server_id_value', $parent_domain['server_id']); - } + } } else { $app->tpl->setVar("edit_disabled", 0); $app->tpl->setVar('fixed_folder', 'n'); diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css index b27fe510938543de42aac00a5b1ab8609ad5b548..5ada86a478e2e9d9e199ae66b4d3e9ee69128675 100644 --- a/interface/web/themes/default/assets/stylesheets/ispconfig.css +++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css @@ -854,4 +854,15 @@ max-width: 1260px; } max-width: 90%; text-overflow: ellipsis ; overflow-x: hidden; - } \ No newline at end of file + } + .position-relative { + position: relative; + } + .jail-symbol { + position: absolute; + right: 5.5%; + top: 50%; + transform: translateY(-50%); + font-size: 1.4em; + color: #808080; + } diff --git a/server/conf/bashrc_user_deb.master b/server/conf/bashrc_user_deb.master index 10b4b94da275d55a0cd9c1519412367dc49dbe20..2e49857c9f966ff6ab5fbee4355cf349d5026bda 100644 --- a/server/conf/bashrc_user_deb.master +++ b/server/conf/bashrc_user_deb.master @@ -97,9 +97,6 @@ fi # Overwrite the PHP cli binaries by using $PATH: export PATH=<tmpl_var name='php_bin_dir'>:$PATH </tmpl_if> -<tmpl_if name='use_php_alias'> -alias php="<tmpl_var name='php_alias'>" -</tmpl_if> </tmpl_if> # Alias definitions. @@ -122,6 +119,13 @@ if ! shopt -oq posix; then fi fi +# User specific environment +if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]] +then + PATH="$HOME/.local/bin:$HOME/bin:$PATH" +fi +export PATH + # Source custom bashrc files if [ -d ~/.bashrc.d ] diff --git a/server/conf/bashrc_user_generic.master b/server/conf/bashrc_user_generic.master index 563ebefdb2f359244c25cb0249c0be1d61d94302..17b7347efc758267d76b6d3bc79e135279839009 100644 --- a/server/conf/bashrc_user_generic.master +++ b/server/conf/bashrc_user_generic.master @@ -17,9 +17,14 @@ export HOSTNAME=<tmpl_var name='domain'> # Overwrite the PHP cli binaries by using $PATH: export PATH=<tmpl_var name='php_bin_dir'>:$PATH </tmpl_if> -<tmpl_if name='use_php_alias'> -alias php="<tmpl_var name='php_alias'>" -</tmpl_if> + +# User specific environment +if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]] +then + PATH="$HOME/.local/bin:$HOME/bin:$PATH" +fi +export PATH + # Source custom bashrc files if [ -d ~/.bashrc.d ] diff --git a/server/conf/bashrc_user_redhat.master b/server/conf/bashrc_user_redhat.master index 0a81e94b778eb19174568f06236013ef383e491c..c3d24e306e8b7b3844c27b69dc526118de1b37da 100644 --- a/server/conf/bashrc_user_redhat.master +++ b/server/conf/bashrc_user_redhat.master @@ -4,9 +4,9 @@ export TERM=xterm </tmpl_if> -# Source global definitions +# Source global definitions first if [ -f /etc/bashrc ]; then - . /etc/bashrc + . /etc/bashrc fi <tmpl_if name='jailkit_chroot' op='==' value='y'> @@ -28,9 +28,6 @@ export HOSTNAME=<tmpl_var name='domain'> # Overwrite the PHP cli binaries by using $PATH: export PATH=<tmpl_var name='php_bin_dir'>:$PATH </tmpl_if> -<tmpl_if name='use_php_alias'> -alias php="<tmpl_var name='php_alias'>" -</tmpl_if> # User specific environment if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]] diff --git a/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php b/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php index e7ad60634b35fc2e5a1a3a13f1bf279e9966d40c..7651a4d9969a4434794f378fcc71db1269f057b5 100644 --- a/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php +++ b/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php @@ -65,7 +65,7 @@ class cronjob_jailkit_maintenance extends cronjob { // limit the number of jails we update at one time according to time of day $num_jails_to_update = (date('H') < 6) ? 25 : 3; - $sql = "SELECT domain_id, domain, document_root, system_user, system_group, php_fpm_chroot, jailkit_chroot_app_sections, jailkit_chroot_app_programs, delete_unused_jailkit, last_jailkit_hash, `php_cli_binary` + $sql = "SELECT domain_id, domain, document_root, system_user, system_group, php_fpm_chroot, jailkit_chroot_app_sections, jailkit_chroot_app_programs, delete_unused_jailkit, last_jailkit_hash, `php_cli_binary`, server_php.php_jk_section FROM web_domain LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id WHERE type = 'vhost' AND (last_jailkit_update IS NULL OR last_jailkit_update < (NOW() - INTERVAL 24 HOUR)) AND web_domain.server_id = ? @@ -89,6 +89,16 @@ class cronjob_jailkit_maintenance extends cronjob { $options['php_cli_binary'] = $rec['php_cli_binary']; } + $shelluser_list = $app->db->queryAllRecords("SELECT * FROM shell_user WHERE parent_domain_id = ? and chroot = 'jailkit' and active = 'y'", $rec['domain_id']); + $cronjob_list = $app->db->queryAllRecords("SELECT * FROM cron WHERE parent_domain_id = ? and type = 'chrooted' and active = 'y'", $rec['domain_id']); + + if(is_array($cronjob_list) && !empty($cronjob_list) || is_array($shelluser_list) && !empty($shelluser_list)) { + $options['jk_php_maintenance_check'] = "yes"; + } else { + $options['jk_php_maintenance_check'] = "no"; + + } + //$app->log('Beginning jailkit maintenance for domain '.$rec['domain'].' at '.$rec['document_root'], LOGLEVEL_DEBUG); print 'Beginning jailkit maintenance for domain '.$rec['domain'].' at '.$rec['document_root']."\n"; @@ -109,6 +119,7 @@ class cronjob_jailkit_maintenance extends cronjob { if ($shell_user_inuse || $cron_inuse || $rec['php_fpm_chroot'] == 'y' || $rec['delete_unused_jailkit'] != 'y') { $sections = $jailkit_config['jailkit_chroot_app_sections']; + if (isset($rec['jailkit_chroot_app_sections']) && $rec['jailkit_chroot_app_sections'] != '') { $sections = $rec['jailkit_chroot_app_sections']; } @@ -116,14 +127,19 @@ class cronjob_jailkit_maintenance extends cronjob { if (isset($rec['jailkit_chroot_app_programs']) && $rec['jailkit_chroot_app_programs'] != '') { $programs = $rec['jailkit_chroot_app_programs']; } + $programs .= ' '.$jailkit_config['jailkit_chroot_cron_programs']; + if (isset($rec['php_jk_section']) && $rec['php_jk_section'] != '') { + $sections .= ' '.$rec['php_jk_section']; + } + $last_updated = preg_split('/[\s,]+/', $sections.' '.$programs); $last_updated = array_unique($last_updated, SORT_REGULAR); sort($last_updated, SORT_STRING); $update_hash = hash('md5', implode(' ', $last_updated)); - if (substr($rec['last_jailkit_hash'], 0, strlen('force_update')) === 'force_update') { + if (isset($rec['last_jailkit_hash']) && substr($rec['last_jailkit_hash'], 0, strlen('force_update')) === 'force_update') { $options[] = 'force'; } elseif (is_file( $rec['document_root']."/bin/bash" )) { # test that /bin/bash functions in the jail diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index 4a03aecc6d5e4c5ccd55a6df9664b5c518d77ace..80a07bdc5db14958541e2cb15e134fc6173caf67 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -2366,22 +2366,64 @@ class system{ public function get_os_type() { global $app; - $dist = "undetected"; + $version = "unknown"; + $full_version = "unknown"; - if(file_exists('/etc/redhat-release') && (filesize('/etc/redhat-release') > 0)) { + if (file_exists('/etc/redhat-release') && (filesize('/etc/redhat-release') > 0)) { $dist = "redhat"; - } elseif(file_exists('/etc/debian_version') && (filesize('/etc/debian_version') > 0)) { + if (file_exists('/etc/os-release')) { + $os_release = file_get_contents('/etc/os-release'); + if (preg_match('/VERSION_ID="([^"]+)"/', $os_release, $matches)) { + $version = $matches[1]; + } + } + $full_version = trim(file_get_contents('/etc/redhat-release')); + } elseif (file_exists('/etc/debian_version') && (filesize('/etc/debian_version') > 0)) { $dist = "debian"; - } elseif(strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu') || (is_file('/etc/os-release') && stristr(file_get_contents('/etc/os-release'), 'Ubuntu'))) { + if (file_exists('/etc/os-release')) { + $os_release = file_get_contents('/etc/os-release'); + if (preg_match('/VERSION_ID="([^"]+)"/', $os_release, $matches)) { + $version = $matches[1]; + } + } + $full_version = trim(file_get_contents('/etc/debian_version')); + } elseif (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu') || (is_file('/etc/os-release') && stristr(file_get_contents('/etc/os-release'), 'Ubuntu'))) { $dist = "ubuntu"; - } elseif(file_exists('/etc/SuSE-release') && (filesize('/etc/SuSE-release') > 0)) { + if (file_exists('/etc/os-release')) { + $os_release = file_get_contents('/etc/os-release'); + if (preg_match('/VERSION="([^"]+)"/', $os_release, $matches)) { + $full_version = $matches[1]; + } + if (preg_match('/VERSION_ID="([^"]+)"/', $os_release, $matches)) { + $version = $matches[1]; + } + } + } elseif (file_exists('/etc/SuSE-release') && (filesize('/etc/SuSE-release') > 0)) { $dist = "suse"; - } elseif(file_exists('/etc/gentoo-release') && (filesize('/etc/gentoo-release') > 0)) { + if (file_exists('/etc/os-release')) { + $os_release = file_get_contents('/etc/os-release'); + if (preg_match('/VERSION_ID="([^"]+)"/', $os_release, $matches)) { + $version = $matches[1]; + } + } + $full_version = trim(file_get_contents('/etc/SuSE-release')); + } elseif (file_exists('/etc/gentoo-release') && (filesize('/etc/gentoo-release') > 0)) { $dist = "gentoo"; + if (file_exists('/etc/os-release')) { + $os_release = file_get_contents('/etc/os-release'); + if (preg_match('/VERSION_ID="([^"]+)"/', $os_release, $matches)) { + $version = $matches[1]; + } + } + $full_version = trim(file_get_contents('/etc/gentoo-release')); } - return $dist; + return [ + 'type' => $dist, + 'version' => $version, + 'full_version' => $full_version + ]; } public function is_allowed_path($path) { @@ -2835,32 +2877,39 @@ class system{ $this->chmod($home_dir . '/var/tmp', 0770, true); } + $os_type = $app->system->get_os_type(); + if (isset($os_type['type'])) { + $used_os_type = $os_type['type']; + } else { + $used_os_type = 'unknown'; + } - if(!empty($options['php_cli_binary'])) { - $php_bin_dir = dirname($options['php_cli_binary']); - if(!file_exists($home_dir . '/' . $options['php_cli_binary'])) { - $app->log("update_jailkit_chroot: The PHP cli binary " . $options['php_cli_binary'] . " is not available in the jail of the web " . $options['domain'], LOGLEVEL_DEBUG); + if($options['jk_php_maintenance_check'] == 'yes') { - $fallback_php = $app->system->get_newest_php_bin($home_dir . $php_bin_dir); - $fallback_php_bin = str_replace($home_dir, '', $fallback_php); + if(!empty($options['php_cli_binary'])) { + $php_bin_dir = dirname($options['php_cli_binary']); + if(!file_exists($home_dir . '/' . $options['php_cli_binary'])) { + $app->log("update_jailkit_chroot: The PHP cli binary " . $options['php_cli_binary'] . " is not available in the jail of the web " . $options['domain'], LOGLEVEL_DEBUG); - if(!empty($fallback_php) && file_exists($fallback_php_bin)) { - if(is_link($home_dir . '/etc/alternatives/php') || is_file($home_dir . '/etc/alternatives/php')) { - unlink($home_dir . '/etc/alternatives/php'); - symlink($fallback_php_bin, $home_dir . '/etc/alternatives/php'); - $app->log("update_jailkit_chroot: Found " . $fallback_php_bin . " as a fallback for alternatives/php in the jail of " . $options['domain'], LOGLEVEL_DEBUG); - } - } + $fallback_php = $app->system->get_newest_php_bin($home_dir . $php_bin_dir); + $fallback_php_bin = str_replace($home_dir, '', $fallback_php); - } else { - if($app->system->get_os_type() == "debian" || $app->system->get_os_type() == "ubuntu") { - $app->log("update_jailkit_chroot: setting alternatives/php to " . $options['php_cli_binary'], LOGLEVEL_DEBUG); - if(is_link($home_dir . '/etc/alternatives/php') || is_file($home_dir . '/etc/alternatives/php')) { - unlink($home_dir . '/etc/alternatives/php'); - symlink($options['php_cli_binary'], $home_dir . '/etc/alternatives/php'); + if(!empty($fallback_php) && file_exists($fallback_php_bin)) { + if(is_link($home_dir . '/etc/alternatives/php') || is_file($home_dir . '/etc/alternatives/php')) { + unlink($home_dir . '/etc/alternatives/php'); + symlink($fallback_php_bin, $home_dir . '/etc/alternatives/php'); + $app->log("update_jailkit_chroot: Found " . $fallback_php_bin . " as a fallback for alternatives/php in the jail of " . $options['domain'], LOGLEVEL_DEBUG); + } + } + } else { + if($used_os_type == "debian" || $$used_os_type == "ubuntu") { + $app->log("update_jailkit_chroot: setting alternatives/php to " . $options['php_cli_binary'], LOGLEVEL_DEBUG); + if(is_link($home_dir . '/etc/alternatives/php') || is_file($home_dir . '/etc/alternatives/php')) { + unlink($home_dir . '/etc/alternatives/php'); + symlink($options['php_cli_binary'], $home_dir . '/etc/alternatives/php'); + } } } - } } diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 622a5b9da5c1fd7915a723bacc6c9f3e375f968e..594c44f483c948b5639910b68d0f05a46b8e098c 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -718,6 +718,7 @@ class apache2_plugin { if(!is_dir($data['new']['document_root'].'/tmp')) $app->system->mkdirpath($data['new']['document_root'].'/tmp', 0770); if(!is_dir($data['new']['document_root'].'/webdav')) $app->system->mkdirpath($data['new']['document_root'].'/webdav'); if(!is_dir($data['new']['document_root'].'/backup')) $app->system->mkdirpath($data['new']['document_root'].'/backup', 0755, $username, $groupname); + if(!is_dir($data['new']['document_root'].'/.composer')) $app->system->mkdirpath($data['new']['document_root'].'/.composer', 0750, $username, $groupname); if(!is_dir($data['new']['document_root'].'/.ssh')) { $app->system->mkdirpath($data['new']['document_root'].'/.ssh'); diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php index d1e22915fa2507af700ce40408270a93ae9c537a..8ec8d042ff0ee71bf586bdd8fc29cba9c9ca5b9c 100644 --- a/server/plugins-available/cron_jailkit_plugin.inc.php +++ b/server/plugins-available/cron_jailkit_plugin.inc.php @@ -78,7 +78,10 @@ class cron_jailkit_plugin { } //* get data from web - $parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id WHERE domain_id = ?", $data["new"]["parent_domain_id"]); + $parent_domain = $app->db->queryOneRecord("SELECT web_domain.*, server_php.php_jk_section + FROM web_domain + LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id + WHERE web_domain.domain_id = ?", $data["new"]["parent_domain_id"]); if(!$parent_domain["domain_id"]) { $app->log("Parent domain not found", LOGLEVEL_WARN); @@ -107,9 +110,21 @@ class cron_jailkit_plugin { $this->data = $data; $this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit'); foreach (array('jailkit_chroot_app_sections', 'jailkit_chroot_app_programs') as $section) { + // Replace and don't inherit the server's Jailkit config if (isset($parent_domain[$section]) && $parent_domain[$section] != '' ) { $this->jailkit_config[$section] = $parent_domain[$section]; } + // Add selected PHP version to the jailkit chroot + if ($section == 'jailkit_chroot_app_sections') { + if (isset($parent_domain['php_jk_section']) && $parent_domain['php_jk_section'] != '' ) { + $this->jailkit_config['jailkit_chroot_app_sections'] = $this->jailkit_config['jailkit_chroot_app_sections'] . ' ' . $parent_domain['php_jk_section']; + $jk_temp_config = preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_sections']); + + // Merge the arrays and remove duplicates + $this->jailkit_config[$section] = array_unique($jk_temp_config, SORT_REGULAR); + sort($this->jailkit_config[$section], SORT_STRING); + } + } } $this->_update_website_security_level(); @@ -148,7 +163,10 @@ class cron_jailkit_plugin { } //* get data from web - $parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id WHERE domain_id = ?", $data["new"]["parent_domain_id"]); + $parent_domain = $app->db->queryOneRecord("SELECT web_domain.*, server_php.php_jk_section + FROM web_domain + LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id + WHERE web_domain.domain_id = ?", $data["new"]["parent_domain_id"]); if(!$parent_domain["domain_id"]) { $app->log("Parent domain not found", LOGLEVEL_WARN); @@ -174,9 +192,21 @@ class cron_jailkit_plugin { $this->data = $data; $this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit'); foreach (array('jailkit_chroot_app_sections', 'jailkit_chroot_app_programs') as $section) { + // Replace and don't inherit the server's Jailkit config if (isset($parent_domain[$section]) && $parent_domain[$section] != '' ) { $this->jailkit_config[$section] = $parent_domain[$section]; } + // Add selected PHP version to the jailkit chroot + if ($section == 'jailkit_chroot_app_sections') { + if (isset($parent_domain['php_jk_section']) && $parent_domain['php_jk_section'] != '' ) { + $this->jailkit_config['jailkit_chroot_app_sections'] = $this->jailkit_config['jailkit_chroot_app_sections'] . ' ' . $parent_domain['php_jk_section']; + $jk_temp_config = preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_sections']); + + // Merge the arrays and remove duplicates + $this->jailkit_config[$section] = array_unique($jk_temp_config, SORT_REGULAR); + sort($this->jailkit_config[$section], SORT_STRING); + } + } } $this->_update_website_security_level(); @@ -366,9 +396,16 @@ class cron_jailkit_plugin { $tpl = new tpl(); - if($app->system->get_os_type() == "debian" || $app->system->get_os_type() == "ubuntu") { + $os_type = $app->system->get_os_type(); + if (isset($os_type['type'])) { + $used_os_type = $os_type['type']; + } else { + $used_os_type = 'unknown'; + } + + if($used_os_type == "debian" || $used_os_type == "ubuntu") { $tpl->newTemplate("bashrc_user_deb.master"); - } elseif($app->system->get_os_type() == "redhat") { + } elseif($used_os_type == "redhat") { $tpl->newTemplate("bashrc_user_redhat.master"); } else { $tpl->newTemplate("bashrc_user_generic.master"); @@ -380,7 +417,6 @@ class cron_jailkit_plugin { $tpl->setVar('home_dir', $this->_get_home_dir("")); $tpl->setVar('use_php_path', false); - $tpl->setVar('use_php_alias', false); if(($this->parent_domain['server_php_id'] > 0) && !empty($this->parent_domain['php_cli_binary'])) { @@ -389,17 +425,14 @@ class cron_jailkit_plugin { if(preg_match('/^(\/usr\/(s)?bin|\/(s)?bin)/', $php_bin_dir)) { $tpl->setVar('use_php_path', false); $tpl->setVar('use_php_alias', true); - $tpl->setVar('php_alias', $this->parent_domain['php_cli_binary']); } else { $tpl->setVar('use_php_path', true); - $tpl->setVar('use_php_alias', false); $tpl->setVar('php_bin_dir', $php_bin_dir); } if(!file_exists($this->parent_domain['document_root'] . '/' . $this->parent_domain['php_cli_binary'])) { $app->log("The PHP cli binary " . $this->parent_domain['php_cli_binary'] . " is not available in the jail of the web " . $this->parent_domain['domain'] . " / cronjob_id: " . $this->data['new']['id'] . ". Check your Jailkit setup!", LOGLEVEL_DEBUG); $tpl->setVar('use_php_path', false); - $tpl->setVar('use_php_alias', false); if(!empty($app->system->get_newest_php_bin($this->parent_domain['document_root'] . $php_bin_dir))) { $fallback_php = $app->system->get_newest_php_bin($this->parent_domain['document_root'] . $php_bin_dir); @@ -414,7 +447,7 @@ class cron_jailkit_plugin { } } } else { - if($app->system->get_os_type() == "debian" || $app->system->get_os_type() == "ubuntu") { + if($used_os_type == "debian" || $used_os_type == "ubuntu") { if(is_link($this->parent_domain['document_root'] . '/etc/alternatives/php') || is_file($this->parent_domain['document_root'] . '/etc/alternatives/php')) { unlink($this->parent_domain['document_root'] . '/etc/alternatives/php'); diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index b7cc9c5258767b58b2ba47d4c48a7e3b12a17585..39cb56d9b8860e979d6c3961e56bb37e3f7e76f4 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -562,6 +562,7 @@ class nginx_plugin { if(!is_dir($data['new']['document_root'].'/cgi-bin')) $app->system->mkdirpath($data['new']['document_root'].'/cgi-bin'); if(!is_dir($data['new']['document_root'].'/tmp')) $app->system->mkdirpath($data['new']['document_root'].'/tmp'); if(!is_dir($data['new']['document_root'].'/backup')) $app->system->mkdirpath($data['new']['document_root'].'/backup', 0755, $username, $groupname); + if(!is_dir($data['new']['document_root'].'/.composer')) $app->system->mkdirpath($data['new']['document_root'].'/.composer', 0750, $username, $groupname); if(!is_dir($data['new']['document_root'].'/.ssh')) { $app->system->mkdirpath($data['new']['document_root'].'/.ssh'); diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php index d931107799540534f66d340866e764a97bb2f7a6..7797b37aae5477f2032860f1764382fed0cd8496 100755 --- a/server/plugins-available/shelluser_base_plugin.inc.php +++ b/server/plugins-available/shelluser_base_plugin.inc.php @@ -146,13 +146,23 @@ class shelluser_base_plugin { $command .= ' -s ? -u ? ?'; $app->system->exec_safe($command, $homedir, $data['new']['pgroup'], $data['new']['shell'], $uid, $data['new']['username']); - //* Create .bashrc.d directory + //* Create the .bashrc.d directory for ease of use and a more customisable bashrc environment if(!is_dir($homedir.'/.bashrc.d')){ $app->file->mkdirs($homedir.'/.bashrc.d', '0750'); $app->system->chown($homedir.'/.bashrc.d', $data['new']['username']); $app->system->chgrp($homedir.'/.bashrc.d', $data['new']['pgroup']); } + //* Specified in FHS 3.0, https://refspecs.linuxfoundation.org/FHS_3.0/index.html + //* Supported by Systemd/XDG, provides binaries via user ~/.local/bin directory and PATH + if(!is_dir($homedir.'/.local/bin')){ + $app->file->mkdirs($homedir.'/.local/bin', '0750'); + $app->system->chown($homedir.'/.local', $data['new']['username'], false); + $app->system->chgrp($homedir.'/.local', $data['new']['pgroup'], false); + $app->system->chown($homedir.'/.local/bin', $data['new']['username'], false); + $app->system->chgrp($homedir.'/.local/bin', $data['new']['pgroup'], false); + } + $app->log("Executed command: ".$command, LOGLEVEL_DEBUG); $app->log("Added shelluser: ".$data['new']['username'], LOGLEVEL_DEBUG); @@ -182,8 +192,7 @@ class shelluser_base_plugin { //* Create .profile file $app->system->touch($homedir.'/.profile'); $app->system->chmod($homedir.'/.profile', 0644); - $app->system->chown($homedir.'/.profile', $data['new']['username']); - $app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']); + $profile_content = "if [ -f ~/.bashrc ] then . ~/.bashrc @@ -191,6 +200,8 @@ fi "; $app->system->file_put_contents($homedir.'/.profile', $profile_content); + $app->system->chown($homedir.'/.profile', $data['new']['username']); + $app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']); //* Create .bashrc.d directory if(!is_dir($homedir.'/.bashrc.d')){ @@ -332,19 +343,18 @@ fi } //* Create .profile file - if(!is_file($data['new']['dir']).'/.profile') { - $app->system->touch($homedir.'/.profile'); - $app->system->chmod($homedir.'/.profile', 0644); - $app->system->chown($homedir.'/.profile', $data['new']['puser']); - $app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']); - $profile_content = "if [ -f ~/.bashrc ] + $app->system->touch($homedir.'/.profile'); + $app->system->chmod($homedir.'/.profile', 0644); + $profile_content = "if [ -f ~/.bashrc ] then . ~/.bashrc fi "; $app->system->file_put_contents($homedir.'/.profile', $profile_content); - } + $app->system->chown($homedir.'/.profile', $data['new']['puser']); + $app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']); + //* Create .bashrc.d directory if(!is_dir($homedir.'/.bashrc.d')){ @@ -602,7 +612,6 @@ fi // Create .bashrc file $app->load('tpl'); - $tpl = new tpl(); // Predefine some template vars @@ -610,22 +619,47 @@ fi $tpl->setVar('use_php_path', false); $tpl->setVar('use_php_alias', false); - if($app->system->get_os_type() == "debian" || $app->system->get_os_type() == "ubuntu") { + $os_type = $app->system->get_os_type(); + if (isset($os_type['type'])) { + $used_os_type = $os_type['type']; + } else { + $used_os_type = 'unknown'; + } + + if (isset($os_type['version'])) { + $os_version = $os_type['version']; + } else { + $os_version = 'unknown'; + } + + if($used_os_type == "debian" || $used_os_type == "ubuntu") { $tpl->newTemplate("bashrc_user_deb.master"); - } elseif($app->system->get_os_type() == "redhat") { + } elseif($used_os_type == "redhat") { $tpl->newTemplate("bashrc_user_redhat.master"); } else { $tpl->newTemplate("bashrc_user_generic.master"); } + $user_home_dir = $this->data['new']['dir'] . '/home/' . $this->data['new']['username']; + $bashrc = $user_home_dir . '/.bashrc'; + if(($this->web['server_php_id'] > 0) && !empty($this->web['php_cli_binary'])) { $php_bin_dir = dirname($this->web['php_cli_binary']); if(preg_match('/^(\/usr\/(s)?bin|\/(s)?bin)/', $php_bin_dir)) { $tpl->setVar('use_php_path', false); - $tpl->setVar('use_php_alias', true); - $tpl->setVar('php_alias', $this->web['php_cli_binary']); + + if(!is_dir($user_home_dir . '/.local/bin')) $app->system->mkdirpath($user_home_dir . '/.local/bin', 0750, $this->data['new']['username'], $this->data['new']['pgroup']); + + if(is_link($user_home_dir . '/.local/bin' . '/php') || is_file($user_home_dir . '/.local/bin' . '/php')) { + unlink($user_home_dir . '/.local/bin' . '/php'); + symlink($this->web['php_cli_binary'], $user_home_dir . '/.local/bin' . '/php'); + } else { + symlink($this->web['php_cli_binary'], $user_home_dir . '/.local/bin' . '/php'); + } + } else { + // We rely on $PATH in case that the binaries are located in a separate directory that doesn't match the regex above $tpl->setVar('use_php_path', true); $tpl->setVar('use_php_alias', false); $tpl->setVar('php_bin_dir', $php_bin_dir); @@ -635,7 +669,7 @@ fi $app->log("The PHP cli binary is not set for the selected PHP version. Affected web: " . $this->web['domain'], LOGLEVEL_DEBUG); } - $bashrc = $this->data['new']['dir'] . '/home/' . $this->data['new']['username'] . '/.bashrc'; + //$bashrc = $this->data['new']['dir'] . '/home/' . $this->data['new']['username'] . '/.bashrc'; if(@is_file($bashrc) || @is_link($bashrc)) unlink($bashrc); diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php index 572f99b5a8595a112cbf400d2bb101d02dfb0d63..f3de865de2326033d6e567182d6bbec982fc85a5 100755 --- a/server/plugins-available/shelluser_jailkit_plugin.inc.php +++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php @@ -83,8 +83,10 @@ class shelluser_jailkit_plugin { } - - $web = $app->db->queryOneRecord("SELECT * FROM web_domain LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id WHERE `domain_id` = ?", $data["new"]["parent_domain_id"]); + $web = $app->db->queryOneRecord("SELECT web_domain.*, server_php.php_cli_binary, server_php.php_jk_section + FROM web_domain + LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id + WHERE web_domain.domain_id = ?", $data["new"]["parent_domain_id"]); $this->web = $web; @@ -119,15 +121,27 @@ class shelluser_jailkit_plugin { if ($data['new']['chroot'] == "jailkit") { - // load the server configuration options $app->uses("getconf"); $this->data = $data; $this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit'); + foreach (array('jailkit_chroot_app_sections', 'jailkit_chroot_app_programs') as $section) { + // Replace and don't inherit the server's Jailkit config if (isset($web[$section]) && $web[$section] != '' ) { $this->jailkit_config[$section] = $web[$section]; } + // Add selected PHP version to the jailkit chroot + if ($section == 'jailkit_chroot_app_sections') { + if (isset($web['php_jk_section']) && $web['php_jk_section'] != '' ) { + $this->jailkit_config['jailkit_chroot_app_sections'] = $this->jailkit_config['jailkit_chroot_app_sections'] . ' ' . $web['php_jk_section']; + $jk_temp_config = preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_sections']); + + // Merge the arrays and remove duplicates + $this->jailkit_config[$section] = array_unique($jk_temp_config, SORT_REGULAR); + sort($this->jailkit_config[$section], SORT_STRING); + } + } } $this->_update_website_security_level(); @@ -198,16 +212,17 @@ class shelluser_jailkit_plugin { if($app->system->is_user($data['new']['puser'])) { - $web = $app->db->queryOneRecord("SELECT * FROM web_domain LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id WHERE `domain_id` = ?", $data["new"]["parent_domain_id"]); + $web = $app->db->queryOneRecord("SELECT web_domain.*, server_php.php_jk_section + FROM web_domain + LEFT JOIN server_php ON web_domain.server_php_id = server_php.server_php_id + WHERE web_domain.domain_id = ?", $data["new"]["parent_domain_id"]); $this->web = $web; - $username = $data['new']['username']; // Get the UID of the parent user $uid = intval($app->system->getuid($data['new']['puser'])); if($uid > $this->min_uid) { - if($app->system->is_user($data['new']['username'])) { /** @@ -220,10 +235,23 @@ class shelluser_jailkit_plugin { $app->uses("getconf"); $this->data = $data; $this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit'); + foreach (array('jailkit_chroot_app_sections', 'jailkit_chroot_app_programs') as $section) { + // Replace and don't inherit the server's Jailkit config if (isset($web[$section]) && $web[$section] != '' ) { $this->jailkit_config[$section] = $web[$section]; } + // Add selected PHP version to the jailkit chroot + if ($section == 'jailkit_chroot_app_sections') { + if (isset($web['php_jk_section']) && $web['php_jk_section'] != '' ) { + $this->jailkit_config['jailkit_chroot_app_sections'] = $this->jailkit_config['jailkit_chroot_app_sections'] . ' ' . $web['php_jk_section']; + $jk_temp_config = preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_sections']); + + // Merge the arrays and remove duplicates + $this->jailkit_config[$section] = array_unique($jk_temp_config, SORT_REGULAR); + sort($this->jailkit_config[$section], SORT_STRING); + } + } } $this->_update_website_security_level(); @@ -287,6 +315,7 @@ class shelluser_jailkit_plugin { $app->uses("getconf"); $this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit'); + foreach (array('jailkit_chroot_app_sections', 'jailkit_chroot_app_programs', 'jailkit_do_not_remove_paths') as $section) { if (isset($web[$section]) && $web[$section] != '' ) { $this->jailkit_config[$section] = $web[$section]; @@ -390,6 +419,7 @@ class shelluser_jailkit_plugin { foreach ($records as $record) { $options[] = 'skip='.$record['web_folder']; } + $options['php_cli_binary'] = $web['php_cli_binary']; $app->system->update_jailkit_chroot($this->data['new']['dir'], $sections, $programs, $options); @@ -468,6 +498,8 @@ class shelluser_jailkit_plugin { $app->system->chgrp($this->data['new']['dir'].$jailkit_chroot_puserhome, $this->data['new']['pgroup']); // Create user .my.cnf file + // Necessary for MySQL client to connect to the DB server for Jailkit users + // TODO: If the web has only one DB assigned, which is also located on a remote DB server instead of localhost, then add client connection params here $mycnf = $this->data['new']['dir'].$jailkit_chroot_userhome . '/.my.cnf'; if(!file_exists($this->data['new']['dir'].$jailkit_chroot_userhome . '/.my.cnf')) { $app->load('tpl'); @@ -703,9 +735,16 @@ class shelluser_jailkit_plugin { $tpl = new tpl(); - if($app->system->get_os_type() == "debian" || $app->system->get_os_type() == "ubuntu") { + $os_type = $app->system->get_os_type(); + if (isset($os_type['type'])) { + $used_os_type = $os_type['type']; + } else { + $used_os_type = 'unknown'; + } + + if($used_os_type == "debian" || $used_os_type == "ubuntu") { $tpl->newTemplate("bashrc_user_deb.master"); - } elseif($app->system->get_os_type() == "redhat") { + } elseif($used_os_type == "redhat") { $tpl->newTemplate("bashrc_user_redhat.master"); } else { $tpl->newTemplate("bashrc_user_generic.master"); @@ -717,26 +756,20 @@ class shelluser_jailkit_plugin { $tpl->setVar('home_dir', $this->_get_home_dir("")); $tpl->setVar('use_php_path', false); - $tpl->setVar('use_php_alias', false); - if(($this->web['server_php_id'] > 0) && !empty($this->web['php_cli_binary'])) { $php_bin_dir = dirname($this->web['php_cli_binary']); if(preg_match('/^(\/usr\/(s)?bin|\/(s)?bin)/', $php_bin_dir)) { $tpl->setVar('use_php_path', false); - $tpl->setVar('use_php_alias', true); - $tpl->setVar('php_alias', $this->web['php_cli_binary']); } else { $tpl->setVar('use_php_path', true); - $tpl->setVar('use_php_alias', false); $tpl->setVar('php_bin_dir', $php_bin_dir); } if(!file_exists($this->web['document_root'] . '/' . $this->web['php_cli_binary'])) { $app->log("The PHP cli binary " . $this->web['php_cli_binary'] . " is not available in the jail of the web " . $this->web['domain'] . " / SSH/SFTP user: " . $this->data['new']['username'] . ". Check your Jailkit setup!", LOGLEVEL_DEBUG); $tpl->setVar('use_php_path', false); - $tpl->setVar('use_php_alias', false); if(!empty($app->system->get_newest_php_bin($this->web['document_root'] . $php_bin_dir))) { $fallback_php = $app->system->get_newest_php_bin($this->web['document_root'] . $php_bin_dir); @@ -750,8 +783,9 @@ class shelluser_jailkit_plugin { } } } + } else { - if($app->system->get_os_type() == "debian" || $app->system->get_os_type() == "ubuntu") { + if($used_os_type == "debian" || $used_os_type == "ubuntu") { if(is_link($this->web['document_root'] . '/etc/alternatives/php') || is_file($this->web['document_root'] . '/etc/alternatives/php')) { unlink($this->web['document_root'] . '/etc/alternatives/php'); @@ -762,7 +796,6 @@ class shelluser_jailkit_plugin { } } } - $bashrc = $this->web['document_root'] . '/home/' . $this->data['new']['username'] . '/.bashrc'; if(@is_file($bashrc) || @is_link($bashrc)) unlink($bashrc);