Files
webmin/filemin/chmod.cgi
2026-04-08 19:53:49 +02:00

125 lines
2.4 KiB
Perl
Executable File

#!/usr/local/bin/perl
require './filemin-lib.pl';
&ReadParse();
get_paths();
my @errors;
my $perms = $in{'perms'};
# Selected directories and files only
if ($in{'applyto'} eq '1') {
foreach $name (split(/\0/, $in{'name'})) {
if (system_logged(
"chmod " . quotemeta($perms) . " " .
quotemeta("$cwd/$name")) != 0) {
push @errors,
"$name - $text{'error_chmod'}: $?";
}
}
}
# Selected files and directories and files in
# selected directories
if ($in{'applyto'} eq '2') {
foreach $name (split(/\0/, $in{'name'})) {
if (system_logged(
"chmod " . quotemeta($perms) . " " .
quotemeta("$cwd/$name")) != 0) {
push @errors,
"$name - $text{'error_chmod'}: $?";
}
if (-d "$cwd/$name") {
if (system_logged(
"find " .
quotemeta("$cwd/$name") .
" -maxdepth 1 -type f" .
" -exec chmod " .
quotemeta($perms) .
" {} \\;") != 0) {
push @errors,
"$name - " .
"$text{'error_chmod'}: $?";
}
}
}
}
# All (recursive)
if ($in{'applyto'} eq '3') {
foreach $name (split(/\0/, $in{'name'})) {
if (system_logged(
"chmod -R " . quotemeta($perms) .
" " .
quotemeta("$cwd/$name")) != 0) {
push @errors,
"$name - $text{'error_chmod'}: $?";
}
}
}
# Selected files and files under selected directories
# and subdirectories
if ($in{'applyto'} eq '4') {
foreach $name (split(/\0/, $in{'name'})) {
if (-f "$cwd/$name") {
if (system_logged(
"chmod " .
quotemeta($perms) . " " .
quotemeta("$cwd/$name")) != 0) {
push @errors,
"$name - " .
"$text{'error_chmod'}: $?";
}
}
else {
if (system_logged(
"find " .
quotemeta("$cwd/$name") .
" -type f -exec chmod " .
quotemeta($perms) .
" {} \\;") != 0) {
push @errors,
"$name - " .
"$text{'error_chmod'}: $?";
}
}
}
}
# Selected directories and subdirectories
if ($in{'applyto'} eq '5') {
foreach $name (split(/\0/, $in{'name'})) {
if (-d "$cwd/$name") {
if (system_logged(
"chmod " .
quotemeta($perms) . " " .
quotemeta("$cwd/$name")) != 0) {
push @errors,
"$name - " .
"$text{'error_chmod'}: $?";
}
if (system_logged(
"find " .
quotemeta("$cwd/$name") .
" -type d -exec chmod " .
quotemeta($perms) .
" {} \\;") != 0) {
push @errors,
"$name - " .
"$text{'error_chmod'}: $?";
}
}
}
}
if (scalar(@errors) > 0) {
print_errors(@errors);
}
else {
&redirect("index.cgi?path=" . &urlize($path));
}