From a7fc46a848b0632784fb4d66dfff203577f675ea Mon Sep 17 00:00:00 2001 From: Andrew Ruthven Date: Sat, 3 Feb 2024 18:37:09 +1300 Subject: [PATCH] Add whitespace to sync_LDAP_groups Make the function more readable. --- inc/drivers_ldap.php | 127 +++++++++++++++++++++++++++++++++---------- 1 file changed, 97 insertions(+), 30 deletions(-) diff --git a/inc/drivers_ldap.php b/inc/drivers_ldap.php index 8c7ea621..00ca6754 100644 --- a/inc/drivers_ldap.php +++ b/inc/drivers_ldap.php @@ -498,7 +498,6 @@ function sync_LDAP_groups(){ if ( ! $ldapDriver->valid ) return; $mapping = $c->authenticate_hook['config']['group_mapping_field']; - //$attributes = array('cn','modifyTimestamp','memberUid'); $attributes = array_values_mapping($mapping); $ldap_groups_tmp = $ldapDriver->getAllGroups($attributes); @@ -507,27 +506,41 @@ function sync_LDAP_groups(){ $member_field = isset($mapping['members']) ? $mapping['members'] : 'memberUid'; - $dnfix = isset($c->authenticate_hook['config']['group_member_dnfix']) && $c->authenticate_hook['config']['group_member_dnfix']; + $dnfix = isset($c->authenticate_hook['config']['group_member_dnfix']) + && $c->authenticate_hook['config']['group_member_dnfix']; foreach($ldap_groups_tmp as $key => $ldap_group){ $group_mapping = $ldap_group[$mapping['username']]; $ldap_groups_info[$group_mapping] = $ldap_group; + if ( isset($ldap_groups_info[$group_mapping][$member_field]) ) { if ( is_array($ldap_groups_info[$group_mapping][$member_field]) ) { unset( $ldap_groups_info[$group_mapping][$member_field]['count'] ); } else { - $ldap_groups_info[$group_mapping][$member_field] = array($ldap_groups_info[$group_mapping][$member_field]); + $ldap_groups_info[$group_mapping][$member_field] + = array($ldap_groups_info[$group_mapping][$member_field]); } } unset($ldap_groups_tmp[$key]); } + $db_groups = array(); $db_group_members = array(); - $qry = new AwlQuery( "SELECT g.username AS group_name, member.username AS member_name FROM dav_principal g LEFT JOIN group_member ON (g.principal_id=group_member.group_id) LEFT JOIN dav_principal member ON (member.principal_id=group_member.member_id) WHERE g.type_id = 3"); + + $qry = new AwlQuery( " + SELECT g.username AS group_name, member.username AS member_name + FROM dav_principal g + LEFT JOIN group_member ON (g.principal_id = group_member.group_id) + LEFT JOIN dav_principal member ON + (member.principal_id = group_member.member_id) + WHERE g.type_id = 3 + "); + $qry->Exec('sync_LDAP',__LINE__,__FILE__); + while($db_group = $qry->Fetch()) { - $db_groups[$db_group->group_name] = $db_group->group_name; + $db_groups[$db_group->group_name] = $db_group->group_name; $db_group_members[$db_group->group_name][] = $db_group->member_name; } @@ -547,42 +560,51 @@ function sync_LDAP_groups(){ if ( sizeof ( $groups_to_create ) ){ $validUserFields = awl_get_fields('usr'); + foreach ( $groups_to_create as $k => $group ){ - if ( isset($c->do_not_sync_group_from_ldap) && isset($c->do_not_sync_group_from_ldap[$group]) ){ + if ( isset($c->do_not_sync_group_from_ldap) + && isset($c->do_not_sync_group_from_ldap[$group]) ) { unset($groups_to_create[$k]); $groups_nothing_done[] = $group; + continue; } $user = (object) array(); - if ( isset($c->authenticate_hook['config']['default_value']) && is_array($c->authenticate_hook['config']['default_value']) ) { + if ( isset($c->authenticate_hook['config']['default_value']) + && is_array($c->authenticate_hook['config']['default_value']) ) { foreach ( $c->authenticate_hook['config']['default_value'] as $field => $value ) { if ( isset($validUserFields[$field]) ) { - $user->{$field} = $value; + $user->{$field} = $value; dbg_error_log( "LDAP", "Setting usr->%s to %s from configured defaults", $field, $value ); } } } + $user->user_no = 0; $ldap_values = $ldap_groups_info[$group]; + foreach ( $mapping as $field => $value ) { dbg_error_log( "LDAP", "Considering copying %s", $field ); if ( isset($validUserFields[$field]) ) { - $user->{$field} = $ldap_values[$value]; + $user->{$field} = $ldap_values[$value]; dbg_error_log( "LDAP", "Setting usr->%s to %s from LDAP field %s", $field, $ldap_values[$value], $value ); } } - if ($user->fullname=="") { + + if ($user->fullname == "") { $user->fullname = $group; } - if ($user->displayname=="") { + + if ($user->displayname == "") { $user->displayname = $group; } + $user->username = $group; $user->updated = "now"; /** @todo Use the 'updated' timestamp from LDAP for groups too */ - $principal = new Principal('username',$group); + $principal = new Principal('username', $group); if ( $principal->Exists() ) { $principal->Update($user); } @@ -590,17 +612,25 @@ function sync_LDAP_groups(){ $principal->Create($user); } - $qry = new AwlQuery( "UPDATE dav_principal set type_id = 3 WHERE username=:group ",array(':group'=>$group) ); + $qry = new AwlQuery( " + UPDATE dav_principal + SET type_id = 3 + WHERE username = :group", + array(':group' => $group) ); $qry->Exec('sync_LDAP',__LINE__,__FILE__); + Principal::cacheDelete('username', $group); + // mark group for updating, so users get synced $groups_to_update[] = $group; } + $c->messages[] = sprintf( i18n('- creating groups : %s'), join(', ',$groups_to_create) ); } if ( sizeof ( $groups_to_update ) ){ $c->messages[] = sprintf(i18n('- updating groups : %s'),join(', ',$groups_to_update)); + foreach ( $groups_to_update as $group ){ $db_members = is_array( $db_group_members[$group] ) ? array_values( $db_group_members[$group] ) @@ -610,20 +640,27 @@ function sync_LDAP_groups(){ : array(); $mapping_field = $c->authenticate_hook['config']['mapping_field']; - if (isset($c->authenticate_hook['config']['group_match_username_attr']) && isset($mapping_field['username'])) { + + if (isset($c->authenticate_hook['config']['group_match_username_attr']) + && isset($mapping_field['username'])) { $query = $ldapDriver->ldap_query_one; $username_ldap_attribute = $mapping_field['username']; - $filter="(objectCategory=person)"; + $filter = "(objectCategory=person)"; $ldap_members_tmp = array(); foreach ( $ldap_members as $member ){ - $entry = ldap_read($ldapDriver->connect, $member, $filter, array($username_ldap_attribute)); - $ldap_user_entry = ldap_first_entry($ldapDriver->connect,$entry); - $ldap_user_attributes = ldap_get_attributes($ldapDriver->connect, $ldap_user_entry); + $entry = ldap_read($ldapDriver->connect, $member, $filter, + array($username_ldap_attribute)); + $ldap_user_entry + = ldap_first_entry($ldapDriver->connect,$entry); + $ldap_user_attributes + = ldap_get_attributes($ldapDriver->connect, $ldap_user_entry); - array_push($ldap_members_tmp, $ldap_user_attributes[$username_ldap_attribute][0]); + array_push($ldap_members_tmp, + $ldap_user_attributes[$username_ldap_attribute][0]); } + $ldap_members = $ldap_members_tmp; } else if ( $member_field == 'uniqueMember' || $dnfix ) { @@ -633,17 +670,36 @@ function sync_LDAP_groups(){ $add_users = array_diff ( $ldap_members, $db_members ); if ( sizeof ( $add_users ) ){ $c->messages[] = sprintf(i18n('- adding %s to group : %s'),join(', ', $add_users ), $group); - foreach ( $add_users as $member ){ - $qry = new AwlQuery( "INSERT INTO group_member SELECT g.principal_id AS group_id,u.principal_id AS member_id FROM dav_principal g, dav_principal u WHERE g.username=:group AND u.username=:member",array (':group'=>$group,':member'=>$member) ); + + foreach ( $add_users as $member ) { + $qry = new AwlQuery( " + INSERT INTO group_member + SELECT g.principal_id AS group_id, u.principal_id AS member_id + FROM dav_principal g, dav_principal u + WHERE g.username = :group + AND u.username = :member", + array (':group' => $group, ':member' => $member) ); + $qry->Exec('sync_LDAP_groups',__LINE__,__FILE__); Principal::cacheDelete('username', $member); } } - $remove_users = @array_flip( @array_flip( array_diff( $db_members, $ldap_members ) )); - if ( sizeof ( $remove_users ) ){ + + $remove_users = @array_flip( @array_flip( array_diff( $db_members, + $ldap_members ))); + if ( sizeof ( $remove_users ) ) { $c->messages[] = sprintf(i18n('- removing %s from group : %s'),join(', ', $remove_users ), $group); - foreach ( $remove_users as $member ){ - $qry = new AwlQuery( "DELETE FROM group_member USING dav_principal g,dav_principal m WHERE group_id=g.principal_id AND member_id=m.principal_id AND g.username=:group AND m.username=:member",array (':group'=>$group,':member'=>$member) ); + + foreach ( $remove_users as $member ) { + $qry = new AwlQuery( " + DELETE FROM group_member + USING dav_principal g,dav_principal m + WHERE group_id = g.principal_id + AND member_id = m.principal_id + AND g.username = :group + AND m.username=:member", + array (':group' => $group , ':member' => $member) ); + $qry->Exec('sync_LDAP_groups',__LINE__,__FILE__); Principal::cacheDelete('username', $member); } @@ -651,20 +707,31 @@ function sync_LDAP_groups(){ } } - if ( sizeof ( $groups_to_deactivate ) ){ - foreach ( $groups_to_deactivate as $k => $group ){ - if ( isset($c->do_not_sync_group_from_ldap) && isset($c->do_not_sync_group_from_ldap[$group]) ){ + if ( sizeof ( $groups_to_deactivate ) ) { + foreach ( $groups_to_deactivate as $k => $group ) { + if ( isset($c->do_not_sync_group_from_ldap) + && isset($c->do_not_sync_group_from_ldap[$group]) ) { unset($groups_to_deactivate[$k]); $groups_nothing_done[] = $group; + } else { - $qry = new AwlQuery( 'UPDATE dav_principal SET user_active=FALSE WHERE username=:group AND type_id = 3',array(':group'=>$group) ); + $qry = new AwlQuery( ' + UPDATE dav_principal + SET user_active = FALSE + WHERE username = :group + AND type_id = 3', + array(':group' => $group) ); $qry->Exec('sync_LDAP',__LINE__,__FILE__); - Principal::cacheFlush('username=:group AND type_id = 3', array(':group'=>$group) ); + + Principal::cacheFlush('username=:group AND type_id = 3', + array(':group' => $group) ); } } + if ( sizeof($groups_to_deactivate) ) $c->messages[] = sprintf(i18n('- deactivated groups : %s'), join(', ',$groups_to_deactivate)); } + if ( sizeof($groups_nothing_done) ) $c->messages[] = sprintf( i18n('- nothing done on : %s'), join(', ',$groups_nothing_done) );