mirror of
https://github.com/webmin/webmin.git
synced 2026-02-06 07:22:20 +00:00
96 lines
2.3 KiB
Perl
Executable File
96 lines
2.3 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# list_exports.cgi
|
|
# Output info about NFS exports
|
|
|
|
require './file-lib.pl';
|
|
print "Content-type: text/plain\n\n";
|
|
if ($access{'uid'}) {
|
|
# User has no access to NFS
|
|
print "0\n";
|
|
exit;
|
|
}
|
|
|
|
&read_acl(\%acl, undef);
|
|
%einfo = &get_module_info("exports");
|
|
%dinfo = &get_module_info("dfsadmin");
|
|
#%binfo = &get_module_info("bsdexports"); # too hard
|
|
|
|
if (%einfo && &check_os_support(\%einfo)) {
|
|
# Linux NFS exports
|
|
&module_check("exports");
|
|
if (!&has_command("rpc.nfsd") && !&has_command("nfsd")) {
|
|
print "0\n";
|
|
exit;
|
|
}
|
|
print "1\n";
|
|
&foreign_require("exports", "exports-lib.pl");
|
|
foreach $e (&foreign_call("exports", "list_exports")) {
|
|
push(@{$exp{$e->{'dir'}}}, $e)
|
|
if ($e->{'dir'} !~ /:/ && $e->{'host'} !~ /:/);
|
|
}
|
|
foreach $d (keys %exp) {
|
|
local $host;
|
|
foreach $e (@{$exp{$d}}) {
|
|
local $o = $e->{'options'};
|
|
$host .= sprintf ":%s:%d:%d",
|
|
$e->{'host'} ? $e->{'host'} : '*',
|
|
defined($o->{'ro'}),
|
|
defined($o->{'all_squash'}) ? 0 :
|
|
defined($o->{'no_root_squash'}) ? 2 : 1;
|
|
}
|
|
print &make_chroot($d),$host,"\n";
|
|
}
|
|
}
|
|
elsif (%dinfo && &check_os_support(\%dinfo)) {
|
|
# Solaris NFS shares
|
|
&module_check("dfsadmin");
|
|
print "2\n";
|
|
&foreign_require("dfsadmin", "dfs-lib.pl");
|
|
foreach $s (&foreign_call("dfsadmin", "list_shares")) {
|
|
$opts = &foreign_call("dfsadmin", "parse_options",$s->{'opts'});
|
|
$opts->{'ro'} = '-' if (!defined($opts->{'ro'}));
|
|
$opts->{'ro'} =~ s/:/ /g;
|
|
$opts->{'rw'} = '-' if (!defined($opts->{'rw'}));
|
|
$opts->{'rw'} =~ s/:/ /g;
|
|
$opts->{'root'} = '-' if (!defined($opts->{'root'}));
|
|
$opts->{'root'} =~ s/:/ /g;
|
|
printf "%s:%s:%s:%s:%s\n",
|
|
&make_chroot($s->{'dir'}), $opts->{'ro'}, $opts->{'rw'},
|
|
$opts->{'root'}, $s->{'desc'};
|
|
}
|
|
}
|
|
elsif (%binfo && &check_os_support(\%binfo)) {
|
|
# BSD NFS exports
|
|
&module_check("bsdexports");
|
|
print "3\n";
|
|
&foreign_require("bsdexports", "bsdexports-lib.pl");
|
|
foreach $e (&foreign_call("bsdexports", "list_exports")) {
|
|
foreach $d (@{$e->{'dirs'}}) {
|
|
printf "%s:%s", $d, $e->{'ro'} ? 1 : 0;
|
|
if ($e->{'network'}) {
|
|
printf ":%s/%s\n",
|
|
$e->{'network'}, $e->{'mask'};
|
|
}
|
|
else {
|
|
foreach $h (@{$e->{'hosts'}}) {
|
|
print ":$h";
|
|
}
|
|
print "\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
# No NFS modules installed or supported
|
|
print "0\n";
|
|
}
|
|
|
|
sub module_check
|
|
{
|
|
if (!$acl{$base_remote_user,$_[0]}) {
|
|
print "0\n";
|
|
exit;
|
|
}
|
|
}
|
|
|