浏览代码

Ticket 550 - posix winsync will not create memberuid values if group entry become posix group in the same sync interval

Description:  Posix winsync plugin can create memberUid values according the uniquemember values.
              prerequisite is that the group is already a posix group.  Will add the posix attributes
              (gid) and the group members on the AD on the same time, so it occurs in the same sync
              interval and the memberUid values will not generated.

              This was from the ticket reporter: cgrzemba.

              This patch has been modified to work with 1.3.1

              Also fixed a compiler warning in pw.c(different issue)

https://fedorahosted.org/389/ticket/550

Reviewed by: noriko & richm(Thanks!!)
Mark Reynolds 12 年之前
父节点
当前提交
f9c9269127

+ 2 - 2
ldap/servers/plugins/posix-winsync/posix-group-func.c

@@ -628,7 +628,7 @@ propogateDeletionsUpward(Slapi_Entry *entry, const Slapi_DN *base_sdn, Slapi_Val
 }
 
 int
-modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify)
+modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify, int newposixgroup)
 {
     slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "modGroupMembership: ==>\n");
     slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "modGroupMembership: Modding %s\n",
@@ -636,7 +636,7 @@ modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify)
 
     int posixGroup = hasObjectClass(entry, "posixGroup");
 
-    if (!(posixGroup || hasObjectClass(entry, "ntGroup"))) {
+    if (!(posixGroup || hasObjectClass(entry, "ntGroup")) && !newposixgroup) {
         slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
                         "modGroupMembership end: Not a posixGroup or ntGroup\n");
         return 0;

+ 1 - 1
ldap/servers/plugins/posix-winsync/posix-group-func.h

@@ -11,7 +11,7 @@ Slapi_PBlock * dnHasObjectClass( const char *baseDN, const char *objectClass, Sl
 char * searchUid(const char *udn);
 int dn_in_set(const char* uid, char **uids);
 */
-int modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify);
+int modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify, int newposixgroup);
 int addGroupMembership(Slapi_Entry *entry, Slapi_Entry *ad_entry);
 char * searchUid(const char *udn);
 void memberUidLock();

+ 6 - 12
ldap/servers/plugins/posix-winsync/posix-winsync.c

@@ -958,11 +958,6 @@ posix_winsync_pre_ds_mod_group_cb(void *cbdata, const Slapi_Entry *rawentry, Sla
     slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
                     "_pre_ds_mod_group_cb present %d modify %d before\n", is_present_local,
                     do_modify_local);
-    if (posix_winsync_config_get_mapMemberUid() || posix_winsync_config_get_mapNestedGrouping()) {
-        memberUidLock();
-        modGroupMembership(ds_entry, smods, do_modify);
-        memberUidUnlock();
-    }
 
     slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
                     "_pre_ds_mod_group_cb present %d modify %d\n", is_present_local,
@@ -985,19 +980,18 @@ posix_winsync_pre_ds_mod_group_cb(void *cbdata, const Slapi_Entry *rawentry, Sla
                             "_pre_ds_mod_group_cb add oc:posixGroup\n");
             slapi_mods_add_mod_values(smods, LDAP_MOD_REPLACE, "objectClass",
                                       valueset_get_valuearray(oc_vs));
-            slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
-                            "_pre_ds_mod_group_cb step\n");
             slapi_value_free(&oc_nv);
-            slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
-                            "_pre_ds_mod_group_cb step\n");
             slapi_valueset_free(oc_vs);
-            slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
-                            "_pre_ds_mod_group_cb step\n");
         }
         slapi_value_free(&voc);
     }
-    slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "_pre_ds_mod_group_cb step\n");
+    if (posix_winsync_config_get_mapMemberUid() || posix_winsync_config_get_mapNestedGrouping()) {
+        memberUidLock();
+        modGroupMembership(ds_entry, smods, do_modify, do_modify_local);
+        memberUidUnlock();
+    }
 
+    slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "_pre_ds_mod_group_cb step\n");
     if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN)) {
         for (mod = slapi_mods_get_first_mod(smods); mod; mod = slapi_mods_get_next_mod(smods)) {
             slapi_mod_dump(mod, 0);

+ 1 - 1
ldap/servers/slapd/pw.c

@@ -1535,7 +1535,7 @@ pw_get_admin_users(passwdPolicy *pwp)
 	const Slapi_DN *sdn = pwp->pw_admin;
 	char **uniquemember_vals = NULL;
 	char **member_vals = NULL;
-	char *binddn = slapi_sdn_get_dn(sdn);
+	const char *binddn = slapi_sdn_get_dn(sdn);
 	int uniquemember_count = 0;
 	int member_count = 0;
 	int nentries = 0;