Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4
Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4
Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4
Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4
Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4
Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4
PK =Z[;
u7znu W+A #! /bin/sh
#
# extfs support for p7zip
# Written by Pavel Roskin
# Some Bugfixes/workarounds by Sergiy Niskorodov
# Licensed under GNU GPL version 2 or later version.
P7ZIP=`which 7z 2>/dev/null` || P7ZIP=`which 7za 2>/dev/null`
mcu7zip_list ()
{
# Symlinks are not shown - no idea how to distinguish them
# Read-only files are not shown as such - it's rarely useful
ugid="`id -nu` `id -ng`"
date_re='^\(....\)-\(..\)-\(..\) \(..:..:..\)'
date_mc='\2-\3-\1 \4'
size_re='............'
$P7ZIP l "$1" | sed -n "s/$date_re D.... $size_re $size_re\(.*\)/drwxr-xr-x 1 $ugid 0 $date_mc \5/p;s/$date_re \..... \($size_re\) $size_re\(.*\)/-rw-r--r-- 1 $ugid \5 $date_mc \6/p"
}
mcu7zip_copyout ()
{
#first we check if we have old p7zip archive with prefix ./ in filename
$P7ZIP l "$1" "$2" | grep -q "0 files, 0 folders" && \
EXFNAME='*./'"$2" || EXFNAME="$2"
$P7ZIP e -so "$1" "$EXFNAME" > "$3" 2>/dev/null
}
mcu7zip_copyin ()
{
$P7ZIP a -si"$2" "$1" <"$3" >/dev/null 2>&1
}
mcu7zip_mkdir ()
{
dir=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-u7z.XXXXXX"` || exit 1
mkdir -p "$dir"/"$2"
$P7ZIP a -w"$dir" "$1" "$dir"/"$2" >/dev/null 2>&1
rm -rf "$dir"
}
mcu7zip_rm ()
{
# NOTE: Version 4.20 fails to delete files in subdirectories
#first we check if we have old p7zip archive with prefix ./ in filename
$P7ZIP l "$1" "$2" | grep -q "0 files, 0 folders" && \
EXFNAME='*./'"$2" || EXFNAME="$2"
$P7ZIP d "$1" "$EXFNAME" 2>&1 | grep -q E_NOTIMPL > /dev/null 2>&1 && \
{ printf "Function not implemented...\n7z cannot delete from solid archive." >&2 ; exit 1 ; }
}
mcu7zip_rmdir ()
{
#first we check if we have old p7zip archive with prefix ./ in filename
$P7ZIP l "$1" "$2" | grep -q "0 files, 0 folders" && \
EXFNAME='*./'"$2" || EXFNAME="$2"
$P7ZIP d "$1" "$EXFNAME"/ 2>&1 | grep -q E_NOTIMPL > /dev/null 2>&1 && \
{ printf "Function not implemented...\n7z cannot delete from solid archive." >&2 ; exit 1 ; }
}
# override any locale for dates
LC_DATE=C
export LC_DATE
umask 077
cmd="$1"
shift
case "$cmd" in
list) mcu7zip_list "$@" | sort -k 8 ;;
copyout) mcu7zip_copyout "$@" ;;
copyin) mcu7zip_copyin "$@" ;;
mkdir) mcu7zip_mkdir "$@" ;;
rm) mcu7zip_rm "$@" ;;
rmdir) mcu7zip_rmdir "$@" ;;
*) exit 1 ;;
esac
exit 0
PK =Z[`kg g mailfsnu W+A #! /usr/bin/perl -w
use bytes;
# MC extfs for (possibly compressed) Berkeley style mailbox files
# Peter Daum (Jan 1998, mc-4.1.24)
$zcat="zcat"; # gunzip to stdout
$bzcat="bzip2 -dc"; # bunzip2 to stdout
$lzcat="lzma -dc"; # unlzma to stdout
$xzcat="xz -dc"; # unxz to stdout
$file="file"; # "file" command
$TZ='GMT'; # default timezone (for Date module)
if (eval "require Date::Parse") {
import Date::Parse;
$parse_date=
sub {
local $ftime = str2time($_[0],$TZ);
$_ = localtime($ftime);
/^(...) (...) ([ \d]\d) (\d\d:\d\d):\d\d (\d\d\d\d)$/;
if ($ftime + 6 * 30 * 24 * 60 * 60 < $now ||
$ftime + 60 * 60 > $now) {
return "$2 $3 $5";
} else {
return "$2 $3 $4";
}
}
} elsif (eval "require Date::Manip") {
import Date::Manip;
$parse_date=
sub {
return UnixDate($_[0], "%l"); # "ls -l" format
}
} else { # use "light" version
$parse_date= sub {
local $mstring='GeeJanFebMarAprMayJunJulAugSepOctNovDec';
# assumes something like: Mon, 5 Jan 1998 16:08:19 +0200 (GMT+0200)
# if you have mails with another date format, add it here
if (/(\d\d?) ([A-Z][a-z][a-z]) (\d\d\d\d) (\d\d?):(\d\d)/) {
$day = $1;
$month = $2;
$mon = index($mstring,$month) / 3;
$year = $3;
$hour = $4;
$min = $5;
# pass time not year for files younger than roughly 6 months
# but not for files with dates more than 1-2 hours in the future
if ($year * 12 + $mon > $thisyear * 12 + $thismon - 7 &&
$year * 12 + $mon <= $thisyear * 12 + $thismon &&
! (($year * 12 + $mon) * 31 + $day ==
($thisyear * 12 + $thismon) * 31 + $thisday &&
$hour > $thishour + 2)) {
return "$month $day $hour:$min";
} else {
return "$month $day $year";
}
}
# Y2K bug.
# Date: Mon, 27 Mar 100 16:30:47 +0000 (GMT)
if (/(\d\d?) ([A-Z][a-z][a-z]) (1?\d\d) (\d\d?):(\d\d)/) {
$day = $1;
$month = $2;
$mon = index($mstring,$month) / 3;
$year = 1900 + $3;
$hour = $4;
$min = $5;
if ($year < 1970) {
$year += 100;
}
if ($year * 12 + $mon > $thisyear * 12 + $thismon - 7 &&
$year * 12 + $mon <= $thisyear * 12 + $thismon &&
! (($year * 12 + $mon) * 31 + $day ==
($thisyear * 12 + $thismon) * 31 + $thisday &&
$hour > $thishour + 2)) {
return "$month $day $hour:$min";
} else {
return "$month $day $year";
}
}
# AOLMail(SM).
# Date: Sat Jul 01 10:06:06 2000
if (/([A-Z][a-z][a-z]) (\d\d?) (\d\d?):(\d\d)(:\d\d)? (\d\d\d\d)/) {
$month = $1;
$mon = index($mstring,$month) / 3;
$day = $2;
$hour = $3;
$min = $4;
$year = $6;
if ($year * 12 + $mon > $thisyear * 12 + $thismon - 7 &&
$year * 12 + $mon <= $thisyear * 12 + $thismon &&
! (($year * 12 + $mon) * 31 + $day ==
($thisyear * 12 + $thismon) * 31 + $thisday &&
$hour > $thishour + 2)) {
return "$month $day $hour:$min";
} else {
return "$month $day $year";
}
}
# Fallback
return $fallback;
}
}
sub process_header {
while () {
$size+=length;
s/\r$//;
last if /^$/;
die "unexpected EOF\n" if eof;
if (/^date:\s(.*)$/i) {
$date=&$parse_date($1);
} elsif (/^subject:\s(.*)$/i) {
$subj=lc($1);
$subj=~ s/^(re:\s?)+//gi; # no leading Re:
$subj=~ tr/a-zA-Z0-9//cd; # strip all "special" characters
} elsif (/^from:\s.*?(\w+)\@/i) {
$from=$1;
} elsif (/^to:\s.*?(\w+)\@/i) {
$to=lc($1);
}
}
}
sub print_dir_line {
$from=$to if ($from eq $user); # otherwise, it would look pretty boring
$date=localtime(time) if (!defined $date);
printf "-r-------- 1 $< $< %d %s %3.3d_%.25s\n",
$size, $date, $msg_nr, "${from}_${subj}";
}
sub mailfs_list {
my $blank = 1;
$user=$ENV{USER}||getlogin||getpwuid($<) || "nobody";
while() {
s/\r$//;
if($blank && /^from\s+\w+(\.\w+)*@/i) { # Start of header
print_dir_line unless (!$msg_nr);
$size=length;
$msg_nr++;
($from,$to,$subj,$date)=("none","none","none", "01-01-80");
process_header;
$line=$blank=0;
} else {
$size+=length;
$line++;
$blank= /^$/;
}
}
print_dir_line unless (!$msg_nr);
exit 0;
}
sub mailfs_copyout {
my($source,$dest)=@_;
exit 1 unless (open STDOUT, ">$dest");
($nr)= ($source =~ /^(\d+)/); # extract message number from "filename"
my $blank = 1;
while() {
s/\r$//;
if($blank && /^from\s+\w+(\.\w+)*@/i) {
$msg_nr++;
exit(0) if ($msg_nr > $nr);
$blank= 0;
} else {
$blank= /^$/;
}
print if ($msg_nr == $nr);
}
}
# main {
exit 1 unless ($#ARGV >= 1);
$msg_nr=0;
$cmd=shift;
$mbox_name=shift;
my $mbox_qname = quotemeta ($mbox_name);
$_=`$file $mbox_qname`;
if (/gzip/) {
exit 1 unless (open IN, "$zcat $mbox_qname|");
} elsif (/bzip/) {
exit 1 unless (open IN, "$bzcat $mbox_qname|");
} elsif (/lzma/) {
exit 1 unless (open IN, "$lzcat $mbox_qname|");
} elsif (/xz/) {
exit 1 unless (open IN, "$xzcat $mbox_qname|");
} else {
exit 1 unless (open IN, "<$mbox_name");
}
umask 077;
if($cmd eq "list") {
$now = time;
$_ = localtime($now);
/^... (... [ \d]\d \d\d:\d\d):\d\d \d\d\d\d$/;
$fallback = $1;
$nowstring=`date "+%Y %m %d %H"`;
($thisyear, $thismon, $thisday, $thishour) = split(/ /, $nowstring);
&mailfs_list;
exit 0;
}
elsif($cmd eq "copyout") { &mailfs_copyout(@ARGV); exit 0; }
exit 1;
PK =Z[-' ' patchfsnu W+A #! /usr/bin/perl -w
#
# Written by Adam Byrtek , 2002
# Rewritten by David Sterba , 2009
#
# Extfs to handle patches in context and unified diff format.
# Known issues: When name of file to patch is modified during editing,
# hunk is duplicated on copyin. It is unavoidable.
use bytes;
use strict;
use POSIX;
use File::Temp 'tempfile';
# standard binaries
my $lzma = 'lzma';
my $xz = 'xz';
my $bzip = 'bzip2';
my $gzip = 'gzip';
my $fileutil = 'file -b';
# date parsing requires Date::Parse from TimeDate module
my $parsedates = eval 'require Date::Parse';
# regular expressions
my $unified_header=qr/^--- .*\n\+\+\+ .*\n$/;
my $unified_extract=qr/^--- ([^\s]+).*\n\+\+\+ ([^\s]+)\s*([^\t\n]*)/;
my $unified_contents=qr/^([+\-\\ \n]|@@ .* @@)/;
my $unified_hunk=qr/@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*\n/;
my $context_header=qr/^\*\*\* .*\n--- .*\n$/;
my $context_extract=qr/^\*\*\* ([^\s]+).*\n--- ([^\s]+)\s*([^\t\n]*)/;
my $context_contents=qr/^([!+\-\\ \n]|-{3} .* -{4}|\*{3} .* \*{4}|\*{15})/;
my $ls_extract_id=qr/^[^\s]+\s+[^\s]+\s+([^\s]+)\s+([^\s]+)/;
my $basename=qr|^(.*/)*([^/]+)$|;
sub patchfs_canonicalize_path ($) {
my ($fname) = @_;
$fname =~ s,/+,/,g;
$fname =~ s,(^|/)(?:\.?\./)+,$1,;
return $fname;
}
# output unix date in a mc-readable format
sub timef
{
my @time=localtime($_[0]);
return sprintf '%02d-%02d-%02d %02d:%02d', $time[4]+1, $time[3],
$time[5]+1900, $time[2], $time[1];
}
# parse given string as a date and return unix time
sub datetime
{
# in case of problems fall back to 0 in unix time
# note: str2time interprets some wrong values (eg. " ") as 'today'
if ($parsedates && defined (my $t=str2time($_[0]))) {
return timef($t);
}
return timef(time);
}
# print message on stderr and exit
sub error
{
print STDERR $_[0], "\n";
exit 1;
}
# (compressed) input
sub myin
{
my ($qfname)=(quotemeta $_[0]);
$_=`$fileutil $qfname`;
if (/^'*lzma/) {
return "$lzma -dc $qfname";
} elsif (/^'*xz/) {
return "$xz -dc $qfname";
} elsif (/^'*bzip/) {
return "$bzip -dc $qfname";
} elsif (/^'*gzip/) {
return "$gzip -dc $qfname";
} else {
return "cat $qfname";
}
}
# (compressed) output
sub myout
{
my ($qfname,$append)=(quotemeta $_[0],$_[1]);
my ($sep) = $append ? '>>' : '>';
$_=`$fileutil $qfname`;
if (/^'*lzma/) {
return "$lzma -c $sep $qfname";
} elsif (/^'*xz/) {
return "$xz -c $sep $qfname";
} elsif (/^'*bzip/) {
return "$bzip -c $sep $qfname";
} elsif (/^'*gzip/) {
return "$gzip -c $sep $qfname";
} else {
return "cat $sep $qfname";
}
}
# select diff filename conforming with rules found in diff.info
sub diff_filename
{
my ($fsrc,$fdst)= @_;
# TODO: can remove these two calls later
$fsrc = patchfs_canonicalize_path ($fsrc);
$fdst = patchfs_canonicalize_path ($fdst);
if (!$fdst && !$fsrc) {
error 'Index: not yet implemented';
} elsif (!$fsrc || $fsrc eq '/dev/null') {
return ($fdst,'PATCH-CREATE/');
} elsif (!$fdst || $fdst eq '/dev/null') {
return ($fsrc,'PATCH-REMOVE/');
} elsif (($fdst eq '/dev/null') && ($fsrc eq '/dev/null')) {
error 'Malformed diff';
} else {
# fewest path name components
if ($fdst=~s|/|/|g < $fsrc=~s|/|/|g) {
return ($fdst,'');
} elsif ($fdst=~s|/|/|g > $fsrc=~s|/|/|g) {
return ($fsrc,'');
} else {
# shorter base name
if (($fdst=~/$basename/o,length $2) < ($fsrc=~/$basename/o,length $2)) {
return ($fdst,'');
} elsif (($fdst=~/$basename/o,length $2) > ($fsrc=~/$basename/o,length $2)) {
return ($fsrc,'');
} else {
# shortest names
if (length $fdst < length $fsrc) {
return ($fdst,'');
} else {
return ($fsrc,'');
}
}
}
}
}
# IN: diff "archive" name
# IN: file handle for output; STDIN for list, tempfile else
# IN: filename to watch (for: copyout, rm), '' for: list
# IN: remove the file?
# true - ... and print out the rest
# false - ie. copyout mode, print just the file
sub parse($$$$)
{
my $archive=quotemeta shift;
my $fh=shift;
my $file=shift;
my $rmmod=shift;
my ($state,$fsize,$time);
my ($f,$fsrc,$fdst,$prefix);
my ($unified,$context);
my ($skipread, $filetoprint, $filefound);
my ($h_add,$h_del,$h_ctx); # hunk line counts
my ($h_r1,$h_r2); # hunk ranges
my @outsrc; # if desired ...
my @outdst;
my $line;
# use uid and gid from file
my ($uid,$gid)=(`ls -l $archive`=~/$ls_extract_id/o);
import Date::Parse if ($parsedates && $file eq '');
$line=1;
$state=0; $fsize=0; $f='';
$filefound=0;
while ($skipread || ($line++,$_=)) {
$skipread=0;
if($state == 0) { # expecting comments
$unified=$context=0;
$unified=1 if (/^--- /);
$context=1 if (/^\*\*\* /);
if (!$unified && !$context) {
$filefound=0 if($file ne '' && $filetoprint);
# shortcut for rmmod xor filefound
# - in rmmod we print if not found
# - in copyout (!rmmod) we print if found
print $fh $_ if($rmmod != $filefound);
next;
}
if($file eq '' && $filetoprint) {
printf $fh "-rw-r--r-- 1 %s %s %d %s %s%s\n", $uid, $gid, $fsize, datetime($time), $prefix, $f;
}
# start of new file
$_ .=; # steel next line, both formats
$line++;
if($unified) {
if(/$unified_header/o) {
($fsrc,$fdst,$time) = /$unified_extract/o;
} else {
error "Can't parse unified diff header";
}
} elsif($context) {
if(/$context_header/o) {
($fsrc,$fdst,$time) = /$context_extract/o;
} else {
error "Can't parse context diff header";
}
} else {
error "Unrecognized diff header";
}
$fsrc=patchfs_canonicalize_path($fsrc);
$fdst=patchfs_canonicalize_path($fdst);
if(wantarray) {
push @outsrc,$fsrc;
push @outdst,$fdst;
}
($f,$prefix)=diff_filename($fsrc,$fdst);
$filefound=($fsrc eq $file || $fdst eq $file);
$f="$f.diff";
$filetoprint=1;
$fsize=length;
print $fh $_ if($rmmod != $filefound);
$state=1;
} elsif($state == 1) { # expecting diff hunk headers, end of file or comments
if($unified) {
my ($a,$b,$c,$d);
($a,$b,$h_r1,$c,$d,$h_r2)=/$unified_hunk/o;
if(!defined($a) || !defined($c)) {
# hunk header does not come, a comment inside
# or maybe a new file, state 0 will decide
$skipread=1;
$state=0;
next;
}
$fsize+=length;
print $fh $_ if($rmmod != $filefound);
$h_r1=1 if(!defined($b));
$h_r2=1 if(!defined($d));
$h_add=$h_del=$h_ctx=0;
$state=2;
} elsif($context) {
if(!/$context_contents/o) {
$skipread=1;
$state=0;
next;
}
print $fh $_ if($rmmod != $filefound);
$fsize+=length;
}
} elsif($state == 2) { # expecting hunk contents
if($h_del + $h_ctx == $h_r1 && $h_add + $h_ctx == $h_r2) {
# hooray, end of hunk
# we optimistically ended with a hunk before but
# the line has been read already
$skipread=1;
$state=1;
next;
}
print $fh $_ if($rmmod != $filefound);
$fsize+=length;
my ($first)= /^(.)/;
if(ord($first) == ord('+')) { $h_add++; }
elsif(ord($first) == ord('-')) { $h_del++; }
elsif(ord($first) == ord(' ')) { $h_ctx++; }
elsif(ord($first) == ord('\\')) { 0; }
elsif(ord($first) == ord('@')) { error "Malformed hunk, header came too early"; }
else { error "Unrecognized character in hunk"; }
}
}
if($file eq '' && $filetoprint) {
printf $fh "-rw-r--r-- 1 %s %s %d %s %s%s\n", $uid, $gid, $fsize, datetime($time), $prefix, $f;
}
close($fh) if($file ne '');
return \(@outsrc, @outdst) if wantarray;
}
# list files affected by patch
sub list($) {
parse($_[0], *STDOUT, '', 0);
close(I);
}
# extract diff from patch
# IN: diff file to find
# IN: output file name
sub copyout($$) {
my ($file,$out)=@_;
$file=~s/^(PATCH-(CREATE|REMOVE)\/)?(.*)\.diff$/$3/;
$file = patchfs_canonicalize_path ($file);
open(FH, ">$out") or error("Cannot open output file");
parse('', *FH, $file, 0);
}
# remove diff(s) from patch
# IN: archive
# IN: file to delete
sub rm($$) {
my $archive=shift;
my ($tmp,$tmpname)=tempfile();
@_=map {scalar(s/^(PATCH-(CREATE|REMOVE)\/)?(.*)\.diff$/$3/,$_)} @_;
# just the first file for now
parse($archive, $tmp, $_[0], 1);
close I;
# replace archive
system("cat \Q$tmpname\E | " . myout($archive,0))==0
or error "Can't write to archive";
system("rm -f -- \Q$tmpname\E");
}
# append diff to archive
# IN: diff archive name
# IN: newly created file name in archive
# IN: the real source file
sub copyin($$$) {
# TODO: seems to be tricky. what to do?
# copyin of file which is already there may:
# * delete the original and copy only the new
# * just append the new hunks to the same file
# problems: may not be a valid diff, unmerged hunks
# * try to merge the two together
# ... but we do not want write patchutils again, right?
error "Copying files into diff not supported";
return;
my ($archive,$name,$src)=@_;
# in case we are appending another diff, we have
# to delete/merge all the files
open(DEVNULL, ">/dev/null");
open I, myin($src).'|';
my ($srclist,$dstlist)=parse($archive, *DEVNULL, '', 0);
close(I);
close(DEVNULL);
foreach(@$srclist) {
print("SRC: del $_\n");
}
foreach(@$dstlist) {
print("DST: del $_\n");
}
return;
# remove overwritten file
open I, myin($archive).'|';
rm ($archive, $name);
close I;
my $cmd1=myin("$src.diff");
my $cmd2=myout($archive,1);
system("$cmd1 | $cmd2")==0
or error "Can't write to archive";
}
if ($ARGV[0] eq 'list') {
open I, myin($ARGV[1]).'|';
list ($ARGV[1]);
exit 0;
} elsif ($ARGV[0] eq 'copyout') {
open I, myin($ARGV[1])."|";
copyout ($ARGV[2], $ARGV[3]);
exit 0;
} elsif ($ARGV[0] eq 'rm') {
open I, myin($ARGV[1])."|";
rm ($ARGV[1], $ARGV[2]);
exit 0;
} elsif ($ARGV[0] eq 'rmdir') {
exit 0;
} elsif ($ARGV[0] eq 'mkdir') {
exit 0;
} elsif ($ARGV[0] eq 'copyin') {
copyin ($ARGV[1], $ARGV[2], $ARGV[3]);
exit 0;
}
exit 1;
PK =Z[1ʈ urarnu W+A #! /bin/sh
#
# Written by andrey joukov
# (C) 1996 2:5020/337.13@fidonet.org
# Updated by christian.gennerat@alcatel.fr 1999
# Andrew V. Samoilov 2000
# beta version 2.0
#
# rar and unrar can be found on http://www.rarlabs.com/
RAR=rar
UNRAR=$RAR
# Prefer unrar (freeware). Try to find unrar in $PATH.
save_IFS="$IFS"; IFS=:
for dir in $PATH; do
IFS="$save_IFS"
test -z "$dir" && dir=.
if test -x "$dir/unrar" -a -f "$dir/unrar"; then
UNRAR="$dir/unrar"
break
fi
done
if [ ! -x $UNRAR -a -x $RAR ]; then
UNRAR=$RAR
fi
mcrarfs_list ()
{
$UNRAR v -c- -cfg- "$1" | awk -v uid=`id -u` -v gid=`id -g` '
BEGIN { flag=0 }
/^-------/ { flag++; if (flag > 1) exit 0; next }
flag==1 {
str = substr($0, 2)
getline
split($4, a, "-")
if (index($6, "D") != 0)
$6="drwxr-xr-x"
else
if (index($6, ".") != 0)
$6="-rw-r--r--"
printf "%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n", $6, uid, gid, $1, a[2], a[1], a[3], $5, str
}'
}
mcrarfs_copyin ()
{
# copyin by christian.gennerat@alcatel.fr
# preserve pwd. It is clean, but is it necessary?
pwd=`pwd`
# Create a directory and copy in it the tmp file with the good name
mkdir "$3.dir"
cd "$3.dir"
di="${2%/*}"
# if file is to be written upper in the archive tree, make fake dir
if test x"$di" != x"${2##*/}" ; then
mkdir -p "$di"
fi
cp -fp "$3" "$3.dir/$2"
$RAR a "$1" "$2" >/dev/null
cd "$pwd"
rm -rf "$3.dir"
}
mcrarfs_copyout ()
{
$UNRAR p -p- -c- -cfg- -inul "$1" "$2" > "$3"
}
mcrarfs_mkdir ()
{
# preserve pwd. It is clean, but is it necessary?
pwd=`pwd`
# Create a directory and create in it a tmp directory with the good name
dir=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-urar.XXXXXX"` || exit 1
cd "$dir"
mkdir -p "$2"
# rar cannot create an empty directory
touch "$2"/.rarfs
$RAR a -r "$1" "$2" >/dev/null
$RAR d "$1" "$2/.rarfs" >/dev/null
cd "$pwd"
rm -rf "$dir"
}
mcrarfs_rm ()
{
$RAR d "$1" "$2" >/dev/null
}
umask 077
cmd="$1"
shift
case "$cmd" in
# Workaround for a bug in mc - directories must precede files to
# avoid duplicate entries, so we sort output by filenames
list) mcrarfs_list "$@" | sort -k 8 ;;
rm) mcrarfs_rm "$@" ;;
rmdir) mcrarfs_rm "$@" ;;
mkdir) mcrarfs_mkdir "$@" ;;
copyin) mcrarfs_copyin "$@" ;;
copyout) mcrarfs_copyout "$@" ;;
*) exit 1 ;;
esac
exit 0
PK =Z[}v v uarjnu W+A #! /bin/sh
#
# Written by Viatcheslav Odintsov (2:5020/181)
# (C) 2002 ARJ Software Russia.
#
# This is an updated parser for ARJ archives in Midnight Commander. You need
# full ARJ rather than UNARJ. Open-source ARJ v 3.10 for Unix platforms can
# be obtained here:
#
# - http://www.sourceforge.net/projects/arj/
# - http://arj.sourceforge.net/
ARJ="arj -+ -ja1"
mcarjfs_list ()
{
$ARJ v "$1" | awk -v uuid=$(id -ru) '
{
if (($0 ~ /^[0-9]+\) .*/)||($0 ~ /^------------ ---------- ---------- -----/)){
if (filestr ~ /^[0-9]+\) .*/) {
printf "%s 1 %-8d %-8d %8d %02d-%02d-%02d %02d:%02d %s%s\n", perm, uid, gid, size, date[2], date[3], date[1], time[1], time[2], file, symfile
perm=""
file=""
symfile=""
filestr=""
}
}
if ($0 ~ /^[0-9]+\) .*/) {
filestr=$0
sub(/^[0-9]*\) /, "")
file=$0
uid=uuid
gid=0
}
if ($0 ~ /^.* [0-9]+[\t ]+[0-9]+ [0-9]\.[0-9][0-9][0-9] [0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9].*/) {
size=$3
split($6, date, "-")
split($7, time, ":")
if ($8 ~ /^[rwx-]/) {perm=$8;}
else {perm="-rw-r--r--"}
}
if ($0 ~ /^[\t ]+SymLink -> .*/) {
symfile = " -> "$3
perm="l"substr(perm, 2)
}
if ($0 ~ /^[\t ]+Owner: UID [0-9]+\, GID [0-9]+/) {
uid=$3
gid=$5
owner=1
}
}'
}
mcarjfs_copyout ()
{
$ARJ e -y "$1" "$2" -jw"$3" >/dev/null 2>/dev/null
}
umask 077
cmd="$1"
shift
case "$cmd" in
list) mcarjfs_list "$@" ;;
copyout) mcarjfs_copyout "$@" ;;
*) exit 1 ;;
esac
exit 0
PK =Z[7ƣ|) |) rpmnu W+A #! /bin/sh
# VFS-wrapper for RPM (and src.rpm) files
#
# Copyright (C) 1996-2004,2009
# Free Software Foundation, Inc.
#
# Written by
# Erik Troan 1996
# Jakub Jelinek 1996, 2004
# Tomasz Kłoczko 1997
# Wojtek Pilorz
# 1997: minor changes
# Michele Marziani
# 1997: minor changes
# Marc Merlin 1998
# 1998: bug files
# Michal Svec 2000
# 2000: locale bugfix
# Andrew V. Samoilov
# 2004: Whitespace(s) & single quote(s) in filename workaround
# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=64007
# Slava Zanko
# 2009: Totally rewrited.
# ALTLinux users have strange artefacts with single quote(s)
#
# This file is part of the Midnight Commander.
#
# The Midnight Commander 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 2 of the
# License, or (at your option) any later version.
#
# The Midnight Commander 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
# override any locale for dates
unset LC_ALL
LC_TIME=C
export LC_TIME
if rpmbuild --version >/dev/null 2>&1; then
RPMBUILD="rpmbuild"
else
RPMBUILD="rpm"
fi
if rpm --nosignature --version >/dev/null 2>&1; then
RPM="rpm --nosignature"
RPMBUILD="$RPMBUILD --nosignature"
else
RPM="rpm"
fi
RPM2CPIO="rpm2cpio"
SED="sed"
# Surround the whole filename with single quotes and handle specially
# \', ' and \ at the end of the string.
SEDCMD="s/ /\\\\ /g;s/'/\\\\'/g;s/\"/\\\\\"/g"
param=$1; shift
rpm_filename=$1; shift
FILEPREF="-r--r--r-- 1 root root "
mcrpmfs_getSupportedTags()
{
rpm --querytags
}
mcrpmfs_getDesription()
{
$RPM -qip "`echo ${rpm_filename}| $SED "${SEDCMD}"`"
}
mcrpmfs_getAllNeededTags()
{
supportedTags=`mcrpmfs_getSupportedTags`
if test "`echo supportedTags | grep -c CONFLICTS`" -eq 1; then
tag_CONFLICTS="|CONFLICTS=%{CONFLICTS}"
else
tag_CONFLICTS=""
fi
$RPM -qp --qf \
"|NAME=%{NAME}"\
"|VERSION=%{VERSION}"\
"|RELEASE=%{RELEASE}"\
"|DISTRIBUTION=%{DISTRIBUTION}"\
"|VENDOR=%{VENDOR}"\
"|DESCRIPTION=%{DESCRIPTION}"\
"|SUMMARY=%{SUMMARY}"\
"|URL=%{URL}"\
"|EPOCH=%{EPOCH}"\
"|LICENSE=%{LICENSE}"\
"|REQUIRENAME=%{REQUIRENAME}"\
"|OBSOLETES=%{OBSOLETES}"\
"|PROVIDES=%{PROVIDES}"\
${tag_CONFLICTS}\
"|PACKAGER=%{PACKAGER}" \
"`echo ${rpm_filename}| $SED "${SEDCMD}"`"
}
mcrpmfs_getRawOneTag()
{
$RPM -qp --qf "$1" "`echo ${rpm_filename}| $SED "${SEDCMD}"`"
}
mcrpmfs_getOneTag()
{
echo $AllTAGS | sed "s/.*|${1}=//" | cut -d '|' -f 1
}
AllTAGS=`mcrpmfs_getAllNeededTags "$1"`
mcrpmfs_printOneMetaInfo()
{
if test "$3" = "raw"; then
metaInfo=`mcrpmfs_getRawOneTag "%{$2}"`
else
metaInfo=`mcrpmfs_getOneTag "$2"`
fi
if test -n "${metaInfo}" -a "${metaInfo}" != "(none)"; then
echo "${FILEPREF} 0 ${DATE} ${1}"
return 0
fi
return 1
}
mcrpmfs_list_fastRPM ()
{
echo "$FILEPREF 0 $DATE INFO/DISTRIBUTION"
echo "$FILEPREF 0 $DATE INFO/VENDOR"
echo "$FILEPREF 0 $DATE INFO/DESCRIPTION"
echo "$FILEPREF 0 $DATE INFO/SUMMARY"
echo "dr-xr-xr-x 1 root root 0 $DATE INFO/SCRIPTS"
echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PREIN"
echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTIN"
echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PREUN"
echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTUN"
echo "$FILEPREF 0 $DATE INFO/SCRIPTS/VERIFYSCRIPT"
echo "$FILEPREF 0 $DATE INFO/SCRIPTS/ALL"
echo "$FILEPREF 0 $DATE INFO/PACKAGER"
echo "$FILEPREF 0 $DATE INFO/URL"
echo "$FILEPREF 0 $DATE INFO/EPOCH"
echo "$FILEPREF 0 $DATE INFO/LICENSE"
echo "$FILEPREF 0 $DATE INFO/REQUIRENAME"
echo "$FILEPREF 0 $DATE INFO/OBSOLETES"
echo "$FILEPREF 0 $DATE INFO/PROVIDES"
echo "$FILEPREF 0 $DATE INFO/CONFLICTS"
echo "$FILEPREF 0 $DATE INFO/CHANGELOG"
}
mcrpmfs_list_fullRPM ()
{
mcrpmfs_printOneMetaInfo "INFO/DISTRIBUTION" "DISTRIBUTION"
mcrpmfs_printOneMetaInfo "INFO/VENDOR" "VENDOR"
mcrpmfs_printOneMetaInfo "INFO/DESCRIPTION" "DESCRIPTION"
mcrpmfs_printOneMetaInfo "INFO/SUMMARY" "SUMMARY"
if test "`mcrpmfs_getRawOneTag \"%{RPMTAG_PREIN}%{RPMTAG_POSTIN}%{RPMTAG_PREUN}%{RPMTAG_POSTUN}%{VERIFYSCRIPT}\"`" != "(none)(none)(none)(none)(none)"; then
mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/PREIN" "RPMTAG_PREIN" "raw"
mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/POSTIN" "RPMTAG_POSTIN" "raw"
mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/PREUN" "RPMTAG_PREUN" "raw"
mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/POSTUN" "RPMTAG_POSTUN" "raw"
mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/VERIFYSCRIPT" "VERIFYSCRIPT" "raw"
echo "$FILEPREF 0 $DATE INFO/SCRIPTS/ALL"
fi
mcrpmfs_printOneMetaInfo "INFO/PACKAGER" "PACKAGER"
mcrpmfs_printOneMetaInfo "INFO/URL" "URL"
mcrpmfs_printOneMetaInfo "INFO/EPOCH" "EPOCH"
mcrpmfs_printOneMetaInfo "INFO/LICENSE" "LICENSE"
mcrpmfs_printOneMetaInfo "INFO/REQUIRENAME" "REQUIRENAME"
mcrpmfs_printOneMetaInfo "INFO/OBSOLETES" "OBSOLETES"
mcrpmfs_printOneMetaInfo "INFO/PROVIDES" "PROVIDES"
mcrpmfs_printOneMetaInfo "INFO/CONFLICTS" "CONFLICTS"
mcrpmfs_printOneMetaInfo "INFO/CHANGELOG" "CHANGELOGTEXT" "raw"
}
mcrpmfs_list ()
{
# set MCFASTRPM_DFLT to 1 for faster rpm files handling by default, to 0 for
# slower handling
MCFASTRPM_DFLT=0
if test -z "$MCFASTRPM"; then
MCFASTRPM=$MCFASTRPM_DFLT
fi
DESC=`mcrpmfs_getDesription 2>/dev/null` || {
echo "$FILEPREF 0 "`date +"%b %d %H:%M"`" ERROR"
exit 1
}
DATE=`mcrpmfs_getRawOneTag "%{BUILDTIME:date}\n" | cut -c 5-11,21-24`
HEADERSIZE=`echo "$DESC" | wc -c`
printf '%s %s %s HEADER\n' "${FILEPREF}" "${HEADERSIZE}" "${DATE}"
echo "-r-xr-xr-x 1 root root 39 $DATE INSTALL"
case "${rpm_filename}" in
*.src.rpm)
echo "-r-xr-xr-x 1 root root 39 $DATE REBUILD"
;;
*)
echo "-r-xr-xr-x 1 root root 39 $DATE UPGRADE"
;;
esac
echo "dr-xr-xr-x 3 root root 0 $DATE INFO"
echo "$FILEPREF 0 $DATE INFO/NAME-VERSION-RELEASE"
echo "$FILEPREF 0 $DATE INFO/GROUP"
echo "$FILEPREF 0 $DATE INFO/BUILDHOST"
echo "$FILEPREF 0 $DATE INFO/SOURCERPM"
echo "$FILEPREF 0 $DATE INFO/BUILDTIME"
echo "$FILEPREF 0 $DATE INFO/RPMVERSION"
echo "$FILEPREF 0 $DATE INFO/OS"
echo "$FILEPREF 0 $DATE INFO/SIZE"
if test "$MCFASTRPM" = 0 ; then
mcrpmfs_list_fullRPM
else
mcrpmfs_list_fastRPM
fi
echo "$FILEPREF 0 $DATE CONTENTS.cpio"
}
mcrpmfs_copyout ()
{
case "$1" in
HEADER) mcrpmfs_getDesription > "$2"; exit 0;;
INSTALL)
echo "# Run this script to install this RPM package" > "$2"
echo $RPM -ivh "`echo ${rpm_filename}| $SED "${SEDCMD}"`" >> "$2"
exit 0
;;
UPGRADE)
echo "# Run this to upgrade this RPM package" > "$2"
echo $RPM -Uvh "`echo ${rpm_filename}| $SED "${SEDCMD}"`" >> "$2"
exit 0
;;
REBUILD)
echo "# Run this to rebuild this RPM package" > "$2"
echo $RPMBUILD --rebuild "`echo ${rpm_filename}| $SED "${SEDCMD}"`" >> "$2"
exit 0
;;
ERROR) mcrpmfs_getDesription > /dev/null 2> "$2"; exit 0;;
INFO/NAME-VERSION-RELEASE)
echo `mcrpmfs_getOneTag "NAME"`-`mcrpmfs_getOneTag "VERSION"`-`mcrpmfs_getOneTag "RELEASE"` > "$2"
exit 0
;;
INFO/RELEASE) mcrpmfs_getOneTag "RELEASE" > "$2"; exit 0;;
INFO/GROUP) mcrpmfs_getRawOneTag "%{GROUP}\n" > "$2"; exit 0;;
INFO/DISTRIBUTION) mcrpmfs_getOneTag "DISTRIBUTION" > "$2"; exit 0;;
INFO/VENDOR) mcrpmfs_getOneTag "VENDOR" > "$2"; exit 0;;
INFO/BUILDHOST) mcrpmfs_getRawOneTag "%{BUILDHOST}\n" > "$2"; exit 0;;
INFO/SOURCERPM) mcrpmfs_getRawOneTag "%{SOURCERPM}\n" > "$2"; exit 0;;
INFO/DESCRIPTION) mcrpmfs_getRawOneTag "%{DESCRIPTION}\n" > "$2"; exit 0;;
INFO/PACKAGER) mcrpmfs_getOneTag "PACKAGER" > "$2"; exit 0;;
INFO/URL) mcrpmfs_getOneTag "URL" >"$2"; exit 0;;
INFO/BUILDTIME) mcrpmfs_getRawOneTag "%{BUILDTIME:date}\n" >"$2"; exit 0;;
INFO/EPOCH) mcrpmfs_getOneTag "EPOCH" >"$2"; exit 0;;
INFO/LICENSE) mcrpmfs_getOneTag "LICENSE" >"$2"; exit 0;;
INFO/RPMVERSION) mcrpmfs_getRawOneTag "%{RPMVERSION}\n" >"$2"; exit 0;;
INFO/REQUIRENAME) mcrpmfs_getRawOneTag "[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]" >"$2"; exit 0;;
INFO/PROVIDES) mcrpmfs_getRawOneTag "[%{PROVIDES}\n]" >"$2"; exit 0;;
INFO/SCRIPTS/PREIN) mcrpmfs_getRawOneTag "%{RPMTAG_PREIN}\n" >"$2"; exit 0;;
INFO/SCRIPTS/POSTIN) mcrpmfs_getRawOneTag "%{RPMTAG_POSTIN}\n" >"$2"; exit 0;;
INFO/SCRIPTS/PREUN) mcrpmfs_getRawOneTag "%{RPMTAG_PREUN}\n" >"$2"; exit 0;;
INFO/SCRIPTS/POSTUN) mcrpmfs_getRawOneTag "%{RPMTAG_POSTUN}\n" >"$2"; exit 0;;
INFO/SCRIPTS/VERIFYSCRIPT) mcrpmfs_getRawOneTag "%{VERIFYSCRIPT}\n" > "$2"; exit 0;;
INFO/SCRIPTS/ALL) $RPM -qp --scripts "`echo ${rpm_filename}| $SED "${SEDCMD}"`" > "$2"; exit 0;;
INFO/SUMMARY) mcrpmfs_getRawOneTag "%{SUMMARY}\n" > "$2"; exit 0;;
INFO/OS) mcrpmfs_getRawOneTag "%{OS}\n" > "$2"; exit 0;;
INFO/CHANGELOG) mcrpmfs_getRawOneTag "[* %{CHANGELOGTIME:date} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]\n" > "$2"; exit 0;;
INFO/SIZE) mcrpmfs_getRawOneTag "%{SIZE} bytes\n" > "$2"; exit 0;;
INFO/OBSOLETES) mcrpmfs_getRawOneTag "[%{OBSOLETENAME} %|OBSOLETEFLAGS?{%{OBSOLETEFLAGS:depflags} %{OBSOLETEVERSION}}:{}|\n]" > "$2"; exit 0;;
INFO/CONFLICTS) mcrpmfs_getRawOneTag "[%{CONFLICTNAME} %{CONFLICTFLAGS:depflags} %{CONFLICTVERSION}\n]" >"$2"; exit 0;;
CONTENTS.cpio) $RPM2CPIO "`echo ${rpm_filename}| $SED "${SEDCMD}"`" > "$2"; exit 0;;
*)
;;
esac
}
mcrpmfs_run ()
{
case "$1" in
INSTALL) echo "Installing \"\"$f\"\""; $RPM -ivh "`echo ${rpm_filename}| $SED "${SEDCMD}"`"; exit 0;;
UPGRADE) echo "Upgrading \"\"$f\"\""; $RPM -Uvh "`echo ${rpm_filename}| $SED "${SEDCMD}"`"; exit 0;;
REBUILD) echo "Rebuilding \"${rpm_filename}\""; $RPMBUILD --rebuild "`echo ${rpm_filename}| $SED "${SEDCMD}"`"; exit 0;;
esac
}
umask 077
case "${param}" in
list) mcrpmfs_list; exit 0;;
copyout) mcrpmfs_copyout "$1" "$2"; exit 0;;
run) mcrpmfs_run "$1"; exit 1;;
esac
exit 1
PK =Z[Wp a+nu W+A #! /usr/bin/perl -w
#
# External filesystem for mc, using mtools
# Written Ludek Brukner , 1997
# Much improved by Tom Perkins <968794022@noid.net>, 2000
#
# WARNING - This software is ALPHA - Absolutely NO WARRANTY
#
# These mtools components must be in PATH for this to work
sub quote {
$_ = shift(@_);
s/([^\w\/.+-])/\\$1/g;
return($_);
}
$mmd = "mmd";
$mrd = "mrd";
$mdel = "mdel";
$mdir = "mdir -a";
$mcopy = "mcopy -noQ";
$0 =~ s|.*/||;
$qdisk = quote($0);
$ENV{MTOOLS_DATE_STRING} = "mm-dd-yyyy";
$ENV{MTOOLS_TWENTY_FOUR_HOUR_CLOCK} = "1";
SWITCH: for ( $ARGV[0] ) {
/list/ && do {
@dirs = get_dirs("");
while ($dir = shift(@dirs)) {
push @dirs, get_dirs("$dir/");
} exit 0; };
/mkdir/ && do {
shift; shift;
exit 1 if scalar(@ARGV) != 1;
$qname = quote($ARGV[0]);
system("$mmd $qdisk:/$qname >/dev/null");
exit 0; };
/rmdir/ && do {
shift; shift;
exit 1 if scalar(@ARGV) != 1;
$qname = quote($ARGV[0]);
system("$mrd $qdisk:/$qname >/dev/null");
exit 0; };
/rm/ && do {
shift; shift;
exit 1 if scalar(@ARGV) != 1;
$qname = quote($ARGV[0]);
system("$mdel $qdisk:/$qname >/dev/null");
exit 0; };
/copyout/ && do {
shift; shift;
exit 1 if scalar(@ARGV) != 2;
( $qsrc, $qdest ) = @ARGV;
$qsrc = quote($qsrc);
$qdest = quote($qdest);
system("$mcopy $qdisk:/$qsrc $qdest >/dev/null");
exit 0; };
/copyin/ && do {
shift; shift;
exit 1 if scalar(@ARGV) != 2;
( $qdest, $qsrc ) = @ARGV;
$qsrc = quote($qsrc);
$qdest = quote($qdest);
system("$mcopy $qsrc $qdisk:/$qdest >/dev/null");
exit 0; };
/.*/ && do { # an unfamiliar command
exit 1; };
}
sub get_dirs {
my ($path, $name, $size, $date, $time, $longname, @lst, @rv);
$path = shift(@_);
my $qpath = quote($path);
@rv = ();
open(FILE,"$mdir $qdisk:/$qpath |");
while ( ) {
chomp();
/^ / && next; # ignore `non-file' lines
m{^Directory for $0:/}i && next; # ignore `non-file' lines
/^$/ && next; # ignore empty lines
/^\.\.?/ && next; # ignore `.' and `..'
$name = substr($_,0,12);
$name =~ s/^([^ ]*) +([^ ]+)[ \t]*$/$1.$2/;
$name =~ s/[ .]+$//;
$_ = substr($_,12);
s/^[ ]+//;
($size,$date,$time,$longname) = split(/[ \t]+/, $_, 4);
defined $time || next;
# process "am" and "pm". Should not be needed if
# MTOOLS_TWENTY_FOUR_HOUR_CLOCK is respected.
@lst = split(/([:ap])/, $time);
$lst[0] += 12 if (defined $lst[3] && $lst[3] eq "p");
$time = sprintf("%02d:%02d", $lst[0], $lst[2]);
@lst = split(/-/, $date);
$lst[2] %= 100 if ($lst[2] > 100);
$date = sprintf ("%02d-%02d-%02d", @lst);
$name = $path . lc(($longname) ? $longname : $name);
if ($size =~ /DIR/) {
printf("drwxr-xr-x 1 %-8d %-8d %8d %s %s %s\n",
0, 0, 0, $date, $time, $name);
push @rv, $name;
} else {
printf("-rw-r--r-- 1 %-8d %-8d %8d %s %s %s\n",
0, 0, $size, $date, $time, $name);
}
}
close(FILE);
return @rv;
}
1;
PK =Z[vG G debnu W+A #! /usr/bin/perl
#
# Written by Fernando Alegre 1996
#
# Applied patch by Dimitri Maziuk 1997
# (to handle new tar format)
#
# Modified by Fernando Alegre 1997
# (to handle both new and old tar formats)
#
# Modified by Patrik Rak 1998
# (add by Michael Bramer Debian-mc-maintainer )
# (to allow access to package control files)
#
# Modified by Martin Bialasinski 1999
# (deal with change in tar format)
#
#
# Copyright (C) 1997 Free Software Foundation
#
sub quote {
$_ = shift(@_);
s/([^\w\/.+-])/\\$1/g;
return($_);
}
sub mcdebfs_list
{
#
# CAVEAT: Hard links are listed as if they were symlinks
# Empty directories do not appear at all
#
local($archivename)=@_;
local $qarchivename = quote($archivename);
chop($date=`LC_ALL=C date "+%b %d %H:%M"`);
chop($info_size=`LC_ALL=C dpkg -I $qarchivename | wc -c`);
$install_size=length($pressinstall);
print "dr-xr-xr-x 1 root root 0 $date CONTENTS\n";
print "dr-xr-xr-x 1 root root 0 $date DEBIAN\n";
print "-r--r--r-- 1 root root $info_size $date INFO\n";
print "-r-xr--r-- 1 root root $install_size $date INSTALL\n";
if ( open(PIPEIN, "dpkg-deb -c $qarchivename |") )
{
while()
{
split;
$perm=$_[0]; $owgr=$_[1]; $size=$_[2];
if($_[3] =~ /^\d\d\d\d\-/) { # New tar format
($year,$mon,$day) = split(/-/,$_[3]);
$month = ("Gee","Jan","Feb","Mar","Apr","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec")[$mon] || "Gee";
$time=$_[4];
$pathindex=5;
}
else {
$mstring='GeeJanFebMarAprMayJunJulAugSepOctNovDec';
$month=$_[3];
$mon=index($mstring,$month) / 3;
$day=$_[4];
$time=$_[5];
$year=$_[6];
$pathindex=7;
}
$path=$_[$pathindex++];
$arrow=$_[$pathindex++];
$link=$_[$pathindex++];
$link2=$_[$pathindex++];
$owgr=~s!/! !;
if($arrow eq 'link')
{
# report hard links as soft links
$arrow='->'; $link="/$link2";
substr($perm, 0, 1) = "l";
}
if($arrow ne '')
{
$arrow=' ' . $arrow;
$link= ' ' . $link;
}
$now=`date "+%Y %m"`;
($thisyear, $thismon) = split(/ /, $now);
# show time for files younger than 6 months
# but not for files with dates in the future
if ($year * 12 + $mon > $thisyear * 12 + $thismon - 6 &&
$year * 12 + $mon <= $thisyear * 12 + $thismon) {
print "$perm 1 $owgr $size $month $day $time CONTENTS/$path$arrow$link\n";
} else {
print "$perm 1 $owgr $size $month $day $year CONTENTS/$path$arrow$link\n";
}
}
}
if ( open(PIPEIN, "LC_ALL=C dpkg-deb -I $qarchivename |") )
{
while()
{
split;
$size=$_[0];
last if $size =~ /:/;
next if $size !~ /\d+/;
if($_[4] eq '*')
{
$perm='-r-xr-xr-x';
$name=$_[5];
}
else
{
$perm='-r--r--r--';
$name=$_[4];
}
print "$perm 1 root root $size $date DEBIAN/$name\n";
}
}
}
sub mcdebfs_copyout
{
local($archive,$filename,$destfile)=@_;
local $qarchive = quote($archive);
local $qfilename = quote($filename);
local $qdestfile = quote($destfile);
if($filename eq "INFO")
{
system("dpkg-deb -I $qarchive > $qdestfile");
}
elsif($filename =~ /^DEBIAN/)
{
$qfilename=~s!^DEBIAN/!!;
system("dpkg-deb -I $qarchive $qfilename > $qdestfile");
}
elsif($filename eq "INSTALL")
{
if ( open(FILEOUT,">$destfile") )
{
print FILEOUT $pressinstall;
close FILEOUT;
system("chmod a+x $qdestfile");
}
}
else
{
# files can be prepended with ./ or not, depending on the version of tar
$qfilename=~s!^CONTENTS/!!;
system("dpkg-deb --fsys-tarfile $qarchive | tar xOf - $qfilename ./$qfilename > $qdestfile 2>/dev/null");
}
}
sub mcdebfs_run
{
local($archive,$filename)=@_;
local $qarchive = quote($archive);
if($filename eq "INSTALL")
{
print "Installing $archive\n";
system("dpkg -i $qarchive");
}
else
{
use File::Temp qw(mkdtemp);
my $template = "/tmp/mcdebfs.run.XXXXXX";
$template="$ENV{MC_TMPDIR}/mcdebfs.XXXXXX" if ($ENV{MC_TMPDIR});
$tmpdir = mkdtemp($template);
$tmpcmd="$tmpdir/run";
&mcdebfs_copyout($archive, $filename, $tmpcmd);
system("chmod u+x $tmpcmd");
system($tmpcmd);
unlink($tmpcmd);
rmdir($tmpdir);
}
}
$pressinstall=<