mirror of
https://github.com/unraid/webgui.git
synced 2025-12-31 14:40:36 -06:00
74 lines
2.5 KiB
PHP
Executable File
74 lines
2.5 KiB
PHP
Executable File
#!/usr/bin/php -q
|
|
<?
|
|
# Copyright 2005-2023, Lime Technology
|
|
#
|
|
# Usage: newperms [dir] [owner] [group]
|
|
# Recursively changes the ownership and permissions of the directory and all files/subdirs
|
|
# within the directory.
|
|
# If no arguments given, operates on /mnt/cache and /mnt/disk*, setting owner:group to nobody:users
|
|
# default owner is 'nobody', default group is 'users'
|
|
|
|
# This was created to fix ownership/permissions when upgrading to Unraid version 5.
|
|
|
|
# With corrections suggested by forum member Stokkes
|
|
|
|
# Here's a breakdown of chmod "go-rwx,u-x,go+u"
|
|
# go-rwx Clear the 'rwx' bits in both the group and other permissions
|
|
# u-x Clear the 'x' bit in the user permissions (leaves rw as-is)
|
|
# go+u Copy the user permissions to group and other
|
|
|
|
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
|
|
$nchan = $argv[$argc-1] == 'nchan'; // console or nchan output
|
|
if ($nchan) unset($argv[$argc-1]); // remove nchan parameter
|
|
|
|
require_once "$docroot/webGui/include/publish.php";
|
|
|
|
function write(...$messages){
|
|
global $nchan;
|
|
if ($nchan) {
|
|
foreach ($messages as $message) {
|
|
publish('plugins', $message,1,false);
|
|
}
|
|
} else {
|
|
foreach ($messages as $message) echo $message;
|
|
}
|
|
}
|
|
function process($path) {
|
|
global $argv;
|
|
$owner = $argv[2] ?? 'nobody';
|
|
$group = $argv[3] ?? 'users';
|
|
if (is_dir($path) && preg_match('/^\/mnt\/.+/',$path)) {
|
|
write("Processing: $path\n");
|
|
write("... chown -R $owner:$group\n");
|
|
exec("chown -R $owner:$group ".escapeshellarg($path));
|
|
write("... chmod -R go-rwx,u-x,go+u\n");
|
|
exec("chmod -R go-rwx,u-x,go+u ".escapeshellarg($path));
|
|
write("... find -type d -exec chmod 777 {} \\;\n");
|
|
exec("find ".escapeshellarg($path)." -type d -exec chmod 777 {} \\;");
|
|
write("... sync\n");
|
|
exec("sync");
|
|
write("\n");
|
|
} else write("Error: expecting absolute folder path starting with /mnt\n");
|
|
}
|
|
|
|
$startTime = time();
|
|
|
|
if ($argv[1]??'') {
|
|
$paths = array_filter(explode('*',rawurldecode($argv[1])));
|
|
foreach ($paths as $path) process($path);
|
|
} else {
|
|
$disks = parse_ini_file("/var/local/emhttp/disks.ini",true);
|
|
foreach ($disks as $disk => $prop) {
|
|
if (is_dir("/mnt/$disk") && !in_array($prop['status'],['DISK_NP_DSBL','DISK_NP'])) process("/mnt/$disk");
|
|
}
|
|
}
|
|
|
|
$time = time()-$startTime;
|
|
$hours = floor($time/3600);
|
|
$mins = floor($time/60)%60;
|
|
$secs = floor($time%60);
|
|
|
|
write("Completed, elapsed time: ".sprintf('%02d:%02d:%02d', $hours, $mins, $secs)."\n");
|
|
if ($nchan) write('_DONE_','');
|
|
?>
|