File x2gomountdirs of Package x2go

#!/usr/bin/perl
use strict;

my $type=shift;
my $session=shift;
my $user=shift;
my $key=shift;
my @dl;
my $i=0;
@dl[$i]=shift;
while(@dl[$i])
{
    $i++;
    @dl[$i]=shift;
}
my $dirlist=join(" ",@dl);
chop($dirlist);
my $reverse=0;
my $port="22";
print "dirs:$dirlist\n";
if($dirlist =~ m/__REVERSESSH_PORT__/)
{
    @dl=split("__REVERSESSH_PORT__","$dirlist");
    $dirlist=@dl[0];
    $port=@dl[1];
    $reverse=1;
}

if($dirlist =~ m/__SSH_PORT__/)
{
   @dl=split("__SSH_PORT__","$dirlist");
   $dirlist=@dl[0];
   $port=@dl[1];
}

print "ssh port:$port\n";
my $host;
if($reverse == 0)
{
   $host=(split(" ",$ENV{'SSH_CLIENT'}))[0];
}
else
{
  $host='127.0.0.1';
}
print "Host:$host\n";
print "User:$user\n";

open (F,"<$key");
my @lines=<F>;
close(F);

my $lines=join("",@lines);
my $dsa_key=(split("----BEGIN RSA IDENTITY----",$lines))[0];
my $rsa_identity=(split("----BEGIN RSA IDENTITY----",$lines))[1];

open (F,">$key");
print F $dsa_key;
close(F);

open (F,">$key.ident");
print F "$host $rsa_identity";
close(F);


my $mdir="/tmp/$ENV{'USER'}_media";
my $ldir="$ENV{'HOME'}/media";
my $spooldir="$ENV{'HOME'}/.x2go/C-$session/spool";

if(! -e $mdir)
{
   mkdir($mdir);
}
chmod(0700,$mdir);

if(! -e $spooldir)
{
   mkdir($spooldir);
}
chmod(0700,$spooldir);

if( -d $ldir)
{
    rmdir($ldir);
}

if( ! -l $ldir)
{
   system ("ln -s $mdir $ldir");
}


my $uname=$ENV{'USER'};

my @dirs=split(':',$dirlist);
for(my $i=0;$i<@dirs;$i++)
{
       my $printspool=0;
       my $mntpath;
       if(@dirs[$i]=~m/__PRINT_SPOOL_/)
       {
            @dirs[$i]=~s/__PRINT_SPOOL_//;
            $printspool=1;
            $mntpath=$spooldir;
       }
       else
       {
            my $p=@dirs[$i];
            if($type ne "dir")
            {
                $p=~s/\/ramdrive\/mnt\///;
            }
            $p=~s/\//_/g;
            $p=~s/ /_/g;
            $p=~s/_cygdrive_//g;
            $p=~s/~//g;
            mkdir("$mdir/$p");
            $mntpath="$mdir/$p";
       }

       print "starting:sudo x2gopgwrapper insertmount $session \"$mntpath\" $host\n";
       my $outp=`sudo x2gopgwrapper insertmount $session \"$mntpath\" $host`;
       print "result: $outp";
       if($outp =~ m/INSERT/)
       {
            print "inserted,\nsshfs  -o IdentityFile=$key,UserKnownHostsFile=$key.ident $user\@$host:\"@dirs[$i]\" \"$mntpath\" -p $port\n";
            if(system("sshfs  -o Cipher=blowfish,IdentityFile=$key,UserKnownHostsFile=$key.ident $user\@$host:\"@dirs[$i]\" \"$mntpath\" -p $port 2>>~/mounts.log")==0)
            {   
        	print "mount @dirs[$i] ok\n";
		if(! $printspool)
		{
        	    my $fname="$ENV{'HOME'}/Desktop";
		    my $p=@dirs[$i];
        	    $p=~s/\/cygdrive\///g;
            	    $p=~s/\//_/g;
		    $fname="$fname/$p";
		    if($type eq "dir")
		    {
	    		$fname="$fname(sshfs-disk)";
		    }
		    else
		    {
			if($fname =~ m/CDROM/)
			{
	    	    	    $fname="$fname(sshfs-cdrom)";
			}
			else
			{
	    	    	    $fname="$fname(sshfs-removable)";
			}
			$fname=~s/_ramdrive_mnt_//;
		    }
		    print "fname: $fname\n";
		    open(F,">$fname");
		    print F "$mntpath\n$session\n\n\0";
		    close(F);
		}
    	    }
    	    else
    	    {
               print "mount @dirs[$i] failed\n";
               `sudo x2gopgwrapper deletemount $session \"$mntpath\"`;
	       rmdir($mntpath);
    	    }
       }
       else
       {
            print "insertion failed(already mounted?), not mounting\n";
       }
}

unlink($key);
unlink("$key.ident");
openSUSE Build Service is sponsored by