Linux mail.vriendennsm.nl 6.1.0-51-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.177-1 (2026-07-16) x86_64
Apache/2.4.68 (Debian)
Server IP : 217.154.75.17 & Your IP : 216.73.216.195
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
webmin /
webmin /
Delete
Unzip
Name
Size
Permission
Date
Action
help
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
images
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
lang
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
subdir
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
CHANGELOG
12.02
KB
-rw-r--r--
2026-07-17 21:17
acme_tiny.py
11.53
KB
-rwxr-xr-x
2026-07-17 21:17
adminupgrade
299
B
-rw-r--r--
2026-07-17 21:17
backup_config.pl
1.97
KB
-rwxr-xr-x
2026-07-17 21:17
bootup.cgi
1.04
KB
-rwxr-xr-x
2026-07-17 21:22
cache.cgi
1.47
KB
-rwxr-xr-x
2026-07-17 21:22
cgi_args.pl
159
B
-rwxr-xr-x
2026-07-17 21:17
change_access.cgi
1.93
KB
-rwxr-xr-x
2026-07-17 21:22
change_advanced.cgi
7.02
KB
-rwxr-xr-x
2026-07-17 21:22
change_anon.cgi
712
B
-rwxr-xr-x
2026-07-17 21:22
change_bind.cgi
5.08
KB
-rwxr-xr-x
2026-07-17 21:22
change_ca.cgi
674
B
-rwxr-xr-x
2026-07-17 21:22
change_debug.cgi
1.38
KB
-rwxr-xr-x
2026-07-17 21:22
change_lang.cgi
558
B
-rwxr-xr-x
2026-07-17 21:22
change_lock.cgi
554
B
-rwxr-xr-x
2026-07-17 21:22
change_log.cgi
2.42
KB
-rwxr-xr-x
2026-07-17 21:22
change_mobile.cgi
940
B
-rwxr-xr-x
2026-07-17 21:22
change_os.cgi
2.21
KB
-rwxr-xr-x
2026-07-17 21:22
change_osdn.cgi
1.54
KB
-rwxr-xr-x
2026-07-17 21:22
change_overlay.cgi
1.17
KB
-rwxr-xr-x
2026-07-17 21:22
change_proxy.cgi
1.09
KB
-rwxr-xr-x
2026-07-17 21:22
change_referers.cgi
633
B
-rwxr-xr-x
2026-07-17 21:22
change_session.cgi
5.88
KB
-rwxr-xr-x
2026-07-17 21:22
change_ssl.cgi
3.08
KB
-rwxr-xr-x
2026-07-17 21:22
change_startpage.cgi
687
B
-rwxr-xr-x
2026-07-17 21:22
change_status.cgi
1.08
KB
-rwxr-xr-x
2026-07-17 21:22
change_theme.cgi
1.17
KB
-rwxr-xr-x
2026-07-17 21:22
change_twofactor.cgi
1.48
KB
-rwxr-xr-x
2026-07-17 21:22
change_ui.cgi
1.61
KB
-rwxr-xr-x
2026-07-17 21:22
change_web.cgi
2.47
KB
-rwxr-xr-x
2026-07-17 21:22
clear_blocked.cgi
230
B
-rwxr-xr-x
2026-07-17 21:22
clear_cache.cgi
205
B
-rwxr-xr-x
2026-07-17 21:22
clone_mod.cgi
2.15
KB
-rwxr-xr-x
2026-07-17 21:22
config
155
B
-rw-r--r--
2026-07-17 21:17
config.info
940
B
-rw-r--r--
2026-07-17 21:17
config.info.ar
406
B
-rw-r--r--
2026-07-17 21:17
config.info.ca
388
B
-rw-r--r--
2026-07-17 21:17
config.info.cs
225
B
-rw-r--r--
2026-07-17 21:17
config.info.de
351
B
-rw-r--r--
2026-07-17 21:17
config.info.es
221
B
-rw-r--r--
2026-07-17 21:17
config.info.fa
293
B
-rw-r--r--
2026-07-17 21:17
config.info.fr
554
B
-rw-r--r--
2026-07-17 21:17
config.info.hr
0
B
-rw-r--r--
2026-07-17 21:17
config.info.hu
0
B
-rw-r--r--
2026-07-17 21:17
config.info.it
237
B
-rw-r--r--
2026-07-17 21:17
config.info.ja
514
B
-rw-r--r--
2026-07-17 21:17
config.info.ko
198
B
-rw-r--r--
2026-07-17 21:17
config.info.ms
278
B
-rw-r--r--
2026-07-17 21:17
config.info.nl
291
B
-rw-r--r--
2026-07-17 21:17
config.info.no
275
B
-rw-r--r--
2026-07-17 21:17
config.info.pl
276
B
-rw-r--r--
2026-07-17 21:17
config.info.pt_BR
291
B
-rw-r--r--
2026-07-17 21:17
config.info.ru
483
B
-rw-r--r--
2026-07-17 21:17
config.info.sk
124
B
-rw-r--r--
2026-07-17 21:17
config.info.sv
194
B
-rw-r--r--
2026-07-17 21:17
config.info.tr
147
B
-rw-r--r--
2026-07-17 21:17
cpan_modules.pl
229
B
-rwxr-xr-x
2026-07-17 21:17
defaultacl
17
B
-rw-r--r--
2026-07-17 21:17
delete_cache.cgi
471
B
-rwxr-xr-x
2026-07-17 21:22
delete_mod.cgi
2.24
KB
-rwxr-xr-x
2026-07-17 21:22
delete_webmincron.cgi
1.51
KB
-rwxr-xr-x
2026-07-17 21:22
developers-key.asc
3.07
KB
-rw-r--r--
2026-07-17 21:17
download_cert.cgi
532
B
-rwxr-xr-x
2026-07-17 21:22
edit_access.cgi
1.88
KB
-rwxr-xr-x
2026-07-17 21:22
edit_advanced.cgi
4.24
KB
-rwxr-xr-x
2026-07-17 21:22
edit_anon.cgi
812
B
-rwxr-xr-x
2026-07-17 21:22
edit_assignment.cgi
1.12
KB
-rwxr-xr-x
2026-07-17 21:22
edit_bind.cgi
3.54
KB
-rwxr-xr-x
2026-07-17 21:22
edit_blocked.cgi
944
B
-rwxr-xr-x
2026-07-17 21:22
edit_ca.cgi
2.82
KB
-rwxr-xr-x
2026-07-17 21:22
edit_categories.cgi
1.69
KB
-rwxr-xr-x
2026-07-17 21:22
edit_debug.cgi
2.05
KB
-rwxr-xr-x
2026-07-17 21:22
edit_descs.cgi
1.49
KB
-rwxr-xr-x
2026-07-17 21:22
edit_ipkey.cgi
1.7
KB
-rwxr-xr-x
2026-07-17 21:22
edit_lang.cgi
1.83
KB
-rwxr-xr-x
2026-07-17 21:22
edit_lock.cgi
2.13
KB
-rwxr-xr-x
2026-07-17 21:22
edit_log.cgi
3.16
KB
-rwxr-xr-x
2026-07-17 21:22
edit_mobile.cgi
1.26
KB
-rwxr-xr-x
2026-07-17 21:22
edit_mods.cgi
4.45
KB
-rwxr-xr-x
2026-07-17 21:22
edit_os.cgi
3.17
KB
-rwxr-xr-x
2026-07-17 21:22
edit_proxy.cgi
3.7
KB
-rwxr-xr-x
2026-07-17 21:22
edit_referers.cgi
899
B
-rwxr-xr-x
2026-07-17 21:22
edit_sendmail.cgi
3.68
KB
-rwxr-xr-x
2026-07-17 21:22
edit_session.cgi
6.23
KB
-rwxr-xr-x
2026-07-17 21:22
edit_ssl.cgi
13.69
KB
-rwxr-xr-x
2026-07-17 21:22
edit_startpage.cgi
1.48
KB
-rwxr-xr-x
2026-07-17 21:22
edit_status.cgi
1.26
KB
-rwxr-xr-x
2026-07-17 21:22
edit_themes.cgi
4.15
KB
-rwxr-xr-x
2026-07-17 21:22
edit_twofactor.cgi
1.5
KB
-rwxr-xr-x
2026-07-17 21:22
edit_ui.cgi
2.51
KB
-rwxr-xr-x
2026-07-17 21:22
edit_upgrade.cgi
4.39
KB
-rwxr-xr-x
2026-07-17 21:22
edit_web.cgi
2.92
KB
-rwxr-xr-x
2026-07-17 21:22
edit_webmincron.cgi
1.35
KB
-rwxr-xr-x
2026-07-17 21:22
export_mod.cgi
1.23
KB
-rwxr-xr-x
2026-07-17 21:22
feedback_files.pl
126
B
-rwxr-xr-x
2026-07-17 21:17
fix_os.cgi
228
B
-rwxr-xr-x
2026-07-17 21:22
fix_repo.cgi
1.87
KB
-rwxr-xr-x
2026-07-17 21:22
gnupg-lib.pl
14.82
KB
-rwxr-xr-x
2026-07-17 21:17
hide.cgi
326
B
-rwxr-xr-x
2026-07-17 21:22
index.cgi
4.41
KB
-rwxr-xr-x
2026-07-17 21:22
install_mod.cgi
3.11
KB
-rwxr-xr-x
2026-07-17 21:22
install_theme.cgi
2.29
KB
-rwxr-xr-x
2026-07-17 21:22
jcameron-key.asc
1.29
KB
-rw-r--r--
2026-07-17 21:17
kill_lock.cgi
1.57
KB
-rwxr-xr-x
2026-07-17 21:22
letsencrypt-cleanup.pl
1.94
KB
-rwxr-xr-x
2026-07-17 21:22
letsencrypt-dns.pl
2.49
KB
-rwxr-xr-x
2026-07-17 21:22
letsencrypt-lib.pl
19.62
KB
-rwxr-xr-x
2026-07-17 21:17
letsencrypt.cgi
8.25
KB
-rwxr-xr-x
2026-07-17 21:22
log_parser.pl
1.23
KB
-rwxr-xr-x
2026-07-17 21:17
module.info
195
B
-rw-r--r--
2026-07-17 21:17
module.info.ar
185
B
-rw-r--r--
2026-07-17 21:17
module.info.ar.auto
22
B
-rw-r--r--
2026-07-17 21:17
module.info.bg
0
B
-rw-r--r--
2026-07-17 21:17
module.info.bg.auto
218
B
-rw-r--r--
2026-07-17 21:17
module.info.ca
134
B
-rw-r--r--
2026-07-17 21:17
module.info.ca.auto
15
B
-rw-r--r--
2026-07-17 21:17
module.info.cs
28
B
-rw-r--r--
2026-07-17 21:17
module.info.cs.auto
128
B
-rw-r--r--
2026-07-17 21:17
module.info.da
0
B
-rw-r--r--
2026-07-17 21:17
module.info.da.auto
142
B
-rw-r--r--
2026-07-17 21:17
module.info.de
126
B
-rw-r--r--
2026-07-17 21:17
module.info.de.auto
15
B
-rw-r--r--
2026-07-17 21:17
module.info.el
0
B
-rw-r--r--
2026-07-17 21:17
module.info.el.auto
262
B
-rw-r--r--
2026-07-17 21:17
module.info.es
33
B
-rw-r--r--
2026-07-17 21:17
module.info.es.auto
109
B
-rw-r--r--
2026-07-17 21:17
module.info.eu
0
B
-rw-r--r--
2026-07-17 21:17
module.info.eu.auto
158
B
-rw-r--r--
2026-07-17 21:17
module.info.fa
0
B
-rw-r--r--
2026-07-17 21:17
module.info.fa.auto
202
B
-rw-r--r--
2026-07-17 21:17
module.info.fi
0
B
-rw-r--r--
2026-07-17 21:17
module.info.fi.auto
141
B
-rw-r--r--
2026-07-17 21:17
module.info.fr
32
B
-rw-r--r--
2026-07-17 21:17
module.info.fr.auto
129
B
-rw-r--r--
2026-07-17 21:17
module.info.hr
0
B
-rw-r--r--
2026-07-17 21:17
module.info.hr.auto
149
B
-rw-r--r--
2026-07-17 21:17
module.info.hu
30
B
-rw-r--r--
2026-07-17 21:17
module.info.hu.auto
148
B
-rw-r--r--
2026-07-17 21:17
module.info.it
33
B
-rw-r--r--
2026-07-17 21:17
module.info.it.auto
107
B
-rw-r--r--
2026-07-17 21:17
module.info.ja
180
B
-rw-r--r--
2026-07-17 21:17
module.info.ko
22
B
-rw-r--r--
2026-07-17 21:17
module.info.ko.auto
129
B
-rw-r--r--
2026-07-17 21:17
module.info.ms
119
B
-rw-r--r--
2026-07-17 21:17
module.info.ms.auto
15
B
-rw-r--r--
2026-07-17 21:17
module.info.nl
28
B
-rw-r--r--
2026-07-17 21:17
module.info.nl.auto
117
B
-rw-r--r--
2026-07-17 21:17
module.info.no
29
B
-rw-r--r--
2026-07-17 21:17
module.info.no.auto
117
B
-rw-r--r--
2026-07-17 21:17
module.info.pl
155
B
-rw-r--r--
2026-07-17 21:17
module.info.pl.auto
15
B
-rw-r--r--
2026-07-17 21:17
module.info.pt
33
B
-rw-r--r--
2026-07-17 21:17
module.info.pt.auto
113
B
-rw-r--r--
2026-07-17 21:17
module.info.pt_BR
36
B
-rw-r--r--
2026-07-17 21:17
module.info.pt_BR.auto
119
B
-rw-r--r--
2026-07-17 21:17
module.info.ru
34
B
-rw-r--r--
2026-07-17 21:17
module.info.ru.auto
172
B
-rw-r--r--
2026-07-17 21:17
module.info.sk
30
B
-rw-r--r--
2026-07-17 21:17
module.info.sk.auto
132
B
-rw-r--r--
2026-07-17 21:17
module.info.sv
30
B
-rw-r--r--
2026-07-17 21:17
module.info.sv.auto
114
B
-rw-r--r--
2026-07-17 21:17
module.info.tr
33
B
-rw-r--r--
2026-07-17 21:17
module.info.tr.auto
128
B
-rw-r--r--
2026-07-17 21:17
module.info.uk
0
B
-rw-r--r--
2026-07-17 21:17
module.info.uk.auto
215
B
-rw-r--r--
2026-07-17 21:17
module.info.zh
22
B
-rw-r--r--
2026-07-17 21:17
module.info.zh_TW
25
B
-rw-r--r--
2026-07-17 21:17
module.info.zh_TW.auto
115
B
-rw-r--r--
2026-07-17 21:17
newcsr.cgi
800
B
-rwxr-xr-x
2026-07-17 21:22
newkey.cgi
879
B
-rwxr-xr-x
2026-07-17 21:22
os-eol-lib.pl
9.55
KB
-rwxr-xr-x
2026-07-17 21:17
postinstall.pl
2.59
KB
-rwxr-xr-x
2026-07-17 21:17
refresh_modules.cgi
661
B
-rwxr-xr-x
2026-07-17 21:22
restart.cgi
87
B
-rwxr-xr-x
2026-07-17 21:22
save_assignment.cgi
485
B
-rwxr-xr-x
2026-07-17 21:22
save_categories.cgi
986
B
-rwxr-xr-x
2026-07-17 21:22
save_descs.cgi
1006
B
-rwxr-xr-x
2026-07-17 21:22
save_ipkey.cgi
1.31
KB
-rwxr-xr-x
2026-07-17 21:22
save_newmod.cgi
278
B
-rwxr-xr-x
2026-07-17 21:22
save_sendmail.cgi
2.32
KB
-rwxr-xr-x
2026-07-17 21:22
save_webmincron.cgi
1016
B
-rwxr-xr-x
2026-07-17 21:22
savekey.cgi
2.8
KB
-rwxr-xr-x
2026-07-17 21:22
setup_ca.cgi
1.52
KB
-rwxr-xr-x
2026-07-17 21:22
standard_chooser.cgi
1.68
KB
-rwxr-xr-x
2026-07-17 21:22
stop_ca.cgi
1.03
KB
-rwxr-xr-x
2026-07-17 21:22
syslog_logs.pl
633
B
-rwxr-xr-x
2026-07-17 21:17
system_info.pl
5.08
KB
-rw-r--r--
2026-07-17 21:17
test_sendmail.cgi
784
B
-rwxr-xr-x
2026-07-17 21:22
third_chooser.cgi
1.55
KB
-rwxr-xr-x
2026-07-17 21:22
twofactor-funcs-lib.pl
11.24
KB
-rw-r--r--
2026-07-17 21:17
uninstall.pl
236
B
-rwxr-xr-x
2026-07-17 21:17
update.cgi
2.89
KB
-rwxr-xr-x
2026-07-17 21:22
upgrade.cgi
16.95
KB
-rwxr-xr-x
2026-07-17 21:22
view_webmincron.cgi
1.66
KB
-rwxr-xr-x
2026-07-17 21:22
webmin-lib.pl
75.99
KB
-rwxr-xr-x
2026-07-17 21:17
Save
Rename
#!/usr/bin/perl # Save advanced options require './webmin-lib.pl'; &ReadParse(); &error_setup($text{'advanced_err'}); &get_miniserv_config(\%miniserv); # Permissions used for newly created Webmin temp directories. my $advanced_temp_dir_perms = 0755; my $advanced_temp_dir_perms_text = sprintf("%04o", $advanced_temp_dir_perms); my @advanced_temp_dirs_to_create; # Save global temp dir setting if ($in{'tempdir_def'}) { delete($gconfig{'tempdir'}); } else { $in{'tempdir'} = &validate_advanced_temp_dir( $in{'tempdir'}, $text{'advanced_etemp'}, \@advanced_temp_dirs_to_create); $gconfig{'tempdir'} = $in{'tempdir'}; } # Save temp clearing options $gconfig{'tempdirdelete'} = $in{'tempdirdelete'}; if ($in{'tempdelete_def'}) { $gconfig{'tempdelete_days'} = ''; } else { $in{'tempdelete'} =~ /^[0-9\.]+$/ || &error($text{'advanced_etempdelete'}); $gconfig{'tempdelete_days'} = $in{'tempdelete'}; } # Save per-module temp dirs for($i=0; defined($tmod = $in{'tmod_'.$i}); $i++) { next if (!$tmod); $tdir = $in{'tdir_'.$i}; %minfo = &get_module_info($tmod); $tdir = &validate_advanced_temp_dir( $tdir, &text('advanced_etdir', $minfo{'desc'}), \@advanced_temp_dirs_to_create); push(@tdirs, [ $tmod, $tdir ]); } &save_tempdirs(\%gconfig, \@tdirs); # Save umask if ($in{'umask_def'}) { delete($gconfig{'umask'}); } else { $in{'umask'} =~ /^[0-7]{3}$/ || &error($text{'advanced_eumask'}); $gconfig{'umask'} = $in{'umask'}; } # Save chattr if (defined($in{'chattr'})) { $gconfig{'chattr'} = $in{'chattr'}; } # Save nice level if ($in{'nice_def'}) { delete($gconfig{'nice'}); } else { $gconfig{'nice'} = $in{'nice'}; } # Save scheduling class if (defined($in{'sclass'})) { $gconfig{'sclass'} = $in{'sclass'}; $gconfig{'sprio'} = $in{'sprio'}; } # Save HTTP headers @hl = ( ); foreach my $l (split(/\r?\n/, $in{'headers'})) { $l =~ /^\S+:\s+\S.*$/ || &error($text{'advanced_eheader'}); push(@hl, $l); } $gconfig{'extra_headers'} = join("\t", @hl); if (defined($in{'preload'})) { # Save preload option, forcing new mode if ($in{'preload'}) { $miniserv{'premodules'} = 'WebminCore'; } else { delete($miniserv{'premodules'}); } &save_preloads(\%miniserv, [ ]); } # Save pre-cache option if ($in{'precache_mode'} == 0) { $miniserv{'precache'} = 'none'; } elsif ($in{'precache_mode'} == 1) { $miniserv{'precache'} = ''; } else { $in{'precache'} =~ /\S/ || &error($text{'advanced_eprecache'}); $miniserv{'precache'} = $in{'precache'}; } # Save buffer size if ($in{'bufsize_def'}) { delete($miniserv{'bufsize'}); } else { $in{'bufsize'} =~ /^\d+$/ && $in{'bufsize'} > 0 || &error($text{'advanced_ebufsize'}); $miniserv{'bufsize'} = $in{'bufsize'}; } # Save buffer size if ($in{'bufsize_binary_def'}) { delete($miniserv{'bufsize_binary'}); } else { $in{'bufsize_binary'} =~ /^\d+$/ && $in{'bufsize_binary'} > 0 || &error($text{'advanced_ebufsize_binary'}); $miniserv{'bufsize_binary'} = $in{'bufsize_binary'}; } # Sort config file's keys alphabetically if (defined($in{'sortconfigs'})) { $gconfig{'sortconfigs'} = $in{'sortconfigs'}; } &setup_advanced_temp_dirs(\@advanced_temp_dirs_to_create); &lock_file("$config_directory/config"); &write_file("$config_directory/config", \%gconfig); &unlock_file("$config_directory/config"); &lock_file($ENV{'MINISERV_CONFIG'}); &put_miniserv_config(\%miniserv); &unlock_file($ENV{'MINISERV_CONFIG'}); &show_restart_page(); &webmin_log("advanced"); # Validate a configured Webmin temp directory without creating or changing it. # Missing components are queued and created after all form validation passes. sub validate_advanced_temp_dir { my ($dir, $missing_error, $create_dirs) = @_; $dir =~ /\S/ || &error($missing_error); $dir =~ s/\/+$// if ($dir ne "/"); $dir =~ /\S/ || &error($missing_error); if (&advanced_temp_dir_is_windows($dir)) { $dir = &webmin_temp_dir_path($dir); if (-e $dir || -l $dir) { -d $dir || &error(&text('advanced_etempparent', $dir)); } else { push(@$create_dirs, $dir); } return $dir; } if ($dir =~ /^\//) { my $sdir = &simplify_path($dir); defined($sdir) || &error($missing_error); $dir = $sdir; } # Treat the entered directory as a base path. The final Webmin-private # component is always the hidden tempdirname setting, or .webmin by default. $dir = &webmin_temp_dir_path($dir); # Walk the path so existing components are checked, while missing components # can be created after all form validation has passed. my $path = $dir =~ /^\// ? "/" : ""; foreach my $part (split(/\/+/, $dir)) { next if ($part eq ""); $path = $path eq "/" ? "/$part" : $path eq "" ? $part : "$path/$part"; my $final = $path eq $dir; my @st = lstat($path); if (!@st) { push(@$create_dirs, $path); next; } -d _ || &error(&text('advanced_etempparent', $path)); if ($final) { &advanced_temp_dir_perms_ok($path) || &error(&text('advanced_etempperms', $path, $advanced_temp_dir_perms_text)); } else { &advanced_temp_parent_dir_perms_ok($path) || &error(&text('advanced_etempparentperms', $path)); } } return $dir; } # Create missing temp directory components after all form validation passes. sub setup_advanced_temp_dirs { my ($dirs) = @_; my %done; my @created; foreach my $dir (@$dirs) { next if ($done{$dir}++); if (&advanced_temp_dir_is_windows($dir)) { if (!-d $dir) { &make_dir($dir, $advanced_temp_dir_perms, 1) || &advanced_temp_dirs_error( \@created, &text('advanced_etempmkdir', $dir, "$!")); push(@created, $dir); } -d $dir || &advanced_temp_dirs_error( \@created, &text('advanced_etempmkdir', $dir, "$!")); next; } if (-e $dir || -l $dir) { &advanced_temp_dir_perms_ok($dir) || &advanced_temp_dirs_error( \@created, &text('advanced_etempperms', $dir, $advanced_temp_dir_perms_text)); next; } &make_dir($dir, $advanced_temp_dir_perms) || &advanced_temp_dirs_error( \@created, &text('advanced_etempmkdir', $dir, "$!")); push(@created, $dir); &advanced_temp_dir_perms_ok($dir) || &advanced_temp_dirs_error( \@created, &text('advanced_etempchmod', $dir, $advanced_temp_dir_perms_text, "$!")); } } # Roll back only directories created by this save attempt, and only if empty. sub advanced_temp_dirs_error { my ($created, $msg) = @_; foreach my $dir (reverse(@$created)) { rmdir($dir); } &error($msg); } # Check the final configured temp directory. It must be Webmin-private. sub advanced_temp_dir_perms_ok { my ($dir) = @_; my @st = lstat($dir); return 0 if (!@st || !-d _); return 0 if ($st[4] != $<); my $mode = $st[2] & 07777; return $mode == $advanced_temp_dir_perms; } # Existing parents only need to be searchable by group and others. The final # temp directory itself is checked more strictly above. sub advanced_temp_parent_dir_perms_ok { my ($dir) = @_; my @st = lstat($dir); return 0 if (!@st || !-d _); my $mode = $st[2] & 07777; return 0 if (($mode & 0011) != 0011); return 1; } # Windows temp directories are only checked when they already exist. sub advanced_temp_dir_is_windows { my ($dir) = @_; return $gconfig{'os_type'} eq 'windows' || $dir =~ /^[a-z]:/i; }