From b15b52090e6baad89bb76028db359c82c584b06c Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Sun, 18 Nov 2007 07:57:22 +0000 Subject: [PATCH] Stop/start/apply buttons, size and time limits --- ldap-server/config.info | 5 +++++ ldap-server/edit_slapd.cgi | 10 ++++++++++ ldap-server/lang/en | 10 ++++++++++ ldap-server/ldap-server-lib.pl | 33 ++++++++++++++++++++++++++++++++- ldap-server/save_slapd.cgi | 16 ++++++++++++++++ ldap-server/start.cgi | 11 +++++++++++ ldap-server/stop.cgi | 11 +++++++++++ 7 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 ldap-server/start.cgi create mode 100644 ldap-server/stop.cgi diff --git a/ldap-server/config.info b/ldap-server/config.info index 05846f195..dd2768075 100644 --- a/ldap-server/config.info +++ b/ldap-server/config.info @@ -9,3 +9,8 @@ config_file=OpenLDAP server configuration file,8 schema_dir=OpenLDAP schema directory,7 line2=User interface settings,11 + +line3=LDAP server commands,11 +start_cmd=Command to start LDAP server,3,Just run slapd +stop_cmd=Command to stop LDAP server,3,Just kill process +apply_cmd=Command to apply configuration,3,Just stop and re-start diff --git a/ldap-server/edit_slapd.cgi b/ldap-server/edit_slapd.cgi index 981d6feca..4134161c6 100644 --- a/ldap-server/edit_slapd.cgi +++ b/ldap-server/edit_slapd.cgi @@ -68,6 +68,16 @@ print &ui_table_row($text{'slapd_allow'}, ( 'bind_v2', 'bind_anon_cred', 'bind_anon_dn', 'update_anon' ) ], 4, 1, 1)); +# Size and time limits +$sizelimit = &find_value('sizelimit', $conf); +print &ui_table_row($text{'slapd_sizelimit'}, + &ui_opt_textbox('sizelimit', $sizelimit, 10, $text{'default'}." (500)")); +$timelimit = &find_value('timelimit', $conf); +print &ui_table_row($text{'slapd_timelimit'}, + &ui_opt_textbox('timelimit', $timelimit, 10, + $text{'default'}." (3600 $text{'slapd_secs'})"). + " ".$text{'slapd_secs'}); + print &ui_table_end(); print &ui_form_end([ [ undef, $text{'save'} ] ]); diff --git a/ldap-server/lang/en b/ldap-server/lang/en index 250eda2d0..35e92a6b5 100644 --- a/ldap-server/lang/en +++ b/ldap-server/lang/en @@ -47,6 +47,11 @@ slapd_bind_v2=Allow LDAP v2 clients slapd_bind_anon_cred=Allow anonymous login with credentials slapd_bind_anon_dn=Allow anonymous login with DN slapd_update_anon=Allow updates by anonymous logins +slapd_sizelimit=Maximum number of search results to return +slapd_timelimit=Maximum time for searches +slapd_secs=seconds +slapd_esizelimit=Missing or non-numeric maximum number of search results to return +slapd_etimelimit=Missing or non-numeric maximum time for searches schema_title=Manage Schema @@ -123,8 +128,13 @@ create_title=Create Tree eunknown=Unknown error apply_err=Failed to apply configuration +apply_ecmd=$1 failed : $2 stop_err=Failed to stop LDAP server +stop_ecmd=$1 failed : $2 +stop_egone=No longer running! +stop_ekill=Kill process failed : $1 start_err=Failed to start LDAP server +start_ecmd=$1 failed : $2 diff --git a/ldap-server/ldap-server-lib.pl b/ldap-server/ldap-server-lib.pl index 05ee02ea6..90e0ce73c 100644 --- a/ldap-server/ldap-server-lib.pl +++ b/ldap-server/ldap-server-lib.pl @@ -6,7 +6,6 @@ # XXX install ldap server # XXX more slapd.conf options # XXX SSL certs -# XXX sizelimit / timelimit # XXX schemacheck / gentlehup do '../web-lib.pl'; @@ -231,16 +230,48 @@ for(my $i=0; $i<@old || $i<@values; $i++) { } } +# start_ldap_server() +# Attempts to start the LDAP server process. Returns undef on success or an +# error message on failure. sub start_ldap_server { +local $cmd = $config{'start_cmd'} || $config{'slapd'}; +local $out = &backquote_logged("$cmd 2>&1 $cmd", + "
".&html_escape($out)."
") : undef; } +# stop_ldap_server() +# Attempts to stop the running LDAP server. Returns undef on success or an +# error message on failure. sub stop_ldap_server { +if ($config{'stop_cmd'}) { + local $out = &backquote_logged("$config{'stop_cmd'} 2>&1 $cmd", + "
".&html_escape($out)."
") : undef; + } +else { + local $pid = &is_ldap_server_running(); + $pid || return $text{'stop_egone'}; + return kill('TERM', $pid) ? undef : &text('stop_ekill', $!); + } } +# apply_configuration() +# Apply the current LDAP server configuration with a HUP signal sub apply_configuration { +if ($config{'apply_cmd'}) { + local $out = &backquote_logged("$config{'apply_cmd'} 2>&1 $cmd", + "
".&html_escape($out)."
") : undef; + } +else { + local $err = &stop_ldap_server(); + return $err if ($err); + return &start_ldap_server(); + } } # is_ldap_server_running() diff --git a/ldap-server/save_slapd.cgi b/ldap-server/save_slapd.cgi index dd49bedbf..715e60af3 100644 --- a/ldap-server/save_slapd.cgi +++ b/ldap-server/save_slapd.cgi @@ -38,6 +38,22 @@ $in{'dbcachesize'} =~ /^\d+$/ || &error($text{'slapd_edbcachesize'}); @allow = split(/\0/, $in{'allow'}); &save_directive($conf, 'allow', @allow ? \@allow : undef); +# Size and time limits +if ($in{'sizelimit_def'}) { + &save_directive($conf, 'sizelimit', undef); + } +else { + $in{'sizelimit'} =~ /^[1-9]\d*$/ || &error($text{'slapd_esizelimit'}); + &save_directive($conf, 'sizelimit', $in{'sizelimit'}); + } +if ($in{'timelimit_def'}) { + &save_directive($conf, 'timelimit', undef); + } +else { + $in{'timelimit'} =~ /^[1-9]\d*$/ || &error($text{'slapd_etimelimit'}); + &save_directive($conf, 'timelimit', $in{'timelimit'}); + } + # Write out the files &flush_file_lines($config{'config_file'}); &unlock_file($config{'config_file'}); diff --git a/ldap-server/start.cgi b/ldap-server/start.cgi new file mode 100644 index 000000000..a68dd1dc5 --- /dev/null +++ b/ldap-server/start.cgi @@ -0,0 +1,11 @@ +#!/usr/local/bin/perl +# Start the LDAP server + +require './ldap-server-lib.pl'; +&error_setup($text{'start_err'}); +$err = &start_ldap_server(); +&error($err) if ($err); +&webmin_log('start'); +&redirect(""); + + diff --git a/ldap-server/stop.cgi b/ldap-server/stop.cgi new file mode 100644 index 000000000..b2240c1d8 --- /dev/null +++ b/ldap-server/stop.cgi @@ -0,0 +1,11 @@ +#!/usr/local/bin/perl +# Stop the LDAP server + +require './ldap-server-lib.pl'; +&error_setup($text{'stop_err'}); +$err = &stop_ldap_server(); +&error($err) if ($err); +&webmin_log('stop'); +&redirect(""); + +