diff --git a/ldap-server/add.cgi b/ldap-server/add.cgi
index be4bf61ed..59419f42c 100644
--- a/ldap-server/add.cgi
+++ b/ldap-server/add.cgi
@@ -40,5 +40,6 @@ if (!$rv || $rv->code) {
&ldap_error($rv)));
}
+&webmin_log('create', 'dn', $dn);
&redirect("edit_browser.cgi?base=".&urlize($dn));
diff --git a/ldap-server/add_browser.cgi b/ldap-server/add_browser.cgi
index 28fc087eb..bac46ed9f 100644
--- a/ldap-server/add_browser.cgi
+++ b/ldap-server/add_browser.cgi
@@ -24,9 +24,11 @@ $rv = $ldap->modify($bo->dn(),
add => { $in{'add'} => $in{'value'} });
if (!$rv || $rv->code) {
&error(&text('add_emodify', "".$bo->dn()."",
- "$in{'edit'}",
+ "$in{'add'}",
$rv ? $rv->code : "Unknown error"));
}
# Return to object
+&webmin_log('create', 'attr', $in{'add'}, { 'dn' => $in{'base'},
+ 'value' => $in{'value'} });
&redirect("edit_browser.cgi?base=".&urlize($in{'base'})."&mode=attrs");
diff --git a/ldap-server/delete_browser.cgi b/ldap-server/delete_browser.cgi
index 696fb2016..fc68fc26b 100644
--- a/ldap-server/delete_browser.cgi
+++ b/ldap-server/delete_browser.cgi
@@ -28,4 +28,10 @@ if (!$rv || $rv->code) {
}
# Return to object
+if (@d == 1) {
+ &webmin_log('delete', 'attr', $d[0], { 'dn' => $in{'base'} });
+ }
+else {
+ &webmin_log('delete', 'attrs', scalar(@d), { 'dn' => $in{'base'} });
+ }
&redirect("edit_browser.cgi?base=".&urlize($in{'base'})."&mode=attrs");
diff --git a/ldap-server/lang/en b/ldap-server/lang/en
index b02932ac3..ecf2d5e7d 100644
--- a/ldap-server/lang/en
+++ b/ldap-server/lang/en
@@ -144,3 +144,19 @@ stop_ekill=Kill process failed : $1
start_err=Failed to start LDAP server
start_ecmd=$1 failed : $2
+log_create_dn=Created object $1
+log_delete_dn=Deleted object $1
+log_rename_dn=Renamed object $1
+log_delete_dns=Deleted $1 objects
+log_create_attr=Added attribute to object $2
+log_create_attr_l=Added attribute $1 with value $3 to object $2
+log_modify_attr=Updated attribute in object $2
+log_modify_attr_l=Updated attribute $1 with value $3 in object $2
+log_delete_attr=Deleted from object $2
+log_delete_attr_l=Deleted attribute $1 from object $2
+log_delete_attrs=Deleted $1 attributes from object $2
+log_stop=Stopped LDAP server
+log_start=Started LDAP Server
+log_apply=Applied configuration
+log_slapd=Changed LDAP server configuration
+
diff --git a/ldap-server/ldap-server-lib.pl b/ldap-server/ldap-server-lib.pl
index 09680a03e..d8072efb2 100644
--- a/ldap-server/ldap-server-lib.pl
+++ b/ldap-server/ldap-server-lib.pl
@@ -1,7 +1,6 @@
# Functions for configuring and talking to an LDAP server
# XXX help pages
# XXX initial setup
-# XXX locking and logging
# XXX install ldap server
# XXX default configs for various systems (include search max of 100)
# XXX more slapd.conf options
diff --git a/ldap-server/log_parser.pl b/ldap-server/log_parser.pl
new file mode 100644
index 000000000..719643874
--- /dev/null
+++ b/ldap-server/log_parser.pl
@@ -0,0 +1,39 @@
+# log_parser.pl
+# Functions for parsing this module's logs
+
+do 'ldap-server-lib.pl';
+
+# parse_webmin_log(user, script, action, type, object, ¶ms)
+# Converts logged information from this module into human-readable form
+sub parse_webmin_log
+{
+local ($user, $script, $action, $type, $object, $p, $long) = @_;
+if ($type eq 'dn') {
+ # Changed some DN
+ $object =~ s/,\s+/,/g;
+ return &text('log_'.$action.'_dn',
+ "".&html_escape($object)."");
+ }
+elsif ($type eq 'dns') {
+ # Multi-DN operation
+ return &text('log_'.$action.'_dns', $object);
+ }
+elsif ($type eq 'attr') {
+ # Changed some attribute of a DN
+ $p->{'dn'} =~ s/,\s+/,/g;
+ return &text($long ? 'log_'.$action.'_attr_l' : 'log_'.$action.'_attr',
+ "".&html_escape($object)."",
+ "".&html_escape($p->{'dn'})."",
+ "".&html_escape($p->{'value'})."");
+ }
+elsif ($type eq 'attrs') {
+ # Multi-attribute operation
+ $p->{'dn'} =~ s/,\s+/,/g;
+ return &text('log_'.$action.'_attrs', $object,
+ "".&html_escape($p->{'dn'})."");
+ }
+else {
+ return $text{'log_'.$action};
+ }
+}
+
diff --git a/ldap-server/rename_browser.cgi b/ldap-server/rename_browser.cgi
index 3ecf389bb..70249675b 100755
--- a/ldap-server/rename_browser.cgi
+++ b/ldap-server/rename_browser.cgi
@@ -32,5 +32,6 @@ if (!$rv || $rv->code) {
}
# Return to object
+&webmin_log('rename', 'dn', $in{'old'}, { 'new' => $in{'rename'} });
&redirect("edit_browser.cgi?base=".&urlize($in{'base'})."&mode=subs");
diff --git a/ldap-server/save_browser.cgi b/ldap-server/save_browser.cgi
index f9342fb97..5817b593c 100644
--- a/ldap-server/save_browser.cgi
+++ b/ldap-server/save_browser.cgi
@@ -30,4 +30,6 @@ if (!$rv || $rv->code) {
}
# Return to object
+&webmin_log('modify', 'attr', $in{'edit'}, { 'dn' => $in{'base'},
+ 'value' => join(" ", @values) });
&redirect("edit_browser.cgi?base=".&urlize($in{'base'})."&mode=attrs");
diff --git a/ldap-server/sdelete_browser.cgi b/ldap-server/sdelete_browser.cgi
index d07c60f32..56b5b382b 100644
--- a/ldap-server/sdelete_browser.cgi
+++ b/ldap-server/sdelete_browser.cgi
@@ -27,4 +27,11 @@ foreach $d (@d) {
}
# Return to object
+if (@d == 1) {
+ &webmin_log('delete', 'dn', $d[0]);
+ }
+else {
+ &webmin_log('delete', 'dns', scalar(@d),
+ { 'dn' => \@d });
+ }
&redirect("edit_browser.cgi?base=".&urlize($in{'base'})."&mode=subs");