/
usr
/
share
/
usermin
/
authentic-theme
/
/usr/share/usermin/authentic-theme
mkdir
upload
Name
Size
Mode
Actions
extensions/
-
0755
rm
help/
-
0755
rm
images/
-
0755
rm
lang/
-
0755
rm
modules/
-
0755
rm
unauthenticated/
-
0755
rm
401.cgi
342
0755
edit
dl
rm
403.cgi
342
0755
edit
dl
rm
404.cgi
342
0755
edit
dl
rm
authentic-funcs.pl
29874
0644
edit
dl
rm
authentic-init.pl
83560
0644
edit
dl
rm
authentic-lib.pl
90283
0644
edit
dl
rm
authentic.pl
61202
0644
edit
dl
rm
config
139
0644
edit
dl
rm
config.cgi
6893
0755
edit
dl
rm
config_save.cgi
2445
0755
edit
dl
rm
FUNDING.yml
102
0644
edit
dl
rm
index.cgi
309
0755
edit
dl
rm
LICENSE
1067
0644
edit
dl
rm
login-lib-funcs.pl
11759
0644
edit
dl
rm
login-lib.pl
1518
0644
edit
dl
rm
manifest-usermin.json
982
0644
edit
dl
rm
manifest.template
920
0644
edit
dl
rm
mconfig.cgi
6747
0755
edit
dl
rm
mconfig_save.cgi
1723
0755
edit
dl
rm
navigation-lib.pl
64628
0644
edit
dl
rm
pam_login.cgi
3481
0755
edit
dl
rm
password_form.cgi
4008
0755
edit
dl
rm
postinstall-usermin.pl
264
0755
edit
dl
rm
postinstall.pl
645
0755
edit
dl
rm
service-worker.js
94
0644
edit
dl
rm
session_login.cgi
4621
0755
edit
dl
rm
settings-backgrounds.cgi
3702
0755
edit
dl
rm
settings-backgrounds_save.cgi
1667
0755
edit
dl
rm
settings-editor_favorites_read.cgi
897
0755
edit
dl
rm
settings-editor_favorites_write.cgi
574
0755
edit
dl
rm
settings-editor_read.cgi
2440
0755
edit
dl
rm
settings-editor_write.cgi
973
0755
edit
dl
rm
settings-favorites_save.cgi
632
0755
edit
dl
rm
settings-lib.pl
651
0644
edit
dl
rm
settings-logos.cgi
4725
0755
edit
dl
rm
settings-logos_save.cgi
2401
0755
edit
dl
rm
stats-lib-funcs.pl
17390
0644
edit
dl
rm
stats-lib.pl
432
0644
edit
dl
rm
stats.cgi
3135
0755
edit
dl
rm
stats.pl
7721
0755
edit
dl
rm
sysinfo.cgi
7874
0755
edit
dl
rm
tconfig-lib.pl
39224
0644
edit
dl
rm
tconfig.cgi
4542
0755
edit
dl
rm
theme-update.sh
8408
0755
edit
dl
rm
theme.info
379
0644
edit
dl
rm
theme.info.no
24
0644
edit
dl
rm
THEME.pgp
3102
0644
edit
dl
rm
uconfig.cgi
6442
0755
edit
dl
rm
uconfig_save.cgi
2034
0755
edit
dl
rm
uninstall-usermin.pl
170
0755
edit
dl
rm
uninstall.pl
346
0755
edit
dl
rm
xhr-lib.pl
29310
0644
edit
dl
rm
xhr.cgi
355
0755
edit
dl
rm
Edit:
/usr/share/usermin/authentic-theme/stats.cgi
(3135B)
#!/usr/bin/perl # # Authentic Theme (https://github.com/authentic-theme/authentic-theme) # Copyright Ilia Rostovtsev <ilia@virtualmin.com> # Licensed under MIT (https://github.com/authentic-theme/authentic-theme/blob/master/LICENSE) # use strict; require($ENV{'THEME_ROOT'} . "/stats-lib.pl"); our ($config_directory, $current_theme, $root_directory, $var_directory, $base_remote_user, %stats_text); # Check access init_prefail(); if (!defined(&webmin_user_is_admin) || !webmin_user_is_admin()) { print_json({ error => $stats_text{'index_noadmin_eaccess'}, access => 0 }); exit; } # Check dependencies my @errors; my @modnames = ("Digest::SHA", "Digest::MD5", "IO::Select", "Time::HiRes", "Net::WebSocket::Server"); foreach my $modname (@modnames) { eval "use ${modname};"; if ($@) { push(@errors, $@, $modname); push(@errors, stats_text('index_mods_missing', $modname)); last; } } if (@errors) { print_json({ error => $errors[2], error_module => $errors[1], error_stack => $errors[0] }); exit; } # Get the log file my $get_logfile = sub { my ($port) = @_; return "$var_directory/modules/$current_theme/stats-server-$port.log"; }; # Get the socket URL my $get_socket = sub { my ($port) = @_; return get_miniserv_websocket_url($port, undef, $current_theme); }; # Prevent race condition my $tempname_dir = tempname_dir(); my $lock_file = "stats-server-locking"; my $lock_file_checked = 0; while ($lock_file_checked < 3 && -r "$tempname_dir/$lock_file") { $lock_file_checked++; sleep(1); } my $lock = transname($lock_file); my $lockfh; open_tempfile($lockfh, ">$lock"); print_tempfile($lockfh, $$); close_tempfile($lockfh); sleep(1); # Do we have an active socket? my %miniserv; get_miniserv_config(\%miniserv); foreach my $k (keys %miniserv) { if ($k =~ /^websockets_\/$current_theme\/ws-(\d+)$/) { my $port = $1; my $host = $miniserv{$k}; ($host) = $host =~ /.*host=([^ ]+).*/; next if (!$host); # Is this socket still active? my $err; open_socket($host, $port, my $fh, \$err); next if ($err); print_json({ success => 1, port => $port, new => 0, socket => $get_socket->($port), errlog => $get_logfile->($port) }); exit; } } # Allocate port my $port = allocate_miniserv_websocket($current_theme, $base_remote_user); # Launch the stats server my $server_name = "stats.pl"; my $statsserver_cmd = "$config_directory/$current_theme/$server_name"; create_wrapper($statsserver_cmd, $current_theme, $server_name) if (!-r $statsserver_cmd); # Launch the server in a sub-process (no fork) my $logfile = $get_logfile->($port); my $rs = system_logged( "SESSION_ID=$main::session_id ". "$statsserver_cmd @{[quotemeta($port)]} ". ">$logfile 2>&1 </dev/null &"); # Return the result print_json({ success => !$rs, port => $port, socket => $get_socket->($port), new => 1, errlog => $logfile }); # Make sure the server is up sleep(1);
Save
cmd:
run