diff --git a/ldap-server/down_schema.cgi b/ldap-server/down_schema.cgi
new file mode 100644
index 000000000..5fd358480
--- /dev/null
+++ b/ldap-server/down_schema.cgi
@@ -0,0 +1,23 @@
+#!/usr/local/bin/perl
+# Move a schema include down (later)
+
+require './ldap-server-lib.pl';
+&local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+&ReadParse();
+
+# Find it includes
+&lock_file($config{'config_file'});
+$conf = &get_config();
+@incs = &find_value("include", $conf);
+$idx = &indexof($in{'file'}, @incs);
+$idx > 0 || &error($text{'schema_emove'});
+
+# Move up
+($incs[$idx+1], $incs[$idx]) = ($incs[$idx], $incs[$idx+1]);
+&save_directive($conf, "include", @incs);
+&flush_file_lines($config{'config_file'});
+&unlock_file($config{'config_file'});
+
+&webmin_log("sup", undef, $in{'file'});
+&redirect("edit_schema.cgi");
+
diff --git a/ldap-server/lang/en b/ldap-server/lang/en
index 9f4642627..38c37e412 100644
--- a/ldap-server/lang/en
+++ b/ldap-server/lang/en
@@ -79,6 +79,7 @@ schema_eheader=Schema file contents
schema_path=Full filename
schema_edesc=This page allows you to manually edit an LDAP schema file. This should only be done if you are familiar with the file format, as no checking is done by Webmin.
schema_return=schema list
+schema_emove=Could not find schema file to move!
acl_title=LDAP Access Control
@@ -187,6 +188,8 @@ log_slapd=Changed LDAP server configuration
log_schema=Changed enabled LDAP schemas
log_gencert=Generated new SSL certificate
log_sfile=Modified schema file $1
+log_sup=Moved up schema file $1
+log_sdown=Moved down schema file $1
gencert_title=Generate SSL Certificate
gencert_header=New SSL certificate details
diff --git a/ldap-server/log_parser.pl b/ldap-server/log_parser.pl
index ed5d810e0..f95af7ecf 100644
--- a/ldap-server/log_parser.pl
+++ b/ldap-server/log_parser.pl
@@ -32,8 +32,8 @@ elsif ($type eq 'attrs') {
return &text('log_'.$action.'_attrs', $object,
"".&html_escape($p->{'dn'})."");
}
-elsif ($type eq 'sfile') {
- return &text('log_sfile', "".&html_escape($object)."");
+elsif ($action eq 'sfile' || $action eq 'sup' || $action eq 'sdown') {
+ return &text('log_'.$action, "".&html_escape($object)."");
}
else {
return $text{'log_'.$action};
diff --git a/ldap-server/up_schema.cgi b/ldap-server/up_schema.cgi
new file mode 100644
index 000000000..6fa0f23a6
--- /dev/null
+++ b/ldap-server/up_schema.cgi
@@ -0,0 +1,23 @@
+#!/usr/local/bin/perl
+# Move a schema include up (earlier)
+
+require './ldap-server-lib.pl';
+&local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+&ReadParse();
+
+# Find it includes
+&lock_file($config{'config_file'});
+$conf = &get_config();
+@incs = &find_value("include", $conf);
+$idx = &indexof($in{'file'}, @incs);
+$idx > 0 || &error($text{'schema_emove'});
+
+# Move up
+($incs[$idx-1], $incs[$idx]) = ($incs[$idx], $incs[$idx-1]);
+&save_directive($conf, "include", @incs);
+&flush_file_lines($config{'config_file'});
+&unlock_file($config{'config_file'});
+
+&webmin_log("sup", undef, $in{'file'});
+&redirect("edit_schema.cgi");
+