From 78c5892c6a3fc0d52bf47989cc3c55b4a82c85ff Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Wed, 18 Mar 2015 21:53:55 -0700 Subject: [PATCH] Handle different format for base directive in NSLCD http://virtualmin.com/node/36531 --- ldap-client/edit_base.cgi | 21 +++++++++++++++++++-- ldap-client/save_base.cgi | 17 ++++++++++++++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/ldap-client/edit_base.cgi b/ldap-client/edit_base.cgi index 473a9aaad..19dab5bfc 100755 --- a/ldap-client/edit_base.cgi +++ b/ldap-client/edit_base.cgi @@ -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; diff --git a/ldap-client/save_base.cgi b/ldap-client/save_base.cgi index 9f6fe5b54..7468d591f 100755 --- a/ldap-client/save_base.cgi +++ b/ldap-client/save_base.cgi @@ -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());