OXIESEC PANEL
- Current Dir:
/
/
usr
/
share
/
perl5
/
File
/
StripNondeterminism
/
handlers
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
10/28/2024 06:50:07 AM
rwxr-xr-x
📄
ar.pm
2.76 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
cpio.pm
1.27 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
gettext.pm
2.77 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
gzip.pm
4.13 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
jar.pm
4.54 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
javadoc.pm
3.02 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
javaproperties.pm
2.41 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
pearregistry.pm
1.75 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
png.pm
4.19 KB
10/29/2017 03:40:17 PM
rw-r--r--
📄
zip.pm
7.62 KB
10/29/2017 03:40:17 PM
rw-r--r--
Editing: ar.pm
Close
# Copyright © 2014 Jérémy Bobbio <lunar@debian.org> # Copyright © 2014 Niko Tyni <ntyni@debian.org> # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Some code borrowed from ArFile # Copyright (C) 2007 Stefano Zacchiroli <zack@debian.org> # Copyright (C) 2007 Filippo Giunchedi <filippo@debian.org> package File::StripNondeterminism::handlers::ar; use strict; use warnings; use Fcntl q/SEEK_SET/; use File::StripNondeterminism; sub normalize { my ($file) = @_; my $GLOBAL_HEADER = "!<arch>\n"; my $GLOBAL_HEADER_LENGTH = length $GLOBAL_HEADER; my $FILE_HEADER_LENGTH = 60; my $FILE_MAGIC = "`\n"; my $buf; open(my $fh, '+<', $file) or die("failed to open $file for read+write: $!"); read $fh, $buf, $GLOBAL_HEADER_LENGTH; return 0 if $buf ne $GLOBAL_HEADER; while (1) { my $file_header_start = tell $fh; my $count = read $fh, $buf, $FILE_HEADER_LENGTH; die "reading $file failed: $!" if !defined $count; last if $count == 0; # http://en.wikipedia.org/wiki/Ar_(Unix) #from to Name Format #0 15 File name ASCII #16 27 File modification date Decimal #28 33 Owner ID Decimal #34 39 Group ID Decimal #40 47 File mode Octal #48 57 File size in bytes Decimal #58 59 File magic \140\012 die "Incorrect header length" if length $buf != $FILE_HEADER_LENGTH; die "Incorrect file magic" if substr($buf, 58, length($FILE_MAGIC)) ne $FILE_MAGIC; my $file_mode = oct(substr($buf, 40, 8)); my $file_size = substr($buf, 48, 10); die "Incorrect file size" if $file_size < 1; seek $fh, $file_header_start + 16, SEEK_SET; # mtime syswrite $fh, sprintf("%-12d", $File::StripNondeterminism::canonical_time // 0); # owner syswrite $fh, sprintf("%-6d", 0); # group syswrite $fh, sprintf("%-6d", 0); # file mode syswrite $fh, sprintf("%-8o", ($file_mode & oct(100)) ? oct(755) : oct(644)); # move to next member my $padding = $file_size % 2; seek $fh, $file_header_start + $FILE_HEADER_LENGTH + $file_size + $padding, SEEK_SET; } return 1; } 1;