parent
6856ed3f52
commit
033ab28d15
|
@ -18,8 +18,13 @@ category 'computing_tools';
|
|||
|
||||
handle query => sub {
|
||||
my $query = $_;
|
||||
|
||||
s/\s*(chmod|permissions?)\s*//g;
|
||||
return unless /^(?:0|1|2|4)?([0-7]{3})$/;
|
||||
return unless /^(0|1|2|4|6|7)?([0-7]{3})$/;
|
||||
|
||||
my $plain_output;
|
||||
|
||||
my @modes = qw(--- --x -w- -wx r-- r-x rw- rwx);
|
||||
|
||||
my @modes_desc = (
|
||||
'no permission',
|
||||
|
@ -32,13 +37,51 @@ handle query => sub {
|
|||
'read, write and execute'
|
||||
);
|
||||
|
||||
my $octal = $1;
|
||||
my @digits = split '', $octal;
|
||||
my @modes = qw(--- --x -w- -wx r-- r-x rw- rwx);
|
||||
my $plain_output .= join('', map($modes[$_], @digits)) . " (symbolic)\n" .
|
||||
'User: ' . $modes_desc[$digits[0]] . "\n" .
|
||||
'Group: ' . $modes_desc[$digits[1]] . "\n" .
|
||||
'Others: ' . $modes_desc[$digits[2]] . "\n";
|
||||
my %attributes = (
|
||||
0 => 'no special attributes',
|
||||
1 => 'sticky',
|
||||
2 => 'setuid',
|
||||
3 => 'setuid and sticky',
|
||||
4 => 'setgid',
|
||||
5 => 'setgid and sticky',
|
||||
6 => 'setuid and setgid',
|
||||
7 => 'sticky, setuid and setgid',
|
||||
);
|
||||
|
||||
my $attributes = ($1 ? $1 : '');
|
||||
my $octal = $2;
|
||||
|
||||
my @digits = split '', $2;
|
||||
|
||||
my $symbolic = join '', map { $modes[$_] } @digits;
|
||||
|
||||
if ($attributes ne '') {
|
||||
$octal = "$attributes$octal";
|
||||
$plain_output = "Attributes: $attributes{$1}\n";
|
||||
my @symbolic = split '', $symbolic;
|
||||
if ($attributes >= 4) {
|
||||
$attributes -= 4;
|
||||
if ($symbolic[5] eq 'x') { $symbolic[5] = 's'; }
|
||||
else { $symbolic[5] = 'S'; }
|
||||
}
|
||||
if ($attributes >= 2) {
|
||||
$attributes -= 2;
|
||||
if ($symbolic[2] eq 'x') { $symbolic[2] = 's'; }
|
||||
else { $symbolic[2] = 'S'; }
|
||||
}
|
||||
if ($attributes >= 1) {
|
||||
$attributes -= 1;
|
||||
if ($symbolic[8] eq 'x') { $symbolic[2] = 't'; }
|
||||
else { $symbolic[8] = 'T'; }
|
||||
}
|
||||
$symbolic = join '', @symbolic;
|
||||
}
|
||||
|
||||
$plain_output = "$symbolic (symbolic)\n" .
|
||||
'User: ' . $modes_desc[$digits[0]] . "\n" .
|
||||
'Group: ' . $modes_desc[$digits[1]] . "\n" .
|
||||
'Others: ' . $modes_desc[$digits[2]] . "\n" .
|
||||
($plain_output ? $plain_output : '');
|
||||
(my $html_output = $plain_output) =~ s/\n/<br>/g;
|
||||
|
||||
$plain_output = "$octal (octal)\n$plain_output" . 'More at https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions';
|
||||
|
|
|
@ -18,9 +18,10 @@ Group: read and execute
|
|||
Others: read and execute
|
||||
More at https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions',
|
||||
|
||||
html => 'rwxr-xr-x (symbolic)<br>User: read, write and execute<br>Group: read and execute<br>Others: read and execute<br><a href="https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions">More at Wikipedia</a>',
|
||||
html => 'rwxr-xr-x (symbolic)<br>User: read, write and execute<br>Group: read and execute<br>Others: read and execute<br><a href="https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions">More at Wikipedia</a>',
|
||||
|
||||
heading => 'chmod 755 (Unix Permissions)'),
|
||||
heading => 'chmod 755 (Unix Permissions)'
|
||||
),
|
||||
|
||||
'permission 0644' => test_zci(
|
||||
'644 (octal)
|
||||
|
@ -30,9 +31,25 @@ Group: read
|
|||
Others: read
|
||||
More at https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions',
|
||||
|
||||
html => 'rw-r--r-- (symbolic)<br>User: read and write<br>Group: read<br>Others: read<br><a href="https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions">More at Wikipedia</a>',
|
||||
html => 'rw-r--r-- (symbolic)<br>User: read and write<br>Group: read<br>Others: read<br><a href="https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions">More at Wikipedia</a>',
|
||||
|
||||
heading => 'permission 0644 (Unix Permissions)')
|
||||
heading => 'permission 0644 (Unix Permissions)'
|
||||
),
|
||||
|
||||
'permission 7644' => test_zci(
|
||||
'7644 (octal)
|
||||
rwSr-Sr-T (symbolic)
|
||||
User: read and write
|
||||
Group: read
|
||||
Others: read
|
||||
Attributes: sticky, setuid and setgid
|
||||
More at https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions',
|
||||
|
||||
html => 'rwSr-Sr-T (symbolic)<br>User: read and write<br>Group: read<br>Others: read<br>Attributes: sticky, setuid and setgid<br><a href="https://en.wikipedia.org/wiki/Permissions#Notation_of_traditional_Unix_permissions">More at Wikipedia</a>',
|
||||
|
||||
heading => 'permission 7644 (Unix Permissions)'
|
||||
),
|
||||
|
||||
'permission 9644' => undef,
|
||||
);
|
||||
|
||||
done_testing;
|
||||
|
|
Loading…
Reference in New Issue