Current File : //usr/share/webmin/xinetd/index.cgi |
#!/usr/bin/perl
# index.cgi
# Display all xinetd services
require './xinetd-lib.pl';
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, 0,
&help_search_link("xinetd", "man", "doc", "google"));
# Check for config file
if (!-r $config{'xinetd_conf'} && !$config{'allow_missing'}) {
print "<p>",&text('index_econf', "<tt>$config{'xinetd_conf'}</tt>",
"@{[&get_webprefix()]}/config.cgi?$module_name"),"<p>\n";
&ui_print_footer("/", $text{'index'});
exit;
}
if (!&get_start_binary()) {
print "<p>",&text('index_estart', "<tt>$config{'start_cmd'}</tt>",
"@{[&get_webprefix()]}/config.cgi?$module_name"),"<p>\n";
&ui_print_footer("/", $text{'index'});
exit;
}
@conf = &get_xinetd_config();
($defs) = grep { $_->{'name'} eq 'defaults' } @conf;
foreach $m (@{$defs->{'members'}}) {
$ddisable{$m->{'value'}}++ if ($m->{'name'} eq 'disabled');
}
@svcs = grep { $_->{'name'} eq 'service' } @conf;
@links = ( &ui_link("edit_serv.cgi?new=1",$text{'index_add_inet'}) );
if (@svcs) {
# Show table header
print &ui_form_start("mass_enable.cgi", "post");
unshift(@links, &select_all_link("serv"),
&select_invert_link("serv"));
print &ui_links_row(\@links);
@tds = ( "width=5" );
print &ui_columns_start([ "",
$text{'index_name'},
$text{'index_type'},
$text{'index_port'},
$text{'index_proto'},
$text{'index_user'},
$text{'index_server'},
$text{'index_enabled'} ], 100, 0, \@tds);
# Show one row for each service
foreach $x (@svcs) {
local $q = $x->{'quick'};
local @s;
if ($q->{'type'}->[0] eq 'UNLISTED') {
# Port and protocol specified
@s = ( $x->{'name'}, undef, $q->{'port'}->[0],
$q->{'protocol'}->[0] );
}
elsif ($q->{'protocol'}) {
# Protocol specified, find port from service
if ($config{'lookup_servs'}) {
@s = getservbyname($x->{'value'},
$q->{'protocol'}->[0]);
}
if (!@s) {
@s = ( $x->{'name'}, undef, $q->{'port'}->[0],
$q->{'protocol'}->[0] );
}
}
else {
# Only service specified, check protocols based on
# socket type, or failing that all protocols
if ($config{'lookup_servs'}) {
local @protos;
if ($q->{'socket_type'}->[0] eq 'stream') {
@protos = ( 'tcp' );
}
elsif ($q->{'socket_type'}->[0] eq 'dgram') {
@protos = ( 'udp' );
}
else {
@protos = &list_protocols();
}
foreach $p (@protos) {
@s = getservbyname($x->{'value'}, $p);
last if (@s);
}
}
}
local @cols;
push(@cols, &ui_link("edit_serv.cgi?idx=$x->{'index'}",&html_escape($x->{'value'})));
push(@cols, &indexof('RPC', @{$q->{'type'}}) < 0 ?
$text{'index_inet'} : $text{'index_rpc'});
if (@s) {
push(@cols, &html_escape($s[2]) ||
"<i>$text{'index_noport'}</i>");
push(@cols, &html_escape(uc($s[3])));
}
else {
push(@cols, "<i>$text{'index_noport'}</i>", "");
}
push(@cols, $q->{'user'} ? &html_escape($q->{'user'}->[0])
: "");
push(@cols, &indexof('INTERNAL', @{$q->{'type'}}) >= 0 ?
$text{'index_internal'} : $q->{'redirect'} ?
&text('index_redirect', "<tt>".&html_escape($q->{'redirect'}->[0])."</tt>") :
&html_escape($q->{'server'}->[0]));
$id = $q->{'id'}->[0] || $x->{'value'};
push(@cols, $q->{'disable'}->[0] eq 'yes' || $ddisable{$id} ?
"<font color=#ff0000>$text{'no'}</font>" : $text{'yes'});
print &ui_checked_columns_row(\@cols, \@tds, "serv",
$x->{'index'});
}
print &ui_columns_end();
print &ui_links_row(\@links);
print &ui_form_end([
[ "enable", $text{'index_enable'} ],
[ "disable", $text{'index_disable'} ],
]);
}
else {
print "<b>$text{'index_none'}</b><p>\n";
print &ui_links_row(\@links);
}
print &ui_hr();
print &ui_buttons_start();
print &ui_buttons_row("edit_defaults.cgi", $text{'index_defaults'},
$text{'index_defaultsmsg'});
if ($pid = &is_xinetd_running()) {
print &ui_buttons_row("restart.cgi", $text{'index_apply'},
$text{'index_applymsg'});
}
else {
print &ui_buttons_row("start.cgi", $text{'index_start'},
$text{'index_startmsg'});
}
print &ui_buttons_end();
&ui_print_footer("/", $text{'index'});