Stop/start/apply buttons, size and time limits
authorJamie Cameron <jcameron@webmin.com>
Sun, 18 Nov 2007 07:57:22 +0000 (07:57 +0000)
committerJamie Cameron <jcameron@webmin.com>
Sun, 18 Nov 2007 07:57:22 +0000 (07:57 +0000)
ldap-server/config.info
ldap-server/edit_slapd.cgi
ldap-server/lang/en
ldap-server/ldap-server-lib.pl
ldap-server/save_slapd.cgi
ldap-server/start.cgi [new file with mode: 0644]
ldap-server/stop.cgi [new file with mode: 0644]

index 05846f1..dd27680 100644 (file)
@@ -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 <tt>slapd</tt>
+stop_cmd=Command to stop LDAP server,3,Just kill process
+apply_cmd=Command to apply configuration,3,Just stop and re-start
index 981d6fe..4134161 100644 (file)
@@ -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'} ] ]);
 
index 250eda2..35e92a6 100644 (file)
@@ -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
 
index 05ee02e..90e0ce7 100644 (file)
@@ -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 </dev/null");
+return $? ? &text('start_ecmd', "<tt>$cmd</tt>",
+                 "<pre>".&html_escape($out)."</pre>") : 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 </dev/null");
+       return $? ? &text('stop_ecmd', "<tt>$cmd</tt>",
+                         "<pre>".&html_escape($out)."</pre>") : 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 </dev/null");
+       return $? ? &text('apply_ecmd', "<tt>$cmd</tt>",
+                         "<pre>".&html_escape($out)."</pre>") : undef;
+       }
+else {
+       local $err = &stop_ldap_server();
+       return $err if ($err);
+       return &start_ldap_server();
+       }
 }
 
 # is_ldap_server_running()
index dd49bed..715e60a 100644 (file)
@@ -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 (file)
index 0000000..a68dd1d
--- /dev/null
@@ -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 (file)
index 0000000..b2240c1
--- /dev/null
@@ -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("");
+
+