#! /usr/bin/perl -w # # $Id$ # External mount command for mount(8) to interface lufsmount(1) # Copyright (C) 2003 Jan Kratochvil # # 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; exactly version 2 of June 1991 is required # # 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, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA use strict; use Carp qw(cluck confess); use Getopt::Long; # Do not use any non-core Perl modules here. # Be perl-5.0 compatible (is it needed if we require Linux kernel >= 2.4 ?) my $vardir='@localstatedir@/lib/captive'; $vardir=~s#\$\Q{prefix}\E#'@prefix@';#ge; $vardir="/var/lib/captive" if $vardir=~/^@/; my $lufsmount_bin='@bindir@/lufsmount'; $lufsmount_bin=~s#\$\Q{exec_prefix}\E#'@exec_prefix@';#ge; $lufsmount_bin=~s#\$\Q{prefix}\E#'@prefix@';#ge; $lufsmount_bin="/usr/bin/lufsmount" if $lufsmount_bin=~/^@/; my $captive_sandbox_server_bin='@sbindir@/captive-sandbox-server'; $captive_sandbox_server_bin=~s#\$\Q{exec_prefix}\E#'@exec_prefix@';#ge; $captive_sandbox_server_bin=~s#\$\Q{prefix}\E#'@prefix@';#ge; $captive_sandbox_server_bin="/usr/sbin/captive-sandbox-server" if $captive_sandbox_server_bin=~/^@/; my $fsname=($0=~m#([^/]*)$#)[0] or die "Cannot detetect my basename from: $0"; $fsname=~s/^mount[.]captive-// or die "Cannot detect captive filesystem module from my name: $fsname"; my $image=shift @ARGV or die "Missing argv[1]: device or image pathname"; -r $image or die "Image pathname not readable: $image"; my $dir=shift @ARGV or die "Missing argv[2]: mount point directory"; -d $dir or die "Mount point directory not a valid directory: $dir"; shift @ARGV if my $nomtab =$ARGV[0] && $ARGV[0] eq "-n"; shift @ARGV if my $verbose=$ARGV[0] && $ARGV[0] eq "-v"; my $oo=""; do { shift @ARGV; $oo=shift @ARGV; } if $ARGV[0] && $ARGV[0] eq "-o"; die "Excessive arguments: @ARGV" if @ARGV; my $filesystem=$vardir."/".$fsname.".sys"; -r $filesystem or die "W32 filesystem .sys module not readable: $filesystem"; my $ntoskrnl=$vardir."/ntoskrnl.exe"; -r $ntoskrnl or die "W32 ntoskrnl.exe not readable: $ntoskrnl"; # Double-dashes are generally optional here. $oo="" .($fsname eq "cdfs" ? "--cdrom,--ro," : "--disk,--rw,") ."--load-module=$ntoskrnl,--filesystem=$filesystem," ."--sandbox-server=$captive_sandbox_server_bin," ."--bug-pathname=$vardir/bug-%FT%T.captivebug.xml.gz," ."--syslog," ."mntent.mnt_fsname=$image,mntent.mnt_type=captive-$fsname," # Double-dashes forbidden. ."dir_cache_entries=0," ."image=$image," .$oo; warn "$0: '-n' not supported - ignored" if $nomtab; # Use "'$oo'" to permit another expansion by bash(1) during lufsmnt(8) execution. my @argv=($lufsmount_bin,"captivefs://",$dir,"-o","'$oo'"); print STDERR "$0: @argv\n" if $verbose; exec $lufsmount_bin @argv; die "Failed to execute: @argv";