Handle different format for base directive in NSLCD http://virtualmin.com/node/36531

This commit is contained in:
Jamie Cameron
2015-03-18 21:53:55 -07:00
parent a1e74e6659
commit 78c5892c6a
2 changed files with 33 additions and 5 deletions

View File

@@ -8,8 +8,18 @@ $conf = &get_config();
print &ui_form_start("save_base.cgi", "post");
print &ui_table_start($text{'base_header'}, "width=100%", 2);
@bases = &find_value("base", $conf);
if (&get_ldap_client() eq "nss") {
# Base is just one directive
$base = $bases[0];
}
else {
# Default base is the one with no DB
($base) = grep { /^\S+$/ } @bases;
}
print &ui_table_row($text{'base_base'},
&ui_textbox("base", &find_svalue("base", $conf), 50)."\n".
&ui_textbox("base", $base, 50)."\n".
&base_chooser_button("base", 0));
$scopes = [ [ "", $text{'default'} ],
@@ -25,7 +35,14 @@ print &ui_table_row($text{'base_timelimit'},
$sp = " " x 5;
foreach $b (@base_types) {
local $base = &find_svalue("nss_base_".$b, $conf);
local $base;
if (&get_ldap_client() eq "nss") {
$base = &find_svalue("nss_base_".$b, $conf);
}
else {
($base) = map { /^\S+\s+(\S+)/; $1 }
grep { /^\Q$b\E\s/ } @bases;
}
local ($scope, $filter);
if ($base =~ /^(.*)\?(.*)\?(.*)$/) {
$base = $1;

View File

@@ -10,7 +10,7 @@ $conf = &get_config();
# Validate and save inputs, starting with global base
$in{'base'} =~ /\S/ || &error($text{'base_ebase'});
&save_directive($conf, "base", $in{'base'});
@bases = ( $in{'base'} );
# Save scope
&save_directive($conf, "scope", $in{'scope'} || undef);
@@ -26,11 +26,12 @@ else {
# Save per-service bases
foreach $b (@base_types) {
local $base;
if ($in{"base_".$b."_def"}) {
&save_directive($conf, "nss_base_".$b, undef);
$base = undef;
}
else {
local $base = $in{"base_".$b};
$base = $in{"base_".$b};
$base =~ /\S/ || &error($text{'base_e'.$b});
if ($in{'scope_'.$b}) {
$base .= "?".$in{'scope_'.$b};
@@ -39,10 +40,20 @@ foreach $b (@base_types) {
$base .= "?" if ($in{'scope_'.$b});
$file .= "?".$in{'filter_'.$b};
}
}
if (&get_ldap_client() eq "nss") {
# Update DB-specific directive
&save_directive($conf, "nss_base_".$b, $base);
}
else {
# Add to list of base directives to save
push(@bases, $b." ".$base) if ($base);
}
}
# Save all base directives
&save_directive($conf, "base", \@bases);
# Write out config
&flush_file_lines();
&unlock_file(&get_ldap_config_file());