summaryrefslogtreecommitdiffstats
path: root/src/vfs/extfs/helpers/deb.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/vfs/extfs/helpers/deb.in')
-rw-r--r--src/vfs/extfs/helpers/deb.in203
1 files changed, 203 insertions, 0 deletions
diff --git a/src/vfs/extfs/helpers/deb.in b/src/vfs/extfs/helpers/deb.in
new file mode 100644
index 0000000..abc98aa
--- /dev/null
+++ b/src/vfs/extfs/helpers/deb.in
@@ -0,0 +1,203 @@
+#! @PERL@
+#
+# Written by Fernando Alegre <alegre@debian.org> 1996
+#
+# Applied patch by Dimitri Maziuk <emaziuk@curtin.edu.au> 1997
+# (to handle new tar format)
+#
+# Modified by Fernando Alegre <alegre@debian.org> 1997
+# (to handle both new and old tar formats)
+#
+# Modified by Patrik Rak <prak@post.cz> 1998
+# (add by Michael Bramer Debian-mc-maintainer <grisu@debian.org>)
+# (to allow access to package control files)
+#
+# Modified by Martin Bialasinski <martinb@debian.org> 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=`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, "LC_ALL=C dpkg-deb -c $qarchivename |") )
+ {
+ while(<PIPEIN>)
+ {
+ @_ = 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++];
+ # remove leading ./
+ $path=~s/^\.\///;
+ next if ($path eq '');
+ $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(<PIPEIN>)
+ {
+ @_ = 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=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to reinstall everything...
+
+This is not a real file. It is a way to install the package you are browsing.
+
+To install this package go back to the panel and press Enter on this file.
+
+In Debian systems, a package is automatically upgraded when you install a new
+version of it. There is no special upgrade option. Install always works.
+
+EOInstall
+
+umask 077;
+
+if($ARGV[0] eq "list") { shift; &mcdebfs_list(@ARGV); exit 0; }
+elsif($ARGV[0] eq "copyout") { shift; &mcdebfs_copyout(@ARGV); exit 0; }
+elsif($ARGV[0] eq "run") { shift; &mcdebfs_run(@ARGV); exit 0; }
+
+exit 1;
+