Files
webmin/hpuxexports/hpux-lib.pl
2020-03-14 17:20:54 -07:00

213 lines
6.7 KiB
Perl
Executable File

# hpux-lib.pl
# Functions for HPUX exports files
# list_exports()
# Return a list of all the directories currently being exported
sub list_exports
{
local (@rv, $pos, $lnum, $h, $o, $line);
return @list_exports_cache if (@list_exports_cache);
open(EXP, "<".$config{'exports_file'});
$lnum = 0;
while($line = <EXP>) {
local $slnum = $lnum;
$line =~ s/\s+$//g;
while($line =~ /\\$/) {
# continuation character!
$line =~ s/\\$//;
$line .= <EXP>;
$line =~ s/\s+$//g;
$lnum++;
}
if ($line =~ /^(#*)\s*(\/\S*)\s+-(.*)$/) {
local %exp;
$exp{'active'} = !$1;
$exp{'dir'} = $2;
# 'host' includes the hole option string!
# for describe_host needed, only
$exp{'host'} = $3;
parse_options($3, $exp{'options'});
$exp{'line'} = $slnum;
$exp{'eline'} = $lnum;
$exp{'pos'} = $pos++;
$exp{'index'} = scalar(@rv);
push(@rv, \%exp);
}
$lnum++;
}
close(EXP);
@list_exports_cache = @rv;
return @list_exports_cache;
}
# make_exports_line([&export]+)
sub make_exports_line
{
local ($options, $line);
$options = join_options($_[0]->{'options'});
$line = ($_[0]->{'active'} ? "" : "#").$_[0]->{'dir'};
$line .= ($options ? " -".$options : "");
return $line;
}
# describe_host(host)
# Given a host option string return a human-readable version
sub describe_host
{
local ($desc, %options);
&parse_options($_[0], \%options);
if (defined($options{"ro"}) && $options{"access"} ne "") {
$desc = $text{'index_sel_ro'};
}
elsif (defined($options{"ro"}) && !defined($options{"access"})) {
$desc = $text{'index_all_ro'};
}
elsif ($options{"rw"} ne "") {
$desc = $text{'index_ro_rw'};
}
elsif (!defined($options{"ro"}) && $options{"access"} ne "") {
$desc = $text{'index_sel_rw'};
}
elsif (!defined($options{"ro"}) && !defined($options{"rw"}) && !defined($options{"access"})) {
$desc = $text{'index_all_rw'};
}
if ($options{"root"} ne "") {
$desc .= ", ";
$desc .= $text{'index_sel_root'};
}
return $desc;
}
# more_detail_fields()
sub more_detail_fields
{
print " <td><b>", &hlink($text{'edit_async'}, "async"), "</b></td>\n";
printf "<td nowrap><input type=radio name=async value=1 %s> %s\n",
defined($opts{"async"}) ? "checked" : "", $text{'yes'};
printf "<input type=radio name=nfs_bg value=0 %s> %s</td> </tr>\n",
defined($opts{"async"}) ? "" : "checked", $text{'no'};
}
# security_fields()
sub security_fields
{
print "<tr $cb>\n";
print " <td><b>", &hlink($text{'edit_user_access'}, "user_access"), "</b></td>\n";
print " <td><b>", &hlink($text{'edit_root_access'}, "root_access"), "</b></td>\n";
print " <td><b>", &hlink($text{'edit_anon_access'}, "anon"), "</b></td>\n";
print "</tr>\n";
$fn = "<font size=-1>"; $efn = "</font>";
print "<tr $cb>\n";
printf " <td><input type=radio name=user value=1 %s> $text{'edit_sel_ro'}<br>\n",
defined($opts{"ro"}) && $opts{"access"} ne "" ? "checked" : "";
printf "<input type=radio name=user value=2 %s> $text{'edit_all_ro'}<br>\n",
defined($opts{"ro"}) && !defined($opts{"access"}) ? "checked" : "";
printf "<input type=radio name=user value=3 %s> $text{'edit_ro_rw'}<br>\n",
$opts{"rw"} ne "" ? "checked" : "";
printf "<input type=radio name=user value=4 %s> $text{'edit_sel_rw'}<br>\n",
!defined($opts{"ro"}) && $opts{"access"} ne "" ? "checked" : "";
printf "<input type=radio name=user value=5 %s> $text{'edit_all_rw'}<br>\n",
!defined($opts{"ro"}) && !defined($opts{"rw"}) && !defined($opts{"access"}) ? "checked" : "";
print " </td>\n";
printf " <td><input type=radio name=root value=1 %s> $text{'edit_none'}<br>\n",
defined($opts{"root"}) ? "" : "checked";
print "<br>";
print "<br>";
print "<br>";
printf "<input type=radio name=root value=2 %s> $text{'edit_sel_hosts'}<br>\n",
$opts{"root"} ne "" ? "checked" : "";
print " </td>\n";
print " <td>\n";
if ($in{'new'}) { $opts{"anon"} = getpwnam("nobody"); }
printf "<input type=radio name=anon value=1 %s> $text{'edit_anon_noaccess'}<br>\n",
$opts{"anon"} == -1 ? "checked" : "";
if (defined($opts{"anon"}) && $opts{"anon"} != -1) {
$anonuser = getpwuid($opts{'anon'}) ?
getpwuid($opts{'anon'}) : $opts{'anon'};
}
printf "<input type=radio name=anon value=2 %s>\n",
$opts{"anon"} != -1 ? "checked" : "";
print "<input name=anonnam size=8 value=\"$anonuser\"> ",
&user_chooser_button("anonnam", 0),"\n";
print "<br>";
print "<br>";
print "<br>";
print "<br>";
print " </td>\n";
print "</tr>\n";
print "<tr $cb>\n";
print " <td>$fn<textarea name=ualist rows=6 cols=40 >";
if ($opts{"rw"} ne "") {
$list = join("\n", split(/:/, $opts{"rw"}));
}
if ($opts{"access"} ne "") {
$list = join("\n", split(/:/, $opts{"access"}));
}
print $list;
print "</textarea>$efn</td>\n";
printf " <td>$fn<textarea name=rtlist rows=6 cols=40 >%s</textarea>$efn</td>\n",
join("\n", split(/:/, $opts{"root"}));
print "</tr>\n";
}
# check_inputs()
sub check_inputs
{
if ($in{user} == 1 || $in{user} == 3 || $in{user} == 4) {
&check_hosts($text{'edit_user_access'}, $in{ualist});
@ualist = split(/\s+/, $in{ualist});
}
if ($in{root} == 2) {
&check_hosts($text{'edit_root_access'}, $in{rtlist});
@rtlist = split(/\s+/, $in{rtlist});
}
# Remove from the root list any hosts which not in the user list as well
if (($in{user} == 1 || $in{user} == 3 || $in{user} == 4) && $in{root} == 2) {
@tmplist = @rtlist;
foreach $rth (@tmplist) {
if (($idx = &indexof($rth, @ualist)) == -1) {
splice(@rtlist, &indexof($rth, @rtlist), 1);
}
}
if (@rtlist == 0) {
$in{root} = 1;
}
}
}
# set_options()
# Fill in the options associative array
sub set_options
{
delete($opts{"ro"});
delete($opts{"rw"});
delete($opts{"access"});
if ($in{user} == 1) { $opts{"ro"} = ""; $opts{"access"} = join(':', @ualist); }
elsif ($in{user} == 2) { $opts{"ro"} = ""; }
elsif ($in{user} == 3) { $opts{"rw"} = join(':', @ualist); }
elsif ($in{user} == 4) { $opts{"access"} = join(':', @ualist); }
elsif ($in{user} == 5) { ; }
if ($in{root} == 1) { delete($opts{"root"}); }
elsif ($in{root} == 2) { $opts{"root"} = join(':', @rtlist); }
if ($in{async} == 1) { $opts{"async"} = ""; }
else { delete($opts{"async"}); }
if ($in{'anon'} == 1) { $opts{"anon"} = -1; }
elsif ($in{'anonnam'} =~ /^[0-9\-]+$/)
{ $opts{"anon"} = $in{"anonnam"}; }
elsif (getpwnam($in{"anonnam"}))
{ $opts{"anon"} = getpwnam($in{"anonnam"}); }
else { $opts{"anon"} = -1; }
}
1;