1#!/usr/local/bin/perl 2# list_sessions.cgi 3# Display current login sessions 4 5use strict; 6use warnings; 7require './acl-lib.pl'; 8our (%in, %text, %config, %access, %sessiondb); 9$access{'sessions'} || &error($text{'sessions_ecannot'}); 10&ui_print_header(undef, $text{'sessions_title'}, ""); 11&ReadParse(); 12 13my %miniserv; 14&get_miniserv_config(\%miniserv); 15&open_session_db(\%miniserv); 16my $time_now = time(); 17 18my %hasuser; 19foreach my $u (&list_users()) { 20 $hasuser{$u->{'name'}}++; 21 } 22 23my $haslog = &foreign_available("webminlog"); 24 25print &ui_columns_start([ $text{'sessions_id'}, 26 $text{'sessions_state'}, 27 $text{'sessions_user'}, 28 $text{'sessions_host'}, 29 $text{'sessions_login'}, 30 $text{'sessions_actions'}, 31 ], 100); 32foreach my $k (sort { my @a = split(/\s+/, $sessiondb{$a}); 33 my @b = split(/\s+/, $sessiondb{$b}); $b[1] <=> $a[1] } 34 (grep { $sessiondb{$_} } keys %sessiondb)) { 35 next if ($k =~ /^1111111/); 36 my ($user, $ltime, $lip) = split(/\s+/, $sessiondb{$k}); 37 next if ($user =~ /^\!/ && !$in{'logouts'}); 38 next if ($miniserv{'logouttime'} && 39 $time_now - $ltime > $miniserv{'logouttime'}*60); 40 my @cols; 41 my $candel = 0; 42 if ($k eq $main::session_id || 43 $k eq &hash_session_id($main::session_id)) { 44 # Cannot self-terminate 45 push(@cols, "<b><tt>$k</tt></b>"); 46 push(@cols, $text{'sessions_this'}); 47 } 48 elsif ($user =~ s/^\!//) { 49 # Already logged out 50 push(@cols, "<tt>$k</tt>"); 51 push(@cols, $text{'sessions_out'}); 52 } 53 else { 54 push(@cols, "<tt>$k</tt>"); 55 push(@cols, $text{'sessions_in'}); 56 $candel = 1; 57 } 58 if ($hasuser{$user}) { 59 push(@cols, ui_link("edit_user.cgi?user=$user", $user)); 60 } 61 elsif ($miniserv{'unixauth'}) { 62 push(@cols, "$user (" . ui_link("edit_user.cgi?user=$miniserv{'unixauth'}", $miniserv{'unixauth'}) . ")"); 63 } 64 else { 65 push(@cols, $user); 66 } 67 push(@cols, $lip); 68 push(@cols, &make_date($ltime)); 69 my @links; 70 if ($haslog) { 71 push(@links, ui_link("../webminlog/search.cgi?uall=1&mall=1&tall=1&wall=1&fall=1&sid=$k", $text{'sessions_lview'})); 72 } 73 if ($candel) { 74 push(@links, ui_link("delete_session.cgi?id=$k", $text{'sessions_kill'})); 75 } 76 push(@cols, ui_links_row(\@links)); 77 print &ui_columns_row(\@cols); 78 } 79print &ui_columns_end(); 80if (!$in{'logouts'}) { 81 print &ui_link("list_sessions.cgi?logouts=1", 82 $text{'sessions_logouts'}),"<p>\n"; 83 } 84 85&ui_print_footer("", $text{'index_return'}); 86 87