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.136
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 : feature-virus.pl
# Functions for turning Virus filtering on or off on a per-domain basis sub check_depends_virus { return !$_[0]->{'spam'} ? $text{'setup_edepvirus'} : undef; } sub init_virus { $clam_wrapper_cmd = "$module_config_directory/clam-wrapper.pl"; $clamdscan_remote_wrapper_cmd = "$module_config_directory/clamdscan-remote-wrapper.pl"; } # setup_virus(&domain) # Adds an entry to the procmail file for this domain to call clamscan too sub setup_virus { &$first_print($text{'setup_virus'}); &obtain_lock_virus($_[0]); &require_spam(); local $spamrc = "$procmail_spam_dir/$_[0]->{'id'}"; # Find the clamscan recipe local @recipes = &procmail::parse_procmail_file($spamrc); local @clamrec = &find_clam_recipe(\@recipes); if (@clamrec) { # Already there? &$second_print($text{'setup_virusalready'}); } else { # Copy the wrapper program ©_clam_wrapper(); &create_clamdscan_remote_wrapper_cmd(); # Add the recipe local $recipe0 = { 'flags' => [ 'c', 'w' ], 'type' => '|', 'action' => $clam_wrapper_cmd." ". &full_clamscan_path() }; local $varon = { 'name' => 'VIRUSMODE', 'value' => 1 }; local $recipe1 = { 'flags' => [ 'e' ], 'action' => $config{'clam_delivery'} }; local $varoff = { 'name' => 'VIRUSMODE', 'value' => 0 }; if (@recipes > 1) { &procmail::create_recipe_before($recipe0, $recipes[1], $spamrc); &procmail::create_recipe_before($varon, $recipes[1], $spamrc); &procmail::create_recipe_before($recipe1, $recipes[1], $spamrc); &procmail::create_recipe_before($varoff, $recipes[1], $spamrc); } else { &procmail::create_recipe($recipe0, $spamrc); &procmail::create_recipe($varon, $spamrc); &procmail::create_recipe($recipe1, $spamrc); &procmail::create_recipe($varoff, $spamrc); } &$second_print($text{'setup_done'}); } &release_lock_virus($_[0]); return 1; } # modify_virus(&domain, &olddomain) # Doesn't have to do anything sub modify_virus { } # delete_virus(&domain) # Just remove the procmail entry that calls clamscan sub delete_virus { local $spamrc = "$procmail_spam_dir/$_[0]->{'id'}"; if (!-r $spamrc && !$_[0]->{'spam'}) { # Spam already deleted, so the whole procmail file will have been # already removed. So do nothing! return 1; } &$first_print($text{'delete_virus'}); &obtain_lock_virus($_[0]); &require_spam(); local @recipes = &procmail::parse_procmail_file($spamrc); local @clamrec = &find_clam_recipe(\@recipes); if (@clamrec) { &procmail::delete_recipe($clamrec[1]); &procmail::delete_recipe($clamrec[0]); # Also take out VIRUSMODE variables @recipes = &procmail::parse_procmail_file($spamrc); foreach my $r (reverse(@recipes)) { if ($r->{'name'} eq 'VIRUSMODE') { &procmail::delete_recipe($r); } } &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_virusnone'}); } &release_lock_virus($_[0]); return 1; } # clone_virus(&domain, &old-domain) # Does nothing, as cloning the spamassassin config clones virus settings too sub clone_virus { return 1; } # copy_clam_wrapper() # Copies the clamav wrapper script into place sub copy_clam_wrapper { ©_source_dest("$module_root_directory/clam-wrapper.pl", $clam_wrapper_cmd); &set_ownership_permissions(undef, undef, 0755, $clam_wrapper_cmd); } # validate_virus(&domain) # Make sure the domain's procmail config file calls ClamAV sub validate_virus { local ($d) = @_; &require_spam(); local $spamrc = "$procmail_spam_dir/$d->{'id'}"; return &text('validate_espamprocmail', "<tt>$spamrc</tt>") if (!-r $spamrc); local @recipes = &procmail::parse_procmail_file($spamrc); local @clamrec = &find_clam_recipe(\@recipes); return &text('validate_evirus', "<tt>$spamrc</tt>") if (!@clamrec); return undef; } # check_virus_clash() # No need to check for clashes .. sub check_virus_clash { return 0; } # find_clam_recipe(&recipes) # Returns the two recipes used for virus filtering sub find_clam_recipe { local $i; for($i=0; $i<@{$_[0]}; $i++) { if ($_[0]->[$i]->{'action'} =~ /clam(d?)scan/ || $_[0]->[$i]->{'action'} =~ /\Q$clam_wrapper_cmd\E/) { # Found clamscan .. but is the next one OK? if ($_[0]->[$i+1]->{'flags'}->[0] eq 'e') { return ( $_[0]->[$i], $_[0]->[$i+1] ); } elsif ($_[0]->[$i+2]->{'flags'}->[0] eq 'e') { return ( $_[0]->[$i], $_[0]->[$i+2] ); } } } return ( ); } # sysinfo_virus() # Returns the ClamAV version sub sysinfo_virus { local $out = &backquote_command("$config{'clamscan_cmd'} -V 2>/dev/null", 1); local $vers = $out =~ /ClamAV\s+([0-9\.]+)/i ? $1 : "Unknown"; return ( [ $text{'sysinfo_virus'}, $vers ] ); } # Update the procmail scripts for all domains that call clamscan so that they # call the wrapper instead sub fix_clam_wrapper { &require_spam(); foreach my $d (grep { $_->{'virus'} } &list_domains()) { local $spamrc = "$procmail_spam_dir/$d->{'id'}"; local @recipes = &procmail::parse_procmail_file($spamrc); local @clamrec = &find_clam_recipe(\@recipes); if ($clamrec[0]->{'action'} !~ /\Q$clam_wrapper_cmd\E/ && $clamrec[0]->{'action'} =~ /^(\S*clam(d?)scan)\s+\-$/) { $clamrec[0]->{'action'} = "$clam_wrapper_cmd $1"; &procmail::modify_recipe($clamrec[0]); } } } # get_domain_virus_delivery(&domain) # Returns the delivery mode and dest for some domain. The modes can be : # 0 - Throw away , 1 - File under home , 2 - Forward to email , 3 - Other file, # 4 - Normal ~/mail/virus file, 5 - Deliver normally , 6 - ~/Maildir/.virus/ , # -1 - Broken! sub get_domain_virus_delivery { local ($d) = @_; &require_spam(); local $spamrc = "$procmail_spam_dir/$d->{'id'}"; local @recipes = &procmail::parse_procmail_file($spamrc); local @clamrec = &find_clam_recipe(\@recipes); if (!@clamrec) { return (-1); } elsif (!$clamrec[1]) { return (5); } elsif ($clamrec[1]->{'action'} eq '/dev/null') { return (0); } elsif ($clamrec[1]->{'action'} =~ /^\$HOME\/mail\/(virus|Virus)$/) { return (4, $1); } elsif ($clamrec[1]->{'action'} =~ /^\$HOME\/Maildir\/.(virus|Virus)\/$/) { return (6, $1); } elsif ($clamrec[1]->{'action'} =~ /^\$HOME\/(.*)$/) { return (1, $1); } elsif ($clamrec[1]->{'action'} =~ /\@/) { return (2, $clamrec[1]->{'action'}); } else { return (3, $clamrec[1]->{'action'}); } } # save_domain_virus_delivery(&domain, mode, dest) # Updates the delivery method for viruses for some domain sub save_domain_virus_delivery { local ($d, $mode, $dest) = @_; &require_spam(); local $spamrc = "$procmail_spam_dir/$d->{'id'}"; local @recipes = &procmail::parse_procmail_file($spamrc); local @clamrec = &find_clam_recipe(\@recipes); return 0 if (!@clamrec); local $r = $clamrec[1]; # Preserve existing settings if not set local ($oldmode, $olddest) = &get_domain_virus_delivery($d); if (!defined($mode)) { ($mode, $dest) = ($oldmode, $olddest); } elsif (!defined($dest)) { $dest = $olddest; } # Work out folder name, defaulting to upper case local $folder; if ($mode == 4 || $mode == 6) { if ($dest =~ /^[a-z0-9\.\_\-]+$/i) { $folder = $dest; } else { $folder = "Virus"; } } $r->{'action'} = $mode == 0 ? "/dev/null" : $mode == 4 ? "\$HOME/mail/$folder" : $mode == 6 ? "\$HOME/Maildir/.$folder/" : $mode == 1 ? "\$HOME/$dest" : $dest; $r->{'type'} = $mode == 2 ? "!" : ""; &procmail::modify_recipe($r); return 1; } # full_clamscan_path() # Returns the clamav scan command, using the full path plus any args sub full_clamscan_path { local $prog = $config{'clamscan_cmd'}; if ($prog eq "clamd-stream-client") { $prog .= &make_stream_client_args($config{'clamscan_host'}); } elsif ($prog eq "clamdscan") { $prog .= &get_clamdscan_args(); } elsif ($prog eq "clamdscan-remote") { $prog = $clamdscan_remote_wrapper_cmd. &make_stream_client_args($config{'clamscan_host'}); } local ($cmd, @args) = &split_quoted_string($prog); local $fullcmd = &has_command($cmd); return undef if (!$fullcmd); local @rv = ( $fullcmd, @args ); return join(" ", map { /\s/ ? "\"$_\"" : $_ } @rv); } # make_stream_client_args([host[:port]]) # Convert a hostname with possible port into an arg string sub make_stream_client_args { my ($hostport) = @_; my ($host, $port) = split(/:/, $hostport); my $rv; if ($host) { $rv .= " -d ".$host; if ($port) { $rv .= " -p ".$port; } } return $rv; } # get_clamdscan_args() # Returns any extra args needed for clamdscan, like for the config file sub get_clamdscan_args { local $scanfile = "/etc/clamd.d/scan.conf"; &foreign_require("init"); if (-r $scanfile && (&init::action_status("clamd\@scan") || &init::action_status("clamd.scan"))) { return " --config-file ".$scanfile; } return undef; } # get_domain_virus_scanner(&domain) # Returns the virus scanning command use for some domain. This can be clamscan, # clamdscan or some other path. sub get_domain_virus_scanner { local ($d) = @_; &require_spam(); local $spamrc = "$procmail_spam_dir/$d->{'id'}"; local @recipes = &procmail::parse_procmail_file($spamrc); local @clamrec = &find_clam_recipe(\@recipes); if (@clamrec) { local $rv = $clamrec[0]->{'action'}; $rv =~ s/^\Q$clam_wrapper_cmd\E\s+//; local @rvs = &split_quoted_string($rv); if ($rvs[0] eq &has_command("clamscan")) { $rv = "clamscan"; } elsif ($rvs[0] eq &has_command("clamdscan")) { $rv = "clamdscan"; } elsif ($rvs[0] eq &has_command("clamd-stream-client")) { $rv = "clamd-stream-client"; } elsif ($rvs[0] eq $clamdscan_remote_wrapper_cmd) { $rv = "clamdscan-remote"; } return $rv; } else { return undef; } } # save_domain_virus_scanner(&domain, program) # Updates the virus scanning program in the procmail config sub save_domain_virus_scanner { local ($d, $prog) = @_; &require_spam(); local $spamrc = "$procmail_spam_dir/$d->{'id'}"; local @recipes = &procmail::parse_procmail_file($spamrc); local @clamrec = &find_clam_recipe(\@recipes); if (@clamrec) { if ($prog eq "clamscan") { $prog = &has_command("clamscan"); } elsif ($prog eq "clamdscan") { $prog = &has_command("clamdscan"); $prog .= &get_clamdscan_args(); } elsif ($prog eq "clamd-stream-client") { $prog = &has_command("clamd-stream-client"); $prog .= &make_stream_client_args($config{'clamscan_host'}); } elsif ($prog eq "clamdscan-remote") { $prog = $clamdscan_remote_wrapper_cmd; $prog .= &make_stream_client_args($config{'clamscan_host'}); if (!-r $clamdscan_remote_wrapper_cmd) { &create_clamdscan_remote_wrapper_cmd(); } } $clamrec[0]->{'action'} = "$clam_wrapper_cmd $prog"; &procmail::modify_recipe($clamrec[0]); } } # create_clamdscan_remote_wrapper_cmd() # Create a command to call clamdscan with a remote target in the /etc dir sub create_clamdscan_remote_wrapper_cmd { ©_source_dest("$module_root_directory/clamdscan-remote-wrapper.pl", $clamdscan_remote_wrapper_cmd); } # get_global_virus_scanner() # Returns the virus scanning program used by all domains, and possibly also # the clamd hostname sub get_global_virus_scanner { if ($config{'clamscan_cmd_global'}) { # We know it from the module config return ($config{'clamscan_cmd'}, $config{'clamscan_host'}); } else { # Find the most used one for all domains local (%cmdcount, $maxcmd); foreach my $d (grep { $_->{'virus'} } &list_domains()) { local $cmd = &get_domain_virus_scanner($d); if ($cmd) { $cmdcount{$cmd}++; if (!$maxcmd || $cmdcount{$cmd} > $cmdcount{$maxcmd}) { $maxcmd = $cmd; } } } return ($maxcmd || $config{'clamscan_cmd'}, undef); } } # save_global_virus_scanner(command, scanner-host) # Update all domains to use a new scanning command sub save_global_virus_scanner { local ($cmd, $host) = @_; $config{'clamscan_cmd'} = $cmd; $config{'clamscan_cmd_global'} = 1; $config{'clamscan_host'} = $host; $config{'last_check'} = time()+1; &save_module_config(); foreach my $d (grep { $_->{'virus'} } &list_domains()) { &save_domain_virus_scanner($d, $cmd); } } # test_virus_scanner(command, [host]) # Tests some virus scanning command. Returns an error message on failure, undef # on success. If clamscan takes more than 10 seconds, this typically assumes # that it is working but slow. sub test_virus_scanner { local ($cmd, $host) = @_; local $fullcmd = $cmd; if ($cmd eq "clamd-stream-client") { # Set remote host $fullcmd .= &make_stream_client_args($host); } elsif ($cmd eq "clamdscan-remote") { # Use actual wrapper and set remote host $fullcmd = $clamdscan_remote_wrapper_cmd." ". &make_stream_client_args($host); } else { # Tell command to use stdin if ($cmd eq "clamdscan") { $fullcmd .= &get_clamdscan_args(); } $fullcmd .= " -"; } local ($out, $timed_out) = &backquote_with_timeout("$fullcmd </dev/null 2>&1", 10, 1); if ($timed_out) { return undef; } elsif ($?) { return "<pre>".&html_escape($out)."</pre>"; } elsif ($cmd ne "clamd-stream-client" && $out !~ /OK/) { return $text{'sv_etestok'}; } else { return undef; } } # check_clamd_status() # Checks if clamd is configured and running on this system. Returns 0 if not, # 1 if yes, or -1 if we can't tell (due to a non-supported OS). sub check_clamd_status { local %avahi_pids = map { $_, 1 } grep { $_ != $$ } &find_byname("avahi-daemon"); local @pids = grep { $_ != $$ && !$avahi_pids{$_} } &find_byname("clamd"); if (@pids) { # Running already, so we assume everything is cool return 1; } local $clamd = &has_command("clamd") || &has_command("/opt/csw/sbin/clamd"); if (!$clamd) { # No installed return -1; } &foreign_require("init"); if (&init::action_status("clamdscan-clamd")) { return 0; # Joe's init script for redhat } elsif (&init::action_status("clamd\@scan")) { return 0; # EPEL 7/Fedora 20 clamav-scanner package } elsif (&init::action_status("clamav-daemon")) { return 0; # Ubuntu } elsif (&init::action_status("clamd-wrapper") || &init::action_status("clamd-virtualmin")) { return 0; # Redhat, not setup yet } elsif (&init::action_status("clamd")) { return 0; # RHEL 6+, not setup yet } elsif (&init::action_status("clamav-clamd")) { return 0; # FreeBSD } elsif (-r "/opt/csw/etc/clamd.conf.CSW") { return 0; # Solaris CSW package } return -1; } # enable_clamd() # Do everything needed to configure and start clamd. May print stuff with the # standard functions. sub enable_clamd { local $st = &check_clamd_status(); return 1 if ($st == 1 || $st == -1); # Check for simple init scripts local $init; &foreign_require("init"); foreach my $i ("clamav-daemon", "clamdscan-clamd", "clamav-clamd", "clamd", "clamd\@scan") { if (&init::action_status($i)) { $init = $i; last; } } # Make sure socket file is valid in config foreach my $c ("/etc/clamd.conf", "/etc/clamd.d/scan.conf", "/etc/clamd.d/virtualmin.conf") { next if (!-r $c); local $lref = &read_file_lines($c); local $sfile; local $clamuser; local $added_socketmode = 0; foreach my $l (@$lref) { if ($l =~ /^\s*LocalSocket\s+(\S+)/) { $sfile = $1; } elsif ($l =~ /^\s*LocalSocketMode\s+/) { $l = "LocalSocketMode 666"; $added_socketmode++; } elsif ($l =~ /^\s*User\s+(\S+)/) { $clamuser = $1; } } if (!$added_socketmode) { push(@$lref, "LocalSocketMode 666"); } &flush_file_lines($c); if ($sfile =~ /^(\S+)\/([^\/]+)$/) { local $sdir = $1; if (!-d $sdir) { if ($clamuser) { &make_dir($sdir, 0755); &set_ownership_permissions($clamuser, undef, 0755, $sdir); } else { &make_dir($sdir, 0777); } } else { &set_ownership_permissions(undef, undef, 0755, $sdir); } } &set_ownership_permissions(undef, undef, 0666, $sfile); } if (&init::action_status('clamav-freshclam')) { &$first_print(&text('clamd_start_updater')); &init::enable_at_boot('clamav-freshclam'); local ($ok, $out) = &init::start_action('clamav-freshclam'); if (!$ok || $out =~ /failed|error/i) { &$second_print(&text('clamd_estart', "<tt>".&html_escape($out)."</tt>")); } else { &$second_print($text{'setup_done'}); } } if ($init) { # Ubuntu, Joe's or FreeBSD .. all we have to do is enable and # start the daemon! &$first_print(&text('clamd_start')); if (&init::action_status($init)) { &init::enable_at_boot($init); local ($ok, $out) = &init::start_action($init); if (!$ok || $out =~ /failed|error/i) { &$second_print(&text('clamd_estart', "<tt>".&html_escape($out)."</tt>")); } else { &$second_print($text{'setup_done'}); } } else { &$second_print(&text('clamd_einit', "<tt>$init</tt>")); } } elsif (&init::action_status("clamd-wrapper")) { # Looks like a Redhat system .. start by creating the .conf file local $service = "virtualmin"; local $cfile = "/etc/clamd.d/$service.conf"; local $srcpat = "/usr/share/doc/clamav-server-*/clamd.conf"; local ($srcfile) = glob($srcpat); &$first_print(&text('clamd_copyconf', "<tt>$cfile</tt>")); if (!$srcfile && !-r $cfile) { &$second_print(&text('clamd_esrcfile', "<tt>$srcpat</tt>")); return 0; } local $user = "nobody"; local @uinfo = getgrnam($user); local $group = getgrgid($uinfo[3]); &lock_file($cfile); if (!-r $cfile) { ©_source_dest($srcfile, $cfile); } local $lref = &read_file_lines($cfile); local ($logfile, $socketfile); foreach my $l (@$lref) { if ($l =~ /^\s*Example/) { $l = "# Example"; } $l =~ s/<SERVICE>/$service/g; $l =~ s/<USER>/$user/g; $l =~ s/<GROUP>/$group/g; if ($l =~ /^#+\s*LogFile\s+(\/\S+)/) { $l = "LogFile $1"; $logfile = $1; } if ($l =~ /^#+\s*LocalSocket\s+(\S+)/) { $l = "LocalSocket $1"; } if ($l =~ /^LocalSocket\s+(\S+)/) { $socketfile = $1; } } &flush_file_lines($cfile); &unlock_file($cfile); local $othercfile = "/etc/clamd.conf"; if (!-r $othercfile) { &symlink_logged($cfile, $othercfile); } &$second_print($text{'setup_done'}); # Create empty log if ($logfile && !-r $logfile) { &open_tempfile(LOG, ">$logfile", 0, 1); &close_tempfile(LOG); &set_ownership_permissions($user, $group, 0755, $logfile); } # Create directory for socket file if ($socketfile) { local $socketdir = $socketfile; $socketdir =~ s/\/[^\/]+$//; if (!-d $socketdir) { &make_dir($socketdir, 0755); &set_ownership_permissions($user, $group, 0755, $socketdir); } } # Copy and fix the init wrapper script local $srcifile = &init::action_filename("clamd-wrapper"); local $ifile = &init::action_filename("clamd-virtualmin"); &$first_print(&text('clamd_initscript', "<tt>$ifile</tt>")); if (-r $srcifile && !-r $ifile) { ©_source_dest($srcifile, $ifile); } local $lref = &read_file_lines($ifile); local ($already) = grep { /^CLAMD_SERVICE=/ } @$lref; if ($already) { &$second_print($text{'clamd_initalready'}); } else { &lock_file($ifile); for(my $i=0; $i<@$lref; $i++) { if ($lref->[$i] =~ /^\#\s*Xchkconfig:\s+\-\s+(\d+)\s+(\d+)/) { # Fix chkconfig line $lref->[$i] = "# chkconfig: 2345 $1 $2"; } elsif ($lref->[$i] =~ /^\#\s*Xdescription:(.*)/) { # Fix description line $lref->[$i] = "# description:$1"; } elsif ($lref->[$i] !~ /^#/) { # Specify service name at top of file splice(@$lref, $i, 0, "CLAMD_SERVICE=$service"); last; } } &flush_file_lines($ifile); &set_ownership_permissions(undef, undef, 0755, $ifile); &unlock_file($ifile); &$second_print($text{'setup_done'}); } # Link the clamd program local $clamd = &has_command("clamd"); local $clamdcopy = $clamd.".".$service; &$first_print(&text('clamd_linkbin', "<tt>$clamdcopy</tt>")); &unlink_file($clamdcopy); &symlink_logged($clamd, $clamdcopy); &$second_print($text{'setup_done'}); # Create the socket directory if (-d "/var/run/clamd.$service") { &make_dir("/var/run/clamd.$service", 0777); } # Start the daemon, and enable at boot &$first_print(&text('clamd_start')); &init::enable_at_boot("clamd-virtualmin"); &init::disable_at_boot("clamd-wrapper"); local ($ok, $out); if (defined(&init::start_action)) { ($ok, $out) = &init::start_action($init); } else { $out = &backquote_logged("$ifile start 2>&1"); $ok = !$?; } if (!$ok || $out =~ /failed|error/i) { &$second_print(&text('clamd_estart', "<tt>".&html_escape($out)."</tt>")); } else { &$second_print($text{'setup_done'}); } } elsif (-r "/opt/csw/etc/clamd.conf.CSW") { # Solaris CSW package .. copy config file local $cfile = "/opt/csw/etc/clamd.conf"; local $srcfile = "/opt/csw/etc/clamd.conf.CSW"; &$first_print(&text('clamd_copyconf', "<tt>$cfile</tt>")); if (-r $cfile) { &$second_print($text{'clamd_esrcalready'}); } else { ©_source_dest($srcfile, $cfile); &$second_print($text{'setup_done'}); } # Create the log directory &$first_print($text{'clamd_logdir'}); local $lref = &read_file_lines($cfile); local ($logfile, $user); foreach my $l (@$lref) { if ($l =~ /^\s*LogFile\s+(\S+)/i) { $logfile = $1; } elsif ($l =~ /^\s*User\s+(\S+)/i) { $user = $1; } } if (-r $logfile) { &$second_print($text{'clamd_logalready'}); } elsif ($logfile) { local $logdir = $logfile; $logdir =~ s/\/[^\/]+$//; &make_dir($logdir, 0700); if ($user) { &set_ownership_permissions($user, undef, undef,$logdir); } else { &set_ownership_permissions(undef, undef, 0777, $logdir); } &$second_print(&text('clamd_logdone', "<tt>$logdir</tt>")); } else { &$second_print($text{'clamd_lognone'}); } # Create or enable bootup action &$first_print(&text('clamd_start')); local $init = "clamd-csw"; local $clamd = &has_command("clamd") || &has_command("/opt/csw/sbin/clamd"); &init::enable_at_boot($init, "Start ClamAV server", $clamd, "ps -ef | grep clamd | grep -v grep | grep -v \$\$ | awk '{ print \$2 }' | xargs kill"); local $ifile = &init::action_filename($init); local $out = &backquote_logged("$ifile start 2>&1"); if ($? || $out =~ /failed|error/i) { &$second_print(&text('clamd_estart', "<tt>".&html_escape($out)."</tt>")); } else { &$second_print($text{'setup_done'}); } } return 1; } # disable_clamd() # Shut down the clamd process and disable at boot. May also print stuff. sub disable_clamd { &foreign_require("init"); foreach my $init ("clamdscan-clamd", "clamav-daemon", "clamd-virtualmin", "clamd-wrapper", "clamd-csw", "clamav-clamd", "clamd", "clamd\@scan") { if (&init::action_status($init)) { &$first_print(&text('clamd_stop')); &init::disable_at_boot($init); local ($ok, $out) = &init::stop_action($init); if (!$ok || $out =~ /failed|error/i) { &$second_print(&text('clamd_estop', "<tt>".&html_escape($out)."</tt>")); return 0; } &$second_print($text{'setup_done'}); return 1; } } return 0; } # startstop_virus([&typestatus]) # Returns a hash containing the current status of the clamd server and short # and long descriptions for the action to switch statuses sub startstop_virus { local ($scanner, $host) = &get_global_virus_scanner(); if (!($scanner eq 'clamdscan' || $scanner eq 'clamd-stream-client' && !$host)) { # Clamd isn't being used return ( ); } local @pids = grep { $_ != $$ } &find_byname("clamd"); if (@pids) { return ( { 'status' => 1, 'name' => $text{'index_clamname'}, 'desc' => $text{'index_clamstop'}, 'restartdesc' => $text{'index_clamrestart'}, 'longdesc' => $text{'index_clamstopdesc'} } ); } else { return ( { 'status' => 0, 'name' => $text{'index_clamname'}, 'desc' => $text{'index_clamstart'}, 'longdesc' => $text{'index_clamstartdesc'} } ); } } # start_service_virus() # Attempts to start the clamd server, returning undef on success or any error # message on failure. sub start_service_virus { &push_all_print(); &set_all_null_print(); local $rv = &enable_clamd(); &pop_all_print(); return $rv ? undef : $text{'clamd_estartmsg'}; } # stop_service_virus() # Attempts to stop the clamd server, returning undef on success or any error # message on failure. sub stop_service_virus { &foreign_require("init"); foreach my $init ("clamdscan-clamd", "clamav-daemon", "clamd-virtualmin", "clamd-wrapper", "clamd-csw", "clamav-clamd", "clamd", "clamd\@scan") { if (&init::action_status($init)) { local ($ok, $out) = &init::stop_action($init); return $ok ? undef : "<tt>".&html_escape($out)."</tt>"; } } local @pids = grep { $_ != $$ } &find_byname("clamd"); if (@pids) { if (&kill_logged('TERM', @pids)) { return undef; } return &text('clamd_ekillmsg', $!); } else { return $text{'clamd_estopmsg'}; } } # Virus config files are the same as spam sub obtain_lock_virus { &obtain_lock_spam(@_); } # Virus config files are the same as spam sub release_lock_virus { &release_lock_spam(@_); } $done_feature_script{'virus'} = 1; 1;
Close