[SCM] Samba Shared Repository - branch master updated

Andrew Bartlett abartlet at samba.org
Sat Dec 22 00:59:03 UTC 2018


The branch, master has been updated
       via  42dde0bdd3a group_audit: Ensure we still log membership changes (with an error) where status != LDB_SUCCESS
       via  27273a55dd0 tests group_audit: PEP8 cleanup.
       via  87a8325a0d5 s4 group_audit: Add Windows Event Id's to Group membership changes
       via  b99b51400c3 build: Remove --timestamp-dependencies (BROKEN)
      from  22f1c4005ca paged results: testing suite for new paged results module

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 42dde0bdd3af8aaa6350fec36fb99b98ab501aa1
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Dec 21 14:51:54 2018 +1300

    group_audit: Ensure we still log membership changes (with an error) where status != LDB_SUCCESS
    
    This restores the previous behaviour.  It causes (only) the event ID
    to be omitted if status != LDB_SUCCESS or there was a problem getting
    the group type.
    
    Errors at this stage are exceedingly rare, because the values have
    already been checked by the repl_meta_data module, but this is
    cosistent with the rest of the module again.
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    
    Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
    Autobuild-Date(master): Sat Dec 22 01:58:48 CET 2018 on sn-devel-144

commit 27273a55dd0634db9324c74a73b80a1989a64372
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Wed Dec 19 09:29:23 2018 +1300

    tests group_audit: PEP8 cleanup.
    
    Remove Flake8 warnings from the group  audit JSON log tests.
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 87a8325a0d511ec2177ef501828b50deb0ce50b9
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Wed Dec 19 09:08:22 2018 +1300

    s4 group_audit: Add Windows Event Id's to Group membership changes
    
    Generate a GroupChange event when a user is created with a PrimaryGroup
    membership.  Log the windows event id in the JSON GroupChange message.
    
    Event Id's supported are:
    	4728	A member was added to a security enabled global group
    	4729	A member was removed from a security enabled global
    		group
    	4732	A member was added to a security enabled local group
    	4733	A member was removed from a security enabled local group
    	4746	A member was added to a security disabled local group
    	4747	A member was removed from a security disabled local group
    	4751	A member was added to a security disabled global group
    	4752	A member was removed from a security disabled global
    		group
    	4756	A member was added to a security enabled universal
    		group
    	4757	A member was removed from a security enabled universal
    		group
    	4761	A member was added to a security disabled universal
    		group
    	4762	A member was removed from a security disabled universal
    		group
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit b99b51400c3e3e40b848d57d01f67b8d72d772b5
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Dec 18 16:27:14 2018 +1300

    build: Remove --timestamp-dependencies (BROKEN)
    
    Remove this code marked as broken, we do not need broken configure options making Samba
    appear to be more complex than it already is.
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

-----------------------------------------------------------------------

Summary of changes:
 WHATSNEW.txt                                       |  24 +-
 buildtools/wafsamba/wafsamba.py                    |  16 --
 buildtools/wafsamba/wscript                        |   6 -
 librpc/idl/windows_event_ids.idl                   |  21 +-
 python/samba/tests/group_audit.py                  |  53 ++++-
 source4/dsdb/samdb/ldb_modules/group_audit.c       | 252 +++++++++++++++------
 .../samdb/ldb_modules/tests/test_group_audit.c     | 199 ++++++++++++----
 .../ldb_modules/tests/test_group_audit_errors.c    |  71 +++---
 8 files changed, 462 insertions(+), 180 deletions(-)


Changeset truncated at 500 lines:

diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 6698b09d8bc..5f237713015 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -118,17 +118,39 @@ type "logonType". The supported event codes and logon types are:
     2  Interactive
     3  Network
     8  NetworkCleartext
+
 The version number for Authentication messages is now 1.1, changed from 1.0
 
 Password change messages now contain the Windows Event Id "eventId", the
 supported event Id's are:
   4723 Password changed
   4724 Password reset
+
 The version number for PasswordChange messages is now 1.1, changed from 1.0
 
+Group membership change messages now contain the Windows Event Id "eventId",
+the supported event Id's are:
+  4728 A member was added to a security enabled global group
+  4729 A member was removed from a security enabled global group
+  4732 A member was added to a security enabled local group
+  4733 A member was removed from a security enabled local group
+  4746 A member was added to a security disabled local group
+  4747 A member was removed from a security disabled local group
+  4751 A member was added to a security disabled global group
+  4752 A member was removed from a security disabled global group
+  4756 A member was added to a security enabled universal group
+  4757 A member was removed from a security enabled universal group
+  4761 A member was added to a security disabled universal group
+  4762 A member was removed from a security disabled universal group
+
+
+The version number for GroupChange messages is now 1.1, changed from 1.0. Also
+A GroupChange message is generated when a new user is created to log that the
+user has been added to their primary group.
+
 The leading "JSON <message type>:" and source file  prefix of the JSON formatted
 log entries has been removed to make the parsing of the JSON log messages
-easier. JSON log entries now start with 2 spaces folowed by an opening brace
+easier. JSON log entries now start with 2 spaces followed by an opening brace
 i.e. "  {"
 
 
diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py
index 230a76d8f2c..a077026c690 100644
--- a/buildtools/wafsamba/wafsamba.py
+++ b/buildtools/wafsamba/wafsamba.py
@@ -721,22 +721,6 @@ Build.BuildContext.SET_BUILD_GROUP = SET_BUILD_GROUP
 
 
 
- at conf
-def ENABLE_TIMESTAMP_DEPENDENCIES(conf):
-    """use timestamps instead of file contents for deps
-    this currently doesn't work"""
-    def h_file(filename):
-        import stat
-        st = os.stat(filename)
-        if stat.S_ISDIR(st[stat.ST_MODE]): raise IOError('not a file')
-        m = Utils.md5()
-        m.update(str(st.st_mtime))
-        m.update(str(st.st_size))
-        m.update(filename)
-        return m.digest()
-    Utils.h_file = h_file
-
-
 def SAMBA_SCRIPT(bld, name, pattern, installdir, installname=None):
     '''used to copy scripts from the source tree into the build directory
        for use by selftest'''
diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript
index 164a9ff6dda..7b8fb01db5e 100644
--- a/buildtools/wafsamba/wscript
+++ b/buildtools/wafsamba/wscript
@@ -115,9 +115,6 @@ def options(opt):
     gr.add_option('--enable-gccdeps',
                    help=("Enable use of gcc -MD dependency module"),
                    action="store_true", dest='enable_gccdeps', default=True)
-    gr.add_option('--timestamp-dependencies',
-                   help=("use file timestamps instead of content for build dependencies (BROKEN)"),
-                   action="store_true", dest='timestamp_dependencies', default=False)
     gr.add_option('--pedantic',
 		   help=("Enable even more compiler warnings"),
 		   action='store_true', dest='pedantic', default=False)
@@ -220,9 +217,6 @@ def configure(conf):
 
     conf.define('SRCDIR', conf.env['srcdir'])
 
-    if Options.options.timestamp_dependencies:
-        conf.ENABLE_TIMESTAMP_DEPENDENCIES()
-
     conf.SETUP_CONFIGURE_CACHE(Options.options.enable_configure_cache)
 
     # load our local waf extensions
diff --git a/librpc/idl/windows_event_ids.idl b/librpc/idl/windows_event_ids.idl
index c711db1b30f..240ad9e56ff 100644
--- a/librpc/idl/windows_event_ids.idl
+++ b/librpc/idl/windows_event_ids.idl
@@ -9,10 +9,23 @@ interface windows_events
 {
 
 	typedef [v1_enum,public] enum {
-		EVT_ID_SUCCESSFUL_LOGON		= 4624,
-		EVT_ID_UNSUCCESSFUL_LOGON	= 4625,
-		EVT_ID_PASSWORD_CHANGE		= 4723,
-		EVT_ID_PASSWORD_RESET		= 4724
+		EVT_ID_NONE						=    0,
+		EVT_ID_SUCCESSFUL_LOGON					= 4624,
+		EVT_ID_UNSUCCESSFUL_LOGON				= 4625,
+		EVT_ID_PASSWORD_CHANGE					= 4723,
+		EVT_ID_PASSWORD_RESET					= 4724,
+		EVT_ID_USER_ADDED_TO_GLOBAL_SEC_GROUP			= 4728,
+		EVT_ID_USER_REMOVED_FROM_GLOBAL_SEC_GROUP		= 4729,
+		EVT_ID_USER_ADDED_TO_LOCAL_SEC_GROUP			= 4732,
+		EVT_ID_USER_REMOVED_FROM_LOCAL_SEC_GROUP		= 4733,
+		EVT_ID_USER_ADDED_TO_LOCAL_GROUP			= 4746,
+		EVT_ID_USER_REMOVED_FROM_LOCAL_GROUP			= 4747,
+		EVT_ID_USER_ADDED_TO_GLOBAL_GROUP			= 4751,
+		EVT_ID_USER_REMOVED_FROM_GLOBAL_GROUP			= 4752,
+		EVT_ID_USER_ADDED_TO_UNIVERSAL_SEC_GROUP		= 4756,
+		EVT_ID_USER_REMOVED_FROM_UNIVERSAL_SEC_GROUP		= 4757,
+		EVT_ID_USER_ADDED_TO_UNIVERSAL_GROUP			= 4761,
+		EVT_ID_USER_REMOVED_FROM_UNIVERSAL_GROUP		= 4762
 	} event_id_type;
 
 	typedef [v1_enum,public] enum {
diff --git a/python/samba/tests/group_audit.py b/python/samba/tests/group_audit.py
index 53a8bf6afaf..b8c90a325d5 100644
--- a/python/samba/tests/group_audit.py
+++ b/python/samba/tests/group_audit.py
@@ -21,6 +21,10 @@ from __future__ import print_function
 
 import samba.tests
 from samba.dcerpc.messaging import MSG_GROUP_LOG, DSDB_GROUP_EVENT_NAME
+from samba.dcerpc.windows_event_ids import (
+    EVT_ID_USER_ADDED_TO_GLOBAL_SEC_GROUP,
+    EVT_ID_USER_REMOVED_FROM_GLOBAL_SEC_GROUP
+)
 from samba.samdb import SamDB
 from samba.auth import system_session
 import os
@@ -43,7 +47,7 @@ class GroupAuditTests(AuditLogTestBase):
 
     def setUp(self):
         self.message_type = MSG_GROUP_LOG
-        self.event_type   = DSDB_GROUP_EVENT_NAME
+        self.event_type = DSDB_GROUP_EVENT_NAME
         super(GroupAuditTests, self).setUp()
 
         self.remoteAddress = os.environ["CLIENT_IP"]
@@ -100,9 +104,9 @@ class GroupAuditTests(AuditLogTestBase):
         #
         # Wait for the primary group change for the created user.
         #
-        messages = self.waitForMessages(1)
+        messages = self.waitForMessages(2)
         print("Received %d messages" % len(messages))
-        self.assertEquals(1,
+        self.assertEquals(2,
                           len(messages),
                           "Did not receive the expected number of messages")
         audit = messages[0]["groupChange"]
@@ -120,6 +124,21 @@ class GroupAuditTests(AuditLogTestBase):
         service_description = self.get_service_description()
         self.assertEquals(service_description, "LDAP")
 
+        # Check the Add message for the new users primary group
+        audit = messages[1]["groupChange"]
+
+        self.assertEqual("Added", audit["action"])
+        user_dn = "cn=" + USER_NAME + ",cn=users," + self.base_dn
+        group_dn = "cn=domain users,cn=users," + self.base_dn
+        self.assertTrue(user_dn.lower(), audit["user"].lower())
+        self.assertTrue(group_dn.lower(), audit["group"].lower())
+        self.assertRegexpMatches(audit["remoteAddress"],
+                                 self.remoteAddress)
+        self.assertTrue(self.is_guid(audit["sessionId"]))
+        session_id = self.get_session()
+        self.assertEquals(session_id, audit["sessionId"])
+        self.assertEquals(EVT_ID_USER_ADDED_TO_GLOBAL_SEC_GROUP,
+                          audit["eventId"])
         #
         # Add the user to a group
         #
@@ -231,11 +250,13 @@ class GroupAuditTests(AuditLogTestBase):
         #
         # Wait for the primary group change for the created user.
         #
-        messages = self.waitForMessages(1)
+        messages = self.waitForMessages(2)
         print("Received %d messages" % len(messages))
-        self.assertEquals(1,
+        self.assertEquals(2,
                           len(messages),
                           "Did not receive the expected number of messages")
+
+        # Check the PrimaryGroup message
         audit = messages[0]["groupChange"]
 
         self.assertEqual("PrimaryGroup", audit["action"])
@@ -251,6 +272,22 @@ class GroupAuditTests(AuditLogTestBase):
         service_description = self.get_service_description()
         self.assertEquals(service_description, "LDAP")
 
+        # Check the Add message for the new users primary group
+        audit = messages[1]["groupChange"]
+
+        self.assertEqual("Added", audit["action"])
+        user_dn = "cn=" + USER_NAME + ",cn=users," + self.base_dn
+        group_dn = "cn=domain users,cn=users," + self.base_dn
+        self.assertTrue(user_dn.lower(), audit["user"].lower())
+        self.assertTrue(group_dn.lower(), audit["group"].lower())
+        self.assertRegexpMatches(audit["remoteAddress"],
+                                 self.remoteAddress)
+        self.assertTrue(self.is_guid(audit["sessionId"]))
+        session_id = self.get_session()
+        self.assertEquals(session_id, audit["sessionId"])
+        self.assertEquals(EVT_ID_USER_ADDED_TO_GLOBAL_SEC_GROUP,
+                          audit["eventId"])
+
         #
         # Add the user to a group, the user needs to be a member of a group
         # before there primary group can be set to that group.
@@ -277,6 +314,8 @@ class GroupAuditTests(AuditLogTestBase):
         self.assertEquals(session_id, audit["sessionId"])
         service_description = self.get_service_description()
         self.assertEquals(service_description, "LDAP")
+        self.assertEquals(EVT_ID_USER_ADDED_TO_GLOBAL_SEC_GROUP,
+                          audit["eventId"])
 
         #
         # Change the primary group of a user
@@ -323,6 +362,8 @@ class GroupAuditTests(AuditLogTestBase):
         self.assertEquals(session_id, audit["sessionId"])
         service_description = self.get_service_description()
         self.assertEquals(service_description, "LDAP")
+        self.assertEquals(EVT_ID_USER_REMOVED_FROM_GLOBAL_SEC_GROUP,
+                          audit["eventId"])
 
         audit = messages[1]["groupChange"]
 
@@ -338,6 +379,8 @@ class GroupAuditTests(AuditLogTestBase):
         self.assertEquals(session_id, audit["sessionId"])
         service_description = self.get_service_description()
         self.assertEquals(service_description, "LDAP")
+        self.assertEquals(EVT_ID_USER_ADDED_TO_GLOBAL_SEC_GROUP,
+                          audit["eventId"])
 
         audit = messages[2]["groupChange"]
 
diff --git a/source4/dsdb/samdb/ldb_modules/group_audit.c b/source4/dsdb/samdb/ldb_modules/group_audit.c
index 7e6e16de137..4356046f675 100644
--- a/source4/dsdb/samdb/ldb_modules/group_audit.c
+++ b/source4/dsdb/samdb/ldb_modules/group_audit.c
@@ -25,6 +25,7 @@
 #include "includes.h"
 #include "ldb_module.h"
 #include "lib/audit_logging/audit_logging.h"
+#include "librpc/gen_ndr/windows_event_ids.h"
 
 #include "dsdb/samdb/samdb.h"
 #include "dsdb/samdb/ldb_modules/util.h"
@@ -36,10 +37,11 @@
 #define AUDIT_JSON_TYPE "groupChange"
 #define AUDIT_HR_TAG "Group Change"
 #define AUDIT_MAJOR 1
-#define AUDIT_MINOR 0
+#define AUDIT_MINOR 1
 #define GROUP_LOG_LVL 5
 
-static const char * const member_attr[] = {"member", NULL};
+static const char *const group_attrs[] = {"member", "groupType", NULL};
+static const char *const group_type_attr[] = {"groupType", NULL};
 static const char * const primary_group_attr[] = {
 	"primaryGroupID",
 	"objectSID",
@@ -105,13 +107,13 @@ static struct GUID *get_transaction_id(
  * @return A json object containing the details.
  * 	   NULL if an error was detected
  */
-static struct json_object audit_group_json(
-	const struct ldb_module *module,
-	const struct ldb_request *request,
-	const char *action,
-	const char *user,
-	const char *group,
-	const int status)
+static struct json_object audit_group_json(const struct ldb_module *module,
+					   const struct ldb_request *request,
+					   const char *action,
+					   const char *user,
+					   const char *group,
+					   const enum event_id_type event_id,
+					   const int status)
 {
 	struct ldb_context *ldb = NULL;
 	const struct dom_sid *sid = NULL;
@@ -137,6 +139,12 @@ static struct json_object audit_group_json(
 	if (rc != 0) {
 		goto failure;
 	}
+	if (event_id != EVT_ID_NONE) {
+		rc = json_add_int(&audit, "eventId", event_id);
+		if (rc != 0) {
+			goto failure;
+		}
+	}
 	rc = json_add_int(&audit, "statusCode", status);
 	if (rc != 0) {
 		goto failure;
@@ -449,9 +457,11 @@ static const char *get_primary_group_dn(
  * @brief Log details of a change to a users primary group.
  *
  * Log details of a change to a users primary group.
+ * There is no windows event id associated with a Primary Group change.
+ * However for a new user we generate an added to group event.
  *
  * @param module The ldb module.
- * @param request The request deing logged.
+ * @param request The request being logged.
  * @param action Description of the action being performed.
  * @param group The linearized for of the group DN
  * @param status the LDB status code for the processing of the request.
@@ -497,12 +507,7 @@ static void log_primary_group_change(
 
 		struct json_object json;
 		json = audit_group_json(
-			module,
-			request,
-			action,
-			user,
-			group,
-			status);
+		    module, request, action, user, group, EVT_ID_NONE, status);
 		audit_log_json(
 			&json,
 			DBGC_DSDB_GROUP_AUDIT_JSON,
@@ -515,6 +520,13 @@ static void log_primary_group_change(
 				&json);
 		}
 		json_free(&json);
+		if (request->operation == LDB_ADD) {
+			/*
+			 * Have just added a user, generate a groupChange
+			 * message indicating the user has been added to thier
+			 * new PrimaryGroup.
+			 */
+		}
 	}
 	TALLOC_FREE(ctx);
 }
@@ -532,12 +544,12 @@ static void log_primary_group_change(
  * @param status the LDB status code for the processing of the request.
  *
  */
-static void log_membership_change(
-	struct ldb_module *module,
-	const struct ldb_request *request,
-	const char *action,
-	const char *user,
-	const int  status)
+static void log_membership_change(struct ldb_module *module,
+				  const struct ldb_request *request,
+				  const char *action,
+				  const char *user,
+				  const enum event_id_type event_id,
+				  const int status)
 {
 	const char *group = NULL;
 	struct audit_context *ac =
@@ -569,12 +581,7 @@ static void log_membership_change(
 		(ac->msg_ctx && ac->send_events)) {
 		struct json_object json;
 		json = audit_group_json(
-			module,
-			request,
-			action,
-			user,
-			group,
-			status);
+		    module, request, action, user, group, event_id, status);
 		audit_log_json(
 			&json,
 			DBGC_DSDB_GROUP_AUDIT_JSON,
@@ -591,6 +598,68 @@ static void log_membership_change(
 	TALLOC_FREE(ctx);
 }
 
+/*
+ * @brief Get the windows event type id for removing a user from a group type.
+ *
+ * @param group_type the type of the current group, see libds/common/flags.h
+ *
+ * @return the Windows Event Id
+ *
+ */
+static enum event_id_type get_remove_member_event(uint32_t group_type)
+{
+
+	switch (group_type) {
+	case GTYPE_SECURITY_BUILTIN_LOCAL_GROUP:
+		return EVT_ID_USER_REMOVED_FROM_LOCAL_SEC_GROUP;
+	case GTYPE_SECURITY_GLOBAL_GROUP:
+		return EVT_ID_USER_REMOVED_FROM_GLOBAL_SEC_GROUP;
+	case GTYPE_SECURITY_DOMAIN_LOCAL_GROUP:
+		return EVT_ID_USER_REMOVED_FROM_LOCAL_SEC_GROUP;
+	case GTYPE_SECURITY_UNIVERSAL_GROUP:
+		return EVT_ID_USER_REMOVED_FROM_UNIVERSAL_SEC_GROUP;
+	case GTYPE_DISTRIBUTION_GLOBAL_GROUP:
+		return EVT_ID_USER_REMOVED_FROM_GLOBAL_GROUP;
+	case GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP:
+		return EVT_ID_USER_REMOVED_FROM_LOCAL_GROUP;
+	case GTYPE_DISTRIBUTION_UNIVERSAL_GROUP:
+		return EVT_ID_USER_REMOVED_FROM_UNIVERSAL_GROUP;
+	default:
+		return EVT_ID_NONE;
+	}
+}
+
+/*
+ * @brief Get the windows event type id for adding a user to a group type.
+ *
+ * @param group_type the type of the current group, see libds/common/flags.h
+ *
+ * @return the Windows Event Id
+ *
+ */
+static enum event_id_type get_add_member_event(uint32_t group_type)
+{
+
+	switch (group_type) {
+	case GTYPE_SECURITY_BUILTIN_LOCAL_GROUP:
+		return EVT_ID_USER_ADDED_TO_LOCAL_SEC_GROUP;
+	case GTYPE_SECURITY_GLOBAL_GROUP:
+		return EVT_ID_USER_ADDED_TO_GLOBAL_SEC_GROUP;
+	case GTYPE_SECURITY_DOMAIN_LOCAL_GROUP:
+		return EVT_ID_USER_ADDED_TO_LOCAL_SEC_GROUP;
+	case GTYPE_SECURITY_UNIVERSAL_GROUP:
+		return EVT_ID_USER_ADDED_TO_UNIVERSAL_SEC_GROUP;
+	case GTYPE_DISTRIBUTION_GLOBAL_GROUP:
+		return EVT_ID_USER_ADDED_TO_GLOBAL_GROUP;
+	case GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP:
+		return EVT_ID_USER_ADDED_TO_LOCAL_GROUP;
+	case GTYPE_DISTRIBUTION_UNIVERSAL_GROUP:
+		return EVT_ID_USER_ADDED_TO_UNIVERSAL_GROUP;
+	default:
+		return EVT_ID_NONE;
+	}
+}
+
 /*
  * @brief Log all the changes to a users group membership.
  *
@@ -604,12 +673,12 @@ static void log_membership_change(
  * @param status the LDB status code for the processing of the request.
  *
  */
-static void log_membership_changes(
-	struct ldb_module *module,
-	const struct ldb_request *request,
-	struct ldb_message_element *el,
-	struct ldb_message_element *old_el,
-	int status)
+static void log_membership_changes(struct ldb_module *module,
+				   const struct ldb_request *request,
+				   struct ldb_message_element *el,
+				   struct ldb_message_element *old_el,
+				   uint32_t group_type,
+				   int status)
 {
 	unsigned int i, old_i, new_i;
 	unsigned int old_num_values;
@@ -674,6 +743,7 @@ static void log_membership_changes(
 			 * the new record. So it's been deleted
 			 */
 			const char *user = NULL;
+			enum event_id_type event_id;
 			if (old_val->dsdb_dn == NULL) {
 				really_parse_trusted_dn(
 					ctx,
@@ -682,12 +752,9 @@ static void log_membership_changes(
 					LDB_SYNTAX_DN);
 			}
 			user = ldb_dn_get_linearized(old_val->dsdb_dn->dn);
+			event_id = get_remove_member_event(group_type);
 			log_membership_change(
-				module,
-				request,
-				"Removed",
-				user,
-				status);
+			    module, request, "Removed", user, event_id, status);
 			old_i++;
 		} else if (cmp == BINARY_EQUAL) {
 			/*
@@ -739,27 +806,31 @@ static void log_membership_changes(
 				 * DN has been deleted.
 				 */


-- 
Samba Shared Repository



More information about the samba-cvs mailing list