#!/usr/local/bin/perl
# open_files.cgi
# Display files and network connections that a process has open
require './proc-lib.pl';
&ReadParse();
&ui_print_header(undef, $text{'open_title'}, "", "open_proc");
%pinfo = &process_info($in{'pid'});
&can_edit_process($pinfo{'user'}) || &error($text{'edit_ecannot'});
if (!%pinfo) {
print "$text{'edit_gone'}
\n";
&ui_print_footer("", $text{'index_return'});
exit;
}
print "",&text('open_proc', "$pinfo{'args'}", $in{'pid'}),
"
\n";
# Show open files
@files = &find_process_files($in{'pid'});
print "
\n";
print " | $text{'open_header1'} |
\n";
print " \n";
print " | $text{'open_fd'} | ",
"$text{'open_type'} | ",
"$text{'open_size'} | ",
"$text{'open_inode'} | ",
"$text{'open_file'} | \n";
foreach $f (@files) {
print "\n";
print "| ",$f->{'fd'} eq 'cwd' ? $text{'open_cwd'} :
$f->{'fd'} eq 'rtd' ? $text{'open_rtd'} :
$f->{'fd'} eq 'txt' ? $text{'open_txt'} :
$f->{'fd'} eq 'mem' ? $text{'open_mem'} :
$f->{'fd'}," | \n";
print "",$f->{'type'} =~ /^v?dir$/ ? $text{'open_dir'} :
$f->{'type'} =~ /^v?reg$/ ? $text{'open_reg'} :
$f->{'type'} =~ /^v?chr$/ ? $text{'open_chr'} :
$f->{'type'} =~ /^v?blk$/ ? $text{'open_blk'} :
$f->{'type'}," | \n";
print "",$f->{'size'} || " "," | \n";
print "$f->{'inode'} | \n";
print "$f->{'file'} | \n";
print " \n";
}
print " |
\n";
# Show network connections
@nets = &find_process_sockets($in{'pid'});
if (@nets) {
print "
\n";
print " | $text{'open_header2'} |
\n";
print " \n";
print " | $text{'open_type'} | ",
"$text{'open_proto'} | ",
"$text{'open_fd'} | ",
"$text{'open_desc'} | \n";
foreach $n (@nets) {
print "\n";
print "| ",uc($n->{'type'})," | \n";
print "",uc($n->{'proto'})," | \n";
print "",$n->{'fd'}," | \n";
if ($n->{'listen'} && $n->{'lhost'} eq '*') {
print "",
&text('open_listen1', "$n->{'lport'}"),
" | \n";
}
elsif ($n->{'listen'}) {
print "",
&text('open_listen2', "$n->{'lhost'}",
"$n->{'lport'}")," | \n";
}
elsif ($n->{'rhost'}) {
print "$n->{'lhost'}:$n->{'lport'} | \n";
print "-> | \n";
print "$n->{'rhost'}:$n->{'rport'} | \n";
print "$n->{'state'} | \n";
}
else {
print "",
&text('open_recv', "$n->{'lhost'}",
"$n->{'lport'}")," | \n";
}
print " \n";
}
print " |
\n";
}
&ui_print_footer("edit_proc.cgi?$in{'pid'}", $text{'edit_return'},
"", $text{'index_return'});