\n";
local $i = 0;
foreach $t (@nis_files) {
local $f = &expand_vars($var->{uc($t)}->{'value'}, $var);
next if (!$f);
print "\n" if ($i%2 == 0);
print "| ",&text('server_file', $text{"desc_$t"} ? $text{"desc_$t"}
: $t)," | \n";
print " | \n";
print " \n" if ($i++%2 == 1);
}
}
# parse_server_config()
# Parse and save the NIS server options
sub parse_server_config
{
local ($var, $rule) = &parse_yp_makefile();
if ($var->{'YPPWDDIR'}->{'value'} =~ /^\$\(shell/) {
# Value comes from the ypserv config file
local %ypserv;
&read_env_file("/etc/sysconfig/ypserv", \%ypserv);
$var->{'YPPWDDIR'}->{'value'} = $ypserv{'YPPWD_SRCDIR'};
}
$in{'minuid'} =~ /^\d+$/ || &error($text{'server_eminuid'});
$in{'mingid'} =~ /^\d+$/ || &error($text{'server_emingid'});
$in{'domain_auto'} || $in{'domain'} =~ /^[A-Za-z0-9\.\-]+$/ ||
&error($text{'server_edomain'});
$in{'type'} || &to_ipaddress($in{'slave'}) ||
&to_ip6address($in{'slave'}) || &error($text{'server_eslave'});
&update_makefile($var->{'MINUID'}, $in{'minuid'});
&update_makefile($var->{'MINGID'}, $in{'mingid'});
&update_makefile($var->{'NOPUSH'}, $in{'nopush'});
&update_makefile($var->{'B'}, $in{'b'});
&update_makefile($var->{'LOCALDOMAIN'}, $in{'domain_auto'} ? "`domainname`"
: $in{'domain'});
&update_makefile($rule->{'all'}, join(" ", split(/\0/, $in{'tables'})), "");
foreach $t (@nis_files) {
local $old = &expand_vars($var->{uc($t)}->{'value'}, $var);
next if (!$old);
if ($old ne $in{$t}) {
$in{$t} =~ /\S/ || &error(&text('server_efile', $text{"desc_$t"}));
&update_makefile($var->{uc($t)}, $in{$t});
}
}
&flush_file_lines();
&open_tempfile(SLAVES, ">/var/yp/ypservers");
foreach $s (split(/\s+/, $in{'slaves'})) {
&print_tempfile(SLAVES, "$s\n");
}
&close_tempfile(SLAVES);
local $init1 = &init_script("ypserv");
local $init2 = &init_script("yppasswdd");
local $init3 = &init_script("ypxfrd");
&system_logged("$init1 stop >/dev/null 2>&1");
&system_logged("$init2 stop >/dev/null 2>&1");
&system_logged("$init3 stop >/dev/null 2>&1");
if ($in{'boot'}) {
&init::enable_at_boot("ypserv");
&init::enable_at_boot("yppasswdd");
&init::enable_at_boot("ypxfrd");
}
else {
&init::disable_at_boot("ypserv");
&init::disable_at_boot("yppasswdd");
&init::disable_at_boot("ypxfrd");
}
if ($in{'boot'}) {
&system_logged("$init1 start >/dev/null 2>&1");
&system_logged("$init2 start >/dev/null 2>&1");
&system_logged("$init3 start >/dev/null 2>&1");
}
if ($in{'type'}) {
# Master server
delete($config{'slave'});
&apply_table_changes() if ($in{'boot'});
}
else {
$out = &backquote_logged("/usr/lib/yp/ypinit -s $in{'slave'} 2>&1");
if ($?) { &error("$out"); }
$config{'slave'} = $in{'slave'};
}
&write_file("$module_config_directory/config", \%config);
}
# get_server_mode()
# Returns 0 if the NIS server is inactive, 1 if active as a master, or 2 if
# active as a slave.
sub get_server_mode
{
if (&init::action_status("ypserv") != 2) {
return 0;
}
elsif ($config{'slave'}) {
return 2;
}
else {
return 1;
}
}
# list_nis_tables()
# Returns a list of structures of all NIS tables
sub list_nis_tables
{
local ($var, $rule) = &parse_yp_makefile();
if ($var->{'YPPWDDIR'}->{'value'} =~ /^\$\(shell/) {
# Value comes from the ypserv config file
local %ypserv;
&read_env_file("/etc/sysconfig/ypserv", \%ypserv);
$var->{'YPPWDDIR'}->{'value'} = $ypserv{'YPPWD_SRCDIR'};
}
local @rv;
local $dom = $var->{'LOCALDOMAIN'}->{'value'};
chop($dom = `domainname`) if ($dom =~ /`.*domainname`/);
local %file;
map { $file{uc($_)} = &expand_vars($var->{uc($_)}->{'value'}, $var) } @nis_files;
local @all = split(/\s+/, $rule->{'all'}->{'value'});
foreach $t (@all) {
local $table = { 'table' => $t,
'index' => scalar(@rv),
'domain' => $dom };
if ($t eq "passwd") {
if ($var->{'MERGE_PASSWD'}->{'value'} eq 'true') {
$table->{'type'} = 'passwd_shadow';
$table->{'files'} = [ $file{'PASSWD'}, $file{'SHADOW'} ];
}
elsif (&indexof('shadow', @all) >= 0) {
# Show separate shadow and passwd tables as one table
$table->{'type'} = 'passwd_shadow_full';
$table->{'files'} = [ $file{'PASSWD'}, $file{'SHADOW'} ];
@all = grep { $_ ne 'shadow' } @all;
}
else {
$table->{'type'} = 'passwd';
$table->{'files'} = [ $file{'PASSWD'} ];
}
}
elsif ($t eq "group") {
if ($var->{'MERGE_GROUP'}->{'value'} eq 'true') {
$table->{'type'} = 'group_shadow';
$table->{'files'} = [ $file{'GROUP'}, $file{'GSHADOW'} ];
}
else {
$table->{'type'} = 'group';
$table->{'files'} = [ $file{'GROUP'} ];
}
}
elsif ($t eq "netgrp") {
$table->{'type'} = "netgroup";
$table->{'files'} = [ $file{'NETGROUP'} ];
}
elsif ($t eq "mail") {
$table->{'type'} = "aliases";
$table->{'files'} = [ $file{'ALIASES'} ];
}
else {
$table->{'type'} = $t;
$table->{'files'} = [ $file{uc($t)} ];
}
push(@rv, $table);
}
return @rv;
}
# apply_table_changes()
# Do whatever is necessary for the table text files to be loaded into
# the NIS server
sub apply_table_changes
{
&system_logged("(cd /var/yp ; make) >/dev/null 2>&1
|