Add whitespace to sync_LDAP_groups

Make the function more readable.
This commit is contained in:
Andrew Ruthven 2024-02-03 18:37:09 +13:00
parent 820d0992eb
commit a7fc46a848

View File

@ -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) );