diff --git a/ldap-client/edit_base.cgi b/ldap-client/edit_base.cgi index 19dab5bfc..1febca214 100755 --- a/ldap-client/edit_base.cgi +++ b/ldap-client/edit_base.cgi @@ -9,14 +9,20 @@ print &ui_form_start("save_base.cgi", "post"); print &ui_table_start($text{'base_header'}, "width=100%", 2); @bases = &find_value("base", $conf); +@scopes = &find_value("scope", $conf); +@filters = &find_value("filter", $conf); if (&get_ldap_client() eq "nss") { # Base is just one directive $base = $bases[0]; + $scope = $scopes[0]; + $filter = $filters[0]; } else { - # Default base is the one with no DB + # Default base, scope and filter are the ones with no DB ($base) = grep { /^\S+$/ } @bases; + ($scope) = grep { /^\S+$/ } @scopes; + ($filter) = grep { /^\S+$/ } @filters; } print &ui_table_row($text{'base_base'}, &ui_textbox("base", $base, 50)."\n". @@ -27,7 +33,7 @@ $scopes = [ [ "", $text{'default'} ], [ "one", $text{'base_sone'} ], [ "base", $text{'base_sbase'} ] ]; print &ui_table_row($text{'base_scope'}, - &ui_select("scope", &find_svalue("scope", $conf), $scopes)); + &ui_select("scope", $scope, $scopes)); print &ui_table_row($text{'base_timelimit'}, &ui_opt_textbox("timelimit", &find_svalue("timelimit", $conf), 5, @@ -35,23 +41,29 @@ print &ui_table_row($text{'base_timelimit'}, $sp = " " x 5; foreach $b (@base_types) { - local $base; + local ($base, $scope, $filter); if (&get_ldap_client() eq "nss") { + # Older LDAP config uses directives like nss_base_passwd, with + # the scope and filter separated by ? $base = &find_svalue("nss_base_".$b, $conf); + if ($base =~ /^(.*)\?(.*)\?(.*)$/) { + $base = $1; + $scope = $2; + $filter = $3; + } + elsif ($base =~ /^(.*)\?(.*)$/) { + $base = $1; + $scope = $2; + } } else { + # Newer LDAP config uses ($base) = map { /^\S+\s+(\S+)/; $1 } grep { /^\Q$b\E\s/ } @bases; - } - local ($scope, $filter); - if ($base =~ /^(.*)\?(.*)\?(.*)$/) { - $base = $1; - $scope = $2; - $filter = $3; - } - elsif ($base =~ /^(.*)\?(.*)$/) { - $base = $1; - $scope = $2; + ($scope) = map { /^\S+\s+(\S+)/; $1 } + grep { /^\Q$b\E\s/ } @scopes; + ($filter) = map { /^\S+\s+(\S+)/; $1 } + grep { /^\Q$b\E\s/ } @filters; } print &ui_table_row($text{'base_'.$b}, &ui_opt_textbox("base_$b", $base, 50, $text{'base_global'})." ". diff --git a/ldap-client/save_base.cgi b/ldap-client/save_base.cgi index 7468d591f..acaf9655d 100755 --- a/ldap-client/save_base.cgi +++ b/ldap-client/save_base.cgi @@ -13,7 +13,8 @@ $in{'base'} =~ /\S/ || &error($text{'base_ebase'}); @bases = ( $in{'base'} ); # Save scope -&save_directive($conf, "scope", $in{'scope'} || undef); +@scopes = ( ); +push(@scopes, $in{'scope'}) if ($in{'scope'}); # Save time limit if ($in{'timelimit_def'}) { @@ -34,11 +35,25 @@ foreach $b (@base_types) { $base = $in{"base_".$b}; $base =~ /\S/ || &error($text{'base_e'.$b}); if ($in{'scope_'.$b}) { - $base .= "?".$in{'scope_'.$b}; + if (&get_ldap_client() eq "nss") { + # Scope is appended to the base + $base .= "?".$in{'scope_'.$b}; + } + else { + # Scopes are saved separately + push(@scopes, $b." ".$in{'scope_'.$b}); + } } if ($in{'filter_'.$b}) { - $base .= "?" if ($in{'scope_'.$b}); - $file .= "?".$in{'filter_'.$b}; + if (&get_ldap_client() eq "nss") { + # Filter is appended to the base + $base .= "?" if ($in{'scope_'.$b}); + $file .= "?".$in{'filter_'.$b}; + } + else { + # Filters are saved separately + push(@filters, $b." ".$in{'filter_'.$b}); + } } } if (&get_ldap_client() eq "nss") { @@ -51,8 +66,12 @@ foreach $b (@base_types) { } } -# Save all base directives +# Save all base, scope and filter directives &save_directive($conf, "base", \@bases); +&save_directive($conf, "scope", \@scopes); +if (&get_ldap_client() eq "nslcd") { + &save_directive($conf, "filter", \@filters); + } # Write out config &flush_file_lines();