2013-06-18 20:14:08 +02:00
|
|
|
#!/usr/bin/php
|
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* EGroupware setup - test or create the ldap connection and hierarchy
|
|
|
|
*
|
|
|
|
* @link http://www.egroupware.org
|
|
|
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
|
|
|
* @package setup
|
|
|
|
* @copyright (c) 2013 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
|
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
|
|
* @version $Id$
|
|
|
|
*/
|
|
|
|
|
|
|
|
chdir(dirname(__FILE__)); // to enable our relative pathes to work
|
|
|
|
|
2013-09-10 19:29:58 +02:00
|
|
|
if (php_sapi_name() !== 'cli') // security precaution: forbit calling as web-page
|
2013-06-18 20:14:08 +02:00
|
|
|
{
|
|
|
|
die('<h1>setup/doc/chown.php must NOT be called as web-page --> exiting !!!</h1>');
|
|
|
|
}
|
|
|
|
|
|
|
|
$recursive = false;
|
|
|
|
|
|
|
|
$cmd = array_shift($_SERVER['argv']);
|
|
|
|
|
|
|
|
if ($_SERVER['argv'] && in_array($_SERVER['argv'][0], array('-R', '--recursive')))
|
|
|
|
{
|
|
|
|
$recursive = true;
|
|
|
|
array_shift($_SERVER['argv']);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (count($_SERVER['argv']) != 2)
|
|
|
|
{
|
|
|
|
usage();
|
|
|
|
}
|
|
|
|
|
|
|
|
function usage()
|
|
|
|
{
|
|
|
|
die("\nUsage: $cmd [-R|--recursive] from-id,to-id[,from-id2,to-id2,...] path\n\nonly nummeric ids are allowed, group-ids have to be negative!\n\n");
|
|
|
|
}
|
|
|
|
$ids = explode(',', $_SERVER['argv'][0]);
|
|
|
|
$change = array();
|
|
|
|
while($ids)
|
|
|
|
{
|
|
|
|
$from = (int)array_shift($ids);
|
|
|
|
$to = (int)array_shift($ids);
|
|
|
|
|
|
|
|
if (!$from || !$to || ($from < 0) != ($to < 0))
|
|
|
|
{
|
|
|
|
echo "from-id and to-id must be nummeric and have same sign (negative for groups)!\n\n";
|
|
|
|
usage();
|
|
|
|
}
|
|
|
|
$change[$from] = $to;
|
|
|
|
}
|
|
|
|
|
|
|
|
$path = $_SERVER['argv'][1];
|
|
|
|
if (!file_exists($path))
|
|
|
|
{
|
|
|
|
echo "File or directory '$path' not found!\n\n";
|
|
|
|
usage();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (posix_getuid())
|
|
|
|
{
|
|
|
|
die("\nNeed to run as root, to be able to change owner and group!\n\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
chown_grp($path, null, $recursive);
|
|
|
|
|
|
|
|
function chown_grp($path, array $stat=null, $recursive=false)
|
|
|
|
{
|
|
|
|
global $change;
|
|
|
|
|
|
|
|
if (is_null($stat) && !($stat = stat($path))) return false;
|
|
|
|
|
|
|
|
if (isset($change[$stat['uid']]) && !chown($path, $uid=$change[$stat['uid']]))
|
|
|
|
{
|
|
|
|
echo "Faild to set new owner #$uid for $path\n";
|
|
|
|
}
|
|
|
|
if (isset($change[-$stat['gid']]) && !chgrp($path, $gid=-$change[-$stat['gid']]))
|
|
|
|
{
|
|
|
|
echo "Faild to set new group #$gid for $path\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($recursive && is_dir($path))
|
|
|
|
{
|
|
|
|
foreach(new DirectoryIterator($path) as $child)
|
|
|
|
{
|
|
|
|
if (!$child->isDot())
|
|
|
|
chown_grp($child->getPathname(), array(
|
|
|
|
'uid' => $child->getOwner(),
|
|
|
|
'gid' => $child->getGroup(),
|
|
|
|
), $recursive);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|