moved check_acl to admin-cli and fixed bug #143: check_acl.php deletes all ACL if accounts are in ldap

This commit is contained in:
Ralf Becker 2007-05-08 13:36:17 +00:00
parent 5c43c59a5d
commit 06b826b611
2 changed files with 22 additions and 47 deletions

View File

@ -52,6 +52,9 @@ switch($action)
case '--change-account-id':
return do_change_account_id($arg0s);
case '--check-acl';
return do_check_acl();
default:
usage($action);
break;
@ -100,9 +103,28 @@ function usage($action=null,$ret=0)
echo " Deletes a user from eGroupWare. It's data can be moved to an other user or it get deleted too.\n";
echo "--change-account-id admin-account[@domain],admin-password,from1,to1[...,fromN,toN]\n";
echo " Changes one or more account_id's in the database (make a backup before!).\n";
echo "--check-acl admin-account[@domain],admin-password\n";
echo " Deletes ACL entries of not longer existing accounts (make a database backup before!).\n";
exit;
}
function do_check_acl()
{
$deleted = 0;
if (($all_accounts = $GLOBALS['egw']->accounts->search(array('type'=>'both'))))
{
$ids = array();
foreach($all_accounts as $account)
{
$ids[] = $account['account_id'];
}
// does not work for LDAP! $ids = array_keys($all_accounts);
$GLOBALS['egw']->db->query("DELETE FROM egw_acl WHERE acl_account NOT IN (".implode(',',$ids).") OR acl_appname='phpgw_group' AND acl_location NOT IN ('".implode("','",$ids)."')",__LINE__,__FILE__);
$deleted = $GLOBALS['egw']->db->affected_rows();
}
echo "\n$deleted ACL records of not (longer) existing accounts deleted.\n\n";
}
/**
* Delete a given user from eGW
*

View File

@ -1,47 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Admin - delete ACL records of deleted accounts *
* http://www.egroupware.org *
* Written and (c) 2004 by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/**
* delete ACL records of deleted accounts (can be called only via the URL)
*
* ACL records of deleted accounts have very irritating effects on the ACL (specialy calendar)
*
* @package admin
* @author RalfBecker@outdoor-training.de
* @license GPL
*/
$GLOBALS['egw_info'] = array(
'flags' => array(
'currentapp' => 'admin',
));
include('../header.inc.php');
if (!$GLOBALS['egw_info']['user']['apps']['admin'])
{
echo '<p align="center">'.lang('Permission denied')."</p>\n";
}
else
{
$deleted = 0;
if (($all_accounts = $GLOBALS['egw']->accounts->search(array('type'=>'both'))))
{
$all_accounts = array_keys($all_accounts);
$GLOBALS['egw']->db->query("DELETE FROM egw_acl WHERE acl_account NOT IN (".implode(',',$all_accounts).") OR acl_appname='phpgw_group' AND acl_location NOT IN ('".implode("','",$all_accounts)."')",__LINE__,__FILE__);
$deleted = $GLOBALS['egw']->db->affected_rows();
}
echo '<p align="center">'.lang('%1 ACL records of not (longer) existing accounts deleted.',$deleted)."</p>\n";
}
$GLOBALS['egw']->common->egw_footer();
$GLOBALS['egw']->common->egw_exit();