Copy disabled (too large)
Download .txt
Showing preview only (22,774K chars total). Download the full file to get everything.
Repository: i-MSCP/imscp
Branch: 1.5.3-maintenance
Commit: f9487d294820
Files: 972
Total size: 21.3 MB
Directory structure:
gitextract_i3j9am9o/
├── .gitattributes
├── .gitignore
├── AUTHORS
├── CHANGELOG
├── COPYING
├── README.md
├── Vagrant/
│ ├── README.md
│ ├── Vagrantfile
│ └── scripts/
│ ├── distro_update.sh
│ └── provision_imscp.sh
├── autoinstaller/
│ ├── Adapter/
│ │ ├── AbstractAdapter.pm
│ │ ├── DebianAdapter.pm
│ │ ├── DevuanAdapter.pm
│ │ ├── UbuntuAdapter.pm
│ │ └── managed_services.txt
│ ├── Functions.pm
│ ├── Layout/
│ │ └── Debian.xml
│ ├── Packages/
│ │ ├── debian-buster.xml
│ │ ├── debian-stretch.xml
│ │ ├── devuan-ascii.xml
│ │ ├── ubuntu-bionic.xml
│ │ └── ubuntu-xenial.xml
│ ├── postinstall/
│ │ ├── .gitkeep
│ │ └── apache2_postinst.sh
│ └── preinstall/
│ └── .gitkeep
├── configs/
│ ├── debian/
│ │ ├── apache/
│ │ │ ├── 00_imscp.conf
│ │ │ ├── 00_nameserver.conf
│ │ │ ├── apache.data.dist
│ │ │ ├── install.xml
│ │ │ ├── logrotate.conf
│ │ │ ├── parts/
│ │ │ │ ├── custom.conf.tpl
│ │ │ │ ├── domain.tpl
│ │ │ │ └── domain_disabled.tpl
│ │ │ ├── vlogger
│ │ │ ├── vlogger.conf.tpl
│ │ │ └── vlogger.sql
│ │ ├── apt/
│ │ │ ├── 01norecommend
│ │ │ └── install.xml
│ │ ├── bind/
│ │ │ ├── bind.data.dist
│ │ │ ├── install.xml
│ │ │ ├── named.conf
│ │ │ ├── named.conf.local
│ │ │ ├── named.conf.options
│ │ │ └── parts/
│ │ │ ├── cfg_master.tpl
│ │ │ ├── cfg_slave.tpl
│ │ │ ├── db.tpl
│ │ │ └── db_sub.tpl
│ │ ├── courier/
│ │ │ ├── authmysqlrc
│ │ │ ├── courier.data.dist
│ │ │ ├── imapd.local
│ │ │ ├── install.xml
│ │ │ ├── quota-warning
│ │ │ └── sasl/
│ │ │ └── smtpd.conf
│ │ ├── cron/
│ │ │ ├── cron.data.dist
│ │ │ ├── imscp
│ │ │ └── install.xml
│ │ ├── database/
│ │ │ ├── database.sql
│ │ │ └── install.xml
│ │ ├── dovecot/
│ │ │ ├── dovecot-managesieve.conf
│ │ │ ├── dovecot-sql.conf
│ │ │ ├── dovecot.conf
│ │ │ ├── dovecot.data.dist
│ │ │ ├── install.xml
│ │ │ ├── quota-warning
│ │ │ └── sieve.default
│ │ ├── dpkg/
│ │ │ ├── 90imscp
│ │ │ └── install.xml
│ │ ├── frontend/
│ │ │ ├── 00_master.nginx
│ │ │ ├── 00_master_ssl.nginx
│ │ │ ├── frontend.data.dist
│ │ │ ├── imscp_fastcgi.nginx
│ │ │ ├── imscp_panel
│ │ │ ├── imscp_panel_reopenlogs
│ │ │ ├── imscp_php.nginx
│ │ │ ├── install.xml
│ │ │ ├── nginx.nginx
│ │ │ ├── php-fpm.conf
│ │ │ └── php.ini
│ │ ├── imscp.conf
│ │ ├── install.xml
│ │ ├── libpam-mysql/
│ │ │ └── patches/
│ │ │ └── dpatch/
│ │ │ ├── 03_undefined_make_scrambled_password_symbol.patch
│ │ │ └── 04_resps_segfault.patch
│ │ ├── listeners.d/
│ │ │ ├── README.md
│ │ │ └── install.xml
│ │ ├── logrotate.d/
│ │ │ ├── imscp
│ │ │ ├── install.xml
│ │ │ └── rsyslog
│ │ ├── mounts/
│ │ │ ├── install.xml
│ │ │ └── mounts.conf
│ │ ├── mysql/
│ │ │ ├── imscp.cnf
│ │ │ ├── install.xml
│ │ │ └── mysql.data.dist
│ │ ├── openssl/
│ │ │ ├── install.xml
│ │ │ └── openssl.cnf.tpl
│ │ ├── pbuilder/
│ │ │ └── pbuilderrc
│ │ ├── php/
│ │ │ ├── apache/
│ │ │ │ └── php.ini
│ │ │ ├── fcgi/
│ │ │ │ ├── apache_fcgid_module.conf
│ │ │ │ ├── php-fcgi-starter
│ │ │ │ └── php.ini
│ │ │ ├── fpm/
│ │ │ │ ├── logrotate.tpl
│ │ │ │ ├── php-fpm.conf
│ │ │ │ ├── php.ini
│ │ │ │ ├── pool.conf
│ │ │ │ └── pool.conf.default
│ │ │ ├── install.xml
│ │ │ └── php.data.dist
│ │ ├── postfix/
│ │ │ ├── install.xml
│ │ │ ├── main.cf
│ │ │ ├── master.cf
│ │ │ └── postfix.data.dist
│ │ ├── proftpd/
│ │ │ ├── install.xml
│ │ │ ├── proftpd-basic
│ │ │ ├── proftpd.conf
│ │ │ └── proftpd.data.dist
│ │ ├── skel/
│ │ │ ├── README
│ │ │ ├── alias/
│ │ │ │ ├── 00_private/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── cgi-bin/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── htdocs/
│ │ │ │ ├── .well-known/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── index.html
│ │ │ ├── domain/
│ │ │ │ ├── 00_private/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── backups/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── cgi-bin/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── errors/
│ │ │ │ │ ├── 401.html
│ │ │ │ │ ├── 403.html
│ │ │ │ │ ├── 404.html
│ │ │ │ │ ├── 500.html
│ │ │ │ │ ├── 503.html
│ │ │ │ │ └── inc/
│ │ │ │ │ ├── errordocs.css
│ │ │ │ │ └── ie78overrides.css
│ │ │ │ ├── htdocs/
│ │ │ │ │ ├── .well-known/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ └── index.html
│ │ │ │ ├── logs/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── phptmp/
│ │ │ │ └── .gitkeep
│ │ │ ├── domain_disabled_pages/
│ │ │ │ └── index.html
│ │ │ ├── install.xml
│ │ │ └── subdomain/
│ │ │ ├── 00_private/
│ │ │ │ └── .gitkeep
│ │ │ ├── cgi-bin/
│ │ │ │ └── .gitkeep
│ │ │ └── htdocs/
│ │ │ ├── .well-known/
│ │ │ │ └── .gitkeep
│ │ │ └── index.html
│ │ ├── sysctl.d/
│ │ │ ├── imscp.conf
│ │ │ └── install.xml
│ │ ├── systemd/
│ │ │ ├── bind9-resolvconf.service
│ │ │ ├── bind9.service
│ │ │ ├── courier-authdaemon.conf
│ │ │ ├── imscp_daemon.service
│ │ │ ├── imscp_mountall.service
│ │ │ ├── imscp_panel.conf
│ │ │ ├── imscp_panel.service
│ │ │ ├── imscp_traffic.service
│ │ │ └── install.xml
│ │ ├── sysvinit/
│ │ │ ├── courier-authdaemon
│ │ │ ├── imscp_daemon
│ │ │ ├── imscp_mountall
│ │ │ ├── imscp_panel
│ │ │ ├── imscp_traffic
│ │ │ ├── install.xml
│ │ │ └── proftpd
│ │ ├── upstart/
│ │ │ ├── imscp_daemon.conf
│ │ │ ├── imscp_mountall.conf
│ │ │ ├── imscp_panel.conf
│ │ │ ├── imscp_panel.override
│ │ │ ├── imscp_traffic.conf
│ │ │ ├── install.xml
│ │ │ ├── php5.6-fpm.override
│ │ │ ├── php7.0-fpm.override
│ │ │ ├── php7.1-fpm.override
│ │ │ ├── php7.2-fpm.override
│ │ │ └── php7.3-fpm.override
│ │ └── vsftpd/
│ │ ├── install.xml
│ │ ├── patches/
│ │ │ └── quilt/
│ │ │ └── imscp_allow_writeable_root.patch
│ │ ├── vsftpd.conf
│ │ ├── vsftpd.data.dist
│ │ ├── vsftpd.pam
│ │ └── vsftpd_user.conf
│ ├── devuan/
│ │ └── install.xml
│ └── ubuntu/
│ ├── install.xml
│ ├── libpam-mysql/
│ │ └── patches/
│ │ └── dpatch/
│ │ ├── 03_undefined_make_scrambled_password_symbol.patch
│ │ └── 04_resps_segfault.patch
│ ├── pbuilder/
│ │ └── pbuilderrc
│ ├── proftpd/
│ │ └── install.xml
│ ├── sysvinit/
│ │ └── install.xml
│ └── vsftpd/
│ ├── install.xml
│ └── patches/
│ └── quilt/
│ ├── imscp_allow_writeable_root.patch
│ └── imscp_pthread_cancel.patch
├── contrib/
│ ├── Listeners/
│ │ ├── Apache2/
│ │ │ ├── 10_apache2_dualstack.pl
│ │ │ ├── 20_apache2_serveralias_override.pl
│ │ │ ├── 30_apache2_tools_proxy.pl
│ │ │ └── 40_apache2_security_headers.pl
│ │ ├── Backup/
│ │ │ └── 10_backup_storage_outsourcing.pl
│ │ ├── Dovecot/
│ │ │ ├── 10_dovecot_compress.pl
│ │ │ ├── 30_dovecot_namespace.pl
│ │ │ ├── 40_dovecot_pfs.pl
│ │ │ ├── 50_dovecot_plaintext.pl
│ │ │ └── 60_dovecot_service_login.pl
│ │ ├── FrontEnd/
│ │ │ └── 10_frontend_templates_override.pl
│ │ ├── Named/
│ │ │ ├── 10_named_global_ns.pl
│ │ │ ├── 10_named_localnets.pl
│ │ │ ├── 10_named_rrl.pl
│ │ │ ├── 10_named_slave_provisioning.pl
│ │ │ └── 20_named_dualstack.pl
│ │ ├── Nginx/
│ │ │ └── 10_nginx_hsts.pl
│ │ ├── PHP/
│ │ │ ├── 10_php_confoptions_override.pl
│ │ │ └── 10_phpfpm_settings_override.pl
│ │ ├── Packages/
│ │ │ └── 10_packages_override.pl
│ │ ├── PhpMyAdmin/
│ │ │ └── 10_phpmyadmin_conffile.pl
│ │ ├── Postfix/
│ │ │ ├── 10_postfix_smarthost.pl
│ │ │ ├── 10_postfix_transport_table.pl
│ │ │ ├── 10_postfix_tuning.pl
│ │ │ ├── 20_postfix_policy_whitelist.pl
│ │ │ ├── 30_postfix_bcc_maps.pl
│ │ │ ├── 40_postfix_sender_canonical.pl
│ │ │ ├── 50_postfix_sender_generic.pl
│ │ │ ├── 60_postfix_pfs.pl
│ │ │ └── 70_postfix_submission_tls.pl
│ │ ├── ProFTPd/
│ │ │ ├── 10_proftpd_auth_unix.pl
│ │ │ ├── 10_proftpd_serverident.pl
│ │ │ └── 10_proftpd_tls.pl
│ │ ├── README.md
│ │ ├── Roundcube/
│ │ │ └── 10_roundcube_tls.pl
│ │ └── System/
│ │ ├── 10_system_hosts.pl
│ │ └── 10_system_mount_userwebdir.pl
│ └── scripts/
│ ├── fix_duplicate_mounts.pl
│ ├── imscp_mail_from_csv.php
│ └── poodle.sh
├── daemon/
│ ├── Makefile
│ ├── daemon_cmd.c
│ ├── daemon_cmd.h
│ ├── daemon_conn.c
│ ├── daemon_conn.h
│ ├── daemon_globals.h
│ ├── daemon_init.c
│ ├── daemon_init.h
│ ├── daemon_main.c
│ ├── daemon_main.h
│ ├── daemon_msg.c
│ ├── daemon_msg.h
│ ├── daemon_notify.c
│ ├── daemon_notify.h
│ ├── daemon_signals.c
│ ├── daemon_signals.h
│ ├── daemon_sock_io.c
│ └── daemon_sock_io.h
├── docs/
│ ├── 1.2.x_errata.md
│ ├── 1.3.x_errata.md
│ ├── 1.4.x_errata.md
│ ├── 1.5.x_errata.md
│ ├── Changelog-1.0.x
│ ├── Changelog-1.1.x
│ ├── Changelog-1.2.x
│ ├── Changelog-1.3.x
│ ├── Changelog-1.4.x
│ ├── Debian/
│ │ └── INSTALL.md
│ ├── Devuan/
│ │ └── INSTALL.md
│ ├── LICENSE-GPL2
│ ├── LICENSE-LGPL2.1
│ ├── LICENSE-MPL1.1
│ ├── Ubuntu/
│ │ └── INSTALL.md
│ ├── cgi/
│ │ ├── README.md
│ │ ├── sample.pl
│ │ ├── sample.py
│ │ └── sample.rb
│ ├── imscp_net_sysctl.conf
│ └── preseed.pl
├── engine/
│ ├── PerlLib/
│ │ ├── Common/
│ │ │ ├── Object.pm
│ │ │ └── SingletonClass.pm
│ │ ├── Modules/
│ │ │ ├── Abstract.pm
│ │ │ ├── Alias.pm
│ │ │ ├── CustomDNS.pm
│ │ │ ├── Domain.pm
│ │ │ ├── FtpUser.pm
│ │ │ ├── Htaccess.pm
│ │ │ ├── Htgroup.pm
│ │ │ ├── Htpasswd.pm
│ │ │ ├── Mail.pm
│ │ │ ├── Plugin.pm
│ │ │ ├── SSLcertificate.pm
│ │ │ ├── ServerIP.pm
│ │ │ ├── SubAlias.pm
│ │ │ ├── Subdomain.pm
│ │ │ └── User.pm
│ │ ├── Package/
│ │ │ ├── AbstractPackageCollection.pm
│ │ │ ├── AltUrlsFeature.pm
│ │ │ ├── AntiRootkits/
│ │ │ │ ├── Chkrootkit/
│ │ │ │ │ └── Chkrootkit.pm
│ │ │ │ └── Rkhunter/
│ │ │ │ ├── Cron.pl
│ │ │ │ └── Rkhunter.pm
│ │ │ ├── AntiRootkits.pm
│ │ │ ├── BackupFeature.pm
│ │ │ ├── FrontEnd.pm
│ │ │ ├── ServicesSSL.pm
│ │ │ ├── SqlAdminTools/
│ │ │ │ └── PhpMyAdmin/
│ │ │ │ └── PhpMyAdmin.pm
│ │ │ ├── SqlAdminTools.pm
│ │ │ ├── WebFtpClients/
│ │ │ │ └── MonstaFTP/
│ │ │ │ └── MonstaFTP.pm
│ │ │ ├── WebFtpClients.pm
│ │ │ ├── WebStatistics/
│ │ │ │ └── AWStats/
│ │ │ │ ├── AWStats.pm
│ │ │ │ ├── Config/
│ │ │ │ │ ├── 01_awstats.conf
│ │ │ │ │ └── awstats.imscp_tpl.conf
│ │ │ │ └── Scripts/
│ │ │ │ ├── awstats_updateall.pl
│ │ │ │ └── logresolvemerge.pl
│ │ │ ├── WebStatistics.pm
│ │ │ ├── WebmailClients/
│ │ │ │ ├── RainLoop/
│ │ │ │ │ └── RainLoop.pm
│ │ │ │ └── Roundcube/
│ │ │ │ └── Roundcube.pm
│ │ │ └── WebmailClients.pm
│ │ ├── Servers/
│ │ │ ├── cron/
│ │ │ │ └── cron.pm
│ │ │ ├── cron.pm
│ │ │ ├── ftpd/
│ │ │ │ ├── proftpd/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ ├── proftpd.pm
│ │ │ │ ├── vsftpd/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ └── vsftpd.pm
│ │ │ ├── ftpd.pm
│ │ │ ├── httpd/
│ │ │ │ ├── apache_fcgid/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ ├── apache_fcgid.pm
│ │ │ │ ├── apache_itk/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ ├── apache_itk.pm
│ │ │ │ ├── apache_php_fpm/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ └── apache_php_fpm.pm
│ │ │ ├── httpd.pm
│ │ │ ├── mta/
│ │ │ │ ├── postfix/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ └── postfix.pm
│ │ │ ├── mta.pm
│ │ │ ├── named/
│ │ │ │ ├── bind/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ └── bind.pm
│ │ │ ├── named.pm
│ │ │ ├── noserver.pm
│ │ │ ├── php.pm
│ │ │ ├── po/
│ │ │ │ ├── courier/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ ├── courier.pm
│ │ │ │ ├── dovecot/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ └── dovecot.pm
│ │ │ ├── po.pm
│ │ │ ├── server/
│ │ │ │ ├── local/
│ │ │ │ │ └── installer.pm
│ │ │ │ └── local.pm
│ │ │ ├── server.pm
│ │ │ ├── sqld/
│ │ │ │ ├── mariadb/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ ├── mariadb.pm
│ │ │ │ ├── mysql/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ ├── mysql.pm
│ │ │ │ ├── percona/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ ├── percona.pm
│ │ │ │ ├── remote/
│ │ │ │ │ ├── installer.pm
│ │ │ │ │ └── uninstaller.pm
│ │ │ │ └── remote.pm
│ │ │ └── sqld.pm
│ │ └── iMSCP/
│ │ ├── Boolean.pm
│ │ ├── Bootstrapper.pm
│ │ ├── Composer.pm
│ │ ├── Config.pm
│ │ ├── Crypt.pm
│ │ ├── Cwd.pm
│ │ ├── Database/
│ │ │ ├── MariaDB.pm
│ │ │ └── MySQL.pm
│ │ ├── Database.pm
│ │ ├── DbTasksProcessor.pm
│ │ ├── Debug.pm
│ │ ├── Dialog/
│ │ │ ├── Dialog.pm
│ │ │ ├── FrontEndInterface.pm
│ │ │ ├── InputValidation.pm
│ │ │ ├── NonInteractive.pm
│ │ │ ├── Resizable.pm
│ │ │ └── TextFormatter.pm
│ │ ├── Dialog.pm
│ │ ├── Dir.pm
│ │ ├── EventManager/
│ │ │ └── ListenerPriorityQueue.pm
│ │ ├── EventManager.pm
│ │ ├── Execute.pm
│ │ ├── Ext2Attributes/
│ │ │ ├── Ext2Fs32.pm
│ │ │ └── Ext2Fs64.pm
│ │ ├── Ext2Attributes.pm
│ │ ├── File.pm
│ │ ├── Getopt.pm
│ │ ├── LockFile.pm
│ │ ├── Log.pm
│ │ ├── LsbRelease.pm
│ │ ├── Mail.pm
│ │ ├── Mount.pm
│ │ ├── Net.pm
│ │ ├── Networking.pm
│ │ ├── OpenSSL.pm
│ │ ├── Packages.pm
│ │ ├── Plugins.pm
│ │ ├── ProgramFinder.pm
│ │ ├── Provider/
│ │ │ ├── Networking/
│ │ │ │ ├── Interface.pm
│ │ │ │ └── Persistence/
│ │ │ │ ├── Ifupdown.pm
│ │ │ │ └── Netplan.pm
│ │ │ └── Service/
│ │ │ ├── Abstract.pm
│ │ │ ├── Debian/
│ │ │ │ ├── SysVinit.pm
│ │ │ │ ├── Systemd.pm
│ │ │ │ └── Upstart.pm
│ │ │ ├── Interface.pm
│ │ │ ├── SysVinit.pm
│ │ │ ├── Systemd.pm
│ │ │ └── Upstart.pm
│ │ ├── Requirements.pm
│ │ ├── Rights.pm
│ │ ├── Servers.pm
│ │ ├── Service.pm
│ │ ├── Stepper.pm
│ │ ├── Syscall.pm
│ │ ├── SystemGroup.pm
│ │ ├── SystemUser.pm
│ │ ├── TemplateParser.pm
│ │ └── Umask.pm
│ ├── PerlVendor/
│ │ ├── Array/
│ │ │ └── Utils.pm
│ │ ├── Capture/
│ │ │ └── Tiny.pm
│ │ ├── Class/
│ │ │ └── Autouse.pm
│ │ ├── Data/
│ │ │ └── Validate/
│ │ │ └── Domain.pm
│ │ ├── Net/
│ │ │ ├── Domain/
│ │ │ │ └── TLD.pm
│ │ │ └── IP.pm
│ │ ├── PHP/
│ │ │ └── Var.pm
│ │ └── courier-dovecot-migrate.pl
│ ├── backup/
│ │ ├── imscp-backup-all
│ │ ├── imscp-backup-imscp
│ │ └── install.xml
│ ├── imscp-rqst-mngr
│ ├── install.xml
│ ├── messenger/
│ │ ├── imscp-arpl-msgr
│ │ └── install.xml
│ ├── quota/
│ │ ├── imscp-dsk-quota
│ │ └── install.xml
│ ├── setup/
│ │ ├── imscp-reconfigure
│ │ ├── imscp-setup-functions.pl
│ │ ├── imscp-uninstaller
│ │ ├── imscp-update-db.php
│ │ ├── install.xml
│ │ ├── set-engine-permissions.pl
│ │ └── set-gui-permissions.pl
│ ├── tools/
│ │ ├── imscp-disable-accounts
│ │ ├── imscp-dpkg-post-invoke.pl
│ │ ├── imscp-mountall
│ │ ├── imscp-net-traffic-logger
│ │ └── install.xml
│ └── traffic/
│ ├── imscp-srv-traff
│ ├── imscp-vrl-traff
│ ├── install.xml
│ └── maillogconvert.pl
├── gui/
│ ├── bin/
│ │ └── .gitkeep
│ ├── composer.json
│ ├── data/
│ │ ├── cache/
│ │ │ └── .gitkeep
│ │ ├── certs/
│ │ │ └── .gitkeep
│ │ ├── logs/
│ │ │ └── .gitkeep
│ │ ├── persistent/
│ │ │ ├── .composer/
│ │ │ │ └── .gitkeep
│ │ │ └── plugins/
│ │ │ └── README.md
│ │ ├── sessions/
│ │ │ └── .gitkeep
│ │ ├── tmp/
│ │ │ └── .gitkeep
│ │ └── uploads/
│ │ └── .gitkeep
│ ├── i18n/
│ │ └── locales/
│ │ ├── ar/
│ │ │ └── LC_MESSAGES/
│ │ │ └── ar.mo
│ │ ├── bg_BG/
│ │ │ └── LC_MESSAGES/
│ │ │ └── bg_BG.mo
│ │ ├── ca_ES/
│ │ │ └── LC_MESSAGES/
│ │ │ └── ca_ES.mo
│ │ ├── cs_CZ/
│ │ │ └── LC_MESSAGES/
│ │ │ └── cs_CZ.mo
│ │ ├── da_DK/
│ │ │ └── LC_MESSAGES/
│ │ │ └── da_DK.mo
│ │ ├── de_DE/
│ │ │ └── LC_MESSAGES/
│ │ │ └── de_DE.mo
│ │ ├── el/
│ │ │ └── LC_MESSAGES/
│ │ │ └── el.mo
│ │ ├── en_GB/
│ │ │ └── LC_MESSAGES/
│ │ │ └── en_GB.mo
│ │ ├── es_AR/
│ │ │ └── LC_MESSAGES/
│ │ │ └── es_AR.mo
│ │ ├── es_ES/
│ │ │ └── LC_MESSAGES/
│ │ │ └── es_ES.mo
│ │ ├── eu_ES/
│ │ │ └── LC_MESSAGES/
│ │ │ └── eu_ES.mo
│ │ ├── fa_IR/
│ │ │ └── LC_MESSAGES/
│ │ │ └── fa_IR.mo
│ │ ├── fi_FI/
│ │ │ └── LC_MESSAGES/
│ │ │ └── fi_FI.mo
│ │ ├── fr_FR/
│ │ │ └── LC_MESSAGES/
│ │ │ └── fr_FR.mo
│ │ ├── gl_ES/
│ │ │ └── LC_MESSAGES/
│ │ │ └── gl_ES.mo
│ │ ├── hu_HU/
│ │ │ └── LC_MESSAGES/
│ │ │ └── hu_HU.mo
│ │ ├── it_IT/
│ │ │ └── LC_MESSAGES/
│ │ │ └── it_IT.mo
│ │ ├── ja_JP/
│ │ │ └── LC_MESSAGES/
│ │ │ └── ja_JP.mo
│ │ ├── lt_LT/
│ │ │ └── LC_MESSAGES/
│ │ │ └── lt_LT.mo
│ │ ├── nb_NO/
│ │ │ └── LC_MESSAGES/
│ │ │ └── nb_NO.mo
│ │ ├── nl_NL/
│ │ │ └── LC_MESSAGES/
│ │ │ └── nl_NL.mo
│ │ ├── pl_PL/
│ │ │ └── LC_MESSAGES/
│ │ │ └── pl_PL.mo
│ │ ├── pt_BR/
│ │ │ └── LC_MESSAGES/
│ │ │ └── pt_BR.mo
│ │ ├── pt_PT/
│ │ │ └── LC_MESSAGES/
│ │ │ └── pt_PT.mo
│ │ ├── ro_RO/
│ │ │ └── LC_MESSAGES/
│ │ │ └── ro_RO.mo
│ │ ├── ru_RU/
│ │ │ └── LC_MESSAGES/
│ │ │ └── ru_RU.mo
│ │ ├── sk_SK/
│ │ │ └── LC_MESSAGES/
│ │ │ └── sk_SK.mo
│ │ ├── sl/
│ │ │ └── LC_MESSAGES/
│ │ │ └── sl.mo
│ │ ├── sv_SE/
│ │ │ └── LC_MESSAGES/
│ │ │ └── sv_SE.mo
│ │ ├── th_TH/
│ │ │ └── LC_MESSAGES/
│ │ │ └── th_TH.mo
│ │ ├── tr_TR/
│ │ │ └── LC_MESSAGES/
│ │ │ └── tr_TR.mo
│ │ ├── uk_UA/
│ │ │ └── LC_MESSAGES/
│ │ │ └── uk_UA.mo
│ │ ├── vi/
│ │ │ └── LC_MESSAGES/
│ │ │ └── vi.mo
│ │ ├── zh_CN/
│ │ │ └── LC_MESSAGES/
│ │ │ └── zh_CN.mo
│ │ ├── zh_HK/
│ │ │ └── LC_MESSAGES/
│ │ │ └── zh_HK.mo
│ │ └── zh_TW/
│ │ └── LC_MESSAGES/
│ │ └── zh_TW.mo
│ ├── include/
│ │ ├── Admin.php
│ │ ├── BcAutoload.php
│ │ ├── Client.php
│ │ ├── Counting.php
│ │ ├── Email.php
│ │ ├── Input.php
│ │ ├── Intl.php
│ │ ├── Layout.php
│ │ ├── Login.php
│ │ ├── LostPassword.php
│ │ ├── Reseller.php
│ │ ├── Shared.php
│ │ ├── Statistics.php
│ │ ├── Tickets.php
│ │ ├── View.php
│ │ └── imscp-lib.php
│ ├── patches/
│ │ ├── 001_php_deprecations.patch
│ │ ├── 002_zend_form_docblock_fix.patch
│ │ ├── 003_zend_navigation_patch
│ │ ├── 004_zend_validate_file_upload.patch
│ │ └── 005_zend_validate_file_count.patch
│ ├── plugins/
│ │ └── .gitkeep
│ ├── public/
│ │ ├── admin/
│ │ │ ├── admin_add.php
│ │ │ ├── admin_log.php
│ │ │ ├── change_user_interface.php
│ │ │ ├── circular.php
│ │ │ ├── custom_menus.php
│ │ │ ├── domain_details.php
│ │ │ ├── domain_status_change.php
│ │ │ ├── imscp_debugger.php
│ │ │ ├── imscp_updates.php
│ │ │ ├── index.php
│ │ │ ├── ip_delete.php
│ │ │ ├── ip_manage.php
│ │ │ ├── ip_usage.php
│ │ │ ├── language.php
│ │ │ ├── layout.php
│ │ │ ├── manage_reseller_owners.php
│ │ │ ├── manage_reseller_users.php
│ │ │ ├── multilanguage.php
│ │ │ ├── password_update.php
│ │ │ ├── personal_change.php
│ │ │ ├── profile.php
│ │ │ ├── reseller_add.php
│ │ │ ├── reseller_edit.php
│ │ │ ├── reseller_statistics.php
│ │ │ ├── reseller_user_statistics.php
│ │ │ ├── reseller_user_statistics_details.php
│ │ │ ├── rootkit_log.php
│ │ │ ├── server_statistic.php
│ │ │ ├── service_statuses.php
│ │ │ ├── sessions_manage.php
│ │ │ ├── settings.php
│ │ │ ├── settings_lostpassword.php
│ │ │ ├── settings_maintenance_mode.php
│ │ │ ├── settings_plugins.php
│ │ │ ├── settings_ports.php
│ │ │ ├── settings_server_traffic.php
│ │ │ ├── settings_welcome_mail.php
│ │ │ ├── system_info.php
│ │ │ ├── ticket_closed.php
│ │ │ ├── ticket_delete.php
│ │ │ ├── ticket_system.php
│ │ │ ├── ticket_view.php
│ │ │ ├── user_delete.php
│ │ │ ├── user_edit.php
│ │ │ └── users.php
│ │ ├── client/
│ │ │ ├── alias_add.php
│ │ │ ├── alias_delete.php
│ │ │ ├── alias_edit.php
│ │ │ ├── alias_order_delete.php
│ │ │ ├── alssub_delete.php
│ │ │ ├── backup.php
│ │ │ ├── cert_view.php
│ │ │ ├── change_user_interface.php
│ │ │ ├── dns_add.php
│ │ │ ├── dns_delete.php
│ │ │ ├── dns_edit.php
│ │ │ ├── domain_edit.php
│ │ │ ├── domains_manage.php
│ │ │ ├── error_edit.php
│ │ │ ├── error_pages.php
│ │ │ ├── ftp_accounts.php
│ │ │ ├── ftp_add.php
│ │ │ ├── ftp_delete.php
│ │ │ ├── ftp_edit.php
│ │ │ ├── index.php
│ │ │ ├── language.php
│ │ │ ├── layout.php
│ │ │ ├── mail_accounts.php
│ │ │ ├── mail_add.php
│ │ │ ├── mail_autoresponder_disable.php
│ │ │ ├── mail_autoresponder_edit.php
│ │ │ ├── mail_autoresponder_enable.php
│ │ │ ├── mail_catchall.php
│ │ │ ├── mail_catchall_add.php
│ │ │ ├── mail_catchall_delete.php
│ │ │ ├── mail_delete.php
│ │ │ ├── mail_edit.php
│ │ │ ├── mail_external.php
│ │ │ ├── password_update.php
│ │ │ ├── personal_change.php
│ │ │ ├── phpini.php
│ │ │ ├── profile.php
│ │ │ ├── protected_areas.php
│ │ │ ├── protected_areas_add.php
│ │ │ ├── protected_areas_delete.php
│ │ │ ├── protected_group_add.php
│ │ │ ├── protected_group_delete.php
│ │ │ ├── protected_user_add.php
│ │ │ ├── protected_user_assign.php
│ │ │ ├── protected_user_delete.php
│ │ │ ├── protected_user_edit.php
│ │ │ ├── protected_user_manage.php
│ │ │ ├── sql_change_password.php
│ │ │ ├── sql_database_add.php
│ │ │ ├── sql_database_delete.php
│ │ │ ├── sql_delete_user.php
│ │ │ ├── sql_manage.php
│ │ │ ├── sql_user_add.php
│ │ │ ├── subdomain_add.php
│ │ │ ├── subdomain_delete.php
│ │ │ ├── subdomain_edit.php
│ │ │ ├── ticket_closed.php
│ │ │ ├── ticket_create.php
│ │ │ ├── ticket_delete.php
│ │ │ ├── ticket_system.php
│ │ │ ├── ticket_view.php
│ │ │ ├── traffic_statistics.php
│ │ │ └── webtools.php
│ │ ├── errordocs/
│ │ │ ├── 400.html
│ │ │ ├── 401.html
│ │ │ ├── 403.html
│ │ │ ├── 404.html
│ │ │ ├── 405.html
│ │ │ ├── 500.html
│ │ │ ├── 502.html
│ │ │ ├── 503.html
│ │ │ └── inc/
│ │ │ ├── errordocs.css
│ │ │ └── ie78overrides.css
│ │ ├── imagecode.php
│ │ ├── index.php
│ │ ├── lostpassword.php
│ │ ├── plugins.php
│ │ ├── reseller/
│ │ │ ├── alias.php
│ │ │ ├── alias_add.php
│ │ │ ├── alias_delete.php
│ │ │ ├── alias_edit.php
│ │ │ ├── alias_order.php
│ │ │ ├── change_user_interface.php
│ │ │ ├── circular.php
│ │ │ ├── domain_details.php
│ │ │ ├── domain_edit.php
│ │ │ ├── domain_status_change.php
│ │ │ ├── hosting_plan.php
│ │ │ ├── hosting_plan_add.php
│ │ │ ├── hosting_plan_delete.php
│ │ │ ├── hosting_plan_edit.php
│ │ │ ├── index.php
│ │ │ ├── ip_usage.php
│ │ │ ├── language.php
│ │ │ ├── layout.php
│ │ │ ├── password_update.php
│ │ │ ├── personal_change.php
│ │ │ ├── profile.php
│ │ │ ├── settings_lostpassword.php
│ │ │ ├── settings_welcome_mail.php
│ │ │ ├── ticket_closed.php
│ │ │ ├── ticket_create.php
│ │ │ ├── ticket_delete.php
│ │ │ ├── ticket_system.php
│ │ │ ├── ticket_view.php
│ │ │ ├── user_add1.php
│ │ │ ├── user_add2.php
│ │ │ ├── user_add3.php
│ │ │ ├── user_delete.php
│ │ │ ├── user_edit.php
│ │ │ ├── user_statistics.php
│ │ │ ├── user_statistics_details.php
│ │ │ └── users.php
│ │ ├── robots.txt
│ │ ├── shared/
│ │ │ ├── ftp_choose_dir.php
│ │ │ ├── password_update.php
│ │ │ └── personal_change.php
│ │ └── tools/
│ │ └── index.php
│ ├── resources/
│ │ ├── fonts/
│ │ │ ├── AUTHORS
│ │ │ ├── CREDITS
│ │ │ ├── ChangeLog
│ │ │ ├── FreeMono.sfd
│ │ │ ├── FreeMonoBold.sfd
│ │ │ ├── FreeMonoBoldOblique.sfd
│ │ │ ├── FreeMonoOblique.sfd
│ │ │ ├── FreeSans.sfd
│ │ │ ├── FreeSansBold.sfd
│ │ │ ├── FreeSansBoldOblique.sfd
│ │ │ ├── FreeSansOblique.sfd
│ │ │ ├── FreeSerif.sfd
│ │ │ ├── FreeSerifBold.sfd
│ │ │ ├── FreeSerifBoldItalic.sfd
│ │ │ ├── FreeSerifItalic.sfd
│ │ │ ├── INSTALL
│ │ │ └── README
│ │ ├── i18n/
│ │ │ └── iMSCP.php
│ │ ├── magic-1.mgc
│ │ └── magic-2.mgc
│ ├── src/
│ │ ├── Application.php
│ │ ├── Assertion/
│ │ │ ├── AdminCanMoveCustomersAssertion.php
│ │ │ ├── AdminCanMoveResellersAssertion.php
│ │ │ ├── AdminCanViewAntiAntiRootkitsAssertion.php
│ │ │ ├── AdminCanViewImscpUpdatesAssertion.php
│ │ │ ├── AdminCanViewIpUsageStatisticsAssertion.php
│ │ │ ├── AdminCanViewResellerStatisticsAssertion.php
│ │ │ ├── AdminHasCircularFeatureAssertion.php
│ │ │ ├── AdminHasSupportFeatureAssertion.php
│ │ │ ├── CallbackAssertion.php
│ │ │ ├── ClientCanAddSqlDatabasesAssertion.php
│ │ │ ├── ClientHasBackupFeatureAssertion.php
│ │ │ ├── ClientHasCustomDnsFeatureAssertion.php
│ │ │ ├── ClientHasCustomErrorPagesFeatureAssertion.php
│ │ │ ├── ClientHasDomainAliasesFeatureAssertion.php
│ │ │ ├── ClientHasExternalMailFeatureAssertion.php
│ │ │ ├── ClientHasFtpFeatureAssertion.php
│ │ │ ├── ClientHasMailFeatureAssertion.php
│ │ │ ├── ClientHasMailOrExternalMailFeatureAssertion.php
│ │ │ ├── ClientHasPhpEditorFeatureAssertion.php
│ │ │ ├── ClientHasProtectedAreasFeatureAssertion.php
│ │ │ ├── ClientHasSqlFeatureAssertion.php
│ │ │ ├── ClientHasSubdomainsFeatureAssertion.php
│ │ │ ├── ClientHasSupportFeatureAssertion.php
│ │ │ ├── ClientHasWebstatsFeatureAssertion.php
│ │ │ ├── ResellerCanViewCustomerStatisticsAssertion.php
│ │ │ ├── ResellerHasCircularFeatureAssertion.php
│ │ │ ├── ResellerHasDomainAliasesFeatureAssertion.php
│ │ │ └── ResellerHasSupportFeatureAssertion.php
│ │ ├── Authentication/
│ │ │ ├── AuthEvent.php
│ │ │ ├── AuthResult.php
│ │ │ └── AuthService.php
│ │ ├── Autoloader/
│ │ │ └── BcAutoloader.php
│ │ ├── Config/
│ │ │ ├── ArrayConfig.php
│ │ │ ├── DbConfig.php
│ │ │ └── FileConfig.php
│ │ ├── Crypt.php
│ │ ├── Database/
│ │ │ ├── DatabaseEvent.php
│ │ │ ├── DatabaseException.php
│ │ │ ├── DatabaseMySQL.php
│ │ │ ├── DatabaseResultSet.php
│ │ │ └── DatabaseStatementEvent.php
│ │ ├── Event/
│ │ │ ├── Event.php
│ │ │ ├── EventAggregator.php
│ │ │ ├── EventDescription.php
│ │ │ ├── EventException.php
│ │ │ ├── EventManager.php
│ │ │ ├── EventManagerException.php
│ │ │ ├── EventManagerInterface.php
│ │ │ ├── Events.php
│ │ │ └── Listener/
│ │ │ ├── EventListener.php
│ │ │ ├── ListenerException.php
│ │ │ ├── PriorityQueue.php
│ │ │ ├── ResponseCollection.php
│ │ │ └── SplPriorityQueue.php
│ │ ├── Exception/
│ │ │ ├── AbstractExceptionWriter.php
│ │ │ ├── BrowserExceptionWriter.php
│ │ │ ├── Exception.php
│ │ │ ├── ExceptionEvent.php
│ │ │ ├── ExceptionHandler.php
│ │ │ ├── MailExceptionWriter.php
│ │ │ └── ProductionException.php
│ │ ├── Filter/
│ │ │ └── GzipFilter.php
│ │ ├── Handlers/
│ │ │ ├── ExceptionHandler.php
│ │ │ ├── NotAllowedHandler.php
│ │ │ └── NotFoundHandler.php
│ │ ├── I18n/
│ │ │ ├── GettextParser.php
│ │ │ └── ParserException.php
│ │ ├── Json/
│ │ │ └── LazyDecoder.php
│ │ ├── Net.php
│ │ ├── PhpEditor.php
│ │ ├── Plugin/
│ │ │ ├── AbstractPlugin.php
│ │ │ ├── BruteForce.php
│ │ │ ├── Filter/
│ │ │ │ └── PluginArchive.php
│ │ │ ├── PluginActionStoppedException.php
│ │ │ ├── PluginException.php
│ │ │ ├── PluginManager.php
│ │ │ ├── PluginRoutesInjector.php
│ │ │ ├── PluginServiceProvidersInjector.php
│ │ │ └── Validate/
│ │ │ └── PluginArchive.php
│ │ ├── Registry.php
│ │ ├── ServiceProvider.php
│ │ ├── ServiceProviderInterface.php
│ │ ├── Services.php
│ │ ├── SystemInfo.php
│ │ ├── TemplateEngine.php
│ │ ├── Update/
│ │ │ ├── AbstractUpdate.php
│ │ │ ├── DatabaseUpdate.php
│ │ │ ├── UpdateException.php
│ │ │ └── VersionUpdate.php
│ │ ├── Uri/
│ │ │ ├── UriException.php
│ │ │ └── UriRedirect.php
│ │ ├── Utility/
│ │ │ └── OpcodeCache.php
│ │ ├── Validate/
│ │ │ ├── CommonValidation.php
│ │ │ └── Uri.php
│ │ └── VirtualFileSystem.php
│ └── themes/
│ └── default/
│ ├── admin/
│ │ ├── admin_add.phtml
│ │ ├── admin_log.tpl
│ │ ├── circular.tpl
│ │ ├── custom_menus.tpl
│ │ ├── domain_details.tpl
│ │ ├── imscp_debugger.tpl
│ │ ├── imscp_updates.tpl
│ │ ├── index.tpl
│ │ ├── ip_manage.tpl
│ │ ├── ip_usage.tpl
│ │ ├── language.tpl
│ │ ├── layout.tpl
│ │ ├── manage_reseller_owners.phtml
│ │ ├── manage_reseller_users.phtml
│ │ ├── multilanguage.phtml
│ │ ├── navigation.php
│ │ ├── reseller_add.phtml
│ │ ├── reseller_edit.phtml
│ │ ├── reseller_statistics.tpl
│ │ ├── reseller_user_statistics.tpl
│ │ ├── reseller_user_statistics_details.tpl
│ │ ├── rootkit_log.tpl
│ │ ├── server_statistic.tpl
│ │ ├── service_statuses.tpl
│ │ ├── sessions_manage.tpl
│ │ ├── settings.tpl
│ │ ├── settings_lostpassword.tpl
│ │ ├── settings_maintenance_mode.tpl
│ │ ├── settings_plugins.phtml
│ │ ├── settings_ports.tpl
│ │ ├── settings_server_traffic.tpl
│ │ ├── settings_welcome_mail.tpl
│ │ ├── system_info.tpl
│ │ ├── ticket_closed.tpl
│ │ ├── ticket_system.tpl
│ │ ├── ticket_view.tpl
│ │ └── users.phtml
│ ├── assets/
│ │ ├── css/
│ │ │ ├── black.css
│ │ │ ├── blue.css
│ │ │ ├── green.css
│ │ │ ├── ie78overrides.css
│ │ │ ├── jquery-ui-black.css
│ │ │ ├── jquery-ui-blue.css
│ │ │ ├── jquery-ui-green.css
│ │ │ ├── jquery-ui-red.css
│ │ │ ├── jquery-ui-yellow.css
│ │ │ ├── red.css
│ │ │ ├── simple.css
│ │ │ ├── ui.css
│ │ │ └── yellow.css
│ │ └── js/
│ │ ├── imscp.js
│ │ └── jquery/
│ │ ├── jquery-ui.js
│ │ ├── jquery.js
│ │ └── plugins/
│ │ ├── dataTables.js
│ │ ├── dataTables_naturalSorting.js
│ │ └── pGenerator.js
│ ├── client/
│ │ ├── alias_add.tpl
│ │ ├── alias_edit.tpl
│ │ ├── backup.tpl
│ │ ├── cert_view.tpl
│ │ ├── dns_edit.tpl
│ │ ├── domain_edit.tpl
│ │ ├── domains_manage.tpl
│ │ ├── error_edit.tpl
│ │ ├── error_pages.tpl
│ │ ├── ftp_accounts.tpl
│ │ ├── ftp_add.tpl
│ │ ├── ftp_choose_dir.tpl
│ │ ├── ftp_edit.tpl
│ │ ├── index.tpl
│ │ ├── language.tpl
│ │ ├── layout.tpl
│ │ ├── mail_accounts.phtml
│ │ ├── mail_add.tpl
│ │ ├── mail_autoresponder.tpl
│ │ ├── mail_catchall.phtml
│ │ ├── mail_catchall_add.phtml
│ │ ├── mail_edit.tpl
│ │ ├── mail_external.tpl
│ │ ├── navigation.php
│ │ ├── phpini.tpl
│ │ ├── protect_it.tpl
│ │ ├── protected_areas.tpl
│ │ ├── puser_assign.tpl
│ │ ├── puser_edit.tpl
│ │ ├── puser_gadd.tpl
│ │ ├── puser_manage.tpl
│ │ ├── puser_uadd.tpl
│ │ ├── sql_change_password.tpl
│ │ ├── sql_database_add.tpl
│ │ ├── sql_manage.tpl
│ │ ├── sql_user_add.tpl
│ │ ├── subdomain_add.tpl
│ │ ├── subdomain_edit.tpl
│ │ ├── ticket_closed.tpl
│ │ ├── ticket_create.tpl
│ │ ├── ticket_system.tpl
│ │ ├── ticket_view.tpl
│ │ ├── traffic_statistics.tpl
│ │ └── webtools.tpl
│ ├── index.tpl
│ ├── info.php
│ ├── lostpassword.tpl
│ ├── message.tpl
│ ├── reseller/
│ │ ├── alias.tpl
│ │ ├── alias_add.tpl
│ │ ├── alias_edit.tpl
│ │ ├── circular.tpl
│ │ ├── domain_details.tpl
│ │ ├── domain_edit.tpl
│ │ ├── hosting_plan.tpl
│ │ ├── hosting_plan_add.tpl
│ │ ├── hosting_plan_edit.tpl
│ │ ├── index.tpl
│ │ ├── ip_usage.tpl
│ │ ├── language.tpl
│ │ ├── layout.tpl
│ │ ├── navigation.php
│ │ ├── settings_lostpassword.tpl
│ │ ├── settings_welcome_mail.tpl
│ │ ├── ticket_closed.tpl
│ │ ├── ticket_create.tpl
│ │ ├── ticket_system.tpl
│ │ ├── ticket_view.tpl
│ │ ├── user_add1.tpl
│ │ ├── user_add2.tpl
│ │ ├── user_add3.phtml
│ │ ├── user_statistics.tpl
│ │ ├── user_statistics_details.tpl
│ │ └── users.phtml
│ └── shared/
│ ├── layouts/
│ │ ├── simple.tpl
│ │ └── ui.tpl
│ └── partials/
│ ├── client_list.phtml
│ ├── ftp_choose_dir.tpl
│ ├── password_update.phtml
│ ├── personal_change.phtml
│ ├── profile.tpl
│ └── user_edit.phtml
├── i18n/
│ ├── .tx/
│ │ └── config
│ ├── iMSCP.pot
│ ├── po/
│ │ ├── ar.po
│ │ ├── bg_BG.po
│ │ ├── ca_ES.po
│ │ ├── cs_CZ.po
│ │ ├── da_DK.po
│ │ ├── de_DE.po
│ │ ├── el.po
│ │ ├── en_GB.po
│ │ ├── es_AR.po
│ │ ├── es_ES.po
│ │ ├── eu_ES.po
│ │ ├── fa_IR.po
│ │ ├── fi_FI.po
│ │ ├── fr_FR.po
│ │ ├── gl_ES.po
│ │ ├── hu_HU.po
│ │ ├── it_IT.po
│ │ ├── ja_JP.po
│ │ ├── lt_LT.po
│ │ ├── nb_NO.po
│ │ ├── nl_NL.po
│ │ ├── pl_PL.po
│ │ ├── pt_BR.po
│ │ ├── pt_PT.po
│ │ ├── ro_RO.po
│ │ ├── ru_RU.po
│ │ ├── sk_SK.po
│ │ ├── sl.po
│ │ ├── sv_SE.po
│ │ ├── th_TH.po
│ │ ├── tr_TR.po
│ │ ├── uk_UA.po
│ │ ├── vi.po
│ │ ├── zh_CN.po
│ │ ├── zh_HK.po
│ │ └── zh_TW.po
│ └── tools/
│ ├── compilePo
│ └── makemsgs
└── imscp-autoinstall
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
.gitattributes export-ignore
.gitignore export-ignore
* text eol=lf
*.gif binary
*.jpg binary
*.mo binary
*.mgc binary
*.png binary
*.sfd binary
*.ttf binary
================================================
FILE: .gitignore
================================================
*.PHPEditProject
.idea
nbproject
.pc
.buildpath
.project
.vagrant
.settings
/Vagrantfile
.DS_Store
_Deparsed_XSubs.pm
================================================
FILE: AUTHORS
================================================
© 2010-2019, Laurent Declercq (i-MSCP™)
All rights reserved
http://www.i-mscp.net
https://github.com/i-MSCP/imscp
License
See the README.md file
================================================
FILE: CHANGELOG
================================================
i-MSCP ChangeLog
--------------------------------------------------------------------------------
Git 1.5.x
--------------------------------------------------------------------------------
BACKEND
Added: Apache2 wildcard alias feature
Added: Array::Utils library (PerlVendor)
Added: iMSCP::Database::mariadb adapter (for use with new DBI DBD::MariaDB
driver, in place of DBD::mysql when available)
Added: Support for per-milter and per-policy server timeout
(Servers::mta::postfix::postconf() - Postfix >= 3.0.0)
Dropped: Software installer
Enhancement: Make it possible to dump autoload only (iMSCP::Composer)
Enhancement: Make it possible to override default DNS resource record (Bind9
server implementation)
Fixed: Can't locate object method "remove" via package "iMSCP::File"
(iMSCP::Service)
Fixed: Create default sieve script (filters), even if sieve is not available
(Dovecot IMAP/POP server implementation)
Fixed: Create symlink for sieve filters on email account creation/update,
even when those are not available (Dovecot IMAP/POP server
implementation)
Fixed: Don't stop entities processing on failure (iMSCP::DbTasksProcessor)
Fixed: Error output is badly captured, leading to 'Unknown error'
(named-compilezone / Bind9 server implementation)
Fixed: Missing check for SSL private key and SSL certificate matching
(iMSCP::OpenSSL library)
Fixed: Symlinks must be copied AS THIS instead of being followed
(iMSCP::Dir, iMSCP::File)
Fixed: SysVinit script are always reported as enabled (Debian SysVinit init
provider)
Fixed: The 'imscp_panel' service is always restarted even when it should not
(FrontEnd dpkg(1) post invoke tasks)
Fixed: The 'is-enabled' support for SysVinit scripts isn't available in
older systemd version (Debian Systemd init provider)
Review: Enable sieve filtering service by default (Move of SPAM to Junk
folder - Dovecot IMAP/POP server implementation)
Review: Engine permissions (Bind9 server implementation)
Review: Pass the full item data row to backend modules
Review: Set default execution mode to 'backend' instead of raising error -
iMSCP::DbTasksProcessor
Rewritten: Packages (addons)
CONFIG
Enhancement: Make it possible to change process limits (and more) through
the i-MSCP's dovecot configuration file
Removed: DATABASE_TYPE configuration parameter form master i-MSCP
configuration file
DATABASE
Added: log.log_time index (r283)
Added: login.ipaddr index (r284)
Added: Several indexes (r282)
Dropped: Telnet service port (r285)
Dropped: plugin.plugin_type column (r286)
Dropped: Software installer (r287)
Fixed: Unwanted default values (r275)
Review: Switched from 'utf8' character set to 'utf8mb4' character set (r281)
Review: Switched from 'utf8_unicode_ci' collation to 'utf8mb4_unicode_ci'
collation (r281)
DAEMON
Enhancement: Make it possible to override default (9876) listen port
Review: Always write pidfile
Review: Make use of a default backend script path
(/var/www/imscp/engine/imscp-rqst-mngr) if none is provided
Review: Make use of a default pidfile path (/run/imscp_daemon.path) if none
is provided
Updated: Version to 1.4.0
DISTRIBUTIONS
Added: bcmath and bz2 PHP extensions (all distributions, all PHP versions)
Added: Support for Debian Buster (10.x)
Added: Support for Devuan ASCII (2.x)
Added: Support for PHP 7.2, 7.3, 7.4
Dropped: Support for Ubuntu Trusty Thar (14.04)
FRONTEND
Added: Autoloaders for managing legacy i-MSCP artifacts
Added: ACL assertions for the navigation
Added: Apache2 wildcard alias feature
Added: Filter for plugin archives
Added: iMSCP Database::getPDO() static method (return underlying PDO
instance bound to the given connection)
Added: Patches for zendframework/zendframework1 dependency (PHP
deprecations, Zend_Navigation component enhancement, small fixes)
Added: Route injector service for i-MSCP plugins
Added: Service provider injector for i-MSCP plugins
Added: Service provider for overriding of default Slim error handlers
Added: Validator for plugin archives
Dropped: Software installer
Enhancement: Log the frontEnd errors into the
./gui/data/log/frontend_errors.log file and rotate it when its
size is bigger than 10 MiB
Enhancement: Make it possible to add wildcard DNS record (custom DNS
interface)
Fixed: Couldn't unregister exception writers
Fixed: Hide E_STRICT, E_NOTICE, E_WARNING and E_DEPRECATED even for addons
Fixed: Invalid parameter number: number of bound variables does not match
number of tokens (client/mail_catchall_add.php)
Fixed: Output buffer must be erased when an exception is throw while
template rendering
Fixed: We need make sure that we're really in a transaction before
rolling-back (MySQL database wrapper)
Removed: Telnet service port
Review: Install dependencies through the PHP dependency manager (composer)
Review: Load comments (PHP OPcache)
Review: Make use of the league/flysystem filesystem abstraction for the VFS
(FTP) layer
Review: Save comments (PHP OPcache)
Review: Set locale from environment (CLI)
Review: Switch from PSR-0 to PSR-4
INSTALLER
Added: 'gnupg' package to the list of pre-required packages (all
distributions)
Added: WHIPTAIL(1) support (dialog)
Changed: Abort installation/update process if the distribution is not
up-to-date
Changed: All PHP versions are now always installed
Changed: Default selected PHP version for customers is now 7.3
Changed: Required PHP version for the frontEnd is now 7.3
Enhancement: Make it possible to keep local SQL server installed when the
SQL remote alternative is selected
Fixed: Don't stop FTP, HTTPD, IMAP/POP and SMTP services on
update/reconfiguration
Fixed: jessie-updates repository (previously known as debian-volatile
repository) no longer available (pbuilder conffile / Debian)
Fixed: The hostname for customer SQL users is not updated when its value is
changed through the installer (SQL server)
Fixed: Update from security repositories won't be pulled (APT pinning)
Removed: --build-only command line option from the imscp-autoinstall script
Removed: --force-reinstall command line option from the imscp-autoinstall
script
Removed: --listener command line option from both imscp-autoinstall and
imscp-reconfigure scripts
Review: SQL users for various services such as proftpd, vsftpd, dovecot,
courier-authdaemon are now randomly generated
LISTENERS
Removed: 10_named_override_default_rr.pl (now included in core)
Removed: 20_dovecot_connections.pl (can now be done through i-MSCP's Dovecot
configuration file - persistent configuration)
PLUGINS
Enhancement: Run frontEnd applications through the Slim microframework (with
backward compatibility in mind)
Fixed: Case where there are no longer migration files provided by a plugin
isn't covered
Fixed: Plugins not loaded when application is run through CLI
Updated: Plugin API to version 1.5.1
SERVICES
Enhancement: Make it possible to extend/override Dovecot configuration with
additional configuration files
VENDOR
Added: Slim library (PHP dependency)
Review: idna-convert library is now installed through composer
Review: phpseclib library is now installed through composer
Review: Net_DNS2 library is now installed through composer
YOUTRACK
IP-1801 Backend workflow for custom DNS records get bypassed on domain or
alias change, leading to events not being triggered
IP-1815 Circular feature - Unexpected exception raised - `username'
parameter is not defined or not a string
IP-1816 Cosmetic - Copyright date on i-MSCP sign-in screen not up-to-date
IP-1823 Auto-responder - Bad encoding
--------------------------------------------------------------------------------
1.5.3 (build 2018120800)
--------------------------------------------------------------------------------
2018-12-08: Laurent Declercq
RELEASE i-MSCP 1.5.3 (build 2018120800)
BACKEND
Fixed: Couldn't install composer packages on fresh installation nor switch
them (regression fix)
Fixed: SysVinit provider not initialized when called from Debian Upstart
init provider (regression fix)
Fixed: The iMSCP::Provider::Service::Debian::Upstart class must implement
the stop() method (regression fix)
DAEMON
Fixed: Unknown 'stack-protector-strong' GCC option - option has been
introduced in GCC 4.9 (regression fix)
YOUTRACK
IP-1813 FrontEnd - Update notifier - Missing build number handling
--------------------------------------------------------------------------------
1.5.3 (build 2018120700)
--------------------------------------------------------------------------------
2018-12-07: Laurent Declercq
RELEASE i-MSCP 1.5.3 (build 2018120700)
ARTIFACTS
Removed: latest.txt file (no longer used)
BACKEND
Added: Netplan networking configuration provider (networkd renderer is
assumed)
Fixed: Mask/Unmask units after/prior disabling/enabling them (Systemd init
provider)
Fixed: Missing support for various systemd unit files such as device, mount
point, swap file... (Systemd init provider)
Fixed: Resolve units before acting on them due to
https://github.com/systemd/systemd/issues/7875 (Systemd init
provider)
Fixed: SHA384 is not supported by your openssl extension, could not verify
the phar file integrity (Composer)
Fixed: Use of uninitialized value in bitwise or ( |) (PHP memory_limit,
Subdomain module)
Fixed: Virtual (aliased) interfaces (interface:integer) is an IFCONFIG(8)
specific concept. IFCONFIG(8) is deprecated in favor of IP(8).
Review: Make use of a well-known (fixed) composer.phar version (1.8.0)
Rewritten: Ifupdown networking configuration provider
CONFIG
Fixed: Bad value for X-Forward-* headers (Proxy feature / Apache2 ssl vhosts)
Fixed: Do not discard paths other than '/errors/' and
'/.well-known/acme-challenge/' on redirect/proxy (Apache2)
Fixed: Paths must be quoted in Apache2 configuration files to prevent spaces
being interpreted as end of argument
Renamed: 'BuildDate' main configuration parameter to 'Build'
CONTRIB
Fixed: Prevent uninstallation of the 'libsasl2-modules' distribution package
(10_postfix_smarthost.pl listener file)
DATABASE
Review: domain_traffic table schema (removed PK (dtraff_id), removed UK
(traff_time), added compound PK (domain_id, dtraff_time))
Review: server_traffic table schema (removed PK (straff_id), removed UK
(traff_time), added PK (traff_time))
DAEMON
Fixed: Comparison between signed and unsigned integer expressions
Fixed: FTBFS with GCC from Ubuntu 18.04 - Undeclared identifiers: SIGCHLD,
SIGPIPE
DISTRIBUTIONS
Added: 'dirmngr' distribution package (all distributions)
Added: Support for Ubuntu Bionic Beaver (18.04)
Added: 'ntp' package (all distributions) - Clock synchronization is an
important factor for i-MSCP
Added: 'unzip' distribution package (all distributions) - required by
composer
Fixed: Encoding issues with setup dialog (LANG=C vs LANG=C.UTF8)
FRONTEND
Fixed: Always display IDNA in their punycode representation (custom DNS
record add/edit UI)
Fixed: $ORIGIN value is empty (custom DNS records edit UI)
Fixed: Closing button being removed in all dialog UI while it must be
removed only in alert and confirmation dialogs
Fixed: Couldn't execute /usr/local/lib/imscp_panel/imscp_panel_reopenlogs
logrotate script
Fixed: Parameter is not mapped to any conversion specification
(reseller/index.php, client/index)
Fixed: Prevent edition of custom DNS records which are not owned by the
custom DNS feature
INSTALLER
Enhancement: Optimize the SQL database upon setup process but not if the last
optimization date is less than 24 hours
Fixed: Build only mode is broken on fresh installation: Couldn't find the
'PHP' command in search path...
Fixed: 'CLIENT_DOMAIN_ALT_URLS' configuration parameter resetted to 0
(disabled) while running installer
Fixed: 'CLIENT_DOMAIN_ALT_URLS' parameter is not set on fresh installations
Fixed: DIRMNGR(8) daemon not being terminated when expected (APT key
management)
Fixed: Inconsistency with other parameters (CLIENT_DOMAIN_ALT_URLS parameter
-- yes/no vs 1/0)
Fixed: Keep any installed PHP packages as those can have been installed
manually or by 3rd-party software
Fixed: Missing or bad entry found in your preseed file due to unhandled
space separator (Slave DNS server)
Fixed: Setup dialog for the alternative URLs feature is not shown on fresh
installations
Renamed: 'CLIENT_DOMAIN_ALT_URLS' configuration parameter to
'CLIENT_WEBSITES_ALT_URLS'
YOUTRACK
IP-1689 Password reset conflict with PanelRedirect
IP-1770 Contrib - 10_backup_storage_outsourcing.pl - Operation not permitted
IP-1786 Customer assignment (to reseller) not showing all clients
IP-1787 Typo in external mail feature activation
IP-1791 Error message when calculating disk quota - Cannot start new SQL
transaction on an automatic reconnect
IP-1792 When changing the document root of a domain with a folder that holds
a space in its name, the Apache2 server is crashing
IP-1793 CLIENT_DOMAIN_ALT_URLS Value in preseed file
IP-1795 When editing a mailbox, the quota value is reset to 10 MiB while it
should stay to it current quota value
IP-1802 Traffic logger should wait for the xtables lock
IP-1803 Wrong SQL query in SSLCertificate.pm module
IP-1804 Cannot add catchall for subdomains - Call to a member function
fetchRow on string
IP-1806 Client - Domain Edit - Document Root Edit - FTP (VFS) - Could not
retrieve directories - ASCII username expected
IP-1809 Missing logrotate in LXC container
IP-1811 APT pinning conflict with libssl-dev
IP-1812 Missing support for Ubuntu Bionic Beaver (18.04)
--------------------------------------------------------------------------------
1.5.3 (build 2018051600)
--------------------------------------------------------------------------------
2017-09-08: Laurent Declercq
RELEASE i-MSCP 1.5.3 (build 2018051600)
BACKEND
Backport: Fix for #IP-1758 (Could not remove HTTPD log directory -- The
immutable bit is removed too late) from 1.6.x branch
Fixed: Couldn't restore backup archive - Can't locate object method
"selectall_array" via package "DBI::db" (restore backup feature)
Fixed: Default PHP INI values (PHP Editor)
DATABASE
Backport: Fix for #IP-1742 (i-MSCP upgrade error - Unknown 'mail_user'
database table in database update r254) from 1.6.x branch
FRONTEND
Backport: Fix for #IP-1749 (User profile fields validation too strict from
1.6.x branch)
Cosmetic: Remove borders in table header/footer (layout)
Fixed: Couldn't generate self-signed SSL certificate - Couldn't write in
temporary SSL configuration file
Fixed: Couldn't access support section when logged as reseller
Fixed: Couldn't update customer password when logged in as administrator or
reseller
Fixed: IDE inspections (PhpStorm)
Fixed: Localization routing
Fixed: Possible double POST request submission in restore backup interface
Fixed: Unhandled 'torestore' status leading to cosmetic issues in GUI when
a domain is being restored
Fixed: Wrong usage of strstr() function (SystemInfo class)
PLUGINS
Fixed: Local plugin configuration files are not merged as expected
SCRIPTS
Fixed: maillogconvert.pl script is broken leading to un-processing of SMTP
logs
Fixed: Unexpected warning (FALSE warning) when running imscp-backup-all
backup script in verbose mode
--------------------------------------------------------------------------------
1.5.2
--------------------------------------------------------------------------------
Canceled release
--------------------------------------------------------------------------------
1.5.1 (build 2017090800)
--------------------------------------------------------------------------------
2017-09-08: Laurent Declercq
RELEASE i-MSCP 1.5.1 (build 2017090800)
BACKEND
Fixed: Can't call method "isEmpty" on an undefined value when a listener
self un-register (iMSCP::EventManager)
FRONTEND
Added: `onMoveCustomer' event -- Event triggered when a customer is moved to
another reseller
Added: `onMoveReseller' event -- Event triggered when a reseller is moved to
another administrator
Enhancement: Adjust target reseller limits/permissions instead of throwing
error (Customer assignments feature)
Enhancement: Allows to synchronize PHP permissions of specific client
(iMSCP_PHPini)
Fixed: Several inconsistencies in displaying of statistics data (domain edit
interface -- reseller UI level)
Fixed: Several layout issues regarding statistics (all UI levels)
Fixed: Statistics badly calculated due to mixing between assigned and
consumed values (admin UI level)
Fixed: Exception raised due to wrong SQL query (Customer assignments)
Rewritten: Customer and reseller assignments features (admin UI level)
--------------------------------------------------------------------------------
1.5.0 (build 2017090500)
--------------------------------------------------------------------------------
2017-09-05: Laurent Declercq
RELEASE i-MSCP 1.5.0 (build 2017090500)
BACKEND
Added: `apcu', `apc', `gmp' and `Zend Opcache' PHP modules to the list of
required PHP module (iMSCP::Requirements)
Added: Flag allowing to ignore mount operation failures (iMSCP::Mount)
Added: iMSCP::EventManager::hasListener method -- Allow to check whether or
not a listener is registered for an event
Added: Support for multiple <character-string>s in TXT/SPF DNS resource
records (Modules::CustomDNS)
Deprecated: iMSCP::Database::mysql::doQuery() method -- Will be removed in a
later version
Deprecated: iMSCP::Database::mysql::endTransaction() method -- Will be
removed in a later version
Deprecated: iMSCP::Database::mysql::startTransaction() method -- Will be
removed in a later version
Fixed: Can't use an undefined value as a HASH reference
(iMSCP::EventManager)
Fixed: Couldn't remove IP address: Unknown action requested for server IP
(Modules::ServerIP)
Fixed: Don't set permissions on parent directories as this can lead to
several permission issues (iMSCP::Dir::make)
Fixed: Permissions on files are always preserved when copying directory
recursively
Fixed: Routines for Perl/PHP modules requirements checking are broken
(iMSCP::Requirements)
Fixed: Sets the SQL `group_concat_max_len' variable on a per session basis
Fixed: Sets the SQL modes on a per session basis to `NO_AUTO_CREATE_USER'
(backward compatibility with plugins)
Removed: `FETCH_MODE' option from iMSCP::Database::mysql
CONFIG
Added: `APPLICATION_ENV' environment variable (Nginx)
Removed: `.htgroup' and `.htpasswd' files from the skeleton directory; These
files are now created only when needed
CONTRIB
Fixed: 10_backup_storage_outsourcing.pl: Couldn't move XXX directory to XXX
-- filesystem boundaries
Fixed: 10_backup_storage_outsourcing.pl: Outsourced backup directory not
created on new customer account creation
DISTRIBUTIONS
Added: Support for Percona DB 5.7 -- Debian 9/Stretch (amd64 architecture
only)
Added: ca-certificates package in list of pre-required packages
Fixed: Install openssl and libssl-dev packages from Debian/Ubuntu
repositories, not from Ondřej Surý repository
Fixed: MariaDB client library from MariaDB 10.2 repository isn't compatible
with the DBD::mysql Perl module (Debian 9/Stretch)
FRONTEND
Added: `onPageMessages event' -- Event that is triggered when page messages
are being generated
Added: Button to force refresh of service statuses as they are now cached
for 20 minutes
Added: iMSCP_Database::inTransaction() method
Added: Routing for languages without territory information: eg. `de' will be
routed to `de_DE' (auto-detection)
Added: Setting that allows administrator to protect/unprotect default mail
accounts against both edition and deletion
Added: Support for multiple <character-string>s in TXT/SPF DNS resource
records (Custom DNS interface)
Added: Translation resources for Zend validators
Cosmetics: Make use of the mathematical infinity symbol (∞) in place of the
`Unlimited' translation string
Deprecated: iMSCP_Database::getRawInstance() method -- will be removed in a
later release
Deprecated: Usage of customer ID field -- will be removed in a later release
Enhancement: Make use of application cache for caching of configuration data
(lifetime: indefinitely till change)
Enhancement: Make use of application cache for caching of rootkit logs
(lifetime: 24 hours)
Enhancement: Make use of application cache for caching of service statuses
(lifetime: 20 minutes)
Enhancement: Make use of Zend APC cache backend; fallback to Zend File
backend if APC extension isn't available
Enhancement: Make customers able to delete their subdomains without first
having to delete FTP and mail accounts
Enhancement: Make customers able to edit mail auto-responder message even if
the auto-responder is not activated yet
Enhancement: Make customers able to select more than one catch-all address
in catch-all addresses drop-down list
Enhancement: Make customers able to show/hide default mail accounts
Enhancement: Protect default mail accounts against change and deletion
(default)
Enhancement: Show a warning when the DEBUG mode is enabled (administrators
only)
Enhancement: Show Catch-all accounts in client mail accounts overview
interface
Fixed: Action links for FTP accounts must be hidden when they have a status
other than 'ok'
Fixed: All SQL queries must be compatible with the `ONLY_FULL_GROUP_BY' SQL
mode
Fixed: A user must not be able to clear his email address
Fixed: Couldn't edit mailbox quota due to integer type casting (i386 arch)
Fixed: Couldn't set value bigger than 2GB for mailbox quota due to integer
type casting (i386 arch)
Fixed: Couldn't generate self-signed SSL certificate (string passed as
serial number while integer is expected)
Fixed: Customers must stay able to login when their password or their main
domain are being modified
Fixed: Don't decode IDNA names in list of DNS resource records (Client UI
level)
Fixed: Erroneous ftp_group.members field (Subsequent FTP accounts members
are never added)
Fixed: Login check must be done prior triggering starting script event
Fixed: Missing creation of default `webmaster' mail account for subdomains
Fixed: PHP ini entries that belong to subdomains of an alias being removed
are not removed
Fixed: Sets the SQL `group_concat_max_len' variable on a per session basis
Fixed: Sets the SQL modes on a per session basis to 'NO_AUTO_CREATE_USER'
(backward compatibility with plugins)
Fixed: Several integer type casting issues
Fixed: Uncaught SyntaxError: missing ) after argument list (user_add2.tpl,
hosting_plan_edit.tpl -- reseller UI level)
Fixed: When an user personal email is being modified, the user identity must
be updated as well (session)
Fixed: Wrong default mail accounts accounting (missing hostmaster email,
wrong SQL queries...)
Merged: Server statistics interfaces (admin UI)
Removed: Administrator database update interface; Database update are
executed by installer
Removed: Cached versions of navigation files; Make use of application cache
instead
Removed: iMSCP_Initializer class (replaced by iMSCP\Application class)
Removed: Information about total items/limits assigned - People don't
understand their meaning (statistics)
Removed: Output compression, including related parameters -- Compression is
done at Nginx Web server level
Review: abuse, hostmaster and postmaster default mail accounts are now
forwarded to customer email
Review: Always show fully-qualified names in list of DNS resource records
(client UI level)
Review: Catchall mail accounts are now counted in mail accounts limit
Review: Default mail accounts are not longer counted for the mail accounts
limit (default)
Review: Default mail accounts are now hidden in the client mail accounts
overview interface (default)
Review: Extend Zend_Registry class instead of reinventing the wheel
Review: Hide PHP E_STRICT, E_NOTICE, ~E_USER_NOTICE, E_DEPRECATED and
E_USER_DEPRECATED on production
Review: Hide the i-MSCP update interface when Git version is in use (admin
UI level)
Review: Make use of short syntax for arrays
Review: Make use of Zend_Controller_Action_Helper_FlashMessenger for page
messages
Review: Show an explicit warning when the legacy and un-secure telnet server
is running (service statuses)
Review: Skip the intermediate edit page when mail auto-responder is being
enabled and that the message is already set
Rewritten: Add administrator interface (admin level)
Rewritten: Edit user and personal data interfaces (all UI levels)
Rewritten: Password update interface (all UI levels)
Security: Input for personal user data not filtered nor validated (all UI
levels)
INSTALLER
Enhancement: Support for APT pinning: per section and per package APT
pinning (Debian adapter)
Fixed: Don't remove unused PHP variants configuration directories; PHP
packages install INI files for all variants
Fixed: Hide notice about user/group changes (Courier)
Fixed: Missing LOGROTATE(8) configuration file for RSYSLOGD(8) (Debian
9/Stretch; Ubuntu 16.04/Xenial)
Fixed: Removal of obsolete files must be done before saving the persistent
data, else some files won't be deleted
Review: Raise GNU Wget timeout for slow DNS resolvers (Debian adapter)
Securiry: Permissions hardening - Files and folders are now copied with
UMASK(2) 027 instead of 022
PACKAGES
Fixed: Can't locate Package/FileManager/Net2FTP/Net2FTP.pm when upgrading
from some older versions (Package::FileManager)
Fixed: Missing configuration snippet for AWStats in Apache2 vhosts: Event
listener badly registered
PLUGINS
Updated: Plugin API to version 1.5.0
SCRIPTS
Removed: Explicit unlocking of locked files -- Files are automatically
unlocked
Fixed: logresolvemerge.pl: Script is broken
SERVERS
Changed: Mount courier-authdaemon rundir on var/run/courier/authdaemon
instead of private/authdaemon (Postfix/Cyrus-SASL)
Changed: The `postfix' user is now added in the `mail' group instead of the
`daemon' group (Postfix/Cyrus-SASL)
Changed: The ownership for the /var/run/courier/authdaemon directory is now
`daemon:mail' (courier-authdaemon)
Fixed: `.htgroup' and `.htpasswd' files are resetted when the main domain is
being changed (Httpd servers)
Fixed: Couldn't connect to FTP server through IPv6 (vsftpd)
Fixed: Couldn't generate /etc/courier/dhparams.pem file: Unknown security
parameter string: 2048 (Courier)
Fixed: Postfix parameters are not removed when using Regexp
(Servers::mta::postfix::postconf -- Regression fix)
Fixed: SASL authentication failure: cannot connect to courier-authdaemon:
No such file or directory (Postfix/Cyrus-SASL)
Fixed: Several warnings raised by POSTFIX(1) when files located inside its
directories are not owned by the `postfix' user (Postfix)
Fixed: Unwanted leading character in server alias names - Alternative URLs
feature (Httpd servers)
Removed: sql_mode parameter from the mysql/imscp.cnf configuration file; it
is now set on a per session basis) (SQL servers)
Review: Disallow recursive directory listing (ProFTPD)
SERVICES
Fixed: MOUNT(2) operation failures are ignored (imscp_mountall)
Review: Rotate log files on a daily basis instead of a weekly basis for
faster processing (Mail service log files)
TRANSLATIONS
Review: Make use of fuzzy entries in machine object files
VENDOR
Updated: Zend Framework libraries to version 1.12.20
YOUTRACK
IP-0749 Protected areas under a mount point of a domain alias or subdomain
that is being deleted are not removed
IP-1729 Couldn't generate self-signed SSL certificates with OpenSSL 1.1.x
IP-1730 Couldn't delete support tickets that are closed
IP-1733 Default mail accounts in client mail accounts overview should be
hidden by default
IP-1737 Circular feature - A circular must not be send twice to the same
email address
IP-1740 Empty body content when trying to create new SQL user and when SQL
users limit has been reached
--------------------------------------------------------------------------------
Older release series
--------------------------------------------------------------------------------
See ./docs/Changelog-x.x.x files
================================================
FILE: COPYING
================================================
See the following files:
docs/LICENSE-GPL2
docs/LICENSE-LGPL2.1
docs/LICENSE-MPL1.1
================================================
FILE: README.md
================================================
## i-MSCP - internet Multi Server Control Panel
i-MSCP (internet Multi Server Control Panel) is an open source software (OSS)
for shared hosting environments management on Linux servers. It comes with
a large choice of modules for various services such as Apache2, ProFTPd,
Dovecot, Courier, Bind9, and can be easily extended through plugins, or
listener files using its events-based API.
i-MSCP has been designed for professional Hosting Service Providers (HSPs),
Internet Service Providers (ISPs) and IT professionals.
### Official Site & Documentation
* [i-MSCP Site](https://i-mscp.net/)
* [i-MSCP Forums](https://i-mscp.net/index.php/BoardList/)
* [i-MSCP Documentation](https://wiki.i-mscp.net/doku.php)
### Installation instructions
* [Debian](./docs/Debian/INSTALL.md)
* [Devuan](./docs/Devuan/INSTALL.md)
* [Ubuntu](./docs/Ubuntu/INSTALL.md)
### License
Unless otherwise stated all source code is licensed under LGPL 2.1 and has the
following copyright:
```
© 2010-2020, Laurent Declercq (i-MSCP™)
All rights reserved
```
The design material and the "i-MSCP" trademark is the property of their
authors. Reuse of them without prior consent of their respective authors is
strictly prohibited.
================================================
FILE: Vagrant/README.md
================================================
# i-MSCP Vagrant box
This directory contains all you need to setup a
[Vagrant](http://www.vagrantup.com/) box with i-MSCP pre-installed.
## Requirements
- VirtualBox or (LXC and vagrant-lxc plugin)
- Vagrant ≥ 2.0.0
- vagrant-reload Vagrant plugin
- rsync
Note that the documentation below assumes the
[VirtualBox](https://www.vagrantup.com/docs/virtualbox/) Vagrant provider.
## Vagrant boxes
Vagrant boxes are pulled from [Vagrant Cloud](https://app.vagrantup.com/).
The following Vagrant boxes are made available
- Debian 9.x (Stretch): `imscp_debian_stretch` (VirtualBox, LXC)
- Debian 10.x (Buster): `imscp_debian_buster` (VirtualBox, LXC)
- Ubuntu 16.04 (Xenial Xerus): `imscp_ubuntu_xenial` (VirtualBox only)
- Ubuntu 18.04 (Bionic Beaver): `imscp_ubuntu_bionic` (VirtualBox only)
## Getting started
### Installing Vagrant
You can download latest Vagrant distribution at
[Vagrant Download](https://www.vagrantup.com/downloads.html).
### Installing vagrant-reload Vagrant plugin
You must install the `vagrant-reload` Vagrant plugin:
```shell
cd <imscp_archive_dir>/Vagrant
vagrant plugin install vagrant-reload
```
#### PhpStorm IDE
If you run Vagrant through the PhpStorm IDE, you need to install the
`vagrant-reload` plugin through PhpStorm Vagrant settings interface:
1. Go to the Settings / Tools / Vagrant settings interface
2. On the right window, select the `Plugins` tab
3. Click on the addition icon
4. Type `vagrant-reload`
5. Click on the `OK` button
6. Click on the `Apply` button at bottom
### Preseeding file
You must create an
[i-MSCP preseeding](https://wiki.i-mscp.net/doku.php?id=start:preseeding) file:
```shell
cd <imscp_archive_dir>/Vagrant
cp ../docs/preseed.pl .
nano preseed.pl
```
Be careful to fill up all mandatory parameters. If one of required parameters is
missing, provisioning of the Vagrant box will fail.
Only the following parameters are mandatory:
- `ADMIN_PASSWORD`: Master administrator password
- `DEFAULT_ADMIN_ADDRESS`: Master administrator email address
You must also fill the `SERVER_HOSTNAME` parameter as the default hostname set in
Vagrant boxes doesn't fit with i-MSCP hostname policy.
For the `SQL_ROOT_PASSWORD` parameter, it is required only if the unix_socket
authentication isn't enabled for the SQL root user.
For all other parameters, the installer will make use of default values. Please
consult the [preseed.pl](../docs/preseed.pl) template file for further details.
## Creating the Vagrant box
You can create the Vagrant box as follows:
```shell
cd <imscp_archive_dir>/Vagrant
vagrant up <vagrant_box_name>
```
where `<vagrant_box_name>` must be one of names listed in the `Vagrant boxes`
section above.
For instance, to create a `Debian Buster` Vagrant box, you must run:
```shell
cd <imscp_archive_dir>/Vagrant
vagrant up imscp_debian_Buster
```
Note that if you don't pass a name, a `Debian Stretch` Vagrant box will be
created.
## Login into Vagrant box
You can login into the newly created Vagrant box as follows:
```shell
cd <imscp_archive_dir>/Vagrant
vagrant ssh <vagrant_box_name>
sudo -s
```
## Troubleshooting
### Default keyboard layout
Default keyboard layout fits well for Americans only. Thus, if you want to
connect to your Vagrant box through a ternminal (tty) and not simply through
SSH, you could have issues due to current keyboard layout.
You can reconfigure the keyboard layout as follows:
```shell
cd <imscp_archive_dir>/Vagrant
vagrant ssh <vagrant_box_name>
sudo -s
apt-get install console-setup
dpkg-reconfigure console-setup
dpkg-reconfigure keyboard-configuration
service keyboard-setup restart
udevadm trigger --subsystem-match=input --action=change
```
Then once done, reboot the Vagrant box.
================================================
FILE: Vagrant/Vagrantfile
================================================
# i-MSCP - internet Multi Server Control Panel
# Copyright 2010-2018 by Laurent Declercq <l.declercq@nuxwin.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Vagrant.configure("2") do |config|
## Global settings
# Disable automatic box update checking.
config.vm.box_check_update = false
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network :public_network
# Rsync i-MSCP folder into /usr/local/src/imscp Vagrant box directory
config.vm.synced_folder "../.", "/usr/local/src/imscp", type: "rsync",
rsync__exclude: "Vagrant/"
## Vagrant boxes definitions
# Debian 9.x/Stretch (default if no box name passed-in to vagrant CLI)
config.vm.define 'imscp_debian_stretch', autostart: true do |node|
node.vm.box = "debian/stretch64"
# VirtualBox provider configuration
node.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id,
"--memory", "1024",
"--name", "imscp_debian_stretch",
#"--natdnshostresolver1", "on"
]
end
# LXC provider configuration
node.vm.provider :lxc do |lxc, override|
lxc.customize "cgroup.memory.limit_in_bytes", "1024M"
lxc.container_name = "imscp_debian_stretch"
override.vm.network = ""
end
end
# Debian 10.x/Buster
config.vm.define "imscp_debian_buster", autostart: false do |node|
node.vm.box = "debian/buster64"
# VirtualBox provider configuration
node.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id,
"--memory", "1024",
"--name", "imscp_debian_buster",
#"--natdnshostresolver1", "on"
]
end
# LXC provider configuration
node.vm.provider :lxc do |lxc, override|
lxc.customize "cgroup.memory.limit_in_bytes", "1024M"
lxc.container_name = "imscp_debian_buster"
override.vm.network = ""
end
end
# Ubuntu Xenial Xerus (16.04)
config.vm.define "imscp_ubuntu_xenial", autostart: false do |node|
node.vm.box = "bento/ubuntu-16.04"
# VirtualBox provider configuration
node.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id,
"--memory", "1024",
"--name", "imscp_ubuntu_xenial",
#"--natdnshostresolver1", "on"
]
end
end
# Ubuntu Bionic Beaver (18.04)
config.vm.define "imscp_ubuntu_bionic", autostart: false do |node|
node.vm.box = "bento/ubuntu-18.04"
# VirtualBox provider configuration
node.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id,
"--memory", "1024",
"--name", "imscp_ubuntu_bionic",
#"--natdnshostresolver1", "on"
]
end
end
## Vagrant box upgrade
config.vm.provision "shell" do |s|
begin
s.path = "scripts/distro_update.sh"
rescue
puts "An unexpected error occurred while upgrading the Vagrant box."
end
end
# Reboot the Vagrant box (possible kernel update)
config.vm.provision :reload
## Vagrant box provisioning (i-MSCP)
config.vm.provision "shell" do |s|
begin
s.path = "scripts/provision_imscp.sh"
rescue
puts "An unexpected error occurred while provisioning the Vagrant box with i-MSCP."
end
end
end
================================================
FILE: Vagrant/scripts/distro_update.sh
================================================
#!/bin/sh
# i-MSCP - internet Multi Server Control Panel
# Copyright 2010-2019 by Laurent Declercq <l.declercq@nuxwin.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
set -e
export DEBIAN_FRONTEND=noninteractive
export LANG=C.UTF-8
# Remove unwanted foreign i386 architecture which is enabled in
# some Vagrant boxes
dpkg --remove-architecture i386 2>/dev/null
apt-get update
apt-get --assume-yes dist-upgrade
apt-get --assume-yes install ca-certificates perl
================================================
FILE: Vagrant/scripts/provision_imscp.sh
================================================
#!/bin/sh
# i-MSCP - internet Multi Server Control Panel
# Copyright 2010-2019 by Laurent Declercq <l.declercq@nuxwin.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
set -e
# Create i-MSCP preseed file
if [ ! -f /vagrant/preseed.pl ]; then
echo "The i-MSCP preseed.pl file has not been found. Please create it first."
exit 1
fi
head -n -2 /vagrant/preseed.pl > /tmp/preseed.pl
cat <<'EOT' >> /tmp/preseed.pl
$::questions{'BASE_SERVER_IP'} = '0.0.0.0';
1;
__END__
EOT
# Execute the i-MSCP installer using preseeding file
perl /usr/local/src/imscp/imscp-autoinstall --debug --verbose --preseed /tmp/preseed.pl
================================================
FILE: autoinstaller/Adapter/AbstractAdapter.pm
================================================
=head1 NAME
autoinstaller::Adapter::AbstractAdapter - Abstract installer adapter
=cut
# i-MSCP - internet Multi Server Control Panel
# Copyright 2010-2019 by internet Multi Server Control Panel
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
package autoinstaller::Adapter::AbstractAdapter;
use strict;
use warnings;
use parent 'Common::Object';
=head1 DESCRIPTION
Abstract installer adapter
=head1 PUBLIC METHODS
=over 4
=item preinstall
Pre-installation tasks
Return int 0 on success, other on failure
=cut
sub preinstall
{
my ( $self ) = @_;
0;
}
=item preinstall
Installation tasks
Return int 0 on success, other on failure
=cut
sub install
{
my ( $self ) = @_;
0;
}
=item postinstall
Post-installation tasks
Return int 0 on success, other on failure
=cut
sub postinstall
{
my ( $self ) = @_;
0;
}
=back
=head1 Author
Laurent Declercq <l.declercq@nuxwin.com>
=cut
1;
__END__
================================================
FILE: autoinstaller/Adapter/DebianAdapter.pm
================================================
=head1 NAME
autoinstaller::Adapter::DebianAdapter - Debian installer adapter
=cut
# i-MSCP - internet Multi Server Control Panel
# Copyright 2010-2019 by Laurent Declercq <l.declercq@nuxwin.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
package autoinstaller::Adapter::DebianAdapter;
use strict;
use warnings;
use autouse 'iMSCP::Stepper' => qw/ startDetail endDetail step /;
use autoinstaller::Functions qw/
showWelcomeDialog showGitVersionWarnDialog distributionCheckDialog
prepareDistFiles writeMasterConfigFile
/;
use Class::Autouse qw/ :nostat File::HomeDir /;
use File::Basename 'dirname';
use File::Temp;
use FindBin;
use iMSCP::Boolean;
use iMSCP::Bootstrapper;
use iMSCP::Cwd '$CWD';
use iMSCP::Debug qw/ debug error output /;
use iMSCP::Dialog;
use iMSCP::Dir;
use iMSCP::EventManager;
use iMSCP::Execute qw/ execute executeNoWait /;
use iMSCP::File;
use iMSCP::Getopt;
use iMSCP::LsbRelease;
use iMSCP::ProgramFinder;
use iMSCP::Service;
use version;
use parent 'autoinstaller::Adapter::AbstractAdapter';
=head1 DESCRIPTION
Debian installer adapter
=head1 PUBLIC METHODS
=over 4
=item preinstall( )
See autoinstaller::Adapter::AbstractAdapter::preinstall()
=cut
sub preinstall
{
my ( $self ) = @_;
unless ( length $::imscpConfig{'FRONTEND_SERVER'}
&& length $::imscpConfig{'FTPD_SERVER'}
&& length $::imscpConfig{'HTTPD_SERVER'}
&& length $::imscpConfig{'NAMED_SERVER'}
&& length $::imscpConfig{'MTA_SERVER'}
&& length $::imscpConfig{'PHP_SERVER'}
&& length $::imscpConfig{'PO_SERVER'}
&& length $::imscpConfig{'SQL_SERVER'}
) {
iMSCP::Getopt->skipDistPackages( FALSE );
iMSCP::Getopt->skipComposerUpdate( FALSE );
iMSCP::Getopt->fixPermissions( TRUE );
iMSCP::Getopt->noprompt( FALSE ) unless iMSCP::Getopt->preseed;
}
unless ( iMSCP::Getopt->skipDistPackages ) {
unless ( iMSCP::ProgramFinder::find( 'debconf-apt-progress' ) ) {
print STDOUT output(
'Satisfying prerequisites... Please wait.', 'info'
);
}
my $rs = $self->_updateAptSourceList();
$rs ||= $self->_updatePackagesIndex();
return $rs if $rs;
# Make sure that the distribution is up-to-date, else inform the user
# and abort.
$rs = execute(
"/usr/bin/apt-get --simulate --assume-yes dist-upgrade | grep '^[[:digit:]]\\+ upgraded'",
\my $stdout,
\my $stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
if ( length $stdout && $stdout =~ /^(\d+)\s+upgraded/m && $1 > 0 ) {
if ( !iMSCP::Getopt->noprompt
&& iMSCP::ProgramFinder::find( 'dialog' )
) {
iMSCP::Dialog->getInstance()->error( <<"EOF" );
\\Zb\\Z1The distribution is not up-to-date\\Zn
There are distribution packages available for update.
Please update your distribution before running the i-MSCP installer.
EOF
} elsif ( iMSCP::Getopt->verbose ) {
print STDERR output( 'Your distribution is not up-to date. You need to update it first.', 'error' );
}
exit 1;
}
local @ENV{qw/ UCF_FORCE_CONFFNEW UCF_FORCE_CONFFMISS /} = (
TRUE, TRUE
);
$rs = execute(
[
( !iMSCP::Getopt->noprompt && iMSCP::ProgramFinder::find(
'debconf-apt-progress'
) ? ( 'debconf-apt-progress', '--logstderr', '--' ) : () ),
'apt-get',
'--assume-yes',
'--option', 'DPkg::Options::=--force-confnew',
'--option', 'DPkg::Options::=--force-confmiss',
'--auto-remove',
'--purge',
'--no-install-recommends',
'install', @{ delete $self->{'preRequiredPackages'} }
],
( iMSCP::Getopt->noprompt && !iMSCP::Getopt->verbose
? \$stdout : undef
),
\$stderr
);
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
};
my $dialog = iMSCP::Dialog->getInstance();
my $rs = $dialog->execute( [
\&showWelcomeDialog,
\&showGitVersionWarnDialog,
\&distributionCheckDialog,
$self->_getPackagesDialog( @_ )
] );
return $rs if $rs;
my @steps = ();
if ( iMSCP::Getopt->skipDistPackages ) {
delete $self->{'_packagesFileData'};
} else {
push @steps, (
[
sub { $self->_processPackagesFile() },
'Process packages file'
],
[
sub { $self->_prefillDebconfDatabase() },
'Pre-fill Debconf database'
],
[
sub { $self->_processAptRepositories() },
'Processing APT repositories'
],
[
sub { $self->_processAptPreferences() },
'Processing APT preferences'
],
[
sub { $self->_updatePackagesIndex() },
'Updating packages index'
],
[
sub { $self->_installPackages() },
'Installing required packages'
]
);
}
push @steps,
[ \&prepareDistFiles, 'Preparing distribution files' ],
[ \&writeMasterConfigFile, 'Writing master configuration file' ];
my ( $step, $nSteps ) = ( 1, scalar @steps );
for my $task ( @steps ) {
$rs = step( @{ $task }, $nSteps, $step );
error( 'An error occurred while the pre-installation steps.' ) if $rs;
return $rs if $rs;
$step++;
}
iMSCP::Dialog->getInstance()->endGauge();
0;
}
=item install( )
See autoinstaller::Adapter::AbstractAdapter::install()
=cut
sub install
{
my ( $self ) = @_;
require "$FindBin::Bin/engine/setup/imscp-setup-functions.pl";
# Not really the right place to do that job but we have not really choice
# because this must be done before installation of new files
my $service = iMSCP::Service->getInstance();
if ( $service->hasService( 'imscp_network' ) ) {
$service->remove( 'imscp_network' );
}
my $bootstrapper = iMSCP::Bootstrapper->getInstance();
my @runningJobs = ();
for my $job ( qw/
imscp-backup-all imscp-backup-imscp imscp-dsk-quota imscp-srv-traff
imscp-vrl-traff awstats_updateall.pl imscp-disable-accounts imscp
/ ) {
next if $bootstrapper->lock( "/var/lock/$job.lock", 'nowait' );
push @runningJobs, $job,
}
if ( @runningJobs ) {
iMSCP::Dialog->getInstance()->error( <<"EOF" );
There are jobs currently running on your system that can not be locked by the installer.
You must wait until the end of these jobs.
Running jobs are: @runningJobs
EOF
return 1;
}
undef @runningJobs;
my @steps = (
[ \&::setupInstallFiles, 'Installing distribution files' ],
[ \&::setupBoot, 'Bootstrapping installer' ],
[ \&::setupRegisterListeners, 'Registering event listeners' ],
[ \&::setupDialog, 'Processing setup dialog' ],
[ \&::setupTasks, 'Processing setup tasks' ]
);
my ( $step, $nSteps ) = ( 1, scalar @steps );
for my $task ( @steps ) {
my $rs = step( @{ $task }, $nSteps, $step );
error( 'An error occurred while the installation steps.' ) if $rs;
return $rs if $rs;
$step++;
}
iMSCP::Dialog->getInstance()->endGauge();
0;
}
=item postinstall( )
See autoinstaller::Adapter::AbstractAdapter::postinstall()
=cut
sub postinstall
{
my ( $self ) = @_;
# Delete distribution files directory
eval { iMSCP::Dir->new( dirname => $::{'INST_PREF'} )->remove(); };
if ( $@ ) {
error( $@ );
return 1;
}
0;
}
=back
=head1 PRIVATE METHODS/FUNCTIONS
=over 4
=item _init( )
Initialize instance
Return autoinstaller::Adapter::DebianAdapter
=cut
sub _init
{
my ( $self ) = @_;
@{ $self }{qw/
eventManager repositorySections preRequiredPackages
need_pbuilder_update
/} = (
iMSCP::EventManager->getInstance(),
[ 'main', 'contrib', 'non-free' ],
[
'apt-transport-https', 'binutils', 'ca-certificates',
'debconf-utils', 'dialog', 'dirmngr', 'dpkg-dev', 'gnupg',
'libbit-vector-perl', 'libclass-insideout-perl', 'libclone-perl',
'liblchown-perl', 'liblist-moreutils-perl', 'libscalar-defer-perl',
'libsort-versions-perl', 'libxml-simple-perl', 'lsb-release',
'policyrcd-script-zg2', 'wget'
],
TRUE
);
delete $ENV{'DEBCONF_FORCE_DIALOG'};
$ENV{'DEBIAN_FRONTEND'} = 'noninteractive' if iMSCP::Getopt->noprompt;
@{ENV}{qw/ DEBFULLNAME DEBEMAIL /} = (
'i-MSCP Installer', 'team@i-mscp.net'
);
$self->_setupGetAddrInfoPrecedence();
$self;
}
=item _installPackages( )
Install Debian packages
Return int 0 on success, other on failure
=cut
sub _installPackages
{
my ( $self ) = @_;
# See https://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt
my $policyrcd = File::Temp->new();
# Prevents INVOKE-RC.D(8) to start managed services
print $policyrcd <<"EOF";
#!/bin/sh
initscript=\$1
action=\$2
if [ "\$action" = "start" ] || [ "\$action" = "restart" ]; then
for i in `cat @{ [ dirname( __FILE__ ) ] }/managed_services.txt`; do
if [ "\$initscript" = "\$i" ]; then
exit 101;
fi
done
fi
EOF
$policyrcd->close();
chmod( 0750, $policyrcd->filename()) or die( sprintf(
"Couldn't change permissions on %s: %s", $policyrcd->filename(), $!
));
# See ZG-POLICY-RC.D(8)
local $ENV{'POLICYRCD'} = $policyrcd->filename();
my $rs = $self->_uninstallPackages(
$self->{'_dist'}->{'packagesToPreUninstall'}
);
$rs ||= $self->{'eventManager'}->trigger(
'beforeInstallPackages',
$self->{'_dist'}->{'packagesToInstall'},
$self->{'_dist'}->{'packagesToInstallDelayed'}
);
return $rs if $rs;
my $nPackages = scalar keys %{ $self->{'_dist'}->{'packagesPreInstallTasks'} };
my $cPackage = 1;
startDetail();
{
local $CWD = "$FindBin::Bin/autoinstaller/preinstall";
for my $package ( sort keys %{
$self->{'_dist'}->{'packagesPreInstallTasks'}
} ) {
$rs ||= step(
sub {
my $stdout;
$rs = execute(
$self->{'_dist'}->{'packagesPreInstallTasks'}->{$package},
( iMSCP::Getopt->noprompt && iMSCP::Getopt->verbose
? undef : \$stdout
),
\my $stderr
);
error( $stderr || 'Unknown' ) if $rs;
$rs;
},
sprintf(
"Executing pre-installation tasks for the '%s' package.",
$package
),
$nPackages,
$cPackage
);
last if $rs;
$cPackage++;
}
}
endDetail();
return $rs if $rs;
# Ignore exit code due to https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1258958 bug
execute(
[
'/usr/bin/apt-mark',
'unhold',
@{ $self->{'_dist'}->{'packagesToInstall'} },
@{ $self->{'_dist'}->{'packagesToInstallDelayed'} }
],
\my $stdout,
\my $stderr
);
debug( $stderr ) if $stderr;
{
iMSCP::Dialog->getInstance()->endGauge();
local $ENV{'UCF_FORCE_CONFFNEW'} = TRUE;
local $ENV{'UCF_FORCE_CONFFMISS'} = TRUE;
my @cmd = (
( !iMSCP::Getopt->noprompt
? ( 'debconf-apt-progress', '--logstderr', '--' ) : ()
),
'/usr/bin/apt-get',
'--assume-yes',
'--option', 'DPkg::Options::=--force-confnew',
'--option', 'DPkg::Options::=--force-confmiss',
'--option', 'Dpkg::Options::=--force-overwrite',
'--auto-remove',
'--purge',
'--no-install-recommends',
( version->parse(
`/usr/bin/apt-get --version` =~ /^apt\s+(\d\.\d)/
) < version->parse( '1.1' )
? '--force-yes' : '--allow-downgrades'
),
'install'
);
for my $packages ( $self->{'_dist'}->{'packagesToInstall'},
$self->{'_dist'}->{'packagesToInstallDelayed'}
) {
next unless @{ $packages };
$rs = execute(
[ @cmd, @{ $packages } ],
( iMSCP::Getopt->noprompt && !iMSCP::Getopt->verbose
? \$stdout : undef
),
\$stderr
);
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
}
}
$nPackages = scalar keys %{ $self->{'_dist'}->{'packagesPostInstallTasks'} };
$cPackage = 1;
startDetail();
{
local $CWD = "$FindBin::Bin/autoinstaller/postinstall";
for my $package (
sort keys %{ $self->{'_dist'}->{'packagesPostInstallTasks'} }
) {
$rs ||= step(
sub {
$rs = execute(
$self->{'_dist'}->{'packagesPostInstallTasks'}->{$package},
( iMSCP::Getopt->noprompt && iMSCP::Getopt->verbose
? undef : \$stdout
),
\$stderr
);
error( $stderr || 'Unknown' ) if $rs;
$rs;
},
sprintf(
"Executing post-installation tasks for the '%s' package.",
$package
),
$nPackages,
$cPackage
);
last if $rs;
$cPackage++;
}
}
endDetail();
return $rs if $rs;
while ( my ( $package, $metadata ) = each(
%{ $self->{'_dist'}->{'packagesToRebuild'} }
) ) {
$rs = $self->_rebuildAndInstallPackage(
$package,
$metadata->{'pkg_src_name'},
$metadata->{'patches_directory'},
$metadata->{'discard_patches'},
$metadata->{'patch_sys_type'}
);
return $rs if $rs;
}
$rs = $self->{'eventManager'}->trigger( 'afterInstallPackages' );
$rs || $self->_uninstallPackages();
}
=item _uninstallPackages( [ \@packagesToUninstall = $self->{'_dist'}->{'packagesToUninstall'} ] )
Uninstall Debian packages
Param array \@packagesToUninstall OPTIONAL List of packages to uninstall
Return int 0 on success, other on failure
=cut
sub _uninstallPackages
{
my ( $self, $packagesToUninstall ) = @_;
$packagesToUninstall ||= $self->{'_dist'}->{'packagesToUninstall'};
my $rs = $self->{'eventManager'}->trigger(
'beforeUninstallPackages', $packagesToUninstall
);
return $rs if $rs;
if ( @{ $packagesToUninstall } ) {
# Clear information about available packages
$rs = execute( [ '/usr/bin/dpkg', '--clear-avail' ], \my $stdout, \my $stderr );
debug( $stdout ) if length $stdout;
error( $stderr ) if $rs && length $stderr;
return $rs if $rs;
if ( @{ $packagesToUninstall } ) {
# Ignore exit code due to https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1258958 bug
execute(
[ '/usr/bin/apt-mark', 'unhold', @{ $packagesToUninstall } ],
\$stdout,
\$stderr
);
debug( $stderr ) if $stderr;
iMSCP::Dialog->getInstance()->endGauge();
$rs = execute(
[
( !iMSCP::Getopt->noprompt
? ( 'debconf-apt-progress', '--logstderr', '--' ) : ()
),
'/usr/bin/apt-get',
'--assume-yes',
'--auto-remove',
'--purge',
'--no-install-recommends',
'remove',
@{ $packagesToUninstall }
],
( iMSCP::Getopt->noprompt && !iMSCP::Getopt->verbose
? \$stdout : undef
),
\$stderr
);
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
# Purge packages that were indirectly removed
$rs = execute(
"/usr/bin/apt-get -y purge \$(dpkg -l | grep ^rc | awk '{print \$2}')",
( iMSCP::Getopt->noprompt && iMSCP::Getopt->verbose
? undef : \$stdout
),
\$stderr
);
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
}
}
$self->{'eventManager'}->trigger(
'afterUninstallPackages', $packagesToUninstall
);
}
=item _setupGetAddrInfoPrecedence( )
Setup getaddrinfo(3) precedence (IPv4) for the setup time being
Return int 0 on success, other on failure
=cut
sub _setupGetAddrInfoPrecedence
{
my $file = iMSCP::File->new( filename => '/etc/gai.conf' );
my $fileC = '';
if ( -f '/etc/gai.conf' ) {
return 1 unless defined( $fileC = $file->get() );
return 0 if $fileC =~ m%^precedence\s+::ffff:0:0/96\s+100\n%m;
}
# Prefer IPv4
$fileC .= "precedence ::ffff:0:0/96 100\n";
$file->set( $fileC );
$file->save();
}
=item _updateAptSourceList( )
Add required sections to repositories that support them
Note: Also enable source repositories for the sections when available.
TODO: Implement better check by parsing apt-cache policy output
Return int 0 on success, other on failure
=cut
sub _updateAptSourceList
{
my ( $self ) = @_;
my $file = iMSCP::File->new( filename => '/etc/apt/sources.list' );
my $fileC = $file->get();
for my $section ( @{ $self->{'repositorySections'} } ) {
my @seenRepositories = ();
my $foundSection = 0;
while ( $fileC =~ /^deb\s+(?<uri>(?:https?|ftp)[^\s]+)\s+(?<dist>[^\s]+)\s+(?<components>.+)$/gm ) {
my $rf = $&;
my %rc = %+;
next if grep ($_ eq "$rc{'uri'} $rc{'dist'}", @seenRepositories);
push @seenRepositories, "$rc{'uri'} $rc{'dist'}";
if ( $fileC !~ /^deb\s+$rc{'uri'}\s+$rc{'dist'}\s+.*\b$section\b/m ) {
my $rs = execute(
[
'/usr/bin/wget',
'--prefer-family=IPv4',
'--timeout=30',
'--spider',
"$rc{'uri'}/dists/$rc{'dist'}/$section/"
=~ s{([^:])//}{$1/}gr
],
\my $stdout,
\my $stderr
);
debug( $stdout ) if length $stdout;
debug( $stderr || 'Unknown error' ) if $rs && $rs != 8;
next if $rs; # Don't check for source archive when binary archive has not been found
$foundSection = TRUE;
$fileC =~ s/^($rf)$/$1 $section/m;
$rf .= " $section";
} else {
$foundSection = 1;
}
if ( $foundSection
&& $fileC !~ /^deb-src\s+$rc{'uri'}\s+$rc{'dist'}\s+.*\b$section\b/m
) {
my $rs = execute(
[
'/usr/bin/wget',
'--prefer-family=IPv4',
'--timeout=30',
'--spider',
"$rc{'uri'}/dists/$rc{'dist'}/$section/source/"
=~ s{([^:])//}{$1/}gr
],
\my $stdout,
\my $stderr
);
debug( $stdout ) if length $stdout;
debug( $stderr || 'Unknown error' ) if $rs && $rs != 8;
unless ( $rs ) {
if ( $fileC !~ /^deb-src\s+$rc{'uri'}\s+$rc{'dist'}\s.*/m ) {
$fileC =~ s/^($rf)/$1\ndeb-src $rc{'uri'} $rc{'dist'} $section/m;
} else {
$fileC =~ s/^($&)$/$1 $section/m;
}
}
}
}
unless ( $foundSection ) {
error( sprintf(
"Couldn't find any repository supporting %s section",
$section
));
return 1;
}
}
$file->set( $fileC );
$file->save();
}
=item _processAptRepositories( )
Process APT repositories
Return int 0 on success, other on failure
=cut
sub _processAptRepositories
{
my ( $self ) = @_;
return 0 unless @{ $self->{'_dist'}->{'aptRepositoriesToRemove'} }
|| @{ $self->{'_dist'}->{'aptRepositoriesToAdd'} };
my $file = iMSCP::File->new( filename => '/etc/apt/sources.list' );
my $rs = $file->copyFile( '/etc/apt/sources.list.bkp' );
return $rs if $rs;
return 1 unless defined( my $fileC = $file->get() );
# Cleanup APT sources.list file
for my $repository (
@{ $self->{'_dist'}->{'aptRepositoriesToRemove'} },
@{ $self->{'_dist'}->{'aptRepositoriesToAdd'} }
) {
my $escapedRepository = ref $repository eq 'HASH'
? $repository->{'repository'} : $repository;
$fileC =~ s/^\n?(?:#\s*)?deb(?:-src)?\s+\Q$escapedRepository\E.*?\n//gm;
}
# Add APT repositories
for my $repository ( @{ $self->{'_dist'}->{'aptRepositoriesToAdd'} } ) {
next if $fileC =~ /^deb\s+$repository->{'repository'}/m;
$fileC .= <<"EOF";
deb $repository->{'repository'}
deb-src $repository->{'repository'}
EOF
# Hide "apt-key output should not be parsed (stdout is not a terminal)"
# warning that is raised in newest apt-key versions. Our usage of
# apt-key is not dangerous (not parsing)
local $ENV{'APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE'} = TRUE;
if ( $repository->{'repository_key_srv'}
&& $repository->{'repository_key_id'}
) {
# Add the repository key from the given key server
$rs = execute(
[
'/usr/bin/apt-key',
'adv',
'--recv-keys',
'--keyserver', $repository->{'repository_key_srv'},
$repository->{'repository_key_id'}
],
\my $stdout,
\my $stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
# Workaround https://bugs.launchpad.net/ubuntu/+source/gnupg2/+bug/1633754
execute(
[ '/usr/bin/pkill', '-TERM', 'dirmngr' ],
\$stdout,
\$stderr
);
} elsif ( $repository->{'repository_key_uri'} ) {
# Add the repository key by fetching it first from the given URI
my $keyFile = File::Temp->new();
$keyFile->close();
$rs = execute(
[
'/usr/bin/wget',
'--prefer-family=IPv4',
'--timeout=30',
'-O',
$keyFile->filename(),
$repository->{'repository_key_uri'}
],
\my $stdout,
\my $stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
$rs ||= execute(
[ '/usr/bin/apt-key', 'add', $keyFile ],
\$stdout,
\$stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
}
}
$file->set( $fileC );
$file->save();
}
=item _processAptPreferences( )
Process apt preferences
Return 0 on success, other on failure
=cut
sub _processAptPreferences
{
my ( $self ) = @_;
my $fileC;
for my $pref ( @{ $self->{'_dist'}->{'aptPreferences'} } ) {
unless ( $pref->{'pinning_pin'} || $pref->{'pinning_pin_priority'} ) {
error( 'Missing APT pinning attribute in packages file' );
return 1;
}
$fileC .= <<"EOF";
Package: $pref->{'pinning_package'}
Pin: $pref->{'pinning_pin'}
Pin-Priority: $pref->{'pinning_pin_priority'}
EOF
}
my $file = iMSCP::File->new( filename => '/etc/apt/preferences.d/imscp' );
if ( length $fileC ) {
$fileC =~ s/^\n//;
$file->set( $fileC );
my $rs = $file->save();
$rs ||= $file->mode( 0644 );
return $rs;
}
-f '/etc/apt/preferences.d/imscp' ? $file->delFile() : 0;
}
=item _updatePackagesIndex( )
Update Debian packages index
Return int 0 on success, other on failure
=cut
sub _updatePackagesIndex
{
iMSCP::Dialog->getInstance()->endGauge();
my $stdout;
my $rs = execute(
[
( iMSCP::Getopt->noprompt
? () : ( 'debconf-apt-progress', '--logstderr', '--' )
),
'/usr/bin/apt-get',
'update'
],
( iMSCP::Getopt->noprompt && !iMSCP::Getopt->verbose
? \$stdout : undef
),
\my $stderr
);
error( $stderr || 'Unknown error' ) if $rs;
$rs
}
=item _getPackagesDialog( $dialog )
Return dialog for distribution packages
This method need to be called, even if the '--skip-dist-packages' command line
option has been passed-in. Not doing this would lead to unset values in the
%::questions hash.
Param iMSCP::Dialog $dialog
Return List of dialog subroutines, die on failure
=cut
sub _getPackagesDialog
{
my ( $self ) = @_;
my @dialogStack;
my $rs = $self->{'eventManager'}->trigger(
'onLoadPackagesFile', \my $packagesFilePath
);
return $rs if $rs;
require XML::Simple;
$self->{'_packagesFileData'} = XML::Simple->new( NoEscape => TRUE )->XMLin(
$packagesFilePath //= "$FindBin::Bin/autoinstaller/Packages/"
. "$::imscpConfig{'DISTRO_ID'}-$::imscpConfig{'DISTRO_CODENAME'}.xml",
ForceArray => [ 'package', 'package_delayed', 'package_conflict' ],
NormaliseSpace => 2
);
my $arch = `/usr/bin/dpkg-architecture -qDEB_HOST_ARCH 2>/dev/null`;
die "Couldn't determine OS architecture" if $? >> 8 != 0 || !$arch;
for my $section ( sort %{ $self->{'_packagesFileData'} } ) {
my $data = $self->{'_packagesFileData'}->{$section};
next unless $data->{'has_alternatives'};
# Retrieve selected alternative, either from preseed file, or from
# the master configuration file
my $sAlt = length $::questions{ uc( $section ) . '_SERVER' }
# Covers preseeding case
? $::questions{ uc( $section ) . '_SERVER' }
# Covers update case
: $::imscpConfig{ uc( $section ) . '_SERVER' };
# Reset alternative if the current one is not available
$sAlt = '' if length $sAlt && !grep ( $sAlt eq $_, keys %{ $data } );
# Filter incompatible alternatives
my @alts = grep {
ref $data->{$_} eq 'HASH'
&& ( !defined $data->{$_}->{'required_arch'}
|| $arch eq $data->{$_}->{'required_arch'}
)
&& ( $section ne 'sql'
|| !length $sAlt
|| $sAlt eq $_
|| !defined $data->{$_}->{'allow_upgrade_from'}
|| grep { $sAlt eq $_ } split ',',
$data->{$_}->{'allow_upgrade_from'}
)
} keys %{ $data };
# Whether or not user must be asked for alternative
my $needDialog = !length $sAlt || grep (
$_ eq iMSCP::Getopt->reconfigure, $section, 'servers', 'all'
);
if ( $section eq 'sql' ) {
$::questions{'KEEP_LOCAL_SQL_SERVER'} //=
$::imscpConfig{'KEEP_LOCAL_SQL_SERVER'};
if( $sAlt ne 'remote_server'
|| !length $::questions{'KEEP_LOCAL_SQL_SERVER'}
|| !iMSCP::Getopt->preseed
) {
$::questions{'KEEP_LOCAL_SQL_SERVER'} = 'yes';
}
$needDialog = TRUE unless grep (
$::questions{'KEEP_LOCAL_SQL_SERVER'}, qw/ yes no /
);
}
my %choices;
for my $alt ( @alts ) {
$choices{ $data->{$alt}->{'description'} // $alt } = $alt;
# If no alternative is set, either in the master configuration file
# or in the preseed file (preseeding feature), and if the current
# one is set as the default one in the distribution packages file,
# we set it as default selected alternative.
if ( !length $sAlt && $data->{$alt}->{'default'} ) {
$sAlt = $alt;
# We don't show setup dialog, unless the user asked for
# reconfiguration
$needDialog = grep (
$_ eq iMSCP::Getopt->reconfigure, 'all', 'servers', $section
);
}
}
# If no alternative is set, that means that the distribution packages
# file doesn't define one... In such case, we select the first
# alternative.
$sAlt = $alts[0] unless length $sAlt;
@{main::questions}{
uc( $section ) . '_SERVER', uc( $section ) . '_PACKAGE'
} = (
$sAlt, $data->{$sAlt}->{'class'} // $sAlt
);
# If a dialog is needed, prepare it, unless there is only one
# alternative available.
if ( $needDialog && keys %{choices} > 1 ) {
push @dialogStack, sub {
my ( $ret, $value ) = $_[0]->select(
<<"EOF", \%choices, $::questions{ uc( $section ) . '_SERVER' } );
Please make your choice for the @{ [ $data->{'description'} // "$section alternative" ] }:
EOF
return 30 if $ret == 30;
@{main::questions}{
uc( $section ) . '_SERVER', uc( $section ) . '_PACKAGE'
} = (
$value, $data->{$value}->{'class'} // $value
);
0;
};
if ( $section eq 'sql' ) {
push @dialogStack, sub {
if ( $::questions{'SQL_SERVER'} ne 'remote_server'
|| !iMSCP::ProgramFinder::find( 'mysqld' )
) {
$::questions{'KEEP_LOCAL_SQL_SERVER'} = 'yes';
return 20;
}
my $ret = $_[0]->boolean( <<'EOF', $::questions{'KEEP_LOCAL_SQL_SERVER'} eq 'no' );
The installer detected that there is already a local SQL server installed on your system.
Do you want to keep your local SQL server? If yes, the installer will ignore it instead of removing packages.
EOF
return 30 if $ret == 30;
$::questions{'KEEP_LOCAL_SQL_SERVER'} = $ret ? 'no' : 'yes';
0;
}
}
}
}
return @dialogStack unless @dialogStack;
push @dialogStack, sub {
# Override default button labels
local @{ $_[0]->{'_opts'} }{
$_[0]->{'program'} eq 'dialog'
? qw/ ok-label extra-label /
: qw/ yes-button no-button /
} = qw/ Continue Abort /;
my $ret = $_[0]->boolean( <<"EOF" );
The following @{ [
grep( $_ eq iMSCP::Getopt->reconfigure, qw/ none servers all / )
? 'alternatives were selected'
: 'alternative has been selected'
] }:
@{ [
join "\n", sort map {
" - $self->{'_packagesFileData'}->{$_}->{ $::questions{ uc( $_ ) . '_SERVER' }}->{'description'}".
(
$_ eq 'sql'
&& $::questions{ uc( $_ ) . '_SERVER' } eq 'remote_server'
&& iMSCP::ProgramFinder::find('mysqld')
? ( ' (the local SQL server ' . (
$::questions{'KEEP_LOCAL_SQL_SERVER'} eq 'yes'
? 'will not be uninstalled)' : 'will be uninstalled)'
))
: ''
)
} grep {
exists $::questions{ uc( $_ ) . '_SERVER' }
&& grep( $_ eq iMSCP::Getopt->reconfigure, 'none', 'servers', 'all', $_ )
} keys %{ $self->{'_packagesFileData'} }
] }
This is your last chance to abort or go back before processing of distribution packages.
EOF
return 30 if $ret == 30;
return 50 if $ret == 1;
0;
};
@dialogStack;
}
=item _processPackagesFile( )
Process packages file data
Retur int 0 on success, other on failure
=cut
sub _processPackagesFile
{
my ( $self ) = @_;
@{ $self->{'_dist'} }{qw/
aptRepositoriesToRemove aptRepositoriesToAdd aptPreferences
packagesToInstall packagesToInstallDelayed packagesToPreUninstall
packagesToUninstall packagesToRebuild packagesPreInstallTasks
packagesPostInstallTasks
/} = (
[], [], [], [], [], [], [], {}, {}, {}
);
my $packagesFileData = delete $self->{'_packagesFileData'};
while ( my ( $section, $data ) = each( %{ $packagesFileData } ) ) {
# If the remote SQL server alternative has been selected, and if there
# is a local server that the user want keep, we simply ignore the SQL
# section.
if ( $section eq 'sql'
&& $::questions{'SQL_SERVER'} eq 'remote_server'
&& $::questions{'KEEP_LOCAL_SQL_SERVER'} eq 'yes'
&& iMSCP::ProgramFinder::find( 'mysqld' )
) {
next;
}
# Packages to install
if ( defined $data->{'package'} ) {
for my $package ( @{ $data->{'package'} } ) {
$self->_parsePackageNode(
$package, $self->{'_dist'}->{'packagesToInstall'}
);
}
}
# Packages to install (delayed)
if ( defined $data->{'package_delayed'} ) {
for my $package ( @{ $data->{'package_delayed'} } ) {
$self->_parsePackageNode(
$package, $self->{'_dist'}->{'packagesToInstallDelayed'}
);
}
}
# Conflicting packages to pre-remove
if ( defined $data->{'package_conflict'} ) {
for my $package ( @{ $data->{'package_conflict'} } ) {
push @{ $self->{'_dist'}->{'packagesToPreUninstall'} },
ref $package eq 'HASH' ? $package->{'content'} : $package;
}
}
# APT repository
if ( defined $data->{'repository'} ) {
push @{ $self->{'_dist'}->{'aptRepositoriesToAdd'} }, {
repository => $data->{'repository'},
repository_key_uri => $data->{'repository_key_uri'},
repository_key_id => $data->{'repository_key_id'},
repository_key_srv => $data->{'repository_key_srv'}
};
}
# APT preferences (pinning)
if ( defined $data->{'pinning_package'} ) {
push @{ $self->{'_dist'}->{'aptPreferences'} }, {
pinning_package => $data->{'pinning_package'},
pinning_pin => $data->{'pinning_pin'},
pinning_pin_priority => $data->{'pinning_pin_priority'},
};
}
# Conflicting APT repositories to remove
if ( defined $data->{'repository_conflict'} ) {
push @{ $self->{'_dist'}->{'aptRepositoriesToRemove'} },
$data->{'repository_conflict'}
}
# Delete data already processed
delete @{ $data }{
qw/ package package_delayed package_conflict
pinning_package pinning_pin pinning_pin_priority
repository repository_key_uri repository_key_id
repository_key_srv fallback_repository
fallback_repository_key_uri fallback_repository_key_id
fallback_repository_key_srv repository_conflict
/
};
# Jump to next section, unless the section defines alternatives
next unless %{ $data };
my @selectedAlts = $::questions{ uc( $section ) . '_SERVER' };
my @unselectedAlts;
# Adds any alternative that must be always installed into the stack of
# selected alternatives
for my $alt ( keys %{ $data } ) {
next if ref $data->{$alt} ne 'HASH'
|| $alt eq $::questions{ uc( $section ) . '_SERVER' };
if ( $data->{$alt}->{'always_installed'} ) {
push @selectedAlts, $alt;
next;
}
push @unselectedAlts, $alt;
}
# Process stack of selected alternatives
for my $selectedAlt ( @selectedAlts ) {
# Packages to install for the selected alternative
if ( defined $data->{$selectedAlt}->{'package'} ) {
for my $package ( @{ $data->{$selectedAlt}->{'package'} } ) {
$self->_parsePackageNode(
$package, $self->{'_dist'}->{'packagesToInstall'}
);
}
}
# Package to install (delayed)
if ( defined $data->{$selectedAlt}->{'package_delayed'} ) {
for my $package ( @{ $data->{$selectedAlt}->{'package_delayed'} } ) {
$self->_parsePackageNode(
$package, $self->{'_dist'}->{'packagesToInstallDelayed'}
);
}
}
# Conflicting packages that must be pre-removed
if ( defined $data->{$selectedAlt}->{'package_conflict'} ) {
for my $package ( @{ $data->{$selectedAlt}->{'package_conflict'} } ) {
push @{ $self->{'_dist'}->{'packagesToPreUninstall'} }, ref $package eq 'HASH'
? $package->{'content'} : $package;
}
}
# APT preferences (pinning)
if ( defined $data->{$selectedAlt}->{'pinning_package'} ) {
push @{ $self->{'_dist'}->{'aptPreferences'} }, {
pinning_package => $data->{$selectedAlt}->{'pinning_package'},
pinning_pin => $data->{$selectedAlt}->{'pinning_pin'},
pinning_pin_priority => $data->{$selectedAlt}->{'pinning_pin_priority'},
};
}
# APT repository
if ( defined $data->{$selectedAlt}->{'repository'} ) {
push @{ $self->{'_dist'}->{'aptRepositoriesToAdd'} }, {
repository => $data->{$selectedAlt}->{'repository'},
repository_key_uri => $data->{$selectedAlt}->{'repository_key_uri'},
repository_key_id => $data->{$selectedAlt}->{'repository_key_id'},
repository_key_srv => $data->{$selectedAlt}->{'repository_key_srv'}
};
}
# Conflicting APT repositories to remove
if ( defined $data->{$selectedAlt}->{'repository_conflict'} ) {
push @{ $self->{'_dist'}->{'aptRepositoriesToRemove'} },
$data->{$selectedAlt}->{'repository_conflict'}
}
}
# Schedule removal of APT repositories and packages that belongs to
# unselected alternatives, unless keep_installed flag is set
my @packagesToInstall = (
@{ $self->{'_dist'}->{'packagesToInstall'} },
@{ $self->{'_dist'}->{'packagesToInstallDelayed'} },
keys %{ $self->{'_dist'}->{'packagesToRebuild'} }
);
for my $unselected ( @unselectedAlts ) {
next if ref $data->{$unselected} ne 'HASH'
|| $data->{$unselected}->{'keep_installed'};
# APT repositories to remove
for my $repository ( qw/ repository repository_conflict / ) {
next unless defined $data->{$unselected}->{$repository};
push @{ $self->{'_dist'}->{'aptRepositoriesToRemove'} },
$data->{$unselected}->{$repository};
}
# Packages to uninstall
for my $node ( qw/ package package_delayed / ) {
next unless defined $data->{$unselected}->{$node};
for my $package ( @{ $data->{$unselected}->{$node} } ) {
$package = ref $package eq 'HASH'
? $package->{'content'} : $package;
next if grep ($package eq $_, @packagesToInstall);
push @{ $self->{'_dist'}->{'packagesToUninstall'} }, $package;
}
}
}
}
require List::MoreUtils;
List::MoreUtils->import( 'uniq' );
for my $packages ( qw/
packagesToPreUninstall packagesToUninstall
packagesToInstall packagesToInstallDelayed
/ ) {
@{ $self->{'_dist'}->{$packages} } = sort { $a cmp $b } uniq(
@{ $self->{'_dist'}->{$packages} }
);
}
# Filter packages that are no longer available
my $rs = execute(
[ '/usr/bin/apt-cache', '--generate', 'pkgnames' ],
\my $stdout,
\my $stderr
);
error( $stderr || 'Unknown error' ) if $rs > 2;
return $rs if $rs;
my %availablePackages;
@availablePackages{split /\n/, $stdout} = undef;
undef $stdout;
for my $packages (
$self->{'_dist'}->{'packagesToPreUninstall'},
$self->{'_dist'}->{'packagesToUninstall'}
) {
@{ $packages } = grep (
exists $availablePackages{$_}, @{ $packages }
);
}
iMSCP::Dialog->getInstance()->endGauge();
0;
}
=item _parsePackageNode( \%node|$node, \@target )
Parse a package or package_delayed node
param string|hashref $node Package node
param arrayref \@target Target
Return void
=cut
sub _parsePackageNode
{
my ( $self, $node, $target ) = @_;
unless ( ref $node eq 'HASH' ) {
# Package without further treatment
push @{ $target }, $node;
return;
}
# Package to rebuild
if ( $node->{'rebuild_with_patches'} ) {
$self->{'_dist'}->{'packagesToRebuild'}->{$node->{'content'}} = {
pkg_src_name => $node->{'pkg_src_name'} || $node->{'content'},
patches_directory => $node->{'rebuild_with_patches'},
discard_patches => [ $node->{'discard_patches'}
? split ',', $node->{'discard_patches'} : ()
],
patch_sys_type => $node->{'patch_sys_type'} || 'quilt'
};
} else {
push @{ $target }, $node->{'content'};
}
# Package pre-installation tasks
if ( defined $node->{'pre_install_tasks'} ) {
$self->{'_dist'}->{'packagesPreInstallTasks'}->{$node->{'content'}}
= $node->{'pre_install_tasks'}
}
# Package post-installation tasks
if ( defined $node->{'post_install_tasks'} ) {
$self->{'_dist'}->{'packagesPostInstallTasks'}->{$node->{'content'}}
= $node->{'post_install_tasks'}
}
# Per package APT pinning
if ( defined $node->{'pinning_package'} ) {
push @{ $self->{'_dist'}->{'aptPreferences'} }, {
pinning_package => $node->{'pinning_package'},
pinning_pin => $node->{'pinning_pin'},
pinning_pin_priority => $node->{'pinning_pin_priority'}
};
}
}
=item _prefillDebconfDatabase( )
Pre-fill debconf database
Return int 0 on success, other on failure
=cut
sub _prefillDebconfDatabase
{
my ( $self ) = @_;
my $fileC;
# Pre-fill questions for Postfix SMTP server if required
if ( $::questions{'MTA_PACKAGE'} eq 'Servers::mta::postfix' ) {
chomp( my $mailname = `/usr/bin/hostname --fqdn 2>/dev/null` || 'localdomain' );
my $hostname = ( $mailname ne 'localdomain' ) ? $mailname : 'localhost';
chomp( my $domain = `/usr/bin/hostname --domain 2>/dev/null` || 'localdomain' );
# From postfix package postfix.config script
my $destinations = ( $mailname eq $hostname )
? join ', ', ( $mailname, 'localhost.' . $domain, ', localhost' )
: join ', ', ( $mailname, $hostname,
'localhost.' . $domain . ', localhost'
);
$fileC .= <<"EOF";
postfix postfix/main_mailer_type select Internet Site
postfix postfix/mailname string $mailname
postfix postfix/destinations string $destinations
EOF
}
# Pre-fill question for Proftpd FTP server if required
if ( $::questions{'FTPD_PACKAGE'} eq 'Servers::ftpd::proftpd' ) {
$fileC .= <<'EOF';
proftpd-basic shared/proftpd/inetd_or_standalone select standalone
EOF
}
# Pre-fill questions for Courier IMAP/POP server if required
if ( $::questions{'PO_PACKAGE'} eq 'Servers::po::courier' ) {
$fileC .= <<'EOF';
courier-base courier-base/courier-user note
courier-base courier-base/webadmin-configmode boolean false
courier-ssl courier-ssl/certnotice note
EOF
}
# Pre-fill questions for Dovecot IMAP/POP server if required
if ( $::questions{'PO_PACKAGE'} eq 'Servers::po::dovecot' ) {
$fileC .= <<'EOF';
dovecot-core dovecot-core/create-ssl-cert boolean true
dovecot-core dovecot-core/ssl-cert-name string localhost
EOF
}
# Pre-fill question for sasl2-bin package if required
if ( `echo GET cyrus-sasl2/purge-sasldb2 | debconf-communicate sasl2-bin 2>/dev/null` =~ /^0/ ) {
$fileC .= <<'EOF'
sasl2-bin cyrus-sasl2/purge-sasldb2 boolean true
EOF
}
# Pre-fill questions for the QL server (MySQL, MariaDB or Percona) if
# required
if ( my ( $sqlServerVendor, $sqlServerVersion )
= $::questions{'SQL_SERVER'} =~ /^(mysql|mariadb|percona)_(\d+\.\d+)/
) {
if ( $::imscpConfig{'DATABASE_PASSWORD'} ne ''
&& -d $::imscpConfig{'DATABASE_DIR'}
) {
# Only show critical questions
$ENV{'DEBIAN_PRIORITY'} = 'critical';
# Allow switching to other vendor (e.g: MariaDB 10.0 to MySQL >= 5.6)
# unlink glob "$::imscpConfig{'DATABASE_DIR'}/debian-*.flag";
# Don't show SQL root password dialog from package maintainer script
# when switching to another vendor or a newest version
# <DATABASE_DIR>/debian-5.0.flag is the file checked by maintainer script
my $rs = iMSCP::File->new(
filename => "$::imscpConfig{'DATABASE_DIR'}/debian-5.0.flag"
)->save();
return $rs if $rs;
}
my ( $qOwner, $qNamePrefix );
if ( $sqlServerVendor eq 'mysql' ) {
if ( grep ($_ eq 'mysql-community-server',
@{ $self->{'packagesToInstall'} }
) ) {
$qOwner = 'mysql-community-server';
$qNamePrefix = 'mysql-community-server';
} else {
$qOwner = 'mysql-server-' . $sqlServerVersion;
$qNamePrefix = 'mysql-server';
}
} elsif ( $sqlServerVendor eq 'mariadb' ) {
$qOwner = 'mariadb-server-' . $sqlServerVersion;
$qNamePrefix = 'mysql-server';
} else {
$qOwner = 'percona-server-server-' . $sqlServerVersion;
$qNamePrefix = 'percona-server-server';
}
# We do not want ask user for <DATABASE_DIR> removal (we want avoid
# mistakes as much as possible)
$fileC .= <<"EOF";
$qOwner $qNamePrefix/remove-data-dir boolean false
$qOwner $qNamePrefix/postrm_remove_databases boolean false
EOF
# Preset root SQL password using value from preseed file if required
if ( iMSCP::Getopt->preseed && length $::questions{'SQL_ROOT_PASSWORD'} ) {
$fileC .= <<"EOF";
$qOwner $qNamePrefix/root_password password $::questions{'SQL_ROOT_PASSWORD'}
$qOwner $qNamePrefix/root-pass password $::questions{'SQL_ROOT_PASSWORD'}
$qOwner $qNamePrefix/root_password_again password $::questions{'SQL_ROOT_PASSWORD'}
$qOwner $qNamePrefix/re-root-pass password $::questions{'SQL_ROOT_PASSWORD'}
EOF
# Register an event listener to empty the password fields in
# Debconf database after package installation
$self->{'eventManager'}->register(
'beforeInstall',
sub {
for my $entry ( qw/
root_password root-pass root_password_again
re-root-pass
/ ) {
my $rs = execute(
"echo SET $qNamePrefix/$entry | /usr/bin/debconf-communicate $qOwner",
\my $stdout,
\my $stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
}
0;
}
);
}
}
return 0 unless length $fileC;
my $debconfSelectionsFile = File::Temp->new();
print $debconfSelectionsFile $fileC;
$debconfSelectionsFile->close();
my $rs = execute(
[
'/usr/bin/debconf-set-selections',
$debconfSelectionsFile->filename()
],
\my $stdout,
\my $stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || "Couldn't pre-fill Debconf database" ) if $rs;
$rs;
}
=item _rebuildAndInstallPackage( $pkg, $pkgSrc, $patchesDir [, $patchesToDiscard = [] [, $patchFormat = 'quilt' ] ] )
Rebuild the given Debian package using patches from given directory and
install the resulting local Debian package
Note: It is assumed that the Debian source package is dpatch or quilt
ready.
Param string $pkg Name of package to rebuild
Param string $pkgSrc Name of source package
Param string $patchDir Directory containing set of patches to apply on Debian
package source
param arrayref $patcheqToDiscad OPTIONAL List of patches to discard
Param string $patchFormat OPTIONAL Patch format (quilt|dpatch) - Default quilt
Return 0 on success, other on failure
=cut
sub _rebuildAndInstallPackage
{
my ( $self, $pkg, $pkgSrc, $patchesDir, $patchesToDiscard, $patchFormat ) = @_;
$patchesDir ||= "$pkg/patches";
$patchesToDiscard ||= [];
$patchFormat ||= 'quilt';
unless ( defined $pkg ) {
error( '$pkg parameter is not defined' );
return 1;
}
unless ( defined $pkgSrc ) {
error( '$pkgSrc parameter is not defined' );
return 1;
}
unless ( $patchFormat =~ /^(?:quilt|dpatch)$/ ) {
error( 'Unsupported patch format.' );
return 1;
}
$patchesDir = "$FindBin::Bin/configs/$::imscpConfig{'DISTRO_ID'}/$patchesDir";
unless ( -d $patchesDir ) {
error( sprintf( '%s is not a valid patches directory', $patchesDir ));
return 1;
}
my $srcDownloadDir = File::Temp->newdir( CLEANUP => TRUE );
# Fix 'W: Download is performed un-sandboxed as root as file...' warning
# with newest APT versions
if ( my $uid = ( getpwnam( '_apt' ) )[2] ) {
unless ( chown $uid, -1, $srcDownloadDir ) {
error( sprintf(
"Couldn't change ownership for the %s directory: %s",
$srcDownloadDir,
$!
));
return 1;
}
}
# chdir() into download directory
local $CWD = $srcDownloadDir;
# Avoid pbuilder warning due to missing $HOME/.pbuilderrc file
my $rs = iMSCP::File->new(
filename => File::HomeDir->my_home . '/.pbuilderrc'
)->save();
return $rs if $rs;
startDetail();
$rs = step(
sub {
if ( $self->{'need_pbuilder_update'} ) {
$self->{'need_pbuilder_update'} = FALSE;
my $stderr = '';
my $cmd = [
'/usr/sbin/pbuilder',
( -f '/var/cache/pbuilder/base.tgz' ?
( '--update', '--autocleanaptcache' )
: '--create'
),
'--distribution', ::imscpConfig { 'DISTRO_CODENAME' },
'--configfile', "$FindBin::Bin/configs/$::imscpConfig{'DISTRO_ID'}"
. '/pbuilder/pbuilderrc',
'--override-config'
];
$rs = executeNoWait(
$cmd,
( iMSCP::Getopt->noprompt && iMSCP::Getopt->verbose
? undef
: sub {
chomp( $_[0] );
return unless $_[0] =~ /^i:\s*(.*)/i;
step( undef, <<"EOF", 5, 1 );
"Creating/Updating pbuilder environment
- @{ [ ucfirst( $1 ) ] }
Please be patient. This may take few minutes...
EOF
}
),
sub { $stderr .= $_[0]; }
);
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
}
0;
},
'Creating/Updating pbuilder environment', 5, 1
);
$rs ||= step(
sub {
my $stderr = '';
$rs = executeNoWait(
[ '/usr/bin/apt-get', '-y', 'source', $pkgSrc ],
( iMSCP::Getopt->noprompt && iMSCP::Getopt->verbose
? undef : sub {
chomp( $_[0] );
step( undef, <<"EOF", 5, 2 );
Downloading $pkgSrc $::imscpConfig{'DISTRO_ID'} source package
- @{ [ $_[0] =~ s/^\s*//r ] }
Depending on your system this may take few seconds...
EOF
} ),
sub { $stderr .= $_[0] }
);
error( $stderr || 'Unknown error' ) if $rs;
$rs;
},
sprintf(
'Downloading %s %s source package',
$pkgSrc,
$::imscpConfig{'DISTRO_ID'}
),
5,
2
);
{
# chdir() into package source directory
local $CWD = ( <$pkgSrc-*> )[0];
$rs ||= step(
sub {
my $serieFile = iMSCP::File->new(
filename => 'debian/patches/'
. ( $patchFormat eq 'quilt' ? 'series' : '00list'
));
return 1 unless defined( my $serieFileC = $serieFile->get() );
for my $patch ( sort { $a cmp $b } iMSCP::Dir->new(
dirname => $patchesDir )->getFiles()
) {
next if grep ($_ eq $patch, @{ $patchesToDiscard });
$serieFileC .= "$patch\n";
$rs = iMSCP::File->new(
filename => "$patchesDir/$patch"
)->copyFile(
"debian/patches/$patch", { preserve => 'no' }
);
return $rs if $rs;
}
$rs = $serieFile->set( $serieFileC );
$rs ||= $serieFile->save();
return $rs if $rs;
my $stderr;
$rs = execute(
[
'/usr/bin/dch',
'--local',
'~i-mscp-',
'Patched by i-MSCP installer for compatibility.'
],
( iMSCP::Getopt->noprompt && iMSCP::Getopt->verbose
? undef : \my $stdout
),
\$stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
},
sprintf(
'Patching %s %s source package...',
$pkgSrc,
$::imscpConfig{'DISTRO_ID'}
),
5,
3
);
$rs ||= step(
sub {
my $stderr;
$rs = executeNoWait(
[
'/usr/bin/pdebuild',
'--use-pdebuild-internal',
'--configfile', "$FindBin::Bin/configs/"
. "$::imscpConfig{'DISTRO_ID'}/pbuilder/pbuilderrc"
],
( iMSCP::Getopt->noprompt && iMSCP::Getopt->verbose
? undef : sub {
return unless $_[0] =~ /^i:\s*(.*)/i;
chomp( $_[0] );
step( undef, <<"EOF", 5, 4 );
Building new $pkg $::imscpConfig{'DISTRO_ID'} package
@{ [ ucfirst( $1 ) ] }
Please be patient. This may take few seconds...
EOF
} ),
sub { $stderr .= $_[0] }
);
error( $stderr || 'Unknown error' ) if $rs;
$rs;
},
sprintf(
'Building local %s %s package',
$pkg,
$::imscpConfig{'DISTRO_ID'}
),
5,
4
);
}
$rs ||= step(
sub {
# Ignore exit code due to https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1258958 bug
execute(
[ '/usr/bin/apt-mark', 'unhold', $pkg ],
\my $stdout,
\my $stderr
);
debug( $stderr ) if $stderr;
$stderr = '';
$rs = executeNoWait(
'/usr/bin/dpkg --force-confnew -i '
. "/var/cache/pbuilder/result/${pkg}_*.deb",
( iMSCP::Getopt->noprompt && iMSCP::Getopt->verbose
? undef : sub {
chomp( $_[0] );
step( undef, <<"EOF", 5, 5 );
Installing local $pkg $::imscpConfig{'DISTRO_ID'} package
$_[0]
EOF
} ),
sub { $stderr .= $_[0] }
);
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
# Ignore exit code due to
# https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1258958
execute(
[ '/usr/bin/apt-mark', 'hold', $pkg ],
\$stdout,
\$stderr
);
debug( $stdout ) if length $stdout;
debug( $stderr ) if length $stderr;
0;
},
sprintf(
'Installing local %s %s package',
$pkg,
$::imscpConfig{'DISTRO_ID'}
),
5,
5
);
endDetail();
$rs;
}
=back
=head1 AUTHOR
Laurent Declercq <l.declercq@nuxwin.com>
=cut
1;
__END__
================================================
FILE: autoinstaller/Adapter/DevuanAdapter.pm
================================================
=head1 NAME
autoinstaller::Adapter::DevuanAdapter - Devuan installer adapter
=cut
# i-MSCP - internet Multi Server Control Panel
# Copyright 2010-2019 by Laurent Declercq <l.declercq@nuxwin.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
package autoinstaller::Adapter::DevuanAdapter;
use strict;
use warnings;
use parent 'autoinstaller::Adapter::DebianAdapter';
=head1 DESCRIPTION
Devuan installer adapter
=head1 Author
Laurent Declercq <l.declercq@nuxwin.com>
=cut
1;
__END__
================================================
FILE: autoinstaller/Adapter/UbuntuAdapter.pm
================================================
=head1 NAME
autoinstaller::Adapter::UbuntuAdapter - Ubuntu installer adapter
=cut
# i-MSCP - internet Multi Server Control Panel
# Copyright 2010-2019 by Laurent Declercq <l.declercq@nuxwin.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
package autoinstaller::Adapter::UbuntuAdapter;
use strict;
use warnings;
use parent 'autoinstaller::Adapter::DebianAdapter';
=head1 DESCRIPTION
Ubuntu installer adapter
=head1 PRIVATE METHODS
=over 4
=item _init( )
Initialize instance
Return autoinstaller::Adapter::UbuntuAdapter
=cut
sub _init
{
my ( $self ) = @_;
$self->SUPER::_init();
$self->{'repositorySections'} = [ 'main', 'universe', 'multiverse' ];
$self;
}
=back
=head1 Author
Laurent Declercq <l.declercq@nuxwin.com>
=cut
1;
__END__
================================================
FILE: autoinstaller/Adapter/managed_services.txt
================================================
apache2
bind9
courier-authdaemon
courier-imap
courier-imap-ssl
courier-pop
courier-pop-ssl
cron dovecot
nginx
php5.6-fpm
php7.0-fpm
php7.1-fpm
php7.2-fpm
php7.3-fpm
php7.4-fpm
php8.0-fpm
postfix
proftpd
vsftpd
================================================
FILE: autoinstaller/Functions.pm
================================================
=head1 NAME
autoinstaller::Functions - Functions for the i-MSCP autoinstaller
=cut
# i-MSCP - internet Multi Server Control Panel
# Copyright 2010-2019 by internet Multi Server Control Panel
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
package autoinstaller::Functions;
use strict;
use warnings;
use autouse 'iMSCP::Stepper' => qw/ step /;
use File::Basename 'fileparse';
use File::Find 'find';
use iMSCP::Boolean;
use iMSCP::Bootstrapper;
use iMSCP::Config;
use iMSCP::Cwd '$CWD';
use iMSCP::Debug qw/ debug error output /;
use iMSCP::Dialog;
use iMSCP::Dir;
use iMSCP::EventManager;
use iMSCP::Execute 'execute';
use iMSCP::File;
use iMSCP::Getopt;
use iMSCP::LsbRelease;
use iMSCP::Umask '$UMASK';
use iMSCP::Rights 'setRights';
use version;
use parent 'Exporter';
our @EXPORT_OK = qw/
loadConfig install prepareDistFiles distributionCheckDialog
showGitVersionWarnDialog showWelcomeDialog writeMasterConfigFile
/;
=head1 DESCRIPTION
Common functions for the i-MSCP installer
=head1 PUBLIC FUNCTIONS
=over 4
=item loadConfig( )
Load main i-MSCP configuration
Return void, die on failure
=cut
sub loadConfig
{
my $lsb = iMSCP::LsbRelease->getInstance();
my $distConf = "$FindBin::Bin/configs/" . lc( $lsb->getId( TRUE ))
. '/imscp.conf';
my $defaultConf = "$FindBin::Bin/configs/debian/imscp.conf";
my $newConf = -f $distConf ? $distConf : $defaultConf;
# Load new configuration
tie %::imscpConfig, 'iMSCP::Config',
fileName => $newConf,
readonly => TRUE,
temporary => TRUE;
# Load old configuration
if ( -f "$::imscpConfig{'CONF_DIR'}/imscpOld.conf" ) {
# Recovering following an installation or upgrade failure
tie %::imscpOldConfig,
'iMSCP::Config',
fileName => "$::imscpConfig{'CONF_DIR'}/imscpOld.conf",
readonly => TRUE,
temporary => TRUE;
} elsif ( -f "$::imscpConfig{'CONF_DIR'}/imscp.conf" ) {
# Upgrade case
tie %::imscpOldConfig,
'iMSCP::Config',
fileName => "$::imscpConfig{'CONF_DIR'}/imscp.conf",
readonly => TRUE,
temporary => TRUE;
} else { # Fresh installation case
%::imscpOldConfig = %::imscpConfig;
}
if ( tied( %::imscpOldConfig ) ) {
debug( 'Merging old configuration with new configuration...' );
# Merge old configuration in new configuration, excluding upstream defined values
while ( my ( $key, $value ) = each( %::imscpOldConfig ) ) {
next unless exists $::imscpConfig{$key};
next if $key =~ /^(?:Build|Version|CodeName|PluginApi|THEME_ASSETS_VERSION|COMPOSER_VERSION)$/;
$::imscpConfig{$key} = $value;
}
# Make sure that all configuration parameters exist
while ( my ( $param, $value ) = each( %::imscpConfig ) ) {
next if exists $::imscpOldConfig{$param};
$::imscpOldConfig{$param} = $value;
}
}
# Set system based values
@{main::imscpConfig}{qw/ DISTRO_ID DISTRO_CODENAME DISTRO_RELEASE /} = (
lc $lsb->getId( TRUE ), lc $lsb->getCodename( TRUE ),
$lsb->getRelease( TRUE, TRUE )
);
}
=item install( )
Process install tasks
Return int 0 on success, other otherwise
=cut
sub install
{
#@type autoinstaller::Adapter::AbstractAdapter
my $distAdapter = eval {
my $distID = ucfirst $::imscpConfig{'DISTRO_ID'};
my $file = "$FindBin::Bin/autoinstaller/Adapter/${distID}Adapter.pm";
my $distAdapter = "autoinstaller::Adapter::${distID}Adapter";
require $file;
$distAdapter->new();
};
if ( $@ ) {
error( $@ );
return 1;
}
# No event is triggered before/after the preinstall tasks as the required
# Perl packages might not be installed yet
my $rs = $distAdapter->preinstall();
return $rs if $rs;
iMSCP::Requirements->new()->all();
my $events = iMSCP::EventManager->getInstance();
$rs = $events->trigger( 'beforeInstall' );
$rs ||= $distAdapter->install();
$rs ||= $events->trigger( 'afterInstall' );
$rs ||= $events->trigger( 'beforePostInstall' );
$rs ||= $distAdapter->postinstall();
$rs ||= $events->trigger( 'afterPostInstall' );
return $rs if $rs;
require Net::LibIDN;
Net::LibIDN->import( 'idn_to_unicode' );
if ( iMSCP::Getopt->noprompt ) {
if ( iMSCP::Getopt->verbose ) {
print output( 'i-MSCP has been successfully installed/updated.', 'ok' );
}
} else {
my $dialog = iMSCP::Dialog->getInstance();
# Disable backup feature for last dialog
$dialog->backup( FALSE );
# Override default button label
local $dialog->{'_opts'}->{
$dialog->{'program'} eq 'dialog' ? 'ok-label' : 'ok-button'
} = 'Ok';
$dialog->note( <<"EOF" );
\\Z1\\ZbCongratulations\\Zn
i-MSCP has been successfully installed/updated.
You can login at $::questions{'BASE_SERVER_VHOST_PREFIX'}@{ [
idn_to_unicode( $::questions{'BASE_SERVER_VHOST'}, 'utf-8' )
] }:@{ [ $::questions{'BASE_SERVER_VHOST_PREFIX'} eq 'http://'
? $::questions{'BASE_SERVER_VHOST_HTTP_PORT'}
: $::questions{'BASE_SERVER_VHOST_HTTPS_PORT'}
] } with the master administrator account credentials.
Thank you for choosing i-MSCP.
EOF
system( 'clear' );
}
0;
}
=item showWelcomeDialog( \%dialog )
Show welcome dialog
Param iMSCP::Dialog \%dialog
Return int 0 (Next), 20 (Skip), 30 (Back), 50 (Abort)
=cut
sub showWelcomeDialog
{
my ( $dialog ) = @_;
return 20 if iMSCP::Getopt->noprompt;
# Override default button labels
local @{ $dialog->{'_opts'} }{
$dialog->{'program'} eq 'dialog'
? qw/ yes-label no-label /
: qw/ yes-button no-button /
} = qw/ Continue Abort /;
exit 50 if $dialog->boolean( <<"EOF" );
Welcome to the \\Z1\\Zbi-MSCP $::imscpConfig{'Version'}\\Zn installer.
i-MSCP (internet Multi Server Control Panel) is an open source software (OSS) for shared hosting environments management on Linux servers. It comes with a large choice of modules for various services such as Apache2, ProFTPd, Dovecot, Courier, Bind9, and can be easily extended through plugins, or listener files using its events-based API.
i-MSCP has been designed for professional Hosting Service Providers (HSPs), Internet Service Providers (ISPs) and IT professionals.
\\Zb\\Z4LICENSE\\Zn\\ZB
Unless otherwise stated, all source code and material is licensed under LGPL 2.1 and has the following copyright:
\\Zb© 2010-@{[ (localtime)[5]+1900 ]}, Laurent Declercq (i-MSCP™)
All rights reserved\\ZB
The design material and the "\\Zbi-MSCP\\ZB" trademark is the property of their authors. Reuse of them without prior consent of their respective authors is strictly prohibited.
EOF
}
=item showGitVersionWarnDialog
Show warning dialog if Git version is detected
Return int 0 (Next), 20 (Skip), 30 (Back), 50 (Abort)
=cut
sub showGitVersionWarnDialog
{
my ( $dialog ) = @_;
return 20 if iMSCP::Getopt->noprompt || index( lc $::imscpConfig{'Version'}, 'git' ) == -1;
# Override default button labels
local @{ $dialog->{'_opts'} }{
$dialog->{'program'} eq 'dialog'
? qw/ ok-label extra-label /
: qw/ yes-button no-button /
} = qw/ Continue Abort /;
my $ret = $dialog->boolean( <<"EOF", TRUE );
\\Zb\\Z1i-MSCP Git (unstable) version has been detected\\Zn\\ZB
The installer detected that you intends to @{ [ !%::imscpOldConfig ? 'install' : 'update your installation to' ]} the i-MSCP \\ZbGit\\ZB version.
We would remind you that the Git version can be \\Zuhighly unstable\\ZU and that the i-MSCP team \\Zudoesn't provide any support\\ZU for it.
EOF
return 50 if $ret == 1;
$ret;
}
=item distributionCheckDialog( \%dialog )
Distribution check dialog
Param iMSCP::Dialog \%dialog
Return 20 (Skip), 50 (Abort)
=cut
sub distributionCheckDialog
{
my ( $dialog ) = @_;
if ( $::imscpConfig{'DISTRO_ID'} ne 'n/a'
&& $::imscpConfig{'DISTRO_CODENAME'} ne 'n/a'
&& $::imscpConfig{'DISTRO_ID'} =~ /^(?:de(?:bi|vu)an|ubuntu)$/
) {
unless ( -f "$FindBin::Bin/autoinstaller/Packages/"
. $::imscpConfig{'DISTRO_ID'} . '-'
. $::imscpConfig{'DISTRO_CODENAME'} . '.xml'
) {
$dialog->error( <<"EOF" );
\\Z1Distribution not supported\\Zn
We are sorry but your \\Zb@{ [ ucfirst $::imscpConfig{'DISTRO_ID'} ] }\\ZB version is not supported. This can be due to one of the following reasons:
- Your @{ [ ucfirst $::imscpConfig{'DISTRO_ID'} ] } version has reached its end of life and its support has been dropped
- Your @{ [ ucfirst $::imscpConfig{'DISTRO_ID'} ] } version has not been released yet and its support hasn't been added yet
- Your @{ [ ucfirst $::imscpConfig{'DISTRO_ID'} ] } version is a non-LTS Ubuntu version
EOF
return 50;
}
} else {
$dialog->error( <<"EOF" );
\\Z1Operating system not supported\\Zn
We are sorry but your operating system is not supported.
At this time, only \\ZuDebian\\Zn, \\ZuDevuan\\Zn and \\ZuUbuntu\\Zn operating systems are supported.
EOF
return 50;
}
20;
}
=item prepareDistFiles( )
Prepare distribution files
Return int 0 on success, other on failure
=cut
sub prepareDistFiles
{
my $rs = _buildLayout();
$rs ||= _buildConfigFiles();
$rs ||= _buildEngineFiles();
$rs ||= _buildFrontendFiles();
$rs ||= _compileDaemon();
$rs ||= _removeObsoleteFiles();
$rs ||= _savePersistentData();
return $rs if $rs;
eval {
# Clean build directory
find(
sub {
return unless $_ eq '.gitkeep';
unlink or die( sprintf(
"Couldn't remove %s file: %s", $File::Find::name, $!
));
},
$::{'INST_PREF'}
);
};
if ( $@ ) {
error( $@ );
return 1;
}
0;
}
=item writeMasterConfigFile( )
Write master configuration
Return int 0 on success, other on failure
=cut
sub writeMasterConfigFile
{
eval {
my %confMap = (
imscp => \%::imscpConfig,
imscpOld => \%::imscpOldConfig
);
# Write configuration
while ( my ( $name, $config ) = each %confMap ) {
if ( $name eq 'imscpOld' ) {
local $UMASK = 027;
iMSCP::File->new(
filename => "$::{'SYSTEM_CONF'}/$name.conf"
)->save();
}
tie my %config, 'iMSCP::Config', fileName => "$::{'SYSTEM_CONF'}/$name.conf";
@config{ keys %{ $config } } = values %{ $config };
untie %config;
}
};
if ( $@ ) {
error( $@ );
return 1;
}
0;
}
=back
=head1 PRIVATE FUNCTIONS
=over 4
=item _buildLayout( )
Build layout
Return int 0 on success, other on failure
=cut
sub _buildLayout
{
my $distroLayout = "$FindBin::Bin/autoinstaller/Layout/"
. $::imscpConfig{'DISTRO_ID'} . '.xml';
my $defaultLayout = "$FindBin::Bin/autoinstaller/Layout/Debian.xml";
_processXmlFile( -f $distroLayout ? $distroLayout : $defaultLayout );
}
=item _buildConfigFiles( )
Build configuration files
Return int 0 on success, other on failure
=cut
sub _buildConfigFiles
{
my $distroConfigDir = "$FindBin::Bin/configs/$::imscpConfig{'DISTRO_ID'}";
my $defaultConfigDir = "$FindBin::Bin/configs/debian";
my $confDir = -d $distroConfigDir ? $distroConfigDir : $defaultConfigDir;
local $CWD = $confDir;
my $file = -f "$distroConfigDir/install.xml"
? "$distroConfigDir/install.xml" : "$defaultConfigDir/install.xml";
my $rs = _processXmlFile( $file );
return $rs if $rs;
for my $dir ( iMSCP::Dir->new(
dirname => $defaultConfigDir
)->getDirs() ) {
# Override sub config dir path if it is available in selected distro,
# else set it to default path
$confDir = -d "$distroConfigDir/$dir"
? "$distroConfigDir/$dir"
: "$defaultConfigDir/$dir";
local $CWD = $confDir;
$file = -f "$distroConfigDir/$dir/install.xml"
? "$distroConfigDir/$dir/install.xml"
: "$defaultConfigDir/$dir/install.xml";
next unless -f $file;
$rs = _processXmlFile( $file );
return $rs if $rs;
}
0;
}
=item _buildEngineFiles( )
Build engine files
Return int 0 on success, other on failure
=cut
sub _buildEngineFiles
{
local $CWD = "$FindBin::Bin/engine";
my $rs = _processXmlFile( "$FindBin::Bin/engine/install.xml" );
return $rs if $rs;
for my $dir (
iMSCP::Dir->new( dirname => "$FindBin::Bin/engine" )->getDirs()
) {
next unless -f "$FindBin::Bin/engine/$dir/install.xml";
local $CWD = "$FindBin::Bin/engine/$dir";
$rs = _processXmlFile( "$FindBin::Bin/engine/$dir/install.xml" );
return $rs if $rs;
}
0;
}
=item _buildFrontendFiles( )
Build frontEnd files
Return int 0 on success, other on failure
=cut
sub _buildFrontendFiles
{
iMSCP::Dir->new(
dirname => "$FindBin::Bin/gui"
)->rcopy(
"$::{'SYSTEM_ROOT'}/gui", { preserve => 'no' }
);
}
=item _compileDaemon( )
Compile daemon
Return int 0 on success, other on failure
=cut
sub _compileDaemon
{
local $CWD = "$FindBin::Bin/daemon";
my $rs = execute( 'make clean imscp_daemon', \my $stdout, \my $stderr );
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
return $rs if $rs;
iMSCP::Dir->new( dirname => "$::{'SYSTEM_ROOT'}/daemon" )->make();
$rs = iMSCP::File->new( filename => 'imscp_daemon' )->copyFile(
"$::{'SYSTEM_ROOT'}/daemon", { preserve => 'no' }
);
$rs ||= iMSCP::Rights::setRights(
"$::{'SYSTEM_ROOT'}/daemon/imscp_daemon",
{
user => $::imscpConfig{'ROOT_GROUP'},
group => $::imscpConfig{'ROOT_GROUP'},
mode => '0750'
}
)
}
=item _savePersistentData( )
Save persistent data
Return int 0 on success, other on failure
=cut
sub _savePersistentData
{
my $destdir = $::{'INST_PREF'};
# Move old skeleton directory to new location
iMSCP::Dir->new(
dirname => "$::imscpConfig{'CONF_DIR'}/apache/skel"
)->rcopy(
"$::imscpConfig{'CONF_DIR'}/skel", { preserve => 'no' }
) if -d "$::imscpConfig{'CONF_DIR'}/apache/skel";
iMSCP::Dir->new(
dirname => "$::imscpConfig{'CONF_DIR'}/skel"
)->rcopy(
"$destdir$::imscpConfig{'CONF_DIR'}/skel", { preserve => 'no' }
) if -d "$::imscpConfig{'CONF_DIR'}/skel";
# Move old listener files to new location
iMSCP::Dir->new(
dirname => "$::imscpConfig{'CONF_DIR'}/hooks.d"
)->rcopy(
"$::imscpConfig{'CONF_DIR'}/listeners.d", { preserve => 'no' }
) if -d "$::imscpConfig{'CONF_DIR'}/hooks.d";
# Save ISP logos (older location)
iMSCP::Dir->new(
dirname => "$::imscpConfig{'GUI_ROOT_DIR'}/themes/user_logos"
)->rcopy(
"$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent/ispLogos",
{ preserve => 'no' }
) if -d "$::imscpConfig{'GUI_ROOT_DIR'}/themes/user_logos";
# Save ISP logos (new location)
iMSCP::Dir->new(
dirname => "$::imscpConfig{'GUI_ROOT_DIR'}/data/ispLogos"
)->rcopy(
"$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent/ispLogos",
{ preserve => 'no' }
) if -d "$::imscpConfig{'GUI_ROOT_DIR'}/data/ispLogos";
# Save GUI logs
iMSCP::Dir->new(
dirname => "$::imscpConfig{'GUI_ROOT_DIR'}/data/logs"
)->rcopy(
"$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/logs",
{ preserve => 'no' }
) if -d "$::imscpConfig{'GUI_ROOT_DIR'}/data/logs";
# Save persistent data
iMSCP::Dir->new(
dirname => "$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent"
)->rcopy(
"$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent",
{ preserve => 'no' }
) if -d "$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent";
# Save RainLoop data directory to new location if any
if ( !-l "$::imscpConfig{'GUI_ROOT_DIR'}/public/tools/rainloop" &&
-d "$::imscpConfig{'GUI_ROOT_DIR'}/public/tools/rainloop/data"
) {
iMSCP::Dir->new(
dirname => "$::imscpConfig{'GUI_ROOT_DIR'}/public/tools/rainloop/data"
)->rcopy(
"$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent/rainloop",
{ preserve => 'no' }
);
my $dataDir;
if ( -d "$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent/rainloop/_data_11c052c218cd2a2febbfb268624efdc1" ) {
$dataDir = "$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent/rainloop/_data_11c052c218cd2a2febbfb268624efdc1";
} else {
$dataDir = "$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent/rainloop/_data_";
}
if ( -d "$dataDir/_default_" ) {
iMSCP::Dir->new(
dirname => "$dataDir/_default_"
)->moveDir(
"$destdir$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent/rainloop/imscp"
);
}
iMSCP::Dir->new( dirname => $dataDir )->remove();
}
# Save vendor data
iMSCP::Dir->new(
dirname => "$::imscpConfig{'GUI_ROOT_DIR'}/vendor"
)->rcopy(
"$destdir$::imscpConfig{'GUI_ROOT_DIR'}/vendor", { preserve => 'no' }
) if -d "$::imscpConfig{'GUI_ROOT_DIR'}/vendor";
# Save GUI bin directory
iMSCP::Dir->new(
dirname => "$::imscpConfig{'GUI_ROOT_DIR'}/bin"
)->rcopy(
"$destdir$::imscpConfig{'GUI_ROOT_DIR'}/bin", { preserve => 'no' }
) if -d "$::imscpConfig{'GUI_ROOT_DIR'}/bin";
# Save plugins
iMSCP::Dir->new(
dirname => "$::imscpConfig{'PLUGINS_DIR'}"
)->rcopy(
"$destdir$::imscpConfig{'PLUGINS_DIR'}", { preserve => 'no' }
) if -d $::imscpConfig{'PLUGINS_DIR'};
# Save package handlers if any
if ( -d "$::imscpConfig{'ENGINE_ROOT_DIR'}/PerlLib/Package" ) {
for my $packageTypeDir (
iMSCP::Dir->new(
dirname => "$::imscpConfig{'ENGINE_ROOT_DIR'}/PerlLib/Package"
)->getDirs()
) {
for my $packageDir (
iMSCP::Dir->new(
dirname => "$::imscpConfig{'ENGINE_ROOT_DIR'}/PerlLib/Package/$packageTypeDir"
)->getDirs()
) {
for my $handlerFile (
iMSCP::Dir->new(
dirname => "$::imscpConfig{'ENGINE_ROOT_DIR'}/PerlLib/Package/$packageTypeDir/$packageDir",
fileType => qr/^Handler\.pm/
)->getFiles()
) {
my $rs = iMSCP::File->new(
filename => "$::imscpConfig{'ENGINE_ROOT_DIR'}/PerlLib/Package/$packageTypeDir/$packageDir/$handlerFile"
)->copyFile(
"$destdir$::imscpConfig{'ENGINE_ROOT_DIR'}/PerlLib/Package/$packageTypeDir/$packageDir/$handlerFile"
);
return $rs if $rs;
}
}
}
}
0;
}
=item _removeObsoleteFiles( )
Removes obsolete files
Return int 0 on success, other on failure
=cut
sub _removeObsoleteFiles
{
for my $dir ( "$::imscpConfig{'CACHE_DATA_DIR'}/addons",
"$::imscpConfig{'CONF_DIR'}/apache/backup",
"$::imscpConfig{'CONF_DIR'}/apache/skel/alias/phptmp",
"$::imscpConfig{'CONF_DIR'}/apache/skel/subdomain/phptmp",
"$::imscpConfig{'CONF_DIR'}/apache/working",
"$::imscpConfig{'CONF_DIR'}/cron.d",
"$::imscpConfig{'CONF_DIR'}/fcgi",
"$::imscpConfig{'CONF_DIR'}/hooks.d",
"$::imscpConfig{'CONF_DIR'}/init.d",
"$::imscpConfig{'CONF_DIR'}/nginx",
"$::imscpConfig{'CONF_DIR'}/php-fpm",
"$::imscpConfig{'CONF_DIR'}/courier/backup",
"$::imscpConfig{'CONF_DIR'}/courier/working",
"$::imscpConfig{'CONF_DIR'}/postfix/backup",
"$::imscpConfig{'CONF_DIR'}/postfix/imscp",
"$::imscpConfig{'CONF_DIR'}/postfix/parts",
"$::imscpConfig{'CONF_DIR'}/postfix/working",
"$::imscpConfig{'CONF_DIR'}/skel/domain/domain_disable_page",
"$::imscpConfig{'IMSCP_HOMEDIR'}/packages/.composer",
"$::imscpConfig{'LOG_DIR'}/imscp-arpl-msgr",
'/var/local/imscp/.composer',
'/var/local/imscp/packages',
"$::imscpConfig{'CONF_DIR'}/pma",
"$::imscpConfig{'CONF_DIR'}/roundcube",
"$::imscpConfig{'CONF_DIR'}/rainloop",
"$::imscpConfig{'GUI_ROOT_DIR'}/data/persistent/softwares"
) {
iMSCP::Dir->new( dirname => $dir )->remove();
}
for my $file ( "$::imscpConfig{'CONF_DIR'}/apache/parts/domain_disabled_ssl.tpl",
"$::imscpConfig{'CONF_DIR'}/apache/parts/domain_redirect.tpl",
"$::imscpConfig{'CONF_DIR'}/apache/parts/domain_redirect_ssl.tpl",
"$::imscpConfig{'CONF_DIR'}/apache/parts/domain_ssl.tpl",
"$::imscpConfig{'CONF_DIR'}/vsftpd/imscp_allow_writeable_root.patch",
"$::imscpConfig{'CONF_DIR'}/vsftpd/imscp_pthread_cancel.patch",
"$::imscpConfig{'CONF_DIR'}/apache/parts/php5.itk.ini",
"$::imscpConfig{'CONF_DIR'}/dovecot/dovecot.conf.2.0",
"$::imscpConfig{'CONF_DIR'}/dovecot/dovecot.conf.2.1",
'/etc/default/imscp_panel',
"$::imscpConfig{'CONF_DIR'}/frontend/00_master.conf",
"$::imscpConfig{'CONF_DIR'}/frontend/00_master_ssl.conf",
"$::imscpConfig{'CONF_DIR'}/frontend/imscp_fastcgi.conf",
"$::imscpConfig{'CONF_DIR'}/frontend/imscp_php.conf",
"$::imscpConfig{'CONF_DIR'}/frontend/nginx.conf",
"$::imscpConfig{'CONF_DIR'}/frontend/php-fcgi-starter",
"$::imscpConfig{'CONF_DIR'}/listeners.d/README",
"$::imscpConfig{'CONF_DIR'}/skel/domain/.htgroup",
"$::imscpConfig{'CONF_DIR'}/skel/domain/.htpasswd",
"$::imscpConfig{'IMSCP_HOMEDIR'}/packages/composer.phar",
'/usr/sbin/maillogconvert.pl',
# Due to a mistake in previous i-MSCP versions (Upstart conffile copied
# into systemd confdir)
"/etc/systemd/system/php5-fpm.override",
"/etc/init/php5-fpm.override", # Removed in 1.4.x
"$::imscpConfig{'CONF_DIR'}/imscp.old.conf",
'/usr/local/lib/imscp_panel/imscp_panel_checkconf', # Removed in 1.4.x,
'/var/local/imscp/composer.phar'
) {
next unless -f $file;
my $rs = iMSCP::File->new( filename => $file )->delFile();
return $rs if $rs;
}
0;
}
=item _processXmlFile( $filepath )
Process an install.xml file or distribution layout.xml file
Param string $filepath xml file path
Return int 0 on success, other on failure
=cut
sub _processXmlFile
{
my ( $file ) = @_;
unless ( -f $file ) {
error( sprintf( "File %s doesn't exists", $file ));
return 1;
}
my $data = eval {
require XML::Simple;
XML::Simple->new( ForceArray => TRUE, ForceContent => TRUE )->XMLin(
$file, VarAttr => 'export'
);
};
if ( $@ ) {
error( $@ );
return 1;
}
# Permissions hardening
local $UMASK = 027;
# Process xml 'folders' nodes if any
for my $node ( @{ $data->{'folders'} } ) {
$node->{'content'} = _expandVars( $node->{'content'} );
$::{$node->{'export'}} = $node->{'content'}
if defined $node->{'export'};
my $rs = _processFolder( $node );
return $rs if $rs;
}
# Process xml 'copy_config' nodes if any
for my $node ( @{ $data->{'copy_config'} } ) {
$node->{'content'} = _expandVars( $node->{'content'} );
my $rs = _copyConfig( $node );
return $rs if $rs;
}
# Process xml 'copy' nodes if any
for my $node ( @{ $data->{'copy'} } ) {
$node->{'content'} = _expandVars( $node->{'content'} );
my $rs = _copy( $node );
return $rs if $rs;
}
# Process xml 'create_file' nodes if any
for my $node ( @{ $data->{'create_file'} } ) {
$node->{'content'} = _expandVars( $node->{'content'} );
my $rs = _createFile( $node );
return $rs if $rs;
}
# Process xml 'chmod_file' nodes if any
for my $node ( @{ $data->{'chmod_file'} } ) {
$node->{'content'} = _expandVars( $node->{'content'} );
my $rs = _chmodFile( $node ) if $node->{'content'};
return $rs if $rs;
}
# Process xml 'chmod_file' nodes if any
for my $node ( @{ $data->{'chown_file'} } ) {
$node->{'content'} = _expandVars( $node->{'content'} );
my $rs = _chownFile( $node );
return $rs if $rs;
}
0;
}
=item _expandVars( $string )
Expand variables in the given string
Param string $string string containing variables to expands
Return string
=cut
sub _expandVars
{
my ( $string ) = @_;
$string //= '';
while ( my ( $var ) = $string =~ /\$\{([^\}]+)\}/g ) {
if ( defined $::{$var} ) {
$string =~ s/\$\{$var\}/$::{$var}/g;
} elsif ( defined $::imscpConfig{$var} ) {
$string =~ s/\$\{$var\}/$::imscpConfig{$var}/g;
} else {
die( "Couldn't expand variable \${$var}. Variable not found." );
}
}
$string;
}
=item _processFolder( \%data )
Process a folder node from an install.xml file
Process the xml folder node by creating the described directory.
Param hashref %data
Return int 0 on success, other on failure
=cut
sub _processFolder
{
my ( $data ) = @_;
my $dir = iMSCP::Dir->new( dirname => $data->{'content'} );
# Needed to be sure to not keep any file from a previous build that has failed
if ( defined $::{'INST_PREF'} && $::{'INST_PREF'} eq $data->{'content'} ) {
$dir->remove();
}
$dir->make( {
user => defined $data->{'user'}
? _expandVars( $data->{'owner'} ) : undef,
group => defined $data->{'group'}
? _expandVars( $data->{'group'} ) : undef,
mode => defined $data->{'mode'}
? oct( $data->{'mode'} ) : undef
} );
}
=item _copyConfig( \%data )
Process a copy_config node from an install.xml file
Param hashref %data
Return int 0 on success, other on failure
=cut
sub _copyConfig
{
my ( $data ) = @_;
if ( defined $data->{'if'} && !eval _expandVars( $data->{'if'} ) ) {
return 0 if $data->{'kept'};
( my $sysPath = $data->{'content'} ) =~ s/^$::{'INST_PREF'}//;
return 0 unless $sysPath ne '/' && -f $sysPath;
return iMSCP::File->new( filename => $sysPath )->delFile();
}
my ( $name, $path ) = fileparse( $data->{'content'} );
my $distribution = $::imscpConfig{'DISTRO_ID'};
( my $alternativeFolder = $CWD ) =~ s/$distribution/debian/;
my $source = -f $name ? $name : "$alternativeFolder/$name";
if ( -d $source ) {
iMSCP::Dir->new( dirname => $source )->rcopy(
"$path/$name", { preserve => 'no' }
);
} else {
my $rs = iMSCP::File->new( filename => $source )->copyFile(
$path, { preserve => 'no' }
);
return $rs if $rs;
}
return 0 unless defined $data->{'user'}
|| defined $data->{'group'} || defined $data->{'mode'};
my $file = iMSCP::File->new(
filename => -e "$path/$name" ? "$path/$name" : $path
);
if ( defined $data->{'user'} || defined $data->{'group'} ) {
my $rs = $file->owner(
( defined $data->{'user'} ? _expandVars( $data->{'user'} ) : -1 ),
( defined $data->{'group'} ? _expandVars( $data->{'group'} ) : -1 )
);
return $rs if $rs;
}
return 0 unless defined $data->{'mode'};
$file->mode( oct( $data->{'mode'} ));
}
=item _copy( \%data )
Process the copy node from an install.xml file
Param hashref %data
Return int 0 on success, other on failure
=cut
sub _copy
{
my ( $data ) = @_;
my ( $name, $path ) = fileparse( $data->{'content'} );
if ( -d $name ) {
iMSCP::Dir->new( dirname => $name )->rcopy(
"$path/$name", { preserve => 'no' }
);
} else {
my $rs = iMSCP::File->new( filename => $name )->copyFile(
$path, { preserve => 'no' }
);
return $rs if $rs;
}
return 0 unless defined $data->{'user'}
|| defined $data->{'group'} || defined $data->{'mode'};
my $file = iMSCP::File->new(
filename => -e "$path/$name" ? "$path/$name" : $path
);
if ( defined $data->{'user'} || defined $data->{'group'} ) {
my $rs = $file->owner(
( defined $data->{'user'} ? _expandVars( $data->{'user'} ) : -1 ),
( defined $data->{'group'} ? _expandVars( $data->{'group'} ) : -1 )
);
return $rs if $rs;
}
return 0 unless defined $data->{'mode'};
$file->mode( oct( $data->{'mode'} )) if defined $data->{'mode'};
}
=item _createFile( \%data )
Create a file
Param hashref %data
Return int 0 on success, other on failure
=cut
sub _createFile
{
my ( $data ) = @_;
iMSCP::File->new( filename => $data->{'content'} )->save();
}
=item _chownFile( )
Change file/directory owner and/or group recursively
Return int 0 on success, other on failure
=cut
sub _chownFile
{
my ( $data ) = @_;
return 0 unless defined $data->{'owner'} && defined $data->{'group'};
my $rs = execute(
"chown $data->{'owner'}:$data->{'group'} $data->{'content'}",
\my $stdout,
\my $stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
$rs;
}
=item _chmodFile( \%data )
Process chmod_file from an install.xml file
Param hashref %data
Return int 0 on success, other on failure
=cut
sub _chmodFile
{
my ( $data ) = @_;
return 0 unless defined $data->{'mode'};
my $rs = execute(
"chmod $data->{'mode'} $data->{'content'}", \my $stdout, \my $stderr
);
debug( $stdout ) if length $stdout;
error( $stderr || 'Unknown error' ) if $rs;
$rs;
}
=back
=head1 AUTHOR
Laurent Declercq <l.declercq@nuxwin.com>
=cut
1;
__END__
================================================
FILE: autoinstaller/Layout/Debian.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<install>
<folders export="INST_PREF">/tmp/imscp</folders>
<folders export="ROOT_CONF">${INST_PREF}/etc</folders>
<folders export="LOCAL_CONF">${INST_PREF}/usr/local/etc</folders>
<folders export="LOCAL_USR_LIB">${INST_PREF}/usr/local/lib</folders>
<folders export="SYSTEM_CONF">${INST_PREF}/etc/imscp</folders>
<folders export="SYSTEM_ROOT">${INST_PREF}/var/www/imscp</folders>
<folders export="SYSTEM_VIRTUAL">${INST_PREF}/var/www/virtual</folders>
<folders export="SYSTEM_LIB">${INST_PREF}/usr/lib</folders>
<folders export="SYSTEM_LOG">${INST_PREF}/var/log/imscp</folders>
<folders export="SYSTEM_MAIL_VIRTUAL">${INST_PREF}/var/mail/virtual</folders>
</install>
================================================
FILE: autoinstaller/Packages/debian-buster.xml
================================================
<packages>
<frontend
description="Http server for the control panel"
has_alternatives="1"
>
<nginx
class="Package::FrontEnd"
default="1"
description="Nginx"
repository_conflict="http://nginx.org/packages/debian"
>
<package>nginx-full</package>
</nginx>
</frontend>
<httpd
description="Httpd server implementation"
has_alternatives="1"
>
<apache_fcgid
class="Servers::httpd::apache_fcgid"
description="
Apache2 (MPM Event) with PHP through CGI/FastCGI SAPI
"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set suexec
/usr/lib/apache2/suexec-pristine
"
>
apache2-suexec-pristine
</package>
<package>libapache2-mod-fcgid</package>
</apache_fcgid>
<apache_itk
class="Servers::httpd::apache_itk"
description="Apache2 (MPM ITK) with PHP through Apache2 SAPI"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package>apache2-dev</package>
<package>libapache2-mpm-itk</package>
</apache_itk>
<apache_php_fpm
class="Servers::httpd::apache_php_fpm"
default="1"
description="
Apache2 (MPM Event) with PHP through FPM/FastCGI SAPI
"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package>apache2-dev</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set suexec
/usr/lib/apache2/suexec-pristine
"
>
apache2-suexec-pristine
</package>
</apache_php_fpm>
</httpd>
<php
description="PHP version for customers"
has_alternatives="1"
pinning_package="*"
pinning_pin="origin packages.sury.org"
pinning_pin_priority="1001"
repository="https://packages.sury.org/php/ buster main"
repository_conflict="http://packages.dotdeb.org"
repository_key_uri="https://packages.sury.org/php/apt.gpg"
>
<php5.6
always_installed="1"
class="Servers::php"
description="PHP 5.6"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 5.6 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip
"
>
php5.6
</package>
<package>php5.6-cgi</package>
<package>php5.6-cli</package>
<package>php5.6-fpm</package>
<package>php5.6-common</package>
<package>php5.6-bcmath</package>
<package>php5.6-bz2</package>
<package>php5.6-curl</package>
<package>php5.6-gd</package>
<package>php5.6-gmp</package>
<package>php5.6-imap</package>
<package>php5.6-intl</package>
<package>php5.6-json</package>
<package>php5.6-mbstring</package>
<package>php5.6-mcrypt</package>
<package>php5.6-mysql</package>
<package>php5.6-opcache</package>
<package>php5.6-phar</package>
<package>php5.6-pspell</package>
<package>php5.6-xml</package>
<package>php5.6-zip</package>
<package>libapache2-mod-php5.6</package>
</php5.6>
<php7.0
always_installed="1"
class="Servers::php"
description="PHP 7.0"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.0 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip apcu apcu_bc
"
>
php7.0
</package>
<package>php7.0-cli</package>
<package>php7.0-cgi</package>
<package>php7.0-fpm</package>
<package>php7.0-common</package>
<package>php7.0-bcmath</package>
<package>php7.0-bz2</package>
<package>php7.0-curl</package>
<package>php7.0-gd</package>
<package>php7.0-gmp</package>
<package>php7.0-imap</package>
<package>php7.0-intl</package>
<package>php7.0-json</package>
<package>php7.0-mbstring</package>
<package>php7.0-mcrypt</package>
<package>php7.0-mysql</package>
<package>php7.0-opcache</package>
<package>php7.0-phar</package>
<package>php7.0-pspell</package>
<package>php7.0-xml</package>
<package>php7.0-zip</package>
<package>libapache2-mod-php7.0</package>
<package>php7.0-apcu</package>
<package>php7.0-apcu-bc</package>
</php7.0>
<php7.1
always_installed="1"
class="Servers::php"
description="PHP 7.1"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.1 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip apcu apcu_bc
"
>
php7.1
</package>
<package>php7.1-cli</package>
<package>php7.1-cgi</package>
<package>php7.1-fpm</package>
<package>php7.1-common</package>
<package>php7.1-bcmath</package>
<package>php7.1-bz2</package>
<package>php7.1-curl</package>
<package>php7.1-gd</package>
<package>php7.1-gmp</package>
<package>php7.1-imap</package>
<package>php7.1-intl</package>
<package>php7.1-json</package>
<package>php7.1-mbstring</package>
<package>php7.1-mcrypt</package>
<package>php7.1-mysql</package>
<package>php7.1-opcache</package>
<package>php7.1-phar</package>
<package>php7.1-pspell</package>
<package>php7.1-xml</package>
<package>php7.1-zip</package>
<package>libapache2-mod-php7.1</package>
<package>php7.1-apcu</package>
<package>php7.1-apcu-bc</package>
</php7.1>
<php7.2
always_installed="1"
class="Servers::php"
description="PHP 7.2"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.2 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.2
</package>
<package>php7.2-cli</package>
<package>php7.2-cgi</package>
<package>php7.2-fpm</package>
<package>php7.2-common</package>
<package>php7.2-bcmath</package>
<package>php7.2-bz2</package>
<package>php7.2-curl</package>
<package>php7.2-gd</package>
<package>php7.2-gmp</package>
<package>php7.2-imap</package>
<package>php7.2-intl</package>
<package>php7.2-json</package>
<package>php7.2-mbstring</package>
<package>php7.2-mysql</package>
<package>php7.2-opcache</package>
<package>php7.2-phar</package>
<package>php7.2-pspell</package>
<package>php7.2-xml</package>
<package>php7.2-zip</package>
<package>libapache2-mod-php7.2</package>
<package>php7.2-apcu</package>
<package>php7.2-apcu-bc</package>
</php7.2>
<php7.3
always_installed="1"
class="Servers::php"
default="1"
description="PHP 7.3"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.3 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.3
</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set php /usr/bin/php7.3
"
>
php7.3-cli
</package>
<package>php7.3-cgi</package>
<package>php7.3-fpm</package>
<package>php7.3-common</package>
<package>php7.3-bcmath</package>
<package>php7.3-bz2</package>
<package>php7.3-curl</package>
<package>php7.3-gd</package>
<package>php7.3-gmp</package>
<package>php7.3-imap</package>
<package>php7.3-intl</package>
<package>php7.3-json</package>
<package>php7.3-mbstring</package>
<package>php7.3-mysql</package>
<package>php7.3-opcache</package>
<package
post_install_tasks="
/usr/bin/update-alternatives
--set phar /usr/bin/phar7.3;
/usr/bin/update-alternatives
--set phar.phar /usr/bin/phar.phar7.3
"
>
php7.3-phar
</package>
<package>php7.3-pspell</package>
<package>php7.3-xml</package>
<package>php7.3-zip</package>
<package>libapache2-mod-php7.3</package>
<package>php7.3-apcu</package>
<package>php7.3-apcu-bc</package>
</php7.3>
<php7.4
always_installed="1"
class="Servers::php"
description="PHP 7.4"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.4 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.4
</package>
<package>php7.4-cli</package>
<package>php7.4-cgi</package>
<package>php7.4-fpm</package>
<package>php7.4-common</package>
<package>php7.4-bcmath</package>
<package>php7.4-bz2</package>
<package>php7.4-curl</package>
<package>php7.4-gd</package>
<package>php7.4-gmp</package>
<package>php7.4-imap</package>
<package>php7.4-intl</package>
<package>php7.4-json</package>
<package>php7.4-mbstring</package>
<package>php7.4-mysql</package>
<package>php7.4-opcache</package>
<package>php7.4-phar</package>
<package>php7.4-pspell</package>
<package>php7.4-xml</package>
<package>php7.4-zip</package>
<package>libapache2-mod-php7.4</package>
<package>php7.4-apcu</package>
<package>php7.4-apcu-bc</package>
</php7.4>
<php8.0
always_installed="1"
class="Servers::php"
description="PHP 8.0"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 8.0 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
"
>
php8.0
</package>
<package>php8.0-cli</package>
<package>php8.0-cgi</package>
<package>php8.0-fpm</package>
<package>php8.0-common</package>
<package>php8.0-bcmath</package>
<package>php8.0-bz2</package>
<package>php8.0-curl</package>
<package>php8.0-gd</package>
<package>php8.0-gmp</package>
<package>php8.0-imap</package>
<package>php8.0-intl</package>
<package>php8.0-mbstring</package>
<package>php8.0-mysql</package>
<package>php8.0-opcache</package>
<package>php8.0-phar</package>
<package>php8.0-pspell</package>
<package>php8.0-xml</package>
<package>php8.0-zip</package>
<package>libapache2-mod-php8.0</package>
<package>php8.0-apcu</package>
</php8.0>
<package>php-pear</package>
</php>
<po
description="IMAP/POP servers"
has_alternatives="1"
>
<courier
class="Servers::po::courier"
description="Courier"
>
<package>courier-authlib-mysql</package>
<package>courier-imap</package>
<package>courier-imap-ssl</package>
<package>courier-pop</package>
<package>courier-pop-ssl</package>
<package>libgamin0</package>
<package>libsasl2-modules</package>
<package>maildrop</package>
<package_conflict>libsasl2-modules-sql</package_conflict>
<package_conflict>sasl2-bin</package_conflict>
</courier>
<dovecot
class="Servers::po::dovecot"
default="1"
description="Dovecot"
>
<package>dovecot-imapd</package>
<package>dovecot-pop3d</package>
<package>dovecot-mysql</package>
<package>dovecot-managesieved</package>
<package>dovecot-sieve</package>
</dovecot>
</po>
<mta
description="SMTP server"
has_alternatives="1"
>
<postfix
class="Servers::mta::postfix"
default="1"
description="Postfix"
>
<package>postfix</package>
<package_conflict>procmail</package_conflict>
<package_conflict>sendmail</package_conflict>
<package_conflict>sendmail-base</package_conflict>
<package_conflict>sendmail-bin</package_conflict>
<package_conflict>sendmail-cf</package_conflict>
<package_conflict>sendmail-doc</package_conflict>
</postfix>
</mta>
<ftpd
description="FTP server"
has_alternatives="1"
>
<proftpd
class="Servers::ftpd::proftpd"
default="1"
description="ProFTPD"
>
<package>proftpd-basic</package>
<package>proftpd-mod-mysql</package>
<package_conflict>vsftpd</package_conflict>
</proftpd>
<vsftpd
class="Servers::ftpd::vsftpd"
description="VsFTPD"
>
<package>libpam-mysql</package>
<package>vsftpd</package>
<package_conflict>proftpd-basic</package_conflict>
</vsftpd>
</ftpd>
<named
description="DNS server"
has_alternatives="1"
>
<bind
class="Servers::named::bind"
default="1"
description="Bind9"
>
<package>bind9</package>
</bind>
<external_server
class="Servers::noserver"
description="No local DNS server"
>
</external_server>
<package>resolvconf</package>
</named>
<sql
description="SQL server"
has_alternatives="1"
>
<mariadb_10.3
allow_upgrade_from="
remote_server,mariadb_10.0,mariadb_10.1,mariadb_10.2
"
class="Servers::sqld::mariadb"
default="1"
description="MariaDB 10.3"
pinning_package="
libmariadb3 mariadb-client-10.3 mariadb-common
mariadb-server-core-10.3 mysql-common
"
pinning_pin="release o=Debian"
pinning_pin_priority="1001"
>
<package>libmariadb3</package>
<package>mariadb-client-10.3</package>
<package>mariadb-common</package>
<package
pre_install_tasks="/bin/mkdir -p /etc/mysql/mariadb.conf.d"
>
mariadb-server-10.3
</package>
</mariadb_10.3>
<remote_server
class="Servers::sqld::remote"
description="Remote SQL server"
pinning_package="
libmariadb3 mariadb-client-10.3 mariadb-common mysql-common
"
pinning_pin="release o=Debian"
pinning_pin_priority="1001"
>
<package>libmariadb3</package>
<package>mariadb-common</package>
<package>mariadb-client-10.3</package>
</remote_server>
<package>mysql-common</package>
</sql>
<requirements>
<package>apt-src</package>
<package>at</package>
<package>bash</package>
<package>bash-completion</package>
<package>bzip2</package>
<package>ca-certificates</package>
<package>coreutils</package>
<package>cron</package>
<package>curl</package>
<package>devscripts</package>
<package>dirmngr</package>
<package>dnsutils</package>
<package>dpkg-dev</package>
<package>findutils</package>
<package>gcc</package>
<package>git</package>
<package>gzip</package>
<package>iptables</package>
<package>iproute2</package>
<package>ispell</package>
<package>libc6-dev</package>
<package>libcrypt-blowfish-perl</package>
<package>libcrypt-cbc-perl</package>
<package>libcrypt-eksblowfish-perl</package>
<package>libcrypt-rijndael-perl</package>
<package>libdata-validate-ip-perl</package>
<package>libdate-simple-perl</package>
<package>libdatetime-perl</package>
<package>libdbd-mariadb-perl</package>
<package>libdbi-perl</package>
<package>libemail-valid-perl</package>
<package>libfile-chmod-perl</package>
<package>libfile-copy-recursive-perl</package>
<package>libfile-homedir-perl</package>
<package>libhash-merge-perl</package>
<package>libjson-perl</package>
<package>libmailtools-perl</package>
<package>libmime-tools-perl</package>
<package>libnet-dns-perl</package>
<package>libnet-libidn-perl</package>
<package>libsort-naturally-perl</package>
<package>libssl-dev</package>
<package>libtimedate-perl</package>
<package>libunix-mknod-perl</package>
<package>libwww-perl</package>
<package>libxml-parser-perl</package>
<package>libxml-simple-perl</package>
<package>locales-all</package>
<package>logrotate</package>
<package>lzma</package>
<package>make</package>
<package>mawk</package>
<package>ntp</package>
<package>openssl</package>
<package>patch</package>
<package>pbuilder</package>
<package>pbzip2</package>
<package>perl</package>
<package>pigz</package>
<package>ssh</package>
<package>sudo</package>
<package>tar</package>
<package>unzip</package>
</requirements>
</packages>
================================================
FILE: autoinstaller/Packages/debian-stretch.xml
================================================
<packages>
<frontend
description="Http server for the control panel"
has_alternatives="1"
>
<nginx
class="Package::FrontEnd"
default="1"
description="Nginx server"
repository_conflict="http://nginx.org/packages/debian"
>
<package>nginx-full</package>
</nginx>
</frontend>
<httpd
description="Httpd server implementation"
has_alternatives="1"
>
<apache_fcgid
class="Servers::httpd::apache_fcgid"
description="
Apache2 (MPM Event) with PHP through CGI/FastCGI SAPI
"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set suexec
/usr/lib/apache2/suexec-pristine
"
>
apache2-suexec-pristine
</package>
<package>libapache2-mod-fcgid</package>
</apache_fcgid>
<apache_itk
class="Servers::httpd::apache_itk"
description="Apache2 (MPM ITK) with PHP through Apache2 SAPI"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package>apache2-dev</package>
<package>libapache2-mpm-itk</package>
</apache_itk>
<apache_php_fpm
class="Servers::httpd::apache_php_fpm"
default="1"
description="
Apache2 (MPM Event) with PHP through FPM/FastCGI SAPI
"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package>apache2-dev</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set suexec
/usr/lib/apache2/suexec-pristine
"
>
apache2-suexec-pristine
</package>
</apache_php_fpm>
</httpd>
<php
description="PHP version for customers"
has_alternatives="1"
pinning_package="*"
pinning_pin="origin packages.sury.org"
pinning_pin_priority="1001"
repository="https://packages.sury.org/php/ stretch main"
repository_conflict="http://packages.dotdeb.org"
repository_key_uri="https://packages.sury.org/php/apt.gpg"
>
<php5.6
always_installed="1"
class="Servers::php"
description="PHP 5.6"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 5.6 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip
"
>
php5.6
</package>
<package>php5.6-cgi</package>
<package>php5.6-cli</package>
<package>php5.6-fpm</package>
<package>php5.6-common</package>
<package>php5.6-bcmath</package>
<package>php5.6-bz2</package>
<package>php5.6-curl</package>
<package>php5.6-gd</package>
<package>php5.6-gmp</package>
<package>php5.6-imap</package>
<package>php5.6-intl</package>
<package>php5.6-json</package>
<package>php5.6-mbstring</package>
<package>php5.6-mcrypt</package>
<package>php5.6-mysql</package>
<package>php5.6-opcache</package>
<package>php5.6-phar</package>
<package>php5.6-pspell</package>
<package>php5.6-xml</package>
<package>php5.6-zip</package>
<package>libapache2-mod-php5.6</package>
</php5.6>
<php7.0
always_installed="1"
class="Servers::php"
description="PHP 7.0"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.0 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip apcu apcu_bc
"
>
php7.0
</package>
<package>php7.0-cli</package>
<package>php7.0-cgi</package>
<package>php7.0-fpm</package>
<package>php7.0-common</package>
<package>php7.0-bcmath</package>
<package>php7.0-bz2</package>
<package>php7.0-curl</package>
<package>php7.0-gd</package>
<package>php7.0-gmp</package>
<package>php7.0-imap</package>
<package>php7.0-intl</package>
<package>php7.0-json</package>
<package>php7.0-mbstring</package>
<package>php7.0-mcrypt</package>
<package>php7.0-mysql</package>
<package>php7.0-opcache</package>
<package>php7.0-phar</package>
<package>php7.0-pspell</package>
<package>php7.0-xml</package>
<package>php7.0-zip</package>
<package>libapache2-mod-php7.0</package>
<package>php7.0-apcu</package>
<package>php7.0-apcu-bc</package>
</php7.0>
<php7.1
always_installed="1"
class="Servers::php"
description="PHP 7.1"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.1 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip apcu apcu_bc
"
>
php7.1
</package>
<package>php7.1-cli</package>
<package>php7.1-cgi</package>
<package>php7.1-fpm</package>
<package>php7.1-common</package>
<package>php7.1-bcmath</package>
<package>php7.1-bz2</package>
<package>php7.1-curl</package>
<package>php7.1-gd</package>
<package>php7.1-gmp</package>
<package>php7.1-imap</package>
<package>php7.1-intl</package>
<package>php7.1-json</package>
<package>php7.1-mbstring</package>
<package>php7.1-mcrypt</package>
<package>php7.1-mysql</package>
<package>php7.1-opcache</package>
<package>php7.1-phar</package>
<package>php7.1-pspell</package>
<package>php7.1-xml</package>
<package>php7.1-zip</package>
<package>libapache2-mod-php7.1</package>
<package>php7.1-apcu</package>
<package>php7.1-apcu-bc</package>
</php7.1>
<php7.2
always_installed="1"
class="Servers::php"
description="PHP 7.2"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.2 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.2
</package>
<package>php7.2-cli</package>
<package>php7.2-cgi</package>
<package>php7.2-fpm</package>
<package>php7.2-common</package>
<package>php7.2-bcmath</package>
<package>php7.2-bz2</package>
<package>php7.2-curl</package>
<package>php7.2-gd</package>
<package>php7.2-gmp</package>
<package>php7.2-imap</package>
<package>php7.2-intl</package>
<package>php7.2-json</package>
<package>php7.2-mbstring</package>
<package>php7.2-mysql</package>
<package>php7.2-opcache</package>
<package>php7.2-phar</package>
<package>php7.2-pspell</package>
<package>php7.2-xml</package>
<package>php7.2-zip</package>
<package>libapache2-mod-php7.2</package>
<package>php7.2-apcu</package>
<package>php7.2-apcu-bc</package>
</php7.2>
<php7.3
always_installed="1"
class="Servers::php"
default="1"
description="PHP 7.3"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.3 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.3
</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set php /usr/bin/php7.3
"
>
php7.3-cli
</package>
<package
post_install_tasks="
/usr/bin/update-alternatives
--set php-cgi /usr/bin/php-cgi7.3
"
>
php7.3-cgi
</package>
<package>php7.3-fpm</package>
<package>php7.3-common</package>
<package>php7.3-bcmath</package>
<package>php7.3-bz2</package>
<package>php7.3-curl</package>
<package>php7.3-gd</package>
<package>php7.3-gmp</package>
<package>php7.3-imap</package>
<package>php7.3-intl</package>
<package>php7.3-json</package>
<package>php7.3-mbstring</package>
<package>php7.3-mysql</package>
<package>php7.3-opcache</package>
<package
post_install_tasks="
/usr/bin/update-alternatives
--set phar /usr/bin/phar7.3;
/usr/bin/update-alternatives
--set phar.phar /usr/bin/phar.phar7.3
"
>
php7.3-phar
</package>
<package>php7.3-pspell</package>
<package>php7.3-xml</package>
<package>php7.3-zip</package>
<package>libapache2-mod-php7.3</package>
<package>php7.3-apcu</package>
<package>php7.3-apcu-bc</package>
</php7.3>
<php7.4
always_installed="1"
class="Servers::php"
description="PHP 7.4"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.4 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.4
</package>
<package>php7.4-cli</package>
<package>php7.4-cgi</package>
<package>php7.4-fpm</package>
<package>php7.4-common</package>
<package>php7.4-bcmath</package>
<package>php7.4-bz2</package>
<package>php7.4-curl</package>
<package>php7.4-gd</package>
<package>php7.4-gmp</package>
<package>php7.4-imap</package>
<package>php7.4-intl</package>
<package>php7.4-json</package>
<package>php7.4-mbstring</package>
<package>php7.4-mysql</package>
<package>php7.4-opcache</package>
<package>php7.4-phar</package>
<package>php7.4-pspell</package>
<package>php7.4-xml</package>
<package>php7.4-zip</package>
<package>libapache2-mod-php7.4</package>
<package>php7.4-apcu</package>
<package>php7.4-apcu-bc</package>
</php7.4>
<package>php-pear</package>
</php>
<po
description="IMAP/POP servers"
has_alternatives="1"
>
<courier
class="Servers::po::courier"
description="Courier"
>
<package>courier-authlib-mysql</package>
<package>courier-imap</package>
<package>courier-imap-ssl</package>
<package>courier-pop</package>
<package>courier-pop-ssl</package>
<package>libgamin0</package>
<package>libsasl2-modules</package>
<package>maildrop</package>
<package_conflict>libsasl2-modules-sql</package_conflict>
<package_conflict>sasl2-bin</package_conflict>
</courier>
<dovecot
class="Servers::po::dovecot"
default="1"
description="Dovecot"
>
<package>dovecot-imapd</package>
<package>dovecot-pop3d</package>
<package>dovecot-mysql</package>
<package>dovecot-managesieved</package>
<package>dovecot-sieve</package>
</dovecot>
</po>
<mta
description="SMTP server"
has_alternatives="1"
>
<postfix
default="1"
description="Postfix server"
class="Servers::mta::postfix"
>
<package>postfix</package>
<package_conflict>procmail</package_conflict>
<package_conflict>sendmail</package_conflict>
<package_conflict>sendmail-base</package_conflict>
<package_conflict>sendmail-bin</package_conflict>
<package_conflict>sendmail-cf</package_conflict>
<package_conflict>sendmail-doc</package_conflict>
</postfix>
</mta>
<ftpd
description="FTP server"
has_alternatives="1"
>
<proftpd
class="Servers::ftpd::proftpd"
default="1"
description="ProFTPD"
>
<package>proftpd-basic</package>
<package>proftpd-mod-mysql</package>
<package_conflict>vsftpd</package_conflict>
</proftpd>
<vsftpd
class="Servers::ftpd::vsftpd"
description="VsFTPD"
>
<package>libpam-mysql</package>
<package>vsftpd</package>
<package_conflict>proftpd-basic</package_conflict>
</vsftpd>
</ftpd>
<named
description="DNS server"
has_alternatives="1"
>
<bind
class="Servers::named::bind"
default="1"
description="Bind9"
>
<package>bind9</package>
</bind>
<external_server
description="No local DNS server"
class="Servers::noserver"
>
</external_server>
<package>resolvconf</package>
</named>
<sql
description="SQL server"
has_alternatives="1"
>
<mysql_5.6
allow_upgrade_from="remote_server,mysql_5.5"
class="Servers::sqld::mysql"
description="MySQL 5.6"
pinning_package="*"
pinning_pin="origin repo.mysql.com"
pinning_pin_priority="1001"
repository="
http://repo.mysql.com/apt/debian/ stretch mysql-5.6
"
repository_key_id="5072E1F5"
repository_key_srv="keyserver.ubuntu.com"
>
<package>libmariadbclient18</package>
<package>libmysqlclient18</package>
<package>mysql-community-client</package>
<package>mysql-community-server</package>
</mysql_5.6>
<mysql_5.7
allow_upgrade_from="remote_server,mysql_5.5,mysql_5.6"
class="Servers::sqld::mysql"
description="MySQL 5.7"
pinning_package="*"
pinning_pin="origin repo.mysql.com"
pinning_pin_priority="1001"
repository="
http://repo.mysql.com/apt/debian/ stretch mysql-5.7
"
repository_key_id="5072E1F5"
repository_key_srv="keyserver.ubuntu.com"
>
<package>libmariadbclient18</package>
<package>libmysqlclient20</package>
<package>mysql-community-client</package>
<package>mysql-community-server</package>
</mysql_5.7>
<mariadb_10.1
allow_upgrade_from="
remote_server,mariadb_5.3,mariadb_5.5,mariadb_10.0
"
default="1"
description="MariaDB 10.1"
class="Servers::sqld::mariadb"
pinning_package="
libmariadbclient18 mariadb-client-10.1 mariadb-common
mariadb-server-core-10.1 mysql-common
"
pinning_pin="release o=Debian"
pinning_pin_priority="1001"
>
<package>libmariadbclient18</package>
<package>mariadb-client-10.1</package>
<package>mariadb-common</package>
<package
pre_install_tasks="/bin/mkdir -p /etc/mysql/mariadb.conf.d"
>
mariadb-server-10.1
</package>
</mariadb_10.1>
<mariadb_10.2
allow_upgrade_from="
remote_server,mariadb_5.3,mariadb_5.5,mariadb_10.0,mariadb_10.1
"
class="Servers::sqld::mariadb"
description="MariaDB 10.2"
pinning_package="*"
pinning_pin="release o=MariaDB"
pinning_pin_priority="1001"
repository="
http://mirror.netcologne.de/mariadb/repo/10.2/debian
stretch main
"
repository_key_id="0xF1656F24C74CD1D8"
repository_key_srv="keyserver.ubuntu.com"
>
<package>libmariadbclient18</package>
<package>mariadb-client-10.2</package>
<package>mariadb-common</package>
<package
pre_install_tasks="
/bin/mkdir -p /etc/mysql/mariadb.conf.d
"
>
mariadb-server-10.2
</package>
</mariadb_10.2>
<percona_5.7
allow_upgrade_from="remote_server,perconna_5.5,percona_5.6"
class="Servers::sqld::percona"
description="Percona 5.7"
pinning_package="
libperconaserverclient20 libperconaserverclient20-dev
percona-server-client-5.7 percona-server-common-5.7
percona-server-server-5.7
"
pinning_pin="origin repo.percona.com"
pinning_pin_priority="1001"
repository="http://repo.percona.com/apt stretch main"
repository_key_id="0x9334A25F8507EFA5"
repository_key_srv="keyserver.ubuntu.com"
required_arch="amd64"
>
<package>libmariadbclient18</package>
<package>libperconaserverclient20</package>
<package>percona-server-client-5.7</package>
<package>percona-server-common-5.7</package>
<package>percona-server-server-5.7</package>
</percona_5.7>
<remote_server
description="Remote SQL server"
class="Servers::sqld::remote"
pinning_package="
libmariadbclient18 mariadb-client-10.1 mariadb-common
mysql-common
"
pinning_pin="release o=Debian"
pinning_pin_priority="1001"
>
<package>libmariadbclient18</package>
<package>mariadb-common</package>
<package>mariadb-client-10.1</package>
</remote_server>
<package>mysql-common</package>
</sql>
<requirements>
<package>apt-src</package>
<package>at</package>
<package>bash</package>
<package>bash-completion</package>
<package>bzip2</package>
<package>ca-certificates</package>
<package>coreutils</package>
<package>cron</package>
<package>curl</package>
<package>devscripts</package>
<package>dirmngr</package>
<package>dnsutils</package>
<package>dpkg-dev</package>
<package>findutils</package>
<package>gcc</package>
<package>git</package>
<package>gzip</package>
<package>iptables</package>
<package>iproute2</package>
<package>ispell</package>
<package>libc6-dev</package>
<package>libcrypt-blowfish-perl</package>
<package>libcrypt-cbc-perl</package>
<package>libcrypt-eksblowfish-perl</package>
<package>libcrypt-rijndael-perl</package>
<package>libdata-validate-ip-perl</package>
<package>libdate-simple-perl</package>
<package>libdatetime-perl</package>
<package>libdbd-mysql-perl</package>
<package>libdbi-perl</package>
<package>libdigest-md5-perl</package>
<package>libemail-valid-perl</package>
<package>libfile-chmod-perl</package>
<package>libfile-copy-recursive-perl</package>
<package>libfile-homedir-perl</package>
<package>libhash-merge-perl</package>
<package>libjson-perl</package>
<package>libmailtools-perl</package>
<package>libmime-tools-perl</package>
<package>libnet-dns-perl</package>
<package>libnet-libidn-perl</package>
<package>libsort-naturally-perl</package>
<package>libssl-dev</package>
<package>libtimedate-perl</package>
<package>libunix-mknod-perl</package>
<package>libwww-perl</package>
<package>libxml-parser-perl</package>
<package>libxml-simple-perl</package>
<package>locales-all</package>
<package>logrotate</package>
<package>lzma</package>
<package>make</package>
<package>mawk</package>
<package>ntp</package>
<package>openssl</package>
<package>patch</package>
<package>pbuilder</package>
<package>pbzip2</package>
<package>perl</package>
<package>pigz</package>
<package>ssh</package>
<package>sudo</package>
<package>tar</package>
<package>unzip</package>
</requirements>
</packages>
================================================
FILE: autoinstaller/Packages/devuan-ascii.xml
================================================
<packages>
<frontend
description="Http server for the control panel"
has_alternatives="1"
>
<nginx
class="Package::FrontEnd"
default="1"
description="Nginx server"
>
<package>nginx-full</package>
</nginx>
</frontend>
<httpd
description="Httpd server implementation"
has_alternatives="1"
>
<apache_fcgid
class="Servers::httpd::apache_fcgid"
description="
Apache2 (MPM Event) with PHP through CGI/FastCGI SAPI
"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set suexec
/usr/lib/apache2/suexec-pristine
"
>
apache2-suexec-pristine
</package>
<package>libapache2-mod-fcgid</package>
</apache_fcgid>
<apache_itk
class="Servers::httpd::apache_itk"
description="Apache2 (MPM ITK) with PHP through Apache2 SAPI"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package>apache2-dev</package>
<package>libapache2-mpm-itk</package>
</apache_itk>
<apache_php_fpm
class="Servers::httpd::apache_php_fpm"
default="1"
description="
Apache2 (MPM Event) with PHP through FPM/FastCGI SAPI
"
>
<package
post_install_tasks="sh apache2_postinst.sh"
>
apache2
</package>
<package>apache2-dev</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set suexec
/usr/lib/apache2/suexec-pristine
"
>
apache2-suexec-pristine
</package>
</apache_php_fpm>
</httpd>
<php
description="PHP version for customers"
has_alternatives="1"
pinning_package="*"
pinning_pin="origin packages.sury.org"
pinning_pin_priority="1001"
repository="https://packages.sury.org/php/ stretch main"
repository_conflict="http://packages.dotdeb.org"
repository_key_uri="https://packages.sury.org/php/apt.gpg"
>
<php5.6
always_installed="1"
class="Servers::php"
description="PHP 5.6"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 5.6 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip
"
>
php5.6
</package>
<package>php5.6-cgi</package>
<package>php5.6-cli</package>
<package>php5.6-fpm</package>
<package>php5.6-common</package>
<package>php5.6-bcmath</package>
<package>php5.6-bz2</package>
<package>php5.6-curl</package>
<package>php5.6-gd</package>
<package>php5.6-gmp</package>
<package>php5.6-imap</package>
<package>php5.6-intl</package>
<package>php5.6-json</package>
<package>php5.6-mbstring</package>
<package>php5.6-mcrypt</package>
<package>php5.6-mysql</package>
<package>php5.6-opcache</package>
<package>php5.6-phar</package>
<package>php5.6-pspell</package>
<package>php5.6-xml</package>
<package>php5.6-zip</package>
<package>libapache2-mod-php5.6</package>
</php5.6>
<php7.0
always_installed="1"
class="Servers::php"
description="PHP 7.0"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.0 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip apcu apcu_bc
"
>
php7.0
</package>
<package>php7.0-cli</package>
<package>php7.0-cgi</package>
<package>php7.0-fpm</package>
<package>php7.0-common</package>
<package>php7.0-bcmath</package>
<package>php7.0-bz2</package>
<package>php7.0-curl</package>
<package>php7.0-gd</package>
<package>php7.0-gmp</package>
<package>php7.0-imap</package>
<package>php7.0-intl</package>
<package>php7.0-json</package>
<package>php7.0-mbstring</package>
<package>php7.0-mcrypt</package>
<package>php7.0-mysql</package>
<package>php7.0-opcache</package>
<package>php7.0-phar</package>
<package>php7.0-pspell</package>
<package>php7.0-xml</package>
<package>php7.0-zip</package>
<package>libapache2-mod-php7.0</package>
</php7.0>
<php7.1
always_installed="1"
class="Servers::php"
description="PHP 7.1"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.1 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mcrypt mysqlnd mysqli
pdo_mysql opcache pspell dom xml xmlreader xmlwriter
zip apcu apcu_bc
"
>
php7.1
</package>
<package>php7.1-cli</package>
<package>php7.1-cgi</package>
<package>php7.1-fpm</package>
<package>php7.1-common</package>
<package>php7.1-bcmath</package>
<package>php7.1-bz2</package>
<package>php7.1-curl</package>
<package>php7.1-gd</package>
<package>php7.1-gmp</package>
<package>php7.1-imap</package>
<package>php7.1-intl</package>
<package>php7.1-json</package>
<package>php7.1-mbstring</package>
<package>php7.1-mcrypt</package>
<package>php7.1-mysql</package>
<package>php7.1-opcache</package>
<package>php7.1-phar</package>
<package>php7.1-pspell</package>
<package>php7.1-xml</package>
<package>php7.1-zip</package>
<package>libapache2-mod-php7.1</package>
</php7.1>
<php7.2
always_installed="1"
class="Servers::php"
description="PHP 7.2"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.2 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.2
</package>
<package>php7.2-cli</package>
<package>php7.2-cgi</package>
<package>php7.2-fpm</package>
<package>php7.2-common</package>
<package>php7.2-bcmath</package>
<package>php7.2-bz2</package>
<package>php7.2-curl</package>
<package>php7.2-gd</package>
<package>php7.2-gmp</package>
<package>php7.2-imap</package>
<package>php7.2-intl</package>
<package>php7.2-json</package>
<package>php7.2-mbstring</package>
<package>php7.2-mysql</package>
<package>php7.2-opcache</package>
<package>php7.2-phar</package>
<package>php7.2-pspell</package>
<package>php7.2-xml</package>
<package>php7.2-zip</package>
<package>libapache2-mod-php7.2</package>
</php7.2>
<php7.3
always_installed="1"
class="Servers::php"
default="1"
description="PHP 7.3"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.3 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.3
</package>
<package
post_install_tasks="
/usr/bin/update-alternatives --set php /usr/bin/php7.3
"
>
php7.3-cli
</package>
<package>php7.3-cgi</package>
<package>php7.3-fpm</package>
<package>php7.3-common</package>
<package>php7.3-bcmath</package>
<package>php7.3-bz2</package>
<package>php7.3-curl</package>
<package>php7.3-gd</package>
<package>php7.3-gmp</package>
<package>php7.3-imap</package>
<package>php7.3-intl</package>
<package>php7.3-json</package>
<package>php7.3-mbstring</package>
<package>php7.3-mysql</package>
<package>php7.3-opcache</package>
<package
post_install_tasks="
/usr/bin/update-alternatives
--set phar /usr/bin/phar7.3;
/usr/bin/update-alternatives
--set phar.phar /usr/bin/phar.phar7.3
"
>
php7.3-phar
</package>
<package>php7.3-pspell</package>
<package>php7.3-xml</package>
<package>php7.3-zip</package>
<package>libapache2-mod-php7.3</package>
</php7.3>
<php7.4
always_installed="1"
class="Servers::php"
description="PHP 7.4"
>
<package
post_install_tasks="
/usr/sbin/phpenmod -v 7.4 -s ALL ctype fileinfo ftp
gettext iconv pdo phar posix sockets bcmath bz2 curl gd
gmp imap intl json mbstring mysqlnd mysqli pdo_mysql
opcache pspell dom xml xmlreader xmlwriter zip apcu
apcu_bc
"
>
php7.4
</package>
<package>php7.4-cli
</package>
<package>php7.4-cgi</package>
<package>php7.4-fpm</package>
<package>php7.4-common</package>
<package>php7.4-bcmath</package>
<package>php7.4-bz2</package>
<package>php7.4-curl</package>
<package>php7.4-gd</package>
<package>php7.4-gmp</package>
<package>php7.4-imap</package>
<package>php7.4-intl</package>
<package>php7.4-json</package>
<package>php7.4-mbstring</package>
<package>php7.4-mysql</package>
<package>php7.4-opcache</package>
<package>php7.4-phar</package>
<package>php7.4-pspell</package>
<package>php7.4-xml</package>
<package>php7.4-zip</package>
<package>libapache2-mod-php7.4</package>
</php7.4>
<package>php-apcu</package>
<package>php-apcu-bc</package>
<package>php-pear</package>
</php>
<po
description="IMAP/POP servers"
has_alternatives="1"
>
<courier
class="Servers::po::courier"
description="Courier"
>
<package>courier-authlib-mysql</package>
<package>courier-imap</package>
<package>courier-imap-ssl</package>
<package>courier-pop</package>
<package>courier-pop-ssl</package>
<package>libgamin0</package>
<package>libsasl2-modules</package>
<package>maildrop</package>
<package_conflict>libsasl2-modules-sql</package_conflict>
<package_conflict>sasl2-bin</package_conflict>
</courier>
<dovecot
class="Se
gitextract_i3j9am9o/ ├── .gitattributes ├── .gitignore ├── AUTHORS ├── CHANGELOG ├── COPYING ├── README.md ├── Vagrant/ │ ├── README.md │ ├── Vagrantfile │ └── scripts/ │ ├── distro_update.sh │ └── provision_imscp.sh ├── autoinstaller/ │ ├── Adapter/ │ │ ├── AbstractAdapter.pm │ │ ├── DebianAdapter.pm │ │ ├── DevuanAdapter.pm │ │ ├── UbuntuAdapter.pm │ │ └── managed_services.txt │ ├── Functions.pm │ ├── Layout/ │ │ └── Debian.xml │ ├── Packages/ │ │ ├── debian-buster.xml │ │ ├── debian-stretch.xml │ │ ├── devuan-ascii.xml │ │ ├── ubuntu-bionic.xml │ │ └── ubuntu-xenial.xml │ ├── postinstall/ │ │ ├── .gitkeep │ │ └── apache2_postinst.sh │ └── preinstall/ │ └── .gitkeep ├── configs/ │ ├── debian/ │ │ ├── apache/ │ │ │ ├── 00_imscp.conf │ │ │ ├── 00_nameserver.conf │ │ │ ├── apache.data.dist │ │ │ ├── install.xml │ │ │ ├── logrotate.conf │ │ │ ├── parts/ │ │ │ │ ├── custom.conf.tpl │ │ │ │ ├── domain.tpl │ │ │ │ └── domain_disabled.tpl │ │ │ ├── vlogger │ │ │ ├── vlogger.conf.tpl │ │ │ └── vlogger.sql │ │ ├── apt/ │ │ │ ├── 01norecommend │ │ │ └── install.xml │ │ ├── bind/ │ │ │ ├── bind.data.dist │ │ │ ├── install.xml │ │ │ ├── named.conf │ │ │ ├── named.conf.local │ │ │ ├── named.conf.options │ │ │ └── parts/ │ │ │ ├── cfg_master.tpl │ │ │ ├── cfg_slave.tpl │ │ │ ├── db.tpl │ │ │ └── db_sub.tpl │ │ ├── courier/ │ │ │ ├── authmysqlrc │ │ │ ├── courier.data.dist │ │ │ ├── imapd.local │ │ │ ├── install.xml │ │ │ ├── quota-warning │ │ │ └── sasl/ │ │ │ └── smtpd.conf │ │ ├── cron/ │ │ │ ├── cron.data.dist │ │ │ ├── imscp │ │ │ └── install.xml │ │ ├── database/ │ │ │ ├── database.sql │ │ │ └── install.xml │ │ ├── dovecot/ │ │ │ ├── dovecot-managesieve.conf │ │ │ ├── dovecot-sql.conf │ │ │ ├── dovecot.conf │ │ │ ├── dovecot.data.dist │ │ │ ├── install.xml │ │ │ ├── quota-warning │ │ │ └── sieve.default │ │ ├── dpkg/ │ │ │ ├── 90imscp │ │ │ └── install.xml │ │ ├── frontend/ │ │ │ ├── 00_master.nginx │ │ │ ├── 00_master_ssl.nginx │ │ │ ├── frontend.data.dist │ │ │ ├── imscp_fastcgi.nginx │ │ │ ├── imscp_panel │ │ │ ├── imscp_panel_reopenlogs │ │ │ ├── imscp_php.nginx │ │ │ ├── install.xml │ │ │ ├── nginx.nginx │ │ │ ├── php-fpm.conf │ │ │ └── php.ini │ │ ├── imscp.conf │ │ ├── install.xml │ │ ├── libpam-mysql/ │ │ │ └── patches/ │ │ │ └── dpatch/ │ │ │ ├── 03_undefined_make_scrambled_password_symbol.patch │ │ │ └── 04_resps_segfault.patch │ │ ├── listeners.d/ │ │ │ ├── README.md │ │ │ └── install.xml │ │ ├── logrotate.d/ │ │ │ ├── imscp │ │ │ ├── install.xml │ │ │ └── rsyslog │ │ ├── mounts/ │ │ │ ├── install.xml │ │ │ └── mounts.conf │ │ ├── mysql/ │ │ │ ├── imscp.cnf │ │ │ ├── install.xml │ │ │ └── mysql.data.dist │ │ ├── openssl/ │ │ │ ├── install.xml │ │ │ └── openssl.cnf.tpl │ │ ├── pbuilder/ │ │ │ └── pbuilderrc │ │ ├── php/ │ │ │ ├── apache/ │ │ │ │ └── php.ini │ │ │ ├── fcgi/ │ │ │ │ ├── apache_fcgid_module.conf │ │ │ │ ├── php-fcgi-starter │ │ │ │ └── php.ini │ │ │ ├── fpm/ │ │ │ │ ├── logrotate.tpl │ │ │ │ ├── php-fpm.conf │ │ │ │ ├── php.ini │ │ │ │ ├── pool.conf │ │ │ │ └── pool.conf.default │ │ │ ├── install.xml │ │ │ └── php.data.dist │ │ ├── postfix/ │ │ │ ├── install.xml │ │ │ ├── main.cf │ │ │ ├── master.cf │ │ │ └── postfix.data.dist │ │ ├── proftpd/ │ │ │ ├── install.xml │ │ │ ├── proftpd-basic │ │ │ ├── proftpd.conf │ │ │ └── proftpd.data.dist │ │ ├── skel/ │ │ │ ├── README │ │ │ ├── alias/ │ │ │ │ ├── 00_private/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── cgi-bin/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── htdocs/ │ │ │ │ ├── .well-known/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── index.html │ │ │ ├── domain/ │ │ │ │ ├── 00_private/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── backups/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── cgi-bin/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── errors/ │ │ │ │ │ ├── 401.html │ │ │ │ │ ├── 403.html │ │ │ │ │ ├── 404.html │ │ │ │ │ ├── 500.html │ │ │ │ │ ├── 503.html │ │ │ │ │ └── inc/ │ │ │ │ │ ├── errordocs.css │ │ │ │ │ └── ie78overrides.css │ │ │ │ ├── htdocs/ │ │ │ │ │ ├── .well-known/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── index.html │ │ │ │ ├── logs/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── phptmp/ │ │ │ │ └── .gitkeep │ │ │ ├── domain_disabled_pages/ │ │ │ │ └── index.html │ │ │ ├── install.xml │ │ │ └── subdomain/ │ │ │ ├── 00_private/ │ │ │ │ └── .gitkeep │ │ │ ├── cgi-bin/ │ │ │ │ └── .gitkeep │ │ │ └── htdocs/ │ │ │ ├── .well-known/ │ │ │ │ └── .gitkeep │ │ │ └── index.html │ │ ├── sysctl.d/ │ │ │ ├── imscp.conf │ │ │ └── install.xml │ │ ├── systemd/ │ │ │ ├── bind9-resolvconf.service │ │ │ ├── bind9.service │ │ │ ├── courier-authdaemon.conf │ │ │ ├── imscp_daemon.service │ │ │ ├── imscp_mountall.service │ │ │ ├── imscp_panel.conf │ │ │ ├── imscp_panel.service │ │ │ ├── imscp_traffic.service │ │ │ └── install.xml │ │ ├── sysvinit/ │ │ │ ├── courier-authdaemon │ │ │ ├── imscp_daemon │ │ │ ├── imscp_mountall │ │ │ ├── imscp_panel │ │ │ ├── imscp_traffic │ │ │ ├── install.xml │ │ │ └── proftpd │ │ ├── upstart/ │ │ │ ├── imscp_daemon.conf │ │ │ ├── imscp_mountall.conf │ │ │ ├── imscp_panel.conf │ │ │ ├── imscp_panel.override │ │ │ ├── imscp_traffic.conf │ │ │ ├── install.xml │ │ │ ├── php5.6-fpm.override │ │ │ ├── php7.0-fpm.override │ │ │ ├── php7.1-fpm.override │ │ │ ├── php7.2-fpm.override │ │ │ └── php7.3-fpm.override │ │ └── vsftpd/ │ │ ├── install.xml │ │ ├── patches/ │ │ │ └── quilt/ │ │ │ └── imscp_allow_writeable_root.patch │ │ ├── vsftpd.conf │ │ ├── vsftpd.data.dist │ │ ├── vsftpd.pam │ │ └── vsftpd_user.conf │ ├── devuan/ │ │ └── install.xml │ └── ubuntu/ │ ├── install.xml │ ├── libpam-mysql/ │ │ └── patches/ │ │ └── dpatch/ │ │ ├── 03_undefined_make_scrambled_password_symbol.patch │ │ └── 04_resps_segfault.patch │ ├── pbuilder/ │ │ └── pbuilderrc │ ├── proftpd/ │ │ └── install.xml │ ├── sysvinit/ │ │ └── install.xml │ └── vsftpd/ │ ├── install.xml │ └── patches/ │ └── quilt/ │ ├── imscp_allow_writeable_root.patch │ └── imscp_pthread_cancel.patch ├── contrib/ │ ├── Listeners/ │ │ ├── Apache2/ │ │ │ ├── 10_apache2_dualstack.pl │ │ │ ├── 20_apache2_serveralias_override.pl │ │ │ ├── 30_apache2_tools_proxy.pl │ │ │ └── 40_apache2_security_headers.pl │ │ ├── Backup/ │ │ │ └── 10_backup_storage_outsourcing.pl │ │ ├── Dovecot/ │ │ │ ├── 10_dovecot_compress.pl │ │ │ ├── 30_dovecot_namespace.pl │ │ │ ├── 40_dovecot_pfs.pl │ │ │ ├── 50_dovecot_plaintext.pl │ │ │ └── 60_dovecot_service_login.pl │ │ ├── FrontEnd/ │ │ │ └── 10_frontend_templates_override.pl │ │ ├── Named/ │ │ │ ├── 10_named_global_ns.pl │ │ │ ├── 10_named_localnets.pl │ │ │ ├── 10_named_rrl.pl │ │ │ ├── 10_named_slave_provisioning.pl │ │ │ └── 20_named_dualstack.pl │ │ ├── Nginx/ │ │ │ └── 10_nginx_hsts.pl │ │ ├── PHP/ │ │ │ ├── 10_php_confoptions_override.pl │ │ │ └── 10_phpfpm_settings_override.pl │ │ ├── Packages/ │ │ │ └── 10_packages_override.pl │ │ ├── PhpMyAdmin/ │ │ │ └── 10_phpmyadmin_conffile.pl │ │ ├── Postfix/ │ │ │ ├── 10_postfix_smarthost.pl │ │ │ ├── 10_postfix_transport_table.pl │ │ │ ├── 10_postfix_tuning.pl │ │ │ ├── 20_postfix_policy_whitelist.pl │ │ │ ├── 30_postfix_bcc_maps.pl │ │ │ ├── 40_postfix_sender_canonical.pl │ │ │ ├── 50_postfix_sender_generic.pl │ │ │ ├── 60_postfix_pfs.pl │ │ │ └── 70_postfix_submission_tls.pl │ │ ├── ProFTPd/ │ │ │ ├── 10_proftpd_auth_unix.pl │ │ │ ├── 10_proftpd_serverident.pl │ │ │ └── 10_proftpd_tls.pl │ │ ├── README.md │ │ ├── Roundcube/ │ │ │ └── 10_roundcube_tls.pl │ │ └── System/ │ │ ├── 10_system_hosts.pl │ │ └── 10_system_mount_userwebdir.pl │ └── scripts/ │ ├── fix_duplicate_mounts.pl │ ├── imscp_mail_from_csv.php │ └── poodle.sh ├── daemon/ │ ├── Makefile │ ├── daemon_cmd.c │ ├── daemon_cmd.h │ ├── daemon_conn.c │ ├── daemon_conn.h │ ├── daemon_globals.h │ ├── daemon_init.c │ ├── daemon_init.h │ ├── daemon_main.c │ ├── daemon_main.h │ ├── daemon_msg.c │ ├── daemon_msg.h │ ├── daemon_notify.c │ ├── daemon_notify.h │ ├── daemon_signals.c │ ├── daemon_signals.h │ ├── daemon_sock_io.c │ └── daemon_sock_io.h ├── docs/ │ ├── 1.2.x_errata.md │ ├── 1.3.x_errata.md │ ├── 1.4.x_errata.md │ ├── 1.5.x_errata.md │ ├── Changelog-1.0.x │ ├── Changelog-1.1.x │ ├── Changelog-1.2.x │ ├── Changelog-1.3.x │ ├── Changelog-1.4.x │ ├── Debian/ │ │ └── INSTALL.md │ ├── Devuan/ │ │ └── INSTALL.md │ ├── LICENSE-GPL2 │ ├── LICENSE-LGPL2.1 │ ├── LICENSE-MPL1.1 │ ├── Ubuntu/ │ │ └── INSTALL.md │ ├── cgi/ │ │ ├── README.md │ │ ├── sample.pl │ │ ├── sample.py │ │ └── sample.rb │ ├── imscp_net_sysctl.conf │ └── preseed.pl ├── engine/ │ ├── PerlLib/ │ │ ├── Common/ │ │ │ ├── Object.pm │ │ │ └── SingletonClass.pm │ │ ├── Modules/ │ │ │ ├── Abstract.pm │ │ │ ├── Alias.pm │ │ │ ├── CustomDNS.pm │ │ │ ├── Domain.pm │ │ │ ├── FtpUser.pm │ │ │ ├── Htaccess.pm │ │ │ ├── Htgroup.pm │ │ │ ├── Htpasswd.pm │ │ │ ├── Mail.pm │ │ │ ├── Plugin.pm │ │ │ ├── SSLcertificate.pm │ │ │ ├── ServerIP.pm │ │ │ ├── SubAlias.pm │ │ │ ├── Subdomain.pm │ │ │ └── User.pm │ │ ├── Package/ │ │ │ ├── AbstractPackageCollection.pm │ │ │ ├── AltUrlsFeature.pm │ │ │ ├── AntiRootkits/ │ │ │ │ ├── Chkrootkit/ │ │ │ │ │ └── Chkrootkit.pm │ │ │ │ └── Rkhunter/ │ │ │ │ ├── Cron.pl │ │ │ │ └── Rkhunter.pm │ │ │ ├── AntiRootkits.pm │ │ │ ├── BackupFeature.pm │ │ │ ├── FrontEnd.pm │ │ │ ├── ServicesSSL.pm │ │ │ ├── SqlAdminTools/ │ │ │ │ └── PhpMyAdmin/ │ │ │ │ └── PhpMyAdmin.pm │ │ │ ├── SqlAdminTools.pm │ │ │ ├── WebFtpClients/ │ │ │ │ └── MonstaFTP/ │ │ │ │ └── MonstaFTP.pm │ │ │ ├── WebFtpClients.pm │ │ │ ├── WebStatistics/ │ │ │ │ └── AWStats/ │ │ │ │ ├── AWStats.pm │ │ │ │ ├── Config/ │ │ │ │ │ ├── 01_awstats.conf │ │ │ │ │ └── awstats.imscp_tpl.conf │ │ │ │ └── Scripts/ │ │ │ │ ├── awstats_updateall.pl │ │ │ │ └── logresolvemerge.pl │ │ │ ├── WebStatistics.pm │ │ │ ├── WebmailClients/ │ │ │ │ ├── RainLoop/ │ │ │ │ │ └── RainLoop.pm │ │ │ │ └── Roundcube/ │ │ │ │ └── Roundcube.pm │ │ │ └── WebmailClients.pm │ │ ├── Servers/ │ │ │ ├── cron/ │ │ │ │ └── cron.pm │ │ │ ├── cron.pm │ │ │ ├── ftpd/ │ │ │ │ ├── proftpd/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ ├── proftpd.pm │ │ │ │ ├── vsftpd/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ └── vsftpd.pm │ │ │ ├── ftpd.pm │ │ │ ├── httpd/ │ │ │ │ ├── apache_fcgid/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ ├── apache_fcgid.pm │ │ │ │ ├── apache_itk/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ ├── apache_itk.pm │ │ │ │ ├── apache_php_fpm/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ └── apache_php_fpm.pm │ │ │ ├── httpd.pm │ │ │ ├── mta/ │ │ │ │ ├── postfix/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ └── postfix.pm │ │ │ ├── mta.pm │ │ │ ├── named/ │ │ │ │ ├── bind/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ └── bind.pm │ │ │ ├── named.pm │ │ │ ├── noserver.pm │ │ │ ├── php.pm │ │ │ ├── po/ │ │ │ │ ├── courier/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ ├── courier.pm │ │ │ │ ├── dovecot/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ └── dovecot.pm │ │ │ ├── po.pm │ │ │ ├── server/ │ │ │ │ ├── local/ │ │ │ │ │ └── installer.pm │ │ │ │ └── local.pm │ │ │ ├── server.pm │ │ │ ├── sqld/ │ │ │ │ ├── mariadb/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ ├── mariadb.pm │ │ │ │ ├── mysql/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ ├── mysql.pm │ │ │ │ ├── percona/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ ├── percona.pm │ │ │ │ ├── remote/ │ │ │ │ │ ├── installer.pm │ │ │ │ │ └── uninstaller.pm │ │ │ │ └── remote.pm │ │ │ └── sqld.pm │ │ └── iMSCP/ │ │ ├── Boolean.pm │ │ ├── Bootstrapper.pm │ │ ├── Composer.pm │ │ ├── Config.pm │ │ ├── Crypt.pm │ │ ├── Cwd.pm │ │ ├── Database/ │ │ │ ├── MariaDB.pm │ │ │ └── MySQL.pm │ │ ├── Database.pm │ │ ├── DbTasksProcessor.pm │ │ ├── Debug.pm │ │ ├── Dialog/ │ │ │ ├── Dialog.pm │ │ │ ├── FrontEndInterface.pm │ │ │ ├── InputValidation.pm │ │ │ ├── NonInteractive.pm │ │ │ ├── Resizable.pm │ │ │ └── TextFormatter.pm │ │ ├── Dialog.pm │ │ ├── Dir.pm │ │ ├── EventManager/ │ │ │ └── ListenerPriorityQueue.pm │ │ ├── EventManager.pm │ │ ├── Execute.pm │ │ ├── Ext2Attributes/ │ │ │ ├── Ext2Fs32.pm │ │ │ └── Ext2Fs64.pm │ │ ├── Ext2Attributes.pm │ │ ├── File.pm │ │ ├── Getopt.pm │ │ ├── LockFile.pm │ │ ├── Log.pm │ │ ├── LsbRelease.pm │ │ ├── Mail.pm │ │ ├── Mount.pm │ │ ├── Net.pm │ │ ├── Networking.pm │ │ ├── OpenSSL.pm │ │ ├── Packages.pm │ │ ├── Plugins.pm │ │ ├── ProgramFinder.pm │ │ ├── Provider/ │ │ │ ├── Networking/ │ │ │ │ ├── Interface.pm │ │ │ │ └── Persistence/ │ │ │ │ ├── Ifupdown.pm │ │ │ │ └── Netplan.pm │ │ │ └── Service/ │ │ │ ├── Abstract.pm │ │ │ ├── Debian/ │ │ │ │ ├── SysVinit.pm │ │ │ │ ├── Systemd.pm │ │ │ │ └── Upstart.pm │ │ │ ├── Interface.pm │ │ │ ├── SysVinit.pm │ │ │ ├── Systemd.pm │ │ │ └── Upstart.pm │ │ ├── Requirements.pm │ │ ├── Rights.pm │ │ ├── Servers.pm │ │ ├── Service.pm │ │ ├── Stepper.pm │ │ ├── Syscall.pm │ │ ├── SystemGroup.pm │ │ ├── SystemUser.pm │ │ ├── TemplateParser.pm │ │ └── Umask.pm │ ├── PerlVendor/ │ │ ├── Array/ │ │ │ └── Utils.pm │ │ ├── Capture/ │ │ │ └── Tiny.pm │ │ ├── Class/ │ │ │ └── Autouse.pm │ │ ├── Data/ │ │ │ └── Validate/ │ │ │ └── Domain.pm │ │ ├── Net/ │ │ │ ├── Domain/ │ │ │ │ └── TLD.pm │ │ │ └── IP.pm │ │ ├── PHP/ │ │ │ └── Var.pm │ │ └── courier-dovecot-migrate.pl │ ├── backup/ │ │ ├── imscp-backup-all │ │ ├── imscp-backup-imscp │ │ └── install.xml │ ├── imscp-rqst-mngr │ ├── install.xml │ ├── messenger/ │ │ ├── imscp-arpl-msgr │ │ └── install.xml │ ├── quota/ │ │ ├── imscp-dsk-quota │ │ └── install.xml │ ├── setup/ │ │ ├── imscp-reconfigure │ │ ├── imscp-setup-functions.pl │ │ ├── imscp-uninstaller │ │ ├── imscp-update-db.php │ │ ├── install.xml │ │ ├── set-engine-permissions.pl │ │ └── set-gui-permissions.pl │ ├── tools/ │ │ ├── imscp-disable-accounts │ │ ├── imscp-dpkg-post-invoke.pl │ │ ├── imscp-mountall │ │ ├── imscp-net-traffic-logger │ │ └── install.xml │ └── traffic/ │ ├── imscp-srv-traff │ ├── imscp-vrl-traff │ ├── install.xml │ └── maillogconvert.pl ├── gui/ │ ├── bin/ │ │ └── .gitkeep │ ├── composer.json │ ├── data/ │ │ ├── cache/ │ │ │ └── .gitkeep │ │ ├── certs/ │ │ │ └── .gitkeep │ │ ├── logs/ │ │ │ └── .gitkeep │ │ ├── persistent/ │ │ │ ├── .composer/ │ │ │ │ └── .gitkeep │ │ │ └── plugins/ │ │ │ └── README.md │ │ ├── sessions/ │ │ │ └── .gitkeep │ │ ├── tmp/ │ │ │ └── .gitkeep │ │ └── uploads/ │ │ └── .gitkeep │ ├── i18n/ │ │ └── locales/ │ │ ├── ar/ │ │ │ └── LC_MESSAGES/ │ │ │ └── ar.mo │ │ ├── bg_BG/ │ │ │ └── LC_MESSAGES/ │ │ │ └── bg_BG.mo │ │ ├── ca_ES/ │ │ │ └── LC_MESSAGES/ │ │ │ └── ca_ES.mo │ │ ├── cs_CZ/ │ │ │ └── LC_MESSAGES/ │ │ │ └── cs_CZ.mo │ │ ├── da_DK/ │ │ │ └── LC_MESSAGES/ │ │ │ └── da_DK.mo │ │ ├── de_DE/ │ │ │ └── LC_MESSAGES/ │ │ │ └── de_DE.mo │ │ ├── el/ │ │ │ └── LC_MESSAGES/ │ │ │ └── el.mo │ │ ├── en_GB/ │ │ │ └── LC_MESSAGES/ │ │ │ └── en_GB.mo │ │ ├── es_AR/ │ │ │ └── LC_MESSAGES/ │ │ │ └── es_AR.mo │ │ ├── es_ES/ │ │ │ └── LC_MESSAGES/ │ │ │ └── es_ES.mo │ │ ├── eu_ES/ │ │ │ └── LC_MESSAGES/ │ │ │ └── eu_ES.mo │ │ ├── fa_IR/ │ │ │ └── LC_MESSAGES/ │ │ │ └── fa_IR.mo │ │ ├── fi_FI/ │ │ │ └── LC_MESSAGES/ │ │ │ └── fi_FI.mo │ │ ├── fr_FR/ │ │ │ └── LC_MESSAGES/ │ │ │ └── fr_FR.mo │ │ ├── gl_ES/ │ │ │ └── LC_MESSAGES/ │ │ │ └── gl_ES.mo │ │ ├── hu_HU/ │ │ │ └── LC_MESSAGES/ │ │ │ └── hu_HU.mo │ │ ├── it_IT/ │ │ │ └── LC_MESSAGES/ │ │ │ └── it_IT.mo │ │ ├── ja_JP/ │ │ │ └── LC_MESSAGES/ │ │ │ └── ja_JP.mo │ │ ├── lt_LT/ │ │ │ └── LC_MESSAGES/ │ │ │ └── lt_LT.mo │ │ ├── nb_NO/ │ │ │ └── LC_MESSAGES/ │ │ │ └── nb_NO.mo │ │ ├── nl_NL/ │ │ │ └── LC_MESSAGES/ │ │ │ └── nl_NL.mo │ │ ├── pl_PL/ │ │ │ └── LC_MESSAGES/ │ │ │ └── pl_PL.mo │ │ ├── pt_BR/ │ │ │ └── LC_MESSAGES/ │ │ │ └── pt_BR.mo │ │ ├── pt_PT/ │ │ │ └── LC_MESSAGES/ │ │ │ └── pt_PT.mo │ │ ├── ro_RO/ │ │ │ └── LC_MESSAGES/ │ │ │ └── ro_RO.mo │ │ ├── ru_RU/ │ │ │ └── LC_MESSAGES/ │ │ │ └── ru_RU.mo │ │ ├── sk_SK/ │ │ │ └── LC_MESSAGES/ │ │ │ └── sk_SK.mo │ │ ├── sl/ │ │ │ └── LC_MESSAGES/ │ │ │ └── sl.mo │ │ ├── sv_SE/ │ │ │ └── LC_MESSAGES/ │ │ │ └── sv_SE.mo │ │ ├── th_TH/ │ │ │ └── LC_MESSAGES/ │ │ │ └── th_TH.mo │ │ ├── tr_TR/ │ │ │ └── LC_MESSAGES/ │ │ │ └── tr_TR.mo │ │ ├── uk_UA/ │ │ │ └── LC_MESSAGES/ │ │ │ └── uk_UA.mo │ │ ├── vi/ │ │ │ └── LC_MESSAGES/ │ │ │ └── vi.mo │ │ ├── zh_CN/ │ │ │ └── LC_MESSAGES/ │ │ │ └── zh_CN.mo │ │ ├── zh_HK/ │ │ │ └── LC_MESSAGES/ │ │ │ └── zh_HK.mo │ │ └── zh_TW/ │ │ └── LC_MESSAGES/ │ │ └── zh_TW.mo │ ├── include/ │ │ ├── Admin.php │ │ ├── BcAutoload.php │ │ ├── Client.php │ │ ├── Counting.php │ │ ├── Email.php │ │ ├── Input.php │ │ ├── Intl.php │ │ ├── Layout.php │ │ ├── Login.php │ │ ├── LostPassword.php │ │ ├── Reseller.php │ │ ├── Shared.php │ │ ├── Statistics.php │ │ ├── Tickets.php │ │ ├── View.php │ │ └── imscp-lib.php │ ├── patches/ │ │ ├── 001_php_deprecations.patch │ │ ├── 002_zend_form_docblock_fix.patch │ │ ├── 003_zend_navigation_patch │ │ ├── 004_zend_validate_file_upload.patch │ │ └── 005_zend_validate_file_count.patch │ ├── plugins/ │ │ └── .gitkeep │ ├── public/ │ │ ├── admin/ │ │ │ ├── admin_add.php │ │ │ ├── admin_log.php │ │ │ ├── change_user_interface.php │ │ │ ├── circular.php │ │ │ ├── custom_menus.php │ │ │ ├── domain_details.php │ │ │ ├── domain_status_change.php │ │ │ ├── imscp_debugger.php │ │ │ ├── imscp_updates.php │ │ │ ├── index.php │ │ │ ├── ip_delete.php │ │ │ ├── ip_manage.php │ │ │ ├── ip_usage.php │ │ │ ├── language.php │ │ │ ├── layout.php │ │ │ ├── manage_reseller_owners.php │ │ │ ├── manage_reseller_users.php │ │ │ ├── multilanguage.php │ │ │ ├── password_update.php │ │ │ ├── personal_change.php │ │ │ ├── profile.php │ │ │ ├── reseller_add.php │ │ │ ├── reseller_edit.php │ │ │ ├── reseller_statistics.php │ │ │ ├── reseller_user_statistics.php │ │ │ ├── reseller_user_statistics_details.php │ │ │ ├── rootkit_log.php │ │ │ ├── server_statistic.php │ │ │ ├── service_statuses.php │ │ │ ├── sessions_manage.php │ │ │ ├── settings.php │ │ │ ├── settings_lostpassword.php │ │ │ ├── settings_maintenance_mode.php │ │ │ ├── settings_plugins.php │ │ │ ├── settings_ports.php │ │ │ ├── settings_server_traffic.php │ │ │ ├── settings_welcome_mail.php │ │ │ ├── system_info.php │ │ │ ├── ticket_closed.php │ │ │ ├── ticket_delete.php │ │ │ ├── ticket_system.php │ │ │ ├── ticket_view.php │ │ │ ├── user_delete.php │ │ │ ├── user_edit.php │ │ │ └── users.php │ │ ├── client/ │ │ │ ├── alias_add.php │ │ │ ├── alias_delete.php │ │ │ ├── alias_edit.php │ │ │ ├── alias_order_delete.php │ │ │ ├── alssub_delete.php │ │ │ ├── backup.php │ │ │ ├── cert_view.php │ │ │ ├── change_user_interface.php │ │ │ ├── dns_add.php │ │ │ ├── dns_delete.php │ │ │ ├── dns_edit.php │ │ │ ├── domain_edit.php │ │ │ ├── domains_manage.php │ │ │ ├── error_edit.php │ │ │ ├── error_pages.php │ │ │ ├── ftp_accounts.php │ │ │ ├── ftp_add.php │ │ │ ├── ftp_delete.php │ │ │ ├── ftp_edit.php │ │ │ ├── index.php │ │ │ ├── language.php │ │ │ ├── layout.php │ │ │ ├── mail_accounts.php │ │ │ ├── mail_add.php │ │ │ ├── mail_autoresponder_disable.php │ │ │ ├── mail_autoresponder_edit.php │ │ │ ├── mail_autoresponder_enable.php │ │ │ ├── mail_catchall.php │ │ │ ├── mail_catchall_add.php │ │ │ ├── mail_catchall_delete.php │ │ │ ├── mail_delete.php │ │ │ ├── mail_edit.php │ │ │ ├── mail_external.php │ │ │ ├── password_update.php │ │ │ ├── personal_change.php │ │ │ ├── phpini.php │ │ │ ├── profile.php │ │ │ ├── protected_areas.php │ │ │ ├── protected_areas_add.php │ │ │ ├── protected_areas_delete.php │ │ │ ├── protected_group_add.php │ │ │ ├── protected_group_delete.php │ │ │ ├── protected_user_add.php │ │ │ ├── protected_user_assign.php │ │ │ ├── protected_user_delete.php │ │ │ ├── protected_user_edit.php │ │ │ ├── protected_user_manage.php │ │ │ ├── sql_change_password.php │ │ │ ├── sql_database_add.php │ │ │ ├── sql_database_delete.php │ │ │ ├── sql_delete_user.php │ │ │ ├── sql_manage.php │ │ │ ├── sql_user_add.php │ │ │ ├── subdomain_add.php │ │ │ ├── subdomain_delete.php │ │ │ ├── subdomain_edit.php │ │ │ ├── ticket_closed.php │ │ │ ├── ticket_create.php │ │ │ ├── ticket_delete.php │ │ │ ├── ticket_system.php │ │ │ ├── ticket_view.php │ │ │ ├── traffic_statistics.php │ │ │ └── webtools.php │ │ ├── errordocs/ │ │ │ ├── 400.html │ │ │ ├── 401.html │ │ │ ├── 403.html │ │ │ ├── 404.html │ │ │ ├── 405.html │ │ │ ├── 500.html │ │ │ ├── 502.html │ │ │ ├── 503.html │ │ │ └── inc/ │ │ │ ├── errordocs.css │ │ │ └── ie78overrides.css │ │ ├── imagecode.php │ │ ├── index.php │ │ ├── lostpassword.php │ │ ├── plugins.php │ │ ├── reseller/ │ │ │ ├── alias.php │ │ │ ├── alias_add.php │ │ │ ├── alias_delete.php │ │ │ ├── alias_edit.php │ │ │ ├── alias_order.php │ │ │ ├── change_user_interface.php │ │ │ ├── circular.php │ │ │ ├── domain_details.php │ │ │ ├── domain_edit.php │ │ │ ├── domain_status_change.php │ │ │ ├── hosting_plan.php │ │ │ ├── hosting_plan_add.php │ │ │ ├── hosting_plan_delete.php │ │ │ ├── hosting_plan_edit.php │ │ │ ├── index.php │ │ │ ├── ip_usage.php │ │ │ ├── language.php │ │ │ ├── layout.php │ │ │ ├── password_update.php │ │ │ ├── personal_change.php │ │ │ ├── profile.php │ │ │ ├── settings_lostpassword.php │ │ │ ├── settings_welcome_mail.php │ │ │ ├── ticket_closed.php │ │ │ ├── ticket_create.php │ │ │ ├── ticket_delete.php │ │ │ ├── ticket_system.php │ │ │ ├── ticket_view.php │ │ │ ├── user_add1.php │ │ │ ├── user_add2.php │ │ │ ├── user_add3.php │ │ │ ├── user_delete.php │ │ │ ├── user_edit.php │ │ │ ├── user_statistics.php │ │ │ ├── user_statistics_details.php │ │ │ └── users.php │ │ ├── robots.txt │ │ ├── shared/ │ │ │ ├── ftp_choose_dir.php │ │ │ ├── password_update.php │ │ │ └── personal_change.php │ │ └── tools/ │ │ └── index.php │ ├── resources/ │ │ ├── fonts/ │ │ │ ├── AUTHORS │ │ │ ├── CREDITS │ │ │ ├── ChangeLog │ │ │ ├── FreeMono.sfd │ │ │ ├── FreeMonoBold.sfd │ │ │ ├── FreeMonoBoldOblique.sfd │ │ │ ├── FreeMonoOblique.sfd │ │ │ ├── FreeSans.sfd │ │ │ ├── FreeSansBold.sfd │ │ │ ├── FreeSansBoldOblique.sfd │ │ │ ├── FreeSansOblique.sfd │ │ │ ├── FreeSerif.sfd │ │ │ ├── FreeSerifBold.sfd │ │ │ ├── FreeSerifBoldItalic.sfd │ │ │ ├── FreeSerifItalic.sfd │ │ │ ├── INSTALL │ │ │ └── README │ │ ├── i18n/ │ │ │ └── iMSCP.php │ │ ├── magic-1.mgc │ │ └── magic-2.mgc │ ├── src/ │ │ ├── Application.php │ │ ├── Assertion/ │ │ │ ├── AdminCanMoveCustomersAssertion.php │ │ │ ├── AdminCanMoveResellersAssertion.php │ │ │ ├── AdminCanViewAntiAntiRootkitsAssertion.php │ │ │ ├── AdminCanViewImscpUpdatesAssertion.php │ │ │ ├── AdminCanViewIpUsageStatisticsAssertion.php │ │ │ ├── AdminCanViewResellerStatisticsAssertion.php │ │ │ ├── AdminHasCircularFeatureAssertion.php │ │ │ ├── AdminHasSupportFeatureAssertion.php │ │ │ ├── CallbackAssertion.php │ │ │ ├── ClientCanAddSqlDatabasesAssertion.php │ │ │ ├── ClientHasBackupFeatureAssertion.php │ │ │ ├── ClientHasCustomDnsFeatureAssertion.php │ │ │ ├── ClientHasCustomErrorPagesFeatureAssertion.php │ │ │ ├── ClientHasDomainAliasesFeatureAssertion.php │ │ │ ├── ClientHasExternalMailFeatureAssertion.php │ │ │ ├── ClientHasFtpFeatureAssertion.php │ │ │ ├── ClientHasMailFeatureAssertion.php │ │ │ ├── ClientHasMailOrExternalMailFeatureAssertion.php │ │ │ ├── ClientHasPhpEditorFeatureAssertion.php │ │ │ ├── ClientHasProtectedAreasFeatureAssertion.php │ │ │ ├── ClientHasSqlFeatureAssertion.php │ │ │ ├── ClientHasSubdomainsFeatureAssertion.php │ │ │ ├── ClientHasSupportFeatureAssertion.php │ │ │ ├── ClientHasWebstatsFeatureAssertion.php │ │ │ ├── ResellerCanViewCustomerStatisticsAssertion.php │ │ │ ├── ResellerHasCircularFeatureAssertion.php │ │ │ ├── ResellerHasDomainAliasesFeatureAssertion.php │ │ │ └── ResellerHasSupportFeatureAssertion.php │ │ ├── Authentication/ │ │ │ ├── AuthEvent.php │ │ │ ├── AuthResult.php │ │ │ └── AuthService.php │ │ ├── Autoloader/ │ │ │ └── BcAutoloader.php │ │ ├── Config/ │ │ │ ├── ArrayConfig.php │ │ │ ├── DbConfig.php │ │ │ └── FileConfig.php │ │ ├── Crypt.php │ │ ├── Database/ │ │ │ ├── DatabaseEvent.php │ │ │ ├── DatabaseException.php │ │ │ ├── DatabaseMySQL.php │ │ │ ├── DatabaseResultSet.php │ │ │ └── DatabaseStatementEvent.php │ │ ├── Event/ │ │ │ ├── Event.php │ │ │ ├── EventAggregator.php │ │ │ ├── EventDescription.php │ │ │ ├── EventException.php │ │ │ ├── EventManager.php │ │ │ ├── EventManagerException.php │ │ │ ├── EventManagerInterface.php │ │ │ ├── Events.php │ │ │ └── Listener/ │ │ │ ├── EventListener.php │ │ │ ├── ListenerException.php │ │ │ ├── PriorityQueue.php │ │ │ ├── ResponseCollection.php │ │ │ └── SplPriorityQueue.php │ │ ├── Exception/ │ │ │ ├── AbstractExceptionWriter.php │ │ │ ├── BrowserExceptionWriter.php │ │ │ ├── Exception.php │ │ │ ├── ExceptionEvent.php │ │ │ ├── ExceptionHandler.php │ │ │ ├── MailExceptionWriter.php │ │ │ └── ProductionException.php │ │ ├── Filter/ │ │ │ └── GzipFilter.php │ │ ├── Handlers/ │ │ │ ├── ExceptionHandler.php │ │ │ ├── NotAllowedHandler.php │ │ │ └── NotFoundHandler.php │ │ ├── I18n/ │ │ │ ├── GettextParser.php │ │ │ └── ParserException.php │ │ ├── Json/ │ │ │ └── LazyDecoder.php │ │ ├── Net.php │ │ ├── PhpEditor.php │ │ ├── Plugin/ │ │ │ ├── AbstractPlugin.php │ │ │ ├── BruteForce.php │ │ │ ├── Filter/ │ │ │ │ └── PluginArchive.php │ │ │ ├── PluginActionStoppedException.php │ │ │ ├── PluginException.php │ │ │ ├── PluginManager.php │ │ │ ├── PluginRoutesInjector.php │ │ │ ├── PluginServiceProvidersInjector.php │ │ │ └── Validate/ │ │ │ └── PluginArchive.php │ │ ├── Registry.php │ │ ├── ServiceProvider.php │ │ ├── ServiceProviderInterface.php │ │ ├── Services.php │ │ ├── SystemInfo.php │ │ ├── TemplateEngine.php │ │ ├── Update/ │ │ │ ├── AbstractUpdate.php │ │ │ ├── DatabaseUpdate.php │ │ │ ├── UpdateException.php │ │ │ └── VersionUpdate.php │ │ ├── Uri/ │ │ │ ├── UriException.php │ │ │ └── UriRedirect.php │ │ ├── Utility/ │ │ │ └── OpcodeCache.php │ │ ├── Validate/ │ │ │ ├── CommonValidation.php │ │ │ └── Uri.php │ │ └── VirtualFileSystem.php │ └── themes/ │ └── default/ │ ├── admin/ │ │ ├── admin_add.phtml │ │ ├── admin_log.tpl │ │ ├── circular.tpl │ │ ├── custom_menus.tpl │ │ ├── domain_details.tpl │ │ ├── imscp_debugger.tpl │ │ ├── imscp_updates.tpl │ │ ├── index.tpl │ │ ├── ip_manage.tpl │ │ ├── ip_usage.tpl │ │ ├── language.tpl │ │ ├── layout.tpl │ │ ├── manage_reseller_owners.phtml │ │ ├── manage_reseller_users.phtml │ │ ├── multilanguage.phtml │ │ ├── navigation.php │ │ ├── reseller_add.phtml │ │ ├── reseller_edit.phtml │ │ ├── reseller_statistics.tpl │ │ ├── reseller_user_statistics.tpl │ │ ├── reseller_user_statistics_details.tpl │ │ ├── rootkit_log.tpl │ │ ├── server_statistic.tpl │ │ ├── service_statuses.tpl │ │ ├── sessions_manage.tpl │ │ ├── settings.tpl │ │ ├── settings_lostpassword.tpl │ │ ├── settings_maintenance_mode.tpl │ │ ├── settings_plugins.phtml │ │ ├── settings_ports.tpl │ │ ├── settings_server_traffic.tpl │ │ ├── settings_welcome_mail.tpl │ │ ├── system_info.tpl │ │ ├── ticket_closed.tpl │ │ ├── ticket_system.tpl │ │ ├── ticket_view.tpl │ │ └── users.phtml │ ├── assets/ │ │ ├── css/ │ │ │ ├── black.css │ │ │ ├── blue.css │ │ │ ├── green.css │ │ │ ├── ie78overrides.css │ │ │ ├── jquery-ui-black.css │ │ │ ├── jquery-ui-blue.css │ │ │ ├── jquery-ui-green.css │ │ │ ├── jquery-ui-red.css │ │ │ ├── jquery-ui-yellow.css │ │ │ ├── red.css │ │ │ ├── simple.css │ │ │ ├── ui.css │ │ │ └── yellow.css │ │ └── js/ │ │ ├── imscp.js │ │ └── jquery/ │ │ ├── jquery-ui.js │ │ ├── jquery.js │ │ └── plugins/ │ │ ├── dataTables.js │ │ ├── dataTables_naturalSorting.js │ │ └── pGenerator.js │ ├── client/ │ │ ├── alias_add.tpl │ │ ├── alias_edit.tpl │ │ ├── backup.tpl │ │ ├── cert_view.tpl │ │ ├── dns_edit.tpl │ │ ├── domain_edit.tpl │ │ ├── domains_manage.tpl │ │ ├── error_edit.tpl │ │ ├── error_pages.tpl │ │ ├── ftp_accounts.tpl │ │ ├── ftp_add.tpl │ │ ├── ftp_choose_dir.tpl │ │ ├── ftp_edit.tpl │ │ ├── index.tpl │ │ ├── language.tpl │ │ ├── layout.tpl │ │ ├── mail_accounts.phtml │ │ ├── mail_add.tpl │ │ ├── mail_autoresponder.tpl │ │ ├── mail_catchall.phtml │ │ ├── mail_catchall_add.phtml │ │ ├── mail_edit.tpl │ │ ├── mail_external.tpl │ │ ├── navigation.php │ │ ├── phpini.tpl │ │ ├── protect_it.tpl │ │ ├── protected_areas.tpl │ │ ├── puser_assign.tpl │ │ ├── puser_edit.tpl │ │ ├── puser_gadd.tpl │ │ ├── puser_manage.tpl │ │ ├── puser_uadd.tpl │ │ ├── sql_change_password.tpl │ │ ├── sql_database_add.tpl │ │ ├── sql_manage.tpl │ │ ├── sql_user_add.tpl │ │ ├── subdomain_add.tpl │ │ ├── subdomain_edit.tpl │ │ ├── ticket_closed.tpl │ │ ├── ticket_create.tpl │ │ ├── ticket_system.tpl │ │ ├── ticket_view.tpl │ │ ├── traffic_statistics.tpl │ │ └── webtools.tpl │ ├── index.tpl │ ├── info.php │ ├── lostpassword.tpl │ ├── message.tpl │ ├── reseller/ │ │ ├── alias.tpl │ │ ├── alias_add.tpl │ │ ├── alias_edit.tpl │ │ ├── circular.tpl │ │ ├── domain_details.tpl │ │ ├── domain_edit.tpl │ │ ├── hosting_plan.tpl │ │ ├── hosting_plan_add.tpl │ │ ├── hosting_plan_edit.tpl │ │ ├── index.tpl │ │ ├── ip_usage.tpl │ │ ├── language.tpl │ │ ├── layout.tpl │ │ ├── navigation.php │ │ ├── settings_lostpassword.tpl │ │ ├── settings_welcome_mail.tpl │ │ ├── ticket_closed.tpl │ │ ├── ticket_create.tpl │ │ ├── ticket_system.tpl │ │ ├── ticket_view.tpl │ │ ├── user_add1.tpl │ │ ├── user_add2.tpl │ │ ├── user_add3.phtml │ │ ├── user_statistics.tpl │ │ ├── user_statistics_details.tpl │ │ └── users.phtml │ └── shared/ │ ├── layouts/ │ │ ├── simple.tpl │ │ └── ui.tpl │ └── partials/ │ ├── client_list.phtml │ ├── ftp_choose_dir.tpl │ ├── password_update.phtml │ ├── personal_change.phtml │ ├── profile.tpl │ └── user_edit.phtml ├── i18n/ │ ├── .tx/ │ │ └── config │ ├── iMSCP.pot │ ├── po/ │ │ ├── ar.po │ │ ├── bg_BG.po │ │ ├── ca_ES.po │ │ ├── cs_CZ.po │ │ ├── da_DK.po │ │ ├── de_DE.po │ │ ├── el.po │ │ ├── en_GB.po │ │ ├── es_AR.po │ │ ├── es_ES.po │ │ ├── eu_ES.po │ │ ├── fa_IR.po │ │ ├── fi_FI.po │ │ ├── fr_FR.po │ │ ├── gl_ES.po │ │ ├── hu_HU.po │ │ ├── it_IT.po │ │ ├── ja_JP.po │ │ ├── lt_LT.po │ │ ├── nb_NO.po │ │ ├── nl_NL.po │ │ ├── pl_PL.po │ │ ├── pt_BR.po │ │ ├── pt_PT.po │ │ ├── ro_RO.po │ │ ├── ru_RU.po │ │ ├── sk_SK.po │ │ ├── sl.po │ │ ├── sv_SE.po │ │ ├── th_TH.po │ │ ├── tr_TR.po │ │ ├── uk_UA.po │ │ ├── vi.po │ │ ├── zh_CN.po │ │ ├── zh_HK.po │ │ └── zh_TW.po │ └── tools/ │ ├── compilePo │ └── makemsgs └── imscp-autoinstall
SYMBOL INDEX (1532 symbols across 220 files)
FILE: configs/debian/apache/vlogger.sql
type `httpd_vlogger` (line 1) | CREATE TABLE IF NOT EXISTS `httpd_vlogger` (
FILE: configs/debian/database/database.sql
type `admin` (line 5) | create table if not exists `admin` (
type `autoreplies_log` (line 45) | create table if not exists `autoreplies_log` (
type `config` (line 60) | create table if not exists `config` (
type `custom_menus` (line 95) | create table if not exists `custom_menus` (
type `domain` (line 112) | create table if not exists `domain` (
type `domain_aliasses` (line 162) | create table if not exists `domain_aliasses` (
type `domain_dns` (line 187) | create table if not exists `domain_dns` (
type `domain_traffic` (line 214) | create table if not exists `domain_traffic` (
type `email_tpls` (line 230) | create table if not exists `email_tpls` (
type `error_pages` (line 246) | create table if not exists `error_pages` (
type `ftp_group` (line 263) | create table if not exists `ftp_group` (
type `ftp_users` (line 276) | create table if not exists `ftp_users` (
type `hosting_plans` (line 296) | create table if not exists `hosting_plans` (
type `htaccess` (line 314) | create table if not exists `htaccess` (
type `htaccess_groups` (line 334) | create table if not exists `htaccess_groups` (
type `htaccess_users` (line 351) | create table if not exists `htaccess_users` (
type `log` (line 368) | create table if not exists `log` (
type `login` (line 383) | create table if not exists `login` (
type `mail_users` (line 402) | create table if not exists `mail_users` (
type `php_ini` (line 430) | create table if not exists `php_ini` (
type `plugin` (line 455) | create table if not exists `plugin` (
type `quotalimits` (line 479) | create table if not exists `quotalimits` (
type `quotatallies` (line 499) | create table if not exists `quotatallies` (
type `reseller_props` (line 517) | create table if not exists `reseller_props` (
type `server_ips` (line 560) | create table if not exists `server_ips` (
type `server_traffic` (line 578) | create table if not exists `server_traffic` (
type `sql_database` (line 597) | create table if not exists `sql_database` (
type `sql_user` (line 612) | create table if not exists `sql_user` (
type `ssl_certs` (line 629) | create table if not exists `ssl_certs` (
type `subdomain` (line 651) | create table if not exists `subdomain` (
type `subdomain_alias` (line 673) | create table if not exists `subdomain_alias` (
type `tickets` (line 695) | create table if not exists `tickets` (
type `user_gui_props` (line 718) | create table if not exists `user_gui_props` (
FILE: contrib/scripts/imscp_mail_from_csv.php
function cli_getMailData (line 45) | function cli_getMailData($domainName)
FILE: daemon/daemon_cmd.c
function helo_command (line 3) | int helo_command(int sockfd, char *buffer, char *cliaddr)
function backend_command (line 26) | int backend_command(int sockfd, char *buffer)
function bye_command (line 68) | int bye_command(int sockfd, char *buffer)
FILE: daemon/daemon_conn.c
function handle_client_connection (line 3) | void handle_client_connection(int sockfd, struct sockaddr *cliaddr)
FILE: daemon/daemon_conn.h
type sockaddr (line 11) | struct sockaddr
FILE: daemon/daemon_init.c
function daemon_init (line 3) | void daemon_init(void)
FILE: daemon/daemon_main.c
function main (line 3) | int main(int argc, char **argv)
FILE: daemon/daemon_main.h
type sockaddr (line 25) | struct sockaddr
FILE: daemon/daemon_msg.c
function say (line 12) | void say(char *format, char *message)
FILE: daemon/daemon_notify.c
function notify (line 3) | void notify(int status)
FILE: daemon/daemon_signals.c
function handle_signal (line 3) | void handle_signal(int signo)
FILE: daemon/daemon_sock_io.c
function read_data (line 3) | int read_data(int sockfd, char *buffer, size_t n)
function read_line (line 37) | int read_line(int sockfd, char *buffer, size_t n)
function write_data (line 61) | int write_data(int sockfd, char *src, size_t n)
function write_line (line 82) | int write_line(int sockfd, char *src, size_t n)
FILE: gui/include/Admin.php
function systemHasResellers (line 37) | function systemHasResellers($minNbResellers = 1)
function systemHasCustomers (line 58) | function systemHasCustomers($minNbCustomers = 1)
function systemHasAdminsOrResellersOrCustomers (line 81) | function systemHasAdminsOrResellersOrCustomers()
function systemHasResellersOrCustomers (line 92) | function systemHasResellersOrCustomers()
function systemHasManyAdmins (line 102) | function systemHasManyAdmins()
function systemHasAntiRootkits (line 120) | function systemHasAntiRootkits()
FILE: gui/include/Client.php
function user_trans_mail_type (line 40) | function user_trans_mail_type($mailAcc, $mailType)
function customerHasFeature (line 82) | function customerHasFeature($featureNames, $forceReload = false)
function customerHasMailOrExtMailFeatures (line 168) | function customerHasMailOrExtMailFeatures()
function customerHasDomain (line 183) | function customerHasDomain($domainName, $customerId)
function getMountpoints (line 256) | function getMountpoints($domainId)
function getDomainMountpoint (line 297) | function getDomainMountpoint($domainId, $domainType, $ownerId)
function parseMaildirsize (line 363) | function parseMaildirsize($maildirsizeFilePath, $refreshData = false)
function deleteSubdomain (line 432) | function deleteSubdomain($id)
function deleteSubdomainAlias (line 618) | function deleteSubdomainAlias($id)
function customerSqlDbLimitIsReached (line 809) | function customerSqlDbLimitIsReached()
FILE: gui/include/Counting.php
function get_administrators_count (line 37) | function get_administrators_count()
function get_resellers_count (line 51) | function get_resellers_count()
function get_customers_count (line 65) | function get_customers_count()
function get_domains_count (line 79) | function get_domains_count()
function get_subdomains_count (line 92) | function get_subdomains_count()
function get_domain_aliases_count (line 109) | function get_domain_aliases_count()
function get_mail_accounts_count (line 126) | function get_mail_accounts_count()
function get_ftp_users_count (line 159) | function get_ftp_users_count()
function get_sql_databases_count (line 171) | function get_sql_databases_count()
function get_sql_users_count (line 181) | function get_sql_users_count()
function get_objects_count (line 195) | function get_objects_count($table, $idField, $where = '')
function get_objects_counts (line 214) | function get_objects_counts()
function get_reseller_customers_count (line 239) | function get_reseller_customers_count($resellerId)
function get_reseller_domains_count (line 259) | function get_reseller_domains_count($resellerId)
function get_reseller_subdomains_count (line 280) | function get_reseller_subdomains_count($resellerId)
function get_reseller_domain_aliases_count (line 315) | function get_reseller_domain_aliases_count($resellerId)
function get_reseller_mail_accounts_count (line 339) | function get_reseller_mail_accounts_count($resellerId)
function get_reseller_ftp_users_count (line 380) | function get_reseller_ftp_users_count($resellerId)
function get_reseller_sql_databases_count (line 399) | function get_reseller_sql_databases_count($resellerId)
function get_reseller_sql_users_count (line 419) | function get_reseller_sql_users_count($resellerId)
function get_reseller_objects_counts (line 444) | function get_reseller_objects_counts($resellerId)
function get_customer_subdomains_count (line 467) | function get_customer_subdomains_count($domainId)
function get_customer_domain_aliases_count (line 497) | function get_customer_domain_aliases_count($domainId)
function get_customer_mail_accounts_count (line 518) | function get_customer_mail_accounts_count($domainId)
function get_customer_ftp_users_count (line 553) | function get_customer_ftp_users_count($customerId)
function get_customer_sql_databases_count (line 572) | function get_customer_sql_databases_count($domainId)
function get_customer_sql_users_count (line 586) | function get_customer_sql_users_count($domainId)
function get_customer_objects_counts (line 608) | function get_customer_objects_counts($customerId)
FILE: gui/include/Email.php
function get_email_tpl_data (line 43) | function get_email_tpl_data($userId, $tplName)
function set_email_tpl_data (line 91) | function set_email_tpl_data($userId, $tplName, $data)
function get_welcome_email (line 134) | function get_welcome_email($userId)
function set_welcome_email (line 175) | function set_welcome_email($userId, $data)
function get_lostpassword_activation_email (line 191) | function get_lostpassword_activation_email($userId)
function set_lostpassword_activation_email (line 228) | function set_lostpassword_activation_email($adminId, $data)
function get_lostpassword_password_email (line 244) | function get_lostpassword_password_email($userId)
function set_lostpassword_password_email (line 281) | function set_lostpassword_password_email($userId, $data)
function get_alias_order_email (line 297) | function get_alias_order_email($resellerId)
function encode_mime_header (line 332) | function encode_mime_header($string, $charset = 'UTF-8')
function send_mail (line 380) | function send_mail($data)
FILE: gui/include/Input.php
function clean_html (line 42) | function clean_html($text)
function clean_input (line 75) | function clean_input($input)
function filter_digits (line 90) | function filter_digits($input, $default = NULL)
function tohtml (line 118) | function tohtml($string, $escapeType = 'html')
function tojs (line 141) | function tojs($string)
function tourl (line 153) | function tourl($string)
function checkPasswordSyntax (line 167) | function checkPasswordSyntax(
function validates_username (line 237) | function validates_username($username, $min_char = 2, $max_char = 30)
function chk_email (line 254) | function chk_email($email, $localPartOnly = false)
function isValidDomainName (line 271) | function isValidDomainName($domainName)
function imscp_limit_check (line 345) | function imscp_limit_check($data, $extra = -1)
function checkMimeType (line 376) | function checkMimeType($pathFile, array $mimeTypes)
function getUserLoginDataForm (line 395) | function getUserLoginDataForm(
function getUserPersonalDataForm (line 551) | function getUserPersonalDataForm()
FILE: gui/include/Intl.php
function tr (line 40) | function tr($messageId, $substitution = NULL)
function ntr (line 81) | function ntr($singular, $plural, $number)
function replace_html (line 101) | function replace_html($string)
function i18n_buildLanguageIndex (line 124) | function i18n_buildLanguageIndex()
function i18n_getAvailableLanguages (line 204) | function i18n_getAvailableLanguages($localesOnly = false)
function i18n_importMachineObjectFile (line 242) | function i18n_importMachineObjectFile()
function i18n_changeDefaultLanguage (line 336) | function i18n_changeDefaultLanguage()
function l10n_addTranslations (line 392) | function l10n_addTranslations(
function i18n_getJsTranslations (line 445) | function i18n_getJsTranslations()
FILE: gui/include/Layout.php
function get_user_gui_props (line 42) | function get_user_gui_props($userId)
function set_page_message (line 81) | function set_page_message($message, $level = 'info')
function generatePageMessage (line 101) | function generatePageMessage(TemplateEngine $tpl)
function format_message (line 160) | function format_message($messages)
function layout_getAvailableColorSet (line 184) | function layout_getAvailableColorSet()
function layout_getUserLayoutColor (line 228) | function layout_getUserLayoutColor($userId)
function layout_init (line 259) | function layout_init(Event $event)
function layout_setUserLayoutColor (line 303) | function layout_setUserLayoutColor($userId, $color)
function layout_getUserLogo (line 354) | function layout_getUserLogo($searchForCreator = true, $returnDefault = t...
function layout_updateUserLogo (line 418) | function layout_updateUserLogo()
function layout_deleteUserLogo (line 497) | function layout_deleteUserLogo($logoFilePath = NULL, $onlyFile = false)
function layout_isUserLogo (line 542) | function layout_isUserLogo($logoPath)
function layout_LoadNavigation (line 560) | function layout_LoadNavigation()
function layout_isMainMenuLabelsVisible (line 599) | function layout_isMainMenuLabelsVisible($userId)
function layout_setMainMenuLabelsVisibility (line 620) | function layout_setMainMenuLabelsVisibility($userId, $visibility)
function layout_setMainMenuLabelsVisibilityEvt (line 639) | function layout_setMainMenuLabelsVisibilityEvt()
FILE: gui/include/Login.php
function init_login (line 44) | function init_login(EventManagerInterface $eventManager)
function login_credentials (line 70) | function login_credentials(AuthEvent $authEvent)
function login_checkDomainAccount (line 191) | function login_checkDomainAccount(Event $event)
function do_session_timeout (line 259) | function do_session_timeout()
function check_login (line 276) | function check_login($userLevel, $preventExternalLogin = true)
function change_user_interface (line 341) | function change_user_interface($fromId, $toId)
function redirectToUiLevel (line 440) | function redirectToUiLevel($actionScript = NULL)
FILE: gui/include/LostPassword.php
function createImage (line 37) | function createImage($strSessionVar)
function removeOldKeys (line 105) | function removeOldKeys($ttl)
function setUniqKey (line 124) | function setUniqKey($adminName, $uniqueKey)
function setPassword (line 144) | function setPassword($userType, $uniqueKey, $userPassword)
function uniqueKeyExists (line 179) | function uniqueKeyExists($uniqueKey)
function uniqkeygen (line 191) | function uniqkeygen()
function sendPasswordRequestValidation (line 206) | function sendPasswordRequestValidation($adminName)
function sendPassword (line 276) | function sendPassword($uniqueKey)
FILE: gui/include/Reseller.php
function reseller_limits_check (line 40) | function reseller_limits_check($resellerId, $hp)
function resellerHasFeature (line 254) | function resellerHasFeature($featureName, $forceReload = false)
function resellerHasCustomers (line 302) | function resellerHasCustomers($minNbCustomers = 1)
FILE: gui/include/Shared.php
function createDefaultMailAccounts (line 63) | function createDefaultMailAccounts(
function delete_autoreplies_log_entries (line 128) | function delete_autoreplies_log_entries()
function get_user_name (line 150) | function get_user_name($userId)
function imscp_domain_exists (line 177) | function imscp_domain_exists($domainName, $resellerId)
function get_domain_default_props (line 283) | function get_domain_default_props($domainAdminId, $createdBy = NULL)
function get_user_domain_id (line 322) | function get_user_domain_id($customerId)
function translate_dmn_status (line 350) | function translate_dmn_status($status, $showError = false)
function update_reseller_c_props (line 385) | function update_reseller_c_props($resellerId)
function change_domain_status (line 445) | function change_domain_status($customerId, $action)
function sql_delete_user (line 623) | function sql_delete_user($dmnId, $userId)
function delete_sql_database (line 706) | function delete_sql_database($dmnId, $dbId)
function deleteCustomer (line 779) | function deleteCustomer($customerId, $checkCreatedBy = false)
function deleteDomainAlias (line 1022) | function deleteDomainAlias(
function imscp_getResellerProperties (line 1246) | function imscp_getResellerProperties($resellerId, $forceReload = false)
function update_reseller_props (line 1279) | function update_reseller_props($resellerId, $props)
function sync_mailboxes_quota (line 1350) | function sync_mailboxes_quota($domainId, $newQuota)
function redirectTo (line 1425) | function redirectTo($location)
function array_decode_idna (line 1438) | function array_decode_idna($array, $asPath = false)
function array_encode_idna (line 1458) | function array_encode_idna($array, $asPath = false)
function encode_idna (line 1477) | function encode_idna($string)
function decode_idna (line 1499) | function decode_idna($string)
function utils_uploadFile (line 1528) | function utils_uploadFile($inputFieldName, $destPath)
function utils_getMaxFileUpload (line 1599) | function utils_getMaxFileUpload()
function utils_getPhpValueInBytes (line 1622) | function utils_getPhpValueInBytes($value)
function utils_normalizePath (line 1658) | function utils_normalizePath($path, $posixCompliant = false)
function utils_removeDir (line 1708) | function utils_removeDir($directory)
function utils_arrayMergeRecursive (line 1756) | function utils_arrayMergeRecursive(array $array1, array $array2)
function utils_arrayDiffRecursive (line 1784) | function utils_arrayDiffRecursive(array $array1, array $array2)
function is_number (line 1817) | function is_number($number)
function is_xhr (line 1834) | function is_xhr()
function isSerialized (line 1851) | function isSerialized($data)
function isJson (line 1879) | function isJson($string)
function isSecureRequest (line 1890) | function isSecureRequest()
function getRequestScheme (line 1917) | function getRequestScheme()
function getRequestHost (line 1929) | function getRequestHost()
function getRequestPort (line 1983) | function getRequestPort()
function getHttpHost (line 2019) | function getHttpHost()
function getRequestBaseUrl (line 2038) | function getRequestBaseUrl()
function write_log (line 2063) | function write_log($msg, $logLevel = E_USER_WARNING)
function send_add_user_auto_msg (line 2140) | function send_add_user_auto_msg(
function daemon_readAnswer (line 2180) | function daemon_readAnswer(&$socket)
function daemon_sendCommand (line 2217) | function daemon_sendCommand(&$socket, $command)
function send_request (line 2251) | function send_request()
function execute_query (line 2312) | function execute_query($query, $parameters = NULL)
function exec_query (line 2346) | function exec_query($query, $bind = NULL)
function quoteIdentifier (line 2371) | function quoteIdentifier($identifier)
function quoteValue (line 2389) | function quoteValue($value, $parameterType = PDO::PARAM_STR)
function unsetMessages (line 2409) | function unsetMessages()
function http_build_url (line 2480) | function http_build_url(
function bytesHuman (line 2590) | function bytesHuman($bytes, $unit = NULL, $decimals = 2, $power = 1024)
function mebibytesHuman (line 2699) | function mebibytesHuman($mebibyte, $unit = NULL, $decimals = 2, $power =...
function translate_limit_value (line 2714) | function translate_limit_value($value, $autosize = false, $to = NULL)
function getFirstDayOfMonth (line 2752) | function getFirstDayOfMonth($month = NULL, $year = NULL)
function getLastDayOfMonth (line 2773) | function getLastDayOfMonth($month = NULL, $year = NULL)
function getSqlAdminToolPackages (line 2791) | function getSqlAdminToolPackages()
function getWebFtpClientPackages (line 2806) | function getWebFtpClientPackages()
function getWebmailClientPackages (line 2821) | function getWebmailClientPackages()
function getWebStatisticPackages (line 2836) | function getWebStatisticPackages()
function getIpAddr (line 2851) | function getIpAddr()
FILE: gui/include/Statistics.php
function getPercentUsage (line 35) | function getPercentUsage($usage, $usageMax)
function getClientMonthlyTrafficStats (line 57) | function getClientMonthlyTrafficStats($domainId)
function getClientTrafficAndDiskStats (line 94) | function getClientTrafficAndDiskStats($clientId)
function getClientItemCountsAndLimits (line 129) | function getClientItemCountsAndLimits($clientId)
function getResellerStats (line 178) | function getResellerStats($resellerId)
FILE: gui/include/Tickets.php
function createTicket (line 42) | function createTicket(
function showTicketContent (line 85) | function showTicketContent(TemplateEngine $tpl, $ticketId, $userId)
function updateTicket (line 148) | function updateTicket(
function deleteTicket (line 261) | function deleteTicket($ticketId)
function deleteTickets (line 276) | function deleteTickets($status, $userId)
function generateTicketList (line 302) | function generateTicketList(TemplateEngine $tpl, $userId, $start, $count...
function closeTicket (line 413) | function closeTicket($ticketId)
function reopenTicket (line 436) | function reopenTicket($ticketId)
function getTicketStatus (line 465) | function getTicketStatus($ticketId)
function changeTicketStatus (line 502) | function changeTicketStatus($ticketId, $ticketStatus)
function getUserLevel (line 527) | function getUserLevel($ticketId)
function getTicketUrgency (line 550) | function getTicketUrgency($ticketUrgency)
function _getTicketSender (line 575) | function _getTicketSender($ticketId)
function _ticketGetLastDate (line 610) | function _ticketGetLastDate($ticketId)
function hasTicketSystem (line 641) | function hasTicketSystem($userId = NULL)
function _showTicketReplies (line 672) | function _showTicketReplies(TemplateEngine $tpl, $ticketId)
function sendTicketNotification (line 714) | function sendTicketNotification(
FILE: gui/include/View.php
function generateLanguagesList (line 47) | function generateLanguagesList(TemplateEngine $tpl, $selectedLanguage)
function generateDMYlists (line 70) | function generateDMYlists(TemplateEngine $tpl, $day, $month, $year, $nPa...
function generateNavigation (line 119) | function generateNavigation(TemplateEngine $tpl)
function getCustomMenus (line 329) | function getCustomMenus($userLevel)
function gen_admin_list (line 361) | function gen_admin_list(TemplateEngine $tpl)
function gen_reseller_list (line 413) | function gen_reseller_list(TemplateEngine $tpl)
function get_search_user_queries (line 462) | function get_search_user_queries(
function gen_search_user_fields (line 543) | function gen_search_user_fields(
function gen_user_domain_aliases_list (line 627) | function gen_user_domain_aliases_list(TemplateEngine $tpl, $domainId)
function gen_user_list (line 666) | function gen_user_list(TemplateEngine $tpl)
function get_admin_manage_users (line 843) | function get_admin_manage_users(TemplateEngine $tpl)
function reseller_generate_ip_list (line 860) | function reseller_generate_ip_list(TemplateEngine $tpl, $resellerId, $do...
function getDataTablesPluginTranslations (line 892) | function getDataTablesPluginTranslations($json = true, array $override =...
function showErrorPage (line 932) | function showErrorPage($code)
function showBadRequestErrorPage (line 985) | function showBadRequestErrorPage()
function showForbiddenErrorPage (line 995) | function showForbiddenErrorPage()
function showNotFoundErrorPage (line 1005) | function showNotFoundErrorPage()
function showMethodNotAllowedErrorPage (line 1015) | function showMethodNotAllowedErrorPage()
FILE: gui/public/admin/admin_add.php
function addAdminUser (line 41) | function addAdminUser(Zend_Form $form)
FILE: gui/public/admin/admin_log.php
function admin_sendJsonResponse (line 41) | function admin_sendJsonResponse($statusCode = 200, array $data = [])
function admin_clearLogs (line 75) | function admin_clearLogs()
function admin_getLogs (line 125) | function admin_getLogs()
FILE: gui/public/admin/circular.php
function admin_sendEmail (line 43) | function admin_sendEmail($senderName, $senderEmail, $subject, $body, $rc...
function admin_sendToAdministrators (line 78) | function admin_sendToAdministrators($senderName, $senderEmail, $subject,...
function admin_sendToResellers (line 107) | function admin_sendToResellers($senderName, $senderEmail, $subject, $body)
function admin_sendToCustomers (line 135) | function admin_sendToCustomers($senderName, $senderEmail, $subject, $body)
function admin_isValidCircular (line 163) | function admin_isValidCircular($senderName, $senderEmail, $subject, $body)
function admin_sendCircular (line 197) | function admin_sendCircular()
function generatePage (line 275) | function generatePage($tpl)
FILE: gui/public/admin/custom_menus.php
function admin_generateMenusList (line 40) | function admin_generateMenusList($tpl)
function admin_generateForm (line 85) | function admin_generateForm($tpl)
function admin_isValidMenu (line 168) | function admin_isValidMenu($menuName, $menuLink, $menuTarget, $menuLevel...
function admin_addMenu (line 211) | function admin_addMenu()
function admin_updateMenu (line 243) | function admin_updateMenu($menuId)
function admin_deleteMenu (line 273) | function admin_deleteMenu($menuId)
FILE: gui/public/admin/domain_details.php
function admin_gen_mail_quota_limit_mgs (line 38) | function admin_gen_mail_quota_limit_mgs($customerId)
function admin_generatePage (line 55) | function admin_generatePage($tpl, $domainId)
FILE: gui/public/admin/imscp_debugger.php
function debugger_getUserErrors (line 43) | function debugger_getUserErrors(TemplateEngine $tpl)
function debugger_getDmnErrors (line 78) | function debugger_getDmnErrors(TemplateEngine $tpl)
function debugger_getAlsErrors (line 113) | function debugger_getAlsErrors(TemplateEngine $tpl)
function debugger_getSubErrors (line 149) | function debugger_getSubErrors(TemplateEngine $tpl)
function debugger_getAlssubErrors (line 186) | function debugger_getAlssubErrors(TemplateEngine $tpl)
function debugger_getCustomDNSErrors (line 223) | function debugger_getCustomDNSErrors(TemplateEngine $tpl)
function debugger_getHtaccessErrors (line 259) | function debugger_getHtaccessErrors(TemplateEngine $tpl)
function debugger_getFtpUserErrors (line 302) | function debugger_getFtpUserErrors(TemplateEngine $tpl)
function debugger_getMailsErrors (line 338) | function debugger_getMailsErrors(TemplateEngine $tpl)
function debugger_getIpErrors (line 428) | function debugger_getIpErrors(TemplateEngine $tpl)
function debugger_getPluginItemErrors (line 464) | function debugger_getPluginItemErrors(TemplateEngine $tpl)
function debugger_changePluginItemStatus (line 508) | function debugger_changePluginItemStatus($pluginName, $table, $field, $i...
function debugger_countRequests (line 530) | function debugger_countRequests($statusField = NULL, $tableName = NULL)
FILE: gui/public/admin/imscp_updates.php
function admin_generatePage (line 40) | function admin_generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/index.php
function admin_generateSupportQuestionsMessage (line 39) | function admin_generateSupportQuestionsMessage()
function admin_generateUpdateMessages (line 61) | function admin_generateUpdateMessages()
function admin_getAdminGeneralInfo (line 84) | function admin_getAdminGeneralInfo(TemplateEngine $tpl)
function admin_generateServerTrafficInfo (line 109) | function admin_generateServerTrafficInfo(TemplateEngine $tpl)
FILE: gui/public/admin/ip_manage.php
function sendJsonResponse (line 42) | function sendJsonResponse($statusCode = 200, array $data = [])
function generatePage (line 75) | function generatePage($tpl)
function generateIpsList (line 98) | function generateIpsList($tpl)
function generateDevicesList (line 184) | function generateDevicesList($tpl)
function checkIpData (line 215) | function checkIpData($ipAddr, $ipNetmask, $ipConfigMode, $ipCard)
function editIpAddr (line 265) | function editIpAddr()
function addIpAddr (line 320) | function addIpAddr()
FILE: gui/public/admin/ip_usage.php
function listIPDomains (line 38) | function listIPDomains(TemplateEngine $tpl)
FILE: gui/public/admin/layout.php
function admin_generateLayoutColorForm (line 38) | function admin_generateLayoutColorForm(TemplateEngine $tpl)
FILE: gui/public/admin/manage_reseller_owners.php
function moveReseller (line 41) | function moveReseller($resellerId, $fromAdministratorId, $toAdministrato...
function moveResellers (line 70) | function moveResellers()
function generatePage (line 108) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/manage_reseller_users.php
function moveCustomer (line 44) | function moveCustomer($customerId, $fromResellerId, $toResellerId)
function moveCustomers (line 180) | function moveCustomers()
function generatePage (line 219) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/multilanguage.php
function admin_generateLanguagesList (line 39) | function admin_generateLanguagesList(TemplateEngine $tpl)
FILE: gui/public/admin/profile.php
function generatePage (line 39) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/reseller_add.php
function getFormData (line 43) | function getFormData()
function generateIpListForm (line 113) | function generateIpListForm(TemplateEngine $tpl)
function generateLimitsForm (line 148) | function generateLimitsForm(TemplateEngine $tpl)
function generateFeaturesForm (line 180) | function generateFeaturesForm(TemplateEngine $tpl)
function addResellerUser (line 255) | function addResellerUser(Zend_Form $form)
function generatePage (line 459) | function generatePage(TemplateEngine $tpl, Zend_Form $form)
FILE: gui/public/admin/reseller_edit.php
function getFormData (line 45) | function getFormData($resellerId, $forUpdate = false)
function generateIpListForm (line 196) | function generateIpListForm(TemplateEngine $tpl)
function generateLimitsForm (line 238) | function generateLimitsForm(TemplateEngine $tpl)
function generateFeaturesForm (line 272) | function generateFeaturesForm(TemplateEngine $tpl)
function updateResellerUser (line 353) | function updateResellerUser(Zend_Form $form)
function checkResellerLimit (line 726) | function checkResellerLimit($newLimit, $assignedByReseller, $consumedByC...
function generatePage (line 798) | function generatePage(TemplateEngine $tpl, Zend_Form $form)
FILE: gui/public/admin/reseller_statistics.php
function _generateResellerStatistics (line 41) | function _generateResellerStatistics(TemplateEngine $tpl, $resellerId, $...
function generatePage (line 102) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/reseller_user_statistics.php
function _generateUserStatistics (line 40) | function _generateUserStatistics(TemplateEngine $tpl, $adminId)
function generatePage (line 82) | function generatePage(TemplateEngine $tpl, $resellerId)
FILE: gui/public/admin/reseller_user_statistics_details.php
function getUserTraffic (line 41) | function getUserTraffic($domainId, $startDate, $endDate)
function generatePage (line 71) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/server_statistic.php
function getServerTraffic (line 39) | function getServerTraffic($startDate, $endDate)
function generateServerStatsByDay (line 79) | function generateServerStatsByDay(TemplateEngine $tpl, $day, $month, $year)
function generateServerStatsByMonth (line 157) | function generateServerStatsByMonth(TemplateEngine $tpl, $month, $year)
function generatePage (line 234) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/service_statuses.php
function generatePage (line 40) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/sessions_manage.php
function kill_session (line 38) | function kill_session()
function client_generatePage (line 78) | function client_generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/settings_plugins.php
function execPluginAction (line 46) | function execPluginAction(PluginManager $pm, $action, $plugin)
function generatePage (line 87) | function generatePage(TemplateEngine $tpl, PluginManager $pm)
FILE: gui/public/admin/settings_ports.php
function validatesService (line 48) | function validatesService($name, $ip, $port, $protocol, $show, $index = '')
function deleteService (line 117) | function deleteService($serviceName)
function addOrUpdateServices (line 156) | function addOrUpdateServices($mode = 'add')
function generatePage (line 293) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/admin/settings_server_traffic.php
function admin_updateServerTrafficSettings (line 41) | function admin_updateServerTrafficSettings($trafficLimit, $trafficWarning)
function admin_generatePage (line 91) | function admin_generatePage(TemplateEngine $tpl, $trafficLimit, $traffic...
FILE: gui/public/admin/user_delete.php
function admin_deleteUser (line 40) | function admin_deleteUser($userId)
function admin_validateUserDeletion (line 127) | function admin_validateUserDeletion($userId)
FILE: gui/public/admin/user_edit.php
function updateUserData (line 42) | function updateUserData(Zend_Form $form, $userId)
function generatePage (line 137) | function generatePage(TemplateEngine $tpl, Zend_Form $form, $userId)
FILE: gui/public/client/alias_add.php
function send_alias_order_email (line 45) | function send_alias_order_email($aliasName)
function getDomainsList (line 87) | function getDomainsList()
function generatePage (line 154) | function generatePage(TemplateEngine $tpl)
function addDomainAlias (line 231) | function addDomainAlias()
FILE: gui/public/client/alias_edit.php
function _client_getAliasData (line 44) | function _client_getAliasData($domainAliasId)
function client_generatePage (line 81) | function client_generatePage(TemplateEngine $tpl)
function client_editDomainAlias (line 194) | function client_editDomainAlias()
FILE: gui/public/client/backup.php
function scheduleBackupRestoration (line 39) | function scheduleBackupRestoration($userId)
FILE: gui/public/client/cert_view.php
function _client_getDomainName (line 42) | function _client_getDomainName($domainId, $domainType)
function _client_updateDomainStatus (line 99) | function _client_updateDomainStatus($domainId, $domainType)
function _client_generateOpenSSLConfFile (line 125) | function _client_generateOpenSSLConfFile($data)
function client_generateSelfSignedCert (line 184) | function client_generateSelfSignedCert($domainName)
function client_addSslCert (line 251) | function client_addSslCert($domainId, $domainType)
function client_deleteSslCert (line 433) | function client_deleteSslCert($domainId, $domainType)
function client_generatePage (line 478) | function client_generatePage(TemplateEngine $tpl, $domainId, $domainType)
FILE: gui/public/client/dns_edit.php
function getQuotedAndUnquotedStrings (line 42) | function getQuotedAndUnquotedStrings($string)
function client_getPost (line 96) | function client_getPost($varname, $defaultValue = '')
function hasConflict (line 114) | function hasConflict($rrName, $rrType, $isNewRecord, &$errorString)
function client_validate_NAME (line 149) | function client_validate_NAME($name, &$errorString)
function client_validate_CNAME (line 180) | function client_validate_CNAME($cname, &$errorString)
function client_validate_A (line 205) | function client_validate_A($ip, &$errorString)
function client_validate_AAAA (line 227) | function client_validate_AAAA($ip, &$errorString)
function client_validate_MX (line 250) | function client_validate_MX($pref, $host, &$errorString)
function client_validate_NS (line 276) | function client_validate_NS($host, &$errorString)
function client_validateAndFormat_TXT (line 298) | function client_validateAndFormat_TXT(&$data, &$errorString)
function client_validate_SRV (line 365) | function client_validate_SRV($srvName, $proto, $priority, $weight, $port...
function client_validate_TTL (line 418) | function client_validate_TTL($ttl)
function client_create_options (line 434) | function client_create_options($data, $value = NULL)
function client_decodeDnsRecordData (line 452) | function client_decodeDnsRecordData($data)
function client_saveDnsRecord (line 534) | function client_saveDnsRecord($dnsRecordId)
function generatePage (line 901) | function generatePage(TemplateEngine $tpl, $dnsRecordId)
FILE: gui/public/client/domain_edit.php
function _client_getDomainData (line 44) | function _client_getDomainData($domainId)
function client_generatePage (line 79) | function client_generatePage(TemplateEngine $tpl)
function client_editDomain (line 179) | function client_editDomain()
FILE: gui/public/client/domains_manage.php
function generateDomainRedirectAndEditLink (line 42) | function generateDomainRedirectAndEditLink($id, $status, $redirectUrl)
function generateDomainsList (line 65) | function generateDomainsList(TemplateEngine $tpl)
function generateDomainAliasAction (line 143) | function generateDomainAliasAction($id, $status)
function generateDomainAliasRedirectAndEditLink (line 171) | function generateDomainAliasRedirectAndEditLink($id, $status, $redirectUrl)
function generateDomainAliasesList (line 202) | function generateDomainAliasesList(TemplateEngine $tpl)
function generateSubdomainAction (line 307) | function generateSubdomainAction($id, $subdomainType, $status)
function generateSubdomainRedirectAndEditLink (line 342) | function generateSubdomainRedirectAndEditLink($id, $subdomainType, $stat...
function generateSubdomainsList (line 365) | function generateSubdomainsList(TemplateEngine $tpl)
function generateCustomDnsRecordAction (line 501) | function generateCustomDnsRecordAction($action, $id, $status, $ownedBy =...
function generateCustomDnsRecordsList (line 524) | function generateCustomDnsRecordsList(TemplateEngine $tpl)
FILE: gui/public/client/error_edit.php
function writeErrorPage (line 39) | function writeErrorPage($eid)
function editErrorPage (line 51) | function editErrorPage($eid)
function generatePage (line 73) | function generatePage(TemplateEngine $tpl, $eid)
FILE: gui/public/client/ftp_accounts.php
function generatePage (line 39) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/client/ftp_add.php
function generateDomainTypeList (line 47) | function generateDomainTypeList($mainDmnId, TemplateEngine $tpl): void
function getDomainList (line 113) | function getDomainList($mainDmnName, $mainDmnId, $dmnType = 'dmn'): array
function addAccount (line 180) | function addAccount(): bool
function generatePage (line 361) | function generatePage(TemplateEngine $tpl): void
FILE: gui/public/client/ftp_edit.php
function updateFtpAccount (line 42) | function updateFtpAccount($userid)
function generatePage (line 126) | function generatePage(TemplateEngine $tpl, $ftpUserId)
FILE: gui/public/client/index.php
function gen_num_limit_msg (line 40) | function gen_num_limit_msg($num, $limit)
function gen_mail_quota_limit_mgs (line 58) | function gen_mail_quota_limit_mgs()
function client_generateSupportSystemNotices (line 77) | function client_generateSupportSystemNotices()
function client_generateTrafficUsageBar (line 103) | function client_generateTrafficUsageBar(TemplateEngine $tpl, $usage, $ma...
function client_generateDiskUsageBar (line 131) | function client_generateDiskUsageBar(TemplateEngine $tpl, $usage, $maxUs...
function client_generateFeatureStatus (line 158) | function client_generateFeatureStatus(TemplateEngine $tpl)
function client_makeTrafficUsage (line 215) | function client_makeTrafficUsage($domainId)
function _client_getDomainRemainingTime (line 251) | function _client_getDomainRemainingTime($domainExpireDate)
function client_generateDomainExpiresInformation (line 273) | function client_generateDomainExpiresInformation(TemplateEngine $tpl)
FILE: gui/public/client/layout.php
function client_generateLayoutColorForm (line 38) | function client_generateLayoutColorForm(TemplateEngine $tpl)
FILE: gui/public/client/mail_accounts.php
function countDefaultMailAccounts (line 47) | function countDefaultMailAccounts($mainDmnId)
function generateDynamicTplParts (line 87) | function generateDynamicTplParts($tpl, $mailAcc, $mailType, $mailStatus,...
function generateMailAccountsList (line 166) | function generateMailAccountsList($tpl, $mainDmnId)
function generatePage (line 319) | function generatePage($tpl)
FILE: gui/public/client/mail_add.php
function getDomainsList (line 42) | function getDomainsList()
function addMailAccount (line 88) | function addMailAccount()
function generatePage (line 303) | function generatePage($tpl)
FILE: gui/public/client/mail_autoresponder_disable.php
function checkMailAccount (line 43) | function checkMailAccount($mailAccountId)
function deactivateAutoresponder (line 66) | function deactivateAutoresponder($mailAccountId)
FILE: gui/public/client/mail_autoresponder_edit.php
function checkMailAccount (line 43) | function checkMailAccount($mailAccountId)
function updateAutoresponderMessage (line 66) | function updateAutoresponderMessage($mailAccountId, $autoresponderMessage)
function generatePage (line 93) | function generatePage($tpl, $mailAccountId)
FILE: gui/public/client/mail_autoresponder_enable.php
function checkMailAccount (line 44) | function checkMailAccount($mailAccountId)
function activateAutoresponder (line 68) | function activateAutoresponder($mailAccountId, $autoresponderMessage)
function generatePage (line 95) | function generatePage($tpl, $mailAccountId)
FILE: gui/public/client/mail_catchall.php
function generateCatchallItem (line 44) | function generateCatchallItem(TemplateEngine $tpl, $domainName, $mailId,...
function generatePage (line 91) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/client/mail_catchall_add.php
function getCatchallDomain (line 40) | function getCatchallDomain($catchallDomainId, $catchalType)
function addCatchallAccount (line 98) | function addCatchallAccount($catchallDomainId, $catchallDomain, $catchal...
function generatePage (line 206) | function generatePage($tpl, $catchallDomainId, $catchallType)
FILE: gui/public/client/mail_delete.php
function deleteMailAccount (line 44) | function deleteMailAccount($mailId, $domainId, FileConfig $config, FileC...
FILE: gui/public/client/mail_edit.php
function client_getEmailAccountData (line 43) | function client_getEmailAccountData($mailId)
function client_editMailAccount (line 67) | function client_editMailAccount()
function client_generatePage (line 268) | function client_generatePage(TemplateEngine $tpl)
FILE: gui/public/client/mail_external.php
function updateExternalMailFeature (line 40) | function updateExternalMailFeature($action, $domainId, $domainType)
function generateItem (line 90) | function generateItem(TemplateEngine $tpl, $externalMail, $domainId, $do...
function generateItemList (line 135) | function generateItemList(TemplateEngine $tpl, $domainId, $domainName)
function generatePage (line 164) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/client/phpini.php
function isDomainStatusOk (line 43) | function isDomainStatusOk($domainId, $domainType)
function getDomainData (line 80) | function getDomainData($configLevel)
function updatePhpConfig (line 129) | function updatePhpConfig($phpini, $configLevel)
function generatePage (line 228) | function generatePage(TemplateEngine $tpl, PhpEditor $phpini, FileConfig...
FILE: gui/public/client/profile.php
function generatePage (line 39) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/client/protected_areas.php
function generatePage (line 39) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/client/protected_areas_add.php
function isAllowedDir (line 42) | function isAllowedDir($directory)
function handleProtectedArea (line 67) | function handleProtectedArea()
function generatePage (line 204) | function generatePage($tpl)
FILE: gui/public/client/protected_group_add.php
function client_addHtaccessGroup (line 37) | function client_addHtaccessGroup()
FILE: gui/public/client/protected_user_add.php
function client_addHtaccessUser (line 38) | function client_addHtaccessUser()
FILE: gui/public/client/protected_user_assign.php
function client_getHtaccessUsername (line 39) | function client_getHtaccessUsername($htuserId, $domainId)
function client_generatePage (line 65) | function client_generatePage(TemplateEngine $tpl)
function client_addHtaccessUserToHtaccessGroup (line 139) | function client_addHtaccessUserToHtaccessGroup()
function client_removeHtaccessUserFromHtaccessGroup (line 195) | function client_removeHtaccessUserFromHtaccessGroup()
FILE: gui/public/client/protected_user_edit.php
function client_updateHtaccessUser (line 40) | function client_updateHtaccessUser($domainId, $htuserId)
FILE: gui/public/client/protected_user_manage.php
function _client_generateUserAction (line 39) | function _client_generateUserAction($status)
function _client_generateHtgroupAction (line 60) | function _client_generateHtgroupAction($status)
function client_generateUsersList (line 75) | function client_generateUsersList(TemplateEngine $tpl)
function client_generateGroupsList (line 114) | function client_generateGroupsList(TemplateEngine $tpl)
FILE: gui/public/client/sql_change_password.php
function updateSqlUserPassword (line 40) | function updateSqlUserPassword($sqluId)
function generatePage (line 118) | function generatePage(TemplateEngine $tpl, $sqluId)
function checkSqlUserPerms (line 139) | function checkSqlUserPerms($sqlUserId)
FILE: gui/public/client/sql_database_add.php
function addSqlDb (line 40) | function addSqlDb()
function generatePage (line 105) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/client/sql_manage.php
function canAddSQLUserForDatabase (line 38) | function canAddSQLUserForDatabase($sqldId)
function generateDatabaseSqlUserList (line 74) | function generateDatabaseSqlUserList(TemplateEngine $tpl, $sqldId)
function generatePage (line 112) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/client/sql_user_add.php
function checkSqlUserPermissions (line 44) | function checkSqlUserPermissions(TemplateEngine $tpl, $sqldId)
function generateSqlUserList (line 76) | function generateSqlUserList(TemplateEngine $tpl, $sqldId)
function isSqlUser (line 123) | function isSqlUser($sqlUser, $sqlUserHost)
function addSqlUser (line 137) | function addSqlUser($sqldId)
function generatePage (line 320) | function generatePage(TemplateEngine $tpl, $sqldId)
FILE: gui/public/client/subdomain_add.php
function getDomainsList (line 44) | function getDomainsList()
function generatePage (line 108) | function generatePage($tpl)
function addSubdomain (line 195) | function addSubdomain()
FILE: gui/public/client/subdomain_edit.php
function _client_getSubdomainData (line 45) | function _client_getSubdomainData($subdomainId, $subdomainType)
function client_generatePage (line 116) | function client_generatePage(TemplateEngine $tpl)
function client_editSubdomain (line 239) | function client_editSubdomain()
FILE: gui/public/client/traffic_statistics.php
function getUserTraffic (line 42) | function getUserTraffic($domainId, $startDate, $endDate)
function generatePage (line 72) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/client/webtools.php
function client_hideDisabledFeatures (line 37) | function client_hideDisabledFeatures(TemplateEngine $tpl)
FILE: gui/public/reseller/alias.php
function reseller_getDatatable (line 38) | function reseller_getDatatable()
FILE: gui/public/reseller/alias_add.php
function getCustomersList (line 43) | function getCustomersList()
function getDomainsList (line 77) | function getDomainsList($customerId)
function getJsonDomainsList (line 144) | function getJsonDomainsList($customerId)
function generatePage (line 164) | function generatePage($tpl)
function addDomainAlias (line 253) | function addDomainAlias()
FILE: gui/public/reseller/alias_edit.php
function _reseller_getAliasData (line 44) | function _reseller_getAliasData($domainAliasId)
function reseller_generatePage (line 83) | function reseller_generatePage($tpl)
function reseller_editDomainAlias (line 195) | function reseller_editDomainAlias()
FILE: gui/public/reseller/circular.php
function reseller_sendEmail (line 43) | function reseller_sendEmail($senderName, $senderEmail, $subject, $body, ...
function reseller_sendToCustomers (line 78) | function reseller_sendToCustomers($senderName, $senderEmail, $subject, $...
function reseller_isValidCircular (line 107) | function reseller_isValidCircular($senderName, $senderEmail, $subject, $...
function reseller_sendCircular (line 138) | function reseller_sendCircular()
function reseller_generatePageData (line 188) | function reseller_generatePageData(TemplateEngine $tpl)
FILE: gui/public/reseller/domain_details.php
function reseller_gen_mail_quota_limit_mgs (line 45) | function reseller_gen_mail_quota_limit_mgs($customerId)
function generatePage (line 62) | function generatePage(TemplateEngine $tpl, $domainId)
FILE: gui/public/reseller/domain_edit.php
function getMailData (line 44) | function getMailData($domainId, $mailQuota)
function reseller_getResellerProps (line 75) | function reseller_getResellerProps($resellerId)
function reseller_getDomainProps (line 96) | function reseller_getDomainProps($domainId)
function getData (line 126) | function &getData($domainId, $forUpdate = false)
function generatePage (line 266) | function generatePage(TemplateEngine $tpl, &$data)
function generateLimitsForm (line 281) | function generateLimitsForm(TemplateEngine $tpl, &$data)
function generateFeaturesForm (line 421) | function generateFeaturesForm(TemplateEngine $tpl, &$data)
function reseller_checkAndUpdateData (line 607) | function reseller_checkAndUpdateData($domainId)
function isValidServiceLimit (line 1045) | function isValidServiceLimit(
FILE: gui/public/reseller/hosting_plan.php
function generatePage (line 39) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/reseller/hosting_plan_add.php
function generatePhpBlock (line 41) | function generatePhpBlock(TemplateEngine $tpl)
function generatePage (line 160) | function generatePage(TemplateEngine $tpl)
function checkInputData (line 256) | function checkInputData()
function addHostingPlan (line 431) | function addHostingPlan()
FILE: gui/public/reseller/hosting_plan_edit.php
function loadHostingPlan (line 40) | function loadHostingPlan()
function generatePhpBlock (line 90) | function generatePhpBlock(TemplateEngine $tpl)
function generatePage (line 209) | function generatePage(TemplateEngine $tpl)
function checkInputData (line 306) | function checkInputData()
function updateHostingPlan (line 487) | function updateHostingPlan()
FILE: gui/public/reseller/index.php
function generateSupportQuestionsMessage (line 40) | function generateSupportQuestionsMessage()
function generateOrdersAliasesMessage (line 60) | function generateOrdersAliasesMessage()
function generateTrafficUsageBar (line 90) | function generateTrafficUsageBar(TemplateEngine $tpl, $trafficUsageBytes...
function generateDiskUsageBar (line 111) | function generateDiskUsageBar(TemplateEngine $tpl, $diskspaceUsageBytes,...
function generatePage (line 132) | function generatePage(TemplateEngine $tpl, $resellerId, $resellerName)
FILE: gui/public/reseller/ip_usage.php
function generatePage (line 38) | function generatePage($tpl)
FILE: gui/public/reseller/layout.php
function reseller_generateLayoutColorForm (line 39) | function reseller_generateLayoutColorForm(TemplateEngine $tpl)
FILE: gui/public/reseller/profile.php
function generatePage (line 39) | function generatePage($tpl)
FILE: gui/public/reseller/user_add1.php
function reseller_checkData (line 40) | function reseller_checkData()
function reseller_generatePage (line 199) | function reseller_generatePage(TemplateEngine $tpl)
FILE: gui/public/reseller/user_add2.php
function getFirstStepData (line 40) | function getFirstStepData()
function generatePage (line 66) | function generatePage(TemplateEngine $tpl)
function getHostingPlanData (line 323) | function getHostingPlanData()
function checkInputData (line 385) | function checkInputData()
FILE: gui/public/reseller/user_add3.php
function getPreviousStepData (line 41) | function getPreviousStepData()
function addCustomer (line 85) | function addCustomer(Zend_Form $form)
function generatePage (line 314) | function generatePage(TemplateEngine $tpl, Zend_Form $form)
FILE: gui/public/reseller/user_edit.php
function updateUserData (line 44) | function updateUserData(Form $form, $userId)
function generatePage (line 135) | function generatePage(TemplateEngine $tpl, Form $form, $userId)
FILE: gui/public/reseller/user_statistics.php
function _generateUserStatistics (line 41) | function _generateUserStatistics(TemplateEngine $tpl, $adminId)
function generatePage (line 82) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/reseller/user_statistics_details.php
function getDomainTraffic (line 41) | function getDomainTraffic($domainId, $startDate, $endDate)
function generatePage (line 71) | function generatePage(TemplateEngine $tpl)
FILE: gui/public/reseller/users.php
function check_external_events (line 37) | function check_external_events()
FILE: gui/public/shared/ftp_choose_dir.php
function isHiddenDir (line 41) | function isHiddenDir(string $directory): bool
function isUnselectable (line 62) | function isUnselectable(string $directory): bool
function generateDirectoryList (line 85) | function generateDirectoryList(TemplateEngine $tpl): void
FILE: gui/public/shared/password_update.php
function updatePassword (line 38) | function updatePassword()
FILE: gui/public/shared/personal_change.php
function updatePersonalData (line 39) | function updatePersonalData(Form $form)
function generatePage (line 90) | function generatePage(TemplateEngine $tpl, Form $form)
FILE: gui/src/Application.php
class Application (line 56) | class Application
method __construct (line 130) | public function __construct(ClassLoader $autoloader, $env)
method getAutoloader (line 151) | public function getAutoloader()
method getSlimApplication (line 169) | public function getSlimApplication()
method getContainer (line 188) | public function getContainer()
method getComposerAutoloader (line 202) | public function getComposerAutoloader()
method getDbConfig (line 212) | public function getDbConfig()
method getTranslator (line 226) | public function getTranslator()
method bootstrap (line 241) | public function bootstrap($configFilePath)
method setErrorHandling (line 272) | protected function setErrorHandling()
method getEnvironment (line 317) | public function getEnvironment()
method setEncoding (line 327) | protected function setEncoding()
method startSession (line 344) | protected function startSession()
method loadConfig (line 377) | protected function loadConfig($configFilePath)
method getCache (line 605) | public function getCache()
method getEventsManager (line 641) | public function getEventsManager()
method setTimezone (line 655) | protected function setTimezone()
method getConfig (line 670) | public function getConfig()
method initDatabase (line 684) | protected function initDatabase()
method mergeConfig (line 746) | protected function mergeConfig()
method getDatabase (line 773) | public function getDatabase()
method setUserGuiProperties (line 787) | protected function setUserGuiProperties()
method initLocalization (line 844) | protected function initLocalization()
method initLayout (line 947) | protected function initLayout()
method loadNavigation (line 983) | protected function loadNavigation()
method loadPlugins (line 1004) | protected function loadPlugins()
method getPluginManager (line 1033) | public function getPluginManager()
FILE: gui/src/Assertion/AdminCanMoveCustomersAssertion.php
class AdminCanMoveCustomersAssertion (line 36) | class AdminCanMoveCustomersAssertion implements Zend_Acl_Assert_Interface
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/AdminCanMoveResellersAssertion.php
class AdminCanMoveResellersAssertion (line 36) | class AdminCanMoveResellersAssertion implements Zend_Acl_Assert_Interface
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/AdminCanViewAntiAntiRootkitsAssertion.php
class AdminCanViewAntiAntiRootkitsAssertion (line 36) | class AdminCanViewAntiAntiRootkitsAssertion implements Zend_Acl_Assert_I...
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/AdminCanViewImscpUpdatesAssertion.php
class AdminCanViewImscpUpdatesAssertion (line 37) | class AdminCanViewImscpUpdatesAssertion implements Zend_Acl_Assert_Inter...
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/AdminCanViewIpUsageStatisticsAssertion.php
class AdminCanViewIpUsageStatisticsAssertion (line 36) | class AdminCanViewIpUsageStatisticsAssertion
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/AdminCanViewResellerStatisticsAssertion.php
class AdminCanViewResellerStatisticsAssertion (line 36) | class AdminCanViewResellerStatisticsAssertion
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/AdminHasCircularFeatureAssertion.php
class AdminHasCircularFeatureAssertion (line 36) | class AdminHasCircularFeatureAssertion implements Zend_Acl_Assert_Interface
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/AdminHasSupportFeatureAssertion.php
class AdminHasSupportFeatureAssertion (line 37) | class AdminHasSupportFeatureAssertion implements Zend_Acl_Assert_Interface
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/CallbackAssertion.php
class CallbackAssertion (line 36) | class CallbackAssertion implements Zend_Acl_Assert_Interface
method __construct (line 48) | public function __construct(callable $callback)
method assert (line 56) | public function assert(
FILE: gui/src/Assertion/ClientCanAddSqlDatabasesAssertion.php
class ClientCanAddSqlDatabasesAssertion (line 37) | class ClientCanAddSqlDatabasesAssertion implements Zend_Acl_Assert_Inter...
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/ClientHasBackupFeatureAssertion.php
class ClientHasBackupFeatureAssertion (line 36) | class ClientHasBackupFeatureAssertion implements Zend_Acl_Assert_Interface
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ClientHasCustomDnsFeatureAssertion.php
class ClientHasCustomDnsFeatureAssertion (line 36) | class ClientHasCustomDnsFeatureAssertion implements Zend_Acl_Assert_Inte...
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ClientHasCustomErrorPagesFeatureAssertion.php
class ClientHasCustomErrorPagesFeatureAssertion (line 36) | class ClientHasCustomErrorPagesFeatureAssertion
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/ClientHasDomainAliasesFeatureAssertion.php
class ClientHasDomainAliasesFeatureAssertion (line 36) | class ClientHasDomainAliasesFeatureAssertion
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/ClientHasExternalMailFeatureAssertion.php
class ClientHasExternalMailFeatureAssertion (line 36) | class ClientHasExternalMailFeatureAssertion implements Zend_Acl_Assert_I...
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ClientHasFtpFeatureAssertion.php
class ClientHasFtpFeatureAssertion (line 36) | class ClientHasFtpFeatureAssertion implements Zend_Acl_Assert_Interface
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ClientHasMailFeatureAssertion.php
class ClientHasMailFeatureAssertion (line 36) | class ClientHasMailFeatureAssertion implements Zend_Acl_Assert_Interface
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ClientHasMailOrExternalMailFeatureAssertion.php
class ClientHasMailOrExternalMailFeatureAssertion (line 36) | class ClientHasMailOrExternalMailFeatureAssertion
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/ClientHasPhpEditorFeatureAssertion.php
class ClientHasPhpEditorFeatureAssertion (line 36) | class ClientHasPhpEditorFeatureAssertion implements Zend_Acl_Assert_Inte...
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ClientHasProtectedAreasFeatureAssertion.php
class ClientHasProtectedAreasFeatureAssertion (line 36) | class ClientHasProtectedAreasFeatureAssertion
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/ClientHasSqlFeatureAssertion.php
class ClientHasSqlFeatureAssertion (line 36) | class ClientHasSqlFeatureAssertion implements Zend_Acl_Assert_Interface
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ClientHasSubdomainsFeatureAssertion.php
class ClientHasSubdomainsFeatureAssertion (line 36) | class ClientHasSubdomainsFeatureAssertion implements Zend_Acl_Assert_Int...
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ClientHasSupportFeatureAssertion.php
class ClientHasSupportFeatureAssertion (line 42) | class ClientHasSupportFeatureAssertion implements Zend_Acl_Assert_Interface
method assert (line 47) | public function assert(
FILE: gui/src/Assertion/ClientHasWebstatsFeatureAssertion.php
class ClientHasWebstatsFeatureAssertion (line 36) | class ClientHasWebstatsFeatureAssertion implements Zend_Acl_Assert_Inter...
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ResellerCanViewCustomerStatisticsAssertion.php
class ResellerCanViewCustomerStatisticsAssertion (line 36) | class ResellerCanViewCustomerStatisticsAssertion
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/ResellerHasCircularFeatureAssertion.php
class ResellerHasCircularFeatureAssertion (line 36) | class ResellerHasCircularFeatureAssertion implements Zend_Acl_Assert_Int...
method assert (line 41) | public function assert(
FILE: gui/src/Assertion/ResellerHasDomainAliasesFeatureAssertion.php
class ResellerHasDomainAliasesFeatureAssertion (line 36) | class ResellerHasDomainAliasesFeatureAssertion
method assert (line 42) | public function assert(
FILE: gui/src/Assertion/ResellerHasSupportFeatureAssertion.php
class ResellerHasSupportFeatureAssertion (line 42) | class ResellerHasSupportFeatureAssertion implements Zend_Acl_Assert_Inte...
method assert (line 47) | public function assert(
FILE: gui/src/Authentication/AuthEvent.php
class AuthEvent (line 38) | class AuthEvent extends Event
method getAuthenticationService (line 58) | public function getAuthenticationService(): AuthService
method hasAuthenticationResult (line 68) | public function hasAuthenticationResult(): bool
method getAuthenticationResult (line 78) | public function getAuthenticationResult(): AuthResult
method setAuthenticationResult (line 89) | public function setAuthenticationResult(AuthResult $authResult): void
FILE: gui/src/Authentication/AuthResult.php
class AuthResult (line 37) | class AuthResult
method __construct (line 103) | public function __construct($code, $identity, $messages = [])
method isValid (line 123) | public function isValid(): bool
method getCode (line 133) | public function getCode(): int
method getIdentity (line 143) | public function getIdentity()
method setMessage (line 154) | public function setMessage($messages): void
method getMessages (line 167) | public function getMessages(): array
FILE: gui/src/Authentication/AuthService.php
class AuthService (line 49) | class AuthService
method __construct (line 66) | protected function __construct()
method getInstance (line 76) | public static function getInstance(): AuthService
method authenticate (line 93) | public function authenticate(): AuthResult
method getEventManager (line 147) | public function getEventManager(
method unsetIdentity (line 170) | public function unsetIdentity(): void
method setIdentity (line 202) | public function setIdentity($identity): void
method hasIdentity (line 250) | public function hasIdentity(): bool
method getIdentity (line 273) | public function getIdentity(): stdClass
method __clone (line 289) | protected function __clone()
FILE: gui/src/Autoloader/BcAutoloader.php
class BcAutoloader (line 33) | class BcAutoloader
method register (line 126) | public static function register(): void
method getClassLoader (line 146) | private static function getClassLoader()
method createPrependAutoloader (line 163) | private static function createPrependAutoloader(
method createAppendAutoloader (line 188) | private static function createAppendAutoloader(
FILE: gui/src/Config/ArrayConfig.php
class ArrayConfig (line 51) | class ArrayConfig implements ArrayAccess
method __construct (line 58) | public function __construct(array $parameters)
method __get (line 71) | public function __get($key)
method get (line 83) | public function get($key)
method exists (line 98) | public function exists($key)
method del (line 109) | public function del($key)
method merge (line 125) | public function merge(ArrayConfig $config)
method set (line 139) | public function set($key, $value)
method toArray (line 149) | public function toArray()
method offsetSet (line 170) | public function offsetSet($offset, $value)
method offsetGet (line 182) | public function offsetGet($offset)
method offsetExists (line 193) | public function offsetExists($offset)
method offsetUnset (line 204) | public function offsetUnset($offset)
FILE: gui/src/Config/DbConfig.php
class DbConfig (line 55) | class DbConfig extends ArrayConfig implements Iterator, Serializable
method __construct (line 163) | public function __construct($params)
method _loadAll (line 205) | protected function _loadAll()
method setDb (line 234) | public function setDb(DatabaseMySQL $db)
method setTable (line 244) | public function setTable($tableName)
method setKeyColumn (line 254) | public function setKeyColumn($columnName)
method setValueColumn (line 264) | public function setValueColumn($columnName)
method __set (line 278) | public function __set($key, $value)
method set (line 291) | public function set($key, $value)
method exists (line 313) | public function exists($key)
method _insert (line 324) | protected function _insert()
method _update (line 356) | protected function _update()
method get (line 387) | public function get($key)
method merge (line 414) | public function merge(ArrayConfig $config)
method __isset (line 443) | public function __isset($key)
method __unset (line 458) | public function __unset($key)
method del (line 470) | public function del($key)
method _delete (line 484) | protected function _delete()
method forceReload (line 514) | public function forceReload()
method countQueries (line 530) | public function countQueries($queriesCounterType)
method resetQueriesCounter (line 554) | public function resetQueriesCounter($queriesCounterType)
method offsetExists (line 574) | public function offsetExists($offset)
method toArray (line 584) | public function toArray()
method current (line 592) | public function current()
method key (line 600) | public function key()
method next (line 608) | public function next()
method rewind (line 616) | public function rewind()
method valid (line 624) | public function valid()
method serialize (line 633) | public function serialize()
method unserialize (line 641) | public function unserialize($serialized)
method __destruct (line 649) | public function __destruct()
FILE: gui/src/Config/FileConfig.php
class FileConfig (line 115) | class FileConfig extends ArrayConfig
method __construct (line 133) | public function __construct($pathFile = NULL)
method _parseFile (line 161) | protected function _parseFile()
FILE: gui/src/Crypt.php
class Crypt (line 34) | class Crypt
method md5 (line 49) | static public function md5($password, $salt = NULL)
method randomStr (line 72) | static public function randomStr($length, $charList = self::BASE64)
method sha256 (line 111) | static public function sha256($password, $rounds = 5000, $salt = NULL)
method sha512 (line 144) | static public function sha512($password, $rounds = 5000, $salt = NULL)
method htpasswd (line 183) | static public function htpasswd(
method bcrypt (line 227) | static public function bcrypt($password, $cost = 10, $salt = NULL)
method apr1MD5 (line 274) | static public function apr1MD5($password, $salt = NULL)
method toAlphabet64 (line 344) | static protected function toAlphabet64($string)
method verify (line 360) | static public function verify($password, $hash)
method hashEqual (line 395) | static public function hashEqual($knownString, $userString)
method encryptBlowfishCBC (line 428) | static function encryptBlowfishCBC($key, $iv, $data)
method encrypt (line 444) | static protected function encrypt($algorithm, $key, $iv, $data)
method decryptBlowfishCBC (line 460) | static function decryptBlowfishCBC($key, $iv, $data)
method decrypt (line 476) | static protected function decrypt($algorithm, $key, $iv, $data)
method encryptRijndaelCBC (line 497) | static function encryptRijndaelCBC($key, $iv, $data)
method decryptRijndaelCBC (line 528) | static function decryptRijndaelCBC($key, $iv, $data)
FILE: gui/src/Database/DatabaseEvent.php
class DatabaseEvent (line 38) | class DatabaseEvent extends Event
method getDb (line 45) | public function getDb()
method getQueryString (line 55) | public function getQueryString()
FILE: gui/src/Database/DatabaseException.php
class DatabaseException (line 38) | class DatabaseException extends Exception
method __construct (line 48) | public function __construct(
method getQuery (line 61) | public function getQuery()
FILE: gui/src/Database/DatabaseMySQL.php
class DatabaseMySQL (line 43) | class DatabaseMySQL
method __construct (line 98) | private function __construct(
method connect (line 144) | public static function connect(
method getRawInstance (line 176) | public static function getRawInstance(
method getInstance (line 192) | public static function getInstance(
method getPDO (line 211) | public static function getPDO(string $connection = 'default'): PDO
method prepare (line 232) | public function prepare(string $sql, ?array $options = NULL)
method events (line 265) | public function events(
method errorInfo (line 287) | public function errorInfo(): array
method execute (line 299) | public function execute($stmt, $parameters = NULL)
method getTables (line 359) | public function getTables(string $like = NULL): array
method insertId (line 376) | public function insertId(): string
method quoteIdentifier (line 387) | public function quoteIdentifier(string $identifier): string
method quote (line 401) | public function quote(string $string, ?int $parameterType = NULL): string
method setAttribute (line 416) | public function setAttribute(int $attribute, $value): bool
method getAttribute (line 427) | public function getAttribute(int $attribute)
method beginTransaction (line 438) | public function beginTransaction(): void
method commit (line 457) | public function commit(): void
method rollBack (line 477) | public function rollBack(): void
method inTransaction (line 506) | public function inTransaction(): bool
method getLastErrorCode (line 516) | public function getLastErrorCode()
method getLastErrorMessage (line 530) | public function getLastErrorMessage(): string
method errorMsg (line 544) | public function errorMsg(): string
method getQuoteIdentifierSymbol (line 554) | public function getQuoteIdentifierSymbol(): string
method __clone (line 562) | private function __clone()
FILE: gui/src/Database/DatabaseResultSet.php
class DatabaseResultSet (line 43) | class DatabaseResultSet
method __construct (line 68) | public function __construct($stmt)
method __get (line 92) | public function __get($param)
method fetchRow (line 126) | public function fetchRow($fetchStyle = null)
method fields (line 142) | public function fields($param)
method rowCount (line 160) | public function rowCount()
method recordCount (line 171) | public function recordCount()
method fetchAll (line 189) | public function fetchAll($fetchStyle = null)
method moveNext (line 203) | public function moveNext()
method errorInfo (line 214) | public function errorInfo()
method errorInfoToString (line 227) | public function errorInfoToString()
FILE: gui/src/Database/DatabaseStatementEvent.php
class DatabaseStatementEvent (line 37) | class DatabaseStatementEvent extends DatabaseEvent
method getQueryString (line 44) | public function getQueryString()
method getStatement (line 54) | public function getStatement()
FILE: gui/src/Event/Event.php
class Event (line 43) | class Event implements EventDescription
method __construct (line 67) | public function __construct($name = NULL, $params = NULL)
method getName (line 83) | public function getName()
method setName (line 94) | public function setName($name)
method getParams (line 106) | public function getParams()
method setParams (line 120) | public function setParams($params)
method getParam (line 142) | public function getParam($name, $default = NULL)
method setParam (line 168) | public function setParam($name, $value)
method stopPropagation (line 187) | public function stopPropagation($flag = true)
method propagationIsStopped (line 197) | public function propagationIsStopped()
FILE: gui/src/Event/EventAggregator.php
class EventAggregator (line 39) | class EventAggregator implements EventManagerInterface
method __construct (line 59) | protected function __construct()
method getInstance (line 70) | public static function getInstance()
method resetInstance (line 85) | public static function resetInstance()
method getEventManager (line 96) | public function getEventManager($name)
method dispatch (line 116) | public function dispatch($event, $arguments = [])
method getEventType (line 135) | public function getEventType($event)
method registerListener (line 155) | public function registerListener($event, $listener, $priority = 1)
method addEvents (line 181) | public function addEvents($type, array $events = [])
method unregisterListener (line 199) | public function unregisterListener(EventListener $listener)
method getEvents (line 216) | public function getEvents($type = NULL)
method getListeners (line 243) | public function getListeners($event)
method clearListeners (line 258) | public function clearListeners($event)
method hasListener (line 272) | public function hasListener($event)
FILE: gui/src/Event/EventDescription.php
type EventDescription (line 37) | interface EventDescription
method getName (line 44) | public function getName();
method getParams (line 51) | public function getParams();
method getParam (line 60) | public function getParam($name, $default = NULL);
method setName (line 68) | public function setName($name);
method setParams (line 76) | public function setParams($params);
method setParam (line 85) | public function setParam($name, $value);
method stopPropagation (line 94) | public function stopPropagation($flag = true);
method propagationIsStopped (line 101) | public function propagationIsStopped();
FILE: gui/src/Event/EventException.php
class EventException (line 33) | class EventException extends Exception
FILE: gui/src/Event/EventManager.php
class EventManager (line 41) | class EventManager implements EventManagerInterface
method getInstance (line 54) | public static function getInstance()
method dispatch (line 67) | public function dispatch($event, $arguments = [])
method getListeners (line 100) | public function getListeners($event)
method registerListener (line 119) | public function registerListener($event, $listener, $priority = 1)
method unregisterListeners (line 150) | public function unregisterListeners($event)
method unregisterListener (line 171) | public function unregisterListener(EventListener $listener)
method getEvents (line 195) | public function getEvents()
method clearListeners (line 206) | public function clearListeners($event)
method hasListener (line 220) | public function hasListener($eventName)
FILE: gui/src/Event/EventManagerException.php
class EventManagerException (line 31) | class EventManagerException extends EventException
FILE: gui/src/Event/EventManagerInterface.php
type EventManagerInterface (line 49) | interface EventManagerInterface
method dispatch (line 62) | public function dispatch($event, $arguments = []);
method registerListener (line 73) | public function registerListener($event, $listener, $priority = 1);
method unregisterListener (line 81) | public function unregisterListener(EventListener $listener);
method getEvents (line 88) | public function getEvents();
method getListeners (line 96) | public function getListeners($event);
method clearListeners (line 104) | public function clearListeners($event);
method hasListener (line 113) | public function hasListener($event);
FILE: gui/src/Event/Events.php
class Events (line 36) | class Events
FILE: gui/src/Event/Listener/EventListener.php
class EventListener (line 38) | class EventListener
method __construct (line 62) | public function __construct($listener, array $metadata = [])
method registerHandler (line 75) | protected function registerHandler($handler)
method getMetadatum (line 96) | public function getMetadatum($name)
method __invoke (line 112) | public function __invoke()
method call (line 125) | public function call(array $args = [])
method getHandler (line 191) | public function getHandler()
method validateStringCallbackFor54 (line 206) | protected function validateStringCallbackFor54($handler)
method getMetadata (line 256) | public function getMetadata()
FILE: gui/src/Event/Listener/ListenerException.php
class ListenerException (line 37) | class ListenerException extends EventException
FILE: gui/src/Event/Listener/PriorityQueue.php
class PriorityQueue (line 38) | class PriorityQueue implements Countable, IteratorAggregate
method __construct (line 56) | public function __construct()
method addListener (line 70) | public function addListener(EventListener $listener, $priority = 1)
method removeListener (line 89) | public function removeListener(EventListener $listener)
method isEmpty (line 118) | public function isEmpty()
method count (line 128) | public function count()
method getIterator (line 142) | public function getIterator()
method hasPriority (line 153) | public function hasPriority($priority)
FILE: gui/src/Event/Listener/ResponseCollection.php
class ResponseCollection (line 37) | class ResponseCollection extends SplStack
method isStopped (line 49) | public function isStopped()
method setStopped (line 60) | public function setStopped($flag)
method first (line 71) | public function first()
method last (line 85) | public function last()
method contains (line 101) | public function contains($value)
FILE: gui/src/Event/Listener/SplPriorityQueue.php
class SplPriorityQueue (line 40) | class SplPriorityQueue extends BaseSplPriorityQueue
method insert (line 54) | public function insert($listener, $priority)
FILE: gui/src/Exception/AbstractExceptionWriter.php
class AbstractExceptionWriter (line 35) | abstract class AbstractExceptionWriter
method onUncaughtException (line 43) | abstract public function onUncaughtException(ExceptionEvent $event): v...
FILE: gui/src/Exception/BrowserExceptionWriter.php
class BrowserExceptionWriter (line 39) | class BrowserExceptionWriter extends AbstractExceptionWriter
method __construct (line 59) | public function __construct($templateFile = 'message.tpl')
method onUncaughtException (line 70) | public function onUncaughtException(ExceptionEvent $event): void
method render (line 166) | protected function render()
FILE: gui/src/Exception/Exception.php
class Exception (line 32) | class Exception extends BaseException
method __construct (line 41) | public function __construct($msg = '', $code = 0, Throwable $previous ...
FILE: gui/src/Exception/ExceptionEvent.php
class ExceptionEvent (line 40) | class ExceptionEvent extends Event
method __construct (line 48) | public function __construct(Throwable $exception)
method getException (line 58) | public function getException()
FILE: gui/src/Exception/ExceptionHandler.php
class ExceptionHandler (line 40) | class ExceptionHandler
method __construct (line 56) | public function __construct()
method setExceptionHandler (line 68) | public function setExceptionHandler()
method addWriter (line 79) | public function addWriter($className)
method removeWriter (line 94) | public function removeWriter($className)
method unsetExceptionHandler (line 107) | public function unsetExceptionHandler()
method handleException (line 118) | public function handleException(Throwable $exception)
FILE: gui/src/Exception/MailExceptionWriter.php
class MailExceptionWriter (line 40) | class MailExceptionWriter extends AbstractExceptionWriter
method onUncaughtException (line 55) | public function onUncaughtException(ExceptionEvent $event): void
method prepareMailData (line 107) | protected function prepareMailData(Throwable $exception)
FILE: gui/src/Exception/ProductionException.php
class ProductionException (line 37) | class ProductionException extends Exception
method __construct (line 42) | public function __construct(
FILE: gui/src/Filter/GzipFilter.php
class GzipFilter (line 41) | class GzipFilter
method __construct (line 144) | public function __construct($mode = self::FILTER_FILE, $compressionLev...
method filter (line 187) | public function filter($data, $filePath = '')
method _getEncoding (line 238) | protected function _getEncoding()
method _getEncodedData (line 265) | protected function _getEncodedData()
method _addCompressionInformation (line 280) | protected function _addCompressionInformation($time)
method _sendHeaders (line 313) | protected function _sendHeaders()
method _writeFile (line 328) | protected function _writeFile($gzipData, $filePath)
FILE: gui/src/Handlers/ExceptionHandler.php
class ExceptionHandler (line 47) | class ExceptionHandler extends AbstractHandler
method __invoke (line 58) | public function __invoke(
method renderJsonErrorMessage (line 101) | protected function renderJsonErrorMessage(Throwable $error)
method renderXmlErrorMessage (line 137) | protected function renderXmlErrorMessage(Throwable $error)
method createCdataSection (line 171) | private function createCdataSection($content)
method renderHtmlErrorMessage (line 184) | protected function renderHtmlErrorMessage(ExceptionEvent $event)
FILE: gui/src/Handlers/NotAllowedHandler.php
class NotAllowedHandler (line 43) | class NotAllowedHandler extends AbstractHandler
method __invoke (line 54) | public function __invoke(
method renderPlainOptionsMessage (line 102) | protected function renderPlainOptionsMessage(array $methods): string
method renderJsonNotAllowedMessage (line 113) | protected function renderJsonNotAllowedMessage(array $methods): string
method renderXmlNotAllowedMessage (line 124) | protected function renderXmlNotAllowedMessage(array $methods): string
method renderHtmlNotAllowedMessage (line 135) | protected function renderHtmlNotAllowedMessage(array $methods): string
FILE: gui/src/Handlers/NotFoundHandler.php
class NotFoundHandler (line 43) | class NotFoundHandler extends AbstractHandler
method __invoke (line 53) | public function __invoke(
method renderPlainNotFoundOutput (line 94) | protected function renderPlainNotFoundOutput(): string
method renderJsonNotFoundOutput (line 104) | protected function renderJsonNotFoundOutput(): string
method renderXmlNotFoundOutput (line 114) | protected function renderXmlNotFoundOutput(): string
method renderHtmlNotFoundOutput (line 125) | protected function renderHtmlNotFoundOutput(
FILE: gui/src/I18n/GettextParser.php
class GettextParser (line 29) | class GettextParser
method __construct (line 92) | public function __construct($filePath)
method __destruct (line 106) | public function __destruct()
method getTranslationTable (line 121) | public function getTranslationTable()
method _parse (line 140) | protected function _parse($part)
method readInteger (line 235) | protected function readInteger()
method readIntegerList (line 252) | protected function readIntegerList($num)
method getProjectIdVersion (line 267) | public function getProjectIdVersion()
method _getHeaderValue (line 279) | protected function _getHeaderValue($header)
method getHeaders (line 300) | public function getHeaders()
method getReportMsgidBugs (line 315) | public function getReportMsgidBugs()
method getPotCreationDate (line 326) | public function getPotCreationDate()
method getPoRevisionDate (line 337) | public function getPoRevisionDate()
method getLastTranslator (line 348) | public function getLastTranslator()
method getLanguageTeam (line 359) | public function getLanguageTeam()
method getMimeVersion (line 370) | public function getMimeVersion()
method getContentType (line 381) | public function getContentType()
method getContentTransferEncoding (line 392) | public function getContentTransferEncoding()
method getLanguage (line 403) | public function getLanguage()
method getPluralForms (line 414) | public function getPluralForms()
method getNumberOfTranslatedStrings (line 425) | public function getNumberOfTranslatedStrings()
FILE: gui/src/I18n/ParserException.php
class ParserException (line 31) | class ParserException extends Exception
FILE: gui/src/Json/LazyDecoder.php
class LazyDecoder (line 30) | class LazyDecoder implements ArrayAccess, Countable
method __construct (line 54) | public function __construct($json, $depth = 512, $options = 0)
method offsetGet (line 66) | public function &offsetGet($key)
method decode (line 85) | protected function decode()
method offsetExists (line 97) | public function offsetExists($key)
method offsetSet (line 109) | public function offsetSet($key, $value)
method count (line 121) | public function count()
method __isset (line 136) | public function __isset($key)
method __unset (line 147) | public function __unset($key)
method offsetUnset (line 155) | public function offsetUnset($key)
method toArray (line 171) | public function toArray()
FILE: gui/src/Net.php
class Net (line 29) | class Net
method __construct (line 54) | protected function __construct()
method extractDevices (line 65) | protected function extractDevices()
method extractIpAddresses (line 100) | protected function extractIpAddresses()
method compress (line 150) | public function compress($ipAddr)
method expand (line 184) | public function expand($ipAddr)
method getInstance (line 234) | static public function getInstance()
method getDevices (line 248) | public function getDevices()
method loadData (line 259) | protected function loadData()
method getIpAddresses (line 275) | public function getIpAddresses()
method getVersion (line 287) | public function getVersion($ipAddr)
method getIpPrefixLength (line 298) | public function getIpPrefixLength($ipAddr)
method __clone (line 313) | protected function __clone()
FILE: gui/src/PhpEditor.php
class PhpEditor (line 40) | class PhpEditor
method __construct (line 77) | private function __construct()
method getInstance (line 88) | static public function getInstance(): PhpEditor
method saveResellerPermissions (line 103) | public function saveResellerPermissions(string $resellerId): void
method setResellerPermission (line 144) | public function setResellerPermission(string $permission, $value): void
method validatePermission (line 201) | public function validatePermission(string $permission, string $value):...
method setClientPermission (line 229) | public function setClientPermission(string $permission, string $value)...
method resellerHasPermission (line 291) | public function resellerHasPermission(string $permission): bool
method clientHasPermission (line 321) | public function clientHasPermission(string $permission): bool
method getDomainIni (line 350) | public function getDomainIni(?string $varname = NULL)
method assembleDisableFunctions (line 371) | public function assembleDisableFunctions(array $disabledFuncts): string
method syncClientPermissionsWithResellerPermissions (line 386) | public function syncClientPermissionsWithResellerPermissions(
method loadResellerPermissions (line 466) | public function loadResellerPermissions(?string $resellerId = NULL): void
method loadClientPermissions (line 543) | public function loadClientPermissions(string $clientId = NULL): void
method saveClientPermissions (line 597) | public function saveClientPermissions(string $clientId): bool
method updateClientDomainIni (line 628) | public function updateClientDomainIni(
method createMissingPhpIniEntries (line 747) | protected function createMissingPhpIniEntries(string $clientId): void
method loadDomainIni (line 840) | public function loadDomainIni(
method isDefaultDomainIni (line 920) | public function isDefaultDomainIni(): bool
method saveDomainIni (line 934) | public function saveDomainIni(
method getClientPermission (line 991) | public function getClientPermission(?string $permission = NULL)
method setDomainIni (line 1016) | public function setDomainIni(string $varname, $value): void
method validateDomainIni (line 1058) | public function validateDomainIni(string $varname, $value): bool
method getResellerPermission (line 1113) | public function getResellerPermission(string $permission = NULL)
method updateDomainStatuses (line 1138) | public function updateDomainStatuses(
method getIniLevel (line 1222) | protected function getIniLevel(): string
FILE: gui/src/Plugin/AbstractPlugin.php
class AbstractPlugin (line 47) | abstract class AbstractPlugin
method __construct (line 79) | public function __construct(PluginManager $pluginManager)
method init (line 93) | protected function init()
method getName (line 103) | public function getName()
method getInfo (line 128) | public function getInfo()
method getInfoFromFile (line 176) | public function getInfoFromFile()
method getConfigFromFile (line 208) | public function getConfigFromFile()
method getConfig (line 267) | public function getConfig()
method getConfigParam (line 301) | public function getConfigParam(string $param, $default = NULL)
method getConfigPrev (line 315) | public function getConfigPrev()
method getConfigPrevParam (line 353) | public function getConfigPrevParam(string $param, $default = NULL)
method getPluginManager (line 366) | final public function getPluginManager(): PluginManager
method register (line 377) | public function register(EventManagerInterface $events)
method getRoutes (line 437) | public function getRoutes()
method getServiceProvider (line 452) | public function getServiceProvider(): ?ServiceProviderInterface
method install (line 497) | public function install(PluginManager $pluginManager)
method uninstall (line 512) | public function uninstall(PluginManager $pluginManager)
method delete (line 527) | public function delete(PluginManager $pluginManager)
method update (line 544) | public function update(
method enable (line 561) | public function enable(PluginManager $pm)
method disable (line 576) | public function disable(PluginManager $pm)
method getItemWithErrorStatus (line 588) | public function getItemWithErrorStatus()
method changeItemStatus (line 605) | public function changeItemStatus(
method getCountRequests (line 620) | public function getCountRequests()
method migrateDb (line 709) | final protected function migrateDb(
method __clone (line 813) | final public function __clone()
FILE: gui/src/Plugin/BruteForce.php
class BruteForce (line 45) | class BruteForce extends AbstractPlugin
method __construct (line 116) | public function __construct(PluginManager $pluginManager, $targetForm ...
method getInfo (line 155) | public function getInfo()
method register (line 176) | public function register(EventManagerInterface $events)
method isWaiting (line 194) | public function isWaiting()
method isBlocked (line 217) | public function isBlocked()
method getLastMessage (line 240) | public function getLastMessage()
method logAttempt (line 250) | public function logAttempt()
method init (line 265) | protected function init()
method onBeforeAuthentication (line 304) | private function onBeforeAuthentication(EventDescription $event)
method createRecord (line 320) | private function createRecord()
method updateRecord (line 340) | private function updateRecord()
FILE: gui/src/Plugin/Filter/PluginArchive.php
class PluginArchive (line 44) | class PluginArchive implements Zend_Filter_Interface
method __construct (line 60) | public function __construct($options)
method getOptions (line 84) | public function getOptions(): array
method setOptions (line 95) | public function setOptions(
method setDestination (line 116) | public function setDestination(
method setMagicFile (line 144) | public function setMagicFile(
method filter (line 170) | public function filter($value): string
method getDestination (line 216) | public function getDestination(): string
method _detectMimeType (line 227) | protected function _detectMimeType(string $file): string
method getMagicFile (line 269) | public function getMagicFile(): ?string
method _filterZipArchive (line 281) | protected function _filterZipArchive($value): void
method _backupPluginDir (line 327) | protected function _backupPluginDir(string $pluginDir): bool
method _filterTarArchive (line 348) | protected function _filterTarArchive($value, $type): void
method _restorePluginDir (line 400) | protected function _restorePluginDir(string $pluginDir): void
FILE: gui/src/Plugin/PluginActionStoppedException.php
class PluginActionStoppedException (line 29) | class PluginActionStoppedException extends PluginException
FILE: gui/src/Plugin/PluginException.php
class PluginException (line 31) | class PluginException extends Exception
FILE: gui/src/Plugin/PluginManager.php
class PluginManager (line 50) | class PluginManager
method __construct (line 122) | public function __construct(
method pluginLoadDataFromDatabase (line 138) | protected function pluginLoadDataFromDatabase(): void
method __destruct (line 164) | public function __destruct()
method autoload (line 177) | public function autoload(string $class): void
method pluginGetRootDir (line 195) | public function pluginGetRootDir(): string
method pluginSetRootDir (line 210) | public function pluginSetRootDir(string $rootDir): void
method pluginGetDirectory (line 233) | public function pluginGetDirectory(): string
method pluginSetPersistentDataDir (line 244) | public function pluginSetPersistentDataDir(string $persistentDataDir):...
method pluginGetList (line 270) | public function pluginGetList(bool $enabledOnly = true): array
method pluginGetLoaded (line 289) | public function pluginGetLoaded(): array
method pluginGetInfo (line 302) | public function pluginGetInfo($pluginName): array
method pluginGet (line 313) | public function pluginGet(string $pluginName): AbstractPlugin
method pluginIsLoaded (line 369) | public function pluginIsLoaded(string $pluginName): bool
method getContainer (line 379) | public function getContainer(): ContainerInterface
method getEventManager (line 389) | public function getEventManager(): EventAggregator
method pluginUpload (line 399) | public function pluginUpload(): void
method pluginSyncData (line 433) | public function pluginSyncData(): void
method pluginUpdateData (line 472) | protected function pluginUpdateData(string $pluginName)
method pluginGetStatus (line 650) | public function pluginGetStatus($pluginName): string
method pluginIsProtected (line 665) | public function pluginIsProtected(string $pluginName): bool
method pluginGetPersistentDataDir (line 689) | public function pluginGetPersistentDataDir(): string
method pluginHasError (line 706) | public function pluginHasError(string $pluginName): bool
method pluginGetError (line 717) | public function pluginGetError(string $pluginName): ?string
method pluginSetError (line 733) | public function pluginSetError(string $pluginName, ?string $error): void
method pluginIsKnown (line 756) | public function pluginIsKnown(string $pluginName): bool
method pluginStoreDataInDatabase (line 767) | protected function pluginStoreDataInDatabase(array $pluginData): void
method pluginUpdate (line 821) | public function pluginUpdate(string $pluginName): void
method pluginSetStatus (line 910) | public function pluginSetStatus(string $pluginName, string $status): void
method pluginDisable (line 943) | public function pluginDisable(
method pluginHasBackend (line 1020) | public function pluginHasBackend(string $pluginName): bool
method pluginUpdateInfo (line 1036) | public function pluginUpdateInfo(string $pluginName, array $infoNew): ...
method pluginCompareData (line 1063) | protected function pluginCompareData(
method pluginEnable (line 1097) | public function pluginEnable(
method pluginRequireUpdate (line 1184) | protected function pluginRequireUpdate(string $pluginName): bool
method pluginRequireChange (line 1201) | protected function pluginRequireChange(string $pluginName): bool
method pluginChange (line 1218) | public function pluginChange(
method pluginLock (line 1281) | public function pluginLock(string $pluginName, string $lockerName): void
method pluginIsLocked (line 1325) | public function pluginIsLocked(
method pluginUnlock (line 1347) | public function pluginUnlock(string $pluginName, string $lockerName): ...
method pluginIsInstalled (line 1387) | public function pluginIsInstalled(string $pluginName): bool
method pluginInstall (line 1400) | public function pluginInstall(string $pluginName): void
method pluginIsUninstalled (line 1471) | public function pluginIsUninstalled(string $pluginName): bool
method pluginUninstall (line 1482) | public function pluginUninstall(string $pluginName): void
method pluginIsUninstallable (line 1555) | public function pluginIsUninstallable(string $pluginName): bool
method pluginIsInstallable (line 1576) | public function pluginIsInstallable(string $pluginName): bool
method pluginIsDisabled (line 1597) | public function pluginIsDisabled(string $pluginName): bool
method pluginDelete (line 1608) | public function pluginDelete(string $pluginName): void
method pluginProtect (line 1687) | public function pluginProtect(string $pluginName): void
method pluginIsEnabled (line 1760) | public function pluginIsEnabled(string $pluginName): bool
method pluginCheckCompat (line 1772) | public function pluginCheckCompat(
method pluginGetApiVersion (line 1813) | public function pluginGetApiVersion(): string
method pluginGuessAction (line 1825) | public function pluginGuessAction(string $pluginName): string
method pluginTranslateStatus (line 1858) | public function pluginTranslateStatus(string $pluginStatus): string
FILE: gui/src/Plugin/PluginRoutesInjector.php
class PluginRoutesInjector (line 47) | class PluginRoutesInjector
method __invoke (line 66) | public function __invoke(
method injectRoutes (line 107) | private function injectRoutes(
method injectRouteGroup (line 140) | private function injectRouteGroup(
method injectRoute (line 176) | private function injectRoute(
FILE: gui/src/Plugin/PluginServiceProvidersInjector.php
class PluginServiceProvidersInjector (line 38) | class PluginServiceProvidersInjector
method __invoke (line 48) | public function __invoke(
FILE: gui/src/Plugin/Validate/PluginArchive.php
class PluginArchive (line 52) | class PluginArchive extends Zend_Validate_Abstract
method __construct (line 96) | public function __construct($options)
method getOptions (line 115) | public function getOptions(): array
method setOptions (line 126) | public function setOptions(
method setPluginManager (line 143) | public function setPluginManager(
method isValid (line 162) | public function isValid($value, $file = NULL): bool
method _throw (line 189) | protected function _throw(string $value, string $errorType): bool
method _isValidZipArchive (line 203) | protected function _isValidZipArchive($value, $file)
method _getPluginInfoFromString (line 251) | protected function _getPluginInfoFromString(string $infoAsString): ?array
method _isValidPlugin (line 277) | public function _isValidPlugin(array $info)
method getPluginManager (line 401) | public function getPluginManager(): PluginManager
method _isValidTarArchive (line 413) | protected function _isValidTarArchive($value, $file)
FILE: gui/src/Registry.php
class Registry (line 31) | class Registry extends Zend_Registry
method set (line 38) | public static function set($index, $value)
FILE: gui/src/ServiceProvider.php
class ServiceProvider (line 43) | class ServiceProvider implements ServiceProviderInterface
method register (line 50) | public function register(ContainerInterface $c): void
FILE: gui/src/ServiceProviderInterface.php
type ServiceProviderInterface (line 31) | interface ServiceProviderInterface
method register (line 41) | public function register(ContainerInterface $container);
FILE: gui/src/Services.php
class Services (line 39) | class Services implements iterator, countable
method __construct (line 68) | public function __construct(bool $refresh = false)
method getName (line 89) | public function getName(): string
method isVisible (line 100) | public function isVisible(): bool
method isRunning (line 110) | public function isRunning(): bool
method getStatus (line 120) | private function getStatus(): bool
method key (line 156) | public function key()
method getIp (line 166) | public function getIp(): string
method getProtocol (line 176) | public function getProtocol(): string
method getPort (line 186) | public function getPort(): int
method getProperty (line 197) | private function getProperty(int $index)
method isDown (line 211) | public function isDown(): bool
method current (line 219) | public function current()
method setService (line 234) | public function setService(
method next (line 253) | public function next()
method rewind (line 261) | public function rewind()
method valid (line 269) | public function valid()
method count (line 277) | public function count()
FILE: gui/src/SystemInfo.php
class SystemInfo (line 35) | class SystemInfo
method __construct (line 94) | public function __construct()
method _getCPUInfo (line 111) | private function _getCPUInfo()
method sysctl (line 281) | protected function sysctl($args)
method read (line 309) | protected function read($filename)
method _getFileSystemInfo (line 328) | private function _getFileSystemInfo()
method _getKernelInfo (line 381) | private function _getKernelInfo()
method _getLoadInfo (line 416) | private function _getLoadInfo()
method _getRAMInfo (line 452) | private function _getRAMInfo()
method _getSwapInfo (line 536) | private function _getSwapInfo()
method _getUptime (line 617) | private function _getUptime()
method getFilePartitionInfo (line 684) | public static function getFilePartitionInfo($file)
method getError (line 727) | public function getError()
FILE: gui/src/TemplateEngine.php
class TemplateEngine (line 41) | class TemplateEngine
method __construct (line 153) | public function __construct()
method setRootDir (line 177) | public function setRootDir($rootDir)
method assign (line 193) | public function assign($namespaces, $namespacesData = '')
method unsign (line 211) | public function unsign($namespaces)
method define (line 230) | public function define($tName, $tValue = '')
method define_dynamic (line 252) | public function define_dynamic($tName, $tValue = '')
method define_no_file (line 274) | public function define_no_file($tName, $tValue = '')
method define_no_file_dynamic (line 296) | public function define_no_file_dynamic($tName, $tValue = '')
method is_namespace (line 319) | public function is_namespace($namespace)
method is_static_tpl (line 331) | public function is_static_tpl($tplName)
method is_dynamic_tpl (line 343) | public function is_dynamic_tpl($tplName)
method parse (line 355) | public function parse($pname, $tname)
method get_file (line 441) | public function get_file($fname)
method is_safe (line 500) | protected function is_safe($fname)
method run (line 510) | protected function run($scriptPath)
method substitute_dynamic (line 520) | protected function substitute_dynamic($data)
method find_next_curl (line 601) | protected function find_next_curl($string, $startPos)
method find_origin (line 630) | protected function find_origin($tname)
method parse_dynamic (line 656) | public function parse_dynamic($pname, $tname, $addFlag)
method devide_dynamic (line 725) | protected function devide_dynamic($data)
method find_next (line 770) | protected function find_next($data, $startPos)
method fastPrint (line 820) | public function fastPrint($pname = '')
method prnt (line 834) | public function prnt($pname = '')
method getLastParseResult (line 850) | public function getLastParseResult()
method replaceLastParseResult (line 862) | public function replaceLastParseResult($newContent, $namespace = NULL)
FILE: gui/src/Update/AbstractUpdate.php
class AbstractUpdate (line 35) | abstract class AbstractUpdate
method getError (line 49) | public function getError()
method applyUpdates (line 60) | abstract public function applyUpdates();
method isAvailableUpdate (line 68) | abstract public function isAvailableUpdate();
method getLastAppliedUpdate (line 76) | abstract public function getLastAppliedUpdate();
method getNextUpdate (line 84) | abstract public function getNextUpdate();
method setError (line 92) | protected function setError($error)
FILE: gui/src/Update/DatabaseUpdate.php
class DatabaseUpdate (line 46) | class DatabaseUpdate extends AbstractUpdate
method __construct (line 88) | protected function __construct()
method getInstance (line 106) | public static function getInstance()
method getLastUpdate (line 120) | public function getLastUpdate()
method applyUpdates (line 130) | public function applyUpdates()
method isAvailableUpdate (line 183) | public function isAvailableUpdate()
method getLastAppliedUpdate (line 197) | public function getLastAppliedUpdate()
method getNextUpdate (line 211) | public function getNextUpdate()
method executeSqlStatements (line 228) | protected function executeSqlStatements(array $queries)
method optimizeTables (line 251) | public function optimizeTables()
method __call (line 271) | public function __call($updateMethod, $params)
method r178 (line 287) | public function r178()
method r179 (line 338) | public function r179()
method __clone (line 348) | protected function __clone()
method r173 (line 357) | protected function r173()
method r174 (line 369) | protected function r174()
method dropColumn (line 381) | protected function dropColumn($table, $column)
method r176 (line 403) | protected function r176()
method changeColumn (line 449) | protected function changeColumn($table, $column, $columnDefinition)
method addColumn (line 475) | protected function addColumn($table, $column, $columnDefinition)
method addIndex (line 510) | protected function addIndex(
method r177 (line 575) | protected function r177()
method r180 (line 622) | protected function r180()
method r181 (line 634) | protected function r181()
method r182 (line 648) | protected function r182()
method r183 (line 662) | protected function r183()
method r184 (line 676) | protected function r184()
method r185 (line 690) | protected function r185()
method dropIndexByName (line 702) | protected function dropIndexByName($table, $indexName = 'PRIMARY')
method r186 (line 727) | protected function r186()
method r189 (line 742) | protected function r189()
method r190 (line 789) | protected function r190()
method r191 (line 803) | protected function r191()
method r192 (line 817) | protected function r192()
method r193 (line 832) | protected function r193()
method r194 (line 846) | protected function r194()
method r195 (line 865) | protected function r195()
method r196 (line 879) | protected function r196()
method r198 (line 893) | protected function r198()
method r199 (line 911) | protected function r199()
method r200 (line 925) | protected function r200()
method r201 (line 948) | protected function r201()
method r203 (line 965) | protected function r203()
method r204 (line 983) | protected function r204()
method r206 (line 1026) | protected function r206()
method r208 (line 1040) | protected function r208()
method r211 (line 1054) | protected function r211()
method r212 (line 1085) | protected function r212()
method r213 (line 1129) | protected function r213()
method r214 (line 1139) | protected function r214()
method r216 (line 1154) | protected function r216()
method r217 (line 1167) | protected function r217()
method r218 (line 1182) | protected function r218()
method r219 (line 1203) | protected function r219()
method r220 (line 1222) | protected function r220()
method r221 (line 1233) | protected function r221()
method r222 (line 1260) | protected function r222()
method r223 (line 1297) | protected function r223()
method r224 (line 1315) | protected function r224()
method r225 (line 1329) | protected function r225()
method r226 (line 1386) | protected function r226()
method r227 (line 1466) | protected function r227()
method r228 (line 1487) | protected function r228()
method r229 (line 1497) | protected function r229()
method r230 (line 1507) | protected function r230()
method r231 (line 1524) | protected function r231()
method r232 (line 1538) | protected function r232()
method r233 (line 1554) | protected function r233()
method r235 (line 1690) | protected function r235()
method r236 (line 1729) | protected function r236()
method r238 (line 1758) | protected function r238()
method r239 (line 1800) | protected function r239()
method r241 (line 1810) | protected function r241()
method r242 (line 1820) | protected function r242()
method r243 (line 1834) | protected function r243()
method r244 (line 1868) | protected function r244()
method r245 (line 1889) | protected function r245()
method r246 (line 1920) | protected function r246()
method r247 (line 1930) | protected function r247()
method r248 (line 1940) | protected function r248()
method r249 (line 1954) | protected function r249()
method r250 (line 1978) | protected function r250()
method r251 (line 1992) | protected function r251()
method r252 (line 2006) | protected function r252()
method r253 (line 2020) | protected function r253()
method r254 (line 2042) | protected function r254()
method r255 (line 2093) | protected function r255()
method r256 (line 2107) | protected function r256()
method r257 (line 2125) | protected function r257()
method r258 (line 2158) | protected function r258()
method r259 (line 2177) | protected function r259()
method r265 (line 2194) | protected function r265()
method isTable (line 2225) | protected function isTable($table)
method renameTable (line 2237) | protected function renameTable($oTable, $nTable)
method dropTable (line 2254) | protected function dropTable($table)
method r266 (line 2265) | protected function r266()
method r268 (line 2304) | protected function r268()
method r269 (line 2343) | protected function r269()
method r271 (line 2377) | protected function r271()
method dropIndexByColumn (line 2430) | protected function dropIndexByColumn($table, $column)
method r272 (line 2463) | protected function r272()
method r273 (line 2490) | protected function r273()
method r274 (line 2522) | protected function r274()
method r275 (line 2553) | protected function r275()
method r281 (line 3049) | protected function r281()
method r282 (line 3130) | protected function r282()
method r283 (line 3232) | protected function r283()
method r284 (line 3242) | protected function r284()
method r285 (line 3252) | protected function r285()
method r286 (line 3266) | protected function r286()
method r287 (line 3276) | protected function r287()
FILE: gui/src/Update/UpdateException.php
class UpdateException (line 31) | class UpdateException extends Exception
FILE: gui/src/Update/VersionUpdate.php
class VersionUpdate (line 37) | class VersionUpdate extends AbstractUpdate
method __construct (line 52) | protected function __construct()
method getInstance (line 62) | public static function getInstance()
method isAvailableUpdate (line 74) | public function isAvailableUpdate()
method getNextUpdate (line 84) | public function getNextUpdate()
method getUpdateInfo (line 105) | public function getUpdateInfo($forceReload = false)
method getLastAppliedUpdate (line 196) | public function getLastAppliedUpdate()
method applyUpdates (line 211) | public function applyUpdates()
method __clone (line 224) | protected function __clone()
FILE: gui/src/Uri/UriException.php
class UriException (line 31) | class UriException extends Exception
FILE: gui/src/Uri/UriRedirect.php
class UriRedirect (line 32) | class UriRedirect extends Zend_Uri_Http
method fromString (line 42) | public static function fromString($uri)
FILE: gui/src/Utility/OpcodeCache.php
class OpcodeCache (line 29) | class OpcodeCache
method clearAllActive (line 48) | static public function clearAllActive($fileAbsPath = NULL)
method getAllActive (line 61) | static public function getAllActive()
method initialize (line 75) | static protected function initialize()
method canApcInvalidate (line 161) | static public function canApcInvalidate()
method getCanInvalidate (line 201) | static public function getCanInvalidate($system)
FILE: gui/src/Validate/CommonValidation.php
class CommonValidation (line 41) | class CommonValidation
method __construct (line 75) | private function __construct()
method getInstance (line 86) | static public function getInstance()
method email (line 114) | public function email($email, $options = [])
method _processValidation (line 140) | protected function _processValidation($validatorName, $input, $options)
method getZendValidator (line 174) | public function getZendValidator($validatorName, $options = [])
method hostname (line 194) | public function hostname($hostname, $options = [])
method ip (line 212) | public function ip($ip, $options = [])
method getLastValidationMessages (line 223) | public function getLastValidationMessages()
method assertEquals (line 242) | public function assertEquals($value1, $value2, $messages = NULL)
method assertNotEquals (line 267) | public function assertNotEquals($value1, $value2, $messages = NULL)
method assertContains (line 295) | public function assertContains(
method assertNotContains (line 323) | public function assertNotContains($value, array $stack, $messages = NULL)
method __clone (line 345) | private function __clone()
FILE: gui/src/Validate/Uri.php
class Uri (line 34) | class Uri extends Zend_Validate_Abstract
method isValid (line 52) | public function isValid($uri)
FILE: gui/src/VirtualFileSystem.php
class VirtualFileSystem (line 44) | class VirtualFileSystem
method __construct (line 82) | public function __construct(string $username, ?string $vfsRootDir = '/')
method __destruct (line 93) | public function __destruct()
method exists (line 106) | public function exists(
method ls (line 129) | public function ls(?string $dirname = ''): array
method get (line 140) | public function get(string $file)
method put (line 153) | public function put(string $file, string $content): bool
method createFtpUser (line 169) | private function createFtpUser(): void
method connect (line 229) | private function connect(): Filesystem
method disconnect (line 269) | private function disconnect(): void
method deleteFtpUser (line 286) | private function deleteFtpUser(): void
FILE: gui/themes/default/assets/js/imscp.js
function _updateMesssages (line 321) | function _updateMesssages(k, t) {
function sbmt (line 426) | function sbmt(form, uaction) {
function sprintf (line 452) | function sprintf() {
FILE: gui/themes/default/assets/js/jquery/jquery-ui.js
function t (line 6) | function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n...
function i (line 6) | function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack(...
function s (line 6) | function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("positi...
function n (line 6) | function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[...
function a (line 6) | function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, ....
function o (line 6) | function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent(...
function r (line 6) | function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);ret...
function h (line 6) | function h(e){return function(){var t=this.element.val();e.apply(this,ar...
function s (line 6) | function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"pa...
function r (line 6) | function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-st...
function i (line 6) | function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}
function t (line 6) | function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFl...
function i (line 6) | function i(t,i){return parseInt(e.css(t,i),10)||0}
function s (line 6) | function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t...
function i (line 7) | function i(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}
function i (line 9) | function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t...
function t (line 10) | function t(e){return{position:e.position,offset:e.offset}}
function t (line 10) | function t(e){return{originalPosition:e.originalPosition,originalSize:e....
function e (line 10) | function e(e,t,i){return e>=t&&t+i>e}
function i (line 10) | function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.de...
function s (line 10) | function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,functi...
function n (line 10) | function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(...
function t (line 10) | function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defa...
function i (line 10) | function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.st...
function t (line 10) | function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effec...
function i (line 10) | function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=...
function i (line 10) | function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)...
function s (line 10) | function s(){b.push(this),b.length===d*c&&n()}
function n (line 10) | function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}
function i (line 12) | function i(){r.push(this)}
function i (line 12) | function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}
function i (line 12) | function i(){var e=this.element[0]===this.document[0].activeElement;e||(...
function s (line 12) | function s(){return t>n&&(t=0),0>t&&(t=n),t}
function s (line 13) | function s(){a.running=!1,a._trigger("activate",t,i)}
function n (line 13) | function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-ac...
function n (line 13) | function n(e){l.of=e,a.is(":hidden")||a.position(l)}
FILE: gui/themes/default/assets/js/jquery/jquery.js
function r (line 2) | function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindo...
function fb (line 2) | function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)...
function gb (line 2) | function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLengt...
function hb (line 2) | function hb(a){return a[u]=!0,a}
function ib (line 2) | function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){re...
function jb (line 2) | function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[...
function kb (line 2) | function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sou...
function lb (line 2) | function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"...
function mb (line 2) | function mb(a){return function(b){var c=b.nodeName.toLowerCase();return(...
function nb (line 2) | function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,...
function ob (line 2) | function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}
function pb (line 2) | function pb(){}
function qb (line 2) | function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}
function rb (line 2) | function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.firs...
function sb (line 2) | function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e-...
function tb (line 2) | function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}
function ub (line 2) | function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(...
function vb (line 2) | function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)...
function wb (line 2) | function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.r...
function xb (line 2) | function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var...
function w (line 2) | function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){retur...
function D (line 2) | function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}
function G (line 2) | function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b...
function I (line 2) | function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded...
function J (line 2) | function J(){(y.addEventListener||"load"===event.type||"complete"===y.re...
function O (line 2) | function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace...
function P (line 2) | function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&...
function Q (line 2) | function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType...
function R (line 3) | function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a...
function ab (line 3) | function ab(){return!0}
function bb (line 3) | function bb(){return!1}
function cb (line 3) | function cb(){try{return y.activeElement}catch(a){}}
function db (line 3) | function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.cre...
function ub (line 3) | function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getEl...
function vb (line 3) | function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}
function wb (line 3) | function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeTyp...
function xb (line 3) | function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}
function yb (line 3) | function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttrib...
function zb (line 3) | function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval"...
function Ab (line 3) | function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a)...
function Bb (line 3) | function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCas...
function Eb (line 3) | function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getD...
function Fb (line 3) | function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(...
function Lb (line 3) | function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?voi...
function i (line 3) | function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&...
function Ub (line 3) | function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.sl...
function Vb (line 3) | function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.styl...
function Wb (line 3) | function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[...
function Xb (line 3) | function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===...
function Yb (line 3) | function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f...
function Zb (line 3) | function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}
function fc (line 4) | function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}
function gc (line 4) | function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d[...
function hc (line 4) | function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.lengt...
function ic (line 4) | function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeTyp...
function jc (line 4) | function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a...
function kc (line 4) | function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(functio...
function Lc (line 4) | function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var ...
function Mc (line 4) | function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!...
function Nc (line 4) | function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)voi...
function Oc (line 4) | function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[...
function Pc (line 4) | function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])fo...
function x (line 4) | function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=v...
function Vc (line 4) | function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc....
function Zc (line 4) | function Zc(){try{return new a.XMLHttpRequest}catch(b){}}
function $c (line 4) | function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(...
function dd (line 4) | function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.pa...
FILE: gui/themes/default/assets/js/jquery/plugins/dataTables.js
function T (line 4) | function T(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+...
function G (line 4) | function G(a,b,c){a._hungarianMap||T(a);var d;h.each(b,function(e){d=a._...
function N (line 4) | function N(a){var b=p.defaults.oLanguage,c=a.sZeroRecords;
function db (line 5) | function db(a){w(a,"ordering","bSort");w(a,"orderMulti","bSortMulti");w(...
function eb (line 6) | function eb(a){w(a,"orderable","bSortable");w(a,"orderData","aDataSort")...
function fb (line 6) | function fb(a){var a=a.oBrowser,b=h("<div/>").css({position:"absolute",t...
function gb (line 7) | function gb(a,b,c,d,e,f){var g,j=!1;c!==l&&(g=c,j=!0);for(;d!==e;)a.hasO...
function Aa (line 7) | function Aa(a,b){var c=p.defaults.column,d=a.aoColumns.length,c=h.extend...
function fa (line 8) | function fa(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sW...
function V (line 10) | function V(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ca(a);fo...
function ga (line 11) | function ga(a,b){var c=X(a,"bVisible");return"number"===typeof c[b]?c[b]...
function Y (line 11) | function Y(a,b){var c=X(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}
function Z (line 11) | function Z(a){return X(a,"bVisible").length}
function X (line 11) | function X(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)...
function Da (line 11) | function Da(a){var b=a.aoColumns,c=a.aoData,d=p.ext.type.detect,e,f,g,j,...
function hb (line 12) | function hb(a,b,c,d){var e,f,g,j,i,n,m=a.aoColumns;if(b)for(e=b.length-1...
function I (line 13) | function I(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},p.models.oRow...
function ha (line 13) | function ha(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,
function A (line 14) | function A(a,b,c,d){var e=a.iDraw,f=a.aoColumns[c],g=a.aoData[b]._aData,...
function Ea (line 14) | function Ea(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,
function Ga (line 15) | function Ga(a){return h.map(a.match(/(\\.|[^\.])+/g),function(a){return ...
function U (line 15) | function U(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&...
function Ba (line 16) | function Ba(a){if(h.isPlainObject(a))return Ba(a._);
function Ha (line 18) | function Ha(a){return C(a.aoData,"_aData")}
function ja (line 18) | function ja(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay....
function ka (line 18) | function ka(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>...
function la (line 18) | function la(a,b,c,d){var e=a.aoData[b],f;if("dom"===c||(!c||"auto"===c)&...
function ia (line 19) | function ia(a,b){var c=[],d=[],e=b.firstChild,f,g,j,i=0,n,m=a.aoColumns,...
function Fa (line 20) | function Fa(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,h,m,o;if(null...
function Ia (line 21) | function Ia(a){var b=a.nTr,c=a._aData;if(b){c.DT_RowId&&(b.id=c.DT_RowId...
function ib (line 22) | function ib(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0===h("th, td",g).l...
function ba (line 23) | function ba(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,n;if(b){c===...
function K (line 24) | function K(a){var b=u(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inA...
function L (line 27) | function L(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&kb(a);d?ca(a,a.oP...
function lb (line 27) | function lb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore...
function aa (line 29) | function aa(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,n,m,o,k;a.splice(...
function ma (line 30) | function ma(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],aa(c,b)));for(var ...
function na (line 31) | function na(a,b,c){u(a,"aoServerParams","serverParams",[b]);if(b&&h.isAr...
function jb (line 33) | function jb(a){return a.bAjaxDataGet?(a.iDraw++,B(a,!0),na(a,sb(a),funct...
function sb (line 33) | function sb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousS...
function tb (line 35) | function tb(a,b){var c=b.sEcho!==l?b.sEcho:b.draw,d=b.iTotalRecords!==l?...
function oa (line 36) | function oa(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==l?a.aja...
function nb (line 36) | function nb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPrevious...
function ca (line 38) | function ca(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=functio...
function wb (line 39) | function wb(a){for(var b=p.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f...
function vb (line 39) | function vb(a,b,c,d,e,f){if(""!==b)for(var g=a.aiDisplay,d=Na(b,d,e,f),e...
function ub (line 39) | function ub(a,b,c,d,e,f){var d=Na(b,d,e,f),e=a.oPreviousSearch.sSearch,f...
function Na (line 40) | function Na(a,b,c,d){a=b?a:Oa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|...
function Oa (line 40) | function Oa(a){return a.replace(Vb,"\\$1")}
function xb (line 40) | function xb(a){var b=
function yb (line 41) | function yb(a){return{search:a.sSearch,
function zb (line 42) | function zb(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCa...
function qb (line 42) | function qb(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":...
function Ab (line 42) | function Ab(a){var b=a.aanFeatures.i;if(0!==b.length){var c=
function Bb (line 43) | function Bb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDispl...
function ra (line 44) | function ra(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatur...
function pa (line 45) | function pa(a,b){a._bInitComplete=!0;b&&V(a);u(a,"aoInitComplete","init"...
function Pa (line 45) | function Pa(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Qa(a);u(a,null...
function mb (line 45) | function mb(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isA...
function rb (line 46) | function rb(a){var b=a.sPaginationType,c=p.ext.pager[b],d="function"===t...
function Ra (line 47) | function Ra(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnReco...
function ob (line 48) | function ob(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_proce...
function B (line 48) | function B(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display...
function pb (line 48) | function pb(a){var b=h(a.nTable);b.attr("role",
function W (line 51) | function W(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,f=b.iBarWidth,g=...
function F (line 56) | function F(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild...
function Ca (line 56) | function Ca(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=...
function Ma (line 59) | function Ma(a,b){var c=b||200,d,e;return function(){var b=this,g=+new Da...
function Cb (line 59) | function Cb(a,b){if(!a)return 0;var c=h("<div/>").css("width",s(a)).appe...
function Eb (line 59) | function Eb(a,b){var c=
function Db (line 60) | function Db(a,b){var c=Fb(a,b);if(0>c)return null;var d=a.aoData[c];retu...
function Fb (line 60) | function Fb(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=A(a...
function s (line 60) | function s(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":...
function Gb (line 60) | function Gb(){if(!p.__scrollbarWidth){var a=
function R (line 61) | function R(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h....
function kb (line 62) | function kb(a){var b,c,d=[],e=p.ext.type.order,f=a.aoData,g=0,j,i=a.aiDi...
function Ib (line 63) | function Ib(a){for(var b,c,
function Sa (line 64) | function Sa(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=func...
function Ka (line 65) | function Ka(a,b,c,d){var e=a.aoColumns[c];Ta(b,{},function(b){!1!==e.bSo...
function sa (line 66) | function sa(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=R(a),e=a.oFe...
function Hb (line 66) | function Hb(a,b){var c=a.aoColumns[b],d=p.ext.order[c.sSortDataType],e;d...
function ta (line 67) | function ta(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+n...
function Jb (line 68) | function Jb(a){var b,c,d=a.aoColumns;if(a.oFeatures.bStateSave){var e=a....
function ua (line 69) | function ua(a){var b=p.settings,a=h.inArray(a,C(b,"nTable"));return-1!==...
function P (line 69) | function P(a,b,c,d){c="DataTables warning: "+(null!==a?"table id="+a.sTa...
function D (line 70) | function D(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?D(a...
function Kb (line 70) | function Kb(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],h.isP...
function Ta (line 70) | function Ta(a,b,c){h(a).bind("click.DT",b,function(b){a.blur();
function x (line 71) | function x(a,b,c,d){c&&a[b].push({fn:c,sName:d})}
function u (line 71) | function u(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function...
function Qa (line 71) | function Qa(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLe...
function La (line 71) | function La(a,b){var c=
function z (line 72) | function z(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource...
function Ua (line 72) | function Ua(a,b){var c=[],c=Lb.numbers_length,d=Math.floor(c/2);b<=c?c=S...
function cb (line 72) | function cb(a){h.each({num:function(b){return va(b,
function Mb (line 73) | function Mb(a){return function(){var b=[ua(this[p.ext.iApiIndex])].conca...
FILE: gui/themes/default/assets/js/jquery/plugins/dataTables_naturalSorting.js
function naturalSort (line 30) | function naturalSort (a, b) {
FILE: gui/themes/default/assets/js/jquery/plugins/pGenerator.js
function shuffle (line 134) | function shuffle(o){ // v1.0
function randomFromInterval (line 139) | function randomFromInterval(from, to)
Copy disabled (too large)
Download .json
Condensed preview — 972 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (23,891K chars).
[
{
"path": ".gitattributes",
"chars": 158,
"preview": ".gitattributes export-ignore\n.gitignore export-ignore\n* text eol=lf\n*.gif binary\n*.jpg binary\n*.mo binary\n*.mgc binary\n*"
},
{
"path": ".gitignore",
"chars": 118,
"preview": "*.PHPEditProject\n.idea\nnbproject\n.pc\n.buildpath\n.project\n.vagrant\n.settings\n/Vagrantfile\n.DS_Store\n_Deparsed_XSubs.pm\n"
},
{
"path": "AUTHORS",
"chars": 148,
"preview": "© 2010-2019, Laurent Declercq (i-MSCP™)\nAll rights reserved\n\nhttp://www.i-mscp.net\nhttps://github.com/i-MSCP/imscp\n\nLice"
},
{
"path": "CHANGELOG",
"chars": 31171,
"preview": "i-MSCP ChangeLog\n\n--------------------------------------------------------------------------------\nGit 1.5.x\n-----------"
},
{
"path": "COPYING",
"chars": 90,
"preview": "See the following files:\n docs/LICENSE-GPL2\n docs/LICENSE-LGPL2.1\n docs/LICENSE-MPL1.1\n"
},
{
"path": "README.md",
"chars": 1218,
"preview": "## i-MSCP - internet Multi Server Control Panel\n\ni-MSCP (internet Multi Server Control Panel) is an open source software"
},
{
"path": "Vagrant/README.md",
"chars": 3729,
"preview": "# i-MSCP Vagrant box\n\nThis directory contains all you need to setup a\n[Vagrant](http://www.vagrantup.com/) box with i-MS"
},
{
"path": "Vagrant/Vagrantfile",
"chars": 3935,
"preview": "# i-MSCP - internet Multi Server Control Panel\n# Copyright 2010-2018 by Laurent Declercq <l.declercq@nuxwin.com>\n#\n# Thi"
},
{
"path": "Vagrant/scripts/distro_update.sh",
"chars": 914,
"preview": "#!/bin/sh\n# i-MSCP - internet Multi Server Control Panel\n# Copyright 2010-2019 by Laurent Declercq <l.declercq@nuxwin.co"
},
{
"path": "Vagrant/scripts/provision_imscp.sh",
"chars": 1066,
"preview": "#!/bin/sh\n# i-MSCP - internet Multi Server Control Panel\n# Copyright 2010-2019 by Laurent Declercq <l.declercq@nuxwin.co"
},
{
"path": "autoinstaller/Adapter/AbstractAdapter.pm",
"chars": 1605,
"preview": "=head1 NAME\n\n autoinstaller::Adapter::AbstractAdapter - Abstract installer adapter\n\n=cut\n\n# i-MSCP - internet Multi Serv"
},
{
"path": "autoinstaller/Adapter/DebianAdapter.pm",
"chars": 60009,
"preview": "=head1 NAME\n\n autoinstaller::Adapter::DebianAdapter - Debian installer adapter\n\n=cut\n\n# i-MSCP - internet Multi Server C"
},
{
"path": "autoinstaller/Adapter/DevuanAdapter.pm",
"chars": 943,
"preview": "=head1 NAME\n\n autoinstaller::Adapter::DevuanAdapter - Devuan installer adapter\n\n=cut\n\n# i-MSCP - internet Multi Server C"
},
{
"path": "autoinstaller/Adapter/UbuntuAdapter.pm",
"chars": 1225,
"preview": "=head1 NAME\n\n autoinstaller::Adapter::UbuntuAdapter - Ubuntu installer adapter\n\n=cut\n\n# i-MSCP - internet Multi Server C"
},
{
"path": "autoinstaller/Adapter/managed_services.txt",
"chars": 210,
"preview": "apache2\nbind9\ncourier-authdaemon\ncourier-imap\ncourier-imap-ssl\ncourier-pop\ncourier-pop-ssl\ncron dovecot\nnginx\nphp5.6-fpm"
},
{
"path": "autoinstaller/Functions.pm",
"chars": 31075,
"preview": "=head1 NAME\n\n autoinstaller::Functions - Functions for the i-MSCP autoinstaller\n\n=cut\n\n# i-MSCP - internet Multi Server "
},
{
"path": "autoinstaller/Layout/Debian.xml",
"chars": 745,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders export=\"INST_PREF\">/tmp/imscp</folders>\n <folders expor"
},
{
"path": "autoinstaller/Packages/debian-buster.xml",
"chars": 21545,
"preview": "<packages>\n <frontend\n description=\"Http server for the control panel\"\n has_alternatives=\"1\"\n "
},
{
"path": "autoinstaller/Packages/debian-stretch.xml",
"chars": 24010,
"preview": "<packages>\n <frontend\n description=\"Http server for the control panel\"\n has_alternatives=\"1\"\n "
},
{
"path": "autoinstaller/Packages/devuan-ascii.xml",
"chars": 23564,
"preview": "<packages>\n <frontend\n description=\"Http server for the control panel\"\n has_alternatives=\"1\"\n "
},
{
"path": "autoinstaller/Packages/ubuntu-bionic.xml",
"chars": 24520,
"preview": "<packages>\n <frontend\n description=\"Http server for the control panel\"\n has_alternatives=\"1\"\n "
},
{
"path": "autoinstaller/Packages/ubuntu-xenial.xml",
"chars": 25725,
"preview": "<packages>\n <frontend\n description=\"Http server for the control panel\"\n has_alternatives=\"1\"\n "
},
{
"path": "autoinstaller/postinstall/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "autoinstaller/postinstall/apache2_postinst.sh",
"chars": 6830,
"preview": "#!/bin/sh\n# i-MSCP - internet Multi Server Control Panel\n# Copyright 2010-2017 by Laurent Declercq <l.declercq@nuxwin.co"
},
{
"path": "autoinstaller/preinstall/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/apache/00_imscp.conf",
"chars": 90,
"preview": "Include \"{HTTPD_CUSTOM_SITES_DIR}/before/\"\n\n# SECTION custom BEGIN.\n# SECTION custom END.\n"
},
{
"path": "configs/debian/apache/00_nameserver.conf",
"chars": 2065,
"preview": "## Security\n\n# Hide server information\nServerSignature Off\nServerTokens Prod\n\n# Disable access to the entire file system"
},
{
"path": "configs/debian/apache/apache.data.dist",
"chars": 616,
"preview": "HTTPD_VERSION =\nHTTPD_USER = www-data\nHTTPD_GROUP = www-data\nHTTPD_SNAME = apache2\nHTTPD_CONF_DIR = /etc/apache2\nHTTPD_M"
},
{
"path": "configs/debian/apache/install.xml",
"chars": 818,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders export=\"ROOT_APACHE_CONF\">${ROOT_CONF}/apache2</folders>\n "
},
{
"path": "configs/debian/apache/logrotate.conf",
"chars": 392,
"preview": "# LOGROTATE(8) configuration file for APACHE2(8) - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR "
},
{
"path": "configs/debian/apache/parts/custom.conf.tpl",
"chars": 199,
"preview": "# Custom Apache configuration for {DOMAIN_NAME}\n#\n# Any changes made to this file will be preserved on update.\n# i-MSCP "
},
{
"path": "configs/debian/apache/parts/domain.tpl",
"chars": 4771,
"preview": "<VirtualHost {DOMAIN_IPS}>\n ServerAdmin webmaster@{DOMAIN_NAME}\n ServerName {DOMAIN_NAME}\n ServerAlias {SERVER_"
},
{
"path": "configs/debian/apache/parts/domain_disabled.tpl",
"chars": 987,
"preview": "<VirtualHost {DOMAIN_IPS}>\n ServerAdmin webmaster@{DOMAIN_NAME}\n ServerName {DOMAIN_NAME}\n ServerAlias {SERVER_"
},
{
"path": "configs/debian/apache/vlogger",
"chars": 18352,
"preview": "#!/usr/bin/perl -T\n#\n# vlogger - smarter logging for apache\n# Laurent Declercq <l.declercq@nuxwin.com>\n# steve j. kondik"
},
{
"path": "configs/debian/apache/vlogger.conf.tpl",
"chars": 201,
"preview": "# vlogger configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVER"
},
{
"path": "configs/debian/apache/vlogger.sql",
"chars": 256,
"preview": "CREATE TABLE IF NOT EXISTS `httpd_vlogger` (\n `vhost` varchar(255) NOT NULL,\n `ldate` int(8) UNSIGNED NOT NULL,\n `byt"
},
{
"path": "configs/debian/apt/01norecommend",
"chars": 191,
"preview": "# APT(8) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERW"
},
{
"path": "configs/debian/apt/install.xml",
"chars": 184,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${ROOT_CONF}/apt/apt.conf.d</folders>\n <copy_config>${R"
},
{
"path": "configs/debian/bind/bind.data.dist",
"chars": 844,
"preview": "BIND_USER = bind\nBIND_GROUP = bind\n\nBIND_CONF_DIR = /etc/bind\nBIND_CONF_DEFAULT_FILE = /etc/default/bind9\nBIND_CONF_FILE"
},
{
"path": "configs/debian/bind/install.xml",
"chars": 527,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/bind</folders>\n <folders>${SYSTEM_CONF}/"
},
{
"path": "configs/debian/bind/named.conf",
"chars": 563,
"preview": "\n// This is the primary configuration file for the BIND DNS server named.\n//\n// Please read /usr/share/doc/bind9/README."
},
{
"path": "configs/debian/bind/named.conf.local",
"chars": 234,
"preview": "//\n// Do any local configuration here\n//\n\n// Consider adding the 1918 zones here, if they are not used in your\n// organi"
},
{
"path": "configs/debian/bind/named.conf.options",
"chars": 1285,
"preview": "options {\n directory \"/var/cache/bind\";\n\n // If there is a firewall between you and nameservers you want\n "
},
{
"path": "configs/debian/bind/parts/cfg_master.tpl",
"chars": 171,
"preview": "zone \"{DOMAIN_NAME}\" {\n type master;\n masterfile-format {BIND_DB_FORMAT};\n file \"imscp/master/{DOMAIN_NAME}.db\";\n al"
},
{
"path": "configs/debian/bind/parts/cfg_slave.tpl",
"chars": 146,
"preview": "zone \"{DOMAIN_NAME}\" {\n type slave;\n masterfile-format {BIND_DB_FORMAT};\n file \"imscp/slave/{DOMAIN_NAME}.db\";\n mast"
},
{
"path": "configs/debian/bind/parts/db.tpl",
"chars": 959,
"preview": "$TTL 3H\n$ORIGIN {DOMAIN_NAME}.\n@\tIN\tSOA\tns1.{DOMAIN_NAME}. hostmaster.{DOMAIN_NAME}. (\n\t{TIMESTAMP}; Serial\n\t3H; Refresh"
},
{
"path": "configs/debian/bind/parts/db_sub.tpl",
"chars": 666,
"preview": "; subdomain [{SUBDOMAIN_NAME}] records BEGIN\n$ORIGIN {SUBDOMAIN_NAME}.\n; subdomain MAIL records BEGIN\n@\tIN\tMX\t10 mail\n@\t"
},
{
"path": "configs/debian/courier/authmysqlrc",
"chars": 897,
"preview": "# courier-authmysqlrc configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES "
},
{
"path": "configs/debian/courier/courier.data.dist",
"chars": 641,
"preview": "# Courier authdaemon\nAUTHDAEMON_USER = daemon\nAUTHDAEMON_GROUP = daemon\nAUTHLIB_CONF_DIR = /etc/courier\nAUTHLIB_SOCKET_D"
},
{
"path": "configs/debian/courier/imapd.local",
"chars": 228,
"preview": "# courier-imapd configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL B"
},
{
"path": "configs/debian/courier/install.xml",
"chars": 437,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/courier</folders>\n <copy_config>${SYSTEM"
},
{
"path": "configs/debian/courier/quota-warning",
"chars": 307,
"preview": "From: Mail Delivery System <postmaster@{HOST_NAME}>\nReply-To: postmaster@{HOST_NAME}\nTo: Valued Customer:;\nSubject: i-MS"
},
{
"path": "configs/debian/courier/sasl/smtpd.conf",
"chars": 228,
"preview": "# SASL(3) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVER"
},
{
"path": "configs/debian/cron/cron.data.dist",
"chars": 43,
"preview": "CRON_SNAME = cron\nCRON_D_DIR = /etc/cron.d\n"
},
{
"path": "configs/debian/cron/imscp",
"chars": 827,
"preview": "# CRON(8) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVER"
},
{
"path": "configs/debian/cron/install.xml",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/cron</folders>\n <copy_config>${SYSTEM_CO"
},
{
"path": "configs/debian/database/database.sql",
"chars": 26399,
"preview": "--\n-- Table structure for table `admin`\n--\n\ncreate table if not exists `admin` (\n `admin_id` int(10) unsigned not null "
},
{
"path": "configs/debian/database/install.xml",
"chars": 175,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/database</folders>\n <copy_config>${SYSTE"
},
{
"path": "configs/debian/dovecot/dovecot-managesieve.conf",
"chars": 249,
"preview": "# DOVECOT(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/dovecot/dovecot-sql.conf",
"chars": 1317,
"preview": "# DOVECOT(1) (SQL) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WIL"
},
{
"path": "configs/debian/dovecot/dovecot.conf",
"chars": 3490,
"preview": "# DOVECOT(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/dovecot/dovecot.data.dist",
"chars": 824,
"preview": "DOVECOT_VERSION =\nDOVECOT_SNAME = dovecot\nDOVECOT_CONF_DIR = /etc/dovecot\nDOVECOT_LDA_AUTH_SOCKET_PATH = /var/run/doveco"
},
{
"path": "configs/debian/dovecot/install.xml",
"chars": 638,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/dovecot</folders>\n <folders>${SYSTEM_CON"
},
{
"path": "configs/debian/dovecot/quota-warning",
"chars": 251,
"preview": "#!/bin/sh\nPERCENT=$1\nUSER=$2\ncat << EOF | {DOVECOT_DELIVER_PATH} -d $USER -o \"plugin/quota=maildir:User quota:noenforcin"
},
{
"path": "configs/debian/dovecot/sieve.default",
"chars": 306,
"preview": "require [\"fileinto\",\"vacation\"];\n# rule:[spam]\nif header :contains \"X-Spam-Flag\" \"YES\"\n{\n fileinto \"INBOX.Junk\";\n "
},
{
"path": "configs/debian/dpkg/90imscp",
"chars": 306,
"preview": "# dpkg(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVER"
},
{
"path": "configs/debian/dpkg/install.xml",
"chars": 178,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${ROOT_CONF}/apt/apt.conf.d</folders>\n <copy_config>${R"
},
{
"path": "configs/debian/frontend/00_master.nginx",
"chars": 1535,
"preview": "# nginx(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVE"
},
{
"path": "configs/debian/frontend/00_master_ssl.nginx",
"chars": 1757,
"preview": "# nginx(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVE"
},
{
"path": "configs/debian/frontend/frontend.data.dist",
"chars": 819,
"preview": "## HTTPD (Nginx) parameters\n\nHTTPD_NAME = Nginx\nHTTPD_VERSION =\nHTTPD_WORKER_PROCESSES = auto\nHTTPD_WORKER_CONNECTIONS ="
},
{
"path": "configs/debian/frontend/imscp_fastcgi.nginx",
"chars": 1571,
"preview": "# nginx(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVE"
},
{
"path": "configs/debian/frontend/imscp_panel",
"chars": 515,
"preview": "# LOGROTATE(8) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE"
},
{
"path": "configs/debian/frontend/imscp_panel_reopenlogs",
"chars": 318,
"preview": "#!/bin/sh\nCONFFILE=/usr/local/etc/imscp_panel/php-fpm.conf\n[ -r /etc/default/imscp_panel ] && . /etc/default/imscp_panel"
},
{
"path": "configs/debian/frontend/imscp_php.nginx",
"chars": 196,
"preview": "# nginx(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVE"
},
{
"path": "configs/debian/frontend/install.xml",
"chars": 1213,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${ROOT_CONF}/logrotate.d</folders>\n <folders export=\"RO"
},
{
"path": "configs/debian/frontend/nginx.nginx",
"chars": 2471,
"preview": "# nginx(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVE"
},
{
"path": "configs/debian/frontend/php-fpm.conf",
"chars": 1672,
"preview": "; PHP-FPM(8) configuration file - auto-generated by i-MSCP\n; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/frontend/php.ini",
"chars": 69329,
"preview": "; PHP-FPM(8) configuration file - auto-generated by i-MSCP\n; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/imscp.conf",
"chars": 4863,
"preview": "## i-MSCP version info\n\nVersion = Git 1.5.x\nBuild =\nCodeName = Ennio Morricone\nPluginApi = 1.5.1\n\n# Distro info\n\nDISTRO_"
},
{
"path": "configs/debian/install.xml",
"chars": 117,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <copy_config>${SYSTEM_CONF}/imscp.conf</copy_config>\n</install>\n"
},
{
"path": "configs/debian/libpam-mysql/patches/dpatch/03_undefined_make_scrambled_password_symbol.patch",
"chars": 1287,
"preview": "#! /bin/sh /usr/share/dpatch/dpatch-run\n## 03_undefined_make_scrambled_password_symbol.patch by <root@xenial.nuxwin.com"
},
{
"path": "configs/debian/libpam-mysql/patches/dpatch/04_resps_segfault.patch",
"chars": 857,
"preview": "#! /bin/sh /usr/share/dpatch/dpatch-run\n## 04_resps_segfault.patch by <l.declercq@nuxwin.com>\n##\n## All lines beginning "
},
{
"path": "configs/debian/listeners.d/README.md",
"chars": 1467,
"preview": "i-MSCP listener files\n=====================\n\n### Introduction\n\nThis directory contains the listener files which are resp"
},
{
"path": "configs/debian/listeners.d/install.xml",
"chars": 178,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/listeners.d</folders>\n <copy_config>${SY"
},
{
"path": "configs/debian/logrotate.d/imscp",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/logrotate.d/install.xml",
"chars": 234,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${ROOT_CONF}/logrotate.d</folders>\n <copy_config>${ROOT"
},
{
"path": "configs/debian/logrotate.d/rsyslog",
"chars": 687,
"preview": "/var/log/syslog\n{\n\trotate 7\n\tdaily\n\tmissingok\n\tnotifempty\n\tdelaycompress\n\tcompress\n\tpostrotate\n\t\tinvoke-rc.d --quiet rsy"
},
{
"path": "configs/debian/mounts/install.xml",
"chars": 170,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/mounts</folders>\n <copy_config>${SYSTEM_"
},
{
"path": "configs/debian/mounts/mounts.conf",
"chars": 390,
"preview": "# FSTAB(5)-like configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL B"
},
{
"path": "configs/debian/mysql/imscp.cnf",
"chars": 197,
"preview": "[client]\nhost = {DATABASE_HOST}\nport = {DATABASE_PORT}\nuser = \"{DATABASE_USER}\"\npassword = \"{DATABASE_PASSWO"
},
{
"path": "configs/debian/mysql/install.xml",
"chars": 234,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/mysql</folders>\n <copy_config>${SYSTEM_C"
},
{
"path": "configs/debian/mysql/mysql.data.dist",
"chars": 123,
"preview": "SQLD_TYPE =\nSQLD_VERSION =\nSQLD_CONF_DIR = /etc/mysql\nSQLD_SOCK_DIR = /var/run/mysqld\nSQLD_USER = mysql\nSQLD_GROUP = mys"
},
{
"path": "configs/debian/openssl/install.xml",
"chars": 176,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/openssl</folders>\n <copy_config>${SYSTEM"
},
{
"path": "configs/debian/openssl/openssl.cnf.tpl",
"chars": 624,
"preview": "# i-MSCP openssl.cnf template file for self-signed certificates\n\n[req]\ndistinguished_name = req_distinguished_name\ndefau"
},
{
"path": "configs/debian/pbuilder/pbuilderrc",
"chars": 678,
"preview": "AUTO_DEBSIGN=${AUTO_DEBSIGN:-no}\nAUTOCLEANAPTCACHE=\"yes\"\nAPTCONFDIR=$(pwd)/.imscp\n#APTKEYRINGS=\"/usr/share/keyrings/debi"
},
{
"path": "configs/debian/php/apache/php.ini",
"chars": 68469,
"preview": "[PHP]\n\n;;;;;;;;;;;;;;;;;;;\n; About php.ini ;\n;;;;;;;;;;;;;;;;;;;\n; PHP's initialization file, generally called php.ini"
},
{
"path": "configs/debian/php/fcgi/apache_fcgid_module.conf",
"chars": 574,
"preview": "<IfModule fcgid_module>\n AddHandler fcgid-script .php .php3 .php4 .php5 .php7 .pht .phtml\n\n FcgidConnectTimeout 20"
},
{
"path": "configs/debian/php/fcgi/php-fcgi-starter",
"chars": 238,
"preview": "#!/bin/sh\n\numask 027\nexport PHPRC={PHP_FCGI_STARTER_DIR}/{FCGID_NAME}/php{PHP_VERSION}\nexport PHP_FCGI_MAX_REQUESTS={PHP"
},
{
"path": "configs/debian/php/fcgi/php.ini",
"chars": 68526,
"preview": "; php(1) configuration file - auto-generated by i-MSCP\n; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERW"
},
{
"path": "configs/debian/php/fpm/logrotate.tpl",
"chars": 326,
"preview": "# LOGROTATE(8) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE"
},
{
"path": "configs/debian/php/fpm/php-fpm.conf",
"chars": 4597,
"preview": "; PHP-FPM(8) configuration file - auto-generated by i-MSCP\n; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/php/fpm/php.ini",
"chars": 68612,
"preview": "; php(1) configuration file - auto-generated by i-MSCP\n; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERW"
},
{
"path": "configs/debian/php/fpm/pool.conf",
"chars": 18298,
"preview": "; PHP-FPM(8) configuration file - auto-generated by i-MSCP\n; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/php/fpm/pool.conf.default",
"chars": 484,
"preview": "; PHP-FPM(8) configuration file - auto-generated by i-MSCP\n; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/php/install.xml",
"chars": 332,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/php</folders>\n <copy_config>${SYSTEM_CON"
},
{
"path": "configs/debian/php/php.data.dist",
"chars": 2026,
"preview": "## PHP common parameters\n\nPHP_CONFIG_LEVEL =\nPHP_CONF_DIR_PATH =\nPHP_PEAR_DIR = /usr/share/php\nPHP_VERSION =\n\n# Only rel"
},
{
"path": "configs/debian/postfix/install.xml",
"chars": 304,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/postfix</folders>\n <copy_config>${SYSTEM"
},
{
"path": "configs/debian/postfix/main.cf",
"chars": 2410,
"preview": "# POSTFIX(1) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/postfix/master.cf",
"chars": 2442,
"preview": "# POSTFIX(1) master(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES"
},
{
"path": "configs/debian/postfix/postfix.data.dist",
"chars": 814,
"preview": "POSTFIX_VERSION = \nPOSTFIX_USER = postfix\nPOSTFIX_GROUP = postfix\nPOSTFIX_CONF_DIR = /etc/postfix\nPOSTFIX_CONF_FILE = /e"
},
{
"path": "configs/debian/proftpd/install.xml",
"chars": 521,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${ROOT_CONF}/logrotate.d</folders>\n <folders>${SYSTEM_C"
},
{
"path": "configs/debian/proftpd/proftpd-basic",
"chars": 507,
"preview": "# LOGROTATE(8) configuration file for proftpd(8) - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR "
},
{
"path": "configs/debian/proftpd/proftpd.conf",
"chars": 4262,
"preview": "# proftpd(8) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/proftpd/proftpd.data.dist",
"chars": 428,
"preview": "PROFTPD_VERSION =\nFTPD_SNAME = proftpd\nFTPD_CONF_DIR = /etc/proftpd\nFTPD_CONF_FILE = /etc/proftpd/proftpd.conf\nFTPD_TRAF"
},
{
"path": "configs/debian/skel/README",
"chars": 403,
"preview": "Web folder skeletons\n====================\n\nThis directory contain skeletons used by the i-MSCP httpd server implementati"
},
{
"path": "configs/debian/skel/alias/00_private/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/alias/cgi-bin/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/alias/htdocs/.well-known/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/alias/htdocs/index.html",
"chars": 4010,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Homepage of {DOMAIN_NAME_UNICODE}</title>\n <meta chars"
},
{
"path": "configs/debian/skel/domain/00_private/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/domain/backups/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/domain/cgi-bin/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/domain/errors/401.html",
"chars": 715,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <title>i-MSCP internet - Multi Server Control Panel - Error 401</title>\n "
},
{
"path": "configs/debian/skel/domain/errors/403.html",
"chars": 712,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <title>i-MSCP internet - Multi Server Control Panel - Error 403</title>\n "
},
{
"path": "configs/debian/skel/domain/errors/404.html",
"chars": 717,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <title>i-MSCP internet - Multi Server Control Panel - Error 404</title>\n "
},
{
"path": "configs/debian/skel/domain/errors/500.html",
"chars": 725,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <title>i-MSCP internet - Multi Server Control Panel - Error 500</title>\n "
},
{
"path": "configs/debian/skel/domain/errors/503.html",
"chars": 722,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <title>i-MSCP internet - Multi Server Control Panel - Error 503</title>\n "
},
{
"path": "configs/debian/skel/domain/errors/inc/errordocs.css",
"chars": 1136,
"preview": "body {\n font-family: Geneva, Arial, Helvetica, sans-serif;\n margin: 0;\n}\n\nh1 {\n color: rgb(255,0,0);\n margin"
},
{
"path": "configs/debian/skel/domain/errors/inc/ie78overrides.css",
"chars": 194,
"preview": "#inner {\n background-image: url('/errors/inc/imscp_logo90.png');\n background-position: left top;\n background-re"
},
{
"path": "configs/debian/skel/domain/htdocs/.well-known/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/domain/htdocs/index.html",
"chars": 4009,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Homepage of {DOMAIN_NAME_UNICODE}</title>\n <meta chars"
},
{
"path": "configs/debian/skel/domain/logs/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/domain/phptmp/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/domain_disabled_pages/index.html",
"chars": 3966,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Domain disabled</title>\n <meta charset=\"utf-8\">\n "
},
{
"path": "configs/debian/skel/install.xml",
"chars": 410,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${SYSTEM_CONF}/skel</folders>\n <copy_config>${SYSTEM_CO"
},
{
"path": "configs/debian/skel/subdomain/00_private/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/subdomain/cgi-bin/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/subdomain/htdocs/.well-known/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "configs/debian/skel/subdomain/htdocs/index.html",
"chars": 4000,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Homepage of {DOMAIN_NAME_UNICODE}</title>\n <meta chars"
},
{
"path": "configs/debian/sysctl.d/imscp.conf",
"chars": 321,
"preview": "# SYSCTL(8) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OV"
},
{
"path": "configs/debian/sysctl.d/install.xml",
"chars": 170,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<install>\n <folders>${ROOT_CONF}/sysctl.d</folders>\n <copy_config>${ROOT_C"
},
{
"path": "configs/debian/systemd/bind9-resolvconf.service",
"chars": 498,
"preview": "# SYSTEMD.SERVICE(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES W"
},
{
"path": "configs/debian/systemd/bind9.service",
"chars": 415,
"preview": "# SYSTEMD.SERVICE(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES W"
},
{
"path": "configs/debian/systemd/courier-authdaemon.conf",
"chars": 259,
"preview": "# TMPFILES.D(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL B"
},
{
"path": "configs/debian/systemd/imscp_daemon.service",
"chars": 393,
"preview": "# SYSTEMD.SERVICE(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES W"
},
{
"path": "configs/debian/systemd/imscp_mountall.service",
"chars": 525,
"preview": "# SYSTEMD.SERVICE(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES W"
},
{
"path": "configs/debian/systemd/imscp_panel.conf",
"chars": 237,
"preview": "# TMPFILES.D(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL B"
},
{
"path": "configs/debian/systemd/imscp_panel.service",
"chars": 517,
"preview": "# SYSTEMD.SERVICE(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES W"
},
{
"path": "configs/debian/systemd/imscp_traffic.service",
"chars": 448,
"preview": "# SYSTEMD.SERVICE(5) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES W"
},
{
"path": "configs/debian/systemd/install.xml",
"chars": 1055,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders mode=\"0755\">${ROOT_CONF}/systemd/system</folders>\n <fol"
},
{
"path": "configs/debian/sysvinit/courier-authdaemon",
"chars": 1866,
"preview": "#! /bin/sh -e\n#\n### BEGIN INIT INFO\n# Provides: courier-authdaemon\n# Required-Start: $remote_fs $syslog\n# Re"
},
{
"path": "configs/debian/sysvinit/imscp_daemon",
"chars": 3230,
"preview": "#!/bin/sh\n### BEGIN INIT INFO\n# Provides: imscp_daemon\n# Required-Start: $local_fs $network $syslog\n# Requir"
},
{
"path": "configs/debian/sysvinit/imscp_mountall",
"chars": 2188,
"preview": "#!/bin/sh\n### BEGIN INIT INFO\n# Provides: imscp_mountall\n# Required-Start: $remote_fs\n# Required-Stop:\n# Sho"
},
{
"path": "configs/debian/sysvinit/imscp_panel",
"chars": 5078,
"preview": "#!/bin/sh\n### BEGIN INIT INFO\n# Provides: imscp_panel\n# Required-Start: $remote_fs $network\n# Required-Stop:"
},
{
"path": "configs/debian/sysvinit/imscp_traffic",
"chars": 2243,
"preview": "#!/bin/sh\n### BEGIN INIT INFO\n# Provides: imscp_traffic\n# Required-Start: $local_fs\n# Required-Stop: $lo"
},
{
"path": "configs/debian/sysvinit/install.xml",
"chars": 681,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders mode=\"0755\">${ROOT_CONF}/init.d</folders>\n <copy_config"
},
{
"path": "configs/debian/sysvinit/proftpd",
"chars": 5412,
"preview": "#!/bin/sh\n\n### BEGIN INIT INFO\n# Provides: proftpd\n# Required-Start: $remote_fs $syslog $local_fs $network\n#"
},
{
"path": "configs/debian/upstart/imscp_daemon.conf",
"chars": 360,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/imscp_mountall.conf",
"chars": 426,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/imscp_panel.conf",
"chars": 566,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/imscp_panel.override",
"chars": 150,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/imscp_traffic.conf",
"chars": 447,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/install.xml",
"chars": 1098,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders mode=\"0755\">${ROOT_CONF}/init</folders>\n <copy_config m"
},
{
"path": "configs/debian/upstart/php5.6-fpm.override",
"chars": 150,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/php7.0-fpm.override",
"chars": 150,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/php7.1-fpm.override",
"chars": 150,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/php7.2-fpm.override",
"chars": 150,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/upstart/php7.3-fpm.override",
"chars": 150,
"preview": "# UPSTART(7) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/vsftpd/install.xml",
"chars": 430,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${ROOT_CONF}/vsftpd/imscp</folders>\n <folders>${SYSTEM_"
},
{
"path": "configs/debian/vsftpd/patches/quilt/imscp_allow_writeable_root.patch",
"chars": 3680,
"preview": "## Description: Add allow_writeable_chroot configuration option\nIndex: vsftpd-2.3.5/parseconf.c\n========================"
},
{
"path": "configs/debian/vsftpd/vsftpd.conf",
"chars": 2984,
"preview": "# vsftpd(8) configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OV"
},
{
"path": "configs/debian/vsftpd/vsftpd.data.dist",
"chars": 332,
"preview": "VSFTPD_VERSION =\nFTPD_SNAME = vsftpd\nFTPD_CONF_FILE = /etc/vsftpd.conf\nFTPD_PAM_CONF_FILE = /etc/pam.d/vsftpd\nFTPD_USER_"
},
{
"path": "configs/debian/vsftpd/vsftpd.pam",
"chars": 650,
"preview": "# vsftpd pam configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE O"
},
{
"path": "configs/debian/vsftpd/vsftpd_user.conf",
"chars": 231,
"preview": "# vsftpd per-user basis configuration file - auto-generated by i-MSCP\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGE"
},
{
"path": "configs/devuan/install.xml",
"chars": 117,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <copy_config>${SYSTEM_CONF}/imscp.conf</copy_config>\n</install>\n"
},
{
"path": "configs/ubuntu/install.xml",
"chars": 117,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <copy_config>${SYSTEM_CONF}/imscp.conf</copy_config>\n</install>\n"
},
{
"path": "configs/ubuntu/libpam-mysql/patches/dpatch/03_undefined_make_scrambled_password_symbol.patch",
"chars": 1287,
"preview": "#! /bin/sh /usr/share/dpatch/dpatch-run\n## 03_undefined_make_scrambled_password_symbol.patch by <root@xenial.nuxwin.com"
},
{
"path": "configs/ubuntu/libpam-mysql/patches/dpatch/04_resps_segfault.patch",
"chars": 857,
"preview": "#! /bin/sh /usr/share/dpatch/dpatch-run\n## 04_resps_segfault.patch by <l.declercq@nuxwin.com>\n##\n## All lines beginning "
},
{
"path": "configs/ubuntu/pbuilder/pbuilderrc",
"chars": 855,
"preview": "AUTO_DEBSIGN=${AUTO_DEBSIGN:-no}\nAUTOCLEANAPTCACHE=\"yes\"\nAPTCONFDIR=$(pwd)/.imscp\n#APTKEYRINGS=/usr/share/keyrings/ubunt"
},
{
"path": "configs/ubuntu/proftpd/install.xml",
"chars": 521,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${ROOT_CONF}/logrotate.d</folders>\n <folders>${SYSTEM_C"
},
{
"path": "configs/ubuntu/sysvinit/install.xml",
"chars": 725,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders mode=\"0755\">${ROOT_CONF}/init.d</folders>\n <copy_config"
},
{
"path": "configs/ubuntu/vsftpd/install.xml",
"chars": 430,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<install>\n <folders>${ROOT_CONF}/vsftpd/imscp</folders>\n <folders>${SYSTEM_"
},
{
"path": "configs/ubuntu/vsftpd/patches/quilt/imscp_allow_writeable_root.patch",
"chars": 3680,
"preview": "## Description: Add allow_writeable_chroot configuration option\nIndex: vsftpd-2.3.5/parseconf.c\n========================"
},
{
"path": "configs/ubuntu/vsftpd/patches/quilt/imscp_pthread_cancel.patch",
"chars": 432,
"preview": "Description: imscp patch\nAuthor: i-MSCP Team <team@i-mscp.net>\n\n--- vsftpd-3.0.2.orig/defs.h\n+++ vsftpd-3.0.2/defs.h\n@@ "
},
{
"path": "contrib/Listeners/Apache2/10_apache2_dualstack.pl",
"chars": 1903,
"preview": "# i-MSCP Listener::Apache2::DualStack listener file\n# Copyright (C) 2010-2019 Laurent Declercq <l.declercq@nuxwin.com>\n#"
},
{
"path": "contrib/Listeners/Apache2/20_apache2_serveralias_override.pl",
"chars": 2132,
"preview": "# i-MSCP - internet Multi Server Control Panel\n# Copyright (C) 2017-2019 by Laurent Declercq <l.declercq@nnuxwin.com>\n# "
},
{
"path": "contrib/Listeners/Apache2/30_apache2_tools_proxy.pl",
"chars": 4141,
"preview": "# i-MSCP Listener::Apache2::Tools::Proxy listener file\n# Copyright (C) 2017-2019 Laurent Declercq <l.declercq@nuxwin.com"
},
{
"path": "contrib/Listeners/Apache2/40_apache2_security_headers.pl",
"chars": 2412,
"preview": "# i-MSCP Listener::Apache2::Security::Headers listener file\n# Copyright (C) 2017-2019 Laurent Declercq <l.declercq@nuxwi"
},
{
"path": "contrib/Listeners/Backup/10_backup_storage_outsourcing.pl",
"chars": 6240,
"preview": "# i-MSCP Listener::Backup::Storage::Outsourcing listener file\n# Copyright (C) 2017 Laurent Declercq <l.declercq@nuxwin.c"
},
{
"path": "contrib/Listeners/Dovecot/10_dovecot_compress.pl",
"chars": 2032,
"preview": "# i-MSCP Listener::Dovecot::Compress listener file\n# Copyright (C) 2015-2017 Rene Schuster <mail@reneschuster.de>\n#\n# Th"
},
{
"path": "contrib/Listeners/Dovecot/30_dovecot_namespace.pl",
"chars": 1711,
"preview": "# i-MSCP Listener::Dovecot::Namespace listener file\n# Copyright (C) 2015-2017 Rene Schuster <mail@reneschuster.de>\n#\n# T"
},
{
"path": "contrib/Listeners/Dovecot/40_dovecot_pfs.pl",
"chars": 1687,
"preview": "# i-MSCP Listener::Dovecot::PFS listener file\n# Copyright (C) 2016-2017 Rene Schuster <mail@reneschuster.de>\n#\n# This li"
},
{
"path": "contrib/Listeners/Dovecot/50_dovecot_plaintext.pl",
"chars": 1382,
"preview": "# i-MSCP Listener::Dovecot::Plaintext listener file\n# Copyright (C) 2015-2017 Rene Schuster <mail@reneschuster.de>\n#\n# T"
},
{
"path": "contrib/Listeners/Dovecot/60_dovecot_service_login.pl",
"chars": 3290,
"preview": "# i-MSCP Listener::Dovecot::Service::Login listener file\n# Copyright (C) 2017 Laurent Declercq <l.declercq@nuxwin.com>\n#"
},
{
"path": "contrib/Listeners/FrontEnd/10_frontend_templates_override.pl",
"chars": 1686,
"preview": "# i-MSCP Listener::FrontEnd::Templates::Override listener file\n# Copyright (C) 2016-2017 Laurent Declercq <l.declercq@nu"
},
{
"path": "contrib/Listeners/Named/10_named_global_ns.pl",
"chars": 4139,
"preview": "# i-MSCP Listener::Named::Global::NS listener file\n# Copyright (C) 2016-2019 Laurent Declercq <l.declercq@nuxwin.com>\n#\n"
},
{
"path": "contrib/Listeners/Named/10_named_localnets.pl",
"chars": 1267,
"preview": "# i-MSCP Listener::Bind9::Localnets listener file\n# Copyright (C) 2013-2019 by Laurent Declercq\n#\n# This program is free"
},
{
"path": "contrib/Listeners/Named/10_named_rrl.pl",
"chars": 2024,
"preview": "# i-MSCP Listener::Named::Rrl listener file\n# Copyright (C) 2010-2017 Laurent Declercq <l.declercq@nuxwin.com>\n#\n# This "
},
{
"path": "contrib/Listeners/Named/10_named_slave_provisioning.pl",
"chars": 7439,
"preview": "# i-MSCP Listener::Named::Slave::Provisioning listener file\n# Copyright (C) 2015 UncleJ, Arthur Mayer <mayer.arthur@gmai"
},
{
"path": "contrib/Listeners/Named/20_named_dualstack.pl",
"chars": 4796,
"preview": "# i-MSCP Listener::Bind9::DualStack listener file\n# Copyright (C) 2010-2017 Laurent Declercq <l.declercq@nuxwin.com>\n#\n#"
}
]
// ... and 772 more files (download for full content)
About this extraction
This page contains the full source code of the i-MSCP/imscp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 972 files (21.3 MB), approximately 5.6M tokens, and a symbol index with 1532 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.